11import { ReactElement , ReactNode , useCallback , useEffect , useMemo , useRef , useState } from "react" ;
2- import { Dimensions , InteractionManager , LayoutChangeEvent , Modal , Pressable } from "react-native" ;
2+ import { Dimensions , LayoutChangeEvent , Modal , Pressable } from "react-native" ;
33import BottomSheet , {
44 BottomSheetBackdrop ,
55 BottomSheetBackdropProps ,
@@ -14,8 +14,6 @@ interface CustomModalSheetProps {
1414 styles : BottomSheetStyle ;
1515}
1616
17- let lastIndexRef = - 1 ;
18-
1917export const CustomModalSheet = ( props : CustomModalSheetProps ) : ReactElement => {
2018 const bottomSheetRef = useRef < BottomSheet > ( null ) ;
2119 const [ contentHeight , setContentHeight ] = useState ( 0 ) ;
@@ -74,15 +72,10 @@ export const CustomModalSheet = (props: CustomModalSheetProps): ReactElement =>
7472 return ;
7573 }
7674
77- const hasOpened = lastIndexRef === - 1 && index === 0 ;
7875 const hasClosed = index === - 1 ;
79- lastIndexRef = index ;
80-
81- if ( hasOpened ) {
82- props . triggerAttribute ?. setValue ( true ) ;
83- }
84- if ( hasClosed ) {
76+ if ( hasClosed && props . triggerAttribute ?. value ) {
8577 props . triggerAttribute ?. setValue ( false ) ;
78+ setCurrentStatus ( false ) ;
8679 }
8780 } ,
8881 [ isAvailable , props . triggerAttribute ]
@@ -92,13 +85,18 @@ export const CustomModalSheet = (props: CustomModalSheetProps): ReactElement =>
9285 if ( ! isAvailable ) {
9386 return ;
9487 }
95- if ( props . triggerAttribute ?. value && ! currentStatus ) {
96- InteractionManager . runAfterInteractions ( ( ) => setCurrentStatus ( true ) ) ;
97- } else if ( ! props . triggerAttribute ?. value && currentStatus ) {
88+
89+ const shouldBeOpen = props . triggerAttribute ?. value === true ;
90+
91+ if ( shouldBeOpen && ! currentStatus ) {
92+ requestAnimationFrame ( ( ) => {
93+ setCurrentStatus ( true ) ;
94+ } ) ;
95+ } else if ( ! shouldBeOpen && currentStatus ) {
9896 bottomSheetRef . current ?. close ( ) ;
9997 setCurrentStatus ( false ) ;
10098 }
101- } , [ props . triggerAttribute , currentStatus , isAvailable ] ) ;
99+ } , [ props . triggerAttribute ?. value , currentStatus , isAvailable ] ) ;
102100
103101 return (
104102 < Modal onRequestClose = { close } transparent visible = { ! ! isOpen } >
0 commit comments