From 6c6df7d7d90a37b23bb8cb8e10d504be05f82135 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Fri, 22 Dec 2023 02:33:09 +0200 Subject: [PATCH] Fixed: Abort old fetch items requests in manual import --- .../Store/Actions/interactiveImportActions.js | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/frontend/src/Store/Actions/interactiveImportActions.js b/frontend/src/Store/Actions/interactiveImportActions.js index 1846cac43..f853825cf 100644 --- a/frontend/src/Store/Actions/interactiveImportActions.js +++ b/frontend/src/Store/Actions/interactiveImportActions.js @@ -18,6 +18,7 @@ export const section = 'interactiveImport'; const booksSection = `${section}.books`; const bookFilesSection = `${section}.bookFiles`; +let abortCurrentFetchRequest = null; let abortCurrentRequest = null; let currentIds = []; @@ -127,6 +128,11 @@ export const clearInteractiveImportBookFiles = createAction(CLEAR_INTERACTIVE_IM // Action Handlers export const actionHandlers = handleThunks({ [FETCH_INTERACTIVE_IMPORT_ITEMS]: function(getState, payload, dispatch) { + if (abortCurrentFetchRequest) { + abortCurrentFetchRequest(); + abortCurrentFetchRequest = null; + } + if (!payload.downloadId && !payload.folder) { dispatch(set({ section, error: { message: '`downloadId` or `folder` is required.' } })); return; @@ -134,12 +140,14 @@ export const actionHandlers = handleThunks({ dispatch(set({ section, isFetching: true })); - const promise = createAjaxRequest({ + const { request, abortRequest } = createAjaxRequest({ url: '/manualimport', data: payload - }).request; + }); + + abortCurrentFetchRequest = abortRequest; - promise.done((data) => { + request.done((data) => { dispatch(batchActions([ update({ section, data }), @@ -152,7 +160,11 @@ export const actionHandlers = handleThunks({ ])); }); - promise.fail((xhr) => { + request.fail((xhr) => { + if (xhr.aborted) { + return; + } + dispatch(set({ section, isFetching: false,