import { Button } from "@/components/ui/button"; import { Card, CardDescription, CardFooter, CardHeader, CardTitle, } from "@/components/ui/card"; import { useAppContext } from "@/context/app-context"; import { useUserContext } from "@/context/user-context"; import { Trans, useTranslation } from "react-i18next"; import { Navigate, useLocation, useNavigate } from "react-router"; import { useCallback, useEffect, useRef, useState } from "react"; import { useRedirectUri } from "@/lib/hooks/redirect-uri"; export const ContinuePage = () => { const { cookieDomain, disableUiWarnings } = useAppContext(); const { isLoggedIn } = useUserContext(); const { search } = useLocation(); const { t } = useTranslation(); const navigate = useNavigate(); const [isLoading, setIsLoading] = useState(false); const [showRedirectButton, setShowRedirectButton] = useState(false); const hasRedirected = useRef(false); const searchParams = new URLSearchParams(search); const redirectUri = searchParams.get("redirect_uri"); const { url, valid, trusted, allowedProto, httpsDowngrade } = useRedirectUri( redirectUri, cookieDomain, ); const handleRedirect = useCallback(() => { hasRedirected.current = true; setIsLoading(true); window.location.assign(url!); }, [url]); useEffect(() => { if (!isLoggedIn) { return; } if (hasRedirected.current) { return; } if ( (!valid || !allowedProto || !trusted || httpsDowngrade) && !disableUiWarnings ) { return; } const auto = setTimeout(() => { handleRedirect(); }, 100); const reveal = setTimeout(() => { setIsLoading(false); setShowRedirectButton(true); }, 5000); return () => { clearTimeout(auto); clearTimeout(reveal); }; }, [ isLoggedIn, hasRedirected, valid, allowedProto, trusted, httpsDowngrade, disableUiWarnings, setIsLoading, handleRedirect, setShowRedirectButton, ]); if (!isLoggedIn) { return ( ); } if (!valid || !allowedProto) { return ; } if (!trusted && !disableUiWarnings) { return ( {t("continueUntrustedRedirectTitle")} , }} values={{ cookieDomain }} /> ); } if (httpsDowngrade && !disableUiWarnings) { return ( {t("continueInsecureRedirectTitle")} , }} /> ); } return ( {t("continueRedirectingTitle")} {t("continueRedirectingSubtitle")} {showRedirectButton && ( )} ); };