From 32768bcdfdbcc4c9fbc1ce35a5a1047dc0761db1 Mon Sep 17 00:00:00 2001 From: Francesco Sansalvadore Date: Fri, 20 Mar 2026 01:37:55 +0100 Subject: [PATCH] remove dashboard/ --- .../v2/[orgSlug]/[projectRef]/layout.tsx | 0 .../v2/[orgSlug]/[projectRef]/page.tsx | 2 +- .../{dashboard => }/v2/org/[orgSlug]/page.tsx | 2 +- .../v2/project/[projectRef]/ProjectShell.tsx | 0 .../[projectRef]/data/buckets/page.tsx | 0 .../[projectRef]/data/channels/page.tsx | 0 .../[projectRef]/data/edge-functions/page.tsx | 0 .../[projectRef]/data/extensions/page.tsx | 0 .../[projectRef]/data/functions/page.tsx | 0 .../[projectRef]/data/indexes/page.tsx | 0 .../[projectRef]/data/oauth-apps/page.tsx | 0 .../v2/project/[projectRef]/data/page.tsx | 0 .../[projectRef]/data/providers/page.tsx | 0 .../[projectRef]/data/publications/page.tsx | 0 .../project/[projectRef]/data/roles/page.tsx | 0 .../data/tables/[tableId]/data/page.tsx | 0 .../data/tables/[tableId]/indexes/page.tsx | 0 .../data/tables/[tableId]/layout.tsx | 2 +- .../data/tables/[tableId]/page.tsx | 2 +- .../data/tables/[tableId]/policies/page.tsx | 0 .../data/tables/[tableId]/schema/page.tsx | 0 .../data/tables/[tableId]/settings/page.tsx | 0 .../project/[projectRef]/data/tables/page.tsx | 0 .../project/[projectRef]/data/types/page.tsx | 0 .../project/[projectRef]/data/users/page.tsx | 0 .../v2/project/[projectRef]/layout.tsx | 0 .../project/[projectRef]/obs/alerts/page.tsx | 0 .../[projectRef]/obs/logs/api/page.tsx | 0 .../[projectRef]/obs/logs/auth/page.tsx | 0 .../v2/project/[projectRef]/obs/logs/page.tsx | 0 .../[projectRef]/obs/logs/postgres/page.tsx | 0 .../obs/metrics/connections/page.tsx | 0 .../[projectRef]/obs/metrics/cpu/page.tsx | 0 .../[projectRef]/obs/metrics/disk/page.tsx | 0 .../[projectRef]/obs/metrics/memory/page.tsx | 0 .../v2/project/[projectRef]/page.tsx | 0 .../[projectRef]/settings/api-keys/page.tsx | 0 .../[projectRef]/settings/auth/page.tsx | 0 .../[projectRef]/settings/billing/page.tsx | 0 .../[projectRef]/settings/branches/page.tsx | 0 .../[projectRef]/settings/compute/page.tsx | 0 .../[projectRef]/settings/functions/page.tsx | 0 .../[projectRef]/settings/general/page.tsx | 0 .../[projectRef]/settings/members/page.tsx | 0 .../settings/merge-requests/page.tsx | 0 .../[projectRef]/settings/network/page.tsx | 0 .../[projectRef]/settings/realtime/page.tsx | 0 .../[projectRef]/settings/storage/page.tsx | 0 .../v2/project/_/[[...routeSlug]]/page.tsx | 138 ++++++++++++++++++ .../TableGridEditor/TableGridEditor.tsx | 10 +- apps/studio/components/v2/ActivityBar.tsx | 4 +- apps/studio/components/v2/BrowserPanel.tsx | 2 +- apps/studio/components/v2/Chooser.tsx | 2 +- apps/studio/components/v2/DataTabBar.tsx | 2 +- apps/studio/components/v2/HomeView.tsx | 8 +- .../ProjectBranchSelectorPopover.tsx | 6 +- apps/studio/components/v2/TabBar.tsx | 2 +- .../studio/components/v2/V2BranchSelector.tsx | 4 +- .../components/v2/V2OrgProjectSelector.tsx | 4 +- .../components/v2/views/V2TableDetailView.tsx | 2 +- .../components/v2/views/V2TablesList.tsx | 2 +- 61 files changed, 166 insertions(+), 28 deletions(-) rename apps/studio/app/{dashboard => }/v2/[orgSlug]/[projectRef]/layout.tsx (100%) rename apps/studio/app/{dashboard => }/v2/[orgSlug]/[projectRef]/page.tsx (79%) rename apps/studio/app/{dashboard => }/v2/org/[orgSlug]/page.tsx (96%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/ProjectShell.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/data/buckets/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/data/channels/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/data/edge-functions/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/data/extensions/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/data/functions/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/data/indexes/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/data/oauth-apps/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/data/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/data/providers/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/data/publications/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/data/roles/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/data/tables/[tableId]/data/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/data/tables/[tableId]/indexes/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/data/tables/[tableId]/layout.tsx (95%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/data/tables/[tableId]/page.tsx (73%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/data/tables/[tableId]/policies/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/data/tables/[tableId]/schema/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/data/tables/[tableId]/settings/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/data/tables/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/data/types/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/data/users/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/layout.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/obs/alerts/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/obs/logs/api/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/obs/logs/auth/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/obs/logs/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/obs/logs/postgres/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/obs/metrics/connections/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/obs/metrics/cpu/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/obs/metrics/disk/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/obs/metrics/memory/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/settings/api-keys/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/settings/auth/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/settings/billing/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/settings/branches/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/settings/compute/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/settings/functions/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/settings/general/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/settings/members/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/settings/merge-requests/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/settings/network/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/settings/realtime/page.tsx (100%) rename apps/studio/app/{dashboard => }/v2/project/[projectRef]/settings/storage/page.tsx (100%) create mode 100644 apps/studio/app/v2/project/_/[[...routeSlug]]/page.tsx diff --git a/apps/studio/app/dashboard/v2/[orgSlug]/[projectRef]/layout.tsx b/apps/studio/app/v2/[orgSlug]/[projectRef]/layout.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/[orgSlug]/[projectRef]/layout.tsx rename to apps/studio/app/v2/[orgSlug]/[projectRef]/layout.tsx diff --git a/apps/studio/app/dashboard/v2/[orgSlug]/[projectRef]/page.tsx b/apps/studio/app/v2/[orgSlug]/[projectRef]/page.tsx similarity index 79% rename from apps/studio/app/dashboard/v2/[orgSlug]/[projectRef]/page.tsx rename to apps/studio/app/v2/[orgSlug]/[projectRef]/page.tsx index 5888a083aea..badefaed740 100644 --- a/apps/studio/app/dashboard/v2/[orgSlug]/[projectRef]/page.tsx +++ b/apps/studio/app/v2/[orgSlug]/[projectRef]/page.tsx @@ -6,6 +6,6 @@ export default async function V2OrgProjectPage({ params: Promise<{ projectRef: string }> }) { const { projectRef } = await params - redirect(`/dashboard/v2/project/${projectRef}`) + redirect(`/v2/project/${projectRef}`) } diff --git a/apps/studio/app/dashboard/v2/org/[orgSlug]/page.tsx b/apps/studio/app/v2/org/[orgSlug]/page.tsx similarity index 96% rename from apps/studio/app/dashboard/v2/org/[orgSlug]/page.tsx rename to apps/studio/app/v2/org/[orgSlug]/page.tsx index ec05a7b19fb..692f042d225 100644 --- a/apps/studio/app/dashboard/v2/org/[orgSlug]/page.tsx +++ b/apps/studio/app/v2/org/[orgSlug]/page.tsx @@ -36,7 +36,7 @@ function OrgDashboardContent() { {projects.map((proj) => (
  • {proj.name} diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/ProjectShell.tsx b/apps/studio/app/v2/project/[projectRef]/ProjectShell.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/ProjectShell.tsx rename to apps/studio/app/v2/project/[projectRef]/ProjectShell.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/data/buckets/page.tsx b/apps/studio/app/v2/project/[projectRef]/data/buckets/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/data/buckets/page.tsx rename to apps/studio/app/v2/project/[projectRef]/data/buckets/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/data/channels/page.tsx b/apps/studio/app/v2/project/[projectRef]/data/channels/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/data/channels/page.tsx rename to apps/studio/app/v2/project/[projectRef]/data/channels/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/data/edge-functions/page.tsx b/apps/studio/app/v2/project/[projectRef]/data/edge-functions/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/data/edge-functions/page.tsx rename to apps/studio/app/v2/project/[projectRef]/data/edge-functions/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/data/extensions/page.tsx b/apps/studio/app/v2/project/[projectRef]/data/extensions/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/data/extensions/page.tsx rename to apps/studio/app/v2/project/[projectRef]/data/extensions/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/data/functions/page.tsx b/apps/studio/app/v2/project/[projectRef]/data/functions/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/data/functions/page.tsx rename to apps/studio/app/v2/project/[projectRef]/data/functions/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/data/indexes/page.tsx b/apps/studio/app/v2/project/[projectRef]/data/indexes/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/data/indexes/page.tsx rename to apps/studio/app/v2/project/[projectRef]/data/indexes/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/data/oauth-apps/page.tsx b/apps/studio/app/v2/project/[projectRef]/data/oauth-apps/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/data/oauth-apps/page.tsx rename to apps/studio/app/v2/project/[projectRef]/data/oauth-apps/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/data/page.tsx b/apps/studio/app/v2/project/[projectRef]/data/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/data/page.tsx rename to apps/studio/app/v2/project/[projectRef]/data/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/data/providers/page.tsx b/apps/studio/app/v2/project/[projectRef]/data/providers/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/data/providers/page.tsx rename to apps/studio/app/v2/project/[projectRef]/data/providers/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/data/publications/page.tsx b/apps/studio/app/v2/project/[projectRef]/data/publications/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/data/publications/page.tsx rename to apps/studio/app/v2/project/[projectRef]/data/publications/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/data/roles/page.tsx b/apps/studio/app/v2/project/[projectRef]/data/roles/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/data/roles/page.tsx rename to apps/studio/app/v2/project/[projectRef]/data/roles/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/data/tables/[tableId]/data/page.tsx b/apps/studio/app/v2/project/[projectRef]/data/tables/[tableId]/data/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/data/tables/[tableId]/data/page.tsx rename to apps/studio/app/v2/project/[projectRef]/data/tables/[tableId]/data/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/data/tables/[tableId]/indexes/page.tsx b/apps/studio/app/v2/project/[projectRef]/data/tables/[tableId]/indexes/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/data/tables/[tableId]/indexes/page.tsx rename to apps/studio/app/v2/project/[projectRef]/data/tables/[tableId]/indexes/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/data/tables/[tableId]/layout.tsx b/apps/studio/app/v2/project/[projectRef]/data/tables/[tableId]/layout.tsx similarity index 95% rename from apps/studio/app/dashboard/v2/project/[projectRef]/data/tables/[tableId]/layout.tsx rename to apps/studio/app/v2/project/[projectRef]/data/tables/[tableId]/layout.tsx index 5b0dd2eb5fd..551a7f5ae6a 100644 --- a/apps/studio/app/dashboard/v2/project/[projectRef]/data/tables/[tableId]/layout.tsx +++ b/apps/studio/app/v2/project/[projectRef]/data/tables/[tableId]/layout.tsx @@ -21,7 +21,7 @@ export default function TableDetailLayout({ children }: { children: React.ReactN const { projectRef } = useV2Params() const tableId = params?.tableId as string - const base = projectRef ? `/dashboard/v2/project/${projectRef}/data/tables/${tableId}` : '' + const base = projectRef ? `/v2/project/${projectRef}/data/tables/${tableId}` : '' return ( diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/data/tables/[tableId]/page.tsx b/apps/studio/app/v2/project/[projectRef]/data/tables/[tableId]/page.tsx similarity index 73% rename from apps/studio/app/dashboard/v2/project/[projectRef]/data/tables/[tableId]/page.tsx rename to apps/studio/app/v2/project/[projectRef]/data/tables/[tableId]/page.tsx index ad763a45ee7..6050dfa5831 100644 --- a/apps/studio/app/dashboard/v2/project/[projectRef]/data/tables/[tableId]/page.tsx +++ b/apps/studio/app/v2/project/[projectRef]/data/tables/[tableId]/page.tsx @@ -6,5 +6,5 @@ export default async function TableDetailPage({ params: Promise<{ projectRef: string; tableId: string }> }) { const { projectRef, tableId } = await params - redirect(`/dashboard/v2/project/${projectRef}/data/tables/${tableId}/data`) + redirect(`/v2/project/${projectRef}/data/tables/${tableId}/data`) } diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/data/tables/[tableId]/policies/page.tsx b/apps/studio/app/v2/project/[projectRef]/data/tables/[tableId]/policies/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/data/tables/[tableId]/policies/page.tsx rename to apps/studio/app/v2/project/[projectRef]/data/tables/[tableId]/policies/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/data/tables/[tableId]/schema/page.tsx b/apps/studio/app/v2/project/[projectRef]/data/tables/[tableId]/schema/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/data/tables/[tableId]/schema/page.tsx rename to apps/studio/app/v2/project/[projectRef]/data/tables/[tableId]/schema/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/data/tables/[tableId]/settings/page.tsx b/apps/studio/app/v2/project/[projectRef]/data/tables/[tableId]/settings/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/data/tables/[tableId]/settings/page.tsx rename to apps/studio/app/v2/project/[projectRef]/data/tables/[tableId]/settings/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/data/tables/page.tsx b/apps/studio/app/v2/project/[projectRef]/data/tables/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/data/tables/page.tsx rename to apps/studio/app/v2/project/[projectRef]/data/tables/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/data/types/page.tsx b/apps/studio/app/v2/project/[projectRef]/data/types/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/data/types/page.tsx rename to apps/studio/app/v2/project/[projectRef]/data/types/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/data/users/page.tsx b/apps/studio/app/v2/project/[projectRef]/data/users/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/data/users/page.tsx rename to apps/studio/app/v2/project/[projectRef]/data/users/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/layout.tsx b/apps/studio/app/v2/project/[projectRef]/layout.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/layout.tsx rename to apps/studio/app/v2/project/[projectRef]/layout.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/obs/alerts/page.tsx b/apps/studio/app/v2/project/[projectRef]/obs/alerts/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/obs/alerts/page.tsx rename to apps/studio/app/v2/project/[projectRef]/obs/alerts/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/obs/logs/api/page.tsx b/apps/studio/app/v2/project/[projectRef]/obs/logs/api/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/obs/logs/api/page.tsx rename to apps/studio/app/v2/project/[projectRef]/obs/logs/api/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/obs/logs/auth/page.tsx b/apps/studio/app/v2/project/[projectRef]/obs/logs/auth/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/obs/logs/auth/page.tsx rename to apps/studio/app/v2/project/[projectRef]/obs/logs/auth/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/obs/logs/page.tsx b/apps/studio/app/v2/project/[projectRef]/obs/logs/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/obs/logs/page.tsx rename to apps/studio/app/v2/project/[projectRef]/obs/logs/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/obs/logs/postgres/page.tsx b/apps/studio/app/v2/project/[projectRef]/obs/logs/postgres/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/obs/logs/postgres/page.tsx rename to apps/studio/app/v2/project/[projectRef]/obs/logs/postgres/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/obs/metrics/connections/page.tsx b/apps/studio/app/v2/project/[projectRef]/obs/metrics/connections/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/obs/metrics/connections/page.tsx rename to apps/studio/app/v2/project/[projectRef]/obs/metrics/connections/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/obs/metrics/cpu/page.tsx b/apps/studio/app/v2/project/[projectRef]/obs/metrics/cpu/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/obs/metrics/cpu/page.tsx rename to apps/studio/app/v2/project/[projectRef]/obs/metrics/cpu/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/obs/metrics/disk/page.tsx b/apps/studio/app/v2/project/[projectRef]/obs/metrics/disk/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/obs/metrics/disk/page.tsx rename to apps/studio/app/v2/project/[projectRef]/obs/metrics/disk/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/obs/metrics/memory/page.tsx b/apps/studio/app/v2/project/[projectRef]/obs/metrics/memory/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/obs/metrics/memory/page.tsx rename to apps/studio/app/v2/project/[projectRef]/obs/metrics/memory/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/page.tsx b/apps/studio/app/v2/project/[projectRef]/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/page.tsx rename to apps/studio/app/v2/project/[projectRef]/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/settings/api-keys/page.tsx b/apps/studio/app/v2/project/[projectRef]/settings/api-keys/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/settings/api-keys/page.tsx rename to apps/studio/app/v2/project/[projectRef]/settings/api-keys/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/settings/auth/page.tsx b/apps/studio/app/v2/project/[projectRef]/settings/auth/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/settings/auth/page.tsx rename to apps/studio/app/v2/project/[projectRef]/settings/auth/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/settings/billing/page.tsx b/apps/studio/app/v2/project/[projectRef]/settings/billing/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/settings/billing/page.tsx rename to apps/studio/app/v2/project/[projectRef]/settings/billing/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/settings/branches/page.tsx b/apps/studio/app/v2/project/[projectRef]/settings/branches/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/settings/branches/page.tsx rename to apps/studio/app/v2/project/[projectRef]/settings/branches/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/settings/compute/page.tsx b/apps/studio/app/v2/project/[projectRef]/settings/compute/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/settings/compute/page.tsx rename to apps/studio/app/v2/project/[projectRef]/settings/compute/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/settings/functions/page.tsx b/apps/studio/app/v2/project/[projectRef]/settings/functions/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/settings/functions/page.tsx rename to apps/studio/app/v2/project/[projectRef]/settings/functions/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/settings/general/page.tsx b/apps/studio/app/v2/project/[projectRef]/settings/general/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/settings/general/page.tsx rename to apps/studio/app/v2/project/[projectRef]/settings/general/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/settings/members/page.tsx b/apps/studio/app/v2/project/[projectRef]/settings/members/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/settings/members/page.tsx rename to apps/studio/app/v2/project/[projectRef]/settings/members/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/settings/merge-requests/page.tsx b/apps/studio/app/v2/project/[projectRef]/settings/merge-requests/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/settings/merge-requests/page.tsx rename to apps/studio/app/v2/project/[projectRef]/settings/merge-requests/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/settings/network/page.tsx b/apps/studio/app/v2/project/[projectRef]/settings/network/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/settings/network/page.tsx rename to apps/studio/app/v2/project/[projectRef]/settings/network/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/settings/realtime/page.tsx b/apps/studio/app/v2/project/[projectRef]/settings/realtime/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/settings/realtime/page.tsx rename to apps/studio/app/v2/project/[projectRef]/settings/realtime/page.tsx diff --git a/apps/studio/app/dashboard/v2/project/[projectRef]/settings/storage/page.tsx b/apps/studio/app/v2/project/[projectRef]/settings/storage/page.tsx similarity index 100% rename from apps/studio/app/dashboard/v2/project/[projectRef]/settings/storage/page.tsx rename to apps/studio/app/v2/project/[projectRef]/settings/storage/page.tsx diff --git a/apps/studio/app/v2/project/_/[[...routeSlug]]/page.tsx b/apps/studio/app/v2/project/_/[[...routeSlug]]/page.tsx new file mode 100644 index 00000000000..b0d1aa89e87 --- /dev/null +++ b/apps/studio/app/v2/project/_/[[...routeSlug]]/page.tsx @@ -0,0 +1,138 @@ +'use client' + +import { useState } from 'react' +import { useParams, useRouter } from 'next/navigation' +import { Building2, ChevronRight, Search } from 'lucide-react' + +import { useOrganizationsQuery } from 'data/organizations/organizations-query' +import { useOrgProjectsInfiniteQuery } from 'data/projects/org-projects-infinite-query' +import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader' + +/** + * Disambiguation page for /v2/project/_/[...routeSlug]. + * + * The literal `_` segment can never collide with a real project ref, so any + * link that doesn't yet know the target project (e.g. deep-links from docs or + * CLI output) can point here. The user picks a project and is forwarded to + * /v2/project/[projectRef]/[...routeSlug] with the same sub-path preserved. + */ +export default function V2ProjectDisambiguationPage() { + const router = useRouter() + const params = useParams() + const routeSlug = params?.routeSlug as string[] | undefined + + const subPath = routeSlug?.length ? `/${routeSlug.join('/')}` : '/data/tables' + + const { data: organizations = [], isPending: isLoadingOrgs } = useOrganizationsQuery() + const [selectedOrgSlug, setSelectedOrgSlug] = useState(undefined) + const activeOrg = + organizations.find((o) => o.slug === selectedOrgSlug) ?? organizations[0] + + const [search, setSearch] = useState('') + + const { data: projectsData, isPending: isLoadingProjects } = useOrgProjectsInfiniteQuery( + { slug: activeOrg?.slug, limit: 50 }, + { enabled: Boolean(activeOrg?.slug) } + ) + const allProjects = projectsData?.pages?.flatMap((p) => p.projects) ?? [] + const projects = search.trim() + ? allProjects.filter((p) => p.name.toLowerCase().includes(search.toLowerCase())) + : allProjects + + const handleSelectProject = (ref: string) => { + router.push(`/v2/project/${ref}${subPath}`) + } + + return ( +
    + {/* Header */} +
    +

    Select a project

    + {subPath !== '/data/tables' && ( +

    + You'll be taken to {subPath} after selecting. +

    + )} +
    + +
    + {/* Org sidebar */} + + + {/* Project list */} +
    +
    +
    + + setSearch(e.target.value)} + className="w-full pl-8 pr-3 py-1.5 text-sm bg-background border border-border rounded-md focus:outline-none focus:ring-1 focus:ring-foreground/30 placeholder:text-muted-foreground" + /> +
    +
    + +
    + {isLoadingProjects ? ( +
    + + + +
    + ) : projects.length === 0 ? ( +
    + {search ? 'No projects match your search.' : 'No projects in this organization.'} +
    + ) : ( +
      + {projects.map((project) => ( +
    • + +
    • + ))} +
    + )} +
    +
    +
    +
    + ) +} diff --git a/apps/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx b/apps/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx index a3a816c10b6..d28fb66ade8 100644 --- a/apps/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx +++ b/apps/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx @@ -66,7 +66,7 @@ export const TableGridEditor = ({ const onTableCreated = useCallback( (table: { id: number }) => { if (variant === 'v2') { - const base = projectRef ? `/dashboard/v2/project/${projectRef}` : '' + const base = projectRef ? `/v2/project/${projectRef}` : '' router.push( `${base}/data/tables/${table.id}/data${ !!selectedSchema ? `?schema=${selectedSchema}` : '' @@ -95,7 +95,7 @@ export const TableGridEditor = ({ tabs.removeTab(tabId) setLastVisitedTable(undefined) - const base = projectRef ? `/dashboard/v2/project/${projectRef}` : '' + const base = projectRef ? `/v2/project/${projectRef}` : '' router.push(`${base}/data/tables`) return } @@ -158,7 +158,7 @@ export const TableGridEditor = ({ onClick={() => { tabs.removeTab(tabId) setLastVisitedTable(undefined) - const base = projectRef ? `/dashboard/v2/project/${projectRef}` : '' + const base = projectRef ? `/v2/project/${projectRef}` : '' router.push(`${base}/data/tables`) }} > @@ -172,7 +172,7 @@ export const TableGridEditor = ({ onClick={() => setLastVisitedTable(undefined)} > Close tab @@ -184,7 +184,7 @@ export const TableGridEditor = ({ className="mt-2" onClick={() => setLastVisitedTable(undefined)} > - Head back + Head back ) ) : !!tabId ? ( diff --git a/apps/studio/components/v2/ActivityBar.tsx b/apps/studio/components/v2/ActivityBar.tsx index cde336e7cd9..6d62d020ff9 100644 --- a/apps/studio/components/v2/ActivityBar.tsx +++ b/apps/studio/components/v2/ActivityBar.tsx @@ -133,8 +133,8 @@ export function LeftActivityBar() { const { data: lints } = useProjectLintsQuery({ projectRef }) const hasAdvisorWarnings = (lints?.length ?? 0) > 0 - const base = projectRef ? `/dashboard/v2/project/${projectRef}` : '#' - const homeBase = projectRef && orgSlug ? `/dashboard/v2/project/${projectRef}` : '#' + const base = projectRef ? `/v2/project/${projectRef}` : '#' + const homeBase = projectRef && orgSlug ? `/v2/project/${projectRef}` : '#' return ( void }) { const { expandedGroups, toggleGroup } = useV2DashboardStore() const counts = useV2DataCounts(projectRef) - const base = projectRef ? `/dashboard/v2/project/${projectRef}` : '' + const base = projectRef ? `/v2/project/${projectRef}` : '' const isData = pathname?.includes('/data/') const isObs = pathname?.includes('/obs/') const isSettings = pathname?.includes('/settings/') diff --git a/apps/studio/components/v2/Chooser.tsx b/apps/studio/components/v2/Chooser.tsx index b8a7d0eb014..e60386ba44f 100644 --- a/apps/studio/components/v2/Chooser.tsx +++ b/apps/studio/components/v2/Chooser.tsx @@ -102,7 +102,7 @@ export function Chooser() { const [search, setSearch] = useState('') const lowerSearch = search.toLowerCase() - const base = projectRef ? `/dashboard/v2/project/${projectRef}` : '' + const base = projectRef ? `/v2/project/${projectRef}` : '' const openCategory = (category: string) => { const domain = CATEGORY_DOMAIN[category] ?? 'db' diff --git a/apps/studio/components/v2/DataTabBar.tsx b/apps/studio/components/v2/DataTabBar.tsx index 519a8b33d04..adbe3d9fc94 100644 --- a/apps/studio/components/v2/DataTabBar.tsx +++ b/apps/studio/components/v2/DataTabBar.tsx @@ -31,7 +31,7 @@ export function DataTabBar() { // Don't render the bar at all when there are no detail tabs if (detailTabs.length === 0) return null - const chooserPath = projectRef ? `/dashboard/v2/project/${projectRef}/data` : '#' + const chooserPath = projectRef ? `/v2/project/${projectRef}/data` : '#' const handleClose = (tab: DataTab, e: React.MouseEvent) => { e.preventDefault() diff --git a/apps/studio/components/v2/HomeView.tsx b/apps/studio/components/v2/HomeView.tsx index 08fb9abd5d1..d08cf642d90 100644 --- a/apps/studio/components/v2/HomeView.tsx +++ b/apps/studio/components/v2/HomeView.tsx @@ -269,19 +269,19 @@ export function HomeView() { {[ { title: '+ New table', - href: projectRef ? `/dashboard/v2/project/${projectRef}/data/tables` : '#', + href: projectRef ? `/v2/project/${projectRef}/data/tables` : '#', }, { title: '+ New bucket', - href: projectRef ? `/dashboard/v2/project/${projectRef}/data/buckets` : '#', + href: projectRef ? `/v2/project/${projectRef}/data/buckets` : '#', }, { title: '+ New function', - href: projectRef ? `/dashboard/v2/project/${projectRef}/data/edge-functions` : '#', + href: projectRef ? `/v2/project/${projectRef}/data/edge-functions` : '#', }, { title: '+ Add user', - href: projectRef ? `/dashboard/v2/project/${projectRef}/data/users` : '#', + href: projectRef ? `/v2/project/${projectRef}/data/users` : '#', }, ].map((a) => (