UNPKG

@storm-stack/hooks

Version:

A collection of React hooks used by Storm Software in various client libraries and applications.

29 lines (28 loc) 786 B
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useClickAway = useClickAway; var _react = require("react"); function useClickAway(cb) { const ref = (0, _react.useRef)(null); const refCb = (0, _react.useRef)(cb); (0, _react.useLayoutEffect)(() => { refCb.current = cb; }); (0, _react.useEffect)(() => { const handler = e => { const element = ref.current; if (element && !element.contains(e.target)) { refCb.current(e); } }; document.addEventListener("mousedown", handler); document.addEventListener("touchstart", handler); return () => { document.removeEventListener("mousedown", handler); document.removeEventListener("touchstart", handler); }; }, []); return ref; }