Skip to content
This repository was archived by the owner on Apr 18, 2024. It is now read-only.

Commit a0ce76c

Browse files
fix: DIA-754: [FE] Search option does not reflect actual queries state
1 parent 93aaec6 commit a0ce76c

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

Diff for: src/stores/AppStore.js

+12-2
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ export const AppStore = types
135135
.volatile(() => ({
136136
needsDataFetch: false,
137137
projectFetch: false,
138+
requestsInFlight: new Map(),
138139
}))
139140
.actions((self) => ({
140141
startPolling() {
@@ -544,12 +545,21 @@ export const AppStore = types
544545
* @param {{ errorHandler?: fn }} [options] additional options like errorHandler
545546
*/
546547
apiCall: flow(function* (methodName, params, body, options) {
548+
const controller = new AbortController();
549+
const signal = controller.signal;
547550
const apiTransform = self.SDK.apiTransform?.[methodName];
548551
const requestParams = apiTransform?.params?.(params) ?? params ?? {};
549-
const requestBody = apiTransform?.body?.(body) ?? body ?? undefined;
550-
552+
const requestBody = { signal, ...(apiTransform?.body?.(body) ?? body) };
553+
const requestKey = `${methodName}_${JSON.stringify(params || {})}`;
554+
555+
if (self.requestsInFlight.has(requestKey)) {
556+
/* if already in flight cancel the first in favor of new one */
557+
self.requestsInFlight.get(requestKey).abort();
558+
}
559+
self.requestsInFlight.set(requestKey, controller);
551560
let result = yield self.API[methodName](requestParams, requestBody);
552561

562+
self.requestsInFlight.delete(requestKey);
553563
if (result.error && result.status !== 404) {
554564
if (options?.errorHandler?.(result)) {
555565
return result;

0 commit comments

Comments
 (0)