Filament::getTenant(), 'user' => auth()->user(), ]; } public function getWidgets(): array { return [ ServerOverview::class, ServerConsole::class, ServerCpuChart::class, ServerMemoryChart::class, //ServerNetworkChart::class, TODO: convert units. ]; } public function getVisibleWidgets(): array { return $this->filterVisibleWidgets($this->getWidgets()); } public function getColumns(): int|string|array { return 3; } #[On('console-status')] public function receivedConsoleUpdate(?string $state = null): void { if ($state) { $this->status = ContainerStatus::from($state); } $this->cachedHeaderActions = []; $this->cacheHeaderActions(); } protected function getHeaderActions(): array { /** @var Server $server */ $server = Filament::getTenant(); return [ Action::make('start') ->color('primary') ->size(ActionSize::ExtraLarge) ->action(fn () => $this->dispatch('setServerState', state: 'start')) ->disabled(fn () => $server->isInConflictState() || !$this->status->isStartable()), Action::make('restart') ->color('gray') ->size(ActionSize::ExtraLarge) ->action(fn () => $this->dispatch('setServerState', state: 'restart')) ->disabled(fn () => $server->isInConflictState() || !$this->status->isRestartable()), Action::make('stop') ->color('danger') ->size(ActionSize::ExtraLarge) ->action(fn () => $this->dispatch('setServerState', state: 'stop')) ->hidden(fn () => $this->status->isStartingOrStopping() || $this->status->isKillable()) ->disabled(fn () => $server->isInConflictState() || !$this->status->isStoppable()), Action::make('kill') ->color('danger') ->requiresConfirmation() ->modalHeading('Do you wish to kill this server?') ->modalDescription('This can result in data corruption and/or data loss!') ->modalSubmitActionLabel('Kill Server') ->size(ActionSize::ExtraLarge) ->action(fn () => $this->dispatch('setServerState', state: 'kill')) ->hidden(fn () => $server->isInConflictState() || !$this->status->isKillable()), ]; } }