PHP code example of cooper / filament-dcat-filters
1. Go to this page and download the library: Download cooper/filament-dcat-filters library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
use Cooper\FilamentDcatFilters\Filters\RangeFilter;
RangeFilter::make('created_at')->datetime()
use Cooper\FilamentDcatFilters\Filters\SelectTableFilter;
SelectTableFilter::make('user_id')
->relationship('user', 'name')
->multiple()
use Cooper\FilamentDcatFilters\Filters\DateComponentFilter;
DateComponentFilter::make('created_at')->year()
DateComponentFilter::make('birth_date')->month()
DateComponentFilter::make('published_at')->day()
use Cooper\FilamentDcatFilters\Filters\{LikeFilter, InFilter, ComparisonFilter, BetweenFilter};
// LIKE search (with NOT LIKE support)
LikeFilter::make('title'),
LikeFilter::make('spam_keywords')->notLike(), // Exclude matches
// IN array (with NOT IN support)
InFilter::make('category_id')
->options(Category::pluck('name', 'id')->toArray()),
InFilter::make('blocked_users')->notIn(), // Exclude selected
// Comparison (>, <, =, >=, <=, !=)
ComparisonFilter::make('views')->gte()->label('Minimum Views'),
// Between (numeric range)
BetweenFilter::make('price')->label('Price Range'),
use Cooper\FilamentDcatFilters\Filters\BooleanFilter;
BooleanFilter::make('is_active')
->label('Status')
->trueLabel('Active')
->falseLabel('Inactive')
// Quick presets
BooleanFilter::active() // is_active field
BooleanFilter::published() // is_published field
BooleanFilter::enabled() // is_enabled field
use Cooper\FilamentDcatFilters\Filters\NullFilter;
NullFilter::make('deleted_at')
->nullLabel('Not Deleted')
->notNullLabel('Deleted')
// Quick presets
NullFilter::deleted() // deleted_at field
NullFilter::assigned() // Check if field is assigned
NullFilter::empty() // Check if field is empty/filled
use Cooper\FilamentDcatFilters\Filters\EnumFilter;
EnumFilter::make('status')
->enum(OrderStatus::class)
->multiple()
->exclude([OrderStatus::Cancelled])
use Cooper\FilamentDcatFilters\Filters\FullTextFilter;
FullTextFilter::make('search')
->searchIn(['name', 'email', 'phone'])
->placeholder('Search users...')
->minLength(2)
->debounce(300)
use Cooper\FilamentDcatFilters\Filters\RelativeDateFilter;
RelativeDateFilter::make('created_at')
->only(['today', 'yesterday', 'last_7_days', 'last_30_days', 'this_month'])
// Quick presets
RelativeDateFilter::common() // Common date ranges
RelativeDateFilter::weekly() // Week/month focused
RelativeDateFilter::reporting() // Quarter/year focused
use Cooper\FilamentDcatFilters\Filters\HiddenFilter;
// Pre-filter by tenant
HiddenFilter::make('tenant_id')
->default(auth()->user()->tenant_id)
->eq()
use Cooper\FilamentDcatFilters\Filters\SoftDeleteFilter;
SoftDeleteFilter::make('trashed')
// Or toggle mode:
SoftDeleteFilter::make('trashed')->toggle()
use Cooper\FilamentDcatFilters\Filters\ExistsFilter;
ExistsFilter::make('has_comments')->relationship('comments')
ExistsFilter::make('no_orders')->relationship('orders')->notExists()
use Cooper\FilamentDcatFilters\Filters\AggregateFilter;
AggregateFilter::make('order_count')
->relationship('orders')
->count()
->gte()
use Cooper\FilamentDcatFilters\Filters\ColumnCompareFilter;
ColumnCompareFilter::make('profitable')
->leftColumn('price')
->rightColumn('cost')
->gt()
use Cooper\FilamentDcatFilters\Filters\AdvancedJsonFilter;
AdvancedJsonFilter::make('tags')->arrayContains()
AdvancedJsonFilter::make('metadata')->pathExists('settings.theme')
AdvancedJsonFilter::make('config')->hasKey('notifications')
use Cooper\FilamentDcatFilters\Filters\TimezoneAwareDateFilter;
TimezoneAwareDateFilter::make('created_at')
->userTimezone('Asia/Shanghai')
use Cooper\FilamentDcatFilters\Concerns\HasResetFilters;
class ListUsers extends ListRecords
{
use HasResetFilters;
protected function getHeaderActions(): array
{
return [
$this->getResetFiltersAction(),
];
}
}
use Cooper\FilamentDcatFilters\Concerns\HasFilterPersistence;
class ListUsers extends ListRecords
{
use HasFilterPersistence;
protected string $filterPersistenceKey = 'users-list-filters';
}
use Cooper\FilamentDcatFilters\Concerns\SyncsFiltersToUrlWithoutHistory;
class ListUsers extends ListRecords
{
use SyncsFiltersToUrlWithoutHistory;
}