From f9743fd04bf96dd7ed3bd0ea0626bcd5ed811e18 Mon Sep 17 00:00:00 2001 From: Enrico Ros Date: Mon, 23 Jun 2025 11:38:23 -0700 Subject: [PATCH] GoodModal: options to not react on Backdrop or Escape closes --- src/common/components/modals/GoodModal.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/common/components/modals/GoodModal.tsx b/src/common/components/modals/GoodModal.tsx index c00ced8b8..2f9d50f03 100644 --- a/src/common/components/modals/GoodModal.tsx +++ b/src/common/components/modals/GoodModal.tsx @@ -30,6 +30,8 @@ export function GoodModal(props: { autoOverflow?: boolean, open: boolean, onClose?: ((event: React.BaseSyntheticEvent, reason: 'backdropClick' | 'escapeKeyDown' | 'closeClick') => void) | undefined, + disableBackdropClose?: boolean, // if true, the backdrop will not close the modal on click + disableEscapeKeyClose?: boolean, // if true, the escape key will not close the modal hideBottomClose?: boolean, darkBottomClose?: boolean, startButton?: React.JSX.Element, @@ -77,18 +79,19 @@ export function GoodModal(props: { const handleOnClose = React.useCallback((event: React.BaseSyntheticEvent, reason: 'backdropClick' | 'escapeKeyDown' | 'closeClick') => { // ignore clicks on the backdrop that started from within the dialog - const ignoreDragOnBackdrop = reason === 'backdropClick' && dragFromDialogRef.current; + const ignoreDragOnBackdrop = reason === 'backdropClick' && (dragFromDialogRef.current || !!props.disableBackdropClose); dragFromDialogRef.current = false; if (ignoreDragOnBackdrop) return; // normal propagation onClose?.(event, reason); - }, [onClose]); + }, [onClose, props.disableBackdropClose]); return (