Spaces:
Build error
Build error
import React from "react"; | |
import { useLocation, useNavigate } from "react-router"; | |
import { useSettings } from "#/hooks/query/use-settings"; | |
/** | |
* A component that restricts access to routes based on email verification status. | |
* If EMAIL_VERIFIED is false, only allows access to the /settings/user page. | |
*/ | |
export function EmailVerificationGuard({ | |
children, | |
}: { | |
children: React.ReactNode; | |
}) { | |
const { data: settings, isLoading } = useSettings(); | |
const navigate = useNavigate(); | |
const { pathname } = useLocation(); | |
React.useEffect(() => { | |
// If settings are still loading, don't do anything yet | |
if (isLoading) return; | |
// If EMAIL_VERIFIED is explicitly false (not undefined or null) | |
if (settings?.EMAIL_VERIFIED === false) { | |
// Allow access to /settings/user but redirect from any other page | |
if (pathname !== "/settings/user") { | |
navigate("/settings/user", { replace: true }); | |
} | |
} | |
}, [settings?.EMAIL_VERIFIED, pathname, navigate, isLoading]); | |
return children; | |
} | |