]> git.localhorst.tv Git - alttp.git/blob - resources/js/components/common/Header.js
21c6a67ed7d7224c0237c12f3a5eb280ff5a3fad
[alttp.git] / resources / js / components / common / Header.js
1 import PropTypes from 'prop-types';
2 import React from 'react';
3 import { Button, Container, Nav, Navbar } from 'react-bootstrap';
4 import { LinkContainer } from 'react-router-bootstrap';
5 import { useLocation } from 'react-router-dom';
6 import { useTranslation } from 'react-i18next';
7
8 import Icon from './Icon';
9 import LanguageSwitcher from './LanguageSwitcher';
10 import { getAvatarUrl } from '../../helpers/User';
11 import { withUser } from '../../helpers/UserContext';
12
13 const Header = ({ doLogout, user }) => {
14         const { pathname } = useLocation();
15         const { t } = useTranslation();
16
17         return <Navbar id="header" bg="dark" variant="dark">
18                 <Container fluid>
19                         <LinkContainer to="/">
20                                 <Navbar.Brand>
21                                         ALttP
22                                 </Navbar.Brand>
23                         </LinkContainer>
24                         <Nav activeKey={pathname}>
25                                 <LinkContainer to="/tournaments/6">
26                                         <Nav.Link href="/tournaments/6">
27                                                 ALttPR Weekly
28                                         </Nav.Link>
29                                 </LinkContainer>
30                                 <LinkContainer to="/tournaments/5">
31                                         <Nav.Link href="/tournaments/5">
32                                                 Super Metroid
33                                         </Nav.Link>
34                                 </LinkContainer>
35                         </Nav>
36                         <Nav activeKey={pathname} className="ms-auto">
37                                 <LinkContainer to="/tech">
38                                         <Nav.Link href="/tech">
39                                                 {t('menu.tech')}
40                                         </Nav.Link>
41                                 </LinkContainer>
42                                 <LinkContainer to="/map">
43                                         <Nav.Link href="/map">
44                                                 {t('menu.map')}
45                                         </Nav.Link>
46                                 </LinkContainer>
47                         </Nav>
48                         <Navbar.Text className="mx-2">
49                                 <LanguageSwitcher />
50                         </Navbar.Text>
51                         <Nav>
52                                 {user ?
53                                         <>
54                                                 <LinkContainer to={`/users/${user.id}`}>
55                                                         <Nav.Link>
56                                                                 <img alt="" src={getAvatarUrl(user)} />
57                                                                 {user.username}
58                                                                 {user.discriminator && user.discriminator !== '0' ?
59                                                                         <span className="text-muted">#{user.discriminator}</span>
60                                                                 : null}
61                                                         </Nav.Link>
62                                                 </LinkContainer>
63                                                 <Button
64                                                         onClick={doLogout}
65                                                         title={t('button.logout')}
66                                                         variant="outline-secondary"
67                                                 >
68                                                         <Icon.LOGOUT title="" />
69                                                 </Button>
70                                         </>
71                                 :
72                                         <Button
73                                                 href="/login"
74                                                 onClick={() => {
75                                                         if (location.pathname.length > 1) {
76                                                                 localStorage.setItem('returnPath', location.pathname.substr(1));
77                                                         }
78                                                 }}
79                                                 variant="discord"
80                                         >
81                                                 <Icon.DISCORD />
82                                                 {' '}
83                                                 {t('button.login')}
84                                         </Button>
85                                 }
86                         </Nav>
87                 </Container>
88         </Navbar>;
89 };
90
91 Header.propTypes = {
92         doLogout: PropTypes.func,
93         user: PropTypes.shape({
94                 avatar: PropTypes.string,
95                 discriminator: PropTypes.string,
96                 id: PropTypes.string,
97                 username: PropTypes.string,
98         }),
99 };
100
101 export default withUser(Header);