adding hot keys

This commit is contained in:
zmeyer44 2023-10-17 15:08:25 -04:00
parent 5df33347b2
commit 7cb2080c74
2 changed files with 45 additions and 2 deletions

View File

@ -1,6 +1,7 @@
"use client";
import { useEffect } from "react";
import Link from "next/link";
import { useRouter } from "next/navigation";
import dynamic from "next/dynamic";
import useCurrentUser from "@/lib/hooks/useCurrentUser";
import { useModal } from "@/app/_providers/modal/provider";
@ -28,15 +29,29 @@ import {
TooltipProvider,
TooltipTrigger,
} from "@/components/ui/tooltip";
import { useKeyboardShortcut } from "@/lib/hooks/useKeyboardShortcut";
const LoginModal = dynamic(() => import("@/components/Modals/Login"), {
ssr: false,
});
export default function AuthActions() {
const router = useRouter();
const modal = useModal();
const { currentUser, logout, attemptLogin } = useCurrentUser();
const { ndk } = useNDK();
useKeyboardShortcut(["shift", "ctrl", "u"], () => {
if (currentUser) {
router.push(`/${currentUser?.npub}`);
} else {
modal?.show(<LoginModal />);
}
});
useKeyboardShortcut(["shift", "ctrl", "q"], () => {
if (currentUser) {
logout();
}
});
useEffect(() => {
if (ndk && !currentUser) {
void attemptLogin();
@ -213,7 +228,7 @@ export function UserMenu({
className="flex w-full justify-between"
>
Profile
<DropdownMenuShortcut>P</DropdownMenuShortcut>
<DropdownMenuShortcut>U</DropdownMenuShortcut>
</Link>
</DropdownMenuItem>
{/* <DropdownMenuItem>

View File

@ -0,0 +1,28 @@
"use client";
import { useEffect } from "react";
type Key = "ctrl" | "shift" | "alt" | string;
export const useKeyboardShortcut = (keys: Key[], callback: () => void) => {
useEffect(() => {
const handleKeyDown = (event: KeyboardEvent) => {
if (
keys.every(
(key) =>
(key === "ctrl" && (event.metaKey || event.ctrlKey)) ||
(key === "shift" && event.shiftKey) ||
(key === "alt" && event.altKey) ||
(typeof key === "string" && event.key.toLowerCase() === key),
)
) {
callback();
}
};
window.addEventListener("keydown", handleKeyDown);
return () => {
window.removeEventListener("keydown", handleKeyDown);
};
}, [keys, callback]);
};