flowise / packages /ui /src /utils /useNotifier.js
rohan13's picture
Flowise Changes
4114d85
import React from 'react'
import { useDispatch, useSelector } from 'react-redux'
import { useSnackbar } from 'notistack'
import { removeSnackbar } from 'store/actions'
let displayed = []
const useNotifier = () => {
const dispatch = useDispatch()
const notifier = useSelector((state) => state.notifier)
const { notifications } = notifier
const { enqueueSnackbar, closeSnackbar } = useSnackbar()
const storeDisplayed = (id) => {
displayed = [...displayed, id]
}
const removeDisplayed = (id) => {
displayed = [...displayed.filter((key) => id !== key)]
}
React.useEffect(() => {
notifications.forEach(({ key, message, options = {}, dismissed = false }) => {
if (dismissed) {
// dismiss snackbar using notistack
closeSnackbar(key)
return
}
// do nothing if snackbar is already displayed
if (displayed.includes(key)) return
// display snackbar using notistack
enqueueSnackbar(message, {
key,
...options,
onClose: (event, reason, myKey) => {
if (options.onClose) {
options.onClose(event, reason, myKey)
}
},
onExited: (event, myKey) => {
// remove this snackbar from redux store
dispatch(removeSnackbar(myKey))
removeDisplayed(myKey)
}
})
// keep track of snackbars that we've displayed
storeDisplayed(key)
})
}, [notifications, closeSnackbar, enqueueSnackbar, dispatch])
}
export default useNotifier