repositories
loading repo index
repositories
loading repo index
repository
loading code, commits, and activity
Projectflow
stars
latest
clone command
git clone gitlawb://did:key:z6Mkfh4Y...QBEi/projectflowgit clone gitlawb://did:key:z6Mkfh4Y.../projectflowb3cded1async from playground1d ago| #1 | import { useEffect } from "react"; |
| #2 | import { useStore } from "../stores"; |
| #3 | |
| #4 | export function useKeyboardShortcuts() { |
| #5 | useEffect(() => { |
| #6 | const handleKey = (e: KeyboardEvent) => { |
| #7 | const target = e.target as HTMLElement; |
| #8 | if ( |
| #9 | target.tagName === "INPUT" || |
| #10 | target.tagName === "TEXTAREA" || |
| #11 | target.tagName === "SELECT" || |
| #12 | target.isContentEditable |
| #13 | ) { |
| #14 | return; |
| #15 | } |
| #16 | |
| #17 | const store = useStore.getState(); |
| #18 | |
| #19 | switch (e.key) { |
| #20 | case "1": |
| #21 | store.setActiveView("dashboard"); |
| #22 | break; |
| #23 | case "2": |
| #24 | store.setActiveView("projects"); |
| #25 | break; |
| #26 | case "3": |
| #27 | store.setActiveView("board"); |
| #28 | break; |
| #29 | case "4": |
| #30 | store.setActiveView("backlog"); |
| #31 | break; |
| #32 | case "5": |
| #33 | store.setActiveView("sprints"); |
| #34 | break; |
| #35 | case "6": |
| #36 | store.setActiveView("analytics"); |
| #37 | break; |
| #38 | case "b": |
| #39 | if (!e.metaKey && !e.ctrlKey) { |
| #40 | store.setActiveView("board"); |
| #41 | } |
| #42 | break; |
| #43 | case "Escape": |
| #44 | if (store.currentIssue) { |
| #45 | store.setCurrentIssue(null); |
| #46 | } |
| #47 | break; |
| #48 | } |
| #49 | }; |
| #50 | |
| #51 | window.addEventListener("keydown", handleKey); |
| #52 | return () => window.removeEventListener("keydown", handleKey); |
| #53 | }, []); |
| #54 | } |
| #55 |