UNPKG

communication-react-19

Version:

React library for building modern communication user experiences utilizing Azure Communication Services (React 19 compatible fork)

97 lines 2.96 kB
// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. import { useMemo, useRef, useState, useCallback, useEffect } from 'react'; /** * @private */ export default function useLongPress(props) { const { onClick, onLongPress, touchEventsOnly = false } = props; const timerRef = useRef(); const [isLongPress, setIsLongPress] = useState(false); const [action, setAction] = useState(false); useEffect(() => { if (timerRef.current) { clearTimeout(timerRef.current); } return () => { if (timerRef.current) { clearTimeout(timerRef.current); } }; }, [onClick, onLongPress, touchEventsOnly]); const startPressTimer = useCallback(() => { setIsLongPress(false); timerRef.current = setTimeout(() => { setIsLongPress(true); onLongPress(); }, 500); }, [onLongPress]); const handleOnClick = useCallback(() => { if (touchEventsOnly || !onClick) { return; } if (!isLongPress) { onClick(); } }, [isLongPress, onClick, touchEventsOnly]); const handleOnKeyDown = useCallback(() => { if (touchEventsOnly) { return; } if (action) { setAction(false); startPressTimer(); } }, [action, startPressTimer, touchEventsOnly]); const handleOnKeyUp = useCallback(() => { if (touchEventsOnly) { return; } setAction(true); clearTimeout(timerRef.current); }, [touchEventsOnly]); const handleOnMouseDown = useCallback(() => { if (touchEventsOnly) { return; } startPressTimer(); }, [startPressTimer, touchEventsOnly]); const handleOnMouseUp = useCallback(() => { if (touchEventsOnly) { return; } clearTimeout(timerRef.current); }, [touchEventsOnly]); const handleOnTouchStart = useCallback(() => { startPressTimer(); }, [startPressTimer]); const handleOnTouchEnd = useCallback(() => { if (!isLongPress && onClick) { onClick(); } clearTimeout(timerRef.current); }, [onClick, isLongPress]); const handleOnTouchMove = useCallback(() => { clearTimeout(timerRef.current); }, []); return useMemo(() => ({ onClick: handleOnClick, onMouseDown: handleOnMouseDown, onMouseUp: handleOnMouseUp, onTouchStart: handleOnTouchStart, onTouchEnd: handleOnTouchEnd, onKeyDown: handleOnKeyDown, onKeyUp: handleOnKeyUp, onTouchMove: handleOnTouchMove }), [ handleOnClick, handleOnKeyDown, handleOnKeyUp, handleOnMouseDown, handleOnMouseUp, handleOnTouchEnd, handleOnTouchStart, handleOnTouchMove ]); } //# sourceMappingURL=useLongPress.js.map