Skip to content

Commit

Permalink
fix(ra-core): useCreate and useUpdate can return a promise
Browse files Browse the repository at this point in the history
  • Loading branch information
alanpoulain committed Feb 14, 2022
1 parent efc8969 commit 561926f
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 14 deletions.
6 changes: 3 additions & 3 deletions packages/ra-core/src/controller/create/useCreateController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ export const useCreateController = <
: transform
? transform(data)
: data
).then(data =>
).then(data => {
create(
resource,
{ data },
Expand Down Expand Up @@ -126,8 +126,8 @@ export const useCreateController = <
);
},
}
)
);
);
});
},
[
create,
Expand Down
23 changes: 17 additions & 6 deletions packages/ra-core/src/dataProvider/useCreate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,12 +114,20 @@ export const useCreate = <RecordType extends RaRecord = any>(
unknown,
Partial<UseCreateMutateParams<RecordType>>,
unknown
>
) =>
> & { returnPromise?: boolean }
) => {
const { returnPromise, ...reactCreateOptions } = createOptions;
if (returnPromise) {
return mutation.mutateAsync(
{ resource: callTimeResource, ...callTimeParams },
createOptions
);
}
mutation.mutate(
{ resource: callTimeResource, ...callTimeParams },
createOptions
reactCreateOptions
);
};

return [create, mutation];
};
Expand All @@ -138,7 +146,10 @@ export type UseCreateOptions<
Partial<UseCreateMutateParams<RecordType>>
>;

export type UseCreateResult<RecordType extends RaRecord = any> = [
export type UseCreateResult<
RecordType extends RaRecord = any,
TReturnPromise extends boolean = boolean
> = [
(
resource?: string,
params?: Partial<CreateParams<Partial<RecordType>>>,
Expand All @@ -147,8 +158,8 @@ export type UseCreateResult<RecordType extends RaRecord = any> = [
unknown,
Partial<UseCreateMutateParams<RecordType>>,
unknown
>
) => void,
> & { returnPromise?: TReturnPromise }
) => TReturnPromise extends true ? Promise<RecordType> : void,
UseMutationResult<
RecordType,
unknown,
Expand Down
31 changes: 26 additions & 5 deletions packages/ra-core/src/dataProvider/useUpdate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -263,9 +263,15 @@ export const useUpdate = <RecordType extends RaRecord = any>(
unknown,
Partial<UseUpdateMutateParams<RecordType>>,
unknown
> & { mutationMode?: MutationMode } = {}
> & { mutationMode?: MutationMode; returnPromise?: boolean } = {}
) => {
const { mutationMode, onSuccess, onSettled, onError } = updateOptions;
const {
mutationMode,
returnPromise,
onSuccess,
onSettled,
onError,
} = updateOptions;

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

if (returnPromise && mode.current !== 'pessimistic') {
console.warn(
'The returnPromise parameter can only be used if the mutationMode is set to pessimistic'
);
}

if (mode.current === 'pessimistic') {
if (returnPromise) {
return mutation.mutateAsync(
{ resource: callTimeResource, ...callTimeParams },
{ onSuccess, onSettled, onError }
);
}
return mutation.mutate(
{ resource: callTimeResource, ...callTimeParams },
{ onSuccess, onSettled, onError }
Expand Down Expand Up @@ -411,7 +429,10 @@ export type UseUpdateOptions<
Partial<UseUpdateMutateParams<RecordType>>
> & { mutationMode?: MutationMode };

export type UseUpdateResult<RecordType extends RaRecord = any> = [
export type UseUpdateResult<
RecordType extends RaRecord = any,
TReturnPromise extends boolean = boolean
> = [
(
resource?: string,
params?: Partial<UpdateParams<RecordType>>,
Expand All @@ -420,8 +441,8 @@ export type UseUpdateResult<RecordType extends RaRecord = any> = [
unknown,
Partial<UseUpdateMutateParams<RecordType>>,
unknown
> & { mutationMode?: MutationMode }
) => Promise<void>,
> & { mutationMode?: MutationMode; returnPromise?: TReturnPromise }
) => Promise<TReturnPromise extends true ? RecordType : void>,
UseMutationResult<
RecordType,
unknown,
Expand Down

0 comments on commit 561926f

Please sign in to comment.