summaryrefslogtreecommitdiff
path: root/workbench/app
diff options
context:
space:
mode:
authorSam Light <samlight1994@gmail.com>2025-03-30 14:20:57 +0100
committerSam Light <samlight1994@gmail.com>2025-03-30 14:20:57 +0100
commite744b8d67ef1d18050158dd523ba7d804c1c8528 (patch)
tree56c90a83912bd63bdd507e76e5ef00c82a904b50 /workbench/app
parenta883170dd1c723bcd02916f9bc8a96ed85a61761 (diff)
Filters, sorting, escaping and more....
Diffstat (limited to 'workbench/app')
-rw-r--r--workbench/app/Livewire/ProductsTable.php36
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)),
];
}
}