rsuite
Version:
A suite of react components
33 lines (32 loc) • 875 B
JavaScript
'use client';
;
exports.__esModule = true;
exports.default = void 0;
exports.useClickOutside = useClickOutside;
var _react = require("react");
function useClickOutside({
enabled = true,
isOutside,
handle
}) {
const isOutsideRef = (0, _react.useRef)(isOutside);
const handleRef = (0, _react.useRef)(handle);
(0, _react.useEffect)(() => {
isOutsideRef.current = isOutside;
handleRef.current = handle;
}, [isOutside, handle]);
(0, _react.useEffect)(() => {
if (enabled) {
const eventHandler = event => {
if (isOutsideRef.current?.(event)) {
handleRef.current?.(event);
}
};
window.addEventListener('mousedown', eventHandler);
return () => {
window.removeEventListener('mousedown', eventHandler);
};
}
}, [enabled]);
}
var _default = exports.default = useClickOutside;