mirror of
https://github.com/invoke-ai/InvokeAI.git
synced 2026-02-04 10:34:55 -05:00
36 lines
795 B
TypeScript
36 lines
795 B
TypeScript
// https://stackoverflow.com/a/73731908
|
|
import { useCallback, useEffect, useState } from 'react';
|
|
|
|
type UseSingleAndDoubleClickOptions = {
|
|
onSingleClick: () => void;
|
|
onDoubleClick: () => void;
|
|
latency?: number;
|
|
};
|
|
|
|
export function useSingleAndDoubleClick({
|
|
onSingleClick,
|
|
onDoubleClick,
|
|
latency = 250,
|
|
}: UseSingleAndDoubleClickOptions): () => void {
|
|
const [click, setClick] = useState(0);
|
|
|
|
useEffect(() => {
|
|
const timer = setTimeout(() => {
|
|
if (click === 1) {
|
|
onSingleClick();
|
|
}
|
|
setClick(0);
|
|
}, latency);
|
|
|
|
if (click === 2) {
|
|
onDoubleClick();
|
|
}
|
|
|
|
return () => clearTimeout(timer);
|
|
}, [click, onDoubleClick, latency, onSingleClick]);
|
|
|
|
const onClick = useCallback(() => setClick((prev) => prev + 1), []);
|
|
|
|
return onClick;
|
|
}
|