UNPKG

use-dismiss

Version:

React hook that triggers a callback when user clicks outside the element.

93 lines (74 loc) 2.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = exports.useEscape = exports.useClickAway = void 0; var _react = require("react"); var MOUSEDOWN = "mousedown"; var KEYDOWN = "keydown"; var isEscaped = function isEscaped(event) { return event.key === "Escape"; }; var containsRef = function containsRef(ref, event) { return ref.current.contains(event.target); }; var useClickAway = function useClickAway(callback) { var ref = (0, _react.useRef)(null); (0, _react.useEffect)(function () { var listener = function listener(event) { if (!ref || !ref.current || containsRef(ref, event)) { return; } callback(event); }; document.addEventListener(MOUSEDOWN, listener); return function () { document.removeEventListener(MOUSEDOWN, listener); }; }, [callback]); return ref; }; exports.useClickAway = useClickAway; var useEscape = function useEscape(callback) { var ref = (0, _react.useRef)(null); (0, _react.useEffect)(function () { var listener = function listener(event) { if (!ref || !ref.current || !isEscaped(event)) { return; } callback(event); }; document.addEventListener(KEYDOWN, listener); return function () { document.removeEventListener(KEYDOWN, listener); }; }, [callback]); return ref; }; exports.useEscape = useEscape; var useDismiss = function useDismiss(callback) { var ref = (0, _react.useRef)(null); (0, _react.useEffect)(function () { var mousedownListener = function mousedownListener(event) { if (!ref || !ref.current || containsRef(ref, event)) { return; } callback(event); }; var keydownListener = function keydownListener(event) { if (!ref || !ref.current || !isEscaped(event)) { return; } callback(event); }; document.addEventListener(KEYDOWN, keydownListener); document.addEventListener(MOUSEDOWN, mousedownListener); return function () { document.removeEventListener(MOUSEDOWN, mousedownListener); document.removeEventListener(KEYDOWN, keydownListener); }; }, [callback]); return ref; }; var _default = useDismiss; exports["default"] = _default;