A collection of easy-to-use filters with clause conditions to Filament
Warning The 3.x is still in beta but compatible for filament 3.x
Note For Filament 2.x use 2.x branch
Install the package via composer (requires filament >= 3.x)
composer require webbingbrasil/filament-advancedfilter "^3.0@beta"
Optionally you can publish the translation files
php artisan vendor:publish --tag="filament-advancedfilter-translations"
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();
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
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
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
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);
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()
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())
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.
The MIT License (MIT). Please see License File for more information.