Skip to content

Commit

Permalink
Add prop to disable default toast messages on form submit
Browse files Browse the repository at this point in the history
  • Loading branch information
Matushl committed Apr 12, 2024
1 parent 6c7c887 commit fb16bfe
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 11 deletions.
3 changes: 3 additions & 0 deletions packages/ui-informed/src/form/Form.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ export interface FormProps<T>
readOnly?: boolean;
loading?: boolean;
onSubmit?: (formState: TypedFormState<T>) => Promise<unknown>;
disableDefaultToast?: boolean;
zodSchema?: ZodObject<ZodRawShape>;
}

Expand All @@ -34,13 +35,15 @@ export function Form<T>({
readOnly = false,
disabled = false,
loading = false,
disableDefaultToast,
zodSchema,
...restProps
}: FormProps<T>) {
const messages = useFormTranslationsContext();
const { handleSubmit, handleSubmitFailure, isSubmitting } =
useDefaultSubmitActions<T>({
onSubmit,
disableDefaultToast,
});

const contextValue = useMemo<FormContextType>(
Expand Down
32 changes: 21 additions & 11 deletions packages/ui-informed/src/form/useDefaultSubmitActions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export interface TypedFormState<T> extends Omit<FormState, 'values'> {
}
type UseFormSubmitActionsParams<T> = {
onSubmit?: (formState: TypedFormState<T>) => Promise<unknown>;
disableDefaultToast?: boolean;
};

/**
Expand All @@ -18,6 +19,7 @@ type UseFormSubmitActionsParams<T> = {
*/
export function useDefaultSubmitActions<T>({
onSubmit,
disableDefaultToast,
}: UseFormSubmitActionsParams<T>) {
const messages = useFormTranslationsContext();
const [isSubmitting, setIsSubmitting] = useState(false);
Expand All @@ -34,28 +36,36 @@ export function useDefaultSubmitActions<T>({
await onSubmit?.(formState as TypedFormState<T>);

// Show success notification
toast.success(messages.actions.success.title, {
description: messages.actions.success.message,
});
if (!disableDefaultToast) {
toast.success(messages.actions.success.title, {
description: messages.actions.success.message,
});
}
} catch (error) {
toast.error(messages.actions.fail.title, {
description: (error as any).message,
});
if (!disableDefaultToast) {
toast.error(messages.actions.fail.title, {
description: (error as any).message,

Check warning on line 47 in packages/ui-informed/src/form/useDefaultSubmitActions.tsx

View workflow job for this annotation

GitHub Actions / CI

Unexpected any. Specify a different type
});
} else {
throw error;
}
} finally {
setIsSubmitting(false);
}
},
[messages, onSubmit],
[disableDefaultToast, messages, onSubmit],
);

/**
* Submit failure handler, shows notification with error message.
*/
const handleSubmitFailure = useCallback(() => {
toast.error(messages.actions.fail.title, {
description: messages.actions.fail.message,
});
}, [messages]);
if (!disableDefaultToast) {
toast.error(messages.actions.fail.title, {
description: messages.actions.fail.message,
});
}
}, [disableDefaultToast, messages]);

return {
handleSubmit,
Expand Down

0 comments on commit fb16bfe

Please sign in to comment.