ente/src/pages/_app.tsx

105 lines
2.8 KiB
TypeScript
Raw Normal View History

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';
import constants from 'utils/strings/constants';
import 'bootstrap/dist/css/bootstrap.min.css';
import Button from 'react-bootstrap/Button';
2020-09-13 17:01:36 +00:00
import Spinner from 'react-bootstrap/Spinner';
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;
`;
const FlexContainer = styled.div`
flex: 1;
`;
2020-09-09 21:09:51 +00:00
export default function App({ Component, pageProps }) {
const router = useRouter();
const [user, setUser] = useState();
2020-09-13 17:01:36 +00:00
const [loading, setLoading] = useState(false);
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);
});
router.events.on('routeChangeComplete', () => {
const user = getData(LS_KEYS.USER);
setUser(user);
2020-09-13 17:01:36 +00:00
setLoading(false);
});
}, []);
const logout = () => {
clearKeys();
clearData();
router.push("/");
}
2020-09-09 21:09:51 +00:00
return (
<>
2020-09-09 21:09:51 +00:00
<GlobalStyles />
<Navbar>
<FlexContainer>
2020-09-13 17:15:48 +00:00
<Image alt='logo' src="/icon.png" />
{constants.COMPANY_NAME}
</FlexContainer>
{user && <Button variant='link' onClick={logout}>
2020-09-13 17:01:36 +00:00
<PowerSettings />
</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-09 21:09:51 +00:00
);
}