import { useForm } from 'react-hook-form' import { zodResolver } from '@hookform/resolvers/zod' import { z } from 'zod' import { AccountCreateSchema } from '@lunarfront/shared/schemas' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Textarea } from '@/components/ui/textarea' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import { Separator } from '@/components/ui/separator' import type { Account } from '@/types/account' interface AccountFormProps { defaultValues?: Partial onSubmit: (data: Record) => void loading?: boolean includeFirstMember?: boolean } export function AccountForm({ defaultValues, onSubmit, loading, includeFirstMember }: AccountFormProps) { const optionalNameSchema = AccountCreateSchema.extend({ name: z.string().max(255).optional() }) const schema = includeFirstMember ? optionalNameSchema : AccountCreateSchema const { register, handleSubmit, setValue, watch, formState: { errors }, } = useForm({ resolver: zodResolver(schema), defaultValues: { name: defaultValues?.name ?? (includeFirstMember ? undefined : ''), email: defaultValues?.email ?? undefined, phone: defaultValues?.phone ?? undefined, billingMode: defaultValues?.billingMode ?? 'consolidated', notes: defaultValues?.notes ?? undefined, address: defaultValues?.address ?? undefined, }, }) const billingMode = watch('billingMode') function handleFormSubmit(accountData: Record) { if (includeFirstMember) { // Grab member fields from the native form const form = document.getElementById('account-form') as HTMLFormElement const formData = new FormData(form) onSubmit({ ...accountData, memberFirstName: formData.get('memberFirstName') || undefined, memberLastName: formData.get('memberLastName') || undefined, memberEmail: formData.get('memberEmail') || undefined, memberPhone: formData.get('memberPhone') || undefined, memberDateOfBirth: formData.get('memberDateOfBirth') || undefined, memberIsMinor: formData.get('memberIsMinor') === 'on' || undefined, }) } else { onSubmit(accountData) } } return (
{errors.name && !includeFirstMember &&

{String(errors.name.message)}

}