Spaces:
Paused
Paused
| import { useEffect } from "react"; | |
| import { isKeyboardShortcutTextInputTarget } from "../lib/keyboardShortcuts"; | |
| interface ShortcutHandlers { | |
| enabled?: boolean; | |
| onNewIssue?: () => void; | |
| onToggleSidebar?: () => void; | |
| onTogglePanel?: () => void; | |
| } | |
| export function useKeyboardShortcuts({ | |
| enabled = true, | |
| onNewIssue, | |
| onToggleSidebar, | |
| onTogglePanel, | |
| }: ShortcutHandlers) { | |
| useEffect(() => { | |
| if (!enabled) return; | |
| function handleKeyDown(e: KeyboardEvent) { | |
| // Don't fire shortcuts when typing in inputs | |
| if (isKeyboardShortcutTextInputTarget(e.target)) { | |
| 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); | |
| }, [enabled, onNewIssue, onToggleSidebar, onTogglePanel]); | |
| } | |