Listing records
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 a getTabs()
method to the List page class, and return an array of Tab
objects:
use Filament\Resources\Components\Tab;
use Illuminate\Database\Eloquent\Builder;
public function getTabs(): array
{
return [
'all' => Tab::make(),
'active' => Tab::make()
->modifyQueryUsing(fn (Builder $query) => $query->where('active', true)),
'inactive' => Tab::make()
->modifyQueryUsing(fn (Builder $query) => $query->where('active', false)),
];
}
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 the make()
method of the tab:
use Filament\Resources\Components\Tab;
use Illuminate\Database\Eloquent\Builder;
public function getTabs(): array
{
return [
'all' => Tab::make('All customers'),
'active' => Tab::make('Active customers')
->modifyQueryUsing(fn (Builder $query) => $query->where('active', true)),
'inactive' => Tab::make('Inactive customers')
->modifyQueryUsing(fn (Builder $query) => $query->where('active', false)),
];
}
Adding icons to filter tabs
You can add icons to the tabs by passing an icon into the icon()
method of the tab:
use Filament\Resources\Components\Tab;
Tab::make()
->icon('heroicon-m-user-group')
You can also change the icon's position to be after the label instead of before it, using the iconPosition()
method:
use Filament\Support\Enums\IconPosition;
Tab::make()
->icon('heroicon-m-user-group')
->iconPosition(IconPosition::After)
Adding badges to filter tabs
You can add badges to the tabs by passing a string into the badge()
method of the tab:
use Filament\Resources\Components\Tab;
Tab::make()
->badge(Customer::query()->where('active', true)->count())