Skip to content

Commit

Permalink
Merge pull request #5842 from marmelab/fix-save-button-breaking-change
Browse files Browse the repository at this point in the history
Fix SaveButton Breaking Change Regarding FormContext
  • Loading branch information
fzaninotto committed Feb 2, 2021
2 parents 69edd3f + 59f87d0 commit ac6f065
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 29 deletions.
33 changes: 9 additions & 24 deletions packages/ra-ui-materialui/src/button/SaveButton.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,7 @@ describe('<SaveButton />', () => {
<TestContext>
<ThemeProvider theme={theme}>
<SaveContextProvider value={saveContextValue}>
<FormContextProvider value={formContextValue}>
<SaveButton {...invalidButtonDomProps} />
</FormContextProvider>
<SaveButton {...invalidButtonDomProps} />
</SaveContextProvider>
</ThemeProvider>
</TestContext>
Expand All @@ -78,9 +76,7 @@ describe('<SaveButton />', () => {
<TestContext>
<ThemeProvider theme={theme}>
<SaveContextProvider value={saveContextValue}>
<FormContextProvider value={formContextValue}>
<SaveButton disabled={true} />
</FormContextProvider>
<SaveButton disabled={true} />
</SaveContextProvider>
</ThemeProvider>
</TestContext>
Expand All @@ -92,9 +88,7 @@ describe('<SaveButton />', () => {
const { getByLabelText } = render(
<TestContext>
<SaveContextProvider value={saveContextValue}>
<FormContextProvider value={formContextValue}>
<SaveButton submitOnEnter />
</FormContextProvider>
<SaveButton submitOnEnter />
</SaveContextProvider>
</TestContext>
);
Expand All @@ -107,9 +101,7 @@ describe('<SaveButton />', () => {
const { getByLabelText } = render(
<TestContext>
<SaveContextProvider value={saveContextValue}>
<FormContextProvider value={formContextValue}>
<SaveButton submitOnEnter={false} />
</FormContextProvider>
<SaveButton submitOnEnter={false} />
</SaveContextProvider>
</TestContext>
);
Expand Down Expand Up @@ -144,12 +136,7 @@ describe('<SaveButton />', () => {
const { getByLabelText } = render(
<TestContext>
<SaveContextProvider value={saveContextValue}>
<FormContextProvider value={formContextValue}>
<SaveButton
handleSubmitWithRedirect={onSubmit}
saving
/>
</FormContextProvider>
<SaveButton handleSubmitWithRedirect={onSubmit} saving />
</SaveContextProvider>
</TestContext>
);
Expand All @@ -168,12 +155,10 @@ describe('<SaveButton />', () => {
dispatchSpy = jest.spyOn(store, 'dispatch');
return (
<SaveContextProvider value={saveContextValue}>
<FormContextProvider value={formContextValue}>
<SaveButton
handleSubmitWithRedirect={onSubmit}
invalid
/>
</FormContextProvider>
<SaveButton
handleSubmitWithRedirect={onSubmit}
invalid
/>
</SaveContextProvider>
);
}}
Expand Down
26 changes: 21 additions & 5 deletions packages/ra-ui-materialui/src/button/SaveButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -81,21 +81,37 @@ const SaveButton: FC<SaveButtonProps> = props => {
const classes = useStyles(props);
const notify = useNotify();
const translate = useTranslate();
const { setOnSave } = useFormContext();
const saveContext = useFormContext();
const { setOnSuccess, setOnFailure, setTransform } = useSaveContext(props);

const handleClick = event => {
// deprecated: use onSuccess and transform instead of onSave
if (typeof onSave === 'function') {
if (process.env.NODE_ENV !== 'production') {
console.log(
console.warn(
'<SaveButton onSave> prop is deprecated, use the onSuccess prop instead.'
);
if (!saveContext || !saveContext.setOnSave) {
console.warn(
'Using <SaveButton> outside a FormContext is deprecated.'
);
}
}
if (saveContext && saveContext.setOnSave) {
saveContext.setOnSave(onSave);
}
setOnSave(onSave);
} else {
// we reset to the Form default save function
setOnSave();
if (
(process.env.NODE_ENV !== 'production' && !saveContext) ||
!saveContext.setOnSave
) {
console.warn(
'Using <SaveButton> outside a FormContext is deprecated.'
);
} else {
// we reset to the Form default save function
saveContext.setOnSave();
}
}
if (onSuccess) {
setOnSuccess(onSuccess);
Expand Down

0 comments on commit ac6f065

Please sign in to comment.