fixed rebuild grid

This commit is contained in:
2026-07-17 09:30:55 +02:00
parent 1b5dd04740
commit 86b1c8420d
+26 -14
View File
@@ -391,24 +391,36 @@
} }
// ── Ripristina stato filtri dopo un re-render (checkbox + restrizione) ── // ── Ripristina stato filtri dopo un re-render (checkbox + restrizione) ──
let _restoring = false;
function restoreFilterState() { function restoreFilterState() {
if (!filtersActive) return; if (!filtersActive || _restoring) return;
injectCheckboxes(); _restoring = true; // evita loop con l'observer mentre iniettiamo/nascondiamo
applyVisibility(); // ri-applica sia filtri colonna sia restringi selezione try {
injectCheckboxes();
applyVisibility(); // ri-applica filtri colonna E restringi selezione
} finally {
// rilascia dopo il tick così le nostre mutazioni non ci ri-triggerano subito
setTimeout(() => {
_restoring = false;
}, 0);
}
} }
// ── Re-inietta dopo ogni re-render della griglia ── // ── Observer: qualunque cosa ricrei le righe (propagazione, save, ecc.)
// ripristina automaticamente checkbox + restrizione. Robusto perché
// non dipende da chi chiama renderVisibleRows. ──
function hookRerender() { function hookRerender() {
const orig = R().renderVisibleRows; const rowC = document.getElementById("gridRowContainer");
R().renderVisibleRows = function () { if (!rowC) return;
const ret = orig.apply(this, arguments);
// sincrono const obs = new MutationObserver(() => {
restoreFilterState(); if (!filtersActive || _restoring) return;
// e di nuovo dopo il tick, per coprire re-render dentro .then() async // debounce leggero: aspetta che il render finisca
setTimeout(restoreFilterState, 0); clearTimeout(hookRerender._t);
setTimeout(restoreFilterState, 50); hookRerender._t = setTimeout(restoreFilterState, 30);
return ret; });
};
obs.observe(rowC, { childList: true });
} }
function init() { function init() {