UNPKG

@georstat/react-native-image-gallery

Version:
138 lines (116 loc) 5.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _reactNative = require("react-native"); var _helpers = require("./_helpers"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } const PanContainer = _ref => { let { children, close, setIsDragging } = _ref; const translationXY = (0, _react.useRef)(new _reactNative.Animated.ValueXY()).current; const scale = (0, _react.useRef)(new _reactNative.Animated.Value(1)).current; let _initialTouches = (0, _react.useRef)().current; const onRelease = (_, gestureState) => { setIsDragging(false); if (gestureState.dy > 180 && _initialTouches.length === 1) { close(); return false; } _reactNative.Animated.parallel([_reactNative.Animated.timing(scale, { duration: 100, toValue: 1, useNativeDriver: true }), _reactNative.Animated.timing(translationXY.x, { duration: 100, toValue: 0, useNativeDriver: true }), _reactNative.Animated.timing(translationXY.y, { duration: 100, toValue: 0, useNativeDriver: true })]).start(); }; const panResponder = _react.default.useRef(_reactNative.PanResponder.create({ onStartShouldSetPanResponder: () => true, onMoveShouldSetPanResponder: (_, gestureState) => { const absDx = Math.abs(gestureState.dx); const absDY = Math.abs(gestureState.dy); if (absDY > 5 && absDx <= 2 && gestureState.numberActiveTouches <= 1) { return true; } if (absDx > 0 && gestureState.numberActiveTouches <= 1) { return false; } return true; }, // onMoveShouldSetPanResponderCapture: (evt, gestureState) => true, onPanResponderGrant: evt => { setIsDragging(true); _initialTouches = evt.nativeEvent.touches; translationXY.setOffset({ x: 0, y: 0 }); return true; }, onPanResponderMove: (evt, gestureState) => { const { touches } = evt.nativeEvent; if (touches.length <= 1 && Math.abs(gestureState.dy) > 10) { translationXY.y.setValue(gestureState.dy); return true; } if (touches.length <= 1 && Math.abs(gestureState.dx) > 0) { setIsDragging(false); return false; } if (touches.length < 2) { // Trigger a release onRelease(evt, gestureState); return false; } const { dx, dy } = gestureState; translationXY.x.setValue(dx); translationXY.y.setValue(dy); // for scaling photo const currentDistance = (0, _helpers.getDistance)(touches); const initialDistance = (0, _helpers.getDistance)(_initialTouches); const newScale = (0, _helpers.getScale)(currentDistance, initialDistance); scale.setValue(newScale); return true; }, onPanResponderTerminationRequest: () => { return true; }, onPanResponderRelease: (evt, gestureState) => { onRelease(evt, gestureState); return true; }, onPanResponderTerminate: () => true })).current; return /*#__PURE__*/_react.default.createElement(_reactNative.View, null, /*#__PURE__*/_react.default.createElement(_reactNative.Animated.View, _extends({}, panResponder.panHandlers, { style: { transform: [{ translateX: translationXY.x }, { translateY: translationXY.y }, { scale: scale }] } }), children)); }; var _default = PanContainer; exports.default = _default; //# sourceMappingURL=PanContainer.js.map