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/ */

    

cooper / filament-dcat-filters example snippets


use Cooper\FilamentDcatFilters\Filters\ScopeFilter;

ScopeFilter::make('status')
    ->scopes([
        'all' => 'All',
        'active' => 'Active',
        'inactive' => 'Inactive',
    ])

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\ModalSelectFilter;

ModalSelectFilter::make('user_id')
    ->model(User::class, 'name', 'id')
    ->dialogTitle('Select User')
    ->displayColumns(['id' => 'ID', 'name' => 'Name', 'email' => 'Email'])
    ->searchable(['name', 'email'])
    ->multiple()

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\Filters\MorphRelationFilter;

// MorphTo mode
MorphRelationFilter::make('commentable')
    ->morphTo()
    ->types(['post' => Post::class, 'video' => Video::class])

// MorphToMany mode
MorphRelationFilter::make('tags')
    ->morphToMany()
    ->model(Tag::class)
    ->titleColumn('name')

SelectTableFilter::make('user_id')
    ->model(User::class)
    ->remoteSearch()
    ->searchColumns(['name', 'email'])
    ->searchDebounce(300)

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;
}

use Cooper\FilamentDcatFilters\Filters\CascadingSelectFilter;

CascadingSelectFilter::make('location')
    ->levels([
        'country' => [
            'label' => 'Country',
            'options' => fn () => Country::pluck('name', 'id'),
        ],
        'state' => [
            'label' => 'State',
            'options' => fn ($country) => State::where('country_id', $country)->pluck('name', 'id'),
            'dependsOn' => 'country',
        ],
        'city' => [
            'label' => 'City',
            'options' => fn ($state) => City::where('state_id', $state)->pluck('name', 'id'),
            'dependsOn' => 'state',
        ],
    ])

use Cooper\FilamentDcatFilters\Facades\FilamentDcatFilters;

FilamentDcatFilters::scopeFilter('status')->scopes([...]);
FilamentDcatFilters::rangeFilter('created_at')->datetime();

// All available filter shortcuts
FilamentDcatFilters::booleanFilter('is_active');
FilamentDcatFilters::nullFilter('deleted_at');
FilamentDcatFilters::enumFilter('status');
FilamentDcatFilters::fullTextFilter('search');
FilamentDcatFilters::hiddenFilter('tenant_id');
FilamentDcatFilters::filterGroup('combined');
FilamentDcatFilters::softDeleteFilter('trashed');
FilamentDcatFilters::existsFilter('has_comments');
FilamentDcatFilters::aggregateFilter('order_count');
FilamentDcatFilters::columnCompareFilter('profitable');
FilamentDcatFilters::advancedJsonFilter('tags');
FilamentDcatFilters::timezoneAwareDateFilter('created_at');
FilamentDcatFilters::morphRelationFilter('commentable');
bash
php artisan vendor:publish --tag="filament-dcat-filters-config"
bash
php artisan vendor:publish --tag="filament-dcat-filters-views"
bash
php artisan dcat-filters:matrix
php artisan dcat-filters:matrix --format=json
php artisan dcat-filters:matrix --output=docs/matrix.md