K

Sortable

Reference API

NyonCode\WireSortable\SortableTable

Na této stránce

SortableTable

NyonCode\WireSortable\SortableTable

Rozšiřuje NyonCode\WireTable\Table. Všechny základní metody Table zůstávají dostupné.

reorderable(?string $orderColumn = null, bool $condition = true): static

Zapnout drag & drop řazení řádků.

Parametr Typ Výchozí Popis
$orderColumn ?string 'sort_order' Databázový sloupec pro sort pozici
$condition bool true Podmíněně zapnout řazení
// Výchozí sloupec
$table->reorderable();
 
// Vlastní sloupec
$table->reorderable('position');
 
// Podmíněné
$table->reorderable('position', $user->can('reorder'));

alwaysReorderable(?string $orderColumn = null): static

Udržet řazení řádků aktivní trvale — žádné toggle tlačítko se nevykreslí. Implikuje reorderable().

Parametr Typ Výchozí Popis
$orderColumn ?string výchozí z configu Databázový sloupec pro sort pozici
$table->alwaysReorderable();
$table->alwaysReorderable('position');

isReorderable(): bool

Vrací, zda je řazení řádků zapnuté.

isAlwaysReorderable(): bool

Vrací, zda je řazení vždy aktivní (toggle tlačítko skryté).

getOrderColumn(): string

Vrací název sloupce pořadí.

paginatedWhileReordering(bool $enabled = true): static

Udržet stránkování zapnuté v reorder režimu. Ve výchozím stavu je stránkování během řazení vypnuté.

isPaginatedWhileReordering(): bool

Vrací, zda je stránkování zachováno během reorder režimu.

columnReorderable(bool $enabled = true): static

Zapnout nebo vypnout uživatelsky specifické řazení sloupců. Pořadí sloupců se perzistuje per uživatel + model v databázi.

isColumnReorderable(): bool

Vrací, zda je řazení sloupců zapnuté.


WithSortable

NyonCode\WireSortable\Concerns\WithSortable

Livewire trait. Použijte vedle WithTable:

use WithTable, WithSortable;

Vlastnosti

Vlastnost Typ Výchozí Popis
$isReordering bool false Zda je tabulka v reorder režimu řádků
$reorderableColumnOrder array [] Aktuální pořadí sloupců (načtené z DB při mountu)

Veřejné metody

toggleReordering(): void

Přepnout reorder režim řádků on/off. Vyčistí cachované záznamy pro vynucení re-query.

No-op, pokud tabulka není reorderable.

reorderRows(array $items): void

Zpracovat drag & drop řádků. Voláno Alpine.js po dokončení drag operace. Aktualizuje sloupec pořadí v databázové transakci.

Každá položka: ['value' => string|int, 'order' => int]

No-op, pokud:

  • Tabulka není reorderable
  • Tabulka není v reorder režimu ($isReordering === false)

reorderColumns(array $columnOrder): void

Zpracovat drag & drop sloupců. Zvaliduje názvy sloupců proti definici tabulky a perzistuje do tabulky reorderable_column_orders.

No-op, pokud:

  • Tabulka není column-reorderable
  • Uživatel není autentizován (getReorderableUserId() vrací null)
  • Nejsou poskytnuty platné názvy sloupců

resetColumnOrder(): void

Resetuje pořadí sloupců na výchozí (jak je definováno v table()) a smaže databázový záznam.

getReorderableColumns(): array

Vrací sloupce v uživatelem uloženém pořadí. Nově přidané sloupce (nepřítomné v uloženém pořadí) se připojí na konec. Odebrané sloupce (v uloženém pořadí, ale už ne v definici tabulky) se tiše přeskočí.

isTableReordering(): bool

Vrací, zda je tabulka aktuálně v reorder režimu řádků. Alias pro $this->isReordering.

Protected přepisy

Tyto metody přepisují protected factory/hook metody WithTable. Klauzule insteadof není potřeba — PHP je resolvuje automaticky, protože WithSortable je uveden za WithTable.

getTableView(): string

Vrací 'wire-sortable::tables.index', když je zapnuté řazení řádků nebo sloupců. Jinak propadne na 'wire-table::tables.index'.

