import { useForm, useWatch } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { useTranslation } from 'react-i18next'; import { Plus, Trash2 } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { FieldError } from '@/components/ui/FieldError'; import { offeringFormSchema, type OfferingFormData } from '../schemas/offering'; import type { OfferingAdminDto } from '../services/types'; interface OfferingFormProps { initialValues?: OfferingAdminDto; onSubmit: (values: OfferingFormData) => void; isSubmitting: boolean; } export function OfferingForm({ initialValues, onSubmit, isSubmitting }: OfferingFormProps) { const { t } = useTranslation(); const { register, control, handleSubmit, setValue, formState: { errors }, } = useForm({ resolver: zodResolver(offeringFormSchema), mode: 'onTouched', defaultValues: initialValues ?? { title: '', description: '', price: '', priceNote: '', features: [''], ctaLabel: '', featured: false, }, }); // useFieldArray requires object-shaped array items — features is a plain string[], // so add/remove are handled directly via setValue instead. const features = useWatch({ control, name: 'features' }); function addFeature() { setValue('features', [...features, ''], { shouldValidate: true }); } function removeFeature(index: number) { setValue('features', features.filter((_, i) => i !== index), { shouldValidate: true }); } return (
{errors.title && }