Skip to content

Commit 1663b56

Browse files
committed
[TASK] reduce overview filter persistence requests
Related: https://projekte.in2code.de/issues/80008
1 parent 6eb5c4d commit 1663b56

1 file changed

Lines changed: 35 additions & 6 deletions

File tree

Resources/Public/JavaScript/BackendModule.js

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ class In2publishCoreModule {
2626
static addedFilter = false;
2727
static deletedFilter = false;
2828
static movedFilter = false;
29+
static overviewFilterPersistTimeout = null;
30+
static overviewFilterPersistAbortController = null;
2931

3032
static initialize() {
3133
this.toggleDirtyPropertiesListContainerListener();
@@ -58,7 +60,7 @@ class In2publishCoreModule {
5860

5961
stateFilter.addEventListener('change', () => {
6062
In2publishCoreModule.setFilterForPageView();
61-
In2publishCoreModule.persistOverviewFilters();
63+
In2publishCoreModule.scheduleOverviewFilterPersistence({ immediate: true });
6264
In2publishCoreModule.syncOverviewFilterArguments();
6365
})
6466
}
@@ -359,7 +361,7 @@ class In2publishCoreModule {
359361

360362
languageFilter.addEventListener('change', () => {
361363
this.filterItemsByLanguage(languageFilter.value);
362-
this.persistOverviewFilters();
364+
this.scheduleOverviewFilterPersistence({ immediate: true });
363365
this.syncOverviewFilterArguments();
364366
})
365367
}
@@ -405,7 +407,7 @@ class In2publishCoreModule {
405407
item.classList.remove('d-none');
406408
}
407409
});
408-
In2publishCoreModule.persistOverviewFilters();
410+
In2publishCoreModule.scheduleOverviewFilterPersistence();
409411
In2publishCoreModule.syncOverviewFilterArguments();
410412
}, 250).bindTo(freeTextForm);
411413

@@ -416,7 +418,7 @@ class In2publishCoreModule {
416418
(Array.from(elements)).forEach(function (item) {
417419
item.classList.remove('d-none');
418420
});
419-
In2publishCoreModule.persistOverviewFilters();
421+
In2publishCoreModule.scheduleOverviewFilterPersistence({ immediate: true });
420422
In2publishCoreModule.syncOverviewFilterArguments();
421423
});
422424
}
@@ -459,7 +461,24 @@ class In2publishCoreModule {
459461
}
460462
}
461463

462-
static persistOverviewFilters() {
464+
static scheduleOverviewFilterPersistence({ immediate = false } = {}) {
465+
if (this.overviewFilterPersistTimeout) {
466+
window.clearTimeout(this.overviewFilterPersistTimeout);
467+
this.overviewFilterPersistTimeout = null;
468+
}
469+
470+
if (immediate) {
471+
this.persistOverviewFilters();
472+
return;
473+
}
474+
475+
this.overviewFilterPersistTimeout = window.setTimeout(() => {
476+
this.persistOverviewFilters();
477+
this.overviewFilterPersistTimeout = null;
478+
}, 500);
479+
}
480+
481+
static persistOverviewFilters({ keepalive = false } = {}) {
463482
const filterContainer = document.querySelector('.in2publishjs__publishfilter');
464483
const persistUri = filterContainer?.dataset.persistUri;
465484
if (!persistUri) {
@@ -474,9 +493,19 @@ class In2publishCoreModule {
474493
url.searchParams.set('language', overviewFilters.language);
475494
url.searchParams.set('pageRecursionLimit', overviewFilters.pageRecursionLimit);
476495

496+
if (this.overviewFilterPersistAbortController && !keepalive) {
497+
this.overviewFilterPersistAbortController.abort();
498+
}
499+
500+
this.overviewFilterPersistAbortController = new AbortController();
477501
fetch(url.toString(), {
478502
credentials: 'same-origin',
479-
keepalive: true,
503+
keepalive,
504+
signal: this.overviewFilterPersistAbortController.signal,
505+
}).catch((error) => {
506+
if (error.name !== 'AbortError') {
507+
throw error;
508+
}
480509
});
481510
}
482511

0 commit comments

Comments
 (0)