mirror of
https://github.com/tiennm99/coolify.git
synced 2026-10-17 18:14:03 +00:00
fix(destinations): handle empty and server-scoped destinations
Build the global destinations list from actual destination records so empty servers do not render duplicate empty states. Allow creating Docker destinations for a selected team server outside the global usable list, authorize swarm creation correctly, and store discovered swarm network names from the selected network. Add feature coverage for empty states, selected-server mounting, and swarm destination creation.
This commit is contained in:
1 parent
a67cc1d3a9
commit
65c0c92c02
6 files changed
+159
-41
No files matched your search
@@ -33,44 +33,49 @@ class Docker extends Component
|
||||
#[Validate(['required', 'boolean'])]
|
||||
public bool $isSwarm = false;
|
||||
|
||||
public function mount(?string $server_id = null)
|
||||
public function mount(?string $server_id = null): void
|
||||
{
|
||||
$this->network = new Cuid2;
|
||||
$this->network = (string) new Cuid2;
|
||||
$this->servers = Server::isUsable()->get();
|
||||
if ($server_id) {
|
||||
$foundServer = $this->servers->find($server_id) ?: $this->servers->first();
|
||||
if (! $foundServer) {
|
||||
throw new \Exception('Server not found.');
|
||||
|
||||
if (filled($server_id)) {
|
||||
$this->selectedServer = Server::ownedByCurrentTeam()->whereKey($server_id)->firstOrFail();
|
||||
|
||||
if (! $this->servers->contains('id', $this->selectedServer->id)) {
|
||||
$this->servers->push($this->selectedServer);
|
||||
}
|
||||
$this->selectedServer = $foundServer;
|
||||
$this->serverId = $this->selectedServer->id;
|
||||
|
||||
$this->serverId = (string) $this->selectedServer->id;
|
||||
} else {
|
||||
$foundServer = $this->servers->first();
|
||||
if (! $foundServer) {
|
||||
throw new \Exception('Server not found.');
|
||||
}
|
||||
$this->selectedServer = $foundServer;
|
||||
$this->serverId = $this->selectedServer->id;
|
||||
$this->serverId = (string) $this->selectedServer->id;
|
||||
}
|
||||
$this->generateName();
|
||||
}
|
||||
|
||||
public function updatedServerId()
|
||||
public function updatedServerId(): void
|
||||
{
|
||||
$this->selectedServer = $this->servers->find($this->serverId);
|
||||
if (! $this->selectedServer) {
|
||||
throw new \Exception('Server not found.');
|
||||
}
|
||||
$this->generateName();
|
||||
}
|
||||
|
||||
public function generateName()
|
||||
public function generateName(): void
|
||||
{
|
||||
$name = data_get($this->selectedServer, 'name', new Cuid2);
|
||||
$this->name = str("{$name}-{$this->network}")->kebab();
|
||||
}
|
||||
|
||||
public function submit()
|
||||
public function submit(): mixed
|
||||
{
|
||||
try {
|
||||
$this->authorize('create', StandaloneDocker::class);
|
||||
$this->authorize('create', $this->isSwarm ? SwarmDocker::class : StandaloneDocker::class);
|
||||
$this->validate();
|
||||
if ($this->isSwarm) {
|
||||
$found = $this->selectedServer->swarmDockers()->where('network', $this->network)->first();
|
||||
|
||||
Reference in new issue
Block a user