1
1
import noop from 'lodash/noop' ;
2
- import React , { useCallback , useEffect , useMemo , useState } from 'react' ;
2
+ import React , { useCallback , useEffect , useMemo , useRef , useState } from 'react' ;
3
3
import type { ViewStyle } from 'react-native' ;
4
- import { BackHandler , DeviceEventEmitter , Dimensions , KeyboardAvoidingView , Modal , View } from 'react-native' ;
4
+ import { BackHandler , DeviceEventEmitter , Dimensions , InteractionManager , KeyboardAvoidingView , Modal , View } from 'react-native' ;
5
5
import { LayoutAnimationConfig } from 'react-native-reanimated' ;
6
6
import useThemeStyles from '@hooks/useThemeStyles' ;
7
7
import getPlatform from '@libs/getPlatform' ;
@@ -41,6 +41,7 @@ function BottomDockedModal({
41
41
const [ isTransitioning , setIsTransitioning ] = useState ( false ) ;
42
42
const [ deviceWidth , setDeviceWidth ] = useState ( ( ) => Dimensions . get ( 'window' ) . width ) ;
43
43
const [ deviceHeight , setDeviceHeight ] = useState ( ( ) => Dimensions . get ( 'window' ) . height ) ;
44
+ const handleRef = useRef < number > ( ) ;
44
45
45
46
const styles = useThemeStyles ( ) ;
46
47
@@ -108,11 +109,13 @@ function BottomDockedModal({
108
109
109
110
useEffect ( ( ) => {
110
111
if ( isVisible && ! isContainerOpen && ! isTransitioning ) {
112
+ handleRef . current = InteractionManager . createInteractionHandle ( ) ;
111
113
onModalWillShow ( ) ;
112
114
113
115
setIsVisibleState ( true ) ;
114
116
setIsTransitioning ( true ) ;
115
117
} else if ( ! isVisible && isContainerOpen && ! isTransitioning ) {
118
+ handleRef . current = InteractionManager . createInteractionHandle ( ) ;
116
119
onModalWillHide ( ) ;
117
120
118
121
setIsVisibleState ( false ) ;
@@ -133,12 +136,18 @@ function BottomDockedModal({
133
136
const onOpenCallBack = useCallback ( ( ) => {
134
137
setIsTransitioning ( false ) ;
135
138
setIsContainerOpen ( true ) ;
139
+ if ( handleRef . current ) {
140
+ InteractionManager . clearInteractionHandle ( handleRef . current ) ;
141
+ }
136
142
onModalShow ( ) ;
137
143
} , [ onModalShow ] ) ;
138
144
139
145
const onCloseCallBack = useCallback ( ( ) => {
140
146
setIsTransitioning ( false ) ;
141
147
setIsContainerOpen ( false ) ;
148
+ if ( handleRef . current ) {
149
+ InteractionManager . clearInteractionHandle ( handleRef . current ) ;
150
+ }
142
151
if ( getPlatform ( ) !== CONST . PLATFORM . IOS ) {
143
152
onModalHide ( ) ;
144
153
}
0 commit comments