forked from kubeflow/hub
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNavBar.tsx
More file actions
119 lines (111 loc) · 3.57 KB
/
NavBar.tsx
File metadata and controls
119 lines (111 loc) · 3.57 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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import React from 'react';
import {
Brand,
Dropdown,
DropdownItem,
DropdownList,
Masthead,
MastheadBrand,
MastheadContent,
MastheadLogo,
MastheadMain,
MastheadToggle,
MenuToggle,
MenuToggleElement,
PageToggleButton,
Toolbar,
ToolbarContent,
ToolbarGroup,
ToolbarItem,
} from '@patternfly/react-core';
import { SimpleSelect } from '@patternfly/react-templates';
import { BarsIcon } from '@patternfly/react-icons';
import { NamespaceSelectorContext } from '~/shared/context/NamespaceSelectorContext';
import logoDarkTheme from '~/images/logo-dark-theme.svg';
import { useThemeContext } from './ThemeContext';
interface NavBarProps {
username?: string;
onLogout: () => void;
}
const NavBar: React.FC<NavBarProps> = ({ username, onLogout }) => {
const { namespaces, preferredNamespace, updatePreferredNamespace } =
React.useContext(NamespaceSelectorContext);
const { isMUITheme } = useThemeContext();
const [userMenuOpen, setUserMenuOpen] = React.useState(false);
const options = namespaces.map((namespace) => ({
content: namespace.name,
value: namespace.name,
selected: namespace.name === preferredNamespace?.name,
}));
const handleLogout = () => {
setUserMenuOpen(false);
onLogout();
};
const userMenuItems = [
<DropdownItem key="logout" onClick={handleLogout}>
Log out
</DropdownItem>,
];
return (
<Masthead>
<MastheadMain>
<MastheadToggle>
<PageToggleButton id="page-nav-toggle" variant="plain" aria-label="Dashboard navigation">
<BarsIcon />
</PageToggleButton>
</MastheadToggle>
{!isMUITheme ? (
<MastheadBrand>
<MastheadLogo component="a">
<Brand src={logoDarkTheme} alt="Kubeflow" heights={{ default: '36px' }} />
</MastheadLogo>
</MastheadBrand>
) : (
''
)}
</MastheadMain>
<MastheadContent>
<Toolbar>
<ToolbarContent>
<ToolbarGroup variant="action-group-plain" align={{ default: 'alignStart' }}>
<ToolbarItem className="kubeflow-u-namespace-select">
<SimpleSelect
initialOptions={options}
onSelect={(_ev, selection) => {
updatePreferredNamespace({ name: String(selection) });
}}
/>
</ToolbarItem>
</ToolbarGroup>
{username && (
<ToolbarGroup variant="action-group-plain" align={{ default: 'alignEnd' }}>
<ToolbarItem>
<Dropdown
popperProps={{ position: 'right' }}
onOpenChange={(isOpen) => setUserMenuOpen(isOpen)}
toggle={(toggleRef: React.Ref<MenuToggleElement>) => (
<MenuToggle
aria-label="User menu"
id="user-menu-toggle"
data-testid="user-menu-toggle-button"
ref={toggleRef}
onClick={() => setUserMenuOpen(!userMenuOpen)}
isExpanded={userMenuOpen}
>
{username}
</MenuToggle>
)}
isOpen={userMenuOpen}
>
<DropdownList>{userMenuItems}</DropdownList>
</Dropdown>
</ToolbarItem>
</ToolbarGroup>
)}
</ToolbarContent>
</Toolbar>
</MastheadContent>
</Masthead>
);
};
export default NavBar;