fix(auditoria completa): bloqueos de Mi Dia, cobranza (saldos y fechas), captura (departamento y rol), contactos (privacidad), cotizador (QR) y validaciones de API

This commit is contained in:
2026-09-21 07:18:39 +00:00
parent 75956a709f
commit 5e9b2ac456
16 changed files with 259 additions and 71 deletions

View File

@@ -1,4 +1,4 @@
import { Fragment, useMemo, useState, useCallback } from 'react'
import { Fragment, useEffect, useMemo, useState, useCallback } from 'react'
import type { CampoDef, DatosCaptura } from '../services/captura'
// ─── Tipos ──────────────────────────────────────────────────────────
@@ -185,6 +185,14 @@ export function TablaCaptura({
const [dirty, setDirty] = useState<DirtyMap>({})
const [pagina, setPagina] = useState(0)
// Al cambiar de departamento o de desarrollo los campos son otros: los cambios
// pendientes de la vista anterior se descartan (antes se guardaban en el
// departamento equivocado) y la paginación vuelve al inicio.
useEffect(() => {
setDirty({})
setPagina(0)
}, [campos])
/** Obtener estatus de una unidad (campo estatus en dept VENTAS, siempre disponible) */
const estatusUnidad = useCallback(
(unidad: string): string => {
@@ -252,12 +260,20 @@ export function TablaCaptura({
[datos],
)
/** Enviar cambios al padre */
/**
* Enviar cambios al padre. NO se limpian aquí: el padre recarga los datos al
* guardar con éxito y el efecto de abajo limpia los pendientes. Si el guardado
* falla, lo capturado sigue en pantalla para reintentar.
*/
const handleSubmit = useCallback(() => {
onGuardar(dirty)
setDirty({})
}, [dirty, onGuardar])
// Los datos guardados llegaron (recarga tras guardar): ya no hay pendientes
useEffect(() => {
setDirty({})
}, [datos])
if (unidades.length === 0) {
return (
<p className="text-sm text-[#64748B] dark:text-[#94A3B8]">