webbingbrasil / filament-advancedfilter
Advanced filter component for filament admin.
Installs: 61 900
Dependents: 0
Suggesters: 0
Security: 0
Stars: 134
Watchers: 5
Forks: 29
Open Issues: 7
Requires
- php: ^8.0
- filament/filament: ^3.0.0
- spatie/laravel-package-tools: ^1.9.2
README
A collection of easy-to-use filters with clause conditions to Filament
Note For Filament 2.x use 2.x branch
Installation
Install the package via composer (requires filament >= 3.x)
composer require webbingbrasil/filament-advancedfilter "^3.0"
Optionally you can publish the translation files
php artisan vendor:publish --tag="filament-advancedfilter-translations"
Available Filters
BooleanFilter
Filter records by boolean column:
use Webbingbrasil\FilamentAdvancedFilter\Filters\BooleanFilter; BooleanFilter::make('is_active')
In some cases you can have a nullable
column, the BooleanFilter can handle nulls in different ways:
- Treats nulls as Unknown
- Treats nulls as True
- Treats nulls as False
by default nulls
are treated as unknown and hidden
BooleanFilter::make('is_active')->nullsAreUnknown(); BooleanFilter::make('is_active')->nullsAreTrue(); BooleanFilter::make('is_active')->nullsAreFalse(); BooleanFilter::make('is_active')->showUnknowns(); BooleanFilter::make('is_active')->hideUnknowns();
DateFilter
Filter records by date/timestamp column:
use Webbingbrasil\FilamentAdvancedFilter\Filters\DateFilter; DateFilter::make('published_at')
This filter allows users to search records in the following conditions:
-
Is equal/not equal to user's input
-
Is on or after/before user's input
-
Is more/less than user's input
the user has the option to choose a time interval (day, week, month, year) in the future/past, for example:
- more than 3 days from now
- more than 4 months ago
- less than 5 weeks from now
- less than 6 days ago
- more than 1 year ago
-
Is between user's input
-
Is set/not set
NumberFilter
Filter records by numeric column:
use Webbingbrasil\FilamentAdvancedFilter\Filters\NumberFilter; NumberFilter::make('quantity')
This filter allows users to search records in the following conditions:
- Is equal/not equal to user's input
- Is on or after/before user's input
- Is more than/less than user's input
- Is between user's input
- Is set/not set
TextFilter
Filter records by text column:
use Webbingbrasil\FilamentAdvancedFilter\Filters\TextFilter; TextFilter::make('name')
This filter allows users to search records in the following conditions:
- Is equal/not equal to user's input
- Starts/not starts with user's input
- Ends/not ends with user's input
- Contains/not contains user's input
- Is set/not set
Set Default Clause
You can set a default clause condition for any filter, for example:
use Webbingbrasil\FilamentAdvancedFilter\Filters\TextFilter; use Webbingbrasil\FilamentAdvancedFilter\Filters\BooleanFilter; FilamentAdvancedFilter\Filters\TextFilter::make('brand') ->relationship('brand', 'name') ->default(FilamentAdvancedFilter\Filters\TextFilter::CLAUSE_CONTAIN); FilamentAdvancedFilter\Filters\BooleanFilter::make('is_visible') ->default(FilamentAdvancedFilter\Filters\BooleanFilter::CLAUSE_IS_FALSE);
Enable Clause Label
By default the clause label is disabled, you can enable it by calling the enableClauseLabel
method:
use Webbingbrasil\FilamentAdvancedFilter\Filters\TextFilter; FilamentAdvancedFilter\Filters\TextFilter::make('brand') ->enableClauseLabel()
Fields Wrapper
You can change the wrapper for the filter fields, for example to use a Group component instead of Fieldset:
use Webbingbrasil\FilamentAdvancedFilter\Filters\TextFilter; FilamentAdvancedFilter\Filters\TextFilter::make('brand') ->enableClauseLabel() ->wrapperUsing(fn () => Forms\Components\Group::make())
Field Debounce
You can set a custom debounce time for the filter fields, for example to wait 700ms before applying the filter:
use Webbingbrasil\FilamentAdvancedFilter\Filters\TextFilter; FilamentAdvancedFilter\Filters\TextFilter::make('brand') ->debounce(700)
By default the debounce time is 500ms.
Credits
License
The MIT License (MIT). Please see License File for more information.