back port power actions from v4 branch (#1470)

This commit is contained in:
Charles 2025-06-28 10:41:16 -04:00 committed by GitHub
parent cdcd1c521e
commit ba7f814300
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 81 additions and 76 deletions

View File

@ -15,6 +15,7 @@ use Filament\Notifications\Notification;
use Filament\Resources\Components\Tab; use Filament\Resources\Components\Tab;
use Filament\Resources\Pages\ListRecords; use Filament\Resources\Pages\ListRecords;
use Filament\Support\Enums\Alignment; use Filament\Support\Enums\Alignment;
use Filament\Support\Enums\IconSize;
use Filament\Tables\Actions\Action; use Filament\Tables\Actions\Action;
use Filament\Tables\Actions\ActionGroup; use Filament\Tables\Actions\ActionGroup;
use Filament\Tables\Columns\Column; use Filament\Tables\Columns\Column;
@ -219,10 +220,11 @@ class ListServers extends ListRecords
} }
} }
/** @return Action[] */ /** @return Action[]|ActionGroup[] */
public static function getPowerActions(): array public static function getPowerActions(): array
{ {
return [ return [
ActionGroup::make([
Action::make('start') Action::make('start')
->color('primary') ->color('primary')
->icon('tabler-player-play-filled') ->icon('tabler-player-play-filled')
@ -248,6 +250,11 @@ class ListServers extends ListRecords
->authorize(fn (Server $server) => auth()->user()->can(Permission::ACTION_CONTROL_STOP, $server)) ->authorize(fn (Server $server) => auth()->user()->can(Permission::ACTION_CONTROL_STOP, $server))
->visible(fn (Server $server) => !$server->isInConflictState() & $server->retrieveStatus()->isKillable()) ->visible(fn (Server $server) => !$server->isInConflictState() & $server->retrieveStatus()->isKillable())
->dispatch('powerAction', fn (Server $server) => ['server' => $server, 'action' => 'kill']), ->dispatch('powerAction', fn (Server $server) => ['server' => $server, 'action' => 'kill']),
])
->icon(fn (Server $server) => $server->condition->getIcon())
->color(fn (Server $server) => $server->condition->getColor())
->tooltip(fn (Server $server) => $server->condition->getLabel())
->iconSize(IconSize::Large),
]; ];
} }
} }

View File

@ -1,30 +1,37 @@
<div wire:poll.15s class="relative"> <div wire:poll.15s
<a href="{{ \App\Filament\Server\Pages\Console::getUrl(panel: 'server', tenant: $server) }}" wire:navigate> class="relative cursor-pointer"
<div x-on:click="window.location.href = '{{ \App\Filament\Server\Pages\Console::getUrl(panel: 'server', tenant: $server) }}'">
class="absolute left-0 top-1 bottom-0 w-1 rounded-lg"
<div class="absolute left-0 top-1 bottom-0 w-1 rounded-lg"
style="background-color: {{ $server->condition->getColor(true) }};"> style="background-color: {{ $server->condition->getColor(true) }};">
</div> </div>
<div class="flex-1 dark:bg-gray-850 dark:text-white rounded-t-lg overflow-hidden p-2"> <div class="flex-1 dark:bg-gray-800 dark:text-white rounded-lg overflow-hidden p-3">
<div class="flex items-center mb-5 gap-2"> <div class="flex items-center mb-5 gap-2">
<x-filament::icon-button <div class="end-0" x-on:click.stop>
:icon="$server->condition->getIcon()" <div class="flex-1 dark:bg-gray-800 dark:text-white rounded-b-lg overflow-hidden p-1">
:color="$server->condition->getColor()" <x-filament-tables::actions
:tooltip="$server->condition->getLabel()" :actions="\App\Filament\App\Resources\ServerResource\Pages\ListServers::getPowerActions()"
size="xl" :alignment="\Filament\Support\Enums\Alignment::Center"
:record="$server"
/> />
</div>
</div>
<h2 class="text-xl font-bold"> <h2 class="text-xl font-bold">
{{ $server->name }} {{ $server->name }}
<span class="dark:text-gray-400">({{ $server->formatResource('uptime', type: \App\Enums\ServerResourceType::Time) }})</span> <span class="dark:text-gray-400">
({{ $server->formatResource('uptime', type: \App\Enums\ServerResourceType::Time) }})
</span>
</h2> </h2>
</div> </div>
<div class="flex justify-between text-center"> <div class="flex justify-between text-center items-center gap-4">
<div> <div>
<p class="text-sm dark:text-gray-400">CPU</p> <p class="text-sm dark:text-gray-400">CPU</p>
<p class="text-md font-semibold">{{ $server->formatResource('cpu_absolute', type: \App\Enums\ServerResourceType::Percentage) }}</p> <p class="text-md font-semibold">{{ $server->formatResource('cpu_absolute', type: \App\Enums\ServerResourceType::Percentage) }}</p>
<hr class="p-0.5"> <hr class="p-0.5">
<p class="text-xs dark:text-gray-400">{{ $server->formatResource('cpu', type: \App\Enums\ServerResourceType::Percentage, limit: true) }}</p> <p class="text-xs dark:text-gray-400">{{ $server->formatResource('cpu', limit: true, type: \App\Enums\ServerResourceType::Percentage) }}</p>
</div> </div>
<div> <div>
<p class="text-sm dark:text-gray-400">Memory</p> <p class="text-sm dark:text-gray-400">Memory</p>
@ -41,17 +48,8 @@
<div class="hidden sm:block"> <div class="hidden sm:block">
<p class="text-sm dark:text-gray-400">Network</p> <p class="text-sm dark:text-gray-400">Network</p>
<hr class="p-0.5"> <hr class="p-0.5">
<p class="text-md font-semibold">{{ $server->allocation?->address ?? 'None' }} </p> <p class="text-md font-semibold">{{ $server->allocation->address }} </p>
</div> </div>
</div> </div>
</div> </div>
</a>
<div class="flex-1 dark:bg-gray-850 dark:text-white rounded-b-lg overflow-hidden p-1">
<x-filament-tables::actions
:actions="\App\Filament\App\Resources\ServerResource\Pages\ListServers::getPowerActions()"
:alignment="\Filament\Support\Enums\Alignment::Center"
:record="$server"
/>
</div>
</div> </div>