aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/ContextMenuItem.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/ContextMenuItem.tsx')
-rw-r--r--src/client/views/ContextMenuItem.tsx49
1 files changed, 40 insertions, 9 deletions
diff --git a/src/client/views/ContextMenuItem.tsx b/src/client/views/ContextMenuItem.tsx
index 4801c1555..67bbc3082 100644
--- a/src/client/views/ContextMenuItem.tsx
+++ b/src/client/views/ContextMenuItem.tsx
@@ -1,6 +1,8 @@
import React = require("react");
+import { observable, action } from "mobx";
+import { observer } from "mobx-react";
-export interface ContextMenuProps {
+export interface OriginalMenuProps {
description: string;
event: (e: React.MouseEvent<HTMLDivElement>) => void;
}
@@ -10,16 +12,45 @@ export interface SubmenuProps {
subitems: ContextMenuProps[];
}
-export interface ContextMenuItemProps {
- type: ContextMenuProps | SubmenuProps
-}
+export type ContextMenuProps = OriginalMenuProps | SubmenuProps;
+@observer
export class ContextMenuItem extends React.Component<ContextMenuProps> {
+ @observable private _items: Array<ContextMenuProps> = [];
+ @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() {
- return (
- <div className="contextMenu-item" onClick={this.props.event}>
- <div className="contextMenu-description">{this.props.description}</div>
- </div>
- )
+ if ("event" in this.props) {
+ return (
+ <div className="contextMenu-item" onClick={this.props.event}>
+ <div className="contextMenu-description"> {this.props.description}</div>
+ </div>)
+ }
+ else {
+ let submenu = null;
+ if (this.overItem) {
+ submenu = (<div className="subMenu-cont" style={{ left: this._pageX, top: this._pageY, marginLeft: "47.5%" }}>
+ {this._items.map(prop => {
+ return <ContextMenuItem {...prop} key={prop.description} />
+ })}
+ </div>)
+ }
+ return (
+ <div className="contextMenu-item" onMouseEnter={action(() => {
+ this.overItem = true
+ })} onMouseLeave={action(() => this.overItem = false)}>
+ <div className="contextMenu-description"> {this.props.description}</div>
+ {submenu}
+ </div>)
+ }
}
} \ No newline at end of file