import { useState } from 'react'; import { useForm, Controller } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { useNavigate } from '@tanstack/react-router'; import { useTranslation } from 'react-i18next'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { setupFormSchema, type SetupFormData } from '@/lib/schemas/auth'; import { FormErrorBanner } from '@/components/ui/FormErrorBanner'; import { FieldError } from '@/components/ui/FieldError'; import { useSetup } from '@/api/useSetup'; import { ProblemDetailsError, NetworkError } from '@/lib/api-client'; interface FormError { message: string; } export function SetupPage() { const { t } = useTranslation(); const navigate = useNavigate(); const [serverError, setServerError] = useState(null); const [successMessage, setSuccessMessage] = useState(false); const setupMutation = useSetup(); const { register, handleSubmit, formState: { errors, isSubmitting }, control } = useForm({ resolver: zodResolver(setupFormSchema), mode: 'onBlur', defaultValues: { name: '', email: '', password: '', confirmPassword: '', language: 'nl' } }); const onSubmit = handleSubmit(async (values) => { setServerError(null); try { await setupMutation.mutateAsync(values); setSuccessMessage(true); setTimeout(() => { navigate({ to: '/login' }); }, 2000); } catch (err) { if (err instanceof ProblemDetailsError) { setServerError({ message: err.problem.detail || err.message || t('errors.generic') }); } else if (err instanceof NetworkError) { setServerError({ message: t('errors.network') }); } else { setServerError({ message: t('errors.generic') }); } } }); if (successMessage) { return (
✓ {t('setup.successMessage')}

{t('login.subtitle')}

); } return (
{t('setup.title')} {t('login.subtitle')}
setServerError(null)} />
{errors.name && }
{errors.email && }
{errors.password && }
{errors.confirmPassword && }
( )} />
); }