import React from 'react';
import PropTypes from 'prop-types';
import enhanceWithClickOutside from 'react-click-outside';

export class OpenProvider extends React.Component {
  static propTypes = {
    onOpen: PropTypes.func,
    open: PropTypes.bool,
  }

  static defaultProps = {
    onOpen: null,
    open: false
  }

  constructor(props) {
    super(props);
    this.state = {
      open: false
    };
  }

  componentWillReceiveProps(nextProps) {
    nextProps.open && this.setState({ open: true });
  }

  handleClickOutside = () => {
    this.state.open && this.setState({ open: false });
  }

  toggle = () => {
    this.setState({ open: !this.state.open }, () => {
      this.props.onOpen && this.state.open && this.props.onOpen();
    });
  }

  render() {
    return this.props.children(this.state.open, this.toggle);
  }
}

export default enhanceWithClickOutside(OpenProvider);
