This release changes the API, affecting all usages of confirm
function. Previously the promise returned by confirm
would be resolved on confirm and rejected on cancel. This has changed and the promise is now always resolved
You can upgrade to the new version and maintain the previous behaviour by setting a provider attribute:
<ConfirmProvider useLegacyReturn>
{/* ... */}
</ConfirmProvider>
Given this code from v3:
confirm({ ... })
.then(() => console.log("confirm"))
.catch(() => console.log("cancel"));
You can achieve the same behaviour in v4, like so:
confirm({ ... })
.then(({ confirmed, reason }) => {
if (confirmed) {
console.log("confirm")
} else if (reason === "cancel") {
console.log("cancel")
}
});
The promise is also resolved on natural close (backdrop click, escape) or when the parent unmounts, in both cases with a distinct reason
. In most cases you may only be interested in the confirmed code path, in which case you would only check confirmed
and ignore the reason
.
With this new API, it is guaranteed the callback eventually runs, which helps to avoid leaks if the callback is supposed to free certain resources. It is also more suitable for use with async
/await
(which required a try
/catch
):
const { confirmed } = await confirm({ description: "This action is permanent!" });
if (confirmed) {
/* ... */
}
Breaking changes
- Always resolve the promise with confirmation status and close reason (#124)
- Fix regression in CJS build imports (#122) @joshkel
- Update peerDependencies to include MUI v6 and React 19
- Fix modal resetting to the default state during close animation (regression from 3.0.13) (#100) @DuncanMackintosh
- Improved the behaviour with missing
ConfirmProvider
(#98) @joshkel
- Fix compatibility with React 17 (regression from 3.0.13)
- Automatically close the dialog when the calling component is unmounted (for example, router navigation)
- Add acknowledgement checkbox option (#94) @MuscularSloth
- Fixed confirmation keyword field to reset whenever the dialog is open
- Add a global
confirm
method for use with class components (#86) @liaokaime
- Allow specifying the order of confirm & cancel buttons (#70) @MattFellows
- Add
hideCancelButton
option (#68) @btmluiz
- Add support for confirmation keyword (#60) @TimMikeladze
- Make
DialogActions
props configurable
- Respect updates to default options
- Add React 18 to
peerDependencies
(#51) @ProfHercules
- Add
allowClose
option to optionally disable natural close
- Add configurable props for DialogTitle and DialogContent for accessibility (#38) @imjordanxd
- Fix multiple clicks on confirm or cancel button (#37) @ypahalajani
Breaking changes
- Require Material-UI 5 (#36) @tifosiblack
- Add
content
option - Omit open prop from dialogProps (#30) @gergely-adamku
- Bump
react
andreact-dom
peer dependencies (#23) @Armanio
- Don't reject confirmation promise when neutrally closing the dialog (e.g. when hitting Esc) (#18) @tincho
- Merge nested default options (like
confirmationButtonProps
) with options passed to aconfirm
call
- Update TypeScript definitions to use
React.ReactNode
instead ofstring
where appropriate
- Add the ability to pass props to confirmation and cancellation buttons
- Add TypeScript definitions
New API using hooks and Promises.
Higher Order Component API.