import { useCallback, useRef } from "react"; const LONG_PRESS_MS = 500; export function useLongPress(onLongPress: (e: React.TouchEvent) => void) { const timerRef = useRef>(undefined); const firedRef = useRef(false); const onTouchStart = useCallback( (e: React.TouchEvent) => { firedRef.current = false; timerRef.current = setTimeout(() => { firedRef.current = true; onLongPress(e); }, LONG_PRESS_MS); }, [onLongPress], ); const onTouchEnd = useCallback((e: React.TouchEvent) => { clearTimeout(timerRef.current); if (firedRef.current) { e.preventDefault(); } }, []); const onTouchMove = useCallback(() => { clearTimeout(timerRef.current); }, []); return { onTouchStart, onTouchEnd, onTouchMove }; }