From 3e038e4b36f9c520badda5877f0b40549c295c13 Mon Sep 17 00:00:00 2001 From: safronman Date: Sat, 15 Jun 2024 14:07:47 +0300 Subject: [PATCH] 4 - optimistic final --- src/services/decks/decks.service.ts | 35 +++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/services/decks/decks.service.ts b/src/services/decks/decks.service.ts index a44f3ea..5dfeaee 100644 --- a/src/services/decks/decks.service.ts +++ b/src/services/decks/decks.service.ts @@ -59,7 +59,42 @@ const decksService = flashcardsApi.injectEndpoints({ }), updateDeck: builder.mutation({ invalidatesTags: ['Decks'], + async onQueryStarted({ cover, id, ...args }, { dispatch, getState, queryFulfilled }) { + // 1 + const cachedArgsForQuery = decksService.util.selectCachedArgsForQuery( + getState(), + 'getDecks' + ) + const patchResults: any[] = [] + + cachedArgsForQuery.forEach(cachedArgs => { + patchResults.push( + dispatch( + decksService.util.updateQueryData('getDecks', cachedArgs, draft => { + const itemToUpdateIndex = draft.items.findIndex(deck => deck.id === id) + + if (itemToUpdateIndex === -1) { + return + } + + Object.assign(draft.items[itemToUpdateIndex], args) + }) + ) + ) + }) + + try { + //2 - запускает query + await queryFulfilled + } catch (e) { + patchResults.forEach(patchResult => { + // в случае ошибки вернет предыдущее значение + patchResult.undo() + }) + } + }, query: ({ cover, id, isPrivate, name }) => { + // 3 const formData = new FormData() if (name) {