import { Icon } from 'UI'; import styles from './itemMenu.css'; export default class ItemMenu extends React.PureComponent { state = { displayed: false, }; componentDidMount() { document.addEventListener('click', this.handleClickOutside); } componentWillUnmount() { document.removeEventListener('click', this.handleClickOutside); } onClick = callback => (e) => { e.stopPropagation(); callback(e); } handleClickOutside = (e) => { if (!this.state.displayed) return; if (e.target !== this.menuBtnRef) { this.closeMenu(); } } toggleMenu = (e) => { e.stopPropagation(); this.setState({ displayed: !this.state.displayed }); } closeMenu = () => this.setState({ displayed: false }) render() { const { items } = this.props; const { displayed } = this.state; return (
{ this.menuBtnRef = ref; } } className={ styles.menuBtn } onClick={ this.toggleMenu } role="button" tabIndex="-1" />
{ items.filter(({ hidden }) => !hidden).map(({ onClick, text, icon }) => (
{ text }
))}
); } }