import { SpainTaxCatalogProvider } from '@erp/core'; import { useUrlParamId } from "@erp/core/hooks"; import { ErrorAlert } from "@erp/customers/components"; import { AppContent, BackHistoryButton } from "@repo/rdx-ui/components"; import { useMemo } from 'react'; import { CustomerInvoiceEditorSkeleton } from "../../components"; import { InvoiceProvider } from '../../context'; import { useInvoiceQuery } from "../../hooks"; import { useTranslation } from "../../i18n"; import { InvoiceUpdateComp } from './invoice-update-comp'; export const InvoiceUpdatePage = () => { const invoice_id = useUrlParamId(); const { t } = useTranslation(); const taxCatalog = useMemo(() => SpainTaxCatalogProvider(), []); const invoiceQuery = useInvoiceQuery(invoice_id, { enabled: !!invoice_id }); const { data: invoiceData, isLoading, isError, error, } = invoiceQuery; console.log("InvoiceUpdatePage"); if (isLoading) { return ; } if (isError || !invoiceData) { return ( ); } // Monta el contexto aquí, así todo lo que esté dentro puede usar hooks return ( ); }; /* const invoiceId = useUrlParamId(); const { t } = useTranslation(); const navigate = useNavigate(); const taxCatalog = useMemo(() => SpainTaxCatalogProvider(), []) // 1) Estado de carga de la factura (query) const { data: invoiceData, isLoading: isLoadingInvoice, isError: isLoadError, error: loadError, } = useInvoiceQuery(invoiceId, { enabled: !!invoiceId }); // 2) Estado de actualización (mutación) const { mutate, isPending: isUpdating, isError: isUpdateError, error: updateError, } = useUpdateCustomerInvoice(); const context = useInvoiceContext(); // 3) Form hook const form = useHookForm({ resolverSchema: InvoiceFormSchema, defaultValues: defaultCustomerInvoiceFormData, values: invoiceData ? invoiceDtoToFormAdapter.fromDto(invoiceData, taxCatalog) : undefined, disabled: isUpdating, }); // 4) Activa recálculo automático de los totales de la factura cuando hay algún cambio en importes useInvoiceAutoRecalc(form, { taxCatalog, currency_code: invoiceData?.currency_code || 'EUR' }); const handleSubmit = (formData: InvoiceFormData) => { const { dirtyFields } = form.formState; if (!formHasAnyDirty(dirtyFields)) { showWarningToast("No hay cambios para guardar"); return; } const patchData = pickFormDirtyValues(formData, dirtyFields); console.log(patchData); mutate( { id: invoiceId!, data: patchData }, { onSuccess(data) { showSuccessToast(t("pages.update.successTitle"), t("pages.update.successMsg")); // 🔹 limpiar el form e isDirty pasa a false form.reset(data as unknown as InvoiceFormData); }, onError(error) { showErrorToast(t("pages.update.errorTitle"), error.message); }, } ); }; if (isLoadingInvoice) { return ; } if (isLoadError) { return ( <>
); } if (!invoiceData) return ( <> ); return ( {t("pages.edit.title")} {invoiceData.invoice_number} } description={t("pages.edit.description")} icon={} rightSlot={ } /> { isUpdateError && ( ) } ); }; */