diff --git a/frontend/src/pages/continue-page.tsx b/frontend/src/pages/continue-page.tsx index efcf220..cf97bc0 100644 --- a/frontend/src/pages/continue-page.tsx +++ b/frontend/src/pages/continue-page.tsx @@ -32,34 +32,41 @@ export const ContinuePage = () => { cookieDomain, ); - const handleRedirect = useCallback(() => { + 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; - setIsLoading(true); - window.location.assign(url!); + window.location.assign(url); }, [url]); + const handleRedirect = useCallback(() => { + setIsLoading(true); + redirectToTarget(); + }, [redirectToTarget]); + useEffect(() => { - if (!isLoggedIn) { - return; - } - - if (hasRedirected.current) { - return; - } - - if ( - (!valid || !allowedProto || !trusted || httpsDowngrade) && - !disableUiWarnings - ) { + if (!shouldAutoRedirect) { return; } const auto = setTimeout(() => { - handleRedirect(); + redirectToTarget(); }, 100); const reveal = setTimeout(() => { - setIsLoading(false); setShowRedirectButton(true); }, 5000); @@ -67,18 +74,7 @@ export const ContinuePage = () => { clearTimeout(auto); clearTimeout(reveal); }; - }, [ - isLoggedIn, - hasRedirected, - valid, - allowedProto, - trusted, - httpsDowngrade, - disableUiWarnings, - setIsLoading, - handleRedirect, - setShowRedirectButton, - ]); + }, [shouldAutoRedirect, redirectToTarget]); if (!isLoggedIn) { return ( @@ -89,11 +85,11 @@ export const ContinuePage = () => { ); } - if (!valid || !allowedProto) { + if (!hasValidRedirect) { return ; } - if (!trusted && !disableUiWarnings) { + if (showUntrustedWarning) { return ( @@ -113,7 +109,7 @@ export const ContinuePage = () => {