interceptTableRecords(): LengthAwarePaginator|Paginator|CursorPaginator|Collection|null

V reorder režimu (bez paginatedWhileReordering): obejde hledání, filtry, řazení a stránkování. Vrátí všechny záznamy seřazené podle sort sloupce vzestupně.

Jinak: vrátí null, aby WithTable zpracoval načítání záznamů normálně.

Protected hooky

beforeReorder(array $items): void

Voláno před databázovým updatem. Přepište pro autorizaci nebo pre-processing.

protected function beforeReorder(array $items): void
{
$this->authorize('reorder', Task::class);
}

afterReorder(array $items): void

Voláno po databázovém updatu. Přepište pro invalidaci cache nebo události.

protected function afterReorder(array $items): void
{
Cache::forget('tasks.ordered');
$this->dispatch('tasks-reordered');
}

getReorderableUserId(): ?int

Vrací ID uživatele pro perzistenci pořadí sloupců. Výchozí auth()->id().

Přepište pro vlastní auth guardy:

protected function getReorderableUserId(): ?int
{
return auth('admin')->id();
}

getReorderableModelType(): ?string

Vrací klíč typu modelu pro perzistenci pořadí sloupců. Výchozí je název třídy Eloquent modelu (např. App\Models\Task).

Přepište pro použití vlastního klíče:

protected function getReorderableModelType(): ?string
{
return static::class; // třída komponenty místo modelu
}

ReorderableColumnOrder

NyonCode\WireSortable\Models\ReorderableColumnOrder

Eloquent model pro tabulku reorderable_column_orders.

Vlastnosti

Vlastnost Typ Popis
$user_id int Cizí klíč do tabulky users
$model_type string Název třídy Eloquent modelu
$column_order array JSON-cast pole názvů sloupců

Relace

user(): BelongsTo

Patří modelu uživatele nakonfigurovanému ve wire-sortable.user_model.

Statické metody

getOrder(int $userId, string $modelType, string $tableIdentifier): ?array

Získat uložené pořadí sloupců pro kombinaci uživatel + model + tabulka. Vrací null, pokud záznam neexistuje.

saveOrder(int $userId, string $modelType, string $tableIdentifier, array $columnOrder): void

Vytvořit nebo aktualizovat pořadí sloupců pro kombinaci uživatel + model + tabulka (upsert).

deleteOrder(int $userId, string $modelType, string $tableIdentifier): void

Smazat záznam pořadí sloupců pro kombinaci uživatel + model + tabulka.

Konfigurace

config/wire-sortable.php

Klíč Typ Výchozí Popis
order_column string 'sort_order' Výchozí název sloupce pořadí
sortablejs_cdn ?string CDN URL Zdrojová URL SortableJS, null pro vypnutí
animation int 150 Doba drag animace v milisekundách
user_model string 'App\\Models\\User' Třída modelu uživatele pro relace pořadí sloupců
user_key_type string 'id' Typ primárního klíče modelu uživatele, použitý migrací k otypování sloupce user_id. Použijte 'uuid' nebo 'ulid' pro neceločíselné auth klíče

Alpine.js komponenta

wireSortable(config) je registrována globálně přes Alpine.data().

Config volby

Volba Typ Výchozí Popis
rowReorderable bool false Zapnout řazení řádků
columnReorderable bool false Zapnout řazení sloupců
isReordering bool (entangled) false Livewire-synced stav reorder režimu
orderColumn string 'sort_order' Název sloupce pořadí
animation int 150 Doba SortableJS animace (ms)

Chování

  • isReordering je entanglováno s Livewire vlastností $isReordering přes @entangle
  • Když se isReordering změní, komponenta automaticky inicializuje nebo zničí SortableJS na <tbody>
  • Drag handly se dynamicky přidávají/odebírají z DOM
  • Řazení sloupců je vždy aktivní, když je columnReorderable true (nezávisle na reorder režimu)
  • Po aktualizaci tabulky Livewire se SortableJS znovu inicializuje

Překlady

lang/{locale}/messages.php

Klíč EN CS Popis
reorder Reorder Přeuspořádat Label toggle tlačítka (neaktivní)
done_reordering Done reordering Hotovo Label toggle tlačítka (aktivní)