import { zodResolver } from "@hookform/resolvers/zod"; import { FieldErrors, useForm } from "react-hook-form"; import { TaxesMultiSelectField } from "@erp/core/components"; import { SelectField, TextAreaField, TextField } from "@repo/rdx-ui/components"; import { Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Form, FormControl, FormField, FormItem, FormLabel, FormMessage, RadioGroup, RadioGroupItem, } from "@repo/shadcn-ui/components"; import { useUnsavedChangesNotifier } from "@erp/core/hooks"; import { COUNTRY_OPTIONS, LANGUAGE_OPTIONS } from "../../constants/customer.constants"; import { useTranslation } from "../../i18n"; import { CustomerData, CustomerUpdateData, CustomerUpdateSchema } from "../../schemas"; interface CustomerFormProps { formId: string; data?: CustomerData; isPending?: boolean; /** * Callback function to handle form submission. * @param data - The customer data submitted by the form. */ onSubmit?: (data: CustomerUpdateData) => void; } export const CustomerEditForm = ({ formId, data, onSubmit, isPending }: CustomerFormProps) => { const { t } = useTranslation(); const form = useForm({ resolver: zodResolver(CustomerUpdateSchema), defaultValues: data, disabled: isPending, }); useUnsavedChangesNotifier({ isDirty: form.formState.isDirty, }); const handleSubmit = (data: CustomerUpdateData) => { console.log("Datos del formulario:", data); onSubmit?.(data); }; const handleError = (errors: FieldErrors) => { console.error("Errores en el formulario:", errors); // Aquí puedes manejar los errores, por ejemplo, mostrar un mensaje al usuario }; const handleCancel = () => { form.reset(data); }; const { formState: { isDirty, dirtyFields }, } = form; return (

¿Formulario modificado? {isDirty ? "Sí" : "No"}

Campos modificados:{" "} {Object.keys(dirtyFields).length > 0 ? Object.keys(dirtyFields).join(", ") : "Ninguno"}

{" "}
{/* Información básica */} {t("form_groups.basic_info.title")} {t("form_groups.basic_info.description")} ( {t("form_fields.customer_type.label")} field.onChange(value === "1")} defaultValue={field.value ? "1" : "0"} className='flex gap-6' > {t("form_fields.customer_type.company")} {t("form_fields.customer_type.individual")} )} /> {/* Dirección */} {t("form_groups.address.title")} {t("form_groups.address.description")} {/* Contacto */} {t("form_groups.contact_info.title")} {t("form_groups.contact_info.description")} {/* Configuraciones Adicionales */} {t("form_groups.additional_config.title")} {t("form_groups.additional_config.description")}
); };