import { useEffect, useState } from 'react'; import { API_URL } from '../config'; import { saveSession } from '../lib/session'; import { ROUTES } from '../lib/routes'; import MarketingHeader from './layout/MarketingHeader'; import { useLanguage } from '../i18n'; export default function VerifyEmailPage() { const { t } = useLanguage(); const [status, setStatus] = useState('verifying'); useEffect(() => { const params = new URLSearchParams(window.location.search); const token = params.get('token'); if (!token) { setStatus('no-token'); return; } fetch(`${API_URL}/owners/verify`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ token }), }) .then(async (res) => { if (!res.ok) { const err = await res.json().catch(() => ({})); throw new Error(err.detail || 'Verification failed'); } const data = await res.json(); const session = { owner: data.owner, token: data.token, expires_at: data.expires_at }; saveSession(session); setStatus('success'); }) .catch((err) => { console.error('Verify email error:', err); setStatus('error'); }); }, []); return (
{t('verifyEmail.successDesc')}
{t('verifyEmail.continueOnboarding')} > )} {status === 'error' && ( <>{t('verifyEmail.failedDesc')}
{t('verifyEmail.goToLogin')} > )} {status === 'no-token' && ( <>{t('verifyEmail.missingTokenDesc')}
{t('verifyEmail.goToLogin')} > )}