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,33 @@ 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+ const onSettled = jest . fn ( ) ;
153+ const Dummy = ( ) => {
154+ const [ create ] = useCreate (
155+ 'foo' ,
156+ { data : { bar : 'baz' } } ,
157+ { onSettled }
158+ ) ;
159+ localCreate = create ;
160+ return < span /> ;
161+ } ;
162+
163+ render (
164+ < CoreAdminContext dataProvider = { dataProvider } >
165+ < Dummy />
166+ </ CoreAdminContext >
167+ ) ;
168+ localCreate ( 'foo' , { data : { foo : 456 } } ) ;
169+ await waitFor ( ( ) => {
170+ expect ( onSettled ) . toHaveBeenCalled ( ) ;
171+ } ) ;
172+ } ) ;
173+
147174 it ( 'accepts a meta parameter' , async ( ) => {
148175 const dataProvider = testDataProvider ( {
149176 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,39 @@ 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+ const onSettled = jest . fn ( ) ;
216+ const Dummy = ( ) => {
217+ const [ deleteOne ] = useDelete (
218+ 'foo' ,
219+ {
220+ id : 1 ,
221+ previousData : { id : 1 , bar : 'bar' } ,
222+ } ,
223+ { onSettled }
224+ ) ;
225+ localDeleteOne = deleteOne ;
226+ return < span /> ;
227+ } ;
228+
229+ render (
230+ < CoreAdminContext dataProvider = { dataProvider } >
231+ < Dummy />
232+ </ CoreAdminContext >
233+ ) ;
234+ localDeleteOne ( 'foo' , {
235+ id : 1 ,
236+ previousData : { foo : 456 } ,
237+ } ) ;
238+ await waitFor ( ( ) => {
239+ expect ( onSettled ) . toHaveBeenCalled ( ) ;
240+ } ) ;
241+ } ) ;
242+
210243 it ( 'accepts a meta parameter' , async ( ) => {
211244 const dataProvider = testDataProvider ( {
212245 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,33 @@ 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+ const onSettled = jest . fn ( ) ;
157+ const Dummy = ( ) => {
158+ const [ deleteMany ] = useDeleteMany (
159+ 'foo' ,
160+ { ids : [ 1 , 2 ] } ,
161+ { onSettled }
162+ ) ;
163+ localDeleteMany = deleteMany ;
164+ return < span /> ;
165+ } ;
166+
167+ render (
168+ < CoreAdminContext dataProvider = { dataProvider } >
169+ < Dummy />
170+ </ CoreAdminContext >
171+ ) ;
172+ localDeleteMany ( 'foo' , { ids : [ 3 , 4 ] } ) ;
173+ await waitFor ( ( ) => {
174+ expect ( onSettled ) . toHaveBeenCalled ( ) ;
175+ } ) ;
176+ } ) ;
177+
151178 it ( 'accepts a meta parameter' , async ( ) => {
152179 const dataProvider = testDataProvider ( {
153180 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