@modern-kit/react
Version:
45 lines (41 loc) • 1.12 kB
JavaScript
;
var hooksUsePreservedCallback = require('../usePreservedCallback/index.cjs');
var React = require('react');
var utils = require('@modern-kit/utils');
function useKeyDown({
enabled = true,
keyDownCallbackMap = {},
allKeyDownCallback
}) {
const targetRef = React.useRef(null);
const onKeyDown = hooksUsePreservedCallback.usePreservedCallback((event) => {
event.stopPropagation();
if (allKeyDownCallback) {
allKeyDownCallback(event);
return;
}
const key = event.key;
const keyDownCallback = keyDownCallbackMap[key];
if (utils.isFunction(keyDownCallback)) {
keyDownCallback(event);
}
});
React.useEffect(() => {
if (!enabled) return;
if (!targetRef.current) {
targetRef.current = window;
}
const targetElement = targetRef.current;
targetElement.addEventListener(
"keydown",
onKeyDown
);
return () => targetElement.removeEventListener(
"keydown",
onKeyDown
);
}, [enabled, onKeyDown]);
return { ref: targetRef };
}
exports.useKeyDown = useKeyDown;
//# sourceMappingURL=index.cjs.map