Track HiveGrid Cloud planning reference

This commit is contained in:
david committed 2026-06-26 20:48:01 +02:00
1 parent b3d5ea6764
commit e341c5938a
5784 files changed
+1104929 -3

No files matched your search

@@ -0,0 +1,47 @@
import { useCallback, useEffect, useRef } from "react";
function useKeypress(callback: () => void, keyCode: number) {
const escFunction = useCallback((event: any) => {
if (event.keyCode === keyCode) {
callback();
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
useEffect(() => {
document.addEventListener("keydown", escFunction, false);
return () => {
document.removeEventListener("keydown", escFunction, false);
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
}
export function useEscapeKeypress(callback: () => void) {
useKeypress(callback, 27);
}
export function useEnterKeypress(callback: () => void) {
useKeypress(callback, 13);
}
export function useOuterClick(callback: () => void) {
const callbackRef = useRef<any>(null); // initialize mutable ref, which stores callback
const innerRef = useRef<any>(null); // returned to client, who marks "border" element
// update cb on each render, so second useEffect has access to current value
useEffect(() => {
callbackRef.current = callback;
});
useEffect(() => {
document.addEventListener("click", handleClick);
return () => document.removeEventListener("click", handleClick);
function handleClick(e: any) {
if (innerRef.current && callbackRef.current && !innerRef.current.contains(e.target)) callbackRef.current(e);
}
}, []); // no dependencies -> stable click listener
return innerRef; // convenience for client (doesn't need to init ref himself)
}