import { useSearchParams, useNavigate } from 'react-router-dom'; import { useState, useEffect, useMemo, useCallback } from 'react'; import { useVerifyEmailMutation, useResendVerificationEmail } from '~/data-provider'; import { ThemeSelector } from '~/components/ui'; import { Spinner } from '~/components/svg'; import { useLocalize } from '~/hooks'; function RequestPasswordReset() { const navigate = useNavigate(); const localize = useLocalize(); const [params] = useSearchParams(); const [countdown, setCountdown] = useState(3); const [headerText, setHeaderText] = useState(''); const [showResendLink, setShowResendLink] = useState(false); const [verificationStatus, setVerificationStatus] = useState(false); const token = useMemo(() => params.get('token') || '', [params]); const email = useMemo(() => params.get('email') || '', [params]); const countdownRedirect = useCallback(() => { setCountdown(3); const timer = setInterval(() => { setCountdown((prevCountdown) => { if (prevCountdown <= 1) { clearInterval(timer); navigate('/c/new', { replace: true }); return 0; } return prevCountdown - 1; }); }, 1000); }, [navigate]); const verifyEmailMutation = useVerifyEmailMutation({ onSuccess: () => { setHeaderText(localize('com_auth_email_verification_success') + ' ๐ŸŽ‰'); setVerificationStatus(true); countdownRedirect(); }, onError: (error: unknown) => { setHeaderText(localize('com_auth_email_verification_failed') + ' ๐Ÿ˜ข'); setShowResendLink(true); setVerificationStatus(true); }, }); const resendEmailMutation = useResendVerificationEmail({ onSuccess: () => { setHeaderText(localize('com_auth_email_resent_success') + ' ๐Ÿ“ง'); countdownRedirect(); }, onError: () => { setHeaderText(localize('com_auth_email_resent_failed') + ' ๐Ÿ˜ข'); }, onMutate: () => setShowResendLink(false), }); const handleResendEmail = () => { resendEmailMutation.mutate({ email }); }; useEffect(() => { if (verificationStatus || verifyEmailMutation.isLoading) { return; } if (token && email) { verifyEmailMutation.mutate({ email, token }); } else { if (email) { setHeaderText(localize('com_auth_email_verification_failed_token_missing') + ' ๐Ÿ˜ข'); } else { setHeaderText(localize('com_auth_email_verification_invalid') + ' ๐Ÿคจ'); } setShowResendLink(true); setVerificationStatus(true); } }, [token, email, verificationStatus, verifyEmailMutation]); const VerificationSuccess = () => (

{headerText}

{countdown > 0 && (

{localize('com_auth_email_verification_redirecting', { 0: countdown.toString() })}

)} {showResendLink && countdown === 0 && (

{localize('com_auth_email_verification_resend_prompt')}

)}
); const VerificationInProgress = () => (

{localize('com_auth_email_verification_in_progress')}

); return (
{verificationStatus ? : }
); } export default RequestPasswordReset;