@jyoketsu/click-outside-react
Version:
```bash yarn add @jyoketsu/click-outside-react ```
60 lines (49 loc) • 1.61 kB
JavaScript
import React, { useState, useRef, useEffect } from 'react';
function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function ClickOutside(_ref) {
var style = _ref.style,
onClickOutside = _ref.onClickOutside,
children = _ref.children;
var _useState = useState(false),
isTouch = _useState[0],
setisTouch = _useState[1];
var containerRef = useRef(null);
function handle(e) {
if (e.type === 'touchend') setisTouch(true);
if (e.type === 'click' && isTouch) return;
var el = containerRef.current;
if (el && !el.contains(e.target)) onClickOutside(e);
}
useEffect(function () {
document.addEventListener('touchend', handle, true);
document.addEventListener('click', handle, true);
document.addEventListener('contextmenu', handle, true);
return function () {
document.removeEventListener('touchend', handle, true);
document.removeEventListener('click', handle, true);
document.removeEventListener('contextmenu', handle, true);
};
}, []);
var propsStyle = style || {};
return React.createElement("div", {
ref: containerRef,
style: _extends({}, {
width: 'fit-content'
}, propsStyle)
}, children);
}
export { ClickOutside };
//# sourceMappingURL=click-outside-react.esm.js.map