File tree Expand file tree Collapse file tree
packages/ra-core/src/dataProvider Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -144,6 +144,37 @@ describe('useCreate', () => {
144144 } ) ;
145145 } ) ;
146146
147+ it ( 'calls onSettled when provided in hook time options' , async ( ) => {
148+ const dataProvider = testDataProvider ( {
149+ create : jest . fn ( ( ) => Promise . resolve ( { data : { id : 1 } } as any ) ) ,
150+ } ) ;
151+ let localCreate ;
152+ let settled = false ;
153+ const Dummy = ( ) => {
154+ const [ create ] = useCreate (
155+ 'foo' ,
156+ { data : { bar : 'baz' } } ,
157+ {
158+ onSettled : ( ) => {
159+ settled = true ;
160+ } ,
161+ }
162+ ) ;
163+ localCreate = create ;
164+ return < span /> ;
165+ } ;
166+
167+ render (
168+ < CoreAdminContext dataProvider = { dataProvider } >
169+ < Dummy />
170+ </ CoreAdminContext >
171+ ) ;
172+ localCreate ( 'foo' , { data : { foo : 456 } } ) ;
173+ await waitFor ( ( ) => {
174+ expect ( settled ) . toBe ( true ) ;
175+ } ) ;
176+ } ) ;
177+
147178 it ( 'accepts a meta parameter' , async ( ) => {
148179 const dataProvider = testDataProvider ( {
149180 create : jest . fn ( ( ) => Promise . resolve ( { data : { id : 1 } } as any ) ) ,
Original file line number Diff line number Diff line change @@ -93,6 +93,7 @@ export const useCreate = <
9393 const {
9494 mutationMode = 'pessimistic' ,
9595 getMutateWithMiddlewares,
96+ onSettled,
9697 ...mutationOptions
9798 } = options ;
9899
@@ -205,16 +206,17 @@ export const useCreate = <
205206 exact : true ,
206207 } ) ;
207208 } ,
208- onSettled : (
209- result ,
210- error ,
211- variables ,
212- context : { snapshot : Snapshot }
213- ) => {
209+ onSettled : ( ...args ) => {
210+ const [ , , , mutateResult ] = args ;
211+
214212 // For creation, we always refetch after error or success:
215- context . snapshot . forEach ( ( [ queryKey ] ) => {
216- queryClient . invalidateQueries ( { queryKey } ) ;
217- } ) ;
213+ ( mutateResult as { snapshot : Snapshot } ) . snapshot . forEach (
214+ ( [ queryKey ] ) => {
215+ queryClient . invalidateQueries ( { queryKey } ) ;
216+ }
217+ ) ;
218+
219+ onSettled ?.( ...args ) ;
218220 } ,
219221 }
220222 ) ;
Original file line number Diff line number Diff line change @@ -207,6 +207,43 @@ describe('useDelete', () => {
207207 } ) ;
208208 } ) ;
209209
210+ it ( 'calls onSettled when provided in hook time options' , async ( ) => {
211+ const dataProvider = testDataProvider ( {
212+ delete : jest . fn ( ( ) => Promise . resolve ( { data : { id : 1 } } as any ) ) ,
213+ } ) ;
214+ let localDeleteOne ;
215+ let settled = false ;
216+ const Dummy = ( ) => {
217+ const [ deleteOne ] = useDelete (
218+ 'foo' ,
219+ {
220+ id : 1 ,
221+ previousData : { id : 1 , bar : 'bar' } ,
222+ } ,
223+ {
224+ onSettled : ( ) => {
225+ settled = true ;
226+ } ,
227+ }
228+ ) ;
229+ localDeleteOne = deleteOne ;
230+ return < span /> ;
231+ } ;
232+
233+ render (
234+ < CoreAdminContext dataProvider = { dataProvider } >
235+ < Dummy />
236+ </ CoreAdminContext >
237+ ) ;
238+ localDeleteOne ( 'foo' , {
239+ id : 1 ,
240+ previousData : { foo : 456 } ,
241+ } ) ;
242+ await waitFor ( ( ) => {
243+ expect ( settled ) . toBe ( true ) ;
244+ } ) ;
245+ } ) ;
246+
210247 it ( 'accepts a meta parameter' , async ( ) => {
211248 const dataProvider = testDataProvider ( {
212249 delete : jest . fn ( ( ) => Promise . resolve ( { data : { id : 1 } } as any ) ) ,
Original file line number Diff line number Diff line change @@ -90,7 +90,11 @@ export const useDelete = <
9090) : UseDeleteResult < RecordType , MutationError > => {
9191 const dataProvider = useDataProvider ( ) ;
9292 const queryClient = useQueryClient ( ) ;
93- const { mutationMode = 'pessimistic' , ...mutationOptions } = options ;
93+ const {
94+ mutationMode = 'pessimistic' ,
95+ onSettled,
96+ ...mutationOptions
97+ } = options ;
9498
9599 const [ mutate , mutationResult ] = useMutationWithMutationMode <
96100 MutationError ,
@@ -220,16 +224,17 @@ export const useDelete = <
220224 ] ;
221225 return queryKeys ;
222226 } ,
223- onSettled : (
224- result ,
225- error ,
226- variables ,
227- context : { snapshot : Snapshot }
228- ) => {
227+ onSettled : ( ...args ) => {
228+ const [ , , , mutateResult ] = args ;
229+
229230 // For deletion, we always refetch after error or success:
230- context . snapshot . forEach ( ( [ queryKey ] ) => {
231- queryClient . invalidateQueries ( { queryKey } ) ;
232- } ) ;
231+ ( mutateResult as { snapshot : Snapshot } ) . snapshot . forEach (
232+ ( [ queryKey ] ) => {
233+ queryClient . invalidateQueries ( { queryKey } ) ;
234+ }
235+ ) ;
236+
237+ onSettled ?.( ...args ) ;
233238 } ,
234239 }
235240 ) ;
Original file line number Diff line number Diff line change @@ -148,6 +148,37 @@ describe('useDeleteMany', () => {
148148 } ) ;
149149 } ) ;
150150
151+ it ( 'calls onSettled when provided in hook time options' , async ( ) => {
152+ const dataProvider = testDataProvider ( {
153+ deleteMany : jest . fn ( ( ) => Promise . resolve ( { data : [ 1 , 2 ] } as any ) ) ,
154+ } ) ;
155+ let localDeleteMany ;
156+ let settled = false ;
157+ const Dummy = ( ) => {
158+ const [ deleteMany ] = useDeleteMany (
159+ 'foo' ,
160+ { ids : [ 1 , 2 ] } ,
161+ {
162+ onSettled : ( ) => {
163+ settled = true ;
164+ } ,
165+ }
166+ ) ;
167+ localDeleteMany = deleteMany ;
168+ return < span /> ;
169+ } ;
170+
171+ render (
172+ < CoreAdminContext dataProvider = { dataProvider } >
173+ < Dummy />
174+ </ CoreAdminContext >
175+ ) ;
176+ localDeleteMany ( 'foo' , { ids : [ 3 , 4 ] } ) ;
177+ await waitFor ( ( ) => {
178+ expect ( settled ) . toBe ( true ) ;
179+ } ) ;
180+ } ) ;
181+
151182 it ( 'accepts a meta parameter' , async ( ) => {
152183 const dataProvider = testDataProvider ( {
153184 deleteMany : jest . fn ( ( ) => Promise . resolve ( { data : [ 1 , 2 ] } as any ) ) ,
Original file line number Diff line number Diff line change @@ -90,7 +90,11 @@ export const useDeleteMany = <
9090) : UseDeleteManyResult < RecordType , MutationError > => {
9191 const dataProvider = useDataProvider ( ) ;
9292 const queryClient = useQueryClient ( ) ;
93- const { mutationMode = 'pessimistic' , ...mutationOptions } = options ;
93+ const {
94+ mutationMode = 'pessimistic' ,
95+ onSettled,
96+ ...mutationOptions
97+ } = options ;
9498
9599 const [ mutate , mutationResult ] = useMutationWithMutationMode <
96100 MutationError ,
@@ -247,16 +251,17 @@ export const useDeleteMany = <
247251 ] ;
248252 return queryKeys ;
249253 } ,
250- onSettled : (
251- result ,
252- error ,
253- variables ,
254- context : { snapshot : Snapshot }
255- ) => {
254+ onSettled : ( ...args ) => {
255+ const [ , , , mutateResult ] = args ;
256+
256257 // For deletion, we always refetch after error or success:
257- context . snapshot . forEach ( ( [ queryKey ] ) => {
258- queryClient . invalidateQueries ( { queryKey } ) ;
259- } ) ;
258+ ( mutateResult as { snapshot : Snapshot } ) . snapshot . forEach (
259+ ( [ queryKey ] ) => {
260+ queryClient . invalidateQueries ( { queryKey } ) ;
261+ }
262+ ) ;
263+
264+ onSettled ?.( ...args ) ;
260265 } ,
261266 }
262267 ) ;
You can’t perform that action at this time.
0 commit comments