flockstr/lib/hooks/useKeyboardShortcut.ts
2023-11-03 14:05:59 -04:00

29 lines
763 B
TypeScript

"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]);
};