Search by

kataknyulink / livewire-datatable

katak-nyulink

Modular advanced datatable for Laravel Livewire with Flux UI. Supports nested rows, sorting, search, filters, and toggleable columns via traits.

Package info

github.com/katak-nyulink/livewire-datatable

pkg:composer/kataknyulink/livewire-datatable

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-main 2026-10-28 12:03 UTC

This package is auto-updated.

Last update: 2026-10-28 12:29:42 UTC


README

Modular advanced datatable untuk Laravel Livewire dengan Flux UI.

Fitur

  • ✅ Livewire 4 + Flux UI 2 (native <flux:table>)
  • ✅ Modular traits — aktifkan hanya fitur yang dibutuhkan
  • ✅ Sorting, Search, Filter, Pagination
  • ✅ Toggle columns (show/hide dengan persistensi session)
  • ✅ Nested/expandable rows (lazy load)
  • ✅ Record actions (Filament-style Action::make())
  • ✅ Dynamic confirmation (title/text/button berdasarkan record)
  • ✅ Composite cells (multiple fields dalam 1 kolom)
  • ✅ Cell variant (strong/subtle)
  • ✅ Column width (support CSS + Tailwind class)
  • ✅ Relasi Eloquent (supplier:name)

Instalasi

composer require kataknyulink/livewire-datatable

Publish config & views (opsional):

php artisan vendor:publish --tag=datatable-config
php artisan vendor:publish --tag=datatable-views

Penggunaan

1. Buat Livewire Component

namespace App\Livewire;

use App\Models\Category;
use KatakNyulink\LivewireDatabale\Livewire\NestedDataTable;
use KatakNyulink\LivewireDatabale\Support\Column;
use KatakNyulink\LivewireDatabale\Support\NestedRelation;

class CategoryTable extends NestedDataTable
{
    public string $model = Category::class;
    public array $relations = ['items.supplier'];

    protected function columns(): array
    {
        return [
            Column::make('id')->label('ID')->sortable()->width('60px'),
            Column::make('name')->label('Kategori')->sortable()->searchable(),
            Column::make('created_at')
                ->label('Dibuat')
                ->hideable()
                ->format(fn ($row) => $row->created_at->diffForHumans()),
        ];
    }

    protected function nestedRelations(): array
    {
        return [
            NestedRelation::make('items')
                ->label('Daftar Barang')
                ->orderBy('name', 'asc')
                ->addColumn('sku', fn ($c) => $c->label('SKU'))
                ->addColumn('name', fn ($c) => $c->label('Nama Barang')->searchable())
                ->addColumn('price', fn ($c) => $c
                    ->label('Harga')
                    ->align('right')
                    ->format(fn ($row) => 'Rp ' . number_format($row->price, 0, ',', '.')))
                ->addColumn(Column::make('supplier_name')
                    ->label('Supplier')
                    ->relation('supplier:name')),
        ];
    }
}

2. Render

<livewire:category-table />

Modular Traits

Ingin hanya beberapa fitur? Extend DataTable dan pilih trait:

use KatakNyulink\LivewireDatabale\Traits\HasColumns;
use KatakNyulink\LivewireDatabale\Traits\HasSorting;
use KatakNyulink\LivewireDatabale\Traits\HasSearch;

class SimpleTable extends \Livewire\Component
{
    use HasColumns, HasSorting, HasSearch;
    // ...
}

License

MIT