import React = require("react"); import { observable, action } from "mobx"; import { observer } from "mobx-react"; export interface OriginalMenuProps { description: string; event: (e: React.MouseEvent) => void; } export interface SubmenuProps { description: string; subitems: ContextMenuProps[]; } export type ContextMenuProps = OriginalMenuProps | SubmenuProps; @observer export class ContextMenuItem extends React.Component { @observable private _items: Array = []; @observable private _pageX: number = 0; @observable private _pageY: number = 0; @observable private overItem = false; constructor(props: ContextMenuProps) { super(props); if ("subitems" in this.props) { this.props.subitems.forEach(i => this._items.push(i)); } } render() { if ("event" in this.props) { return (
{this.props.description}
) } else { let submenu = null; if (this.overItem) { submenu = (
{this._items.map(prop => { return })}
) } return (
{ this.overItem = true })} onMouseLeave={action(() => this.overItem = false)}>
{this.props.description}
{submenu}
) } } }