Skip to content

Commit 6ee3af0

Browse files
authored
Update Cluster-orch menu update logic (#121)
1 parent 7950a2c commit 6ee3af0

7 files changed

Lines changed: 43 additions & 53 deletions

File tree

apps/cluster-orch/src/components/pages/ClusterCreation/ClusterCreation.tsx

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,7 @@
44
*/
55

66
import { cm, mbApi } from "@orch-ui/apis";
7-
import {
8-
Empty,
9-
MetadataPair,
10-
setActiveNavItem,
11-
setBreadcrumb,
12-
} from "@orch-ui/components";
7+
import { Empty, MetadataPair, setBreadcrumb } from "@orch-ui/components";
138
import { InternalError, SharedStorage } from "@orch-ui/utils";
149
import {
1510
Button,
@@ -30,11 +25,7 @@ import {
3025
} from "@spark-design/tokens";
3126
import { useEffect, useMemo, useRef, useState } from "react";
3227
import { useNavigate } from "react-router-dom";
33-
import {
34-
clustersBreadcrumb,
35-
clustersMenuItem,
36-
homeBreadcrumb,
37-
} from "../../../routes/const";
28+
import { clustersBreadcrumb, homeBreadcrumb } from "../../../routes/const";
3829
import { useAppDispatch, useAppSelector } from "../../../store/hooks";
3930
import {
4031
clearCluster,
@@ -160,7 +151,6 @@ const ClusterCreation = () => {
160151
// Set breadcrumb
161152
useEffect(() => {
162153
dispatch(setBreadcrumb(breadcrumb));
163-
dispatch(setActiveNavItem(clustersMenuItem));
164154
}, [breadcrumb]);
165155
// Reset `template version` selection if `template name` selection changes
166156
useEffect(() => {

apps/cluster-orch/src/components/pages/ClusterDetail/ClusterDetail.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import {
1919
MetadataDisplay,
2020
Popup,
2121
PopupOption,
22-
setActiveNavItem,
2322
setBreadcrumb as setClusterBreadcrumb,
2423
TrustedCompute,
2524
TypedMetadata,
@@ -46,7 +45,7 @@ import {
4645
} from "@spark-design/react";
4746
import { useEffect, useMemo, useState } from "react";
4847
import { useNavigate, useParams } from "react-router-dom";
49-
import { clustersMenuItem, homeBreadcrumb } from "../../../routes/const";
48+
import { homeBreadcrumb } from "../../../routes/const";
5049
import { useAppDispatch } from "../../../store/hooks";
5150
import TableLoader from "../../atom/TableLoader";
5251

@@ -200,7 +199,6 @@ function ClusterDetail({
200199
} else {
201200
dispatch(setClusterBreadcrumb(breadcrumb));
202201
}
203-
dispatch(setActiveNavItem(clustersMenuItem));
204202
}
205203
}, [breadcrumb]);
206204

apps/cluster-orch/src/components/pages/ClusterEdit/ClusterEdit.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { cm, infra, mbApi } from "@orch-ui/apis";
77
import {
88
BreadcrumbPiece,
99
MetadataPair,
10-
setActiveNavItem,
1110
setBreadcrumb as setClusterBreadcrumb,
1211
} from "@orch-ui/components";
1312
import {
@@ -25,7 +24,7 @@ import {
2524
} from "@spark-design/tokens";
2625
import { useEffect, useMemo, useState } from "react";
2726
import { useNavigate, useParams } from "react-router-dom";
28-
import { clustersMenuItem, homeBreadcrumb } from "../../../routes/const";
27+
import { homeBreadcrumb } from "../../../routes/const";
2928
import { useAppDispatch, useAppSelector } from "../../../store/hooks";
3029
import {
3130
clearCluster,
@@ -260,7 +259,6 @@ const ClusterEdit = ({ setBreadcrumb, HostsTableRemote }: ClusterEditProps) => {
260259
} else {
261260
dispatch(setClusterBreadcrumb(breadcrumb));
262261
}
263-
dispatch(setActiveNavItem(clustersMenuItem));
264262
}, [breadcrumb]);
265263

266264
const onReqSuccess = () => {

apps/cluster-orch/src/components/pages/ClusterManagement.tsx

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,13 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
import { setActiveNavItem, setBreadcrumb } from "@orch-ui/components";
6+
import { setBreadcrumb } from "@orch-ui/components";
77
import { checkAuthAndRole, getAuthCfg, Role } from "@orch-ui/utils";
88
import { Heading } from "@spark-design/react";
99
import { useEffect, useMemo } from "react";
1010
import { AuthProvider } from "react-oidc-context";
1111
import { Provider } from "react-redux";
12-
import {
13-
clustersBreadcrumb,
14-
clustersMenuItem,
15-
homeBreadcrumb,
16-
} from "../../routes/const";
12+
import { clustersBreadcrumb, homeBreadcrumb } from "../../routes/const";
1713
import { store } from "../../store";
1814
import { useAppDispatch } from "../../store/hooks";
1915
import ClusterList from "../organism/cluster/ClusterList";
@@ -23,7 +19,6 @@ function ClusterManagement() {
2319
const breadcrumb = useMemo(() => [homeBreadcrumb, clustersBreadcrumb], []);
2420
useEffect(() => {
2521
dispatch(setBreadcrumb(breadcrumb));
26-
dispatch(setActiveNavItem(clustersMenuItem));
2722
}, []);
2823
return (
2924
<>

apps/cluster-orch/src/components/pages/ClusterTemplateDetails/ClusterTemplateDetails.tsx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import {
99
Flex,
1010
Popup,
1111
PopupOption,
12-
setActiveNavItem,
1312
setBreadcrumb,
1413
} from "@orch-ui/components";
1514
import { downloadFile, getAuthCfg, SharedStorage } from "@orch-ui/utils";
@@ -20,7 +19,6 @@ import { Provider } from "react-redux";
2019
import { useParams } from "react-router-dom";
2120
import {
2221
clusterTemplatesBreadcrumb,
23-
clusterTemplatesMenuItem,
2422
homeBreadcrumb,
2523
} from "../../../routes/const";
2624
import { store } from "../../../store";
@@ -73,7 +71,6 @@ export const ClusterTemplateDetails = () => {
7371

7472
useEffect(() => {
7573
dispatch(setBreadcrumb(breadcrumb));
76-
dispatch(setActiveNavItem(clusterTemplatesMenuItem));
7774
}, [template, isSuccess]);
7875

7976
if (isLoading) {

apps/cluster-orch/src/components/templates/Layout.tsx

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,34 +6,65 @@
66
import {
77
CollapsableList,
88
CollapsableListItem,
9-
getActiveNavItem,
109
SidebarMain,
1110
} from "@orch-ui/components";
1211
import "@orch-ui/styles/Global.scss";
1312
import "@orch-ui/styles/spark-global.scss";
1413
import "@orch-ui/styles/transitions.scss";
15-
import { innerTransitionTimeout } from "@orch-ui/utils";
14+
import { allClusterRoutes, innerTransitionTimeout } from "@orch-ui/utils";
1615
import { Toast } from "@spark-design/react";
1716
import { ToastVisibility } from "@spark-design/tokens";
18-
import { Outlet, useLocation, useNavigate } from "react-router-dom";
17+
import { useMemo } from "react";
18+
import { matchPath, Outlet, useLocation, useNavigate } from "react-router-dom";
1919
import { CSSTransition, SwitchTransition } from "react-transition-group";
20-
import { menuItems } from "../../routes/const";
2120
import { useAppDispatch, useAppSelector } from "../../store/hooks";
2221
import { getToastProps, setProps } from "../../store/reducers/toast";
2322
import "./Layout.scss";
2423

2524
export const datacyComponentSelector = "clusterOrchLayout";
25+
26+
const clustersMenuItem: CollapsableListItem<string> = {
27+
route: "clusters",
28+
icon: "globe",
29+
value: "Clusters",
30+
};
31+
32+
const clusterTemplatesMenuItem: CollapsableListItem<string> = {
33+
route: "cluster-templates",
34+
icon: "globe",
35+
value: "Cluster Templates",
36+
};
37+
38+
const menuItems: CollapsableListItem<string>[] = [
39+
clustersMenuItem,
40+
clusterTemplatesMenuItem,
41+
];
42+
43+
const selectActiveMenu = (activePath: string): CollapsableListItem<string> => {
44+
const cleanPath = activePath.replace(/\/cluster-orch/g, "");
45+
46+
const routeMatches = [
47+
{ routes: allClusterRoutes, menuItem: clustersMenuItem },
48+
];
49+
50+
const matchedItem = routeMatches.find(({ routes }) =>
51+
routes.some((route) => matchPath(route, cleanPath)),
52+
);
53+
54+
return matchedItem?.menuItem ?? clusterTemplatesMenuItem;
55+
};
56+
2657
const Layout = () => {
2758
// Router transitions https://tinyurl.com/2u8kwvk8
2859
const navigate = useNavigate();
2960
const location = useLocation();
3061
const dispatch = useAppDispatch();
3162

32-
const activeItem = useAppSelector(getActiveNavItem);
63+
const activePath = location.pathname;
64+
const activeItem = useMemo(() => selectActiveMenu(activePath), [activePath]);
3365

3466
const onSelectMenuItem = (item: CollapsableListItem<string>) =>
3567
item.route && navigate(item.route);
36-
const activePath = location.pathname;
3768
const toastProps = useAppSelector(getToastProps);
3869

3970
return (

apps/cluster-orch/src/routes/const.ts

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
import { CollapsableListItem } from "@orch-ui/components";
7-
86
export const homeBreadcrumb = {
97
text: "Home",
108
link: "/dashboard",
@@ -19,20 +17,3 @@ export const clusterTemplatesBreadcrumb = {
1917
text: "Cluster Templates",
2018
link: "../cluster-templates",
2119
};
22-
23-
export const clustersMenuItem: CollapsableListItem<string> = {
24-
route: "clusters",
25-
icon: "globe",
26-
value: "Clusters",
27-
};
28-
29-
export const clusterTemplatesMenuItem: CollapsableListItem<string> = {
30-
route: "cluster-templates",
31-
icon: "globe",
32-
value: "Cluster Templates",
33-
};
34-
35-
export const menuItems: CollapsableListItem<string>[] = [
36-
clustersMenuItem,
37-
clusterTemplatesMenuItem,
38-
];

0 commit comments

Comments
 (0)