Allow startup command to change with server variable

This commit is contained in:
Lance Pioch 2024-06-07 00:59:48 -04:00
parent 32e96dc0a6
commit b1d7d210fc

View File

@ -50,37 +50,8 @@ class CreateServer extends CreateRecord
$this->egg = Egg::query()->find($state); $this->egg = Egg::query()->find($state);
$set('startup', $this->egg->startup); $set('startup', $this->egg->startup);
$set('image', ''); $set('image', '');
// $set('assignments', null);
$this->eggDefaultPorts = [];
$variables = $this->egg->variables ?? []; $this->resetEggVariables($set, $get);
$serverVariables = collect();
$i = 0;
$this->ports = [];
foreach ($variables as $variable) {
if (str_contains($variable->rules, 'port')) {
$this->eggDefaultPorts[$variable->default_value] = $variable->env_variable;
$this->ports[] = (int) $variable->default_value;
$set("assignments.$i", ['port' => $i++]);
continue;
}
$serverVariables->add($variable->toArray());
}
$set('ports', array_keys($this->eggDefaultPorts));
$variables = [];
$set($path = 'server_variables', $serverVariables->sortBy(['sort'])->all());
for ($i = 0; $i < $serverVariables->count(); $i++) {
$set("$path.$i.variable_value", $serverVariables[$i]['default_value']);
$set("$path.$i.variable_id", $serverVariables[$i]['id']);
$variables[$serverVariables[$i]['env_variable']] = $serverVariables[$i]['default_value'];
}
$set('environment', $variables);
$previousEgg = Egg::query()->find($old); $previousEgg = Egg::query()->find($old);
if (!$get('name') || $previousEgg?->getKebabName() === $get('name')) { if (!$get('name') || $previousEgg?->getKebabName() === $get('name')) {
@ -146,7 +117,6 @@ class CreateServer extends CreateRecord
Forms\Components\TagsInput::make('ports') Forms\Components\TagsInput::make('ports')
->columnSpan(3) ->columnSpan(3)
->placeholder('Example: 25565, 8080, 1337-1340') ->placeholder('Example: 25565, 8080, 1337-1340')
->reorderable()
->splitKeys(['Tab', ' ', ',']) ->splitKeys(['Tab', ' ', ','])
->helperText(new HtmlString(' ->helperText(new HtmlString('
These are the ports that users can connect to this Server through. These are the ports that users can connect to this Server through.
@ -172,9 +142,8 @@ class CreateServer extends CreateRecord
->disabled(fn (Forms\Get $get) => empty($get('../../ports')) || empty($get('../../assignments'))) ->disabled(fn (Forms\Get $get) => empty($get('../../ports')) || empty($get('../../assignments')))
->prefix(function (Forms\Components\Component $component) { ->prefix(function (Forms\Components\Component $component) {
$key = str($component->getStatePath())->beforeLast('.')->afterLast('.')->toString(); $key = str($component->getStatePath())->beforeLast('.')->afterLast('.')->toString();
$defaultPort = array_keys($this->eggDefaultPorts)[$key] ?? null;
return $this->eggDefaultPorts[$defaultPort] ?? ''; return $key;
}) })
->disableOptionsWhenSelectedInSiblingRepeaterItems() ->disableOptionsWhenSelectedInSiblingRepeaterItems()
->options(fn (Forms\Get $get) => $this->ports) ->options(fn (Forms\Get $get) => $this->ports)
@ -187,6 +156,7 @@ class CreateServer extends CreateRecord
->required() ->required()
->live() ->live()
->disabled(fn (Forms\Get $get) => $this->egg === null) ->disabled(fn (Forms\Get $get) => $this->egg === null)
->afterStateUpdated($this->resetEggVariables(...))
->columnSpan([ ->columnSpan([
'default' => 2, 'default' => 2,
'sm' => 4, 'sm' => 4,
@ -639,4 +609,45 @@ class CreateServer extends CreateRecord
$set('ports', $ports->all()); $set('ports', $ports->all());
$this->ports = $ports->all(); $this->ports = $ports->all();
} }
public function resetEggVariables(Forms\Set $set, Forms\Get $get)
{
$set('assignments', []);
$i = 0;
$this->eggDefaultPorts = [];
if (str_contains($get('startup'), '{{SERVER_PORT}}')) {
$this->eggDefaultPorts['SERVER_PORT'] = null;
$set('assignments.SERVER_PORT', ['port' => null]);
}
$variables = $this->egg->variables ?? [];
$serverVariables = collect();
$this->ports = [];
foreach ($variables as $variable) {
if (str_contains($variable->rules, 'port')) {
$this->eggDefaultPorts[$variable->env_variable] = $variable->default_value;
$this->ports[] = (int) $variable->default_value;
// $set("assignments.$i", ['port' => $i++]);
$set("assignments.$variable->env_variable", ['port' => $i++]);
continue;
}
$serverVariables->add($variable->toArray());
}
$set('ports', $this->ports);
$variables = [];
$set($path = 'server_variables', $serverVariables->sortBy(['sort'])->all());
for ($i = 0; $i < $serverVariables->count(); $i++) {
$set("$path.$i.variable_value", $serverVariables[$i]['default_value']);
$set("$path.$i.variable_id", $serverVariables[$i]['id']);
$variables[$serverVariables[$i]['env_variable']] = $serverVariables[$i]['default_value'];
}
$set('environment', $variables);
}
} }