import React from 'react'; import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; import Button from '@material-ui/core/Button'; import Snackbar from '@material-ui/core/Snackbar'; import IconButton from '@material-ui/core/IconButton'; import CloseIcon from '@material-ui/icons/Close'; const useStyles = makeStyles((theme: Theme) => createStyles({ close: { padding: theme.spacing(0.5), }, }), ); export interface SnackbarMessage { message: string; key: number; } export interface State { open: boolean; snackPack: SnackbarMessage[]; messageInfo?: SnackbarMessage; } export default function ConsecutiveSnackbars() { const [snackPack, setSnackPack] = React.useState([]); const [open, setOpen] = React.useState(false); const [messageInfo, setMessageInfo] = React.useState(undefined); React.useEffect(() => { if (snackPack.length && !messageInfo) { // Set a new snack when we don't have an active one setMessageInfo({ ...snackPack[0] }); setSnackPack((prev) => prev.slice(1)); setOpen(true); } else if (snackPack.length && messageInfo && open) { // Close an active snack when a new one is added setOpen(false); } }, [snackPack, messageInfo, open]); const handleClick = (message: string) => () => { setSnackPack((prev) => [...prev, { message, key: new Date().getTime() }]); }; const handleClose = (event: React.SyntheticEvent | MouseEvent, reason?: string) => { if (reason === 'clickaway') { return; } setOpen(false); }; const handleExited = () => { setMessageInfo(undefined); }; const classes = useStyles(); return (
} />
); }