import { forwardRef, useCallback, useImperativeHandle, useMemo } from 'react'; import { Platform, ScrollView, StatusBar, View } from 'react-native'; import { Menu, TextInput, TouchableRipple } from 'react-native-paper'; import DropdownInput from './dropdown-input'; import MultiSelectDropdownItem from './multi-select-dropdown-item'; import { DropdownRef, MultiSelectDropdownProps } from './types'; import useDropdown from './use-dropdown'; import DropdownHeader from './dropdown-header'; function MultiSelectDropdown( props: MultiSelectDropdownProps, ref: React.Ref ) { const { testID, menuTestID, options, mode, placeholder, label, menuUpIcon = , menuDownIcon = , value, menuContentStyle = { paddingVertical: 0 }, maxMenuHeight, statusBarHeight = Platform.OS === 'android' ? StatusBar.currentHeight : undefined, hideMenuHeader = false, Touchable = TouchableRipple, disabled = false, error = false, onSelect, CustomMultiSelectDropdownItem = MultiSelectDropdownItem, CustomMultiSelectDropdownInput = DropdownInput, CustomMenuHeader = DropdownHeader, } = props; const selectedLabel = useMemo( () => options .filter((option) => value.includes(option.value)) .map((option) => option.label) .join(', '), [options, value] ); const { enable, setEnable, toggleMenu, onLayout, menuStyle, scrollViewStyle, dropdownLayout, } = useDropdown(maxMenuHeight); const rightIcon = enable ? menuUpIcon : menuDownIcon; useImperativeHandle(ref, () => ({ focus() { setEnable(true); }, blur() { setEnable(false); }, })); const resetMenu = useCallback(() => { onSelect?.([]); toggleMenu(); }, [onSelect, toggleMenu]); return ( } contentStyle={menuContentStyle} > {!hideMenuHeader && ( )} {options.map((option, index) => { return ( ); })} ); } export default forwardRef(MultiSelectDropdown);