@@ -9,7 +9,10 @@ import {
99import { LinkedAbortController } from 'linked-abort-controller' ;
1010import { action , makeObservable , observable , reaction } from 'mobx' ;
1111
12- import { MobxMutationConfig } from './mobx-mutation.types' ;
12+ import {
13+ MobxMutationConfig ,
14+ MobxMutationInvalidateQueriesOptions ,
15+ } from './mobx-mutation.types' ;
1316import { MobxQueryClient , MobxQueryClientHooks } from './mobx-query-client' ;
1417
1518export class MobxMutation <
@@ -33,7 +36,7 @@ export class MobxMutation<
3336 constructor (
3437 protected config : MobxMutationConfig < TData , TVariables , TError , TContext > ,
3538 ) {
36- const { queryClient, ...restOptions } = config ;
39+ const { queryClient, invalidateQueries , ...restOptions } = config ;
3740 this . abortController = new LinkedAbortController ( config . abortSignal ) ;
3841 this . queryClient = queryClient ;
3942 this . result = undefined as any ;
@@ -76,6 +79,29 @@ export class MobxMutation<
7679 }
7780 } ) ;
7881
82+ if ( invalidateQueries ) {
83+ this . onDone ( ( data , payload ) => {
84+ let invalidateOptions : MobxMutationInvalidateQueriesOptions ;
85+
86+ if ( typeof invalidateQueries === 'function' ) {
87+ invalidateOptions = invalidateQueries ( data , payload ) ;
88+ } else {
89+ invalidateOptions = invalidateQueries ;
90+ }
91+
92+ if ( invalidateOptions . queryKeys ?. length ) {
93+ invalidateOptions . queryKeys ?. forEach ( ( queryKey ) => {
94+ this . queryClient . invalidateQueries ( {
95+ ...invalidateOptions ,
96+ queryKey,
97+ } ) ;
98+ } ) ;
99+ } else {
100+ this . queryClient . invalidateQueries ( invalidateOptions ) ;
101+ }
102+ } ) ;
103+ }
104+
79105 config . onInit ?.( this ) ;
80106 this . hooks ?. onMutationInit ?.( this ) ;
81107 }
0 commit comments