-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathNavBar.tsx
More file actions
123 lines (115 loc) · 5.94 KB
/
NavBar.tsx
File metadata and controls
123 lines (115 loc) · 5.94 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
120
121
122
123
import {NavLink, useLocation} from 'react-router-dom';
import {Container, Image, Nav, Navbar, NavDropdown} from 'react-bootstrap';
import {useTranslation} from 'react-i18next';
import './NavBar.css';
import {useVariant} from '../hooks/useVariant.ts';
import {useCurrentUser} from '../hooks/useEndpoints.ts';
import {useTheme} from '../hooks/useTheme.ts';
import RequireRole from '../widgets/RequireRole.tsx';
import RequireVariant from "../widgets/RequireVariant.tsx";
import {useLocale} from '../hooks/useLocale.ts';
const NavBar = () => {
const {t} = useTranslation();
const [locale, setLocale] = useLocale();
const backendUrl = import.meta.env.OIDC_AUTHORITY_URL;
const {
data: user,
} = useCurrentUser();
const variant = useVariant();
const [theme, setTheme] = useTheme();
const changeLanguage = async () =>
setLocale((!locale || locale == 'bg') ? 'en' : 'bg');
const changeTheme = () => setTheme(theme == 'light' ? 'dark' : 'light');
// useEffect(function () {
// if (user?.locale) {
// i18n.changeLanguage(user.locale).then(() => {
// });
// }
// }, [user]);
const location = useLocation();
return (<Navbar {...variant.navbar} expand="lg" className="py-0">
<Container>
<Navbar.Brand as={NavLink} to="/">
<Image src={variant.logo.url} className="logo" alt={variant.logo.alt}/>
</Navbar.Brand>
<Navbar.Toggle aria-controls="basic-navbar-nav"/>
<Navbar.Collapse id="basic-navbar-nav">
<Nav className="flex-grow-1">
<RequireRole roles={['board_member', 'infra', 'trusted_member', 'landlord', 'tenant']}>
<Nav.Link as={NavLink} to="/doors">
<i className="fa-solid fa-door-closed"/>
{t('views.navigation.door_access')}
</Nav.Link>
</RequireRole>
<RequireRole roles={['board_member', 'infra', 'landlord', 'tenant']}>
<Nav.Link as={NavLink} to="/lights">
<i className="fa-solid fa-lightbulb"/>{' '}
{t('views.navigation.lights')}
</Nav.Link>
</RequireRole>
<RequireRole roles={['trusted_member', 'board_member', 'infra']}>
<Nav.Link as={NavLink} to="/hvac">
<i className="fa-solid fa-fan"/>{' '}
{t('views.navigation.hvac')}
</Nav.Link>
</RequireRole>
<RequireVariant variant="initlab">
<Nav.Link as={NavLink} to="/sensors">
<i className="fa-solid fa-chart-line"/>{' '}
{t('views.navigation.sensors')}
</Nav.Link>
</RequireVariant>
<RequireRole roles={['board_member', 'infra']}>
<Nav.Link as={NavLink} to="/action-log">
<i className="fa-solid fa-book"/>{' '}
{t('views.navigation.action_log')}
</Nav.Link>
</RequireRole>
<RequireRole roles={['board_member']}>
<Nav.Link href={backendUrl + 'fauna/users'}>
<i className="fa-solid fa-users"/>{' '}
{t('views.navigation.labbers')}
</Nav.Link>
</RequireRole>
</Nav>
<Nav>
<Nav.Link onClick={changeLanguage}><i className="fa-solid fa-language"/>{' '}<span
className={'d-lg-none'}>{t('views.navigation.language')}</span></Nav.Link>
<Nav.Link onClick={changeTheme}><i className="fa-solid fa-circle-half-stroke"/>{' '}<span
className={'d-lg-none'}>{t('views.navigation.dark_mode')}</span></Nav.Link>
{user ? <NavDropdown title={<>
<i className="fa-solid fa-user"/>{' '}
{t('views.navigation.account')}
</>} className="ms-0 ms-lg-auto">
<NavDropdown.Item href={backendUrl + 'users/edit'}>
{t('views.navigation.view_edit')}
</NavDropdown.Item>
<RequireVariant variant="initlab">
<NavDropdown.Item href={backendUrl + 'user/network_devices'}>
{t('views.navigation.network_devices')}
</NavDropdown.Item>
<NavDropdown.Item href={backendUrl + 'oauth/applications'}>
{t('views.navigation.oauth_application_management')}
</NavDropdown.Item>
<NavDropdown.Item href={backendUrl + 'oauth/authorized_applications'}>
{t('views.navigation.oauth_token_management')}
</NavDropdown.Item>
<NavDropdown.Divider/>
</RequireVariant>
<NavDropdown.Item as={NavLink} to="/logout" state={{
from: location.pathname === '/doors' ? null : location,
}}>
{t('views.navigation.sign_out')}
</NavDropdown.Item>
</NavDropdown> : <Nav.Link as={NavLink} to="/login" state={{
from: location,
}} className="ms-0 ms-lg-auto">
<i className="fa-solid fa-right-to-bracket"/>{' '}
{t('views.navigation.sign_in')}
</Nav.Link>}
</Nav>
</Navbar.Collapse>
</Container>
</Navbar>);
};
export default NavBar;