diff --git a/app/Filament/Resources/ServerResource/Pages/CreateServer.php b/app/Filament/Resources/ServerResource/Pages/CreateServer.php index 78ee1eec4..7973349eb 100644 --- a/app/Filament/Resources/ServerResource/Pages/CreateServer.php +++ b/app/Filament/Resources/ServerResource/Pages/CreateServer.php @@ -23,6 +23,8 @@ class CreateServer extends CreateRecord protected static string $resource = ServerResource::class; protected static bool $canCreateAnother = false; + public ?Node $node = null; + public function form(Form $form): Form { return $form @@ -77,13 +79,16 @@ class CreateServer extends CreateRecord Forms\Components\Select::make('node_id') ->disabledOn('edit') ->prefixIcon('tabler-server-2') - ->default(fn () => Node::query()->latest()->first()?->id) + ->default(fn () => ($this->node = Node::query()->latest()->first())?->id) ->columnSpan(2) ->live() ->relationship('node', 'name') ->searchable() ->preload() - ->afterStateUpdated(fn (Forms\Set $set) => $set('allocation_id', null)) + ->afterStateUpdated(function (Forms\Set $set, $state) { + $set('allocation_id', null); + $this->node = Node::find($state); + }) ->required(), Forms\Components\Select::make('allocation_id') @@ -688,6 +693,15 @@ class CreateServer extends CreateRecord ->keyLabel('Title') ->valueLabel('Description') ->columnSpan(3), + + Forms\Components\CheckboxList::make('mounts') + ->live() + ->relationship('mounts') + ->options(fn () => $this->node?->mounts->mapWithKeys(fn ($mount) => [$mount->id => $mount->name]) ?? []) + ->descriptions(fn () => $this->node?->mounts->mapWithKeys(fn ($mount) => [$mount->id => "$mount->source -> $mount->target"]) ?? []) + ->label('Mounts') + ->helperText(fn () => $this->node?->mounts->isNotEmpty() ? '' : 'No Mounts exist for this Node') + ->columnSpanFull(), ]), ]), ]); diff --git a/app/Filament/Resources/ServerResource/Pages/EditServer.php b/app/Filament/Resources/ServerResource/Pages/EditServer.php index c047301a1..eca666def 100644 --- a/app/Filament/Resources/ServerResource/Pages/EditServer.php +++ b/app/Filament/Resources/ServerResource/Pages/EditServer.php @@ -516,6 +516,13 @@ class EditServer extends EditRecord ->keyLabel('Label Name') ->valueLabel('Label Description') ->columnSpanFull(), + + Forms\Components\CheckboxList::make('mounts') + ->relationship('mounts') + ->options(fn (Server $server) => $server->node->mounts->mapWithKeys(fn ($mount) => [$mount->id => $mount->name])) + ->descriptions(fn (Server $server) => $server->node->mounts->mapWithKeys(fn ($mount) => [$mount->id => "$mount->source -> $mount->target"])) + ->label('Mounts') + ->columnSpanFull(), ]), ]), ]); diff --git a/app/Http/Controllers/Admin/ServersController.php b/app/Http/Controllers/Admin/ServersController.php index 5a2b8074f..b62957620 100644 --- a/app/Http/Controllers/Admin/ServersController.php +++ b/app/Http/Controllers/Admin/ServersController.php @@ -9,7 +9,6 @@ use Illuminate\Http\Response; use App\Models\Mount; use App\Models\Server; use App\Models\Database; -use App\Models\MountServer; use Illuminate\Http\RedirectResponse; use Prologue\Alerts\AlertsMessageBag; use App\Exceptions\DisplayException; @@ -228,12 +227,7 @@ class ServersController extends Controller */ public function addMount(Request $request, Server $server): RedirectResponse { - $mountServer = (new MountServer())->forceFill([ - 'mount_id' => $request->input('mount_id'), - 'server_id' => $server->id, - ]); - - $mountServer->saveOrFail(); + $server->mounts()->attach($request->input('mount_id')); $this->alert->success('Mount was added successfully.')->flash(); @@ -245,7 +239,7 @@ class ServersController extends Controller */ public function deleteMount(Server $server, Mount $mount): RedirectResponse { - MountServer::where('mount_id', $mount->id)->where('server_id', $server->id)->delete(); + $server->mounts()->detach($mount); $this->alert->success('Mount was removed successfully.')->flash(); diff --git a/app/Models/MountServer.php b/app/Models/MountServer.php deleted file mode 100644 index 8d04723cb..000000000 --- a/app/Models/MountServer.php +++ /dev/null @@ -1,16 +0,0 @@ -hasMany(Backup::class); } - /** - * Returns all mounts that have this server has mounted. - */ - public function mounts(): HasManyThrough + public function mounts(): BelongsToMany { - return $this->hasManyThrough(Mount::class, MountServer::class, 'server_id', 'id', 'id', 'mount_id'); + return $this->belongsToMany(Mount::class); } /**