import { View, Text, TouchableOpacity, Image, Modal, VirtualizedList, } from "react-native"; import React, {memo, useCallback} from "react"; import {CountryCodePickerProps} from "./interfaces"; import Style from "./country-code-picker.styles"; import useCountryCodePicker from "./hooks/useCountryCodePicker"; import {SvgUri} from "react-native-svg"; import FilterBar from "./filter-bar/filter-bar"; import Spacer from "../spacer/spacer"; import Entypo from "react-native-vector-icons/Entypo"; const CountryCodePicker = ({ pickerStyle, modalStyle, textStyle, onPickedCode, filterBarColor, defaultCountryName, }: CountryCodePickerProps) => { const { isOpen, setIsOpen, selectedCountry, setSelectedCountry, Data: countriesData, filteredCountriesData, setFilteredCountriesData, } = useCountryCodePicker(defaultCountryName); const onPressItem = useCallback((item) => { setSelectedCountry(item), setIsOpen(false); onPickedCode("+" + item.callingCodes[0].toString(), item.name); }, []); const Item = memo(({item, onPress}) => { return ( { onPress(item); }} > {/* */} {item.name} ); }); return ( <> { setIsOpen(true); setFilteredCountriesData(countriesData); }} style={{...Style.container, ...pickerStyle}} > {isOpen ? ( ) : ( )} {selectedCountry ? ( <> {selectedCountry.alpha2Code} ) : ( <> {"Select"} )} setIsOpen(false)} > { setFilteredCountriesData(countriesData); }} onUpdateSearchTerm={(t) => { const filteredList = countriesData.filter((item) => item.name.toLowerCase().includes(t.toLowerCase()) ); setFilteredCountriesData(filteredList); }} /> {filteredCountriesData?.length > 0 && ( data.length} getItem={(data, index) => data[index]} initialNumToRender={10} maxToRenderPerBatch={10} onEndReachedThreshold={0.5} scrollEventThrottle={16} windowSize={10} data={filteredCountriesData} removeClippedSubviews={true} renderItem={({item, index}) => ( )} keyExtractor={(item, index) => index.toString()} style={Style.list} getItemLayout={(data, index) => ({ length: 16, offset: 16 * index, index, })} /> )} ); }; export default CountryCodePicker;