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