Skip to content

Commit 4bd4ad9

Browse files
authored
Merge pull request #25 from hdetering/feature/expr-order
Merge feature "Order expression graph rows by expression score"
2 parents ad29796 + bf37b59 commit 4bd4ad9

21 files changed

Lines changed: 1605 additions & 595 deletions

src/api/errorHandler.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ import axios from 'axios';
22
import { getAxiosAddNotif } from './prod/constant';
33
import random from '../helpers/random';
44

5-
const errorHandler = (error: any) => {
5+
const errorHandler = (error) => {
6+
// Intentional cancellation (new search superseded the old one): do not log or notify.
67
if (axios.isCancel(error)) {
7-
console.error(error.message);
8+
return;
89
}
910
if (error?.response) {
1011
getAxiosAddNotif()({

src/api/prod/search.ts

Lines changed: 40 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)