diff --git a/app/Filament/App/Resources/ServerResource/Pages/ListServers.php b/app/Filament/App/Resources/ServerResource/Pages/ListServers.php index 88f6eee38..00d643ef0 100644 --- a/app/Filament/App/Resources/ServerResource/Pages/ListServers.php +++ b/app/Filament/App/Resources/ServerResource/Pages/ListServers.php @@ -9,7 +9,10 @@ use App\Tables\Columns\ServerEntryColumn; use Carbon\CarbonInterface; use Filament\Resources\Pages\ListRecords; use Filament\Tables\Columns\Layout\Stack; +use Filament\Tables\Filters\SelectFilter; +use Filament\Tables\Filters\TernaryFilter; use Filament\Tables\Table; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Arr; use Illuminate\Support\Number; @@ -19,9 +22,11 @@ class ListServers extends ListRecords public function table(Table $table): Table { + $baseQuery = auth()->user()->can('viewList server') ? Server::query() : auth()->user()->accessibleServers(); + return $table ->paginated(false) - ->query(fn () => auth()->user()->can('viewList server') ? Server::query() : auth()->user()->accessibleServers()) + ->query(fn () => $baseQuery) ->poll('15s') ->columns([ Stack::make([ @@ -36,7 +41,24 @@ class ListServers extends ListRecords ->recordUrl(fn (Server $server) => Console::getUrl(panel: 'server', tenant: $server)) ->emptyStateIcon('tabler-brand-docker') ->emptyStateDescription('') - ->emptyStateHeading('You don\'t have access to any servers!'); + ->emptyStateHeading('You don\'t have access to any servers!') + ->filters([ + TernaryFilter::make('only_my_servers') + ->label('Owned by') + ->placeholder('All servers') + ->trueLabel('My Servers') + ->falseLabel('Others\' Servers') + ->default() + ->queries( + true: fn (Builder $query) => $query->where('owner_id', auth()->user()->id), + false: fn (Builder $query) => $query->whereNot('owner_id', auth()->user()->id), + blank: fn (Builder $query) => $query, + ), + SelectFilter::make('egg') + ->relationship('egg', 'name', fn (Builder $query) => $query->whereIn('id', $baseQuery->pluck('egg_id'))) + ->searchable() + ->preload(), + ]); } // @phpstan-ignore-next-line