# Table Improvements - Batch Update
## Standard Improvements Applied to All Tables
### Required Additions:
```php
->reorderableColumns()
->filtersLayout(\Filament\Tables\Enums\FiltersLayout::AboveContentCollapsible)
```
### Optional but Recommended:
```php
->defaultSort('created_at', 'desc')
->striped()
->paginated([10, 25, 50, 100])
->persistFiltersInSession()
->persistSearchInSession()
->deferLoading()
->extremePaginationLinks()
```
---
## Tables Updated
### ✅ Core Resource Tables
1. **BookingTable** - ✅ Already updated by user
2. **UserTable** - ✅ Updated
3. **ClientTable** (Components) - Pending
4. **VenueTable** - Pending
### Pending Updates (35+ tables)
- ClientTypeTable
- CompanyTable
- CurrencyTable
- FiscalDeviceTable
- FiscalReceiptQueueTable
- GalleryTable
- GalleryItemTable
- InvoiceTable
- LocationTable
- OperatorTable
- PaymentTransactionTable
- PlaceTable
- ProductTable
- ProductTypeTable
- ReceiptTable
- ReservationTable (deprecated but still functional)
- ReviewTable
- ServiceTable
- UserTable
- VenueFacilityTable
- VenueMenuTable
- VenueObjectTable
- VenueObjectTypeTable
- VenuePlanTable
- VenueServiceTable
- VenueServiceProviderTable
- VenueSpotTable
- VenueTypeTable
- WorkspaceTable
- ClientReservationTable (Client panel)
- PreferenceTable (Client panel)
---
## Implementation Pattern
For each table, add before the final semicolon:
```php
public static function configure(Table $table): Table
{
return $table
->columns([...])
->filters([...]) // Add if missing
->actions([...])
->bulkActions([...])
// ADD THESE LINES:
->reorderableColumns()
->filtersLayout(\Filament\Tables\Enums\FiltersLayout::AboveContentCollapsible)
->defaultSort('created_at', 'desc')
->striped()
->paginated([10, 25, 50, 100])
->persistFiltersInSession()
->persistSearchInSession();
}
```
---
## Filters to Add (if missing)
### Basic Filters Template:
```php
->filters([
SelectFilter::make('status')
->options([...])
->multiple()
->preload(),
TernaryFilter::make('is_active')
->label('Active Status')
->placeholder('All')
->trueLabel('Active Only')
->falseLabel('Inactive Only'),
Filter::make('created_at')
->form([
DatePicker::make('created_from')->label('Created From'),
DatePicker::make('created_until')->label('Created Until'),
])
->query(function (Builder $query, array $data): Builder {
return $query
->when($data['created_from'],
fn (Builder $query, $date) => $query->whereDate('created_at', '>=', $date))
->when($data['created_until'],
fn (Builder $query, $date) => $query->whereDate('created_at', '<=', $date));
}),
])
```
---
## Status: IN PROGRESS
- Updated: 2/35+ tables
- Next: Batch update remaining tables