import { useCallback } from 'react'; import type { GestureStateChangeEvent, GestureUpdateEvent, PanGestureHandlerEventPayload, } from 'react-native-gesture-handler'; type UseGestureHandlerParams = { onStart?: ( touchInfo: GestureStateChangeEvent ) => void; onActive?: ( touchInfo: GestureUpdateEvent ) => void; onEnd?: ( touchInfo: GestureStateChangeEvent ) => void; }; const useGestureHandler = (gestureHandlers: UseGestureHandlerParams) => { const { onStart, onActive, onEnd } = gestureHandlers; const handleStart = useCallback( (touchInfo: GestureStateChangeEvent) => { 'worklet'; if (!onStart) return; return onStart(touchInfo); }, [onStart] ); const handleActive = useCallback( (extendedTouchInfo: GestureUpdateEvent) => { 'worklet'; if (!onActive) return; return onActive(extendedTouchInfo); }, [onActive] ); const handleEnd = useCallback( ( extendedTouchInfo: GestureStateChangeEvent ) => { 'worklet'; if (!onEnd) return; return onEnd(extendedTouchInfo); }, [onEnd] ); return { onStart: handleStart, onActive: handleActive, onEnd: handleEnd, }; }; export { useGestureHandler };