jeffersongoncalves/filament-saved-filter
filament-saved-filter by Jefferson Goncalves lets Filament users save and reuse table filter combinations, making admin panels and dashboards faster to navigate. Persist frequently used filters and restore them with a click.
Architecture fit
ManageRelatedRecords pages (tabs included) and custom pages using InteractsWithTable now participate. Outside list pages, views are keyed by page class, which correctly prevents cross-contamination with the resource list's views — but also means page class identity becomes part of the persistence key (see risks).configureSavedFilters() inside their own table(). That is a per-page opt-in, consistent with the fluent builder-level configuration already established, but it is a silent-failure API: forget the call and the feature simply doesn't appear.laravel-saved-filter ^1.10 (previously ^1.1). The pair remains a single deployable unit; the dependency floor has moved substantially.?view=<id>. This turns "which view is active" from client state into a routable, shareable, and therefore enumerable and authorization-relevant identifier.laravel-report-url for reports too large to attach (temporary download links).Integration feasibility
^1.10, republished migrations, php artisan migrate, then the package. Any custom page work is additional developer effort.?view= authorization) cannot be resolved from the notes.Technical risk
vendor:publish --tag="saved-filter-migrations" writes into database/migrations. If it overwrites a previously published file that is already recorded in the migrations table, the new timezone/context columns will never be applied — migrate sees the filename as already run. Confirm the dependency ships a new, later-timestamped migration rather than editing the existing one, and diff the published directory before running anything.?view=<id> is an IDOR surface (high): integer IDs in URLs invite enumeration. Applying a view by ID must re-check owner/tenant/shared scope server-side on every request, not just at render time. A missing check leaks another user's filter state, grouping, and — per the previous assessment — potentially a colleague's name.?view=4&filters[...]) produce non-obvious effective state that support will have to explain.?view=4 in circulation. Decide and document whether that degrades silently to the default view or errors.timezone → app default), and ambiguity about whether the scheduler or the queue worker evaluates the schedule. Duplicate or missed sends around DST transitions are the classic failure."Name (2)" needs defined behaviour on repeated imports (does it reach (3)? does it collide with an existing literal "Name (2)"?).laravel-report-url (low/medium): absent → large reports presumably fall back to attachment and may bounce on mail size limits; present → temporary signed links with expiry and temp-file cleanup obligations.laravel-saved-filter <1.10 yields hard failure or silent feature absence; the acceptable window is narrower than before.3.1.0 while the notes describe 1.6.0. Confirm which artifact is being evaluated before pinning.Key questions
3.1.0, notes say 1.6.0? Confirm the exact version to pin.^1.10 upgrade ship a new timezone/context migration, or does it edit previously published migration files? Provide the generated SQL and confirm migrate:rollback behaviour.?view=<id> authorized on read? Owner-only, shared-scope, or tenant-wide? Is an inaccessible/deleted view a 403, a redirect, or a silent default?view and filters, and is it documented user-facing?laravel-report-url required or optional, and what is the fallback and cleanup policy for temporary links?Stack fit
InteractsWithTable pages) is now in scope. This raises the value case for teams with heavy relation-manager usage.configureSavedFilters() in table()), so budget per-page effort rather than treating this as a free upgrade.Migration path
laravel-saved-filter to ^1.10 on a branch. Before publishing, snapshot database/migrations (filenames + checksums).vendor:publish --tag="saved-filter-migrations"; diff the directory. Confirm the change is a new file, not a rewrite of an existing one. Abort and escalate if any previously-run file changed.php artisan migrate against a production-shaped staging copy; inspect SQL; verify the timezone and report-context columns exist and are nullable/defaulted.migrate:rollback for the new migration only.per_page, and grouping behave unchanged.configureSavedFilters() to one custom page / relation manager in staging and confirm keys do not collide with the resource list's views.Compatibility
keyBindings() remains the escape hatch for the shortcut layer; unchanged from the prior release.laravel-report-url in the lockfile / internal compatibility matrix. Update the matrix entry: package version ↔ laravel-saved-filter version ↔ optional report-url presence.Sequencing
^1.10 + new migration, (2) package upgrade with existing behaviour verified, (3) custom-page and relation-manager opt-ins, (4) shareable links + email reports + timezone.Maintenance
Support
?view= precedence and access rules, plus deleted-view behaviour.laravel-report-url presence and link TTL.Scaling
"Name (2)" chains), and report rows with context columns (small per row).laravel-report-url is used, temporary download artifacts need a retention/cleanup policy and storage budget.Failure modes
timezone/report context. Mitigate with the diff-before-migrate gate.?view= without server-side authorization → cross-user / cross-tenant view disclosure. Requires a boundary test before enablement.configureSavedFilters() → feature silently absent, reported as a bug.laravel-report-url absent + oversized report → bounced or dropped email.Ctrl/Cmd+Shift+S collision, Alt+1…9 tab-switch conflicts, incomplete typing guard, accessibility regression from global handlers. Keep menu-driven parity so shortcuts are never the only path.Ramp-up
?view= authorization, and timezone/DST behaviour — and hold shareable links until the authorization test passes. Keep the keyboard shortcut layer behind the a11y and browser-collision review from the prior assessment.How can I help you explore Laravel packages today?