From 7802618fa8d396945bc61aa6ab43a46f3ec85b7c Mon Sep 17 00:00:00 2001 From: daledah Date: Thu, 10 Apr 2025 14:59:25 +0700 Subject: [PATCH] fix: keep validate code modal when open test tool menu --- src/components/Modal/BaseModal.tsx | 7 +++++-- src/components/Modal/types.ts | 5 +++++ src/components/TestToolsModal.tsx | 4 ++++ src/components/ValidateCodeActionModal/index.tsx | 1 + 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/components/Modal/BaseModal.tsx b/src/components/Modal/BaseModal.tsx index d93bd11004f6..bc60789de7b1 100644 --- a/src/components/Modal/BaseModal.tsx +++ b/src/components/Modal/BaseModal.tsx @@ -80,6 +80,7 @@ function BaseModal( shouldPreventScrollOnFocus = false, enableEdgeToEdgeBottomSafeAreaPadding = false, shouldApplySidePanelOffset = type === CONST.MODAL.MODAL_TYPE.RIGHT_DOCKED, + canBeClosedByOtherModal = true, }: BaseModalProps, ref: React.ForwardedRef, ) { @@ -135,7 +136,9 @@ function BaseModal( if (isVisible) { willAlertModalBecomeVisible(true, type === CONST.MODAL.MODAL_TYPE.POPOVER || type === CONST.MODAL.MODAL_TYPE.BOTTOM_DOCKED); // To handle closing any modal already visible when this modal is mounted, i.e. PopoverReportActionContextMenu - removeOnCloseListener = setCloseModal(onClose); + if (canBeClosedByOtherModal) { + removeOnCloseListener = setCloseModal(onClose); + } } return () => { @@ -144,7 +147,7 @@ function BaseModal( } removeOnCloseListener(); }; - }, [isVisible, wasVisible, onClose, type]); + }, [isVisible, wasVisible, onClose, type, canBeClosedByOtherModal]); useEffect(() => { hideModalCallbackRef.current = hideModal; diff --git a/src/components/Modal/types.ts b/src/components/Modal/types.ts index e19fcbed9f13..103d836961cd 100644 --- a/src/components/Modal/types.ts +++ b/src/components/Modal/types.ts @@ -123,6 +123,11 @@ type BaseModalProps = Partial & * This is used to adjust the modal position when the Side Panel is open. */ shouldApplySidePanelOffset?: boolean; + + /** + * Whether the modal can be closed by other modals + */ + canBeClosedByOtherModal?: boolean; }; export default BaseModalProps; diff --git a/src/components/TestToolsModal.tsx b/src/components/TestToolsModal.tsx index bfa6af217368..43743dc61014 100644 --- a/src/components/TestToolsModal.tsx +++ b/src/components/TestToolsModal.tsx @@ -38,6 +38,10 @@ function TestToolsModal() { const isAuthenticated = useIsAuthenticated(); const route = getRouteBasedOnAuthStatus(isAuthenticated, activeRoute); + if (!isTestToolsModalOpen) { + return null; + } + return (