@@ -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