diff options
Diffstat (limited to 'apps/web/src/hooks/use-shift-key.ts')
| -rw-r--r-- | apps/web/src/hooks/use-shift-key.ts | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/apps/web/src/hooks/use-shift-key.ts b/apps/web/src/hooks/use-shift-key.ts new file mode 100644 index 00000000..4f9fe67c --- /dev/null +++ b/apps/web/src/hooks/use-shift-key.ts @@ -0,0 +1,35 @@ +import { useEffect, useRef, type RefObject } from "react"; + +export function useShiftKey(): RefObject<boolean> { + const isShiftHeldRef = useRef(false); + + useEffect(() => { + const handleKeyDown = ({ key }: KeyboardEvent) => { + if (key === "Shift") { + isShiftHeldRef.current = true; + } + }; + + const handleKeyUp = ({ key }: KeyboardEvent) => { + if (key === "Shift") { + isShiftHeldRef.current = false; + } + }; + + const handleBlur = () => { + isShiftHeldRef.current = false; + }; + + document.addEventListener("keydown", handleKeyDown); + document.addEventListener("keyup", handleKeyUp); + window.addEventListener("blur", handleBlur); + + return () => { + document.removeEventListener("keydown", handleKeyDown); + document.removeEventListener("keyup", handleKeyUp); + window.removeEventListener("blur", handleBlur); + }; + }, []); + + return isShiftHeldRef; +} |
