Skip to content

Commit 28f518c

Browse files
authored
Merge pull request #11199 from marmelab/fix-updateCache
Fix update cache
2 parents ddb1709 + b9c9bef commit 28f518c

File tree

3 files changed

+73
-9
lines changed

3 files changed

+73
-9
lines changed

packages/ra-core/src/dataProvider/useCreate.spec.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import {
3636
describe('useCreate', () => {
3737
it('returns a callback that can be used with create arguments', async () => {
3838
const dataProvider = testDataProvider({
39-
create: jest.fn(() => Promise.resolve({ data: { id: 1 } } as any)),
39+
create: jest.fn(() => Promise.resolve({ data: { id: 0 } } as any)),
4040
});
4141
let localCreate;
4242
const Dummy = () => {
@@ -60,7 +60,7 @@ describe('useCreate', () => {
6060

6161
it('returns a callback that can be used with no arguments', async () => {
6262
const dataProvider = testDataProvider({
63-
create: jest.fn(() => Promise.resolve({ data: { id: 1 } } as any)),
63+
create: jest.fn(() => Promise.resolve({ data: { id: 0 } } as any)),
6464
});
6565
let localCreate;
6666
const Dummy = () => {
@@ -84,7 +84,7 @@ describe('useCreate', () => {
8484

8585
it('uses a custom mutationFn with mutation middlewares', async () => {
8686
const dataProvider = testDataProvider({
87-
create: jest.fn(() => Promise.resolve({ data: { id: 1 } } as any)),
87+
create: jest.fn(() => Promise.resolve({ data: { id: 0 } } as any)),
8888
});
8989
const customMutationFn = jest.fn(async params => ({
9090
id: 1,
@@ -179,7 +179,7 @@ describe('useCreate', () => {
179179

180180
it('uses call time params over hook time params', async () => {
181181
const dataProvider = testDataProvider({
182-
create: jest.fn(() => Promise.resolve({ data: { id: 1 } } as any)),
182+
create: jest.fn(() => Promise.resolve({ data: { id: 0 } } as any)),
183183
});
184184
let localCreate;
185185
const Dummy = () => {
@@ -203,7 +203,7 @@ describe('useCreate', () => {
203203

204204
it('calls onSettled when provided in hook time options', async () => {
205205
const dataProvider = testDataProvider({
206-
create: jest.fn(() => Promise.resolve({ data: { id: 1 } } as any)),
206+
create: jest.fn(() => Promise.resolve({ data: { id: 0 } } as any)),
207207
});
208208
let localCreate;
209209
const onSettled = jest.fn();
@@ -230,7 +230,7 @@ describe('useCreate', () => {
230230

231231
it('accepts a meta parameter', async () => {
232232
const dataProvider = testDataProvider({
233-
create: jest.fn(() => Promise.resolve({ data: { id: 1 } } as any)),
233+
create: jest.fn(() => Promise.resolve({ data: { id: 0 } } as any)),
234234
});
235235
let localCreate;
236236
const Dummy = () => {
@@ -260,7 +260,7 @@ describe('useCreate', () => {
260260
});
261261

262262
const dataProvider = testDataProvider({
263-
create: jest.fn(() => Promise.resolve({ data: { id: 1 } } as any)),
263+
create: jest.fn(() => Promise.resolve({ data: { id: 0 } } as any)),
264264
});
265265
let localCreate;
266266
const Dummy = () => {
@@ -300,7 +300,7 @@ describe('useCreate', () => {
300300
}
301301
const dataProvider = testDataProvider({
302302
create: jest.fn(() =>
303-
Promise.resolve({ data: { id: 1, sku: 'abc' } } as any)
303+
Promise.resolve({ data: { id: 0, sku: 'abc' } } as any)
304304
),
305305
});
306306
let localCreate;

packages/ra-core/src/dataProvider/useCreate.stories.tsx

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,3 +451,67 @@ InvalidateList.argTypes = {
451451
options: ['pessimistic', 'optimistic', 'undoable'],
452452
},
453453
};
454+
455+
export const CreateIdZero = ({
456+
mutationMode,
457+
}: {
458+
mutationMode: MutationModeType;
459+
}) => {
460+
const dataProvider = fakeRestDataProvider(
461+
{
462+
posts: [],
463+
},
464+
process.env.NODE_ENV !== 'test',
465+
process.env.NODE_ENV === 'test' ? 10 : 1000
466+
);
467+
468+
return (
469+
<TestMemoryRouter initialEntries={['/posts/create']}>
470+
<CoreAdmin dataProvider={dataProvider}>
471+
<Resource
472+
name="posts"
473+
create={
474+
<CreateBase mutationMode={mutationMode}>
475+
<Form>
476+
{mutationMode !== 'pessimistic' && (
477+
<TextInput source="id" defaultValue={0} />
478+
)}
479+
<TextInput source="title" />
480+
<button type="submit">Save</button>
481+
</Form>
482+
</CreateBase>
483+
}
484+
list={
485+
<ListBase loading={<p>Loading...</p>}>
486+
<RecordsIterator
487+
render={(record: any) => (
488+
<div
489+
style={{
490+
display: 'flex',
491+
gap: '8px',
492+
alignItems: 'center',
493+
}}
494+
>
495+
{record.id}: {record.title}
496+
</div>
497+
)}
498+
/>
499+
<Notification />
500+
</ListBase>
501+
}
502+
/>
503+
</CoreAdmin>
504+
</TestMemoryRouter>
505+
);
506+
};
507+
CreateIdZero.args = {
508+
mutationMode: 'undoable',
509+
};
510+
CreateIdZero.argTypes = {
511+
mutationMode: {
512+
control: {
513+
type: 'select',
514+
},
515+
options: ['pessimistic', 'optimistic', 'undoable'],
516+
},
517+
};

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ export const useCreate = <
146146
mutationMode === 'pessimistic'
147147
? result?.id
148148
: params.data?.id;
149-
if (!id) {
149+
if (id === undefined || id === null) {
150150
throw new Error(
151151
'Invalid dataProvider response for create: missing id'
152152
);

0 commit comments

Comments
 (0)