1. Display result
2. node modules
@mui/material@^5.10.3
react@18.2.0
3. Reference
https://mui.com/material-ui/react-alert/#basic-alerts
https://smartdevpreneur.com/using-and-styling-the-material-ui-alert-component/
4. Contents
(1) Create CustomAlert
(2) Installation of CustomAlert
(3) Call CustomAlert
(4) Note
5. Create CustomAlert
5.1 Material-UI Alert in a Dialog Component
– redisplay only when open
– severity = {props.AlertObject.severity}
– color = {props.AlertObject.severity}
5.2 CreateAlertObject
– open
– title
– message
– severity
5.3 Add Properties
– autoHideDuration , default = null;
– closeButton , default = true;
6. all code
– CustomAlert.tsx
$ cat CustomAlert.tsx import Dialog from '@mui/material/Dialog'; import Alert from '@mui/material/Alert'; import AlertTitle from '@mui/material/AlertTitle'; import { useState } from 'react'; const CreateAlertObject = (props) => { return new AlertObject_class(props); } export { CreateAlertObject } export default CustomAlert; //--------------------------- function ------------------------------ function CustomAlert(props) { const obj = props.AlertObject; if (obj.open == false) { return; } const handleClose = () => { obj.setOpen(false); return; }; return ( <> <Dialog open={obj.open} onClick={handleClose}> {{obj.getCloseButton() ? (<Alert sx={{ width: '{obj.width}', margin: '{obj.margin}', }} severity={obj.severity} color={obj.severity} onClose={() => {}} > <AlertTitle>{obj.title}</AlertTitle> {obj.message} </Alert>) : (<Alert sx={{ width: '{obj.width}', margin: '{obj.margin}', }} severity={obj.severity} color={obj.severity} onClose={() => {}} > <AlertTitle>{obj.title}</AlertTitle> {obj.message} </Alert>) } </Dialog> </> ); } function AlertObject_class(props) { const [open, setOpen] = useState(false); const [title, setTitle] = useState(''); const [message, setMessage] = useState(''); const [severity, setSeverity] = useState('success'); const [width, setWidth] = useState('100%'); const [margin, setMargin] = useState('auto'); this.open = open; this.setOpen = setOpen; this.title = title; this.setTitle = setTitle; this.message = message; this.setMessage = setMessage; this.severity = severity; this.setSeverity = setSeverity; this.margin = margin; this.setMargin = setMargin; this.display = dispaly.bind(this); this.hidden = hidden.bind(this); this.autoHideDuration = null; this.setAutoHideDuration = (time) => this.autoHideDuration = time; this.initAutoHideDuration = () => this.autoHideDuration = null; this.closeButton = true; this.setCloseButton = (bool) => this.closeButton = bool; this.getCloseButton = () => this.closeButton ; if(props != null) { if(typeof props.autoHideDuration === "number" && props.autoHideDuration > 0) { this.autoHideDuration = props.autoHideDuration; } if(props.closeButton == true || props.closeButton == false ) { this.setCloseButton ( props.closeButton); } } return this; function display(message, title, severity ) { const severitys = [ "success" , "info" , "warning" , "error" ]; if(arguments > 2) { if(!severitys.includes(severity)) { console.log(severity +" is Irregular argument"); return; } } this.setMessage( message ); if(title) this.setTitle( title ); if(severity) this.setSeverity( severity ); this.setOpen( true ); if(this.autoHideDuration != null) { setTimeout(function () { this.setOpen( false ) }.bind(this), this.autoHideDuration); } } function hidden() { if(times) { setTimeout(function () { this.setOpen( false ); }.bind(this) , times); } else { this.setOpen( false ); } } };
7. Installation of CustomAlert
(1) Without autoHideDuration
import CustomAlert, { CreateAlertObject } from './CustomAlert' const AlertObject = CreateAlertObject(); <CustomAlert AlertObject={AlertObject} />
(2) with autoHideDuration
import CustomAlert, { CreateAlertObject } from './CustomAlert' const AlertObject = CreateAlertObject({autoHideDuration:6000}); <CustomAlert AlertObject={AlertObject} />
(3) with autoHideDuration and closeButton
import CustomAlert, { CreateAlertObject } from './CustomAlert' const AlertObject = CreateAlertObject({autoHideDuration:6000, closeButton:false}); <CustomAlert AlertObject={AlertObject} />
8. Call CustomAlert
– message : message
– title : “Warning”
– severity : “success” | “info” | “warning” | “error”
before | after |
---|---|
alert(message) |
AlertObject.display(message, "Warning", "warning"); |
9. Note
But need to create AlertObject for each page.