Skip to content

Commit 545a704

Browse files
authoredFeb 15, 2022
Merge pull request #7234 from alanpoulain/fix/return-promise
Fix BC break v4: useCreate and useUpdate can return a promise
2 parents efc8969 + 494219b commit 545a704

File tree

3 files changed

+47
-15
lines changed

3 files changed

+47
-15
lines changed
 

‎packages/ra-core/src/controller/create/useCreateController.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export const useCreateController = <
8181
: transform
8282
? transform(data)
8383
: data
84-
).then(data =>
84+
).then(data => {
8585
create(
8686
resource,
8787
{ data },
@@ -126,8 +126,8 @@ export const useCreateController = <
126126
);
127127
},
128128
}
129-
)
130-
);
129+
);
130+
});
131131
},
132132
[
133133
create,

‎packages/ra-core/src/dataProvider/useCreate.ts

+18-7
Original file line numberDiff line numberDiff line change
@@ -109,17 +109,25 @@ export const useCreate = <RecordType extends RaRecord = any>(
109109
const create = (
110110
callTimeResource: string = resource,
111111
callTimeParams: Partial<CreateParams<RecordType>> = {},
112-
createOptions?: MutateOptions<
112+
createOptions: MutateOptions<
113113
RecordType,
114114
unknown,
115115
Partial<UseCreateMutateParams<RecordType>>,
116116
unknown
117-
>
118-
) =>
117+
> & { returnPromise?: boolean } = {}
118+
) => {
119+
const { returnPromise, ...reactCreateOptions } = createOptions;
120+
if (returnPromise) {
121+
return mutation.mutateAsync(
122+
{ resource: callTimeResource, ...callTimeParams },
123+
createOptions
124+
);
125+
}
119126
mutation.mutate(
120127
{ resource: callTimeResource, ...callTimeParams },
121-
createOptions
128+
reactCreateOptions
122129
);
130+
};
123131

124132
return [create, mutation];
125133
};
@@ -138,7 +146,10 @@ export type UseCreateOptions<
138146
Partial<UseCreateMutateParams<RecordType>>
139147
>;
140148

141-
export type UseCreateResult<RecordType extends RaRecord = any> = [
149+
export type UseCreateResult<
150+
RecordType extends RaRecord = any,
151+
TReturnPromise extends boolean = boolean
152+
> = [
142153
(
143154
resource?: string,
144155
params?: Partial<CreateParams<Partial<RecordType>>>,
@@ -147,8 +158,8 @@ export type UseCreateResult<RecordType extends RaRecord = any> = [
147158
unknown,
148159
Partial<UseCreateMutateParams<RecordType>>,
149160
unknown
150-
>
151-
) => void,
161+
> & { returnPromise?: TReturnPromise }
162+
) => TReturnPromise extends true ? Promise<RecordType> : void,
152163
UseMutationResult<
153164
RecordType,
154165
unknown,

‎packages/ra-core/src/dataProvider/useUpdate.ts

+26-5
Original file line numberDiff line numberDiff line change
@@ -263,9 +263,15 @@ export const useUpdate = <RecordType extends RaRecord = any>(
263263
unknown,
264264
Partial<UseUpdateMutateParams<RecordType>>,
265265
unknown
266-
> & { mutationMode?: MutationMode } = {}
266+
> & { mutationMode?: MutationMode; returnPromise?: boolean } = {}
267267
) => {
268-
const { mutationMode, onSuccess, onSettled, onError } = updateOptions;
268+
const {
269+
mutationMode,
270+
returnPromise,
271+
onSuccess,
272+
onSettled,
273+
onError,
274+
} = updateOptions;
269275

270276
// store the hook time params *at the moment of the call*
271277
// because they may change afterwards, which would break the undoable mode
@@ -276,7 +282,19 @@ export const useUpdate = <RecordType extends RaRecord = any>(
276282
mode.current = mutationMode;
277283
}
278284

285+
if (returnPromise && mode.current !== 'pessimistic') {
286+
console.warn(
287+
'The returnPromise parameter can only be used if the mutationMode is set to pessimistic'
288+
);
289+
}
290+
279291
if (mode.current === 'pessimistic') {
292+
if (returnPromise) {
293+
return mutation.mutateAsync(
294+
{ resource: callTimeResource, ...callTimeParams },
295+
{ onSuccess, onSettled, onError }
296+
);
297+
}
280298
return mutation.mutate(
281299
{ resource: callTimeResource, ...callTimeParams },
282300
{ onSuccess, onSettled, onError }
@@ -411,7 +429,10 @@ export type UseUpdateOptions<
411429
Partial<UseUpdateMutateParams<RecordType>>
412430
> & { mutationMode?: MutationMode };
413431

414-
export type UseUpdateResult<RecordType extends RaRecord = any> = [
432+
export type UseUpdateResult<
433+
RecordType extends RaRecord = any,
434+
TReturnPromise extends boolean = boolean
435+
> = [
415436
(
416437
resource?: string,
417438
params?: Partial<UpdateParams<RecordType>>,
@@ -420,8 +441,8 @@ export type UseUpdateResult<RecordType extends RaRecord = any> = [
420441
unknown,
421442
Partial<UseUpdateMutateParams<RecordType>>,
422443
unknown
423-
> & { mutationMode?: MutationMode }
424-
) => Promise<void>,
444+
> & { mutationMode?: MutationMode; returnPromise?: TReturnPromise }
445+
) => Promise<TReturnPromise extends true ? RecordType : void>,
425446
UseMutationResult<
426447
RecordType,
427448
unknown,

0 commit comments

Comments
 (0)
Please sign in to comment.