UNPKG

orcs-design-system

Version:
60 lines (56 loc) 1.47 kB
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; };