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] 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