@gluestack-ui/core
Version:
Universal UI components for React Native, Expo, and Next.js
43 lines • 1.67 kB
JavaScript
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