orcs-design-system
Version:
TeamForm's Design System, aka: ORCS
60 lines (56 loc) • 1.47 kB
JavaScript
import { useEffect, useState } from "react";
export const commonKeys = {
DOWN: "Down",
ARROW_DOWN: "ArrowDown",
UP: "Up",
ARROW_UP: "ArrowUp",
LEFT: "Left",
ARROW_LEFT: "ArrowLeft",
RIGHT: "Right",
ARROW_RIGHT: "ArrowRight",
ENTER: "Enter",
ESC: "Esc",
ESCAPE: "Escape",
TAB: "Tab"
};
export const useKeyPress = function (targetKey, callback) {
let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
// State for keeping track of whether key is pressed
const [keyPressed, setKeyPressed] = useState(false);
// If pressed key is our target key then set to true
const downHandler = _ref => {
let {
key
} = _ref;
if (key === targetKey) {
setKeyPressed(true);
callback();
}
};
// If released key is our target key then set to false
const upHandler = _ref2 => {
let {
key
} = _ref2;
if (key === targetKey) {
setKeyPressed(false);
callback();
}
};
// Add event listeners
useEffect(() => {
const removeEventListeners = () => {
window.removeEventListener("keydown", downHandler);
window.removeEventListener("keyup", upHandler);
};
if (options.disabled) {
removeEventListeners();
return;
}
window.addEventListener("keydown", downHandler);
window.addEventListener("keyup", upHandler);
// Remove event listeners on cleanup
return removeEventListeners;
});
return keyPressed;
};