@georstat/react-native-image-gallery
Version:
React Native Image Gallery with Thumbnails
138 lines (116 loc) • 5.03 kB
JavaScript
;
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