import { useState } from 'react';
interface ISingleAndDoubleState {
delay?: number;
click: (...args: any) => void;
dbclick?: (...args: any) => void;
}
const useSingleAndDoubleClick = (state: ISingleAndDoubleState) => {
const { delay = 250, click, dblclick } = state ?? {};
const timerRef = useRef<number | null>(null);
const countRef = useRef(0);
const onClick = useCallback((...args) => {
clearTimeout(timerRef.current);
timerRef.current = setTimeout(() => {
if (countRef.current === 1) {
click?.(...args);
}
}, delay);
}, [delay, click]);
const onDoubleClick = useCallback((...args) => {
clearTimeout(timerRef.current);
dblclick?.(...args);
}, [dblclick]);
return { onClick, onDoubleClick } as const;
}
export default useSingleAndDoubleClick;