Skip to content

Commit a1a0944

Browse files
committed
skip on pessimistic mode only
1 parent 3779253 commit a1a0944

5 files changed

Lines changed: 20 additions & 6 deletions

File tree

src/create/CreateGuesser.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ export const IntrospectedCreateGuesser = ({
5252
schema,
5353
schemaAnalyzer,
5454
resource,
55+
mutationMode = 'pessimistic',
5556
mutationOptions,
5657
redirect: redirectTo = 'list',
5758
mode,
@@ -70,6 +71,7 @@ export const IntrospectedCreateGuesser = ({
7071
resource,
7172
schemaAnalyzer,
7273
fields,
74+
mutationMode,
7375
mutationOptions,
7476
transform,
7577
redirectTo,

src/edit/EditGuesser.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ export const IntrospectedEditGuesser = ({
7676
schemaAnalyzer,
7777
fields,
7878
mutationOptions,
79+
mutationMode,
7980
transform,
8081
redirectTo,
8182
children: [],

src/types.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -525,4 +525,5 @@ export type UseOnSubmitProps = Pick<
525525
'schemaAnalyzer' | 'resource' | 'fields'
526526
> &
527527
Pick<CreateProps, 'mutationOptions' | 'transform'> &
528-
PickRename<CreateProps, 'redirect', 'redirectTo'>;
528+
PickRename<CreateProps, 'redirect', 'redirectTo'> &
529+
Partial<Pick<EditProps, 'mutationMode'>>;

src/useOnSubmit.test.tsx

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { render, waitFor } from '@testing-library/react';
55
import {
66
type CreateResult,
77
DataProviderContext,
8+
type MutationMode,
89
type RaRecord,
910
type UpdateResult,
1011
testDataProvider,
@@ -142,9 +143,15 @@ test.each([
142143
});
143144
});
144145

145-
test.each([{ name: 'Required' }, null])(
146-
'notification handling on validation errors (%s)',
147-
async (submissionErrors) => {
146+
test.each`
147+
submissionErrors | mutationMode | shouldNotify
148+
${{ name: 'Required' }} | ${'pessimistic'} | ${false}
149+
${{ name: 'Required' }} | ${'optimistic'} | ${true}
150+
${{ name: 'Required' }} | ${'undoable'} | ${true}
151+
${null} | ${'pessimistic'} | ${true}
152+
`(
153+
'notification handling on validation errors ($submissionErrors, $mutationMode)',
154+
async ({ submissionErrors, mutationMode, shouldNotify }) => {
148155
const { default: useOnSubmit } = await import('./useOnSubmit.js');
149156
notify.mockClear();
150157
dataProvider.create = jest.fn(() =>
@@ -155,6 +162,7 @@ test.each([{ name: 'Required' }, null])(
155162
const Dummy = () => {
156163
const onSubmit = useOnSubmit({
157164
...onSubmitProps,
165+
mutationMode: mutationMode as MutationMode,
158166
schemaAnalyzer: {
159167
...onSubmitProps.schemaAnalyzer,
160168
getSubmissionErrors: () => submissionErrors,
@@ -182,7 +190,7 @@ test.each([{ name: 'Required' }, null])(
182190
await waitFor(() => {
183191
expect(dataProvider.create).toHaveBeenCalled();
184192
});
185-
(submissionErrors ? expect(notify).not : expect(notify)).toHaveBeenCalled();
193+
(shouldNotify ? expect(notify) : expect(notify).not).toHaveBeenCalled();
186194
expect(errors).toEqual(submissionErrors ?? {});
187195
},
188196
);

src/useOnSubmit.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ const useOnSubmit = ({
2121
schemaAnalyzer,
2222
fields,
2323
mutationOptions,
24+
mutationMode = 'pessimistic',
2425
transform,
2526
redirectTo = 'list',
2627
}: UseOnSubmitProps): ((
@@ -93,7 +94,7 @@ const useOnSubmit = ({
9394
mutationOptions?.onError ??
9495
((error: string | Error) => {
9596
// Notification will be handled by the useNotifyIsFormInvalid hook.
96-
if (submissionErrors) {
97+
if (submissionErrors && mutationMode === 'pessimistic') {
9798
return;
9899
}
99100
const message =
@@ -125,6 +126,7 @@ const useOnSubmit = ({
125126
[
126127
fields,
127128
id,
129+
mutationMode,
128130
mutationOptions,
129131
notify,
130132
redirect,

0 commit comments

Comments
 (0)