react-hotkeyz
Version:
A component that enables registration of hotkeys per z-index.
2 lines • 2.58 kB
JavaScript
;var _interopRequireWildcard=require("@babel/runtime/helpers/interopRequireWildcard"),_interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:!0}),exports.useHotkeys=useHotkeys,exports.Hotkeys=Hotkeys;var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")),_objectSpread2=_interopRequireDefault(require("@babel/runtime/helpers/objectSpread")),_typeof2=_interopRequireDefault(require("@babel/runtime/helpers/typeof")),_toConsumableArray2=_interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")),React=_interopRequireWildcard(require("react")),_isHotkey=_interopRequireDefault(require("is-hotkey")),state={listenerAttached:!1,zIndex:null,handlers:{}};function triggerHotkeys(a){if(null!==state.zIndex){var b=state.handlers[state.zIndex];for(var c in b)if((0,_isHotkey.default)(c,a)){b[c](a);break}}}function registerZIndex(a){var b=a.zIndex,c=a.keys;if((null===state.zIndex||state.zIndex<b)&&(state.zIndex=b),state.handlers[b]||(state.handlers[b]={}),c&&0!==Object.keys(c).length){for(var d in c){if(d in state.handlers[b])throw Error("Shortcut \"".concat(d,"\" already registered on zIndex ").concat(b,"."));state.handlers[b][d]=c[d]}state.listenerAttached||(document.body.addEventListener("keydown",triggerHotkeys),state.listenerAttached=!0)}}function unregisterZIndex(a){var b=a.zIndex,c=a.keys;if(state.handlers&&state.handlers[b]){for(var e in c)delete state.handlers[b][e];0===Object.keys(state.handlers[b]).length&&delete state.handlers[b]}if(0<Object.keys(state.handlers).length){var d;state.zIndex=(d=window.Math).max.apply(d,(0,_toConsumableArray2.default)(Object.keys(state.handlers)))}else state.zIndex=null,state.listenerAttached&&(document.body.removeEventListener("keydown",triggerHotkeys),state.listenerAttached=!1)}var useEffect=React.useEffect,useRef=React.useRef;function useHotkeys(a){var b=a.disabled,c=a.zIndex,d=a.keys,e={prevProps:useRef(),firstRender:useRef(!0)};useEffect(function(){(e.firstRender.current||e.prevProps.current.disabled!==b)&&(e.firstRender.current=!1,b?unregisterZIndex(a):registerZIndex(a)),b||"object"!==(0,_typeof2.default)(d)||Object.assign(state.handlers[c],d),e.prevProps.current=(0,_objectSpread2.default)({},a)}),useEffect(function(){return function(){b||unregisterZIndex(a)}},[])}function Hotkeys(a){var b=a.children,c=(0,_objectWithoutProperties2.default)(a,["children"]);return useHotkeys(c),React.createElement(React.Fragment,null,b)}
//# sourceMappingURL=index.js.map