UNPKG

@gluestack-ui/core

Version:

Universal UI components for React Native, Expo, and Next.js

43 lines 1.67 kB
import React, { useState } from 'react'; import { PanResponder } from 'react-native'; export function useMove(props) { let { onMoveStart, onMove, onMoveEnd } = props; const [initialMoveX, setInitialMoveX] = useState(0); const [initialMoveY, setInitialMoveY] = useState(0); const panResponder = React.useMemo(() => PanResponder.create({ onMoveShouldSetPanResponderCapture: (_event) => { return true; }, onPanResponderGrant: (_evt, gestureState) => { onMoveStart === null || onMoveStart === void 0 ? void 0 : onMoveStart({ type: 'movestart', pointerType: 'touch', }); setInitialMoveX(gestureState.moveX); setInitialMoveY(gestureState.moveY); }, onPanResponderMove: (_event, gestureState) => { const deltaX = gestureState.moveX - initialMoveX; const deltaY = gestureState.moveY - initialMoveY; if (deltaX === 0 && deltaY === 0) { return; } if (deltaX) { onMove({ type: 'move', pointerType: 'touch', deltaX: deltaX, deltaY: deltaY, }); } }, onPanResponderRelease: () => { onMoveEnd === null || onMoveEnd === void 0 ? void 0 : onMoveEnd({ type: 'moveend', pointerType: 'touch', }); }, }), [onMove, onMoveEnd, onMoveStart, initialMoveX, initialMoveY]); return { moveProps: panResponder.panHandlers }; } //# sourceMappingURL=useMove.js.map