import { Button, Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, Tabs, TabsContent, TabsList, TabsTrigger, } from "@repo/shadcn-ui/components"; import { X } from "lucide-react"; import { FieldErrors, FormProvider } from "react-hook-form"; import { CustomerAdditionalConfigFields } from "../../components/editor/customer-additional-config-fields"; import { CustomerAddressFields } from "../../components/editor/customer-address-fields"; import { CustomerBasicInfoFields } from "../../components/editor/customer-basic-info-fields"; import { useNavigate } from "react-router-dom"; import { formHasAnyDirty, pickFormDirtyValues } from "@erp/core/client"; import { UnsavedChangesProvider, useHookForm } from "@erp/core/hooks"; import { showErrorToast, showSuccessToast, showWarningToast } from "@repo/rdx-ui/helpers"; import { CustomerEditorSkeleton } from "../../components"; import { useCustomerQuery, useUpdateCustomer } from "../../hooks"; import { useTranslation } from "../../i18n"; import { CustomerFormData, CustomerFormSchema, defaultCustomerFormData } from "../../schemas"; interface CustomerEditModalProps { customerId: string; open: boolean; onOpenChange: (open: boolean) => void; } export function CustomerEditModal({ customerId, open, onOpenChange }: CustomerEditModalProps) { const { t } = useTranslation(); const navigate = useNavigate(); // 1) Estado de carga del cliente (query) const { data: customerData, isLoading: isLoadingCustomer, isError: isLoadError, error: loadError, } = useCustomerQuery(customerId, { enabled: !!customerId }); // 2) Estado de actualizaci贸n (mutaci贸n) const { mutate, isPending: isUpdating, isError: isUpdateError, error: updateError, } = useUpdateCustomer(); // 3) Form hook const form = useHookForm({ resolverSchema: CustomerFormSchema, initialValues: customerData ?? defaultCustomerFormData, disabled: isUpdating, }); // 4) Submit con navegaci贸n condicionada por 茅xito const handleSubmit = (formData: CustomerFormData) => { const { dirtyFields } = form.formState; if (!formHasAnyDirty(dirtyFields)) { showWarningToast("No hay cambios para guardar"); return; } const patchData = pickFormDirtyValues(formData, dirtyFields); mutate( { id: customerId!, data: patchData }, { onSuccess(data) { showSuccessToast(t("pages.update.successTitle"), t("pages.update.successMsg")); // 馃敼 limpiar el form e isDirty pasa a false form.reset(data); }, onError(error) { showErrorToast(t("pages.update.errorTitle"), error.message); }, } ); }; const handleReset = () => form.reset(customerData ?? defaultCustomerFormData); const handleBack = () => { navigate(-1); }; const handleError = (errors: FieldErrors) => { console.error("Errores en el formulario:", errors); // Aqu铆 puedes manejar los errores, por ejemplo, mostrar un mensaje al usuario }; if (isLoadingCustomer || isLoadError) { return ; } return (
Editar Cliente Modifica la informaci贸n del cliente
Informaci贸n B谩sica Direcci贸n Contacto Preferencias
); }