@@ -25,6 +25,8 @@ export const SEARCH_CANCEL_API: any = {
2525 rawData : {
2626 search : null ,
2727 count : null ,
28+ /** Request-parameter / display_rp fetches — must not share token with `search` or URL init cancels */
29+ requestParams : null ,
2830 } ,
2931} ;
3032
@@ -512,7 +514,7 @@ const search = {
512514 geneExpressionMatrix : {
513515 // get request parameters from previous search
514516 getRequestParams : ( form , detailedRP = false ) =>
515- new Promise ( ( resolve ) => {
517+ new Promise ( ( resolve , reject ) => {
516518 // populate request params
517519 const params = DEFAULT_PARAMETERS ( 'data' , 'expr_calls' ) ;
518520 params . append ( 'get_results' , '0' ) ;
@@ -537,7 +539,12 @@ const search = {
537539
538540 const paramsURLCalled = params . toString ( ) ;
539541
540- const typeToken = 'search' ; // alternatives: 'count'
542+ const typeToken = 'requestParams' ;
543+ if ( SEARCH_CANCEL_API ?. rawData ?. [ typeToken ] !== null ) {
544+ SEARCH_CANCEL_API ?. rawData ?. [ typeToken ] ?.(
545+ '-- Request-parameters fetch canceled because another was started --'
546+ ) ;
547+ }
541548 axiosInstance
542549 . get ( `/?${ paramsURLCalled } ` , {
543550 cancelToken : new axios . CancelToken ( ( c ) => {
@@ -547,10 +554,18 @@ const search = {
547554 . then ( ( { data } ) => {
548555 SEARCH_CANCEL_API . rawData [ typeToken ] = null ;
549556 return resolve ( { resp : data , paramsURLCalled } ) ;
550- // })
551- // .catch((error) => {
552- // errorHandler(error);
553- // reject(error?.response || error?.message);
557+ } )
558+ . catch ( ( error ) => {
559+ SEARCH_CANCEL_API . rawData [ typeToken ] = null ;
560+ if ( axios . isCancel ( error ) ) {
561+ return resolve ( {
562+ resp : { code : 0 , message : error . message } ,
563+ paramsURLCalled,
564+ canceled : true ,
565+ } ) ;
566+ }
567+ errorHandler ( error ) ;
568+ return reject ( error ?. response || error ?. message ) ;
554569 } ) ;
555570 } ) ,
556571
@@ -643,8 +658,13 @@ const search = {
643658 return resolve ( { resp : data , paramsURLCalled } ) ;
644659 } )
645660 . catch ( ( error ) => {
661+ SEARCH_CANCEL_API . rawData [ typeToken ] = null ;
662+ if ( axios . isCancel ( error ) ) {
663+ reject ( error ) ;
664+ return ;
665+ }
646666 errorHandler ( error ) ;
647- reject ( error ?. response || error ?. message ) ;
667+ reject ( error ?. response ?? error ?. message ?? error ) ;
648668 } ) ;
649669 } ) ,
650670
@@ -705,8 +725,13 @@ const search = {
705725 return resolve ( { resp : data , paramsURLCalled } ) ;
706726 } )
707727 . catch ( ( error ) => {
728+ SEARCH_CANCEL_API . rawData [ typeToken ] = null ;
729+ if ( axios . isCancel ( error ) ) {
730+ reject ( error ) ;
731+ return ;
732+ }
708733 errorHandler ( error ) ;
709- reject ( error ?. response || error ?. message ) ;
734+ reject ( error ?. response ?? error ?. message ?? error ) ;
710735 } ) ;
711736 } ) ,
712737
@@ -741,13 +766,7 @@ const search = {
741766 // (Basics parameters are the one originally filled when opening the page for the first time)
742767
743768 for ( const [ key , val ] of form . initSearch ) {
744- if (
745- key !== 'data_type' &&
746- // key !== 'offset' &&
747- // key !== 'limit' &&
748- key !== 'pageType' // &&
749- // key !== 'pageNumber'
750- ) {
769+ if ( key !== 'data_type' && key !== 'offset' && key !== 'limit' && key !== 'pageType' ) {
751770 // For the 1st search we don't send the filters if we request OnlyCount
752771 // onlyCount => all parameters but the filters
753772 //! this approach works only when the URL does not contain a hash
@@ -825,8 +844,13 @@ const search = {
825844 return resolve ( { resp : data , paramsURLCalled } ) ;
826845 } )
827846 . catch ( ( error ) => {
847+ SEARCH_CANCEL_API . rawData [ typeToken ] = null ;
848+ if ( axios . isCancel ( error ) ) {
849+ reject ( error ) ;
850+ return ;
851+ }
828852 errorHandler ( error ) ;
829- reject ( error ?. response || error ?. message ) ;
853+ reject ( error ?. response ?? error ?. message ?? error ) ;
830854 } ) ;
831855 } ) ,
832856 } ,
0 commit comments