Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

73 рядки
1.9 KiB

  1. import React from "react";
  2. // nodejs library to set properties for components
  3. import PropTypes from "prop-types";
  4. // @material-ui/core components
  5. import { makeStyles } from "@material-ui/core/styles";
  6. import Snack from "@material-ui/core/SnackbarContent";
  7. import IconButton from "@material-ui/core/IconButton";
  8. import Icon from "@material-ui/core/Icon";
  9. // @material-ui/icons
  10. import Close from "@material-ui/icons/Close";
  11. // core components
  12. import styles from "assets/jss/nextjs-material-kit/components/snackbarContentStyle.js";
  13. const useStyles = makeStyles(styles);
  14. export default function SnackbarContent(props) {
  15. const { message, color, close, icon } = props;
  16. const classes = useStyles();
  17. var action = [];
  18. const closeAlert = () => {
  19. setAlert(null);
  20. };
  21. if (close !== undefined) {
  22. action = [
  23. <IconButton
  24. className={classes.iconButton}
  25. key="close"
  26. aria-label="Close"
  27. color="inherit"
  28. onClick={closeAlert}
  29. >
  30. <Close className={classes.close} />
  31. </IconButton>
  32. ];
  33. }
  34. let snackIcon = null;
  35. switch (typeof icon) {
  36. case "object":
  37. snackIcon = <props.icon className={classes.icon} />;
  38. break;
  39. case "string":
  40. snackIcon = <Icon className={classes.icon}>{props.icon}</Icon>;
  41. break;
  42. default:
  43. snackIcon = null;
  44. break;
  45. }
  46. const [alert, setAlert] = React.useState(
  47. <Snack
  48. message={
  49. <div>
  50. {snackIcon}
  51. {message}
  52. {close !== undefined ? action : null}
  53. </div>
  54. }
  55. classes={{
  56. root: classes.root + " " + classes[color],
  57. message: classes.message + " " + classes.container
  58. }}
  59. />
  60. );
  61. return alert;
  62. }
  63. SnackbarContent.propTypes = {
  64. message: PropTypes.node.isRequired,
  65. color: PropTypes.oneOf(["info", "success", "warning", "danger", "primary"]),
  66. close: PropTypes.bool,
  67. icon: PropTypes.oneOfType([PropTypes.object, PropTypes.string])
  68. };