import React from 'react'; import { Button, Icon } from 'UI'; import styles from './menu.module.css'; import cn from 'classnames'; import OutsideClickDetectingDiv from 'Shared/OutsideClickDetectingDiv'; interface MenuItem { key: number; autoclose?: boolean; component?: React.ReactElement; } interface Props { items: MenuItem[]; useSc?: boolean; } export default class ItemMenu extends React.PureComponent { state = { displayed: false, }; handleEsc = (e: KeyboardEvent) => e.key === 'Escape' && this.state.displayed && this.toggleMenu(); handleSc = (e: KeyboardEvent) => e.key === 'M' && e.shiftKey ? this.toggleMenu() : null; componentDidMount() { document.addEventListener('keydown', this.handleEsc, false); if (this.props.useSc) { document.addEventListener('keydown', this.handleSc, false) } } componentWillUnmount() { document.removeEventListener('keydown', this.handleEsc, false); if (this.props.useSc) { document.removeEventListener('keydown', this.handleSc, false) } } toggleMenu = () => { this.setState({ displayed: !this.state.displayed }); }; closeMenu = () => { this.setState({ displayed: false }); }; render() { const { items } = this.props; const { displayed } = this.state; return (
{items.map((item) => item.component ? (
{item.component}
) : null )}
); } }