mirror of https://github.com/boxyhq/jackson.git
30 lines
1003 B
TypeScript
30 lines
1003 B
TypeScript
import { useEffect, useState } from 'react';
|
|
|
|
export default function useKeyPress(targetKey: string): boolean {
|
|
// State for keeping track of whether key is pressed
|
|
const [keyPressed, setKeyPressed] = useState<boolean>(false);
|
|
// If pressed key is our target key then set to true
|
|
function downHandler({ key }: KeyboardEvent) {
|
|
if (key === targetKey) {
|
|
setKeyPressed(true);
|
|
}
|
|
}
|
|
// If released key is our target key then set to false
|
|
const upHandler = ({ key }: KeyboardEvent) => {
|
|
if (key === targetKey) {
|
|
setKeyPressed(false);
|
|
}
|
|
};
|
|
// Add event listeners
|
|
useEffect(() => {
|
|
window.addEventListener('keydown', downHandler);
|
|
window.addEventListener('keyup', upHandler);
|
|
// Remove event listeners on cleanup
|
|
return () => {
|
|
window.removeEventListener('keydown', downHandler);
|
|
window.removeEventListener('keyup', upHandler);
|
|
};
|
|
}, []); // Empty array ensures that effect is only run on mount and unmount
|
|
return keyPressed;
|
|
}
|