-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathNavHeader.tsx
123 lines (119 loc) · 5.77 KB
/
NavHeader.tsx
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
120
121
122
123
import { type FC } from 'react';
import { Nav, Navbar, NavDropdown } from 'react-bootstrap';
import logo from 'public/images/eosc-perf-logo.4.svg';
import { useAuth } from 'react-oidc-context';
import { Wrench } from 'react-bootstrap-icons';
import Link from 'next/link';
import Image from 'next/image';
import useUser from 'lib/useUser';
/**
* Navigation header rendered at the top of every page
*/
const NavHeader: FC = () => {
const auth = useUser();
const authentication = useAuth();
return (
<header>
<Navbar bg="dark" expand="lg" variant="dark">
<Navbar.Brand href="/" className="ms-4">
<Image src={logo} height={36} width={66} alt="EOSC-Performance" />
</Navbar.Brand>
<Navbar.Toggle aria-controls="basic-navbar-nav" className="me-3" />
<Navbar.Collapse id="basic-navbar-nav" className="mx-3">
<Nav className="me-auto ">
<Nav.Link as={Link} href="/search/result">
Search
</Nav.Link>
<NavDropdown title="Submit" id="base-submit-dropdown">
<NavDropdown.Item as={Link} href="/submit/result">
Results
</NavDropdown.Item>
<NavDropdown.Item as={Link} href="/submit/benchmark">
Benchmarks
</NavDropdown.Item>
<NavDropdown.Item as={Link} href="/submit/site">
Sites
</NavDropdown.Item>
</NavDropdown>
<NavDropdown title="Instructions" id="base-instructions-dropdown">
<NavDropdown.Item as={Link} href="/code-guidelines">
Code guidelines
</NavDropdown.Item>
<NavDropdown.Item href="https://perf.readthedocs.io/">
Service Documentation
</NavDropdown.Item>
<NavDropdown.Item href="https://perf-api.readthedocs.io/">
API Documentation
</NavDropdown.Item>
<NavDropdown.Item href="/api/v1/">API Reference</NavDropdown.Item>
</NavDropdown>
<Nav.Link
as={Link}
href="https://appsgrycap.i3m.upv.es:31443/im-dashboard/login"
>
Infrastructure Manager
</Nav.Link>
{auth.admin && (
<NavDropdown title="Admin" id="base-admin-dropdown">
<NavDropdown.Item as={Link} href="/report-view">
Report view
</NavDropdown.Item>
<NavDropdown.Item as={Link} href="/site-editor">
Site editor
</NavDropdown.Item>
</NavDropdown>
)}
</Nav>
<Nav>
<NavDropdown
id="base-login-dropdown"
title={
<>
{auth.loading
? 'Loading...'
: auth.loggedIn && !auth.registered
? 'Not registered'
: auth.email ?? 'Not logged in'}{' '}
{auth.admin && (
<div title="Administrator" style={{ display: 'inline' }}>
<Wrench style={{ color: 'red' }} />
</div>
)}
</>
}
className="justify-content-end"
>
{!auth.loading && auth.loggedIn && (
<>
<NavDropdown.Item onClick={() => authentication.removeUser()}>
Logout
</NavDropdown.Item>
{!auth.registered && (
<NavDropdown.Item href="/registration">
Register
</NavDropdown.Item>
)}
</>
)}
{auth.loading && (
<NavDropdown.Item
onClick={() => authentication.signinRedirect()}
className="text-muted"
disabled
>
Loading...
</NavDropdown.Item>
)}
{!auth.loading && !auth.loggedIn && (
<NavDropdown.Item onClick={() => authentication.signinRedirect()}>
Login
</NavDropdown.Item>
)}
</NavDropdown>
</Nav>
</Navbar.Collapse>
</Navbar>
</header>
);
};
export default NavHeader;