Skip to content

Commit bf35f6c

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 2c44436 commit bf35f6c

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");
@@ -1694,6 +1697,11 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) {
16941697
* @param {boolean} force
16951698
*/
16961699
async function renderCurrentDir(force) {
1700+
_rndrAbortCtrl?.abort();
1701+
const rndrAbortCtrl = new AbortController();
1702+
const abortSignal = rndrAbortCtrl.signal;
1703+
_rndrAbortCtrl = rndrAbortCtrl;
1704+
16971705
const { url, name } = navStack.get(-1) ?? {};
16981706

16991707
if (IS_FOLDER_MODE) $openFolder.disabled = (url || "/") === "/";
@@ -1754,6 +1762,8 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) {
17541762
dir.list = list;
17551763
}
17561764

1765+
if (_rndrAbortCtrl === rndrAbortCtrl) _rndrAbortCtrl = null;
1766+
17571767
const $list = helpers.parseHTML(
17581768
mustache.render(_list, {
17591769
msg: errMsg ?? (!list?.length && strings["empty folder message"]),

0 commit comments

Comments
 (0)