Redo how docker images work

This commit is contained in:
Lance Pioch 2024-05-04 15:05:15 -04:00
parent 48c97ee1cc
commit ec0882cd14

View File

@ -246,7 +246,7 @@ class CreateServer extends CreateRecord
'default' => 2, 'default' => 2,
'sm' => 2, 'sm' => 2,
'md' => 2, 'md' => 2,
'lg' => 6, 'lg' => 5,
]) ])
->relationship('egg', 'name') ->relationship('egg', 'name')
->searchable() ->searchable()
@ -255,6 +255,7 @@ class CreateServer extends CreateRecord
->afterStateUpdated(function ($state, Forms\Set $set, Forms\Get $get, $old) { ->afterStateUpdated(function ($state, Forms\Set $set, Forms\Get $get, $old) {
$egg = Egg::query()->find($state); $egg = Egg::query()->find($state);
$set('startup', $egg->startup); $set('startup', $egg->startup);
$set('image', '');
$variables = $egg->variables ?? []; $variables = $egg->variables ?? [];
$serverVariables = collect(); $serverVariables = collect();
@ -282,6 +283,12 @@ class CreateServer extends CreateRecord
Forms\Components\ToggleButtons::make('skip_scripts') Forms\Components\ToggleButtons::make('skip_scripts')
->label('Run Egg Install Script?') ->label('Run Egg Install Script?')
->default(false) ->default(false)
->columnSpan([
'default' => 1,
'sm' => 1,
'md' => 1,
'lg' => 1,
])
->options([ ->options([
false => 'Yes', false => 'Yes',
true => 'Skip', true => 'Skip',
@ -297,67 +304,54 @@ class CreateServer extends CreateRecord
->inline() ->inline()
->required(), ->required(),
Forms\Components\ToggleButtons::make('custom_image') Forms\Components\Select::make('select_image')
->label('Docker Image Name')
->prefixIcon('tabler-brand-docker')
->live() ->live()
->label('Custom Image?') ->afterStateUpdated(fn (Forms\Set $set, $state) => $set('image', $state))
->default(false) ->options(function ($state, Forms\Get $get, Forms\Set $set) {
->formatStateUsing(function ($state, Forms\Get $get) { $egg = Egg::query()->find($get('egg_id'));
if ($state !== null) { $images = $egg->docker_images ?? [];
return $state;
$currentImage = $get('image');
if (!$currentImage && $images) {
$defaultImage = collect($images)->first();
$set('image', $defaultImage);
$set('select_image', $defaultImage);
} }
$images = Egg::find($get('egg_id'))->docker_images ?? []; return array_flip($images) + ['ghcr.io/custom-image' => 'Custom Image'];
return !in_array($get('image'), $images);
}) })
->options([
false => 'No',
true => 'Yes',
])
->colors([
false => 'primary',
true => 'danger',
])
->icons([
false => 'tabler-settings-cancel',
true => 'tabler-settings-check',
])
->inline(),
Forms\Components\TextInput::make('image')
->hidden(fn (Forms\Get $get) => !$get('custom_image'))
->disabled(fn (Forms\Get $get) => !$get('custom_image'))
->label('Docker Image')
->placeholder('Enter a custom Image')
->columnSpan([
'default' => 2,
'sm' => 2,
'md' => 2,
'lg' => 4,
])
->required(),
Forms\Components\Select::make('image')
->hidden(fn (Forms\Get $get) => $get('custom_image'))
->disabled(fn (Forms\Get $get) => $get('custom_image'))
->label('Docker Image')
->prefixIcon('tabler-brand-docker')
->options(function (Forms\Get $get, Forms\Set $set) {
$images = Egg::find($get('egg_id'))->docker_images ?? [];
$set('image', collect($images)->first());
return $images;
})
->disabled(fn (Forms\Components\Select $component) => empty($component->getOptions()))
->selectablePlaceholder(false) ->selectablePlaceholder(false)
->columnSpan([ ->columnSpan([
'default' => 2, 'default' => 2,
'sm' => 2, 'sm' => 2,
'md' => 2, 'md' => 2,
'lg' => 4, 'lg' => 3,
]) ]),
->required(),
Forms\Components\TextInput::make('image')
->label('Docker Image')
->prefixIcon('tabler-brand-docker')
->live()
->debounce(500)
->afterStateUpdated(function ($state, Forms\Get $get, Forms\Set $set) {
$egg = Egg::query()->find($get('egg_id'));
$images = $egg->docker_images ?? [];
if (in_array($state, $images)) {
$set('select_image', $state);
} else {
$set('select_image', 'ghcr.io/custom-image');
}
})
->placeholder('Enter a custom Image')
->columnSpan([
'default' => 2,
'sm' => 2,
'md' => 2,
'lg' => 3,
]),
Forms\Components\Fieldset::make('Application Feature Limits') Forms\Components\Fieldset::make('Application Feature Limits')
->inlineLabel() ->inlineLabel()