Skip to content

Commit 3a6ab36

Browse files
authored
Merge pull request #8933 from marmelab/create-and-edit-save-meta
Fix create and edit controller's `save` callback should use calltime `meta` param
2 parents 9758e15 + 690cf46 commit 3a6ab36

File tree

4 files changed

+70
-2
lines changed

4 files changed

+70
-2
lines changed

packages/ra-core/src/controller/create/useCreateController.spec.tsx

+31
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,37 @@ describe('useCreateController', () => {
324324
});
325325
});
326326

327+
it('should accept meta as a save option', async () => {
328+
let saveCallback;
329+
const create = jest
330+
.fn()
331+
.mockImplementationOnce((_, { data }) =>
332+
Promise.resolve({ data: { id: 123, ...data } })
333+
);
334+
const dataProvider = testDataProvider({
335+
getOne: () => Promise.resolve({ data: { id: 12 } } as any),
336+
create,
337+
});
338+
339+
render(
340+
<CoreAdminContext dataProvider={dataProvider}>
341+
<CreateController {...defaultProps}>
342+
{({ save }) => {
343+
saveCallback = save;
344+
return null;
345+
}}
346+
</CreateController>
347+
</CoreAdminContext>
348+
);
349+
await act(async () =>
350+
saveCallback({ foo: 'bar' }, { meta: { lorem: 'ipsum' } })
351+
);
352+
expect(create).toHaveBeenCalledWith('posts', {
353+
data: { foo: 'bar' },
354+
meta: { lorem: 'ipsum' },
355+
});
356+
});
357+
327358
it('should allow the save onError option to override the failure side effects override', async () => {
328359
jest.spyOn(console, 'error').mockImplementation(() => {});
329360
let saveCallback;

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ export const useCreateController = <
8787
onSuccess: onSuccessFromSave,
8888
onError: onErrorFromSave,
8989
transform: transformFromSave,
90+
meta: metaFromSave,
9091
} = {}
9192
) =>
9293
Promise.resolve(
@@ -100,7 +101,7 @@ export const useCreateController = <
100101
try {
101102
await mutate(
102103
resource,
103-
{ data, meta },
104+
{ data, meta: metaFromSave ?? meta },
104105
{
105106
onSuccess: async (data, variables, context) => {
106107
if (onSuccessFromSave) {

packages/ra-core/src/controller/edit/useEditController.spec.tsx

+35
Original file line numberDiff line numberDiff line change
@@ -618,6 +618,41 @@ describe('useEditController', () => {
618618
});
619619
});
620620

621+
it('should accept meta as a save option', async () => {
622+
let saveCallback;
623+
const update = jest
624+
.fn()
625+
.mockImplementationOnce((_, { id, data, previousData }) =>
626+
Promise.resolve({ data: { id, ...previousData, ...data } })
627+
);
628+
const dataProvider = ({
629+
getOne: () => Promise.resolve({ data: { id: 12 } }),
630+
update,
631+
} as unknown) as DataProvider;
632+
633+
render(
634+
<CoreAdminContext dataProvider={dataProvider}>
635+
<EditController {...defaultProps} mutationMode="pessimistic">
636+
{({ save }) => {
637+
saveCallback = save;
638+
return <div />;
639+
}}
640+
</EditController>
641+
</CoreAdminContext>
642+
);
643+
await act(async () =>
644+
saveCallback({ foo: 'bar' }, { meta: { lorem: 'ipsum' } })
645+
);
646+
await waitFor(() => {
647+
expect(update).toHaveBeenCalledWith('posts', {
648+
id: 12,
649+
data: { foo: 'bar' },
650+
previousData: undefined,
651+
meta: { lorem: 'ipsum' },
652+
});
653+
});
654+
});
655+
621656
it('should allow the save onSuccess option to override the success side effects override', async () => {
622657
let saveCallback;
623658
const dataProvider = ({

packages/ra-core/src/controller/edit/useEditController.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ export const useEditController = <
137137
onSuccess: onSuccessFromSave,
138138
onError: onErrorFromSave,
139139
transform: transformFromSave,
140+
meta: metaFromSave,
140141
} = {}
141142
) =>
142143
Promise.resolve(
@@ -155,7 +156,7 @@ export const useEditController = <
155156
try {
156157
await mutate(
157158
resource,
158-
{ id, data, meta: mutationMeta },
159+
{ id, data, meta: metaFromSave ?? mutationMeta },
159160
{
160161
onSuccess: async (data, variables, context) => {
161162
if (onSuccessFromSave) {

0 commit comments

Comments
 (0)