Update dependency react-toastify to v9
This MR contains the following updates:
Package | Change | Age | Adoption | Passing | Confidence |
---|---|---|---|---|---|
react-toastify | ^8.0.2 -> ^9.0.0 |
Release Notes
fkhadra/react-toastify
v9.1.2
Release notes
Mainly bug fixes as I'm working on the next major release.
🕷 Bugfixes
v9.1.1
v9.1.0
Release notes
🚀 Features
-
toast.promise
let you typedata
for each state. This is useful when rendering something based on the response.
For example:
interface Success {
username: string
}
interface Error {
err: string
}
toast.promise<Success,Error>(myPromise, {
success: {
render({ data }) {
return data.username;
}
},
error: {
render({ data }) {
return data.err;
}
}
})
-
toast.update
accepts a generic as well to specify the data type
interface TData {
username: string
}
toast.update<TData>(id, {
data: payload,
render({ data }) {
return `hello ${data.username}`
}
})
🕷 Bugfixes
- fix progress countdown stops on mobile #580
- prevent clash with ios native gesture #397
- fix toast when a word is too long #864
- fix missing types declarations in exports #843
- fix
toast.done
not dismissing toast #853 - fix cursor when close on click is false #839
🚨 Deprecated API
Added deprecation notice for the API below. They will be removed in the next major release
API | Why | Alternative |
---|---|---|
onClick |
Not used that much, it's increasing the API surface for nothing | Can easily be implemented in userland. Just render a react component and attach the handler to it. toast(<div onClick={doSomething}>hello</div>)
|
onOpen |
Does not play well with useEffect behavior in react18 (runs twice in dev mode) see #741
|
A better approach is to use toast.onChange see https://fkhadra.github.io/react-toastify/listen-for-changes/
|
onClose |
Does not play well with useEffect behavior in react18 (runs twice in dev mode) see #741
|
A better approach is to use toast.onChange see https://fkhadra.github.io/react-toastify/listen-for-changes/
|
toast.POSITION |
Reduce bundle size :) | Thanks to typescript, we now have autocomplete |
toast.TYPE |
Reduce bundle size :) | Thanks to typescript, we now have autocomplete |
⚙ ️ Chore
- bump dependencies
- refactor internal
v9.0.8
Release notes
🐞 Bugfixes
- fix draggable in strict mode #752
- fix sass import #771
- fix progress bar overflow for WebKit browser(safari, ios...) #791
- fix dismissed toasts while the container is unmounted still appear when the container is mounted #811
- fix AutoClose doesn't work on update #810 #782 #720
Chore
- master branch renamed to main
💖
v9.0.7
Release note
Bugfix
- fix memory leak when multiple containers are used #772, thanks to @roblotter
Chore
- build artifacts are no longer minified. This was causing issues with some bundlers like vitejs #797
v9.0.6
Release note
Bugfix
- fix missing generic in
useNotificationCenter
typing #796
v9.0.5
Release note
🕷 Bugfix
- inject-style has now the correct file-name in bundle #779
v9.0.4
Release note
This release does not work with CRA v4(2 years old) due to the lack of support for es modules. I strongly advise to upgrade to lastest CRA if possible. Alternative solution:
- stick to v9.0.3
- update webpack config https://github.com/reactioncommerce/reaction-component-library/issues/399
Bugfix
- use mjs extensions for es modules #767 thank to @mikebarkmin
v9.0.3
Release notes
🕷 Bugfix
- Fix icon not updating after calling
toast.update
#770
v9.0.2
Release notes
Thanks to @Rambatino, @grit96, @Vl3oss, @eolme for this release
🕷 Bug fixes
- typo #764
- pass toast styles through #763
- add function type in icon prop #761
- closeButton/icon types/rendering #758
- fix empty data object in NotificationCenter #757
v9.0.1
v9.0.0
Release note
🚀 What is new in v9
Say hello to addons! What are addons? So, addons are like DLCs in video games but for react-toastify
useNotificationCenter
The first addon that I would like to introduce is the useNotificationCenter
headless hook! As the name suggests, it let you build your notification center on top of react-toastify. See for yourself
https://user-images.githubusercontent.com/5574267/166549174-48422a61-ff7b-4eeb-b53f-d903db3d1595.mov
Another example using MUI.
Check the documentation for more details.
Stacked toasts
This second addon will be released later. There are a bunch of details that I need to cover and I don't want to release something too buggy. Nevertheless, I'm really excited about it and I think it's worth showcasing anyway.
I call it StackedContainer
for now, it's an alternative to the ToastContainer
component.
💥 Breaking changes
There are 2 breaking changes. The API change for toast.onChange
and the removal of toast.configure
.
toast.onChange
The previous API was returning the numberOfToastDisplayed
and the containerId
. Honestly, this API seems to be incomplete.
For example, with the old API, if I wanted to do some logging this would be very difficult because I don't have enough data to log.
toast.onChange((numberOfToastDisplayed, containerId) => {
logger.info("nothing useful to log, ...")
})
The new API offers more possibilities. The callback will receive a ToastItem
. The item provides a bunch of useful properties status
, content
, id
, data
, etc...
interface ToastItem<Data = {}> {
id: Id;
content: React.ReactNode;
theme?: Theme;
type?: TypeOptions;
isLoading?: boolean;
containerId?: Id;
data: Data;
icon?: React.ReactNode | false;
status: "added" | "removed" | "updated"
}
const unsubscribe = toast.onChange((payload: ToastItem) => {
switch (payload.status) {
case "added":
// new toast added
break;
case "updated":
// toast updated
break;
case "removed":
// toast has been removed
break;
}
});
For example, if I want to log something every time there is a new error notification, with the new API it's trivial
toast.onChange(payload => {
if(payload.status === "added" && payload.type === toast.TYPE.ERROR) {
logger.error({
createdAt: Date.now(),
content: payload.content,
data: payload.data
})
}
})
toast.configure
removal
toast.configure
works fine for most cases but the current implementation has one main issue. It does not work with react context because it creates a new react tree.
That being said, having 2 APIs to do the same thing is a bad thing.
🕷 Bug fixes
Configuration
-
If you want to rebase/retry this MR, check this box
This MR has been generated by Renovate Bot.