1- import React , { forwardRef , useImperativeHandle } from 'react' ;
1+ import React , { useRef , useState , forwardRef , useImperativeHandle } from 'react' ;
22import { View , Text , TouchableOpacity , FlatList } from 'react-native' ;
33import styles from './styles' ;
44import { isExist } from './helpers/isExist' ;
@@ -59,6 +59,7 @@ const SelectDropdown = (
5959) => {
6060 const disabledInternalSearch = ! ! onChangeSearchInputText ;
6161 /* ******************* hooks ******************* */
62+ const fadeAnim = useRef ( new Animated . Value ( 0 ) ) . current ;
6263 const { dropdownButtonRef, dropDownFlatlistRef} = useRefs ( ) ;
6364 const {
6465 dataArr, //
@@ -92,6 +93,34 @@ const SelectDropdown = (
9293 selectItem ( index ) ;
9394 } ,
9495 } ) ) ;
96+
97+ const [ initClose , setInitClose ] = useState ( false ) ;
98+
99+ const fadeInOut = value => {
100+ Animated . timing ( fadeAnim , {
101+ toValue : value ,
102+ duration : 300 ,
103+ useNativeDriver : true ,
104+ } ) . start ( ( ) => {
105+ if ( initClose ) {
106+ setIsVisible ( false ) ;
107+ setInitClose ( false ) ;
108+ }
109+ } ) ;
110+ } ;
111+
112+ useEffect ( ( ) => {
113+ if ( isVisible ) {
114+ fadeInOut ( 1 ) ;
115+ }
116+ } , [ isVisible ] ) ;
117+
118+ useEffect ( ( ) => {
119+ if ( initClose ) {
120+ fadeInOut ( 0 ) ;
121+ }
122+ } , [ initClose ] ) ;
123+
95124 /* ******************* Methods ******************* */
96125 const openDropdown = ( ) => {
97126 dropdownButtonRef . current . measure ( ( fx , fy , w , h , px , py ) => {
@@ -101,7 +130,7 @@ const SelectDropdown = (
101130 } ) ;
102131 } ;
103132 const closeDropdown = ( ) => {
104- setIsVisible ( false ) ;
133+ setInitClose ( true ) ;
105134 setSearchTxt ( '' ) ;
106135 onBlur && onBlur ( ) ;
107136 } ;
@@ -172,23 +201,25 @@ const SelectDropdown = (
172201 return (
173202 isVisible && (
174203 < DropdownModal statusBarTranslucent = { statusBarTranslucent } visible = { isVisible } onRequestClose = { onRequestClose } >
175- < DropdownOverlay onPress = { closeDropdown } backgroundColor = { dropdownOverlayColor } />
176- < DropdownWindow layoutStyle = { dropdownWindowStyle } >
177- < FlatList
178- data = { dataArr }
179- keyExtractor = { ( item , index ) => index . toString ( ) }
180- ref = { dropDownFlatlistRef }
181- renderItem = { renderFlatlistItem }
182- getItemLayout = { getItemLayout }
183- onLayout = { onLayout }
184- ListHeaderComponent = { renderSearchView ( ) }
185- stickyHeaderIndices = { search && [ 0 ] }
186- keyboardShouldPersistTaps = "always"
187- onEndReached = { ( ) => onScrollEndReached && onScrollEndReached ( ) }
188- onEndReachedThreshold = { 0.5 }
189- showsVerticalScrollIndicator = { showsVerticalScrollIndicator }
190- />
191- </ DropdownWindow >
204+ < Animated . View style = { { opacity : fadeAnim } } >
205+ < DropdownOverlay onPress = { closeDropdown } backgroundColor = { dropdownOverlayColor } />
206+ < DropdownWindow layoutStyle = { dropdownWindowStyle } >
207+ < FlatList
208+ data = { dataArr }
209+ keyExtractor = { ( item , index ) => index . toString ( ) }
210+ ref = { dropDownFlatlistRef }
211+ renderItem = { renderFlatlistItem }
212+ getItemLayout = { getItemLayout }
213+ onLayout = { onLayout }
214+ ListHeaderComponent = { renderSearchView ( ) }
215+ stickyHeaderIndices = { search && [ 0 ] }
216+ keyboardShouldPersistTaps = "always"
217+ onEndReached = { ( ) => onScrollEndReached && onScrollEndReached ( ) }
218+ onEndReachedThreshold = { 0.5 }
219+ showsVerticalScrollIndicator = { showsVerticalScrollIndicator }
220+ />
221+ </ DropdownWindow >
222+ </ Animated . View >
192223 </ DropdownModal >
193224 )
194225 ) ;
0 commit comments