import React, { forwardRef, Ref, useCallback, useEffect, useMemo, useRef } from 'react'; import { Pressable, View } from 'react-native'; import showPopupMenu, { OnPopupMenuItemSelect, PopupMenuItem } from '../blue_modules/showPopupMenu.android'; import { ToolTipMenuProps } from './types'; const dismissMenu = () => { console.log('dismissMenu Not implemented'); }; const BaseToolTipMenu = (props: ToolTipMenuProps, ref: Ref<{ dismissMenu?: () => void }>) => { const menuRef = useRef(null); const { actions, children, onPressMenuItem, isMenuPrimaryAction = false, buttonStyle = {}, enableAndroidRipple = true, disabled = false, onPress, ...restProps } = props; const handleToolTipSelection = useCallback( (selection: PopupMenuItem) => { if (selection.id) { onPressMenuItem(selection.id); } }, [onPressMenuItem], ); useEffect(() => { // @ts-ignore: fix later if (ref && ref.current) { // @ts-ignore: fix later ref.current.dismissMenu = dismissMenu; } }, [ref]); const menuItems = useMemo(() => { const menu: { id: string; label: string }[] = []; actions.forEach(action => { if (Array.isArray(action)) { action.forEach(actionToMap => { menu.push({ id: actionToMap.id.toString(), label: actionToMap.text }); }); } else { menu.push({ id: action.id.toString(), label: action.text }); } }); return menu; }, [actions]); const showMenu = useCallback(() => { if (menuRef.current) { showPopupMenu(menuItems, handleToolTipSelection, menuRef.current); } }, [menuItems, handleToolTipSelection]); return ( {children} ); }; const ToolTipMenu = forwardRef(BaseToolTipMenu); export default ToolTipMenu;