import { View, Text, TouchableOpacity, FlatList, ViewProps, } from 'react-native'; import React, { ReactNode, useState } from 'react'; import TickIcon from '../icons/tick.svg'; import { classNames } from '../utils'; export interface MenuOption { label: string; value: string; } export interface MenuProps extends ViewProps { options: MenuOption[]; placeholder?: string; accessoryLeft?: React.ReactElement | (() => React.ReactElement) | ReactNode; selectedItem: MenuOption; onSelect: (selectedItem: MenuOption) => void; className: string; } export const Menu: React.FC = ({ placeholder = 'Select an option', options, accessoryLeft, selectedItem, onSelect, className, ...restOfProps }) => { const [dropdownVisible, setDropdownVisible] = useState(false); const handleToggleDropdown = () => { setDropdownVisible(!dropdownVisible); }; const handleItemPress = (item: MenuOption) => { onSelect?.(item); handleToggleDropdown(); }; const renderItem = ({ item, index }: { item: MenuOption; index: number }) => ( handleItemPress(item)} > {item?.label} ); return ( {accessoryLeft && ( {typeof accessoryLeft === 'function' ? accessoryLeft() : accessoryLeft} )} {selectedItem ? selectedItem?.label : placeholder} {dropdownVisible && ( item?.value?.toString()} /> )} ); };