87 lines
2.2 KiB
JavaScript
87 lines
2.2 KiB
JavaScript
|
import * as React from 'react';
|
||
|
import PropTypes from 'prop-types';
|
||
|
import { styled } from '@mui/material/styles';
|
||
|
import MuiSnackbar from '@mui/material/Snackbar';
|
||
|
import { snackbarContentClasses } from '@mui/material/SnackbarContent';
|
||
|
import Slide from '@mui/material/Slide';
|
||
|
import CloseIcon from '@mui/icons-material/Close';
|
||
|
import InfoIcon from '@mui/icons-material/Info';
|
||
|
import IconButton from '@mui/material/IconButton';
|
||
|
|
||
|
const styles = ({ theme }) => ({
|
||
|
[`& .${snackbarContentClasses.root}`]: {
|
||
|
backgroundColor: theme.palette.secondary.light,
|
||
|
color: theme.palette.text.primary,
|
||
|
flexWrap: 'inherit',
|
||
|
[theme.breakpoints.up('md')]: {
|
||
|
borderTopLeftRadius: 0,
|
||
|
borderTopRightRadius: 0,
|
||
|
borderBottomRightRadius: 4,
|
||
|
borderBottomLeftRadius: 4,
|
||
|
},
|
||
|
},
|
||
|
[`& .${snackbarContentClasses.message}`]: {
|
||
|
fontSize: 16,
|
||
|
display: 'flex',
|
||
|
alignItems: 'center',
|
||
|
},
|
||
|
[`& .${snackbarContentClasses.action}`]: {
|
||
|
paddingLeft: theme.spacing(2),
|
||
|
},
|
||
|
'& .MuiSnackbarContent-info': {
|
||
|
flexShrink: 0,
|
||
|
marginRight: theme.spacing(2),
|
||
|
},
|
||
|
'& .MuiSnackbarContent-close': {
|
||
|
padding: theme.spacing(1),
|
||
|
},
|
||
|
});
|
||
|
|
||
|
function Transition(props) {
|
||
|
return <Slide {...props} direction="down" />;
|
||
|
}
|
||
|
|
||
|
function Snackbar(props) {
|
||
|
const { message, closeFunc, ...other } = props;
|
||
|
const classes = {
|
||
|
info: 'MuiSnackbarContent-info',
|
||
|
close: 'MuiSnackbarContent-close',
|
||
|
};
|
||
|
|
||
|
return (
|
||
|
<MuiSnackbar
|
||
|
anchorOrigin={{ vertical: 'top', horizontal: 'center' }}
|
||
|
autoHideDuration={6000}
|
||
|
TransitionComponent={Transition}
|
||
|
message={
|
||
|
<React.Fragment>
|
||
|
<InfoIcon className={classes.info} />
|
||
|
<span>{message}</span>
|
||
|
</React.Fragment>
|
||
|
}
|
||
|
action={[
|
||
|
<IconButton
|
||
|
key="close"
|
||
|
aria-label="close"
|
||
|
color="inherit"
|
||
|
className={classes.close}
|
||
|
onClick={() => closeFunc && closeFunc()}
|
||
|
>
|
||
|
<CloseIcon />
|
||
|
</IconButton>,
|
||
|
]}
|
||
|
{...other}
|
||
|
/>
|
||
|
);
|
||
|
}
|
||
|
|
||
|
Snackbar.propTypes = {
|
||
|
closeFunc: PropTypes.func,
|
||
|
/**
|
||
|
* The message to display.
|
||
|
*/
|
||
|
message: PropTypes.node,
|
||
|
};
|
||
|
|
||
|
export default styled(Snackbar)(styles);
|