'use client'; import * as React from 'react'; import { useRouter } from 'next/navigation'; import Alert from '@mui/material/Alert'; import { paths } from '@/paths'; import { logger } from '@/lib/default-logger'; import { useUser } from '@/hooks/use-user'; export interface GuestGuardProps { children: React.ReactNode; } export function GuestGuard({ children }: GuestGuardProps): React.JSX.Element | null { const router = useRouter(); const { user, error, isLoading } = useUser(); const [isChecking, setIsChecking] = React.useState(true); const checkPermissions = async (): Promise => { if (isLoading) { return; } if (error) { setIsChecking(false); return; } if (user) { logger.debug('[GuestGuard]: User is logged in, redirecting to dashboard'); router.replace(paths.dashboard.overview); return; } setIsChecking(false); }; React.useEffect(() => { checkPermissions().catch(() => { // noop }); // eslint-disable-next-line react-hooks/exhaustive-deps -- Expected }, [user, error, isLoading]); if (isChecking) { return null; } if (error) { return {error}; } return {children}; }