Filters

Overview

Filters narrow a table's rows, and are real form fields that live in one panel.

use Illuminate\Database\Eloquent\Builder;
use Xelqun\Tables\Filters\Filter;
use Xelqun\Tables\Filters\SelectFilter;

public function filters(): array
{
    return [
        SelectFilter::make('status')->options(['draft' => 'Draft', 'active' => 'Active']),
        Filter::make('in_stock')->query(fn (Builder $query) => $query->where('stock', '>', 0)),
    ];
}

The URL keeps the active filters, so a shared link shows the same rows.

Filter Use it for
SelectFilter One or many values
TernaryFilter Yes, no, or either
QueryBuilder Rules people build themselves
Filter Your own fields and query
TrashedFilter Soft deleted records, in a panel

Shared options

label() changes the name. default() sets the value before the viewer changes anything. hidden() removes the filter.

SelectFilter::make('status')->options($statuses)->default('active');