Skip to content

Commit

Permalink
Merge pull request #27639 from bernhardoj/fix/27359-modal-visibility
Browse files Browse the repository at this point in the history
Fix attachment modal doesn't close when pressing search shortcut
  • Loading branch information
AndrewGable authored Sep 19, 2023
2 parents e452e53 + fd015a0 commit c414887
Showing 1 changed file with 19 additions and 10 deletions.
29 changes: 19 additions & 10 deletions src/components/Modal/BaseModal.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, {forwardRef, useCallback, useEffect, useMemo} from 'react';
import React, {forwardRef, useCallback, useEffect, useMemo, useRef} from 'react';
import {View} from 'react-native';
import PropTypes from 'prop-types';
import ReactNativeModal from 'react-native-modal';
Expand All @@ -14,6 +14,7 @@ import variables from '../../styles/variables';
import CONST from '../../CONST';
import ComposerFocusManager from '../../libs/ComposerFocusManager';
import useNativeDriver from '../../libs/useNativeDriver';
import usePrevious from '../../hooks/usePrevious';

const propTypes = {
...modalPropTypes,
Expand Down Expand Up @@ -55,6 +56,9 @@ function BaseModal({

const safeAreaInsets = useSafeAreaInsets();

const isVisibleRef = useRef(isVisible);
const wasVisible = usePrevious(isVisible);

/**
* Hides modal
* @param {Boolean} [callHideCallback=true] Should we call the onModalHide callback
Expand All @@ -76,20 +80,25 @@ function BaseModal({
);

useEffect(() => {
Modal.willAlertModalBecomeVisible(isVisible);

// To handle closing any modal already visible when this modal is mounted, i.e. PopoverReportActionContextMenu
Modal.setCloseModal(isVisible ? onClose : null);
}, [isVisible, onClose]);
isVisibleRef.current = isVisible;
if (isVisible) {
Modal.willAlertModalBecomeVisible(true);
// To handle closing any modal already visible when this modal is mounted, i.e. PopoverReportActionContextMenu
Modal.setCloseModal(onClose);
} else if (wasVisible && !isVisible) {
Modal.willAlertModalBecomeVisible(false);
Modal.setCloseModal(null);
}
}, [isVisible, wasVisible, onClose]);

useEffect(
() => () => {
// Only trigger onClose and setModalVisibility if the modal is unmounting while visible.
if (isVisible) {
hideModal(true);
Modal.willAlertModalBecomeVisible(false);
if (!isVisibleRef.current) {
return;
}

hideModal(true);
Modal.willAlertModalBecomeVisible(false);
// To prevent closing any modal already unmounted when this modal still remains as visible state
Modal.setCloseModal(null);
},
Expand Down

0 comments on commit c414887

Please sign in to comment.