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 hasValidRedirect = valid && allowedProto;
const showUntrustedWarning =
hasValidRedirect && !trusted && !disableUiWarnings;
const showInsecureWarning =
hasValidRedirect && httpsDowngrade && !disableUiWarnings;
const shouldAutoRedirect =
isLoggedIn &&
hasValidRedirect &&
!showUntrustedWarning &&
!showInsecureWarning;
const redirectToTarget = useCallback(() => {
if (!url || hasRedirected.current) {
return;
}
hasRedirected.current = true;
window.location.assign(url);
}, [url]);
const handleRedirect = useCallback(() => {
setIsLoading(true);
redirectToTarget();
}, [redirectToTarget]);
useEffect(() => {
if (!shouldAutoRedirect) {
return;
}
const auto = setTimeout(() => {
redirectToTarget();
}, 100);
const reveal = setTimeout(() => {
setShowRedirectButton(true);
}, 5000);
return () => {
clearTimeout(auto);
clearTimeout(reveal);
};
}, [shouldAutoRedirect, redirectToTarget]);
if (!isLoggedIn) {
return (
);
}
if (!hasValidRedirect) {
return ;
}
if (showUntrustedWarning) {
return (
{t("continueUntrustedRedirectTitle")}
,
}}
values={{ cookieDomain }}
/>
);
}
if (showInsecureWarning) {
return (
{t("continueInsecureRedirectTitle")}
,
}}
/>
);
}
return (
{t("continueRedirectingTitle")}
{t("continueRedirectingSubtitle")}
{showRedirectButton && (
)}
);
};