diff --git a/client/src/Hooks/useSuperAdminRedirect.ts b/client/src/Hooks/useSuperAdminRedirect.ts deleted file mode 100644 index 341208ac3..000000000 --- a/client/src/Hooks/useSuperAdminRedirect.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { useEffect } from "react"; -import { useNavigate } from "react-router-dom"; -import { useGet } from "@/Hooks/UseApi"; - -type Options = { - redirectTo: string; - redirectWhen: boolean; - skip?: boolean; -}; - -export const useSuperAdminRedirect = ({ redirectTo, redirectWhen, skip }: Options) => { - const navigate = useNavigate(); - const { data: superAdminExists, isLoading } = useGet( - skip ? null : "/auth/users/superadmin" - ); - - useEffect(() => { - if (!skip && superAdminExists === redirectWhen) { - navigate(redirectTo, { replace: true }); - } - }, [superAdminExists, redirectWhen, redirectTo, skip, navigate]); - - return { superAdminExists, isLoading }; -}; diff --git a/client/src/Pages/Auth/Login/index.tsx b/client/src/Pages/Auth/Login/index.tsx index fd0eff130..9de5f1df5 100644 --- a/client/src/Pages/Auth/Login/index.tsx +++ b/client/src/Pages/Auth/Login/index.tsx @@ -1,6 +1,7 @@ import { BaseAuthPage, TextLink } from "@/Components/design-elements"; import { Button, TextField } from "@/Components/inputs"; +import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { useForm, Controller } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod/dist/zod.js"; @@ -9,8 +10,7 @@ import type { LoginFormData } from "@/Validation/login"; import { useDispatch } from "react-redux"; import { useNavigate } from "react-router-dom"; import { setAuthState } from "@/Features/Auth/authSlice"; -import { usePost } from "@/Hooks/UseApi"; -import { useSuperAdminRedirect } from "@/Hooks/useSuperAdminRedirect"; +import { useLazyGet, usePost } from "@/Hooks/UseApi"; const LoginPage = () => { const { t } = useTranslation(); @@ -18,10 +18,16 @@ const LoginPage = () => { const navigate = useNavigate(); const { post, loading } = usePost(); - const { isLoading: isCheckingAdmin } = useSuperAdminRedirect({ - redirectTo: "/register", - redirectWhen: false, - }); + const [isCheckingAdmin, setIsCheckingAdmin] = useState(true); + const { get } = useLazyGet(); + + useEffect(() => { + get("/auth/users/superadmin").then((res) => { + if (res?.data === false) navigate("/register", { replace: true }); + else setIsCheckingAdmin(false); + }); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); const { schema, defaults } = useLoginForm(); diff --git a/client/src/Pages/Auth/Register/index.tsx b/client/src/Pages/Auth/Register/index.tsx index 09cc0e206..9c7bae3ee 100644 --- a/client/src/Pages/Auth/Register/index.tsx +++ b/client/src/Pages/Auth/Register/index.tsx @@ -6,13 +6,12 @@ import { zodResolver } from "@hookform/resolvers/zod/dist/zod.js"; import { useRegisterForm } from "@/Hooks/useRegisterForm"; import type { RegisterFormData } from "@/Validation/register"; import { useTranslation } from "react-i18next"; -import { usePost } from "@/Hooks/UseApi"; -import { useSuperAdminRedirect } from "@/Hooks/useSuperAdminRedirect"; +import { useLazyGet, usePost } from "@/Hooks/UseApi"; import { setAuthState } from "@/Features/Auth/authSlice"; import { useDispatch } from "react-redux"; import { useNavigate, useParams } from "react-router-dom"; import type { AuthResponse } from "@/Types/User"; -import { useEffect, useRef } from "react"; +import { useEffect, useRef, useState } from "react"; interface RegisterPayload { user: Omit; @@ -34,11 +33,17 @@ const RegisterPage = () => { const { post: verifyToken } = usePost<{ token: string }, InviteVerifyResponse>(); const hasVerified = useRef(false); - const { isLoading: isCheckingAdmin } = useSuperAdminRedirect({ - redirectTo: "/login", - redirectWhen: true, - skip: !!token, - }); + const [isCheckingAdmin, setIsCheckingAdmin] = useState(!token); + const { get } = useLazyGet(); + + useEffect(() => { + if (token) return; + get("/auth/users/superadmin").then((res) => { + if (res?.data === true) navigate("/login", { replace: true }); + else setIsCheckingAdmin(false); + }); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); const { control, handleSubmit, setError, reset } = useForm({ resolver: zodResolver(schema),