import React, { Component } from 'react'; import Icon from 'app/components/icon/icon.jsx'; import Emojione from 'components/emojione/emojione'; import MenusManager from 'app/components/menus/menus-manager.jsx'; import './menu.scss'; /* One menu */ export default class MenuComponent extends React.Component { constructor(props) { super(); this.state = { menus_manager: MenusManager, }; MenusManager.addListener(this); } componentWillUnmount() { MenusManager.removeListener(this); } openSubMenu(dom_element, menu, level) { var elementRect = window.getBoundingClientRect(dom_element); elementRect.x = elementRect.x || elementRect.left; elementRect.y = elementRect.y || elementRect.top; MenusManager.openSubMenu(menu, elementRect, level); } closeSubMenu(level) { MenusManager.closeSubMenu(level); } hoverMenu(dom_element, item) { if (item.submenu && !item.submenu_replace) { this.last_hovered = item; this.openSubMenu(dom_element, item.submenu, this.props.level || 0); } else { this.closeSubMenu(this.props.level || 0); } } clickMenu(dom_element, item, evt) { if(Date.now() - this.props.openAt < 200 ){ // When a menu is open and another one opens above it, you have to block the buttons for a while. Otherwise, the hovered option of the new menu will be clicked return; } if (item.submenu_replace) { MenusManager.openMenu(item.submenu, { x: evt.clientX, y: evt.clientY }, 'center'); return; } if (item.onClick) { var res = item.onClick(evt); if (res !== false) { MenusManager.closeMenu(); } } } render() { return (