recordTitleAttribute('ip') // Non Primary Allocations // ->checkIfRecordIsSelectableUsing(fn (Allocation $allocation) => $allocation->id !== $allocation->server?->allocation_id) // All assigned allocations ->checkIfRecordIsSelectableUsing(fn (Allocation $allocation) => $allocation->server_id === null) ->paginationPageOptions(['10', '20', '50', '100', '200', '500']) ->searchable() ->heading('') ->selectCurrentPageOnly() //Prevent people from trying to nuke 30,000 ports at once.... -,- ->columns([ TextColumn::make('id') ->toggleable() ->toggledHiddenByDefault(), TextColumn::make('port') ->searchable() ->label(trans('admin/node.table.servers')), TextColumn::make('server.name') ->label(trans('admin/node.table.servers')) ->icon('tabler-brand-docker') ->visibleFrom('md') ->searchable() ->url(fn (Allocation $allocation): string => $allocation->server ? route('filament.admin.resources.servers.edit', ['record' => $allocation->server]) : ''), TextInputColumn::make('ip_alias') ->searchable() ->label(trans('admin/node.table.alias')), SelectColumn::make('ip') ->options(fn (Allocation $allocation) => collect($this->getOwnerRecord()->ipAddresses())->merge([$allocation->ip])->mapWithKeys(fn (string $ip) => [$ip => $ip])) ->selectablePlaceholder(false) ->searchable() ->label(trans('admin/node.table.ip')), ]) ->headerActions([ Tables\Actions\Action::make('create new allocation') ->label(trans('admin/node.create_allocations')) ->form(fn () => [ Select::make('allocation_ip') ->options(collect($this->getOwnerRecord()->ipAddresses())->mapWithKeys(fn (string $ip) => [$ip => $ip])) ->label(trans('admin/node.ip_address')) ->inlineLabel() ->ipv4() ->helperText(trans('admin/node.ip_help')) ->afterStateUpdated(fn (Set $set) => $set('allocation_ports', [])) ->live() ->required(), TextInput::make('allocation_alias') ->label(trans('admin/node.table.alias')) ->inlineLabel() ->default(null) ->helperText(trans('admin/node.alias_help')) ->required(false), TagsInput::make('allocation_ports') ->placeholder('27015, 27017-27019') ->label(trans('admin/node.ports')) ->inlineLabel() ->live() ->disabled(fn (Get $get) => empty($get('allocation_ip'))) ->afterStateUpdated(fn ($state, Set $set, Get $get) => $set('allocation_ports', CreateServer::retrieveValidPorts($this->getOwnerRecord(), $state, $get('allocation_ip'))) ) ->splitKeys(['Tab', ' ', ',']) ->required(), ]) ->action(fn (array $data, AssignmentService $service) => $service->handle($this->getOwnerRecord(), $data)), ]) ->bulkActions([ BulkActionGroup::make([ DeleteBulkAction::make() ->authorize(fn () => auth()->user()->can('delete allocation')), ]), ]); } }