react/src/components/Flash.js
import React, { useEffect, useState } from 'react';
import { useDispatch, useSelector } from 'react-redux'
import Snackbar from '@material-ui/core/Snackbar';
import MuiAlert from '@material-ui/lab/Alert';
import { makeStyles } from '@material-ui/core/styles';
import { isEmpty } from 'lodash'
function Alert(props) {
return <MuiAlert elevation={6} variant="filled" {...props} />;
}
const useStyles = makeStyles((theme) => ({
root: {
width: '100%',
'& > * + *': {
marginTop: theme.spacing(2),
},
},
}));
export default function Flash() {
const classes = useStyles();
const [open, setOpen] = useState(false);
const error = useSelector(state => state.error);
const dispatch = useDispatch()
const handleClose = (event, reason) => {
if (reason === 'clickaway') {
return;
}
dispatch({type: 'ERROR_DISPLAYED'})
setOpen(false);
};
useEffect(() => {
setOpen(!isEmpty(error))
}, [error]);
return (
<div className={classes.root}>
<Snackbar anchorOrigin={{ vertical: 'top', horizontal: 'center'}} open={open} autoHideDuration={6000} onClose={handleClose}>
<Alert onClose={handleClose} severity="error">
{error}
</Alert>
</Snackbar>
</div>
);
}