forked from kubeflow/hub
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNavSidebar.tsx
More file actions
72 lines (66 loc) · 1.88 KB
/
NavSidebar.tsx
File metadata and controls
72 lines (66 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import * as React from 'react';
import { NavLink } from 'react-router-dom';
import {
Brand,
Nav,
NavExpandable,
NavItem,
NavList,
PageSidebar,
PageSidebarBody,
} from '@patternfly/react-core';
import { LOGO_LIGHT } from '~/shared/utilities/const';
import { useNavData, isNavDataGroup, NavDataHref, NavDataGroup } from './AppRoutes';
const NavHref: React.FC<{ item: NavDataHref }> = ({ item }) => (
<NavItem key={item.label} data-id={item.label} itemId={item.label}>
<NavLink to={item.path}>{item.label}</NavLink>
</NavItem>
);
const NavGroup: React.FC<{ item: NavDataGroup }> = ({ item }) => {
const { children } = item;
const [expanded, setExpanded] = React.useState(false);
return (
<NavExpandable
data-id={item.label}
key={item.label}
id={item.label}
title={item.label}
groupId={item.label}
isExpanded={expanded}
onExpand={(e, val) => setExpanded(val)}
aria-label={item.label}
>
{children.map((childItem) => (
<NavHref key={childItem.label} data-id={childItem.label} item={childItem} />
))}
</NavExpandable>
);
};
const NavSidebar: React.FC = () => {
const navData = useNavData();
return (
<PageSidebar>
<PageSidebarBody>
<Nav id="nav-primary-simple">
<NavList id="nav-list-simple">
<NavItem>
<Brand
className="kubeflow_brand"
src={`${window.location.origin}/images/${LOGO_LIGHT}`}
alt="Kubeflow Logo"
/>
</NavItem>
{navData.map((item) =>
isNavDataGroup(item) ? (
<NavGroup key={item.label} item={item} />
) : (
<NavHref key={item.label} item={item} />
),
)}
</NavList>
</Nav>
</PageSidebarBody>
</PageSidebar>
);
};
export default NavSidebar;