import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import * as z from 'zod'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Textarea } from '@/components/ui/textarea'; import { Label } from '@/components/ui/label'; import { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { SlugField } from '@/components/ui/slug-field'; import { Building2, Save, X } from 'lucide-react'; import { Combobox } from '@/components/ui/combobox'; import { useCompanyHeadquarters } from '@/hooks/useAutocompleteData'; import { useUserRole } from '@/hooks/useUserRole'; import { EntityMultiImageUploader, ImageAssignments } from '@/components/upload/EntityMultiImageUploader'; const manufacturerSchema = z.object({ name: z.string().min(1, 'Name is required'), slug: z.string().min(1, 'Slug is required'), description: z.string().optional(), person_type: z.enum(['company', 'individual', 'firm', 'organization']), website_url: z.string().url().optional().or(z.literal('')), founded_year: z.string() .optional() .transform(val => val === '' || val === undefined ? undefined : Number(val)) .refine(val => val === undefined || (!isNaN(val) && val >= 1800 && val <= new Date().getFullYear()), { message: "Founded year must be between 1800 and current year" }), headquarters_location: z.string().optional(), images: z.object({ uploaded: z.array(z.object({ url: z.string(), cloudflare_id: z.string().optional(), file: z.any().optional(), isLocal: z.boolean().optional(), caption: z.string().optional() })), banner_assignment: z.number().nullable().optional(), card_assignment: z.number().nullable().optional() }).optional() }); type ManufacturerFormData = z.infer; interface ManufacturerFormProps { onSubmit: (data: ManufacturerFormData) => void; onCancel: () => void; initialData?: Partial; } export function ManufacturerForm({ onSubmit, onCancel, initialData }: ManufacturerFormProps) { const { isModerator } = useUserRole(); const { headquarters } = useCompanyHeadquarters(); const { register, handleSubmit, setValue, watch, formState: { errors } } = useForm({ resolver: zodResolver(manufacturerSchema), defaultValues: { name: initialData?.name || '', slug: initialData?.slug || '', description: initialData?.description || '', person_type: initialData?.person_type || 'company', website_url: initialData?.website_url || '', founded_year: initialData?.founded_year || undefined, headquarters_location: initialData?.headquarters_location || '', images: initialData?.images || { uploaded: [] } } }); return ( {initialData ? 'Edit Manufacturer' : 'Create New Manufacturer'}
{/* Basic Information */}
{errors.name && (

{errors.name.message}

)}
setValue('slug', slug)} isModerator={isModerator()} />
{/* Description */}