Skip to content

Commit 2984d03

Browse files
author
wan
committed
animate opacity
1 parent 59505a4 commit 2984d03

File tree

1 file changed

+50
-19
lines changed

1 file changed

+50
-19
lines changed

src/SelectDropdown.js

Lines changed: 50 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, {forwardRef, useImperativeHandle} from 'react';
1+
import React, {useRef, useState, forwardRef, useImperativeHandle} from 'react';
22
import {View, Text, TouchableOpacity, FlatList} from 'react-native';
33
import styles from './styles';
44
import {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

Comments
 (0)