K

Tabulka

Akce tabulky

Akce používejte pro operace na úrovni záznamu, hromadné operace a příkazy toolbaru.

Akce tabulky preview
Na této stránce

Akce používejte pro operace na úrovni záznamu, hromadné operace a příkazy toolbaru.

Typy akcí

Typ Použití pro
Řádkové akce Jeden záznam po druhém
Hromadné akce Aktuálně vybrané záznamy
Hlavičkové akce Globální příkazy tabulky
Skupiny akcí Kompaktní dropdowny pro více řádkových akcí

Řádkové akce

use NyonCode\WireCore\Actions\Action;
use NyonCode\WireCore\Actions\DeleteAction;
 
->actions([
Action::make('edit')
->label('Edit')
->icon('pencil')
->url(fn (User $record) => route('users.edit', $record)),
 
DeleteAction::make(),
])

Řádkovou akci použijte, když uživatel pracuje s jedním záznamem a záměr je z kontextu řádku zřejmý.

Vykonat PHP logiku

Action::make('activate')
->label('Activate')
->color('success')
->action(function (User $record) {
$record->update(['active' => true]);
})

Otevřít URL

Action::make('view')
->icon('eye')
->url(fn (User $record) => route('users.show', $record), openInNewTab: true)

Akce jen s ikonou

Action::make('edit')
->icon('pencil')
->iconButton()
->tooltip('Edit')

Hromadné akce

Hromadné akce se objeví, když má tabulka vybíratelné řádky.

use NyonCode\WireCore\Actions\BulkAction;
use NyonCode\WireCore\Actions\DeleteBulkAction;
 
->bulkActions([
BulkAction::make('export')
->label('Export selected')
->icon('download')
->action(fn (array $records) => $this->exportUsers($records)),
 
DeleteBulkAction::make(),
])

Hromadné akce používejte pro destruktivní nebo opakující se operace, které by se neměly opakovat řádek po řádku.

Výběr přes hranici stránky

Výběr má dvě podoby a ta druhá je to, co vůbec umožní hromadnou akci nad celou vyfiltrovanou množinou:

  • klíče — explicitní sada klíčů záznamů, záměrně nezávislá na filtrech a řazení. Výběr stránky se přidává, takže stránkování nikdy nezahodí práci.
  • vše odpovídající — všechno, co odpovídá aktuálnímu filtru, uložené jako režim, ne jako seznam. Odškrtnutí jednoho řádku ze 128 000 uloží jednu výjimku, ne 127 999 klíčů, a seznam celé množiny se nikdy nedostane do prohlížeče.

Lišta výběru vždy ukazuje, která z podob je aktivní, a nabízí cestu k té druhé:

[3] vybrané záznamy [Export] [Smazat] [×]
Vybráno 3. Vybrat všech 1 284

Když je vybraná celá vyfiltrovaná množina, stejný řádek nabídne Jen tuto stránku zpět.

Změna filtru nebo hledání shodí „vše odpovídající“ zpět na explicitní výběr. „Všechno“ je definované filtrem, který byl na obrazovce; zúžit ho a nechat výběr stát by tiše předefinovalo, čeho se příští hromadná akce dotkne. Řazení a stránkování s ním nehýbou — ani jedno množinu nemění.

Hromadné akce nad velkými výběry

Callback akce dostává Collection, což je problém, když je výběr dotaz nad statisíci řádky. Z toho plynou dvě věci.

Table::bulkMaxRecords() omezuje, kolik smí jedna akce načíst (výchozí 1 000). Nad limit se akce odmítne a řekne to, místo aby umřela v půlce:

$table->bulkMaxRecords(5000) // zvýšit
$table->bulkMaxRecords(null) // zrušit úplně — viz níž

Akce, která musí zvládnout jakoukoli velikost, ať výběr projde místo aby ho přijala. eachSelectedRecord() prochází dotaz po dávkách a nikdy nedrží víc než jednu dávku v paměti:

BulkAction::make('archive')
->action(fn () => $this->eachSelectedRecord(
fn (Invoice $invoice) => $invoice->archive(),
chunk: 500,
))

selectedRecordsQuery() vrátí tentýž výběr jako query builder — pro hromadný update nebo export, který streamuje.

Řazení na telefonu

Skládané karty skrývají hlavičkový řádek a s ním všechna tlačítka řazení. Pod breakpointem stohování se proto v liště vykreslí ovládání řazení: vypíše řaditelné sloupce a aktivní pojmenuje přímo na spouštěči. Na malých obrazovkách se otevře jako bottom sheet. Není co nastavovat — objeví se vždy, když se potká stackedOnMobile() s aspoň jedním řaditelným sloupcem.

Hlavičkové akce

Hlavičkové akce žijí nad tabulkou a nejsou vázané na konkrétní záznam.

use NyonCode\WireCore\Actions\HeaderAction;
 
->headerActions([
HeaderAction::make('create')
->label('New user')
->icon('plus')
->url(route('users.create')),
 
HeaderAction::make('export')
->label('Export all')
->icon('download')
->action(fn () => $this->exportAll()),
])

Potvrzovací modály

Vyžadujte potvrzení pro destruktivní nebo vysoce dopadové akce.

Action::make('delete')
->color('danger')
->requiresConfirmation()
->modalHeading('Delete user')
->modalDescription('This action cannot be undone.')
->action(fn (User $record) => $record->delete())

Akce s formulářem

Připojte k akci schéma Wire Formu, když uživatel musí před vykonáním poskytnout vstup.

use NyonCode\WireForms\Components\Select;
use NyonCode\WireForms\Components\TextInput;
 
Action::make('edit')
->form([
TextInput::make('name')->required(),
Select::make('role')
->options([
'admin' => 'Admin',
'editor' => 'Editor',
'viewer' => 'Viewer',
])
->required(),
])
->fillFormUsing(fn (User $record) => [
'name' => $record->name,
'role' => $record->role,
])
->action(function (User $record, array $data) {
$record->update($data);
})

Kompletní API formuláře viz Přehled formulářů a Pole formulářů.

Viditelnost, stav a oprávnění

Všechny typy akcí podporují podmíněnou viditelnost a autorizaci.

Action::make('approve')
->visible(fn (User $record) => $record->status === 'pending')
->disabled(fn (User $record) => $record->is_locked)
->permission('approve-users')

Udržujte UI poctivé: skryjte akce, které uživatelé nemají vidět, znepřístupněte akce, které vidí, ale zatím nemohou použít.

Skupiny akcí

Skupiny akcí použijte, když máte pro jeden řádek příliš mnoho řádkových akcí.

use NyonCode\WireCore\Actions\ActionGroup;
 
->actions([
ActionGroup::make([
Action::make('view')->icon('eye')->url(fn (User $record) => route('users.show', $record)),
Action::make('edit')->icon('pencil')->url(fn (User $record) => route('users.edit', $record)),
Action::divider(),
DeleteAction::make(),
])->tooltip('More actions'),
])

Související dokumentace