diff options
Diffstat (limited to 'workbench/app/Livewire')
-rw-r--r-- | workbench/app/Livewire/ProductsTable.php | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/workbench/app/Livewire/ProductsTable.php b/workbench/app/Livewire/ProductsTable.php index c5a0f61..9717b5d 100644 --- a/workbench/app/Livewire/ProductsTable.php +++ b/workbench/app/Livewire/ProductsTable.php @@ -3,12 +3,14 @@ namespace Workbench\App\Livewire; use Workbench\App\Models\Product; +use Workbench\App\Models\Category; use Lightscale\LaralightTables\Columns\Column; use Lightscale\LaralightTables\Toolbar; use Lightscale\LaralightTables\Toolbar\Search; use Lightscale\LaralightTables\Toolbar\PageSize; use Lightscale\LaralightTables\Toolbar\ColumnSelect; +use Lightscale\LaralightTables\Toolbar\SelectFilter; use Illuminate\Database\Eloquent\Builder; @@ -18,12 +20,21 @@ class ProductsTable extends Table public function toolbar(): Toolbar { - return parent::toolbar() - ->addStartItem(new Search()) - ->addEndItem(new PageSize()) - ->addEndItem(new ColumnSelect()); + $categoryFilter = SelectFilter::make('category') + ->placeholder(__('Filter category')) + ->options(Category::pluck('name', 'id')) + ->filter( + fn(Builder $q, string $value) => $q->whereHas( + 'category', + fn(Builder $q) => $q->where('id', $value) + ) + ); - return $toolbar; + return parent::toolbar() + ->addStartItem(Search::make()) + ->addStartItem($categoryFilter) + ->addEndItem(PageSize::make()) + ->addEndItem(ColumnSelect::make()); } public function query(): Builder @@ -40,12 +51,17 @@ class ProductsTable extends Table public function columns(): array { return [ - Column::make('id', 'ID'), - Column::make('name', 'Name'), - Column::make('category.name', 'Category') + Column::make('id', 'ID') + ->sortable(fn(Builder $q, string $dir) => $q->orderBy('id', $dir)), + Column::make('name', 'Name') + ->sortable(fn(Builder $q, string $dir) => $q->orderBy('name', $dir)), + Column::make('category_name', 'Category') ->slot(fn($r) => $r->category->name), - Column::make('price', 'Price'), - Column::make('stock', 'Stock'), + Column::make('price', 'Price') + ->sortable(fn(Builder $q, string $dir) => $q->orderBy('price', $dir)) + ->slot(fn($r, $c) => "£{$r->{$c->name}}"), + Column::make('stock', 'Stock') + ->sortable(fn(Builder $q, string $dir) => $q->orderBy('stock', $dir)), ]; } } |