@@ -93,8 +93,14 @@ export const useCreate = <
9393 const {
9494 mutationMode = 'pessimistic' ,
9595 getMutateWithMiddlewares,
96+ mutationFn : customMutationFn ,
9697 ...mutationOptions
9798 } = options ;
99+ const wrappedCustomMutationFn = customMutationFn as
100+ | ( (
101+ params : Partial < UseCreateMutateParams < RecordType > >
102+ ) => Promise < ResultRecordType > )
103+ | undefined ;
98104
99105 const dataProviderCreate = useEvent ( ( resource : string , params ) =>
100106 dataProvider . create < RecordType , ResultRecordType > (
@@ -113,17 +119,23 @@ export const useCreate = <
113119 ...mutationOptions ,
114120 mutationKey : [ resource , 'create' , params ] ,
115121 mutationMode,
116- mutationFn : ( { resource, ...params } ) => {
117- if ( resource == null ) {
118- throw new Error ( 'useCreate mutation requires a resource' ) ;
119- }
120- if ( params . data == null ) {
121- throw new Error (
122- 'useCreate mutation requires a non-empty data object'
123- ) ;
124- }
125- return dataProviderCreate ( resource , params ) ;
126- } ,
122+ mutationFn : wrappedCustomMutationFn
123+ ? async params => ( {
124+ data : await wrappedCustomMutationFn ( params ) ,
125+ } )
126+ : ( { resource, ...params } ) => {
127+ if ( resource == null ) {
128+ throw new Error (
129+ 'useCreate mutation requires a resource'
130+ ) ;
131+ }
132+ if ( params . data == null ) {
133+ throw new Error (
134+ 'useCreate mutation requires a non-empty data object'
135+ ) ;
136+ }
137+ return dataProviderCreate ( resource , params ) ;
138+ } ,
127139 updateCache : (
128140 { resource, ...params } ,
129141 { mutationMode } ,
@@ -178,12 +190,20 @@ export const useCreate = <
178190
179191 return queryKeys ;
180192 } ,
181- getMutateWithMiddlewares : mutationFn => {
193+ getMutateWithMiddlewares : mutateWithMutationMode => {
182194 if ( getMutateWithMiddlewares ) {
183195 // Immediately get the function with middlewares applied so that even if the middlewares gets unregistered (because of a redirect for instance),
184196 // we still have them applied when users have called the mutate function.
185197 const mutateWithMiddlewares = getMutateWithMiddlewares (
186- dataProviderCreate . bind ( dataProvider )
198+ wrappedCustomMutationFn
199+ ? ( resource , params ) =>
200+ wrappedCustomMutationFn ( {
201+ resource,
202+ ...params ,
203+ } as Partial <
204+ UseCreateMutateParams < RecordType >
205+ > )
206+ : dataProviderCreate . bind ( dataProvider )
187207 ) ;
188208 return args => {
189209 // This is necessary to avoid breaking changes in useCreate:
@@ -193,7 +213,7 @@ export const useCreate = <
193213 } ;
194214 }
195215
196- return args => mutationFn ( args ) ;
216+ return args => mutateWithMutationMode ( args ) ;
197217 } ,
198218 onUndo : ( { resource, data, meta } ) => {
199219 queryClient . removeQueries ( {
0 commit comments