From 14019b54379592f34c274714fd8b37ee0f86ce66 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Thu, 20 Nov 2025 20:46:25 +0530 Subject: [PATCH] fix: added routing redirects with splat --- .../pages/redirects/organization-redirect.tsx | 7 +- .../src/pages/redirects/project-redirect.tsx | 14 +--- frontend/src/routeTree.gen.ts | 67 +++++++++++++++++++ frontend/src/routes.ts | 4 +- 4 files changed, 77 insertions(+), 15 deletions(-) diff --git a/frontend/src/pages/redirects/organization-redirect.tsx b/frontend/src/pages/redirects/organization-redirect.tsx index d13cc69b8..ea84c1e70 100644 --- a/frontend/src/pages/redirects/organization-redirect.tsx +++ b/frontend/src/pages/redirects/organization-redirect.tsx @@ -14,8 +14,11 @@ export const Route = createFileRoute("/_authenticate/_inject-org-details/organiz const remainingPath = params._splat || ""; throw redirect({ - to: `/organizations/$orgId/${remainingPath}` as const, - params: { orgId }, + to: "/organizations/$orgId/$", + params: { + orgId, + _splat: remainingPath ?? "" + }, search }); } diff --git a/frontend/src/pages/redirects/project-redirect.tsx b/frontend/src/pages/redirects/project-redirect.tsx index a893dc131..fc2a81db3 100644 --- a/frontend/src/pages/redirects/project-redirect.tsx +++ b/frontend/src/pages/redirects/project-redirect.tsx @@ -1,7 +1,5 @@ import { createFileRoute, redirect } from "@tanstack/react-router"; -import { localStorageService } from "@app/helpers/localStorage"; - export const Route = createFileRoute("/_authenticate/_inject-org-details/projects/$")({ beforeLoad: ({ context, params, search }) => { const orgId = context.organizationId; @@ -14,18 +12,10 @@ export const Route = createFileRoute("/_authenticate/_inject-org-details/project // eslint-disable-next-line no-underscore-dangle const remainingPath = params._splat || ""; - const projectId = localStorageService.getIintegrationProjectId(); - - if (!projectId) { - throw redirect({ - to: "/organizations/$orgId/projects", - params: { orgId } - }); - } throw redirect({ - to: `/organizations/$orgId/projects/${remainingPath}` as const, - params: { orgId, projectId }, + to: "/organizations/$orgId/projects/$" as const, + params: { orgId, _splat: remainingPath }, search }); } diff --git a/frontend/src/routeTree.gen.ts b/frontend/src/routeTree.gen.ts index 1c89619ad..f2954f03c 100644 --- a/frontend/src/routeTree.gen.ts +++ b/frontend/src/routeTree.gen.ts @@ -272,10 +272,18 @@ const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsImpor createFileRoute( '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections', )() +const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSplatImport = + createFileRoute( + '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/$', + )() const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretManagerProjectIdImport = createFileRoute( '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-manager/$projectId', )() +const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSplatImport = + createFileRoute( + '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/$', + )() const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSshProjectIdImport = createFileRoute( '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/ssh/$projectId', @@ -656,6 +664,14 @@ const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRoute } as any, ) +const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSplatRoute = + AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSplatImport.update({ + id: '/$', + path: '/$', + getParentRoute: () => + AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdRoute, + } as any) + const adminResourceOverviewPageRouteRoute = adminResourceOverviewPageRouteImport.update({ id: '/resources/overview', @@ -713,6 +729,15 @@ const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretManagerProjec } as any, ) +const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSplatRoute = + AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSplatImport.update( + { + id: '/$', + path: '/$', + getParentRoute: () => organizationProjectsPageRouteRoute, + } as any, + ) + const secretManagerIntegrationsRouteVercelOauthRedirectRoute = secretManagerIntegrationsRouteVercelOauthRedirectImport.update({ id: '/vercel/oauth2/callback', @@ -2562,6 +2587,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof adminResourceOverviewPageRouteImport parentRoute: typeof adminLayoutImport } + '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/$': { + id: '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/$' + path: '/$' + fullPath: '/organizations/$orgId/$' + preLoaderRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSplatImport + parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdImport + } '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections': { id: '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections' path: '/app-connections' @@ -2695,6 +2727,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof secretManagerIntegrationsRouteVercelOauthRedirectImport parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutIntegrationsImport } + '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/$': { + id: '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/$' + path: '/$' + fullPath: '/organizations/$orgId/projects/$' + preLoaderRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSplatImport + parentRoute: typeof organizationProjectsPageRouteImport + } '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-manager/$projectId': { id: '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-manager/$projectId' path: '/secret-manager/$projectId' @@ -4693,6 +4732,7 @@ const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSshProjectI ) interface organizationProjectsPageRouteRouteChildren { + AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSplatRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSplatRoute AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsCertManagementProjectIdRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsCertManagementProjectIdRouteWithChildren AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsKmsProjectIdRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsKmsProjectIdRouteWithChildren AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsPamProjectIdRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsPamProjectIdRouteWithChildren @@ -4703,6 +4743,8 @@ interface organizationProjectsPageRouteRouteChildren { const organizationProjectsPageRouteRouteChildren: organizationProjectsPageRouteRouteChildren = { + AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSplatRoute: + AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSplatRoute, AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsCertManagementProjectIdRoute: AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsCertManagementProjectIdRouteWithChildren, AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsKmsProjectIdRoute: @@ -4793,6 +4835,7 @@ interface AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdRouteChildren { organizationBillingPageRouteRoute: typeof organizationBillingPageRouteRoute organizationNetworkingPageRouteRoute: typeof organizationNetworkingPageRouteRoute organizationProjectsPageRouteRoute: typeof organizationProjectsPageRouteRouteWithChildren + AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSplatRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSplatRoute AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRouteWithChildren AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretSharingRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretSharingRouteWithChildren AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSettingsRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSettingsRouteWithChildren @@ -4812,6 +4855,8 @@ const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdRouteChildren: Auth organizationNetworkingPageRouteRoute: organizationNetworkingPageRouteRoute, organizationProjectsPageRouteRoute: organizationProjectsPageRouteRouteWithChildren, + AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSplatRoute: + AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSplatRoute, AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRoute: AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRouteWithChildren, AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretSharingRoute: @@ -5075,6 +5120,7 @@ export interface FileRoutesByFullPath { '/organizations/$orgId/networking': typeof organizationNetworkingPageRouteRoute '/organizations/$orgId/projects': typeof organizationProjectsPageRouteRouteWithChildren '/admin/resources/overview': typeof adminResourceOverviewPageRouteRoute + '/organizations/$orgId/$': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSplatRoute '/organizations/$orgId/app-connections': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRouteWithChildren '/organizations/$orgId/secret-sharing': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretSharingRouteWithChildren '/organizations/$orgId/settings': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSettingsRouteWithChildren @@ -5094,6 +5140,7 @@ export interface FileRoutesByFullPath { '/integrations/heroku/oauth2/callback': typeof secretManagerIntegrationsRouteHerokuOauthRedirectRoute '/integrations/netlify/oauth2/callback': typeof secretManagerIntegrationsRouteNetlifyOauthRedirectRoute '/integrations/vercel/oauth2/callback': typeof secretManagerIntegrationsRouteVercelOauthRedirectRoute + '/organizations/$orgId/projects/$': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSplatRoute '/organizations/$orgId/secret-manager/$projectId': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretManagerProjectIdRouteWithChildren '/organizations/$orgId/settings/oauth/callback': typeof organizationSettingsPageOauthCallbackPageRouteRoute '/organizations/$orgId/projects/cert-management/$projectId': typeof certManagerLayoutRouteWithChildren @@ -5312,6 +5359,7 @@ export interface FileRoutesByTo { '/organizations/$orgId/networking': typeof organizationNetworkingPageRouteRoute '/organizations/$orgId/projects': typeof organizationProjectsPageRouteRouteWithChildren '/admin/resources/overview': typeof adminResourceOverviewPageRouteRoute + '/organizations/$orgId/$': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSplatRoute '/organizations/$orgId/app-connections': typeof organizationAppConnectionsAppConnectionsPageRouteRoute '/organizations/$orgId/secret-sharing': typeof organizationSecretSharingPageRouteRoute '/organizations/$orgId/settings': typeof organizationSettingsPageRouteRoute @@ -5328,6 +5376,7 @@ export interface FileRoutesByTo { '/integrations/heroku/oauth2/callback': typeof secretManagerIntegrationsRouteHerokuOauthRedirectRoute '/integrations/netlify/oauth2/callback': typeof secretManagerIntegrationsRouteNetlifyOauthRedirectRoute '/integrations/vercel/oauth2/callback': typeof secretManagerIntegrationsRouteVercelOauthRedirectRoute + '/organizations/$orgId/projects/$': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSplatRoute '/organizations/$orgId/secret-manager/$projectId': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretManagerProjectIdRouteWithChildren '/organizations/$orgId/settings/oauth/callback': typeof organizationSettingsPageOauthCallbackPageRouteRoute '/organizations/$orgId/projects/cert-management/$projectId': typeof certManagerLayoutRouteWithChildren @@ -5548,6 +5597,7 @@ export interface FileRoutesById { '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/networking': typeof organizationNetworkingPageRouteRoute '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects': typeof organizationProjectsPageRouteRouteWithChildren '/_authenticate/_inject-org-details/admin/_admin-layout/resources/overview': typeof adminResourceOverviewPageRouteRoute + '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/$': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSplatRoute '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRouteWithChildren '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-sharing': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretSharingRouteWithChildren '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/settings': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSettingsRouteWithChildren @@ -5567,6 +5617,7 @@ export interface FileRoutesById { '/_authenticate/_inject-org-details/_org-layout/integrations/heroku/oauth2/callback': typeof secretManagerIntegrationsRouteHerokuOauthRedirectRoute '/_authenticate/_inject-org-details/_org-layout/integrations/netlify/oauth2/callback': typeof secretManagerIntegrationsRouteNetlifyOauthRedirectRoute '/_authenticate/_inject-org-details/_org-layout/integrations/vercel/oauth2/callback': typeof secretManagerIntegrationsRouteVercelOauthRedirectRoute + '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/$': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSplatRoute '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-manager/$projectId': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretManagerProjectIdRouteWithChildren '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/settings/oauth/callback': typeof organizationSettingsPageOauthCallbackPageRouteRoute '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/cert-management/$projectId': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsCertManagementProjectIdRouteWithChildren @@ -5797,6 +5848,7 @@ export interface FileRouteTypes { | '/organizations/$orgId/networking' | '/organizations/$orgId/projects' | '/admin/resources/overview' + | '/organizations/$orgId/$' | '/organizations/$orgId/app-connections' | '/organizations/$orgId/secret-sharing' | '/organizations/$orgId/settings' @@ -5816,6 +5868,7 @@ export interface FileRouteTypes { | '/integrations/heroku/oauth2/callback' | '/integrations/netlify/oauth2/callback' | '/integrations/vercel/oauth2/callback' + | '/organizations/$orgId/projects/$' | '/organizations/$orgId/secret-manager/$projectId' | '/organizations/$orgId/settings/oauth/callback' | '/organizations/$orgId/projects/cert-management/$projectId' @@ -6033,6 +6086,7 @@ export interface FileRouteTypes { | '/organizations/$orgId/networking' | '/organizations/$orgId/projects' | '/admin/resources/overview' + | '/organizations/$orgId/$' | '/organizations/$orgId/app-connections' | '/organizations/$orgId/secret-sharing' | '/organizations/$orgId/settings' @@ -6049,6 +6103,7 @@ export interface FileRouteTypes { | '/integrations/heroku/oauth2/callback' | '/integrations/netlify/oauth2/callback' | '/integrations/vercel/oauth2/callback' + | '/organizations/$orgId/projects/$' | '/organizations/$orgId/secret-manager/$projectId' | '/organizations/$orgId/settings/oauth/callback' | '/organizations/$orgId/projects/cert-management/$projectId' @@ -6267,6 +6322,7 @@ export interface FileRouteTypes { | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/networking' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects' | '/_authenticate/_inject-org-details/admin/_admin-layout/resources/overview' + | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/$' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-sharing' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/settings' @@ -6286,6 +6342,7 @@ export interface FileRouteTypes { | '/_authenticate/_inject-org-details/_org-layout/integrations/heroku/oauth2/callback' | '/_authenticate/_inject-org-details/_org-layout/integrations/netlify/oauth2/callback' | '/_authenticate/_inject-org-details/_org-layout/integrations/vercel/oauth2/callback' + | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/$' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-manager/$projectId' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/settings/oauth/callback' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/cert-management/$projectId' @@ -6759,6 +6816,7 @@ export const routeTree = rootRoute "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/billing", "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/networking", "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects", + "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/$", "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections", "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-sharing", "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/settings", @@ -6789,6 +6847,7 @@ export const routeTree = rootRoute "filePath": "organization/ProjectsPage/route.tsx", "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId", "children": [ + "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/$", "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/cert-management/$projectId", "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/kms/$projectId", "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/pam/$projectId", @@ -6801,6 +6860,10 @@ export const routeTree = rootRoute "filePath": "admin/ResourceOverviewPage/route.tsx", "parent": "/_authenticate/_inject-org-details/admin/_admin-layout" }, + "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/$": { + "filePath": "", + "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId" + }, "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections": { "filePath": "", "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId", @@ -6888,6 +6951,10 @@ export const routeTree = rootRoute "filePath": "secret-manager/integrations/route-vercel-oauth-redirect.tsx", "parent": "/_authenticate/_inject-org-details/_org-layout/integrations" }, + "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/$": { + "filePath": "", + "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects" + }, "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-manager/$projectId": { "filePath": "", "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId", diff --git a/frontend/src/routes.ts b/frontend/src/routes.ts index 432b85f0d..4e1ba0169 100644 --- a/frontend/src/routes.ts +++ b/frontend/src/routes.ts @@ -389,7 +389,9 @@ const organizationRoutes = route("/organizations/$orgId", [ "organization/AppConnections/OauthCallbackPage/route.tsx" ) ]), - route("/networking", "organization/NetworkingPage/route.tsx") + route("/networking", "organization/NetworkingPage/route.tsx"), + route("/projects/$", ""), + route("/$", "") ]); export const routes = rootRoute("root.tsx", [