diff options
author | Tyler Schicke <tyler_schicke@brown.edu> | 2019-05-31 00:31:04 -0400 |
---|---|---|
committer | Tyler Schicke <tyler_schicke@brown.edu> | 2019-05-31 00:31:04 -0400 |
commit | 6fff8632e85884bbf4bff33e845d4443d66b6250 (patch) | |
tree | 70e2a8d3b8011697028ae28c8e6d7ad07b9923f9 /src/client/views/ContextMenuItem.tsx | |
parent | 435f0c8ef035995001dde92f8e7a04fe35a3a41d (diff) | |
parent | 2814e59614c516aa2ba6a8e7555ace3e79911c38 (diff) |
Merge branch 'master' of github-tsch-brown:browngraphicslab/Dash-Web
Diffstat (limited to 'src/client/views/ContextMenuItem.tsx')
-rw-r--r-- | src/client/views/ContextMenuItem.tsx | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/src/client/views/ContextMenuItem.tsx b/src/client/views/ContextMenuItem.tsx index b9239dac9..fcda0db89 100644 --- a/src/client/views/ContextMenuItem.tsx +++ b/src/client/views/ContextMenuItem.tsx @@ -8,11 +8,13 @@ export interface OriginalMenuProps { description: string; event: (e: React.MouseEvent<HTMLDivElement>) => void; icon?: IconProp; //maybe should be optional (icon?) + closeMenu?: () => void; } export interface SubmenuProps { description: string; subitems: ContextMenuProps[]; + closeMenu?: () => void; } export interface ContextMenuItemProps { @@ -32,30 +34,36 @@ export class ContextMenuItem extends React.Component<ContextMenuProps> { } } + handleEvent = (e: React.MouseEvent<HTMLDivElement>) => { + if ("event" in this.props) { + this.props.event(e); + this.props.closeMenu && this.props.closeMenu(); + } + } + render() { if ("event" in this.props) { return ( - <div className="contextMenu-item" onClick={this.props.event}> + <div className="contextMenu-item" onClick={this.handleEvent}> <span className="icon-background"> {this.props.icon ? <FontAwesomeIcon icon={this.props.icon} size="sm" /> : <FontAwesomeIcon icon="circle" size="sm" />} </span> - <div className="contextMenu-description"> {this.props.description}</div> + <div className="contextMenu-description"> + {this.props.description} + </div> </div> ); } else { - let submenu = null; - if (this.overItem) { - submenu = ( - <div className="subMenu-cont" style={{ marginLeft: "100.5%", left: "0px" }}> - {this._items.map(prop => <ContextMenuItem {...prop} key={prop.description} />)} - </div> - ); - } + let submenu = !this.overItem ? (null) : + <div className="contextMenu-subMenu-cont" style={{ marginLeft: "100.5%", left: "0px" }}> + {this._items.map(prop => <ContextMenuItem {...prop} key={prop.description} closeMenu={this.props.closeMenu} />)} + </div>; return ( - <div className="contextMenu-item" onMouseEnter={action(() => { this.overItem = true; })} - onMouseLeave={action(() => this.overItem = false)}> - <div className="contextMenu-description"> {this.props.description}</div> + <div className="contextMenu-item" onMouseEnter={action(() => { this.overItem = true; })} onMouseLeave={action(() => this.overItem = false)}> + <div className="contextMenu-description"> + {this.props.description} + </div> {submenu} </div> ); |