/** * Organization form management hook * Handles form state, validation, and submission * Separated from wizard logic for better SRP */ import { zodResolver } from '@hookform/resolvers/zod'; import { useCallback } from 'react'; import { SubmitHandler, useForm } from 'react-hook-form'; import { getOrganizationFormSchema } from '@/schemas/organization.ts'; import { OrganizationFormData } from '@/types.ts'; import { useTranslation } from '@/hooks/useI18n.tsx'; interface UseOrganizationFormProps { onSuccess: (data: OrganizationFormData) => void; } export const useOrganizationForm = ({ onSuccess }: UseOrganizationFormProps) => { const { t } = useTranslation(); const form = useForm({ resolver: zodResolver(getOrganizationFormSchema(t)), mode: 'onChange', defaultValues: { name: '', sector: '', description: '', legal_form: 'LLC', website: '', primary_contact: { name: '', role: '', email: '', phone: '' }, business_focus: [], industries: [], tags: [], needs: [], offers: [], logoUrl: '', company_size: 1, founding_year: new Date().getFullYear(), address: { street: '', city: 'Бугульма', state: 'Татарстан', zip: '', }, location: { lat: 54.53, lng: 52.79, }, }, }); const onSubmit: SubmitHandler = useCallback( (data) => { onSuccess(data); }, [onSuccess] ); const resetForm = useCallback(() => { form.reset(); }, [form]); const validateFields = useCallback( async (fields: (keyof OrganizationFormData | 'location.lat' | 'location.lng')[]) => { return await form.trigger(fields); }, [form] ); return { form, onSubmit, resetForm, validateFields, watch: form.watch, setValue: form.setValue, getValues: form.getValues, }; };