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