UNPKG

react-native-sortables

Version:

Powerful Sortable Components for Flexible Content Reordering in React Native

67 lines (66 loc) 2.13 kB
"use strict"; import React from "react"; import { useMemo } from 'react'; import { View } from 'react-native'; import { Gesture, GestureDetector } from 'react-native-gesture-handler'; import { useItemContext } from '../../providers'; import { jsx as _jsx } from "react/jsx-runtime"; export default function SortableTouchable({ children, failDistance = 10, gestureMode = 'exclusive', onDoubleTap, onLongPress, onTap, onTouchesDown, onTouchesUp, ...viewProps }) { const { gesture: externalGesture } = useItemContext(); const gesture = useMemo(() => { const decorate = decoratedGesture => { decoratedGesture.simultaneousWithExternalGesture(externalGesture).runOnJS(true); if ('maxDistance' in decoratedGesture) { decoratedGesture.maxDistance(failDistance); } return decoratedGesture; }; const gestures = []; if (onTap) { gestures.push(decorate(Gesture.Tap()).onStart(onTap)); } if (onDoubleTap) { gestures.push(decorate(Gesture.Tap()).numberOfTaps(2).onStart(onDoubleTap)); } if (onLongPress) { gestures.push(decorate(Gesture.LongPress()).onStart(onLongPress)); } if (onTouchesDown || onTouchesUp) { // Reuse already added gesture if possible or create a manual gesture // if there is no other gesture yet if (!gestures.length) { gestures.push(decorate(Gesture.Manual())); } const lastGesture = gestures[gestures.length - 1]; if (onTouchesDown) { lastGesture.onTouchesDown(onTouchesDown); } if (onTouchesUp) { lastGesture.onTouchesUp(onTouchesUp); } } return gestureMode === 'exclusive' ? Gesture.Exclusive(...gestures) : Gesture.Simultaneous(...gestures); }, [failDistance, onTap, onDoubleTap, onLongPress, onTouchesDown, onTouchesUp, externalGesture, gestureMode]); return /*#__PURE__*/_jsx(GestureDetector, { gesture: gesture, userSelect: "none", children: /*#__PURE__*/_jsx(View, { ...viewProps, collapsable: false, children: children }) }); } //# sourceMappingURL=SortableTouchable.js.map