Hoy vamos a aprender como utilizar un Custom Alert Dialog en React.

Para crear este Dialog, voy a utilizar la librería de Mui (https://mui.com/)
Primero tendremos que instalarla:
npm install @mui/material @emotion/react @emotion/styled
Ahora vamos a crear nuestro componente al que llamaremos CustomAlert.js
import React, { useState, useEffect } from 'react';
import Button from '@mui/material/Button';
import Dialog from '@mui/material/Dialog';
import DialogActions from '@mui/material/DialogActions';
import DialogContent from '@mui/material/DialogContent';
import DialogContentText from '@mui/material/DialogContentText';
import DialogTitle from '@mui/material/DialogTitle';
let setOpenExt;
let setParamsExt;
const AlertDialog = () => {
const [open, setOpen] = useState(false);
const [alertParams, setAlertParams] = useState({
customTitle: '',
customContent: '',
customCancelText: '',
customAcceptText: '',
displayCancelButton: true,
onCancel: () => {},
onAccept: () => {},
});
useEffect(() => {
setParamsExt = (params) => {
setAlertParams(params);
};
setOpenExt = setOpen;
}, []);
const handleClose = () => {
setOpen(false);
if (alertParams.onCancel) {
alertParams.onCancel();
}
};
const handleAgree = () => {
handleClose();
if (alertParams.onAccept) {
alertParams.onAccept();
}
};
return (
<React.Fragment>
<Dialog
open={open}
onClose={handleClose}
aria-labelledby="alert-dialog-title"
aria-describedby="alert-dialog-description"
PaperProps={{
style: {
maxWidth: '400px',
width: '100%',
},
}}
>
<DialogTitle id="alert-dialog-title">
{alertParams.customTitle}
</DialogTitle>
<DialogContent>
<DialogContentText id="alert-dialog-description">
{alertParams.customContent}
</DialogContentText>
</DialogContent>
<DialogActions>
{alertParams.displayCancelButton && (
<Button onClick={handleClose}>
{alertParams.customCancelText}
</Button>
)}
<Button onClick={handleAgree} autoFocus>
{alertParams.customAcceptText || 'Aceptar'}
</Button>
</DialogActions>
</Dialog>
</React.Fragment>
);
};
export default AlertDialog;
export const mostrarAlerta = (params) => {
setParamsExt(params);
setOpenExt(true);
};
Para utilizar nuestro alert podemos hacer lo siguiente:
import React from 'react';
import AlertDialog, { mostrarAlerta } from './CustomAlert'; // Ajusta la ruta según la estructura de tu proyecto
const MiScreen = () => {
const handleMostrarAlerta = () => {
mostrarAlerta({
customTitle: 'Título de la alerta',
customContent: 'Contenido de la alerta',
customCancelText: 'Cancelar',
customAcceptText: 'Aceptar',
displayCancelButton: true,
onCancel: () => {
console.log('Acción cancelada');
},
onAccept: () => {
console.log('Acción aceptada');
},
});
};
return (
<div>
<AlertDialog/>
<h1>Mi Screen</h1>
<button onClick={handleMostrarAlerta}>Mostrar Alerta</button>
{/* Puedes agregar más contenido del screen aquí */}
</div>
);
};
export default MiScreen;
Recuerda que para utilizarlo, deberás importar el alert:
import AlertDialog, { mostrarAlerta } from './CustomAlert'; // Asegúrate de ajustar la ruta correcta
Después crear el componente en la pantalla:
<AlertDialog/>
Y puedes usarlo de esta forma:
mostrarAlerta({
customTitle: 'Título de la alerta',
customContent: 'Contenido de la alerta',
customCancelText: 'Cancelar',
customAcceptText: 'Aceptar',
displayCancelButton: true,
onCancel: () => {
console.log('Acción cancelada');
},
onAccept: () => {
console.log('Acción aceptada');
},
});

Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.