From a59a84538c51eab8981a2b53e604f1b9f8d74e9f Mon Sep 17 00:00:00 2001 From: Boy132 Date: Thu, 4 Sep 2025 15:10:20 +0200 Subject: [PATCH] finish admin frontend --- .../ServerResource/Pages/CreateServer.php | 48 ++++++++++++------ .../ServerResource/Pages/EditServer.php | 49 +++++++++++++------ .../Forms/Actions/PreviewStartupAction.php | 4 +- .../Servers/StartupCommandService.php | 6 ++- lang/en/admin/server.php | 2 + 5 files changed, 78 insertions(+), 31 deletions(-) diff --git a/app/Filament/Admin/Resources/ServerResource/Pages/CreateServer.php b/app/Filament/Admin/Resources/ServerResource/Pages/CreateServer.php index 4969efc8e..6410668b2 100644 --- a/app/Filament/Admin/Resources/ServerResource/Pages/CreateServer.php +++ b/app/Filament/Admin/Resources/ServerResource/Pages/CreateServer.php @@ -39,7 +39,6 @@ use Filament\Resources\Pages\CreateRecord; use Filament\Support\Exceptions\Halt; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; -use Illuminate\Support\Arr; use Illuminate\Support\Facades\Blade; use Illuminate\Support\HtmlString; use LogicException; @@ -317,7 +316,7 @@ class CreateServer extends CreateRecord ->live() ->afterStateUpdated(function ($state, Set $set, Get $get, $old) { $egg = Egg::query()->find($state); - $set('startup', Arr::first($egg->startup_commands, default: '')); + $set('startup', ''); $set('image', ''); $variables = $egg->variables ?? []; @@ -391,23 +390,44 @@ class CreateServer extends CreateRecord ]) ->inline(), - Textarea::make('startup') + Select::make('select_startup') + ->label(trans('admin/server.startup_name')) + ->hidden(fn (Get $get) => $get('egg_id') === null) + ->live() + ->afterStateUpdated(fn (Set $set, $state) => $set('startup', $state)) + ->options(function ($state, Get $get, Set $set) { + $egg = Egg::query()->find($get('egg_id')); + $startups = $egg->startup_commands ?? []; + + $currentStartup = $get('startup'); + if (!$currentStartup && $startups) { + $currentStartup = collect($startups)->first(); + $set('startup', $currentStartup); + $set('select_startup', $currentStartup); + } + + return array_flip($startups) + ['' => 'Custom Startup']; + }) + ->selectablePlaceholder(false) + ->columnSpanFull(), + + TextInput::make('startup') ->label(trans('admin/server.startup_cmd')) ->hidden(fn (Get $get) => $get('egg_id') === null) ->required() ->live() - ->rows(function ($state) { - return str($state)->explode("\n")->reduce( - fn (int $carry, $line) => $carry + floor(strlen($line) / 125), - 1 - ); + ->afterStateUpdated(function ($state, Get $get, Set $set) { + $egg = Egg::query()->find($get('egg_id')); + $startups = $egg->startup_commands ?? []; + + if (in_array($state, $startups)) { + $set('select_startup', $state); + } else { + $set('select_startup', ''); + } }) - ->columnSpan([ - 'default' => 1, - 'sm' => 4, - 'md' => 4, - 'lg' => 6, - ]), + ->placeholder(trans('admin/server.startup_placeholder')) + ->columnSpanFull(), Hidden::make('environment')->default([]), diff --git a/app/Filament/Admin/Resources/ServerResource/Pages/EditServer.php b/app/Filament/Admin/Resources/ServerResource/Pages/EditServer.php index 05770f135..070a99586 100644 --- a/app/Filament/Admin/Resources/ServerResource/Pages/EditServer.php +++ b/app/Filament/Admin/Resources/ServerResource/Pages/EditServer.php @@ -593,26 +593,47 @@ class EditServer extends EditRecord true => 'tabler-code-off', ]) ->required(), + Hidden::make('previewing') ->default(false), - Textarea::make('startup') + + Select::make('select_startup') + ->label(trans('admin/server.startup_name')) + ->live() + ->afterStateUpdated(fn (Set $set, $state) => $set('startup', $state)) + ->options(function ($state, Get $get, Set $set) { + $egg = Egg::query()->find($get('egg_id')); + $startups = $egg->startup_commands ?? []; + + $currentStartup = $get('startup'); + if (!$currentStartup && $startups) { + $currentStartup = collect($startups)->first(); + $set('startup', $currentStartup); + $set('select_startup', $currentStartup); + } + + return array_flip($startups) + ['' => 'Custom Startup']; + }) + ->selectablePlaceholder(false) + ->columnSpanFull(), + + TextInput::make('startup') ->label(trans('admin/server.startup_cmd')) ->required() - ->columnSpan(6) - ->autosize() - ->hintAction(PreviewStartupAction::make('preview')), - - Textarea::make('default_startup') - ->hintAction(fn () => request()->isSecure() ? CopyAction::make() : null) - ->label(trans('admin/server.default_startup')) - ->disabled() - ->autosize() - ->columnSpan(6) - ->formatStateUsing(function ($state, Get $get) { + ->live() + ->afterStateUpdated(function ($state, Get $get, Set $set) { $egg = Egg::query()->find($get('egg_id')); + $startups = $egg->startup_commands ?? []; - return Arr::first($egg->startup_commands); - }), + if (in_array($state, $startups)) { + $set('select_startup', $state); + } else { + $set('select_startup', ''); + } + }) + ->placeholder(trans('admin/server.startup_placeholder')) + ->columnSpanFull() + ->hintAction(PreviewStartupAction::make('preview')), Repeater::make('server_variables') ->hiddenLabel() diff --git a/app/Filament/Components/Forms/Actions/PreviewStartupAction.php b/app/Filament/Components/Forms/Actions/PreviewStartupAction.php index 65a6f80bb..250dffce5 100644 --- a/app/Filament/Components/Forms/Actions/PreviewStartupAction.php +++ b/app/Filament/Components/Forms/Actions/PreviewStartupAction.php @@ -26,8 +26,10 @@ class PreviewStartupAction extends Action $this->action(function (Get $get, Set $set, Server $server) { $active = $get('previewing'); + $startup = $get('startup'); + $set('previewing', !$active); - $set('startup', $active ? $server->startup : fn (Server $server, StartupCommandService $service) => $service->handle($server)); + $set('startup', $active ? $startup : fn (Server $server, StartupCommandService $service) => $service->handle($server, $startup)); }); } } diff --git a/app/Services/Servers/StartupCommandService.php b/app/Services/Servers/StartupCommandService.php index c29f3e8bb..6cc2af4af 100644 --- a/app/Services/Servers/StartupCommandService.php +++ b/app/Services/Servers/StartupCommandService.php @@ -9,8 +9,10 @@ class StartupCommandService /** * Generates a startup command for a given server instance. */ - public function handle(Server $server, bool $hideAllValues = false): string + public function handle(Server $server, ?string $startup = null, bool $hideAllValues = false): string { + $startup ??= $server->startup; + $find = ['{{SERVER_MEMORY}}', '{{SERVER_IP}}', '{{SERVER_PORT}}']; $replace = [ (string) $server->memory, @@ -23,6 +25,6 @@ class StartupCommandService $replace[] = ($variable->user_viewable && !$hideAllValues) ? ($variable->server_value ?? $variable->default_value) : '[hidden]'; } - return str_replace($find, $replace, $server->startup); + return str_replace($find, $replace, $startup); } } diff --git a/lang/en/admin/server.php b/lang/en/admin/server.php index 3fac2ef1e..1add8886d 100644 --- a/lang/en/admin/server.php +++ b/lang/en/admin/server.php @@ -25,7 +25,9 @@ return [ 'already_primary' => 'Already Primary', 'make_primary' => 'Make Primary', 'startup_cmd' => 'Startup Command', + 'startup_name' => 'Startup Name', 'default_startup' => 'Default Startup Command', + 'startup_placeholder' => 'Enter a custom startup command', 'variables' => 'Variables', 'resource_limits' => 'Resource Limits', 'cpu' => 'CPU',