sort/components/native/dropdown.tsx

98 lines
3.8 KiB
TypeScript
Raw Permalink Normal View History

2024-09-07 01:22:11 +00:00
import React, { useState } from 'react';
import { View, Text, Modal, TouchableOpacity, FlatList } from 'react-native';
import { Ionicons } from '@expo/vector-icons'; // Optional for adding icons
2024-09-24 00:17:23 +00:00
const CustomPicker = ({ label, options, selectedValue, onValueChange }:any) => {
2024-09-07 01:22:11 +00:00
const [isVisible, setIsVisible] = useState(false);
const handleSelect = (item:any) => {
onValueChange(item.value);
setIsVisible(false);
};
let optionSet = options.map((s:any, i:any)=>{
s.key = i;
return s;
})
return (
<View style={{width:"100%"}}>
<TouchableOpacity
style={{
height: 35,
width: '100%',
flexDirection:'row',
justifyContent: 'center',
borderRadius: 5,
borderBottomWidth:0.5,
borderBottomColor:'white',
borderStyle:'dashed'
}}
onPress={() => setIsVisible(true)}
>
<View style={{flex:1}}>
<Text style={{ color: 'white', fontSize: 20, fontWeight:'600' }}>
2024-10-16 03:37:18 +00:00
{(optionSet.find((option:any) => option.value === selectedValue)?.label || (label ? label : 'SELECT CUSTOMER')).toUpperCase()}
2024-09-07 01:22:11 +00:00
</Text>
</View>
<Ionicons
name="chevron-down-outline"
size={24}
color={"white"}
style={{ marginRight: 15 }}
/>
</TouchableOpacity>
<Modal
visible={isVisible}
transparent={true}
animationType="slide"
>
<TouchableOpacity
style={{ flex: 1, backgroundColor: 'rgba(0,0,0,0.5)' }}
onPress={() => setIsVisible(false)}
>
<View
style={{
backgroundColor: '#fff',
margin: 20,
borderRadius: 10,
padding: 10,
}}
>
<FlatList
data={optionSet}
keyExtractor={(item) => item.key}
renderItem={({ item }) => (
<TouchableOpacity
style={{
flexDirection: 'row',
alignItems: 'center',
paddingVertical: 10,
paddingHorizontal: 20,
borderBottomWidth: 1, // Add bottom border to each item
borderBottomColor: '#ccc', // Set border color
}}
onPress={() => handleSelect(item)}
>
<Ionicons
name="checkmark-circle"
size={24}
color={item.value === selectedValue ? "#333" : "#ccc"}
style={{ marginRight: 15 }}
/>
<Text style={{ color: '#333', fontSize: 16, fontWeight: '900' }}>
{item.label}
</Text>
</TouchableOpacity>
)}
/>
</View>
</TouchableOpacity>
</Modal>
</View>
);
};
export default CustomPicker;