PHP code example of hydrat / filament-table-layout-toggle
1. Go to this page and download the library: Download hydrat/filament-table-layout-toggle library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
hydrat / filament-table-layout-toggle example snippets
use Hydrat\TableLayoutToggle\TableLayoutTogglePlugin;
use Hydrat\TableLayoutToggle\Persisters;
public function panel(Panel $panel): Panel
{
return $panel
->plugins([
TableLayoutTogglePlugin::make()
->setDefaultLayout('grid') // default layout for user seeing the table for the first time
->persistLayoutUsing(
persister: Persisters\LocalStoragePersister::class, // chose a persister to save the layout preference of the user
cacheStore: 'redis', // optional, change the cache store for the Cache persister
cacheTtl: 60 * 24, // optional, change the cache time for the Cache persister
)
->shareLayoutBetweenPages(false) // allow all tables to share the layout option for this user
->displayToggleAction() // used to display the toggle action button automatically
->toggleActionHook('tables::toolbar.search.after') // chose the Filament view hook to render the button on
->listLayoutButtonIcon('heroicon-o-list-bullet')
->gridLayoutButtonIcon('heroicon-o-squares-2x2'),
]);
}
use Hydrat\TableLayoutToggle\Concerns\HasToggleableTable;
class MyListRecords extends ListRecords
{
use HasToggleableTable;
}
public static function table(Table $table): Table
{
$livewire = $table->getLivewire();
return $table
->columns(
$livewire->isGridLayout()
? static::getGridTableColumns()
: static::getListTableColumns()
)
->contentGrid(
fn () => $livewire->isListLayout()
? null
: [
'md' => 2,
'lg' => 3,
'xl' => 4,
]
);
}
// Define the columns for the table when displayed in list layout
public static function getListTableColumns(): array;
// Define the columns for the table when displayed in grid layout
public static function getGridTableColumns(): array;
public static function getGridTableColumns(): array
{
return [
// Make sure to stack your columns together
Tables\Columns\Layout\Stack::make([
Tables\Columns\TextColumn::make('status')->badge(),
// You may group columns together using the Split layout, so they are displayed side by side
Tables\Columns\Layout\Split::make([
Tables\Columns\TextColumn::make('customer')
->description(__('Customer'), position: 'above')
->searchable(),
Tables\Columns\TextColumn::make('owner.name')
->description(__('Owner'), position: 'above')
->searchable(),
]),
])->space(3)->extraAttributes([
'class' => 'pb-2',
]),
];
}
namespace App\Livewire\Users;
use Hydrat\TableLayoutToggle\Concerns\HasToggleableTable;
class ListUsers extends Component implements HasForms, HasTable, HasActions
{
use InteractsWithTable;
use InteractsWithActions;
use InteractsWithForms;
use HasToggleableTable; // <-- Add this line
}
public function table(Table $table): Table
{
return $table
->columns(
$this->isGridLayout()
? $this->getGridTableColumns()
: $this->getListTableColumns()
)
->contentGrid(
fn () => $this->isListLayout()
? null
: [
'md' => 2,
'lg' => 3,
'xl' => 4,
]
);
}
// Define the columns for the table when displayed in list layout
public static function getListTableColumns(): array;
// Define the columns for the table when displayed in grid layout
public static function getGridTableColumns(): array;
public static function getGridTableColumns(): array
{
return [
// Make sure to stack your columns together
Tables\Columns\Layout\Stack::make([
Tables\Columns\TextColumn::make('status')->badge(),
// You may group columns together using the Split layout, so they are displayed side by side
Tables\Columns\Layout\Split::make([
Tables\Columns\TextColumn::make('customer')
->description(__('Customer'), position: 'above')
->searchable(),
Tables\Columns\TextColumn::make('owner.name')
->description(__('Owner'), position: 'above')
->searchable(),
]),
])->space(3)->extraAttributes([
'class' => 'pb-2',
]),
];
}
Persisters\LocalStoragePersister::class # Save the layout in the local storage
Persisters\CachePersister::class # Save the layout in the application cache
Persisters\DisabledPersister::class # Do not persist the layout
namespace App\Filament\Persisters;
use Hydrat\TableLayoutToggle\Persisters;
use Hydrat\TableLayoutToggle\Contracts\LayoutPersister;
class CustomPersister extends AbstractPersister implements LayoutPersister
{
public function setState(string $layoutState): self
{
persisterSetState($this->getKey(), $layoutState);
return $this;
}
public function getState(): ?string
{
return persisterGetState($this->getKey());
}
public function onComponentBoot(): void
{
// add filament hooks to render a custom view or so...
}
}
namespace App\Livewire\Users;
class ListUsers extends Component implements HasForms, HasTable, HasActions
{
use HasToggleableTable;
/**
* Set the default layout for this table, when the user sees it for the first time.
*/
public function getDefaultLayoutView(): string
{
return 'grid';
}
/**
* Modify the persister configuration,
* or initialize a new one for this component.
*/
public function configurePersister(): void
{
// customize the persister for this specific table
$this->layoutPersister
->setKey('custom_key'. auth()->id())
->setCacheDriver('redis')
->setExpiration(60 * 24 * 7 * 4);
// or create a new persister for this specific table
$this->layoutPersister = new CustomPersister($this);
}
}