/* eslint-disable react-native/no-inline-styles */ import React, { memo, useState, useEffect } from 'react'; import { View, TouchableOpacity, Image, Platform, TextInput, } from 'react-native'; import { Actionsheet, Text, useDisclose, ScrollView, KeyboardAvoidingView, } from 'native-base'; import type { Select } from 'src/interface/select.interface'; const BTSingleSelect = ({ label, list, onSelection, selectedList, placeholder, pillStyle, placeHolderStyle, labelStyle, selectInputStyle, errorText, errorStyle, listTextStyle, actionSheetBackgroundColor, searchStyle, }: Select) => { const [arrayList, setArrayList] = useState([...list]); const [arrayHolder, setArrayHolder] = useState([...list]); const { isOpen, onOpen, onClose } = useDisclose(); const [selectedValues, setSelectedValues] = useState([...selectedList]); // selected values const [search, setSearch] = useState(''); useEffect(() => { setArrayList([...list]); setSelectedValues([...selectedList]); }, [list, selectedList]); const _onClose = () => { var data = [...arrayList]; var selectedData = [...selectedValues]; let _temp: Array = []; selectedData.forEach((val) => { data.forEach((el) => { if (val.name === el.name) { _temp.push(el.name); } }); }); onSelection({ text: _temp.join(), selectedList: selectedData }); // selectInputRef.current.blur(); setSearch(''); onClose(); }; const _onFocus = () => { setArrayList([...list]); setArrayHolder([...list]); setSelectedValues([...selectedList]); onOpen(); }; const _onClick = (item: any) => { let selectedData = [...selectedValues]; const indexSelected = selectedData.indexOf(item); if (indexSelected > -1) { // selectedData.splice(indexSelected, 1); selectedData = []; } else { selectedData = []; selectedData.push(item); } setSelectedValues(selectedData); }; const _exists = (item: any) => { const existingData = [...selectedValues]; return existingData.indexOf(item) > -1 ? true : false; }; const _filterFunction = (text: string) => { setSearch(text); const newData = arrayHolder.filter((item) => item.name.toLowerCase().includes(text.toLowerCase()) ); setArrayList(newData); }; return ( {label && ( {label} )} _onFocus()}> {selectedList.length === 0 ? ( {placeholder} ) : ( selectedList.map((el: any, index: number) => { return ( {el.name} ); }) )} { _onClose(); }} size="full" > { _onClose(); }} style={{ borderRadius: 50, backgroundColor: 'white', padding: 3 }} > _filterFunction(text)} value={search} style={{ height: 40, borderRadius: searchStyle?.borderRadius || 20, fontSize: 12, paddingLeft: 10, paddingRight: 10, borderColor: searchStyle?.borderColor || '#e5e5e5', borderWidth: 1, backgroundColor: searchStyle?.backgroundColor || '#e5e5e5', marginVertical: 10, marginHorizontal: 8, color: searchStyle?.textColor || '#000', }} /> {arrayList.map((el, index) => { return ( _onClick(el)} key={index} startIcon={ _exists(el) ? ( ) : ( ) } > {el.name} ); })} {errorText.length > 0 ? ( {errorText} ) : ( )} ); }; export default memo(BTSingleSelect);