Add placeholder admin dashboard

This commit is contained in:
april 2024-01-11 15:06:40 -06:00
parent 37a452ac08
commit fbc1df5f34
3 changed files with 39 additions and 3 deletions

View File

@ -0,0 +1,13 @@
import { Container, Group, Title } from "@mantine/core";
export default function Admin() {
return (
<>
<Container>
<Group justify="space-between" align="center" grow my="lg">
<Title order={2}>Admin</Title>
</Group>
</Container>
</>
);
}

View File

@ -2,6 +2,7 @@ import { useAuth } from "@/util/auth";
import { Stack, NavLink } from "@mantine/core"; import { Stack, NavLink } from "@mantine/core";
import { Link, useLocation } from "@remix-run/react"; import { Link, useLocation } from "@remix-run/react";
import { import {
IconAdjustments,
IconBook2, IconBook2,
IconDashboard, IconDashboard,
IconLogout, IconLogout,
@ -19,7 +20,7 @@ export default function Navbar({
const location = useLocation(); const location = useLocation();
const page = location.pathname.split("/")[2]; const page = location.pathname.split("/")[2];
const { user, signout } = useAuth(); const { user, authLevel, signout } = useAuth();
return ( return (
<Stack justify="space-between" h="100%"> <Stack justify="space-between" h="100%">
@ -51,6 +52,19 @@ export default function Navbar({
active={page === "aircraft"} active={page === "aircraft"}
onClick={() => (opened ? toggle() : null)} onClick={() => (opened ? toggle() : null)}
/> />
{authLevel ? (
authLevel === 2 ? (
<NavLink
p="md"
component={Link}
to="/logbook/admin"
label="Admin"
leftSection={<IconAdjustments />}
active={page === "admin"}
onClick={() => (opened ? toggle() : null)}
/>
) : null
) : null}
</Stack> </Stack>
<Stack gap="0"> <Stack gap="0">
<NavLink <NavLink

View File

@ -5,6 +5,7 @@ import { createContext, useContext, useEffect, useState } from "react";
interface AuthContextValues { interface AuthContextValues {
user: string | null; user: string | null;
authLevel: number | null;
loading: boolean; loading: boolean;
signin: ({ signin: ({
username, username,
@ -34,6 +35,7 @@ export function useAuth(): AuthContextValues {
function useProvideAuth() { function useProvideAuth() {
const [user, setUser] = useState<string | null>(null); const [user, setUser] = useState<string | null>(null);
const [authLevel, setAuthLevel] = useState<number | null>(null);
const [loading, setLoading] = useState<boolean>(true); const [loading, setLoading] = useState<boolean>(true);
const navigate = useNavigate(); const navigate = useNavigate();
@ -83,7 +85,10 @@ function useProvideAuth() {
setLoading(false); setLoading(false);
await client await client
.get("/users/me") .get("/users/me")
.then((response) => handleUser(response.data.username)) .then((response) => {
handleUser(response.data.username);
setAuthLevel(response.data.level);
})
.catch(() => handleUser(null)); .catch(() => handleUser(null));
navigate("/logbook"); navigate("/logbook");
}; };
@ -99,13 +104,17 @@ function useProvideAuth() {
useEffect(() => { useEffect(() => {
client client
.get("/users/me") .get("/users/me")
.then((response) => handleUser(response.data.username)) .then((response) => {
handleUser(response.data.username);
setAuthLevel(response.data.level);
})
.catch(() => handleUser(null)); .catch(() => handleUser(null));
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
}, []); }, []);
return { return {
user, user,
authLevel,
loading, loading,
signin, signin,
signout, signout,