1- import  {  createElement ,  ReactNode ,  ReactElement ,  useCallback ,  useState ,  useRef ,  Children  }  from  "react" ; 
1+ import  {  createElement ,  ReactNode ,  ReactElement ,  useCallback ,  useState ,  useRef ,  Children ,   useMemo  }  from  "react" ; 
22import  {  Dimensions ,  LayoutChangeEvent ,  SafeAreaView ,  StyleSheet ,  View  }  from  "react-native" ; 
33import  BottomSheet ,  {  BottomSheetView  }  from  "@gorhom/bottom-sheet" ; 
44import  {  BottomSheetStyle  }  from  "../ui/Styles" ; 
@@ -26,23 +26,29 @@ export const ExpandingDrawer = (props: ExpandingDrawerProps): ReactElement => {
2626    const  isSmallContentValid  =  Children . count ( props . smallContent )  >  0 ; 
2727    const  isLargeContentValid  =  Children . count ( props . largeContent )  >  0 ; 
2828
29-     const  onLayoutHandlerHeader  =  ( event : LayoutChangeEvent ) : void =>  { 
30-         const  height  =  event . nativeEvent . layout . height ; 
31-         if  ( height  >  0  &&  height  <=  maxHeight )  { 
32-             setHeightHeader ( height ) ; 
33-         } 
34-     } ; 
29+     const  onLayoutHandlerHeader  =  useCallback ( 
30+         ( event : LayoutChangeEvent ) : void =>  { 
31+             const  height  =  event . nativeEvent . layout . height ; 
32+             if  ( height  >  0  &&  height  <=  maxHeight )  { 
33+                 setHeightHeader ( height ) ; 
34+             } 
35+         } , 
36+         [ maxHeight ] 
37+     ) ; 
3538
36-     const  onLayoutHandlerContent  =  ( event : LayoutChangeEvent ) : void =>  { 
37-         const  height  =  event . nativeEvent . layout . height ; 
38-         if  ( height  >  0 )  { 
39-             if  ( height  <=  maxHeight )  { 
40-                 setHeightContent ( height ) ; 
41-             }  else  if  ( ! props . fullscreenContent )  { 
42-                 setHeightContent ( maxHeight ) ; 
39+     const  onLayoutHandlerContent  =  useCallback ( 
40+         ( event : LayoutChangeEvent ) : void =>  { 
41+             const  height  =  event . nativeEvent . layout . height ; 
42+             if  ( height  >  0 )  { 
43+                 if  ( height  <=  maxHeight )  { 
44+                     setHeightContent ( height ) ; 
45+                 }  else  if  ( ! props . fullscreenContent )  { 
46+                     setHeightContent ( maxHeight ) ; 
47+                 } 
4348            } 
44-         } 
45-     } ; 
49+         } , 
50+         [ maxHeight ,  props . fullscreenContent ] 
51+     ) ; 
4652
4753    const  onLayoutFullscreenHandler  =  ( event : LayoutChangeEvent ) : void =>  { 
4854        const  height  =  event . nativeEvent . layout . height ; 
@@ -54,6 +60,19 @@ export const ExpandingDrawer = (props: ExpandingDrawerProps): ReactElement => {
5460    const  containerStyle  = 
5561        props . fullscreenContent  &&  isOpen  ? props . styles . containerWhenExpandedFullscreen  : props . styles . container ; 
5662
63+     const  snapPoints  =  useMemo ( ( )  =>  { 
64+         if  ( props . fullscreenContent  &&  heightContent )  { 
65+             return  [ fullscreenHeight ,  heightContent ,  heightHeader ] ; 
66+         } 
67+         if  ( props . fullscreenContent )  { 
68+             return  [ fullscreenHeight ,  heightHeader ] ; 
69+         } 
70+         if  ( isLargeContentValid )  { 
71+             return  [ heightContent ,  heightHeader ] ; 
72+         } 
73+         return  [ heightHeader ] ; 
74+     } ,  [ props . fullscreenContent ,  heightContent ,  fullscreenHeight ,  heightHeader ,  isLargeContentValid ] ) ; 
75+ 
5776    const  renderContent  =  useCallback ( ( ) : ReactNode  =>  { 
5877        const  content  =  ( 
5978            < View  onLayout = { onLayoutHandlerContent }  pointerEvents = "box-none" > 
@@ -77,7 +96,15 @@ export const ExpandingDrawer = (props: ExpandingDrawerProps): ReactElement => {
7796            ) ; 
7897        } 
7998        return  content ; 
80-     } ,  [ props . smallContent ,  props . largeContent ,  props . fullscreenContent ,  isOpen ,  fullscreenHeight ] ) ; 
99+     } ,  [ 
100+         props . smallContent , 
101+         props . largeContent , 
102+         props . fullscreenContent , 
103+         fullscreenHeight , 
104+         isSmallContentValid , 
105+         onLayoutHandlerContent , 
106+         onLayoutHandlerHeader 
107+     ] ) ; 
81108
82109    if  ( props . fullscreenContent  &&  fullscreenHeight  ===  0 )  { 
83110        return  ( 
@@ -91,18 +118,9 @@ export const ExpandingDrawer = (props: ExpandingDrawerProps): ReactElement => {
91118        return  < View  style = { {  position : "absolute" ,  bottom : - maxHeight  } } > { renderContent ( ) } </ View > ; 
92119    } 
93120
94-     const  snapPoints  = 
95-         props . fullscreenContent  &&  heightContent 
96-             ? [ fullscreenHeight ,  heightContent ,  heightHeader ] 
97-             : props . fullscreenContent 
98-             ? [ fullscreenHeight ,  heightHeader ] 
99-             : isLargeContentValid 
100-             ? [ heightContent ,  heightHeader ] 
101-             : [ heightHeader ] ; 
102- 
103121    const  collapsedIndex  =  0 ; 
104122
105-     const  onChange  =  ( index : number )  =>  { 
123+     const  onChange  =  ( index : number ) :  void =>  { 
106124        const  hasOpened  =  lastIndexRef  ===  - 1  &&  index  ===  0 ; 
107125        const  hasClosed  =  index  ===  - 1 ; 
108126
0 commit comments