Fix power buttons (#799)

This commit is contained in:
Lance Pioch 2024-12-08 16:19:15 -05:00 committed by GitHub
parent 5d2b892eab
commit 839ff96271
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 22 additions and 4 deletions

View File

@ -2,6 +2,7 @@
namespace App\Filament\Server\Pages; namespace App\Filament\Server\Pages;
use App\Enums\ContainerStatus;
use App\Filament\Server\Widgets\ServerConsole; use App\Filament\Server\Widgets\ServerConsole;
use App\Filament\Server\Widgets\ServerCpuChart; use App\Filament\Server\Widgets\ServerCpuChart;
use App\Filament\Server\Widgets\ServerMemoryChart; use App\Filament\Server\Widgets\ServerMemoryChart;
@ -12,6 +13,7 @@ use Filament\Actions\Action;
use Filament\Facades\Filament; use Filament\Facades\Filament;
use Filament\Pages\Page; use Filament\Pages\Page;
use Filament\Support\Enums\ActionSize; use Filament\Support\Enums\ActionSize;
use Livewire\Attributes\On;
class Console extends Page class Console extends Page
{ {
@ -21,6 +23,8 @@ class Console extends Page
protected static string $view = 'filament.server.pages.console'; protected static string $view = 'filament.server.pages.console';
public ContainerStatus $status = ContainerStatus::Missing;
public function getWidgetData(): array public function getWidgetData(): array
{ {
return [ return [
@ -50,6 +54,16 @@ class Console extends Page
return 3; return 3;
} }
#[On('powerChanged')]
public function powerChanged(string $state): void
{
$this->status = ContainerStatus::from($state);
$this->cachedHeaderActions = [];
$this->cacheHeaderActions();
}
protected function getHeaderActions(): array protected function getHeaderActions(): array
{ {
/** @var Server $server */ /** @var Server $server */
@ -60,17 +74,18 @@ class Console extends Page
->color('primary') ->color('primary')
->size(ActionSize::ExtraLarge) ->size(ActionSize::ExtraLarge)
->action(fn () => $this->dispatch('setServerState', state: 'start')) ->action(fn () => $this->dispatch('setServerState', state: 'start'))
->disabled(fn () => $server->isInConflictState()), ->disabled(fn () => $server->isInConflictState() || in_array($this->status, [ContainerStatus::Running, ContainerStatus::Starting, ContainerStatus::Stopping, ContainerStatus::Restarting])),
Action::make('restart') Action::make('restart')
->color('gray') ->color('gray')
->size(ActionSize::ExtraLarge) ->size(ActionSize::ExtraLarge)
->action(fn () => $this->dispatch('setServerState', state: 'restart')) ->action(fn () => $this->dispatch('setServerState', state: 'restart'))
->disabled(fn () => $server->isInConflictState() || $server->retrieveStatus() == 'offline'), ->disabled(fn () => $server->isInConflictState() || $this->status !== ContainerStatus::Running),
Action::make('stop') Action::make('stop')
->color('danger') ->color('danger')
->size(ActionSize::ExtraLarge) ->size(ActionSize::ExtraLarge)
->action(fn () => $this->dispatch('setServerState', state: 'stop')) ->action(fn () => $this->dispatch('setServerState', state: 'stop'))
->disabled(fn () => $server->isInConflictState() || $server->retrieveStatus() == 'offline'), ->hidden(fn () => in_array($this->status, [ContainerStatus::Stopping, ContainerStatus::Restarting, ContainerStatus::Starting]))
->disabled(fn () => $server->isInConflictState() || in_array($this->status, [ContainerStatus::Starting, ContainerStatus::Stopping, ContainerStatus::Restarting, ContainerStatus::Exited, ContainerStatus::Offline])),
Action::make('kill') Action::make('kill')
->color('danger') ->color('danger')
->requiresConfirmation() ->requiresConfirmation()
@ -79,7 +94,8 @@ class Console extends Page
->modalSubmitActionLabel('Kill Server') ->modalSubmitActionLabel('Kill Server')
->size(ActionSize::ExtraLarge) ->size(ActionSize::ExtraLarge)
->action(fn () => $this->dispatch('setServerState', state: 'kill')) ->action(fn () => $this->dispatch('setServerState', state: 'kill'))
->disabled(fn () => $server->isInConflictState() || $server->retrieveStatus() == 'offline'), ->hidden(fn () => $server->isInConflictState() || in_array($this->status, [ContainerStatus::Running, ContainerStatus::Restarting, ContainerStatus::Offline, ContainerStatus::Removing, ContainerStatus::Dead, ContainerStatus::Exited, ContainerStatus::Created]))
->disabled(fn () => $server->isInConflictState() || $this->status === ContainerStatus::Offline),
]; ];
} }
} }

View File

@ -125,6 +125,8 @@
break; break;
case 'status': case 'status':
handlePowerChangeEvent(args[0]); handlePowerChangeEvent(args[0]);
$wire.dispatch('powerChanged', {state: args[0]})
break; break;
case 'transfer status': case 'transfer status':
handleTransferStatus(args[0]); handleTransferStatus(args[0]);