import React, { Component } from 'react'; import { noop } from 'lodash'; import { handleClickOutside } from './helpers'; export default (WrappedComponent, { onOutsideClick = noop, getDOMNode = noop }) => { class ClickOutside extends Component { componentDidMount () { const { componentInstance } = this; const clickHandler = onOutsideClick(componentInstance); const componentNode = getDOMNode(componentInstance); this.handleAction = handleClickOutside(clickHandler, componentNode); global.document.addEventListener('mousedown', this.handleAction); global.document.addEventListener('touchStart', this.handleAction); } componentWillUnmount () { global.document.removeEventListener('mousedown', this.handleAction); global.document.removeEventListener('touchStart', this.handleAction); } setInstance = (instance) => { this.componentInstance = instance; } render () { const { setInstance } = this; return ; } } return ClickOutside; };