44
55use App \Exceptions \Service \Deployment \NoViableAllocationException ;
66use App \Exceptions \Service \Deployment \NoViableNodeException ;
7+ use App \Filament \Components \Forms \Fields \StartupVariable ;
78use App \Filament \Server \Pages \Console ;
89use App \Models \Egg ;
910use App \Services \Servers \RandomWordService ;
1011use Boy132 \UserCreatableServers \Models \UserResourceLimits ;
1112use Exception ;
1213use Filament \Actions \Action ;
14+ use Filament \Forms \Components \Repeater ;
1315use Filament \Forms \Components \Select ;
1416use Filament \Forms \Components \TextInput ;
1517use Filament \Notifications \Notification ;
18+ use Filament \Schemas \Components \Utilities \Get ;
19+ use Filament \Schemas \Components \Utilities \Set ;
20+ use Illuminate \Support \Arr ;
1621
1722class CreateServerAction extends Action
1823{
@@ -54,7 +59,23 @@ protected function setUp(): void
5459 ->options (fn () => Egg::all ()->mapWithKeys (fn (Egg $ egg ) => [$ egg ->id => $ egg ->name ]))
5560 ->required ()
5661 ->searchable ()
57- ->preload (),
62+ ->preload ()
63+ ->live ()
64+ ->afterStateUpdated (function ($ state , Set $ set ) {
65+ $ egg = Egg::find ($ state );
66+
67+ $ variables = $ egg ->variables ?? [];
68+ $ serverVariables = collect ();
69+ foreach ($ variables as $ variable ) {
70+ $ serverVariables ->add ($ variable ->toArray ());
71+ }
72+
73+ $ set ('variables ' , $ serverVariables ->sortBy (['sort ' ])->all ());
74+ for ($ i = 0 ; $ i < $ serverVariables ->count (); $ i ++) {
75+ $ set ("variables. $ i.variable_value " , $ serverVariables [$ i ]['default_value ' ]);
76+ $ set ("variables. $ i.variable_id " , $ serverVariables [$ i ]['id ' ]);
77+ }
78+ }),
5879 TextInput::make ('cpu ' )
5980 ->label (trans ('user-creatable-servers::strings.cpu ' ))
6081 ->required ()
@@ -76,6 +97,20 @@ protected function setUp(): void
7697 ->minValue ($ userResourceLimits ->disk > 0 ? 1 : 0 )
7798 ->maxValue ($ userResourceLimits ->getDiskLeft ())
7899 ->suffix (config ('panel.use_binary_prefix ' ) ? 'MiB ' : 'MB ' ),
100+ Repeater::make ('variables ' )
101+ ->label (trans ('user-creatable-servers::strings.variables ' ))
102+ ->hidden (fn (Get $ get ) => !$ get ('egg_id ' ))
103+ ->grid (2 )
104+ ->reorderable (false )
105+ ->addable (false )
106+ ->deletable (false )
107+ ->default ([])
108+ ->hidden (fn ($ state ) => empty ($ state ))
109+ ->schema ([
110+ StartupVariable::make ('variable_value ' )
111+ ->fromForm ()
112+ ->disabled (false ),
113+ ]),
79114 ];
80115 });
81116
@@ -84,7 +119,7 @@ protected function setUp(): void
84119 /** @var UserResourceLimits $userResourceLimits */
85120 $ userResourceLimits = UserResourceLimits::where ('user_id ' , auth ()->user ()->id )->firstOrFail ();
86121
87- if ($ server = $ userResourceLimits ->createServer ($ data ['name ' ], $ data ['egg_id ' ], $ data ['cpu ' ], $ data ['memory ' ], $ data ['disk ' ])) {
122+ if ($ server = $ userResourceLimits ->createServer ($ data ['name ' ], $ data ['egg_id ' ], $ data ['cpu ' ], $ data ['memory ' ], $ data ['disk ' ], Arr:: mapWithKeys ( $ data [ ' variables ' ], fn ( $ value ) => [ $ value [ ' env_variable ' ] => $ value [ ' variable_value ' ]]) )) {
88123 redirect (Console::getUrl (panel: 'server ' , tenant: $ server ));
89124 }
90125 } catch (Exception $ exception ) {
0 commit comments