2020-09-13 06:30:07 +00:00
|
|
|
import React, { useEffect, useState } from 'react';
|
2020-09-09 21:09:51 +00:00
|
|
|
import styled, {createGlobalStyle } from 'styled-components';
|
|
|
|
import Navbar from 'components/Navbar';
|
2020-09-12 21:53:41 +00:00
|
|
|
import constants from 'utils/strings/constants';
|
|
|
|
import 'bootstrap/dist/css/bootstrap.min.css';
|
2020-09-13 06:30:07 +00:00
|
|
|
import Button from 'react-bootstrap/Button';
|
2020-09-13 17:01:36 +00:00
|
|
|
import Spinner from 'react-bootstrap/Spinner';
|
2020-09-13 06:30:07 +00:00
|
|
|
import { clearKeys } from 'utils/storage/sessionStorage';
|
|
|
|
import { clearData, getData, LS_KEYS } from 'utils/storage/localStorage';
|
|
|
|
import { useRouter } from 'next/router';
|
2020-09-13 17:01:36 +00:00
|
|
|
import Container from 'components/Container';
|
|
|
|
import PowerSettings from 'components/power_settings';
|
2020-09-09 21:09:51 +00:00
|
|
|
|
|
|
|
const GlobalStyles = createGlobalStyle`
|
|
|
|
html, body {
|
|
|
|
padding: 0;
|
|
|
|
margin: 0;
|
|
|
|
font-family: Arial, Helvetica, sans-serif;
|
|
|
|
height: 100%;
|
|
|
|
flex: 1;
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
background-color: #303030;
|
|
|
|
}
|
|
|
|
|
|
|
|
#__next {
|
|
|
|
flex: 1;
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
}
|
|
|
|
|
|
|
|
.material-icons {
|
|
|
|
vertical-align: middle;
|
|
|
|
margin: 8px;
|
|
|
|
}
|
|
|
|
|
|
|
|
:root {
|
|
|
|
--primary: #e26f99,
|
|
|
|
};
|
2020-09-13 17:01:36 +00:00
|
|
|
|
|
|
|
svg {
|
|
|
|
fill: currentColor;
|
|
|
|
}
|
2020-09-09 21:09:51 +00:00
|
|
|
`;
|
|
|
|
|
|
|
|
const Image = styled.img`
|
|
|
|
max-height: 28px;
|
|
|
|
margin-right: 5px;
|
|
|
|
`;
|
|
|
|
|
2020-09-13 06:30:07 +00:00
|
|
|
const FlexContainer = styled.div`
|
|
|
|
flex: 1;
|
|
|
|
`;
|
2020-09-12 21:53:41 +00:00
|
|
|
|
2020-09-09 21:09:51 +00:00
|
|
|
export default function App({ Component, pageProps }) {
|
2020-09-13 06:30:07 +00:00
|
|
|
const router = useRouter();
|
|
|
|
const [user, setUser] = useState();
|
2020-09-13 17:01:36 +00:00
|
|
|
const [loading, setLoading] = useState(false);
|
2020-09-13 06:30:07 +00:00
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
const user = getData(LS_KEYS.USER);
|
|
|
|
setUser(user);
|
|
|
|
console.log(`%c${constants.CONSOLE_WARNING_STOP}`, 'color: red; font-size: 52px;');
|
|
|
|
console.log(`%c${constants.CONSOLE_WARNING_DESC}`, 'font-size: 20px;');
|
|
|
|
|
2020-09-13 17:01:36 +00:00
|
|
|
router.events.on('routeChangeStart', () => {
|
|
|
|
setLoading(true);
|
|
|
|
});
|
|
|
|
|
2020-09-13 06:30:07 +00:00
|
|
|
router.events.on('routeChangeComplete', () => {
|
|
|
|
const user = getData(LS_KEYS.USER);
|
|
|
|
setUser(user);
|
2020-09-13 17:01:36 +00:00
|
|
|
setLoading(false);
|
2020-09-13 06:30:07 +00:00
|
|
|
});
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
const logout = () => {
|
|
|
|
clearKeys();
|
|
|
|
clearData();
|
|
|
|
router.push("/");
|
|
|
|
}
|
|
|
|
|
2020-09-09 21:09:51 +00:00
|
|
|
return (
|
2020-09-13 06:30:07 +00:00
|
|
|
<>
|
2020-09-09 21:09:51 +00:00
|
|
|
<GlobalStyles />
|
|
|
|
<Navbar>
|
2020-09-13 06:30:07 +00:00
|
|
|
<FlexContainer>
|
2020-09-13 17:15:48 +00:00
|
|
|
<Image alt='logo' src="/icon.png" />
|
2020-09-13 06:30:07 +00:00
|
|
|
{constants.COMPANY_NAME}
|
|
|
|
</FlexContainer>
|
|
|
|
{user && <Button variant='link' onClick={logout}>
|
2020-09-13 17:01:36 +00:00
|
|
|
<PowerSettings />
|
2020-09-13 06:30:07 +00:00
|
|
|
</Button>}
|
2020-09-09 21:09:51 +00:00
|
|
|
</Navbar>
|
2020-09-13 17:01:36 +00:00
|
|
|
{loading
|
|
|
|
? <Container>
|
|
|
|
<Spinner animation="border" role="status" variant="primary">
|
|
|
|
<span className="sr-only">Loading...</span>
|
|
|
|
</Spinner>
|
|
|
|
</Container>
|
|
|
|
: <Component />
|
|
|
|
}
|
2020-09-13 06:30:07 +00:00
|
|
|
</>
|
2020-09-09 21:09:51 +00:00
|
|
|
);
|
|
|
|
}
|