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; } else { return prevCountdown - 1; } }); }, 1000); }, [navigate]); const verifyEmailMutation = useVerifyEmailMutation({ onSuccess: () => { setHeaderText(localize('com_auth_email_verification_success') + ' ๐ŸŽ‰'); setVerificationStatus(true); countdownRedirect(); }, onError: () => { setShowResendLink(true); setVerificationStatus(true); setHeaderText(localize('com_auth_email_verification_failed') + ' ๐Ÿ˜ข'); setCountdown(0); }, }); const resendEmailMutation = useResendVerificationEmail({ onSuccess: () => { setHeaderText(localize('com_auth_email_resent_success') + ' ๐Ÿ“ง'); countdownRedirect(); }, onError: () => { setHeaderText(localize('com_auth_email_resent_failed') + ' ๐Ÿ˜ข'); countdownRedirect(); }, onMutate: () => setShowResendLink(false), }); const handleResendEmail = () => { resendEmailMutation.mutate({ email }); }; useEffect(() => { if (verifyEmailMutation.isLoading || verificationStatus) { return; } if (token && email) { verifyEmailMutation.mutate({ email, token, }); return; } else if (email) { setHeaderText(localize('com_auth_email_verification_failed_token_missing') + ' ๐Ÿ˜ข'); } else { setHeaderText(localize('com_auth_email_verification_invalid') + ' ๐Ÿคจ'); } setShowResendLink(true); setVerificationStatus(true); setCountdown(0); }, [localize, token, email, verificationStatus, verifyEmailMutation]); const VerificationSuccess = () => (

{headerText}

{countdown > 0 && (

{localize('com_auth_email_verification_redirecting', 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;