1
1
import React , { useMemo , useCallback , useState , useImperativeHandle , forwardRef } from 'react' ;
2
2
import { StyleSheet } from 'react-native' ;
3
- import { useSharedValue , withTiming , useAnimatedStyle } from 'react-native-reanimated' ;
4
3
import View from '../../components/view' ;
5
4
import Modal from '../../components/modal' ;
6
5
import TransitionView , { TransitionViewAnimationType } from '../TransitionView' ;
7
6
import PanView from '../panView' ;
8
7
import useAlignmentStyle from './helpers/useAlignmentStyle' ;
8
+ import useFadeView from './helpers/useFadeView' ;
9
9
import { ImperativeDialogProps , ImperativeDialogMethods , DialogDirections , DialogDirectionsEnum } from './types' ;
10
10
export { DialogDirections , DialogDirectionsEnum } ;
11
11
12
- import { Colors } from 'style' ;
13
- const DEFAULT_OVERLAY_BACKGROUND_COLORS = Colors . rgba ( Colors . black , 0.2 ) ;
14
-
15
12
const ImperativeDialog = ( props : ImperativeDialogProps , ref : any ) => {
16
13
const {
17
14
initialVisibility = false ,
@@ -23,10 +20,14 @@ const ImperativeDialog = (props: ImperativeDialogProps, ref: any) => {
23
20
testID
24
21
} = props ;
25
22
const transitionAnimatorRef = React . createRef < typeof TransitionView > ( ) ;
26
- const { overlayBackgroundColor = DEFAULT_OVERLAY_BACKGROUND_COLORS , ...otherModalProps } = modalProps ;
27
- const fadeOpacity = useSharedValue < number > ( Number ( initialVisibility ) ) ;
23
+ const { overlayBackgroundColor, ...otherModalProps } = modalProps ;
28
24
const [ visible , setVisible ] = useState ( initialVisibility ) ;
29
25
const { alignmentStyle} = useAlignmentStyle ( props ) ;
26
+ const { FadeView, hideNow, fade} = useFadeView ( {
27
+ initialVisibility,
28
+ testID : `${ testID } .overlayFadingBackground` ,
29
+ overlayBackgroundColor
30
+ } ) ;
30
31
31
32
const open = useCallback ( ( ) => {
32
33
if ( ! visible ) {
@@ -54,16 +55,10 @@ const ImperativeDialog = (props: ImperativeDialogProps, ref: any) => {
54
55
} , [ close ] ) ;
55
56
56
57
const onPanViewDismiss = useCallback ( ( ) => {
57
- fadeOpacity . value = 0 ;
58
+ hideNow ( ) ;
58
59
setVisible ( false ) ;
59
60
onDismiss ?.( ) ;
60
- // eslint-disable-next-line react-hooks/exhaustive-deps
61
- } , [ onDismiss , setVisible ] ) ;
62
-
63
- const onTransitionAnimationStart = useCallback ( ( type : TransitionViewAnimationType ) => {
64
- fadeOpacity . value = withTiming ( Number ( type === 'enter' ) , { duration : 300 } ) ;
65
- // eslint-disable-next-line react-hooks/exhaustive-deps
66
- } , [ ] ) ;
61
+ } , [ hideNow , onDismiss , setVisible ] ) ;
67
62
68
63
const onTransitionAnimationEnd = useCallback ( ( type : TransitionViewAnimationType ) => {
69
64
if ( type === 'exit' ) {
@@ -73,13 +68,6 @@ const ImperativeDialog = (props: ImperativeDialogProps, ref: any) => {
73
68
} ,
74
69
[ onDismiss , setVisible ] ) ;
75
70
76
- const fadeStyle = useAnimatedStyle ( ( ) => {
77
- return {
78
- opacity : fadeOpacity . value ,
79
- backgroundColor : overlayBackgroundColor
80
- } ;
81
- } , [ overlayBackgroundColor ] ) ;
82
-
83
71
const renderDialog = ( ) => {
84
72
{
85
73
/* TODO: remove?
@@ -98,7 +86,7 @@ const ImperativeDialog = (props: ImperativeDialogProps, ref: any) => {
98
86
ref = { transitionAnimatorRef }
99
87
enterFrom = { direction }
100
88
exitTo = { direction }
101
- onAnimationStart = { onTransitionAnimationStart }
89
+ onAnimationStart = { fade }
102
90
onAnimationEnd = { onTransitionAnimationEnd }
103
91
>
104
92
{ children }
@@ -119,8 +107,10 @@ const ImperativeDialog = (props: ImperativeDialogProps, ref: any) => {
119
107
onRequestClose = { onBackgroundPress }
120
108
onDismiss = { undefined }
121
109
>
122
- < View testID = { `${ testID } .overlayFadingBackground` } absF reanimated style = { fadeStyle } pointerEvents = "none" />
123
- < View pointerEvents = { 'none' } style = { alignmentStyle } > { renderDialog ( ) } </ View >
110
+ { FadeView }
111
+ < View pointerEvents = { 'box-none' } style = { alignmentStyle } >
112
+ { renderDialog ( ) }
113
+ </ View >
124
114
</ Modal >
125
115
) ;
126
116
} ;
0 commit comments