import { Button, Container } from "@mantine/core"; import { StateView } from "@wealthledger/ui"; import { type FC, type PropsWithChildren, useState } from "react"; import { useTranslation } from "react-i18next"; import { Navigate, useLocation } from "react-router"; import { useAuth } from "@/features/auth"; import { RouteSkeleton } from "./RouteFallback"; const Protected: FC = (props) => { const { children } = props; const { ready, retry, signedOut, unavailable, user } = useAuth(); const { t } = useTranslation(); const location = useLocation(); const [wasAuthenticated, setWasAuthenticated] = useState(false); if (user && !wasAuthenticated) setWasAuthenticated(true); if (!ready) return ; // The server was unreachable (e.g. mid-deploy), so the session is unproven, not gone. if (!user && unavailable) return ( {t("auth.retry")}} error text={t("auth.unavailableText")} title={t("auth.unavailableTitle")} /> ); const loginState = signedOut && wasAuthenticated ? undefined : { returnTo: `${location.pathname}${location.search}` }; return user ? <>{children} : ( ); }; const Public: FC = (props) => { const { children } = props; const { ready, user } = useAuth(); const location = useLocation(); if (!ready) return ; const state: unknown = location.state; const requested = state && typeof state === "object" && "returnTo" in state ? state.returnTo : undefined; const returnTo = typeof requested === "string" && requested.startsWith("/") && !requested.startsWith("//") ? requested : "/accounts"; return user ? : <>{children}; }; export { Protected, Public };