82 lines
1.7 KiB
TypeScript
82 lines
1.7 KiB
TypeScript
import { h } from 'preact';
|
|
import { route } from 'preact-router';
|
|
import { useEffect } from 'preact/hooks';
|
|
import { useSelector } from 'react-redux'
|
|
import LogRocket from 'logrocket';
|
|
|
|
import http from './../http';
|
|
import { State } from './../store';
|
|
|
|
import Swirl from './swirl';
|
|
|
|
function showAdmin(user) {
|
|
return user && user.email === 'ntr@mnml.gg';
|
|
}
|
|
|
|
const DEFAULT_ROUTE = '/';
|
|
|
|
const Nav = () => {
|
|
const user = useSelector((state: State) => state.user);
|
|
|
|
useEffect(() => {
|
|
if (!user) {
|
|
route('/login');
|
|
return;
|
|
}
|
|
route(DEFAULT_ROUTE)
|
|
|
|
if (window.location.host === 'crates.ntwl.xyz') {
|
|
LogRocket.identify(user.id, {
|
|
name: user.email,
|
|
email: user.email,
|
|
});
|
|
}
|
|
|
|
return;
|
|
}, [user])
|
|
|
|
async function logoutClick(e) {
|
|
e.preventDefault();
|
|
await http.postLogout();
|
|
window.location.reload();
|
|
}
|
|
|
|
const nav = () => (
|
|
<nav>
|
|
<a href="/">Offers</a>
|
|
<a href='/list'>List</a>
|
|
<a href="/search">Search</a>
|
|
</nav>
|
|
);
|
|
|
|
const anonNav = () => (
|
|
<nav>
|
|
<a href="/login">Login</a>
|
|
<a href="/register">Register</a>
|
|
</nav>
|
|
);
|
|
|
|
const adminNav = () => (
|
|
<nav>
|
|
<a href='/acp'>Offers ACP</a>
|
|
</nav>
|
|
)
|
|
|
|
const userNav = () => (
|
|
<nav>
|
|
<a href="/info">Info</a>
|
|
<a href="/auth/logout" onClick={logoutClick}>Logout</a>
|
|
</nav>
|
|
)
|
|
|
|
return (
|
|
<header>
|
|
{user ? nav() : anonNav()}
|
|
{showAdmin(user) ? adminNav() : <div />}
|
|
{user ? userNav() : null}
|
|
</header>
|
|
);
|
|
}
|
|
|
|
export default Nav;
|