columns([ Tables\Columns\TextColumn::make('id')->sortable(), Tables\Columns\TextColumn::make('tenant_id')->label('Tenant')->sortable(), Tables\Columns\TextColumn::make('name')->limit(30), Tables\Columns\TextColumn::make('slug')->searchable(), Tables\Columns\TextColumn::make('date')->date(), Tables\Columns\IconColumn::make('is_active')->boolean(), Tables\Columns\TextColumn::make('default_locale'), Tables\Columns\TextColumn::make('join')->label('Join') ->getStateUsing(fn($record) => url("/e/{$record->slug}")) ->copyable() ->copyMessage('Join link copied'), Tables\Columns\TextColumn::make('created_at')->since(), ]) ->filters([]) ->actions([ Tables\Actions\ViewAction::make(), Tables\Actions\EditAction::make(), Tables\Actions\Action::make('toggle') ->label('Toggle Active') ->icon('heroicon-o-power') ->action(fn($record) => $record->update(['is_active' => ! (bool)$record->is_active])), Tables\Actions\Action::make('join_link') ->label('Join Link / QR') ->icon('heroicon-o-qr-code') ->modalHeading('Event Join Link') ->modalSubmitActionLabel('Close') ->modalContent(fn($record) => view('filament.events.join-link', [ 'link' => url("/e/{$record->slug}"), ])), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make(), ]), ]); } public static function getPages(): array { return [ 'index' => Pages\ListEvents::route('/'), 'view' => Pages\ViewEvent::route('/{record}'), 'edit' => Pages\EditEvent::route('/{record}/edit'), ]; } } namespace App\Filament\Resources\EventResource\Pages; use App\Filament\Resources\EventResource; use Filament\Resources\Pages\ListRecords; use Filament\Resources\Pages\ViewRecord; use Filament\Resources\Pages\EditRecord; class ListEvents extends ListRecords { protected static string $resource = EventResource::class; } class ViewEvent extends ViewRecord { protected static string $resource = EventResource::class; } class EditEvent extends EditRecord { protected static string $resource = EventResource::class; }