import React, { FunctionComponent, useState } from 'react'; import { StyleSheet, Text, TextStyle } from 'react-native'; import { Menu, MenuItem } from 'react-native-material-menu'; import Icon from 'react-native-vector-icons/Ionicons'; export interface IDropDownMenuStyleProps { menuIcon?: any; menuText?: TextStyle; } interface IDropDownMenuProps { menuItems: string[]; onSelectItem?: (item: string) => void; renderCustomItem?: (item: string) => React.ReactElement; style?: IDropDownMenuStyleProps } export const DropDownMenu: FunctionComponent = ({ menuItems, style, onSelectItem, renderCustomItem }) => { const [visible, setVisible] = useState(false); const mergedStyle = { ...defaultStyle, ...style }; const hideMenu = () => setVisible(false); const showMenu = () => setVisible(true); const onMenuItemPressed = (selectedItem: string) => () => { if (onSelectItem) { onSelectItem(selectedItem); } hideMenu(); } const renderMenuItems = (itemOptions: string[]) => { const menusArray = itemOptions.map((item: string) => { return ( {renderCustomItem ? renderCustomItem(item) : {item}} ); }); return menusArray; } return ( } onRequestClose={hideMenu} > {renderMenuItems(menuItems)} ); }; const defaultStyle = StyleSheet.create({ menuIcon: { color: '#0086CF', fontSize: 30 } });