import { Container, Stack, Title, Text, Button, Loader, Center } from '@pikku/mantine/core' import { useI18n } from "@/context/i18n-provider" import { useEffect, useState } from 'react' import { useLocation, useNavigate, useParams } from '@tanstack/react-router' import { verifyMagicLink } from '@/lib/auth' import { asI18n } from '@pikku/react' const MagicLinkPage: React.FunctionComponent = () => { const t = useI18n() const searchParams = useLocation({ select: (l) => new URLSearchParams(l.searchStr) }) const navigate = useNavigate() const { lang } = useParams({ strict: false }) as { lang: string } const [status, setStatus] = useState<'loading' | 'success' | 'error'>('loading') const [errorMessage, setErrorMessage] = useState('') useEffect(() => { const token = searchParams.get('token') const redirect = searchParams.get('redirect') || '/jobs/application' if (!token) { setStatus('error') setErrorMessage(t('magiclink.error.notoken')) return } const completeMagicLinkSignIn = async () => { try { await verifyMagicLink(token) setStatus('success') setTimeout(() => { navigate({ to: redirect }) }, 1000) } catch (error: any) { setStatus('error') setErrorMessage(error.message || t('magiclink.error.verificationfailed')) } } completeMagicLinkSignIn() }, [searchParams, navigate, t]) return ( {status === 'loading' && ( <>
{t('magiclink.loading.title')} )} {status === 'success' && ( <> {t('magiclink.success.title')} {t('magiclink.success.message')} )} {status === 'error' && ( <> {t('magiclink.error.title')} {t('magiclink.error.message')} {errorMessage && ( {asI18n(errorMessage)} )} )}
) } export default MagicLinkPage