From 6a87b67dcb2e37aa6c2c46285b47f73f9bc9a01f Mon Sep 17 00:00:00 2001 From: safronman Date: Sat, 15 Jun 2024 14:18:00 +0300 Subject: [PATCH] 4 - pessimistic final --- src/services/decks/decks.service.ts | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/services/decks/decks.service.ts b/src/services/decks/decks.service.ts index 5dfeaee..ab33ee0 100644 --- a/src/services/decks/decks.service.ts +++ b/src/services/decks/decks.service.ts @@ -14,6 +14,30 @@ const decksService = flashcardsApi.injectEndpoints({ endpoints: builder => ({ createDeck: builder.mutation({ invalidatesTags: ['Decks'], + async onQueryStarted(_, { dispatch, getState, queryFulfilled }) { + const cachedArgsForQuery = decksService.util.selectCachedArgsForQuery( + getState(), + 'getDecks' + ) as GetDecksArgs[] + + try { + const { data } = await queryFulfilled + + cachedArgsForQuery.forEach(cachedArgs => { + dispatch( + decksService.util.updateQueryData('getDecks', cachedArgs, draft => { + if (cachedArgs.currentPage !== 1) { + return + } + draft.items.unshift(data) + draft.items.pop() + }) + ) + }) + } catch (e) { + console.log(e) + } + }, query: body => { const { cover, isPrivate, name } = body @@ -77,7 +101,7 @@ const decksService = flashcardsApi.injectEndpoints({ return } - Object.assign(draft.items[itemToUpdateIndex], args) + draft.items[itemToUpdateIndex] = { ...draft.items[itemToUpdateIndex], ...args } }) ) )