UNPKG

react-garden

Version:

React + TypeScript + ThreeJS app using Material UI on NextJS, Apollo Client, GraphQL + WordPress REST APIs, for ThreeD web development.. a part of the threed.ai code family.

71 lines (63 loc) 2.02 kB
// ** React Imports import { Fragment, useEffect, useState } from 'react' // ** MUI Imports import Alert from '@mui/material/Alert' import Button from '@mui/material/Button' import Snackbar from '@mui/material/Snackbar' const SnackbarConsecutive = () => { // ** States const [open, setOpen] = useState(false) const [snackPack, setSnackPack] = useState([]) const [messageInfo, setMessageInfo] = useState(undefined) useEffect(() => { if (snackPack.length && !messageInfo) { setOpen(true) setSnackPack(prev => prev.slice(1)) setMessageInfo({ ...snackPack[0] }) } else if (snackPack.length && messageInfo && open) { setOpen(false) } }, [snackPack, messageInfo, open]) const handleClick = message => () => { setSnackPack(prev => [...prev, { message, key: new Date().getTime() }]) } const handleClose = (event, reason) => { if (reason === 'clickaway') { return } setOpen(false) } const handleExited = () => { setMessageInfo(undefined) } return ( <> <div className='demo-space-x'> <Button variant='outlined' onClick={handleClick('success')}> Success Alert </Button> <Button variant='outlined' onClick={handleClick('error')}> Error Alert </Button> </div> <Snackbar open={open} onClose={handleClose} autoHideDuration={3000} TransitionProps={{ onExited: handleExited }} key={messageInfo ? messageInfo.key : undefined} message={messageInfo ? messageInfo.message : undefined} > <Alert elevation={3} variant='filled' onClose={handleClose} severity={messageInfo?.message === 'success' ? 'success' : 'error'} > This is {messageInfo?.message === 'success' ? 'a success' : 'an error'} message! </Alert> </Snackbar> </> ) } export default SnackbarConsecutive