import React, { createContext, useContext, useMemo, useState } from 'react'; import { ReactNode } from 'react'; import NestedMenuItemOld, { NestedMenuItemProps } from "material-ui-nested-menu-item"; import Menu, { MenuProps } from '@material-ui/core/Menu/Menu'; import MenuItemOld, { MenuItemProps } from '@material-ui/core/MenuItem'; export interface INestedMenuType { menuPosition?: { top: number; left: number; }, setMenuPosition?: (menuPosition: INestedMenuType["menuPosition"]) => void, handleItemClick?: (event: React.MouseEvent) => void, closeMenu?: (event?: React.MouseEvent) => void, openMenu?: (event: React.MouseEvent) => void, } export interface INestedMenuProviderProps extends INestedMenuType { children: ReactNode, } export const NestedMenuContext = createContext({ menuPosition: null, }) export const NestedMenuProvider = (prop: INestedMenuProviderProps) => { const [menuPosition, setMenuPosition] = useState(prop.menuPosition ?? null); const defaults = useMemo( () => { const handleItemClick = (event: React.MouseEvent) => { //console.log(`handleItemClick`, event, menuPosition) setMenuPosition({ top: event.pageY, left: event.pageX }) }; return { menuPosition, setMenuPosition, handleItemClick, openMenu: (event: React.MouseEvent) => { //console.log(`openMenu`, menuPosition) event.preventDefault(); if (menuPosition) { return; } handleItemClick(event); }, closeMenu: () => setMenuPosition(null), } }, [menuPosition], ) return } export function useNestedMenuContext() { return useContext(NestedMenuContext); } export function NestedMenuItem(prop: Omit) { const state = useNestedMenuContext(); return } export function NestedMenuRoot(props: Omit) { const state = useNestedMenuContext(); return } export function MenuItem(props: MenuItemProps) { const state = useNestedMenuContext(); // @ts-ignore return } export default NestedMenuItem