From 517b49a5c43269b2215d4c0454dbc46dcdfb38f8 Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Wed, 1 Feb 2023 19:55:10 +0100 Subject: [PATCH] current stand --- src/App.tsx | 4 ++++ .../AuthenticateRoute/NavigationButton.tsx | 6 +++++- src/routes/AdminRoute.tsx | 15 +++++++++++++++ src/server-types.ts | 1 + 4 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/routes/AdminRoute.tsx diff --git a/src/App.tsx b/src/App.tsx index f2578fd..8f2111d 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -99,6 +99,10 @@ const router = createBrowserRouter([ loader: getServerSettings, element: , }, + { + path: "/admin", + element: , + }, ], }, ], diff --git a/src/route-widgets/AuthenticateRoute/NavigationButton.tsx b/src/route-widgets/AuthenticateRoute/NavigationButton.tsx index 0ef1b8e..022fc05 100644 --- a/src/route-widgets/AuthenticateRoute/NavigationButton.tsx +++ b/src/route-widgets/AuthenticateRoute/NavigationButton.tsx @@ -1,7 +1,7 @@ import {ReactElement, useContext} from "react" import {BiStats} from "react-icons/bi" import {MdSettings} from "react-icons/md" -import {FaMask} from "react-icons/fa" +import {FaMask, FaServer} from "react-icons/fa" import {Link as RouterLink, useLocation} from "react-router-dom" import {useTranslation} from "react-i18next" @@ -16,6 +16,7 @@ export enum NavigationSection { Aliases, Reports, Settings, + Admin, } export interface NavigationButtonProps { @@ -27,6 +28,7 @@ const SECTION_ICON_MAP: Record = { [NavigationSection.Aliases]: , [NavigationSection.Reports]: , [NavigationSection.Settings]: , + [NavigationSection.Admin]: , } const SECTION_TEXT_MAP: Record = { @@ -34,6 +36,7 @@ const SECTION_TEXT_MAP: Record = { [NavigationSection.Aliases]: "components.NavigationButton.aliases", [NavigationSection.Reports]: "components.NavigationButton.reports", [NavigationSection.Settings]: "components.NavigationButton.settings", + [NavigationSection.Admin]: "components.NavigationButton.admin", } const PATH_SECTION_MAP: Record = { @@ -41,6 +44,7 @@ const PATH_SECTION_MAP: Record = { aliases: NavigationSection.Aliases, reports: NavigationSection.Reports, settings: NavigationSection.Settings, + admin: NavigationSection.Admin, } export default function NavigationButton({section}: NavigationButtonProps): ReactElement { diff --git a/src/routes/AdminRoute.tsx b/src/routes/AdminRoute.tsx new file mode 100644 index 0000000..e2b9f66 --- /dev/null +++ b/src/routes/AdminRoute.tsx @@ -0,0 +1,15 @@ +import {ReactElement, useLayoutEffect} from "react"; +import {useNavigateToNext, useUser} from "~/hooks"; + +export default function AdminRoute(): ReactElement { + const navigateToNext = useNavigateToNext(); + const user = useUser(); + + useLayoutEffect(() => { + if (!user.isAdmin) { + navigateToNext(); + } + }, [user.isAdmin, navigateToNext]) + + +} diff --git a/src/server-types.ts b/src/server-types.ts index 9669ec1..eeef306 100644 --- a/src/server-types.ts +++ b/src/server-types.ts @@ -41,6 +41,7 @@ export interface ServerUser { isDecrypted: false encryptedPassword: string salt: string + isAdmin: boolean email: { address: string isVerified: boolean