| import { useEffect } from "react"; | |
| interface ShortcutHandlers { | |
| onNewIssue?: () => void; | |
| onToggleSidebar?: () => void; | |
| onTogglePanel?: () => void; | |
| } | |
| export function useKeyboardShortcuts({ onNewIssue, onToggleSidebar, onTogglePanel }: ShortcutHandlers) { | |
| useEffect(() => { | |
| function handleKeyDown(e: KeyboardEvent) { | |
| // Don't fire shortcuts when typing in inputs | |
| const target = e.target as HTMLElement; | |
| if (target.tagName === "INPUT" || target.tagName === "TEXTAREA" || target.isContentEditable) { | |
| return; | |
| } | |
| // C β New Issue | |
| if (e.key === "c" && !e.metaKey && !e.ctrlKey && !e.altKey) { | |
| e.preventDefault(); | |
| onNewIssue?.(); | |
| } | |
| // [ β Toggle Sidebar | |
| if (e.key === "[" && !e.metaKey && !e.ctrlKey) { | |
| e.preventDefault(); | |
| onToggleSidebar?.(); | |
| } | |
| // ] β Toggle Panel | |
| if (e.key === "]" && !e.metaKey && !e.ctrlKey) { | |
| e.preventDefault(); | |
| onTogglePanel?.(); | |
| } | |
| } | |
| document.addEventListener("keydown", handleKeyDown); | |
| return () => document.removeEventListener("keydown", handleKeyDown); | |
| }, [onNewIssue, onToggleSidebar, onTogglePanel]); | |
| } | |