From a4358ada154a36682e4999da16d368a7bb2fb13b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Consultor=C3=ADa=20Alcaraz=20Salazar?= Date: Mon, 28 Sep 2026 20:18:58 +0000 Subject: [PATCH] Fix: crash (React #310) al abrir informacion de un paciente useClinicaPrint() quedaba despues de un return condicional en EstadoCuentaPrint, ReciboPrint, CortePrint y ConteoPrint (migracion de clinicSettings del punto 11). Al pasar de paciente null a uno real el numero de hooks cambiaba entre renders y React tumaba la pantalla con 'Minified React error #310'. El hook ahora va antes de cualquier return condicional en los 4 componentes. --- frontend/src/components/CortePrint.tsx | 3 ++- frontend/src/components/EstadoCuentaPrint.tsx | 3 ++- frontend/src/components/ReciboPrint.tsx | 4 +++- frontend/src/components/inventario/ConteoPrint.tsx | 3 ++- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/CortePrint.tsx b/frontend/src/components/CortePrint.tsx index d7c2c4e..85ae951 100644 --- a/frontend/src/components/CortePrint.tsx +++ b/frontend/src/components/CortePrint.tsx @@ -14,8 +14,9 @@ const money = (v: number) => '$' + (v ?? 0).toLocaleString('es-MX', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); export const CortePrint: FC<{ corte: CashClosing | null; onClose: () => void }> = ({ corte, onClose }) => { - if (!corte) return null; + // El hook va antes de cualquier return condicional (reglas de React). const clinic = useClinicaPrint(); + if (!corte) return null; const fila = (label: string, valor: number) => ( diff --git a/frontend/src/components/EstadoCuentaPrint.tsx b/frontend/src/components/EstadoCuentaPrint.tsx index 977ab4a..7349309 100644 --- a/frontend/src/components/EstadoCuentaPrint.tsx +++ b/frontend/src/components/EstadoCuentaPrint.tsx @@ -76,9 +76,10 @@ export const EstadoCuentaPrint: FC = ({ isOpen, onClose, return () => { alive = false; }; }, [isOpen, paciente]); + // El hook va antes de cualquier return condicional (reglas de React). + const clinic = useClinicaPrint(); if (!paciente) return null; - const clinic = useClinicaPrint(); const fechaEmision = new Date().toLocaleDateString('es-MX', { day: '2-digit', month: 'long', year: 'numeric' }); const totalVentas = ventas.reduce((a, v) => a + v.total, 0); const totalPagado = ventas.reduce((a, v) => a + v.amount_paid, 0); diff --git a/frontend/src/components/ReciboPrint.tsx b/frontend/src/components/ReciboPrint.tsx index 5ab93e5..80e72ef 100644 --- a/frontend/src/components/ReciboPrint.tsx +++ b/frontend/src/components/ReciboPrint.tsx @@ -19,8 +19,10 @@ const money = (v: number) => export const ReciboPrint: FC<{ receipt: ReceiptData | null; onClose: () => void }> = ({ receipt, onClose }) => { - if (!receipt) return null; + // El hook va antes de cualquier return condicional (reglas de React: + // mismo nĂºmero de hooks en todos los renders del componente). const clinic = useClinicaPrint(); + if (!receipt) return null; // Recibo de recarga de saldo a favor (anticipo): mismo formato, sin el // desglose de adeudo y mostrando el saldo a favor resultante. const esDeposito = receipt.tipo === 'deposito'; diff --git a/frontend/src/components/inventario/ConteoPrint.tsx b/frontend/src/components/inventario/ConteoPrint.tsx index 37659e0..1b15382 100644 --- a/frontend/src/components/inventario/ConteoPrint.tsx +++ b/frontend/src/components/inventario/ConteoPrint.tsx @@ -12,8 +12,9 @@ const money = (v: number) => export const ConteoPrint: FC<{ conteo: InventoryConteo | null; onClose: () => void }> = ({ conteo, onClose }) => { - if (!conteo) return null; + // El hook va antes de cualquier return condicional (reglas de React). const clinic = useClinicaPrint(); + if (!conteo) return null; const lineas = conteo.lines || []; return (