import React, { FunctionComponent, MutableRefObject, useEffect, useRef, } from 'react' import { Component } from 'react' import PropTypes from 'prop-types' export interface ClickOutsideProps { onClickOutside: (e?: MouseEvent) => void children: React.ReactNode | any render: () => void } export default class ClickOutside extends Component { public domNode: Element | null = null handleRef = (element) => { this.domNode = element } public componentDidMount() { document.addEventListener('click', this.handleClick, true) } public componentWillUnmount() { document.removeEventListener('mousedown', this.handleClick, true) document.removeEventListener('touchstart', this.handleClick, true) } public handleClick = (event) => { function hasParent(element, root) { return root && root.contains(element) } if (!hasParent(event.target, this.domNode)) { if (typeof this.props.onClickOutside === 'function') { this.props.onClickOutside(event) } } } render() { return null // return this.props.render({ // innerRef: this.handleRef, // }); } }