import useEventListener from "@hooks/useEventListener"; import useTimeout from "@hooks/useTimeout"; import useEffectOnce from "@hooks/useEffectOnce"; import { RefObject } from "react"; type LongPressCallback = () => void; type LongPressOptions = { delay?: number }; export default function useLongPress( ref: RefObject, cb: LongPressCallback, { delay = 250 }: LongPressOptions = {} ) { const { reset, clear } = useTimeout(cb, delay); useEffectOnce(clear); useEventListener("mousedown", reset, ref); useEventListener("touchstart", reset, ref); useEventListener("mouseup", clear, ref); useEventListener("mouseleave", clear, ref); useEventListener("touchend", clear, ref); }