import Button from "@material-ui/core/Button"; import IconButton from "@material-ui/core/IconButton"; import Snackbar from "@material-ui/core/Snackbar"; import Typography from "@material-ui/core/Typography"; import CloseIcon from "@material-ui/icons/Close"; import classNames from "classnames"; import React, { useState } from "react"; import { FormattedMessage } from "react-intl"; import { IMessage, MessageContext } from "./"; import { useStyles } from "./styles"; interface Message extends IMessage { key: string; } export const MessageManager = props => { const { children } = props; const [message, setMessage] = useState({ key: "0", onUndo: undefined, status: "info", text: "" }); const [opened, setOpened] = useState(false); const classes = useStyles({}); const { action, autohide = 3000, title, text, key, onUndo, status = "info" } = message; const queue = []; const handleClose = (_, reason) => { if (reason === "clickaway") { return; } setOpened(false); }; const processQueue = () => { if (queue.length > 0) { setMessage(queue.shift()); setOpened(true); } }; const handleExited = () => { processQueue(); }; const pushMessage = (message: IMessage) => { queue.push({ key: new Date().getTime(), ...message }); if (opened) { setOpened(false); } else { processQueue(); } }; return ( <> {title && ( {title} )} {text} } title={title} action={[ !!onUndo ? ( ) : ( undefined ), !!action ? ( ) : ( undefined ), ,
]} /> {children} ); }; export default MessageManager;