Filters
Custom filters
Filter takes your own query, and your own form fields.
A simple switch
use Illuminate\Database\Eloquent\Builder;
use Xelqun\Tables\Filters\Filter;
Filter::make('in_stock')->query(fn (Builder $query) => $query->where('stock', '>', 0));
With fields
schema() takes any form fields, and their values reach the closure as $data.
use Xelqun\Forms\Components\DatePicker;
Filter::make('delivery')
->schema([
DatePicker::make('delivery_from'),
DatePicker::make('delivery_until'),
])
->query(fn (Builder $query, array $data) => $query
->when($data['delivery_from'] ?? null, fn (Builder $query, string $date) => $query->whereDate('delivery_date', '>=', $date))
->when($data['delivery_until'] ?? null, fn (Builder $query, string $date) => $query->whereDate('delivery_date', '<=', $date)));
Because they're real fields, a filter can depend on another. Pick a year, and the months follow from the server.