refactor(keycodes): allow strings and numbers as key codes

This commit is contained in:
moklick
2020-11-10 14:27:15 +01:00
parent 965fb2a212
commit 959216f6fc
5 changed files with 35 additions and 31 deletions
+19 -18
View File
@@ -1,27 +1,28 @@
import { useState, useEffect } from 'react';
import { isInputDOMNode } from '../utils';
import { KeyCode } from '../types';
export default (keyCode: number): boolean => {
export default (keyCode: KeyCode): boolean => {
const [keyPressed, setKeyPressed] = useState(false);
function downHandler(event: KeyboardEvent) {
if (event.keyCode === keyCode && !isInputDOMNode(event)) {
setKeyPressed(true);
}
}
const upHandler = (event: KeyboardEvent) => {
if (event.keyCode === keyCode && !isInputDOMNode(event)) {
setKeyPressed(false);
}
};
const resetHandler = () => {
setKeyPressed(false);
};
useEffect(() => {
const downHandler = (event: KeyboardEvent) => {
if (!isInputDOMNode(event) && (event.key === keyCode || event.keyCode === keyCode)) {
event.preventDefault();
setKeyPressed(true);
}
};
const upHandler = (event: KeyboardEvent) => {
if (!isInputDOMNode(event) && (event.key === keyCode || event.keyCode === keyCode)) {
setKeyPressed(false);
}
};
const resetHandler = () => setKeyPressed(false);
window.addEventListener('keydown', downHandler);
window.addEventListener('keyup', upHandler);
window.addEventListener('blur', resetHandler);
@@ -31,7 +32,7 @@ export default (keyCode: number): boolean => {
window.removeEventListener('keyup', upHandler);
window.removeEventListener('blur', resetHandler);
};
}, []);
}, [keyCode, setKeyPressed]);
return keyPressed;
};