flockstr/lib/hooks/useKeyboardShortcut.ts

29 lines
762 B
TypeScript
Raw Normal View History

2023-10-17 15:08:25 -04:00
"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]);
};