PromucFlow_constructor/app/client/src/utils/hooks/useClick.tsx
Abhinav Jha 3b3d5aca62
Performance:entity explorer (#395)
* Entity explorer performance enhancements
2020-08-31 11:26:52 +05:30

37 lines
928 B
TypeScript

import { MutableRefObject, MouseEvent, useEffect } from "react";
export default (
currentRef: MutableRefObject<HTMLElement | null>,
singleClk: (e: MouseEvent<HTMLElement>) => void,
doubleClk?: (e: MouseEvent<HTMLElement>) => void,
) => {
useEffect(() => {
let clickCount = 0;
let timeoutId = 0;
const handleClick = (e: any) => {
if (!doubleClk) {
singleClk(e);
} else {
clickCount++;
if (clickCount === 2 && doubleClk) {
doubleClk(e);
clearTimeout(timeoutId);
clickCount = 0;
} else {
timeoutId = setTimeout(() => {
singleClk(e);
clickCount = 0;
}, 200);
}
}
};
const el = currentRef.current;
el?.addEventListener("click", handleClick);
return () => {
el?.removeEventListener("click", handleClick);
};
}, [currentRef, singleClk, doubleClk]);
};