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) ──
let _restoring = false;
function restoreFilterState() {
if (!filtersActive) return;
injectCheckboxes();
applyVisibility(); // ri-applica sia filtri colonna sia restringi selezione
if (!filtersActive || _restoring) return;
_restoring = true; // evita loop con l'observer mentre iniettiamo/nascondiamo
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() {
const orig = R().renderVisibleRows;
R().renderVisibleRows = function () {
const ret = orig.apply(this, arguments);
// sincrono
restoreFilterState();
// e di nuovo dopo il tick, per coprire re-render dentro .then() async
setTimeout(restoreFilterState, 0);
setTimeout(restoreFilterState, 50);
return ret;
};
const rowC = document.getElementById("gridRowContainer");
if (!rowC) return;
const obs = new MutationObserver(() => {
if (!filtersActive || _restoring) return;
// debounce leggero: aspetta che il render finisca
clearTimeout(hookRerender._t);
hookRerender._t = setTimeout(restoreFilterState, 30);
});
obs.observe(rowC, { childList: true });
}
function init() {