Skip to content

Commit 6312dde

Browse files
committed
fix(file-browser): Abort pending directory rendering tasks on path change or page hide
Introduce `AbortController` tracking to cancel pending directory listing render tasks when navigating quickly or hiding the page. Add render abort controller logic (`src/pages/fileBrowser/fileBrowser.js`): - Instantiate `AbortController` instance inside `renderCurrentDir` - Abort existing controller prior to running new render sequence - Validate `abortSignal` before committing directory list DOM updates - Call `abort` on active render controller when `$page.onhide` fires (AI generated commit message)
1 parent c331267 commit 6312dde

1 file changed

Lines changed: 10 additions & 0 deletions

File tree

‎src/pages/fileBrowser/fileBrowser.js‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,8 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) {
168168
list: [],
169169
scroll: 0,
170170
};
171+
/** @type {AbortController | null} */
172+
let _rndrAbortCtrl;
171173
/**
172174
* @type {HTMLButtonElement}
173175
*/
@@ -629,6 +631,7 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) {
629631
};
630632

631633
$page.onhide = function () {
634+
_rndrAbortCtrl?.abort();
632635
hideSearchBar();
633636
actionStack.clearFromMark();
634637
actionStack.remove("filebrowser");
@@ -1686,6 +1689,11 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) {
16861689
* @param {boolean} force
16871690
*/
16881691
async function renderCurrentDir(force) {
1692+
_rndrAbortCtrl?.abort();
1693+
const rndrAbortCtrl = new AbortController();
1694+
const abortSignal = rndrAbortCtrl.signal;
1695+
_rndrAbortCtrl = rndrAbortCtrl;
1696+
16891697
const { url, name } = navStack.get(-1) ?? {};
16901698

16911699
if (IS_FOLDER_MODE) $openFolder.disabled = (url || "/") === "/";
@@ -1746,6 +1754,8 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) {
17461754
dir.list = list;
17471755
}
17481756

1757+
if (_rndrAbortCtrl === rndrAbortCtrl) _rndrAbortCtrl = null;
1758+
17491759
const $list = helpers.parseHTML(
17501760
mustache.render(_list, {
17511761
msg: errMsg ?? (!list?.length && strings["empty folder message"]),

0 commit comments

Comments
 (0)