Using tabs to filter the records
You can add tabs above the table, which can be used to filter the records based on some predefined conditions. Each tab can scope the Eloquent query of the table in a different way. To register tabs, add agetTabs() method to the List page class, and return an array of Tab objects:
Customizing the filter tab labels
The keys of the array will be used as identifiers for the tabs, so they can be persisted in the URL’s query string. The label of each tab is also generated from the key, but you can override that by passing a label into themake() method of the tab:
Adding icons to filter tabs
You can add icons to the tabs by passing an icon into theicon() method of the tab:
iconPosition() method:
Adding badges to filter tabs
You can add badges to the tabs by passing a string into thebadge() method of the tab:
Changing the color of filter tab badges
The color of a badge may be changed using thebadgeColor() method:
Adding extra attributes to filter tabs
You may also pass extra HTML attributes to filter tabs usingextraAttributes():
Customizing the default tab
To customize the default tab that is selected when the page is loaded, you can return the array key of the tab from thegetDefaultActiveTab() method:
Excluding the tab query when resolving records
When a user interacts with a table record (e.g., clicking an action button), Filament resolves that record from the database. By default, the active tab’s query is applied, ensuring users cannot access records outside the current tab’s scope. However, when a record’s state changes after the user saw it in the table, you may still want the user to interact with it. For example, if you have an “Active” tab and an action sets a record to inactive, subsequent actions in the same modal would fail to resolve that record. You may mark a tab to be excluded when resolving records using theexcludeQueryWhenResolvingRecord() method:
Do not use
excludeQueryWhenResolvingRecord() on tabs that enforce authorization rules. For example, if you have a tab that restricts records by tenant or user ownership, those tabs should remain enforced to prevent unauthorized access.Authorization
For authorization, Filament will observe any model policies that are registered in your app. Users may access the List page if theviewAny() method of the model policy returns true.
The reorder() method is used to control reordering a record.
Customizing the table Eloquent query
Although you can customize the Eloquent query for the entire resource, you may also make specific modifications for the List page table. To do this, use themodifyQueryUsing() method in the table() method of the resource:
Custom page content
Each page in Filament has its own schema, which defines the overall structure and content. You can override the schema for the page by defining acontent() method on it. The content() method for the List page contains the following components by default:
components() array, you can insert any schema component. You can reorder the components by changing the order of the array or remove any of the components that are not needed.
Using a custom Blade view
For further customization opportunities, you can override the static$view property on the page class to a custom view in your app:
resources/views/filament/resources/users/pages/list-users.blade.php: