Skip to content

Commit c154eb2

Browse files
committed
feat: redirect v2 urls to somewhere sensible (#3624) (#3521)
1 parent c34c97f commit c154eb2

File tree

4 files changed

+66
-1
lines changed

4 files changed

+66
-1
lines changed

client/src/features/rootV2/RootV2.tsx

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,14 @@
1818

1919
import cx from "classnames";
2020
import { useEffect, useState } from "react";
21-
import { Route, Routes, useNavigate } from "react-router";
21+
import {
22+
Navigate,
23+
Route,
24+
Routes,
25+
generatePath,
26+
useMatch,
27+
useNavigate,
28+
} from "react-router";
2229

2330
import ContainerWrap from "../../components/container/ContainerWrap";
2431
import LazyNotFound from "../../not-found/LazyNotFound";
@@ -48,6 +55,39 @@ import LazyShowSessionPage from "../sessionsV2/LazyShowSessionPage";
4855
import LazyUserRedirect from "../usersV2/LazyUserRedirect";
4956
import LazyUserShow from "../usersV2/LazyUserShow";
5057

58+
function BetaV2Redirect() {
59+
const navigate = useNavigate();
60+
const betaProjectsMatch = useMatch(ABSOLUTE_ROUTES.v2.projects.beta.splat);
61+
const betaGroupsMatch = useMatch(ABSOLUTE_ROUTES.v2.groups.beta.splat);
62+
63+
useEffect(() => {
64+
if (
65+
betaProjectsMatch?.params.namespace != null &&
66+
betaProjectsMatch?.params.slug != null
67+
) {
68+
navigate(
69+
generatePath(ABSOLUTE_ROUTES.v2.projects.show.root, {
70+
namespace: betaProjectsMatch.params.namespace,
71+
slug: betaProjectsMatch.params.slug,
72+
}),
73+
{ replace: true }
74+
);
75+
}
76+
}, [navigate, betaProjectsMatch?.params]);
77+
78+
useEffect(() => {
79+
if (betaGroupsMatch?.params.slug != null) {
80+
navigate(
81+
generatePath(ABSOLUTE_ROUTES.v2.groups.show.root, {
82+
slug: betaGroupsMatch.params.slug,
83+
}),
84+
{ replace: true }
85+
);
86+
}
87+
}, [navigate, betaGroupsMatch?.params]);
88+
return <Navigate to={generatePath(ABSOLUTE_ROUTES.v2.root)} replace={true} />;
89+
}
90+
5191
export default function RootV2() {
5292
const navigate = useNavigate();
5393

@@ -85,6 +125,10 @@ export default function RootV2() {
85125
</ContainerWrap>
86126
}
87127
/>
128+
<Route
129+
path={RELATIVE_ROUTES.v2.betaRoot}
130+
element={<BetaV2Redirect />}
131+
/>
88132
<Route
89133
path={RELATIVE_ROUTES.v2.user}
90134
element={<LazyUserRedirect />}

client/src/routing/routes.constants.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ export const ABSOLUTE_ROUTES = {
5959
settings: "/g/:slug/settings",
6060
splat: "/g/:slug/*",
6161
},
62+
beta: { splat: "/v2/groups/:slug/*" },
6263
},
6364
help: {
6465
root: "/help",
@@ -79,6 +80,7 @@ export const ABSOLUTE_ROUTES = {
7980
},
8081
},
8182
showById: "/p/:id",
83+
beta: { splat: "/v2/projects/:namespace/:slug/*" },
8284
},
8385
search: "/search",
8486
secrets: "/secrets",
@@ -111,6 +113,7 @@ export const RELATIVE_ROUTES = {
111113
},
112114
v2: {
113115
root: "/*",
116+
betaRoot: "/v2/*",
114117
integrations: "integrations",
115118
groups: {
116119
root: "g/*",

tests/cypress/e2e/groupV2.spec.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,19 @@ describe("Edit v2 group", () => {
138138
cy.contains("public-storage").should("be.visible");
139139
});
140140

141+
it("shows a group by old URL", () => {
142+
fixtures
143+
.readGroupV2()
144+
.readGroupV2Namespace()
145+
.listGroupV2Members()
146+
.listProjectV2ByNamespace()
147+
.listDataConnectors({ namespace: "test-2-group-v2" });
148+
cy.visit("/v2/groups/test-2-group-v2");
149+
cy.wait("@readGroupV2");
150+
cy.contains("test 2 group-v2").should("be.visible");
151+
cy.contains("public-storage").should("be.visible");
152+
});
153+
141154
it("allows editing group metadata", () => {
142155
fixtures
143156
.readGroupV2()

tests/cypress/e2e/projectV2.spec.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,11 @@ describe("Navigate to project", () => {
142142
cy.location("pathname").should("contain", "/user1-uuid/test-2-v2-project");
143143
});
144144

145+
it("shows projects by old URL", () => {
146+
cy.visit("/v2/projects/user1-uuid/test-2-v2-project");
147+
cy.contains("test 2 v2-project").should("be.visible");
148+
});
149+
145150
it("shows project members", () => {
146151
fixtures.listProjectV2Members().readProjectV2();
147152
cy.visit("/p/user1-uuid/test-2-v2-project");

0 commit comments

Comments
 (0)