diff --git a/views/tramites.html b/views/tramites.html index 38facee..8ec25f0 100644 --- a/views/tramites.html +++ b/views/tramites.html @@ -372,49 +372,64 @@ function checkDeepLink(){ function renderAll(){['adm','corp','mig','lit'].forEach(renderPanel);} -function renderPanel(dept){ - const panel=document.getElementById('panel-'+dept); - const rows=data[dept]; - const statuses=STATUS_MAP[dept]; - const search=(panel.querySelector('.search-input')||{value:''}).value.toLowerCase(); - const fStatus=(panel.querySelector('.f-status')||{value:''}).value; - const fAbog=(panel.querySelector('.f-abog')||{value:''}).value; - const fEsfera=(panel.querySelector('.f-esfera')||{value:''}).value; +// Estado de filtros por depto (persiste entre re-renders — no vive en el DOM, +// para que actualizar el
no destruya el input de búsqueda). +const filterState = { + adm: { search:'', status:'', abog:'', esfera:'' }, + corp: { search:'', status:'', abog:'', esfera:'' }, + mig: { search:'', status:'', abog:'', esfera:'' }, + lit: { search:'', status:'', abog:'', esfera:'' }, +}; - let filtered=rows.filter(r=>{ - const txt=((r.nombre||r.tipoTramite||r.tipoProceso||'')+(r.cliente||'')+(r.abogado||'')+(r.id||'')).toLowerCase(); - if(search && !txt.includes(search)) return false; - if(fStatus && r.estatus!==fStatus) return false; - if(fAbog && r.abogado!==fAbog) return false; - if(dept==='lit' && fEsfera && r.esfera!==fEsfera) return false; +function computeFiltered(dept){ + const rows = data[dept]; + const f = filterState[dept]; + const q = f.search.toLowerCase(); + const filtered = rows.filter(r => { + const txt = ((r.nombre||r.tipoTramite||r.tipoProceso||'')+(r.cliente||'')+(r.abogado||'')+(r.id||'')).toLowerCase(); + if (q && !txt.includes(q)) return false; + if (f.status && r.estatus !== f.status) return false; + if (f.abog && r.abogado !== f.abog) return false; + if (dept === 'lit' && f.esfera && r.esfera !== f.esfera) return false; return true; }); - - const total=rows.length; - const activos=rows.filter(r=>r.estatus!=='Culminado'&&r.estatus!=='Facturado').length; - const culminados=rows.filter(r=>r.estatus==='Culminado'||r.estatus==='Facturado').length; - window.__tramFiltered = window.__tramFiltered || {}; window.__tramFiltered[dept] = filtered; + return filtered; +} + +// Reconstruye toda la pestaña. Se usa solo cuando cambia el conjunto de datos +// (carga inicial, guardar/borrar, cambio de tab). NO se llama al teclear. +function renderPanel(dept){ + const panel = document.getElementById('panel-'+dept); + const rows = data[dept]; + const statuses = STATUS_MAP[dept]; + const f = filterState[dept]; + + const total = rows.length; + const activos = rows.filter(r=>r.estatus!=='Culminado'&&r.estatus!=='Facturado').length; + const culminados = rows.filter(r=>r.estatus==='Culminado'||r.estatus==='Facturado').length; + const filtered = computeFiltered(dept); + panel.innerHTML=` -