import { useEffect, useState } from 'react' import { Link, useNavigate, useSearch } from '@tanstack/react-router' import { MailCheck, MailWarning, Loader2 } from 'lucide-react' import { authClient } from '../../lib/auth-client' import { AuthShell } from './AuthShell' type SearchParams = { token?: string email?: string } type Status = 'idle' | 'verifying' | 'success' | 'error' export function VerifyEmailPage() { const { token, email } = useSearch({ strict: false }) as SearchParams const navigate = useNavigate() const [status, setStatus] = useState(token ? 'verifying' : 'idle') useEffect(() => { if (!token || status !== 'verifying') return let cancelled = false authClient .verifyEmail({ query: { token } }) .then(async ({ error }) => { if (cancelled) return if (error) { setStatus('error') return } await authClient.getSession() navigate({ to: '/' }) }) .catch(() => { if (!cancelled) setStatus('error') }) return () => { cancelled = true } }, [token, status, navigate]) const title = status === 'success' ? 'Email verificado' : status === 'error' ? 'Vínculo inválido' : 'Verificá tu email' return (
{status === 'verifying' ? ( ) : status === 'success' ? ( ) : ( )} {status === 'success' ? (

Tu cuenta quedó verificada. Te estamos llevando a Gruperly…

) : status === 'error' ? (

El vínculo de verificación no es válido o expiró.

) : (

Te enviamos un correo a {email} para confirmar tu cuenta.

)} {status === 'success' ? ( Ir a Gruperly ) : null} {status === 'error' ? ( Intentar iniciar sesión ) : null}
) }