From aa98f0781ecf31850b152b7373e6cce0beaee367 Mon Sep 17 00:00:00 2001 From: Sidney Alcantara Date: Fri, 12 Nov 2021 17:23:39 +1100 Subject: [PATCH] Modal: emphasize close button if backdrop click or escape key disabled --- src/components/Modal/index.tsx | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/components/Modal/index.tsx b/src/components/Modal/index.tsx index e8a55dae..cebaf1e4 100644 --- a/src/components/Modal/index.tsx +++ b/src/components/Modal/index.tsx @@ -24,6 +24,7 @@ import ScrollableDialogContent, { export interface IModalProps extends Partial> { onClose: () => void; disableBackdropClick?: boolean; + disableEscapeKeyDown?: boolean; title: ReactNode; header?: ReactNode; @@ -45,6 +46,7 @@ export interface IModalProps extends Partial> { export default function Modal({ onClose, disableBackdropClick, + disableEscapeKeyDown, title, header, footer, @@ -60,13 +62,22 @@ export default function Modal({ const isMobile = useMediaQuery(theme.breakpoints.down("sm")); const [open, setOpen] = useState(true); - const handleClose = (_, reason?: string) => { - if (disableBackdropClick && reason === "backdropClick") return; + const handleClose: NonNullable = (_, reason) => { + if ( + (disableBackdropClick && reason === "backdropClick") || + (disableEscapeKeyDown && reason === "escapeKeyDown") + ) { + setEmphasizeCloseButton(true); + return; + } setOpen(false); + setEmphasizeCloseButton(false); setTimeout(() => onClose(), 300); }; + const [emphasizeCloseButton, setEmphasizeCloseButton] = useState(false); + return (