From c10280af4b9763e965e9e590980f68d29c094359 Mon Sep 17 00:00:00 2001 From: Boy132 Date: Fri, 19 Sep 2025 08:43:29 +0200 Subject: [PATCH] Make allocation select on users server relation manager functional (#1719) --- .../Resources/Servers/Pages/ListServers.php | 9 ++++----- .../ServersRelationManager.php | 19 ++++++++++++------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/app/Filament/Admin/Resources/Servers/Pages/ListServers.php b/app/Filament/Admin/Resources/Servers/Pages/ListServers.php index 1a6db0019..21e8b3f65 100644 --- a/app/Filament/Admin/Resources/Servers/Pages/ListServers.php +++ b/app/Filament/Admin/Resources/Servers/Pages/ListServers.php @@ -51,19 +51,19 @@ class ListServers extends ListRecords ->sortable(), TextColumn::make('node.name') ->label(trans('admin/server.node')) - ->url(fn (Server $server): string => route('filament.admin.resources.nodes.edit', ['record' => $server->node])) + ->url(fn (Server $server) => route('filament.admin.resources.nodes.edit', ['record' => $server->node])) ->hidden(fn (Table $table) => $table->getGrouping()?->getId() === 'node.name') ->sortable() ->searchable(), TextColumn::make('egg.name') ->label(trans('admin/server.egg')) - ->url(fn (Server $server): string => route('filament.admin.resources.eggs.edit', ['record' => $server->egg])) + ->url(fn (Server $server) => route('filament.admin.resources.eggs.edit', ['record' => $server->egg])) ->hidden(fn (Table $table) => $table->getGrouping()?->getId() === 'egg.name') ->sortable() ->searchable(), TextColumn::make('user.username') ->label(trans('admin/user.username')) - ->url(fn (Server $server): string => route('filament.admin.resources.users.edit', ['record' => $server->user])) + ->url(fn (Server $server) => route('filament.admin.resources.users.edit', ['record' => $server->user])) ->hidden(fn (Table $table) => $table->getGrouping()?->getId() === 'user.username') ->sortable() ->searchable(), @@ -78,8 +78,7 @@ class ListServers extends ListRecords TextColumn::make('allocation_id_readonly') ->label(trans('admin/server.primary_allocation')) ->hidden(fn () => auth()->user()->can('update server')) // TODO: update to policy check (fn (Server $server) --> $server is empty) - ->disabled(fn (Server $server) => $server->allocations->count() <= 1) - ->state(fn (Server $server) => $server->allocation->address ?? 'None'), + ->state(fn (Server $server) => $server->allocation->address ?? trans('admin/server.none')), TextColumn::make('image')->hidden(), TextColumn::make('backups_count') ->counts('backups') diff --git a/app/Filament/Admin/Resources/Users/RelationManagers/ServersRelationManager.php b/app/Filament/Admin/Resources/Users/RelationManagers/ServersRelationManager.php index 22f8efe23..a257cde15 100644 --- a/app/Filament/Admin/Resources/Users/RelationManagers/ServersRelationManager.php +++ b/app/Filament/Admin/Resources/Users/RelationManagers/ServersRelationManager.php @@ -54,24 +54,29 @@ class ServersRelationManager extends RelationManager ->searchable(), TextColumn::make('name') ->label(trans('admin/server.name')) - ->url(fn (Server $server): string => route('filament.admin.resources.servers.edit', ['record' => $server])) + ->url(fn (Server $server) => route('filament.admin.resources.servers.edit', ['record' => $server])) ->searchable() ->sortable(), TextColumn::make('node.name') ->label(trans('admin/server.node')) - ->url(fn (Server $server): string => route('filament.admin.resources.nodes.edit', ['record' => $server->node])) + ->url(fn (Server $server) => route('filament.admin.resources.nodes.edit', ['record' => $server->node])) ->sortable(), TextColumn::make('egg.name') ->label(trans('admin/server.egg')) - ->url(fn (Server $server): string => route('filament.admin.resources.eggs.edit', ['record' => $server->egg])) + ->url(fn (Server $server) => route('filament.admin.resources.eggs.edit', ['record' => $server->egg])) ->sortable(), - SelectColumn::make('allocation.id') + SelectColumn::make('allocation_id') ->label(trans('admin/server.primary_allocation')) - ->disabled() - ->options(fn (Server $server) => $server->allocations->take(1)->mapWithKeys(fn ($allocation) => [$allocation->id => $allocation->address])) + ->hidden(fn () => !auth()->user()->can('update server')) // TODO: update to policy check (fn (Server $server) --> $server is empty) + ->disabled(fn (Server $server) => $server->allocations->count() <= 1) + ->options(fn (Server $server) => $server->allocations->mapWithKeys(fn ($allocation) => [$allocation->id => $allocation->address])) + ->selectablePlaceholder(fn (Server $server) => $server->allocations->count() <= 1) ->placeholder(trans('admin/server.none')) ->sortable(), - TextColumn::make('image')->hidden(), + TextColumn::make('allocation_id_readonly') + ->label(trans('admin/server.primary_allocation')) + ->hidden(fn () => auth()->user()->can('update server')) // TODO: update to policy check (fn (Server $server) --> $server is empty) + ->state(fn (Server $server) => $server->allocation->address ?? trans('admin/server.none')), TextColumn::make('databases_count') ->counts('databases') ->label(trans('admin/server.databases'))