import React = require("react"); import { observable, action } from "mobx"; import { observer } from "mobx-react"; import { library, IconProp } from '@fortawesome/fontawesome-svg-core'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; export interface OriginalMenuProps { description: string; event: (e: React.MouseEvent) => void; icon: IconProp; //maybe should be optional (icon?) } 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 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}
) } } }