/** * Copyright (c) 2023-present Plane Software, Inc. and contributors * SPDX-License-Identifier: AGPL-3.0-only * See the LICENSE file for details. */ import { useEffect, useRef } from "react"; const useKeypress = (key: string, callback: (event: KeyboardEvent) => void) => { // Keep the latest callback in a ref so callers can pass an inline arrow // without tearing down and re-adding the document listener every render. const callbackRef = useRef(callback); useEffect(() => { callbackRef.current = callback; }, [callback]); useEffect(() => { const handleKeydown = (event: KeyboardEvent) => { if (event.key === key) { callbackRef.current(event); } }; document.addEventListener("keydown", handleKeydown); return () => { document.removeEventListener("keydown", handleKeydown); }; }, [key]); }; export default useKeypress;