diff --git a/renderer/app.js b/renderer/app.js index 5883d80..6d19903 100644 --- a/renderer/app.js +++ b/renderer/app.js @@ -68,6 +68,7 @@ let _historySortClicked = false; // Session-specific files for the "Files" panel (resets each session) let sessionFilesData = []; let _recentSeqCounter = 0; +let _recentDataVersion = 0; const recentSortState = { key: 'date', direction: 'desc' }; const selectedRecentIds = new Set(); // Maintained incrementally — avoids O(n) filter() scans every 250ms in the status bar. @@ -1464,6 +1465,7 @@ function deleteSelectedRecentFiles() { }); _sessionDoneCount = Math.max(0, _sessionDoneCount - removedDone); _sessionErrorCount = Math.max(0, _sessionErrorCount - removedErr); + _recentDataVersion++; selectedRecentIds.clear(); renderRecentUploadsPanel(); } @@ -1475,6 +1477,7 @@ function clearAllRecentFiles() { _sessionFileKeys.clear(); _sessionDoneCount = 0; _sessionErrorCount = 0; + _recentDataVersion++; selectedRecentIds.clear(); renderRecentUploadsPanel(); } @@ -2511,6 +2514,7 @@ function maybeAddSessionFile(job) { isError: false, order: _recentSeqCounter++ }); + _recentDataVersion++; _sessionDoneCount++; // Drop oldest entries past the cap to keep render cost bounded. // Without this, sessionFilesData grows unbounded across the session @@ -4175,7 +4179,7 @@ let _recentSortCache = { sig: '', result: [] }; function sortRecentFiles(data) { const { key, direction } = recentSortState; - const sig = `${key}|${direction}|${data.length}`; + const sig = `${key}|${direction}|${data.length}|${_recentDataVersion}`; if (_recentSortCache.sig === sig) return _recentSortCache.result; const sorted = data.slice();