@props(['database', 'currentRoute', 'navOnly' => false]) @php $databaseRouteParameters = [ 'project_uuid' => $database->environment->project->uuid, 'environment_uuid' => $database->environment->uuid, 'database_uuid' => $database->uuid, ]; $configurationItems = collect([ ['label' => 'General', 'route' => 'project.database.configuration', 'icon' => 'settings'], ['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' => 'Servers', 'route' => 'project.database.servers', 'icon' => 'servers'], ['label' => 'Runtime Logs', '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' => 'Files', 'route' => 'project.database.files', 'icon' => 'folder', 'visible' => auth()->user()?->can('canAccessTerminal')], ['label' => 'Webhooks', 'route' => 'project.database.webhooks', 'icon' => 'webhook'], ['label' => 'Healthcheck', 'route' => 'project.database.healthcheck', 'icon' => 'feedback'], ['label' => 'Resource Limits', 'route' => 'project.database.resource-limits', 'icon' => 'cpu'], ['label' => 'Resource Operations', 'route' => 'project.database.resource-operations', 'icon' => 'server-update'], ['label' => 'Metrics', 'route' => 'project.database.metrics', 'icon' => 'graph'], ['label' => 'Tags', 'route' => 'project.database.tags', 'icon' => 'tags'], ['label' => 'Danger Zone', 'route' => 'project.database.danger', 'icon' => 'danger'], ])->filter(fn (array $item): bool => $item['visible'] ?? true) ->map(fn (array $item): array => [ ...$item, 'active' => $currentRoute === $item['route'] || ($item['route'] === 'project.database.backup.index' && str($currentRoute)->startsWith('project.database.backup')), ]); $menuGroups = [ 'Settings' => ['General', 'Environment Variables', 'Persistent Storage', 'Healthcheck'], 'Observe & troubleshoot' => ['Runtime Logs', 'Terminal', 'Files', 'Metrics'], 'Deploy' => ['Servers'], 'Automation' => ['Webhooks', 'Backups'], 'Operations' => ['Resource Operations', 'Resource Limits', 'Tags'], 'Danger Zone' => ['Danger Zone'], ]; $groupedItems = collect($menuGroups) ->map(fn (array $labels) => collect($labels) ->map(fn (string $label) => $configurationItems->firstWhere('label', $label)) ->filter() ->values()) ->filter(fn ($items) => $items->isNotEmpty()); $pageSections = array_values(array_filter([ ['id' => 'database-details-section', 'label' => 'Database details'], $database->type() === 'standalone-sqlite' ? null : ['id' => 'access-section', 'label' => 'Access'], ['id' => 'container-section', 'label' => 'Container'], $database->type() === 'standalone-postgresql' ? ['id' => 'initialization-scripts-section', 'label' => 'Initialization scripts'] : null, ])); @endphp @php // The main sidebar and the mobile drawer show this menu (see components/navbar.blade.php). registerMainNavContext(0, 'Dashboard', 'Back to the main menu', $database->name); @endphp {{-- Rendered twice: in the page (CSS hides it; it keeps the command palette items), and teleported into the main sidebar. navOnly renders only the sidebar copy, as the parent menu of a deeper page (e.g. a backup). --}} @foreach ($navOnly ? ['main-nav'] : ['page', 'main-nav'] as $placement) @if ($placement === 'main-nav') @teleport('#main-nav-context-0') @endteleport @else @endif @endforeach