From 4b2e7592ba2ed68321a1e8ca874f6a1d62f828f5 Mon Sep 17 00:00:00 2001 From: Valerii Kovalskii Date: Fri, 17 Apr 2026 11:00:38 +0300 Subject: [PATCH] fix: preserve collapsed group state across re-renders Save which groups are collapsed before render(), restore after. Prevents groups from expanding on background refresh/poll. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/frontend/app.js | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/frontend/app.js b/src/frontend/app.js index 7dc58a0..79cf103 100644 --- a/src/frontend/app.js +++ b/src/frontend/app.js @@ -960,8 +960,16 @@ function render() { var stats = document.getElementById('stats'); if (!content) return; - // Preserve scroll position across re-renders + // Preserve scroll + collapsed state across re-renders var scrollTop = content.scrollTop; + var collapsedGroups = new Set(); + content.querySelectorAll('.group.collapsed, .git-project-group.collapsed').forEach(function(g) { + var header = g.querySelector('.group-header, .git-project-header'); + if (header) { + var name = header.querySelector('.group-name, .git-project-name'); + if (name) collapsedGroups.add(name.textContent.trim()); + } + }); var sessions = filteredSessions; @@ -1052,7 +1060,18 @@ function render() { content.innerHTML += '
'; } - // Restore scroll position + // Restore scroll + collapsed state + if (collapsedGroups.size > 0) { + content.querySelectorAll('.group, .git-project-group').forEach(function(g) { + var header = g.querySelector('.group-header, .git-project-header'); + if (header) { + var name = header.querySelector('.group-name, .git-project-name'); + if (name && collapsedGroups.has(name.textContent.trim())) { + g.classList.add('collapsed'); + } + } + }); + } if (scrollTop) content.scrollTop = scrollTop; }