mirror of
https://github.com/empayre/fleet.git
synced 2024-11-06 17:05:18 +00:00
36 lines
1.1 KiB
JavaScript
36 lines
1.1 KiB
JavaScript
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 <WrappedComponent {...this.props} ref={setInstance} />;
|
|
}
|
|
}
|
|
|
|
return ClickOutside;
|
|
};
|