import { HTMLAttributes } from 'react'; import { z } from 'zod'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { useTranslation } from 'react-i18next'; import { cn } from '@/lib/utils'; import { Button } from '@/components/ui/button'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'; import { Input } from '@/components/ui/input'; import { PasswordInput } from '@/components/password-input'; import { useInitializeSystem } from '@/features/auth/data/initialization'; type InitializationFormProps = HTMLAttributes; // Create form schema factory to support i18n const createFormSchema = (t: (key: string) => string) => z.object({ ownerEmail: z .string() .min(1, { message: t('initialization.form.validation.ownerEmailRequired') }) .email({ message: t('initialization.form.validation.ownerEmailInvalid') }), ownerPassword: z .string() .min(1, { message: t('initialization.form.validation.ownerPasswordRequired'), }) .min(8, { message: t('initialization.form.validation.ownerPasswordMinLength'), }), ownerFirstName: z.string().min(1, { message: t('initialization.form.validation.ownerFirstNameRequired') }), ownerLastName: z.string().min(1, { message: t('initialization.form.validation.ownerLastNameRequired') }), brandName: z.string().min(1, { message: t('initialization.form.validation.brandNameRequired') }), }); export function InitializationForm({ className, ...props }: InitializationFormProps) { const { t } = useTranslation(); const initializeSystemMutation = useInitializeSystem(); const formSchema = createFormSchema(t); type FormData = z.infer; const form = useForm({ resolver: zodResolver(formSchema), defaultValues: { ownerEmail: '', ownerPassword: '', ownerFirstName: '', ownerLastName: '', brandName: '', }, }); function onSubmit(data: FormData) { const input = { ownerEmail: data.ownerEmail, ownerPassword: data.ownerPassword, ownerFirstName: data.ownerFirstName, ownerLastName: data.ownerLastName, brandName: data.brandName, }; initializeSystemMutation.mutate(input); } return (
( {t('initialization.form.ownerFirstName')} )} /> ( {t('initialization.form.ownerLastName')} )} /> ( {t('initialization.form.ownerEmail')} )} /> ( {t('initialization.form.ownerPassword')} )} /> ( {t('initialization.form.brandName')} )} /> ); }