Files
it-incubator-todolist-ts-17…/src/components/ErrorSnackbar/ErrorSnackbar.tsx

54 lines
1.1 KiB
TypeScript

import React from 'react'
import { useDispatch, useSelector } from 'react-redux'
import { AppRootState } from 'app/store'
import { setAppError } from 'app/app-reducer'
import { AlertProps, Snackbar } from '@mui/material'
import MuiAlert from '@mui/material/Alert'
const Alert = React.forwardRef<HTMLDivElement, AlertProps>(
function Alert(props, ref) {
return (
<MuiAlert
elevation={6}
ref={ref}
variant='filled'
{...props}
/>
)
}
)
export function ErrorSnackbar() {
const error = useSelector<AppRootState, string | null>(
(state) => state.app.error
)
const dispatch = useDispatch()
const handleClose = (
event?: React.SyntheticEvent | Event,
reason?: string
) => {
if (reason === 'clickaway') {
return
}
dispatch(setAppError(null))
}
const isOpen = error !== null
return (
<Snackbar
open={isOpen}
autoHideDuration={6000}
onClose={handleClose}
>
<Alert
onClose={handleClose}
severity='error'
>
{error}
</Alert>
</Snackbar>
)
}