Volume names are updated upon save. The service UUID will be added as a prefix to all volumes, to
- prevent
- name collision.
To see the actual volume names, check the Deployable Compose file, or go to Storage
- menu.
+
diff --git a/tests/Feature/ServiceComposeResourcesViewSwitcherTest.php b/tests/Feature/ServiceComposeResourcesViewSwitcherTest.php
index c859edc37..6bcf25af1 100644
--- a/tests/Feature/ServiceComposeResourcesViewSwitcherTest.php
+++ b/tests/Feature/ServiceComposeResourcesViewSwitcherTest.php
@@ -54,3 +54,10 @@ it('distinguishes domain management from resource settings', function () {
->toContain('title="Resource settings" aria-label="Resource settings"')
->not->toContain('title="Edit domains" aria-label="Edit domains"');
});
+
+it('does not display application domains on compose resource cards', function () {
+ $resourceCard = file_get_contents(resource_path('views/livewire/project/service/resource-card.blade.php'));
+
+ expect($resourceCard)
+ ->not->toContain('{{ $resource->fqdn }}');
+});
From 9c0908f0fcb86f8280705107eb1e2c2be09132d7 Mon Sep 17 00:00:00 2001
From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com>
Date: Fri, 7 Aug 2026 17:14:43 +0200
Subject: [PATCH 08/12] feat(ui): polish DB public access, backups, and nav
Gate public TCP proxy until a port is set, show loading while saving
access, and open proxy logs in process-dialog. Compact backup
execution actions, add Postgres general section anchors, and tint
resource Actions icons with warning color.
---
resources/css/app.css | 4 +-
.../database/configuration-sidebar.blade.php | 35 +++++++++++++++-
.../views/components/process-dialog.blade.php | 3 +-
.../project/application/heading.blade.php | 4 +-
.../database/backup-edit/general.blade.php | 4 +-
.../database/backup-executions.blade.php | 42 ++++++++++++-------
.../database/clickhouse/general.blade.php | 21 ++++++----
.../database/dragonfly/general.blade.php | 21 ++++++----
.../project/database/heading.blade.php | 4 +-
.../project/database/import-form.blade.php | 7 ++--
.../project/database/keydb/general.blade.php | 21 ++++++----
.../database/mariadb/general.blade.php | 21 ++++++----
.../database/mongodb/general.blade.php | 21 ++++++----
.../project/database/mysql/general.blade.php | 21 ++++++----
.../database/postgresql/general.blade.php | 35 +++++++++-------
.../project/database/redis/general.blade.php | 21 ++++++----
.../database/scheduled-backups.blade.php | 10 ++++-
.../project/service/heading.blade.php | 4 +-
.../livewire/project/service/index.blade.php | 6 +--
.../project/shared/get-logs.blade.php | 2 +-
.../server/cloudflare-tunnel.blade.php | 4 +-
.../views/livewire/server/navbar.blade.php | 8 ++--
.../server/security/patches.blade.php | 8 ++--
.../views/livewire/server/show.blade.php | 16 ++-----
.../DatabaseBackupSelectionInputTest.php | 2 +
tests/Feature/DatabaseBackupsLayoutTest.php | 7 +++-
.../DatabasePublicAccessLoadingTest.php | 28 +++++++++++++
tests/Feature/DatabaseRestoreDialogTest.php | 10 +++++
tests/Feature/EmptyStateComponentTest.php | 32 ++++++++++++++
tests/Feature/MobileResourceMenuTest.php | 13 ++++++
tests/Feature/ProcessDialogTest.php | 39 +++++++++++++++++
tests/Feature/Proxy/RestartProxyTest.php | 41 +++++++++++++++++-
tests/Feature/ServerValidationDialogTest.php | 5 ++-
.../ServiceDatabaseVerticalNavigationTest.php | 8 +++-
.../Feature/SettingsSectionHighlightTest.php | 28 +++++++++++++
35 files changed, 413 insertions(+), 143 deletions(-)
create mode 100644 tests/Feature/DatabasePublicAccessLoadingTest.php
create mode 100644 tests/Feature/DatabaseRestoreDialogTest.php
diff --git a/resources/css/app.css b/resources/css/app.css
index a15281973..080d528e6 100644
--- a/resources/css/app.css
+++ b/resources/css/app.css
@@ -2441,7 +2441,9 @@ input[type="search"]::-webkit-search-results-decoration {
}
.backup-executions-table-grid {
- grid-template-columns: 7.5rem minmax(9rem, 1fr) 8rem 6rem 5rem minmax(9rem, 1fr) minmax(9rem, auto);
+ grid-template-columns: 6.5rem minmax(7rem, 1fr) 7rem 5rem 4rem minmax(8rem, 1fr) 5rem;
+ gap: 0.75rem;
+ min-width: 49rem;
}
.volume-backup-executions-grid {
diff --git a/resources/views/components/database/configuration-sidebar.blade.php b/resources/views/components/database/configuration-sidebar.blade.php
index 9091ffcb0..a2f301230 100644
--- a/resources/views/components/database/configuration-sidebar.blade.php
+++ b/resources/views/components/database/configuration-sidebar.blade.php
@@ -12,10 +12,10 @@
['label' => 'Environment Variables', 'route' => 'project.database.environment-variables', 'icon' => 'variables'],
['label' => 'Persistent Storage', 'route' => 'project.database.persistent-storage', 'icon' => 'storages'],
['label' => 'Backups', 'route' => 'project.database.backup.index', 'icon' => 'database', 'visible' => $database->isBackupSolutionAvailable()],
+ ['label' => 'Import Backup', 'route' => 'project.database.import-backup', 'icon' => 'upload', 'navigate' => false, 'visible' => auth()->user()?->can('update', $database)],
['label' => 'Servers', 'route' => 'project.database.servers', 'icon' => 'servers'],
['label' => 'Runtime', 'route' => 'project.database.logs', 'icon' => 'unordered-list', 'navigate' => false],
['label' => 'Terminal', 'route' => 'project.database.command', 'icon' => 'browser-terminal', 'navigate' => false, 'visible' => auth()->user()?->can('canAccessTerminal')],
- ['label' => 'Import Backup', 'route' => 'project.database.import-backup', 'icon' => 'upload', 'visible' => auth()->user()?->can('update', $database)],
['label' => 'Webhooks', 'route' => 'project.database.webhooks', 'icon' => 'notifications'],
['label' => 'Healthcheck', 'route' => 'project.database.healthcheck', 'icon' => 'feedback'],
['label' => 'Resource Limits', 'route' => 'project.database.resource-limits', 'icon' => 'cpu'],
@@ -32,7 +32,7 @@
]);
$menuGroups = [
- 'Settings' => ['General', 'Environment Variables', 'Persistent Storage', 'Backups', 'Servers', 'Import Backup'],
+ 'Settings' => ['General', 'Environment Variables', 'Persistent Storage', 'Backups', 'Import Backup', 'Servers'],
'Automation' => ['Webhooks', 'Healthcheck'],
'Logs' => ['Runtime'],
'Operations' => ['Terminal', 'Resource Limits', 'Resource Operations', 'Metrics', 'Tags', 'Danger Zone'],
@@ -41,6 +41,19 @@
$groupedItems = collect($menuGroups)
->map(fn (array $labels) => $configurationItems->whereIn('label', $labels)->values())
->filter(fn ($items) => $items->isNotEmpty());
+
+ $pageSections = $database->type() === 'standalone-postgresql'
+ ? [
+ ['id' => 'database-details-section', 'label' => 'Database details'],
+ ['id' => 'credentials-section', 'label' => 'Credentials'],
+ ['id' => 'initialization-section', 'label' => 'Initialization'],
+ ['id' => 'runtime-network-section', 'label' => 'Runtime and network'],
+ ['id' => 'public-access-section', 'label' => 'Public access'],
+ ['id' => 'configuration-section', 'label' => 'Configuration'],
+ ['id' => 'log-delivery-section', 'label' => 'Log delivery'],
+ ['id' => 'initialization-scripts-section', 'label' => 'Initialization scripts'],
+ ]
+ : [];
@endphp