K

Tabulka

SelectFilter

Rozbalovací seznam nad předdefinovanými možnostmi — filtr, po kterém většina tabulek sáhne první.

Na této stránce

Rozbalovací filtr pro předdefinované možnosti. Nejběžnější typ filtru.

Vykresluje se přes stejný combobox jako Select field ve formulářích, takže otevřený filtr vypadá stejně jako otevřený formulářový select. Nativní <select> prohlížeče je opt-in přes ->native().

use NyonCode\WireTable\Filters\SelectFilter;

Základní použití

SelectFilter::make('status')
->options([
'active' => 'Active',
'inactive' => 'Inactive',
'banned' => 'Banned',
])

S placeholderem

První položka je vždy prázdná možnost „All“. Pro přizpůsobení:

SelectFilter::make('role')
->options([
'' => 'All Roles', // explicitní placeholder
'admin' => 'Admin',
'editor' => 'Editor',
'viewer' => 'Viewer',
])

Vícenásobný výběr

SelectFilter::make('tags')
->options(Tag::pluck('name', 'id')->toArray())
->multiple()
->label('Tags')

Při multiple() aplikuje whereIn() místo where().

Vyhledávatelný rozbalovací seznam

SelectFilter::make('country')
->options(Country::pluck('name', 'code')->toArray())
->searchable()
->label('Country')

Přidá do rozbalovacího seznamu vyhledávací input. Povrch je stejný combobox jako u nevyhledávatelného filtru — jen navíc s vyhledávacím inputem.

Nativní HTML select

SelectFilter::make('type')
->options([...])
->native() // nativní <select> element prohlížeče (rychlejší render)

Odhlásí filtr ze sdíleného comboboxu, takže přestane odpovídat formulářovému selectu. Používejte jen tam, kde je cena renderu důležitější než jednotný vzhled.

Z databáze

SelectFilter::make('department')
->options(fn () => Department::orderBy('name')->pluck('name', 'id')->toArray())

Možnosti mohou být closure — vyhodnocují se líně při renderu.

Z enumu

Předejte třídu PHP enumu místo pole — jeho case se rozvinou na možnosti value => label. Popisky pocházejí z getLabel(), když enum implementuje Foundation\Contracts\Enum\HasLabel, jinak se z názvu case udělá headline.

SelectFilter::make('status')->options(OrderStatus::class)

Když je atribut modelu přetypován na enum, SelectFilter na tom sloupci automaticky naplní své možnosti z enumu i bez volání ->options(). Tato zkratka je pro případy, kdy filtr nastavujete explicitně.

Vlastní dotaz

SelectFilter::make('has_avatar')
->options([
'yes' => 'With Avatar',
'no' => 'Without Avatar',
])
->query(fn (Builder $query, string $value) => match($value) {
'yes' => $query->whereNotNull('avatar_url'),
'no' => $query->whereNull('avatar_url'),
})

API SelectFilter

->options(array|string|Closure $options) // ['value' => 'Label', ...] nebo třída enumu
->multiple(bool $multiple = true) // režim multi-select
->searchable(bool $searchable = true) // přidá vyhledávací input do rozbalovacího seznamu
->native(bool $native = true) // opt-in nativní <select> prohlížeče (výchozí: false)