fix: sort change fetches observations for all visible groups

When switching to a non-Observer sort, batch-fetches observations for
all visible multi-observation groups that haven't been expanded yet.
Header rows update immediately without needing manual expand.
This commit is contained in:
you
2026-03-21 23:52:20 +00:00
parent 39894e9555
commit 352e75ff3a
2 changed files with 17 additions and 4 deletions
+1 -1
View File
@@ -84,7 +84,7 @@
<script src="hop-resolver.js?v=1774126708"></script>
<script src="app.js?v=1774126708"></script>
<script src="home.js?v=1774042199"></script>
<script src="packets.js?v=1774136941"></script>
<script src="packets.js?v=1774137140"></script>
<script src="map.js?v=1774126708" onerror="console.error('Failed to load:', this.src)"></script>
<script src="channels.js?v=1774331200" onerror="console.error('Failed to load:', this.src)"></script>
<script src="nodes.js?v=1774126708" onerror="console.error('Failed to load:', this.src)"></script>
+16 -3
View File
@@ -472,12 +472,25 @@
// Observation sort dropdown
const obsSortSel = document.getElementById('fObsSort');
obsSortSel.value = obsSortMode;
obsSortSel.addEventListener('change', function () {
obsSortSel.addEventListener('change', async function () {
obsSortMode = this.value;
localStorage.setItem('meshcore-obs-sort', obsSortMode);
// Re-sort all expanded groups
// For non-observer sorts, fetch children for visible groups that don't have them yet
if (obsSortMode !== SORT_OBSERVER && groupByHash) {
const toFetch = packets.filter(p => p.hash && !p._children && (p.observation_count || 0) > 1);
await Promise.all(toFetch.map(async (p) => {
try {
const data = await api(`/packets/${p.hash}`);
if (data?.packet && data.observations) {
p._children = data.observations.map(o => ({...data.packet, ...o, _isObservation: true}));
p._fetchedData = data;
}
} catch {}
}));
}
// Re-sort all groups with children
for (const p of packets) {
if (expandedHashes.has(p.hash) && p._children) sortGroupChildren(p);
if (p._children) sortGroupChildren(p);
}
renderTableRows();
});