Skip to content

Commit c414887

Browse files
authored
Merge pull request #27639 from bernhardoj/fix/27359-modal-visibility
Fix attachment modal doesn't close when pressing search shortcut
2 parents e452e53 + fd015a0 commit c414887

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

src/components/Modal/BaseModal.js

+19-10
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, {forwardRef, useCallback, useEffect, useMemo} from 'react';
1+
import React, {forwardRef, useCallback, useEffect, useMemo, useRef} from 'react';
22
import {View} from 'react-native';
33
import PropTypes from 'prop-types';
44
import ReactNativeModal from 'react-native-modal';
@@ -14,6 +14,7 @@ import variables from '../../styles/variables';
1414
import CONST from '../../CONST';
1515
import ComposerFocusManager from '../../libs/ComposerFocusManager';
1616
import useNativeDriver from '../../libs/useNativeDriver';
17+
import usePrevious from '../../hooks/usePrevious';
1718

1819
const propTypes = {
1920
...modalPropTypes,
@@ -55,6 +56,9 @@ function BaseModal({
5556

5657
const safeAreaInsets = useSafeAreaInsets();
5758

59+
const isVisibleRef = useRef(isVisible);
60+
const wasVisible = usePrevious(isVisible);
61+
5862
/**
5963
* Hides modal
6064
* @param {Boolean} [callHideCallback=true] Should we call the onModalHide callback
@@ -76,20 +80,25 @@ function BaseModal({
7680
);
7781

7882
useEffect(() => {
79-
Modal.willAlertModalBecomeVisible(isVisible);
80-
81-
// To handle closing any modal already visible when this modal is mounted, i.e. PopoverReportActionContextMenu
82-
Modal.setCloseModal(isVisible ? onClose : null);
83-
}, [isVisible, onClose]);
83+
isVisibleRef.current = isVisible;
84+
if (isVisible) {
85+
Modal.willAlertModalBecomeVisible(true);
86+
// To handle closing any modal already visible when this modal is mounted, i.e. PopoverReportActionContextMenu
87+
Modal.setCloseModal(onClose);
88+
} else if (wasVisible && !isVisible) {
89+
Modal.willAlertModalBecomeVisible(false);
90+
Modal.setCloseModal(null);
91+
}
92+
}, [isVisible, wasVisible, onClose]);
8493

8594
useEffect(
8695
() => () => {
8796
// Only trigger onClose and setModalVisibility if the modal is unmounting while visible.
88-
if (isVisible) {
89-
hideModal(true);
90-
Modal.willAlertModalBecomeVisible(false);
97+
if (!isVisibleRef.current) {
98+
return;
9199
}
92-
100+
hideModal(true);
101+
Modal.willAlertModalBecomeVisible(false);
93102
// To prevent closing any modal already unmounted when this modal still remains as visible state
94103
Modal.setCloseModal(null);
95104
},

0 commit comments

Comments
 (0)