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.
This commit is contained in:
2026-09-28 20:18:58 +00:00
parent 89429aee9b
commit a4358ada15
4 changed files with 9 additions and 4 deletions

View File

@@ -14,8 +14,9 @@ const money = (v: number) =>
'$' + (v ?? 0).toLocaleString('es-MX', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); '$' + (v ?? 0).toLocaleString('es-MX', { minimumFractionDigits: 2, maximumFractionDigits: 2 });
export const CortePrint: FC<{ corte: CashClosing | null; onClose: () => void }> = ({ corte, onClose }) => { 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(); const clinic = useClinicaPrint();
if (!corte) return null;
const fila = (label: string, valor: number) => ( const fila = (label: string, valor: number) => (
<tr> <tr>

View File

@@ -76,9 +76,10 @@ export const EstadoCuentaPrint: FC<EstadoCuentaPrintProps> = ({ isOpen, onClose,
return () => { alive = false; }; return () => { alive = false; };
}, [isOpen, paciente]); }, [isOpen, paciente]);
// El hook va antes de cualquier return condicional (reglas de React).
const clinic = useClinicaPrint();
if (!paciente) return null; if (!paciente) return null;
const clinic = useClinicaPrint();
const fechaEmision = new Date().toLocaleDateString('es-MX', { day: '2-digit', month: 'long', year: 'numeric' }); 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 totalVentas = ventas.reduce((a, v) => a + v.total, 0);
const totalPagado = ventas.reduce((a, v) => a + v.amount_paid, 0); const totalPagado = ventas.reduce((a, v) => a + v.amount_paid, 0);

View File

@@ -19,8 +19,10 @@ const money = (v: number) =>
export const ReciboPrint: FC<{ receipt: ReceiptData | null; onClose: () => void }> = ({ receipt, onClose }) => { 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(); const clinic = useClinicaPrint();
if (!receipt) return null;
// Recibo de recarga de saldo a favor (anticipo): mismo formato, sin el // Recibo de recarga de saldo a favor (anticipo): mismo formato, sin el
// desglose de adeudo y mostrando el saldo a favor resultante. // desglose de adeudo y mostrando el saldo a favor resultante.
const esDeposito = receipt.tipo === 'deposito'; const esDeposito = receipt.tipo === 'deposito';

View File

@@ -12,8 +12,9 @@ const money = (v: number) =>
export const ConteoPrint: FC<{ conteo: InventoryConteo | null; onClose: () => void }> = ({ conteo, onClose }) => { 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(); const clinic = useClinicaPrint();
if (!conteo) return null;
const lineas = conteo.lines || []; const lineas = conteo.lines || [];
return ( return (