mirror of
https://github.com/pelican-dev/panel.git
synced 2025-05-29 15:34:44 +02:00
Update EditServer egg variables to match CreateServer
validation is still broken on `nullable|<##>` rules
This commit is contained in:
parent
08dc5753d4
commit
f9e8adad30
@ -244,35 +244,48 @@ class EditServer extends EditRecord
|
|||||||
]))
|
]))
|
||||||
->schema([
|
->schema([
|
||||||
Forms\Components\Repeater::make('server_variables')
|
Forms\Components\Repeater::make('server_variables')
|
||||||
->label('')
|
|
||||||
->relationship('serverVariables')
|
->relationship('serverVariables')
|
||||||
->grid()
|
->grid()
|
||||||
->deletable(false)
|
->reorderable(false)->addable(false)->deletable(false)
|
||||||
->addable(false)
|
->schema(function () {
|
||||||
->schema([
|
|
||||||
Forms\Components\TextInput::make('variable_value')
|
$text = Forms\Components\TextInput::make('variable_value')
|
||||||
|
->hidden($this->shouldHideComponent(...))
|
||||||
|
->maxLength(191)
|
||||||
->rules([
|
->rules([
|
||||||
fn (Forms\Get $get): Closure => function (string $attribute, $value, Closure $fail) use ($get) {
|
fn (ServerVariable $serverVariable): Closure => function (string $attribute, $value, Closure $fail) use ($serverVariable) {
|
||||||
$validator = Validator::make(['validatorkey' => $value], [
|
$validator = Validator::make(['validatorkey' => $value], [
|
||||||
'validatorkey' => $get('rules'),
|
'validatorkey' => $serverVariable->variable->rules,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if ($validator->fails()) {
|
if ($validator->fails()) {
|
||||||
$message = str($validator->errors()->first())->replace('validatorkey', $get('name'));
|
$message = str($validator->errors()->first())->replace('validatorkey', $serverVariable->variable->name);
|
||||||
|
|
||||||
$fail($message);
|
$fail($message);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
])
|
]);
|
||||||
->label(fn (ServerVariable $variable) => $variable->variable->name)
|
|
||||||
->hintIcon('tabler-code')
|
|
||||||
->hintIconTooltip(fn (ServerVariable $variable) => $variable->variable->rules)
|
|
||||||
->prefix(fn (ServerVariable $variable) => '{{' . $variable->variable->env_variable . '}}')
|
|
||||||
->helperText(fn (ServerVariable $variable) => $variable->variable->description ?: '—')
|
|
||||||
->maxLength(191),
|
|
||||||
|
|
||||||
Forms\Components\Hidden::make('variable_id'),
|
$select = Forms\Components\Select::make('variable_value')
|
||||||
])
|
->hidden($this->shouldHideComponent(...))
|
||||||
|
->options($this->getSelectOptionsFromRules(...))
|
||||||
|
->selectablePlaceholder(false);
|
||||||
|
|
||||||
|
$components = [$text, $select];
|
||||||
|
|
||||||
|
/** @var Forms\Components\Component $component */
|
||||||
|
foreach ($components as &$component) {
|
||||||
|
$component = $component
|
||||||
|
->live(onBlur: true)
|
||||||
|
->hintIcon('tabler-code')
|
||||||
|
->label(fn (ServerVariable $serverVariable) => $serverVariable->variable->name)
|
||||||
|
->hintIconTooltip(fn (ServerVariable $serverVariable) => $serverVariable->variable->rules)
|
||||||
|
->prefix(fn (ServerVariable $serverVariable) => '{{' . $serverVariable->variable->env_variable . '}}')
|
||||||
|
->helperText(fn (ServerVariable $serverVariable) => empty($serverVariable->variable->description) ? '—' : $serverVariable->variable->description);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $components;
|
||||||
|
})
|
||||||
->columnSpan(2),
|
->columnSpan(2),
|
||||||
]),
|
]),
|
||||||
|
|
||||||
@ -487,13 +500,6 @@ class EditServer extends EditRecord
|
|||||||
->color('danger')
|
->color('danger')
|
||||||
->after(fn (Server $server) => resolve(ServerDeletionService::class)->handle($server))
|
->after(fn (Server $server) => resolve(ServerDeletionService::class)->handle($server))
|
||||||
->requiresConfirmation(),
|
->requiresConfirmation(),
|
||||||
Actions\DeleteAction::make('Force Delete')
|
|
||||||
->label('Force Delete')
|
|
||||||
->hidden()
|
|
||||||
->successRedirectUrl(route('filament.admin.resources.servers.index'))
|
|
||||||
->color('danger')
|
|
||||||
->after(fn (Server $server) => resolve(ServerDeletionService::class)->withForce()->handle($server))
|
|
||||||
->requiresConfirmation(),
|
|
||||||
Actions\Action::make('console')
|
Actions\Action::make('console')
|
||||||
->label('Console')
|
->label('Console')
|
||||||
->icon('tabler-terminal')
|
->icon('tabler-terminal')
|
||||||
@ -520,4 +526,35 @@ class EditServer extends EditRecord
|
|||||||
ServerResource\RelationManagers\AllocationsRelationManager::class,
|
ServerResource\RelationManagers\AllocationsRelationManager::class,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function shouldHideComponent(Forms\Get $get, Forms\Components\Component $component): bool
|
||||||
|
{
|
||||||
|
$containsRuleIn = str($get('rules'))->explode('|')->reduce(
|
||||||
|
fn ($result, $value) => $result === true && !str($value)->startsWith('in:'), true
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($component instanceof Forms\Components\Select) {
|
||||||
|
return $containsRuleIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($component instanceof Forms\Components\TextInput) {
|
||||||
|
return !$containsRuleIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new \Exception('Component type not supported: ' . $component::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getSelectOptionsFromRules(Forms\Get $get): array
|
||||||
|
{
|
||||||
|
$inRule = str($get('rules'))->explode('|')->reduce(
|
||||||
|
fn ($result, $value) => str($value)->startsWith('in:') ? $value : $result, ''
|
||||||
|
);
|
||||||
|
|
||||||
|
return str($inRule)
|
||||||
|
->after('in:')
|
||||||
|
->explode(',')
|
||||||
|
->each(fn ($value) => str($value)->trim())
|
||||||
|
->mapWithKeys(fn ($value) => [$value => $value])
|
||||||
|
->all();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user