import React, { useEffect, useState } from 'react';
import {
IconButton,
Dialog,
DialogActions,
DialogContent,
DialogContentText,
DialogTitle,
Button,
useMediaQuery,
Tooltip,
SxProps,
} from '@mui/material';
import { useTheme } from '@mui/material/styles';
import ResetIcon from '@mui/icons-material/History';
interface DeleteConfirmationProps {
// Legacy props for backward compatibility (uncontrolled mode)
onDelete?: () => void;
disabled?: boolean;
label?: string;
action?: "delete" | "reset";
color?: "inherit" | "default" | "primary" | "secondary" | "error" | "info" | "success" | "warning" | undefined;
sx?: SxProps;
// New props for controlled mode
open?: boolean;
onClose?: () => void;
onConfirm?: () => void;
title?: string;
message?: string;
// Optional props for button customization in controlled mode
hideButton?: boolean;
confirmButtonText?: string;
cancelButtonText?: string;
}
function capitalizeFirstLetter(str: string) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
const DeleteConfirmation = (props: DeleteConfirmationProps) => {
const {
// Legacy props
onDelete,
disabled,
label,
color,
action = "delete",
// New props
open: controlledOpen,
onClose: controlledOnClose,
onConfirm,
title,
message,
hideButton = false,
confirmButtonText,
cancelButtonText = "Cancel",
sx
} = props;
// Internal state for uncontrolled mode
const [internalOpen, setInternalOpen] = useState(false);
const theme = useTheme();
const fullScreen = useMediaQuery(theme.breakpoints.down('md'));
// Determine if we're in controlled or uncontrolled mode
const isControlled = controlledOpen !== undefined;
const isOpen = isControlled ? controlledOpen : internalOpen;
const handleClickOpen = () => {
if (!isControlled) {
setInternalOpen(true);
}
};
const handleClose = () => {
if (isControlled) {
controlledOnClose?.();
} else {
setInternalOpen(false);
}
};
const handleConfirm = () => {
if (isControlled) {
onConfirm?.();
} else {
onDelete?.();
setInternalOpen(false);
}
};
// Determine dialog content based on mode
const dialogTitle = title || "Confirm Reset";
const dialogMessage = message || `This action will permanently ${capitalizeFirstLetter(action)} ${label ? label.toLowerCase() : "all data"} without the ability to recover it. Are you sure you want to continue?`;
const confirmText = confirmButtonText || `${capitalizeFirstLetter(action)} ${label || "Everything"}`;
return (
<>
{/* Only show button if not hidden (for controlled mode) */}
{!hideButton && (
{/* This span is used to wrap the IconButton to ensure Tooltip works even when disabled */}
)}
>
);
}
export {
DeleteConfirmation
};