import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { z } from 'zod'; import { Button } from '@components/atoms/Button'; import { FormField } from '@components/molecules/FormField'; import type { PartnerContact, CreatePartnerContactDto, UpdatePartnerContactDto } from '../types'; const contactSchema = z.object({ fullName: z.string().min(2, 'Minimo 2 caracteres').max(200), position: z.string().max(100).optional(), department: z.string().max(100).optional(), email: z.string().email('Email invalido').optional().or(z.literal('')), phone: z.string().max(30).optional(), mobile: z.string().max(30).optional(), extension: z.string().max(30).optional(), isPrimary: z.boolean(), isBillingContact: z.boolean(), isShippingContact: z.boolean(), receivesNotifications: z.boolean(), notes: z.string().optional(), }); type FormData = z.infer; interface ContactFormProps { contact?: PartnerContact; onSubmit: (data: CreatePartnerContactDto | UpdatePartnerContactDto) => Promise; onCancel: () => void; isLoading?: boolean; } export function ContactForm({ contact, onSubmit, onCancel, isLoading }: ContactFormProps) { const isEditing = !!contact; const { register, handleSubmit, formState: { errors }, } = useForm({ resolver: zodResolver(contactSchema), defaultValues: contact ? { fullName: contact.fullName, position: contact.position || '', department: contact.department || '', email: contact.email || '', phone: contact.phone || '', mobile: contact.mobile || '', extension: contact.extension || '', isPrimary: contact.isPrimary, isBillingContact: contact.isBillingContact, isShippingContact: contact.isShippingContact, receivesNotifications: contact.receivesNotifications, notes: contact.notes || '', } : { fullName: '', position: '', department: '', email: '', phone: '', mobile: '', extension: '', isPrimary: false, isBillingContact: false, isShippingContact: false, receivesNotifications: true, notes: '', }, }); const handleFormSubmit = async (data: FormData) => { const cleanData: CreatePartnerContactDto | UpdatePartnerContactDto = { fullName: data.fullName, isPrimary: data.isPrimary, isBillingContact: data.isBillingContact, isShippingContact: data.isShippingContact, receivesNotifications: data.receivesNotifications, ...(data.position && { position: data.position }), ...(data.department && { department: data.department }), ...(data.email && { email: data.email }), ...(data.phone && { phone: data.phone }), ...(data.mobile && { mobile: data.mobile }), ...(data.extension && { extension: data.extension }), ...(data.notes && { notes: data.notes }), }; await onSubmit(cleanData); }; return (
{/* Basic Info */}

Informacion basica

{/* Contact Info */}

Informacion de contacto

{/* Roles */}

Roles del contacto

{/* Notes */}

Notas