openpanel/documentation/src/hooks/use-keydown.ts
2024-02-05 10:23:04 +01:00

30 lines
713 B
TypeScript

import { RefObject } from "react";
import React from "react";
type Handler = (event: KeyboardEvent) => void;
export const useKeyDown = <T extends HTMLElement = HTMLElement>(
ref: RefObject<T>,
keys: string[],
callback: Handler,
) => {
React.useEffect(() => {
const handleKeyDown = (event) => {
if (!ref.current) return;
if (keys.includes(event.key)) {
event.preventDefault();
callback(event);
}
};
document.addEventListener("keydown", handleKeyDown, true);
return () => {
document.removeEventListener("keydown", handleKeyDown, true);
};
}, [ref]);
return ref;
};