mirror of
https://github.com/ershisan99/flashcards-example-project.git
synced 2025-12-17 05:09:29 +00:00
4 - optimistic final
This commit is contained in:
@@ -59,7 +59,42 @@ const decksService = flashcardsApi.injectEndpoints({
|
|||||||
}),
|
}),
|
||||||
updateDeck: builder.mutation<DeckResponse, UpdateDeckArgs>({
|
updateDeck: builder.mutation<DeckResponse, UpdateDeckArgs>({
|
||||||
invalidatesTags: ['Decks'],
|
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 }) => {
|
query: ({ cover, id, isPrivate, name }) => {
|
||||||
|
// 3
|
||||||
const formData = new FormData()
|
const formData = new FormData()
|
||||||
|
|
||||||
if (name) {
|
if (name) {
|
||||||
|
|||||||
Reference in New Issue
Block a user