You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

53 lines
1.2 KiB

import { useState, createContext, useContext } from 'react';
import { Snackbar, Alert } from '@mui/material';
const SnackbarContext = createContext();
const SnackbarProvider = ({ children }) => {
const initialSnack = { show: false, severity: 'info', msg: '' };
const [snack, setSnack] = useState(initialSnack);
const showSnackBar = (severity, msg) => {
setSnack({
...snack,
show: true,
severity,
msg,
});
};
const handleSnackClose = (event, reason) => {
if (reason === 'clickaway') return;
setSnack(initialSnack);
};
return (
<SnackbarContext.Provider value={{ showSnackBar }}>
<Snackbar
open={snack.show}
autoHideDuration={6000}
onClose={handleSnackClose}
>
<Alert
onClose={handleSnackClose}
severity={snack.severity}
sx={{ width: '100%' }}
>
{snack.msg}
</Alert>
</Snackbar>
{children}
</SnackbarContext.Provider>
);
};
const useSnackbar = () => {
const context = useContext(SnackbarContext);
if (!context)
throw new Error('useSnackbar must be used within an SnackBarProvider');
return context;
};
export { SnackbarProvider, useSnackbar };