mirror of
https://github.com/Kingsrook/qqq-frontend-material-dashboard.git
synced 2025-07-18 05:10:45 +00:00
78 lines
2.2 KiB
TypeScript
78 lines
2.2 KiB
TypeScript
/**
|
|
=========================================================
|
|
* Material Dashboard 2 PRO React TS - v1.0.0
|
|
=========================================================
|
|
|
|
* Product Page: https://www.creative-tim.com/product/material-dashboard-2-pro-react-ts
|
|
* Copyright 2022 Creative Tim (https://www.creative-tim.com)
|
|
|
|
Coded by www.creative-tim.com
|
|
|
|
=========================================================
|
|
|
|
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
*/
|
|
|
|
import { useState, ReactNode } from "react";
|
|
|
|
// @mui material components
|
|
import Fade from "@mui/material/Fade";
|
|
|
|
// Material Dashboard 2 PRO React TS components
|
|
import MDBox from "components/MDBox";
|
|
|
|
// Custom styles for the MDAlert
|
|
import MDAlertRoot from "components/MDAlert/MDAlertRoot";
|
|
import MDAlertCloseIcon from "components/MDAlert/MDAlertCloseIcon";
|
|
|
|
// Declaring props types for MDAlert
|
|
interface Props {
|
|
color?: "primary" | "secondary" | "info" | "success" | "warning" | "error" | "light" | "dark";
|
|
dismissible?: boolean;
|
|
children: ReactNode;
|
|
[key: string]: any;
|
|
}
|
|
|
|
function MDAlert({ color, dismissible, children, ...rest }: Props): JSX.Element | null {
|
|
const [alertStatus, setAlertStatus] = useState("mount");
|
|
|
|
const handleAlertStatus = () => setAlertStatus("fadeOut");
|
|
|
|
// The base template for the alert
|
|
const alertTemplate: any = (mount: boolean = true) => (
|
|
<Fade in={mount} timeout={300}>
|
|
<MDAlertRoot ownerState={{ color }} {...rest}>
|
|
<MDBox display="flex" alignItems="center" color="white">
|
|
{children}
|
|
</MDBox>
|
|
{dismissible ? (
|
|
<MDAlertCloseIcon onClick={mount ? handleAlertStatus : undefined}>
|
|
×
|
|
</MDAlertCloseIcon>
|
|
) : null}
|
|
</MDAlertRoot>
|
|
</Fade>
|
|
);
|
|
|
|
switch (true) {
|
|
case alertStatus === "mount":
|
|
return alertTemplate();
|
|
case alertStatus === "fadeOut":
|
|
setTimeout(() => setAlertStatus("unmount"), 400);
|
|
return alertTemplate(false);
|
|
default:
|
|
alertTemplate();
|
|
break;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
// Declaring default props for MDAlert
|
|
MDAlert.defaultProps = {
|
|
color: "info",
|
|
dismissible: false,
|
|
};
|
|
|
|
export default MDAlert;
|