diff --git a/lib/commonjs/ReactNativeZoomableView.js b/lib/commonjs/ReactNativeZoomableView.js
index 000ace8..dff3f89 100644
--- a/lib/commonjs/ReactNativeZoomableView.js
+++ b/lib/commonjs/ReactNativeZoomableView.js
@@ -13,23 +13,36 @@ var _StaticPin = require("./components/StaticPin");
var _debugHelper = require("./debugHelper");
var _helper = require("./helper");
var _coordinateConversion = require("./helper/coordinateConversion");
+var _getNextZoomStep = require("./helper/getNextZoomStep");
+var _useDebugPoints = require("./hooks/useDebugPoints");
var _useLatestCallback = require("./hooks/useLatestCallback");
+var _useZoomSubject = require("./hooks/useZoomSubject");
var _jsxRuntime = require("react/jsx-runtime");
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
const ReactNativeZoomableView = (props, ref) => {
- const [originalWidth, setOriginalWidth] = (0, _react.useState)(0);
- const [originalHeight, setOriginalHeight] = (0, _react.useState)(0);
- const [originalPageX, setOriginalPageX] = (0, _react.useState)(0);
- const [originalPageY, setOriginalPageY] = (0, _react.useState)(0);
- const [originalX, setOriginalX] = (0, _react.useState)(0);
- const [originalY, setOriginalY] = (0, _react.useState)(0);
+ const {
+ wrapperRef: zoomSubjectWrapperRef,
+ measure: measureZoomSubject,
+ originalWidth,
+ originalHeight,
+ originalPageX,
+ originalPageY,
+ originalX,
+ originalY
+ } = (0, _useZoomSubject.useZoomSubject)();
const [pinSize, setPinSize] = (0, _react.useState)({
width: 0,
height: 0
});
- const [debugPoints, setDebugPoints] = (0, _react.useState)([]);
const [stateTouches, setStateTouches] = (0, _react.useState)([]);
- const zoomSubjectWrapperRef = (0, _react.useRef)(null);
+ const {
+ debugPoints,
+ setDebugPoints,
+ setPinchDebugPoints
+ } = (0, _useDebugPoints.useDebugPoints)({
+ originalPageX,
+ originalPageY
+ });
const gestureHandlers = (0, _react.useRef)();
const doubleTapFirstTapReleaseTimestamp = (0, _react.useRef)();
props = (0, _lodash.defaults)({}, props, {
@@ -56,6 +69,16 @@ const ReactNativeZoomableView = (props, ref) => {
onStaticPinPositionMove: undefined,
disablePanOnInitialZoom: false
});
+ const {
+ staticPinIcon,
+ children,
+ visualTouchFeedbackEnabled,
+ doubleTapDelay,
+ staticPinPosition,
+ onStaticPinLongPress,
+ onStaticPinPress,
+ pinProps
+ } = props;
const panAnim = (0, _react.useRef)(new _reactNative.Animated.ValueXY({
x: 0,
y: 0
@@ -77,29 +100,81 @@ const ReactNativeZoomableView = (props, ref) => {
const singleTapTimeoutId = (0, _react.useRef)();
const touches = (0, _react.useRef)([]);
const doubleTapFirstTap = (0, _react.useRef)();
- const measureZoomSubjectInterval = (0, _react.useRef)();
- (0, _react.useLayoutEffect)(() => {
- gestureHandlers.current = _reactNative.PanResponder.create({
- onStartShouldSetPanResponder: _handleStartShouldSetPanResponder,
- onPanResponderGrant: _handlePanResponderGrant,
- onPanResponderMove: _handlePanResponderMove,
- onPanResponderRelease: _handlePanResponderEnd,
- onPanResponderTerminate: (evt, gestureState) => {
- // We should also call _handlePanResponderEnd
- // to properly perform cleanups when the gesture is terminated
- // (aka gesture handling responsibility is taken over by another component).
- // This also fixes a weird issue where
- // on real device, sometimes onPanResponderRelease is not called when you lift 2 fingers up,
- // but onPanResponderTerminate is called instead for no apparent reason.
- _handlePanResponderEnd(evt, gestureState);
- props.onPanResponderTerminate?.(evt, gestureState, _getZoomableViewEventObject());
+
+ /**
+ * Returns additional information about components current state for external event hooks
+ *
+ * @returns {{}}
+ * @private
+ */
+ const _getZoomableViewEventObject = (0, _useLatestCallback.useLatestCallback)((overwriteObj = {}) => {
+ return {
+ zoomLevel: zoomLevel.current,
+ offsetX: offsetX.current,
+ offsetY: offsetY.current,
+ originalHeight,
+ originalWidth,
+ originalPageX,
+ originalPageY,
+ ...overwriteObj
+ };
+ });
+ const _staticPinPosition = (0, _useLatestCallback.useLatestCallback)(() => {
+ if (!props.staticPinPosition) return;
+ if (!props.contentWidth || !props.contentHeight) return;
+ return (0, _coordinateConversion.viewportPositionToImagePosition)({
+ viewportPosition: {
+ x: props.staticPinPosition.x,
+ y: props.staticPinPosition.y
},
- onPanResponderTerminationRequest: (evt, gestureState) => !!props.onPanResponderTerminationRequest?.(evt, gestureState, _getZoomableViewEventObject()),
- // Defaults to true to prevent parent components, such as React Navigation's tab view, from taking over as responder.
- onShouldBlockNativeResponder: (evt, gestureState) => props.onShouldBlockNativeResponder?.(evt, gestureState, _getZoomableViewEventObject()) ?? true,
- onStartShouldSetPanResponderCapture: (evt, gestureState) => !!props.onStartShouldSetPanResponderCapture?.(evt, gestureState),
- onMoveShouldSetPanResponderCapture: (evt, gestureState) => !!props.onMoveShouldSetPanResponderCapture?.(evt, gestureState)
+ imageSize: {
+ height: props.contentHeight,
+ width: props.contentWidth
+ },
+ zoomableEvent: {
+ ..._getZoomableViewEventObject(),
+ offsetX: offsetX.current,
+ offsetY: offsetY.current,
+ zoomLevel: zoomLevel.current
+ }
});
+ });
+ const _updateStaticPin = (0, _useLatestCallback.useLatestCallback)(() => {
+ const position = _staticPinPosition();
+ if (!position) return;
+ props.onStaticPinPositionChange?.(position);
+ });
+ const _addTouch = (0, _useLatestCallback.useLatestCallback)(touch => {
+ touches.current.push(touch);
+ setStateTouches([...touches.current]);
+ });
+ const _removeTouch = (0, _useLatestCallback.useLatestCallback)(touch => {
+ touches.current.splice(touches.current.indexOf(touch), 1);
+ setStateTouches([...touches.current]);
+ });
+ const onStaticPinPositionChange = (0, _useLatestCallback.useLatestCallback)(props.onStaticPinPositionChange || (() => undefined));
+ const debouncedOnStaticPinPositionChange = (0, _react.useMemo)(() => (0, _lodash.debounce)(onStaticPinPositionChange, 100), []);
+
+ /**
+ * try to invoke onTransform
+ * @private
+ */
+ const _invokeOnTransform = (0, _useLatestCallback.useLatestCallback)(() => {
+ const zoomableViewEvent = _getZoomableViewEventObject();
+ const position = _staticPinPosition();
+ if (!zoomableViewEvent.originalWidth || !zoomableViewEvent.originalHeight) return {
+ successful: false
+ };
+ props.onTransform?.(zoomableViewEvent);
+ if (position) {
+ props.onStaticPinPositionMove?.(position);
+ debouncedOnStaticPinPositionChange(position);
+ }
+ return {
+ successful: true
+ };
+ });
+ (0, _react.useLayoutEffect)(() => {
if (props.zoomAnimatedValue) zoomAnim.current = props.zoomAnimatedValue;
if (props.panAnimatedValueXY) panAnim.current = props.panAnimatedValueXY;
if (props.initialZoom) zoomLevel.current = props.initialZoom;
@@ -169,95 +244,6 @@ const ReactNativeZoomableView = (props, ref) => {
(0, _react.useLayoutEffect)(() => {
if (onTransformInvocationInitialized.current) _invokeOnTransform();
}, [props.staticPinPosition?.x, props.staticPinPosition?.y]);
- (0, _react.useEffect)(() => {
- measureZoomSubject();
- // We've already run `grabZoomSubjectOriginalMeasurements` at various events
- // to make sure the measurements are promptly updated.
- // However, there might be cases we haven't accounted for, especially when
- // native processes are involved. To account for those cases,
- // we'll use an interval here to ensure we're always up-to-date.
- // The `setState` in `grabZoomSubjectOriginalMeasurements` won't trigger a rerender
- // if the values given haven't changed, so we're not running performance risk here.
- measureZoomSubjectInterval.current = setInterval(measureZoomSubject, 1e3);
- return () => {
- measureZoomSubjectInterval.current && clearInterval(measureZoomSubjectInterval.current);
- };
- }, []);
- const onStaticPinPositionChange = (0, _useLatestCallback.useLatestCallback)(props.onStaticPinPositionChange || (() => undefined));
- const debouncedOnStaticPinPositionChange = (0, _react.useMemo)(() => (0, _lodash.debounce)(onStaticPinPositionChange, 100), []);
-
- /**
- * try to invoke onTransform
- * @private
- */
- const _invokeOnTransform = (0, _useLatestCallback.useLatestCallback)(() => {
- const zoomableViewEvent = _getZoomableViewEventObject();
- const position = _staticPinPosition();
- if (!zoomableViewEvent.originalWidth || !zoomableViewEvent.originalHeight) return {
- successful: false
- };
- props.onTransform?.(zoomableViewEvent);
- if (position) {
- props.onStaticPinPositionMove?.(position);
- debouncedOnStaticPinPositionChange(position);
- }
- return {
- successful: true
- };
- });
-
- /**
- * Returns additional information about components current state for external event hooks
- *
- * @returns {{}}
- * @private
- */
- const _getZoomableViewEventObject = (0, _useLatestCallback.useLatestCallback)((overwriteObj = {}) => {
- return {
- zoomLevel: zoomLevel.current,
- offsetX: offsetX.current,
- offsetY: offsetY.current,
- originalHeight,
- originalWidth,
- originalPageX,
- originalPageY,
- ...overwriteObj
- };
- });
-
- /**
- * Get the original box dimensions and save them for later use.
- * (They will be used to calculate boxBorders)
- *
- * @private
- */
- const measureZoomSubject = (0, _useLatestCallback.useLatestCallback)(() => {
- // make sure we measure after animations are complete
- requestAnimationFrame(() => {
- // this setTimeout is here to fix a weird issue on iOS where the measurements are all `0`
- // when navigating back (react-navigation stack) from another view
- // while closing the keyboard at the same time
- setTimeout(() => {
- // In normal conditions, we're supposed to measure zoomSubject instead of its wrapper.
- // However, our zoomSubject may have been transformed by an initial zoomLevel or offset,
- // in which case these measurements will not represent the true "original" measurements.
- // We just need to make sure the zoomSubjectWrapper perfectly aligns with the zoomSubject
- // (no border, space, or anything between them)
- zoomSubjectWrapperRef.current?.measure((x, y, width, height, pageX, pageY) => {
- // When the component is off-screen, these become all 0s, so we don't set them
- // to avoid messing up calculations, especially ones that are done right after
- // the component transitions from hidden to visible.
- if (!pageX && !pageY && !width && !height) return;
- setOriginalX(x);
- setOriginalY(y);
- setOriginalWidth(width);
- setOriginalHeight(height);
- setOriginalPageX(pageX);
- setOriginalPageY(pageY);
- });
- });
- });
- });
/**
* Handles the start of touch events and checks for taps
@@ -302,130 +288,64 @@ const ReactNativeZoomableView = (props, ref) => {
});
/**
- * Handles the end of touch events
+ * Calculates the amount the offset should shift since the last position during panning
*
- * @param e
- * @param gestureState
+ * @param {Vec2D} gestureCenterPoint
*
* @private
*/
- const _handlePanResponderEnd = (0, _useLatestCallback.useLatestCallback)((e, gestureState) => {
- if (!gestureType.current) {
- _resolveAndHandleTap(e);
- }
- setDebugPoints([]);
- lastGestureCenterPosition.current = null;
- if (longPressTimeout.current) {
- clearTimeout(longPressTimeout.current);
- longPressTimeout.current = undefined;
- }
- props.onPanResponderEnd?.(e, gestureState, _getZoomableViewEventObject());
- if (gestureType.current === 'pinch') {
- props.onZoomEnd?.(e, gestureState, _getZoomableViewEventObject());
- } else if (gestureType.current === 'shift') {
- props.onShiftingEnd?.(e, gestureState, _getZoomableViewEventObject());
- }
- if (props.staticPinPosition) {
- _updateStaticPin();
+ const _calcOffsetShiftSinceLastGestureState = (0, _useLatestCallback.useLatestCallback)(gestureCenterPoint => {
+ const {
+ movementSensibility
+ } = props;
+ let shift = null;
+ if (lastGestureCenterPosition.current && movementSensibility) {
+ const dx = gestureCenterPoint.x - lastGestureCenterPosition.current.x;
+ const dy = gestureCenterPoint.y - lastGestureCenterPosition.current.y;
+ const shiftX = dx / zoomLevel.current / movementSensibility;
+ const shiftY = dy / zoomLevel.current / movementSensibility;
+ shift = {
+ x: shiftX,
+ y: shiftY
+ };
}
- gestureType.current = undefined;
- gestureStarted.current = false;
+ lastGestureCenterPosition.current = gestureCenterPoint;
+ return shift;
});
/**
- * Handles the actual movement of our pan responder
+ * Handles the pinch movement and zooming
*
* @param e
* @param gestureState
*
* @private
*/
- const _handlePanResponderMove = (0, _useLatestCallback.useLatestCallback)((e, gestureState) => {
- if (props.onPanResponderMove) {
- if (props.onPanResponderMove(e, gestureState, _getZoomableViewEventObject())) {
- return false;
- }
+ const _handlePinching = (0, _useLatestCallback.useLatestCallback)((e, gestureState) => {
+ if (!props.zoomEnabled) return;
+ const {
+ maxZoom,
+ minZoom,
+ pinchToZoomInSensitivity,
+ pinchToZoomOutSensitivity
+ } = props;
+ const distance = (0, _helper.calcGestureTouchDistance)(e, gestureState);
+ if (props.onZoomBefore && props.onZoomBefore(e, gestureState, _getZoomableViewEventObject())) {
+ return;
}
+ if (!distance) return;
+ if (!lastGestureTouchDistance.current) return;
- // Only supports 2 touches and below,
- // any invalid number will cause the gesture to end.
- if (gestureState.numberActiveTouches <= 2) {
- if (!gestureStarted.current) {
- _handlePanResponderGrant(e, gestureState);
- }
- } else {
- if (gestureStarted.current) {
- _handlePanResponderEnd(e, gestureState);
- }
- return true;
- }
- if (gestureState.numberActiveTouches === 2) {
- if (longPressTimeout.current) {
- clearTimeout(longPressTimeout.current);
- longPressTimeout.current = undefined;
- }
-
- // change some measurement states when switching gesture to ensure a smooth transition
- if (gestureType.current !== 'pinch') {
- lastGestureCenterPosition.current = (0, _helper.calcGestureCenterPoint)(e, gestureState);
- lastGestureTouchDistance.current = (0, _helper.calcGestureTouchDistance)(e, gestureState);
- }
- gestureType.current = 'pinch';
- _handlePinching(e, gestureState);
- } else if (gestureState.numberActiveTouches === 1) {
- if (longPressTimeout.current && (Math.abs(gestureState.dx) > 5 || Math.abs(gestureState.dy) > 5)) {
- clearTimeout(longPressTimeout.current);
- longPressTimeout.current = undefined;
- }
- // change some measurement states when switching gesture to ensure a smooth transition
- if (gestureType.current !== 'shift') {
- lastGestureCenterPosition.current = (0, _helper.calcGestureCenterPoint)(e, gestureState);
- }
- const {
- dx,
- dy
- } = gestureState;
- const isShiftGesture = Math.abs(dx) > 2 || Math.abs(dy) > 2;
- if (isShiftGesture) {
- gestureType.current = 'shift';
- _handleShifting(gestureState);
- }
- }
- });
-
- /**
- * Handles the pinch movement and zooming
- *
- * @param e
- * @param gestureState
- *
- * @private
- */
- const _handlePinching = (0, _useLatestCallback.useLatestCallback)((e, gestureState) => {
- if (!props.zoomEnabled) return;
- const {
- maxZoom,
- minZoom,
- pinchToZoomInSensitivity,
- pinchToZoomOutSensitivity
- } = props;
- const distance = (0, _helper.calcGestureTouchDistance)(e, gestureState);
- if (props.onZoomBefore && props.onZoomBefore(e, gestureState, _getZoomableViewEventObject())) {
- return;
- }
- if (!distance) return;
- if (!lastGestureTouchDistance.current) return;
-
- // define the new zoom level and take zoom level sensitivity into consideration
- const zoomGrowthFromLastGestureState = distance / lastGestureTouchDistance.current;
- lastGestureTouchDistance.current = distance;
- const pinchToZoomSensitivity = zoomGrowthFromLastGestureState < 1 ? pinchToZoomOutSensitivity : pinchToZoomInSensitivity;
- if (pinchToZoomSensitivity == null) return;
- const deltaGrowth = zoomGrowthFromLastGestureState - 1;
- // 0 - no resistance
- // 10 - 90% resistance
- const deltaGrowthAdjustedBySensitivity = deltaGrowth * (1 - pinchToZoomSensitivity * 9 / 100);
- let newZoomLevel = zoomLevel.current * (1 + deltaGrowthAdjustedBySensitivity);
+ // define the new zoom level and take zoom level sensitivity into consideration
+ const zoomGrowthFromLastGestureState = distance / lastGestureTouchDistance.current;
+ lastGestureTouchDistance.current = distance;
+ const pinchToZoomSensitivity = zoomGrowthFromLastGestureState < 1 ? pinchToZoomOutSensitivity : pinchToZoomInSensitivity;
+ if (pinchToZoomSensitivity == null) return;
+ const deltaGrowth = zoomGrowthFromLastGestureState - 1;
+ // 0 - no resistance
+ // 10 - 90% resistance
+ const deltaGrowthAdjustedBySensitivity = deltaGrowth * (1 - pinchToZoomSensitivity * 9 / 100);
+ let newZoomLevel = zoomLevel.current * (1 + deltaGrowthAdjustedBySensitivity);
// make sure max and min zoom levels are respected
if (maxZoom != null && newZoomLevel > maxZoom) {
@@ -450,7 +370,7 @@ const ReactNativeZoomableView = (props, ref) => {
}
// Uncomment to debug
- props.debug && _setPinchDebugPoints(e, zoomCenter);
+ props.debug && setPinchDebugPoints(e, zoomCenter);
const oldOffsetX = offsetX.current;
const oldOffsetY = offsetY.current;
const oldScale = zoomLevel.current;
@@ -475,48 +395,28 @@ const ReactNativeZoomableView = (props, ref) => {
});
/**
- * Used to debug pinch events
- * @param gestureResponderEvent
- * @param zoomCenter
- * @param points
- */
- const _setPinchDebugPoints = (0, _useLatestCallback.useLatestCallback)((gestureResponderEvent, zoomCenter, ...points) => {
- const {
- touches
- } = gestureResponderEvent.nativeEvent;
- setDebugPoints([{
- x: touches[0].pageX - originalPageX,
- y: touches[0].pageY - originalPageY
- }, {
- x: touches[1].pageX - originalPageX,
- y: touches[1].pageY - originalPageY
- }, zoomCenter, ...points]);
- });
-
- /**
- * Calculates the amount the offset should shift since the last position during panning
- *
- * @param {Vec2D} gestureCenterPoint
+ * Set the state to offset moved
*
- * @private
+ * @param {number} newOffsetX
+ * @param {number} newOffsetY
+ * @returns
*/
- const _calcOffsetShiftSinceLastGestureState = (0, _useLatestCallback.useLatestCallback)(gestureCenterPoint => {
+ const _setNewOffsetPosition = (0, _useLatestCallback.useLatestCallback)((newOffsetX, newOffsetY) => {
const {
- movementSensibility
+ onShiftingBefore,
+ onShiftingAfter
} = props;
- let shift = null;
- if (lastGestureCenterPosition.current && movementSensibility) {
- const dx = gestureCenterPoint.x - lastGestureCenterPosition.current.x;
- const dy = gestureCenterPoint.y - lastGestureCenterPosition.current.y;
- const shiftX = dx / zoomLevel.current / movementSensibility;
- const shiftY = dy / zoomLevel.current / movementSensibility;
- shift = {
- x: shiftX,
- y: shiftY
- };
+ if (onShiftingBefore?.(null, null, _getZoomableViewEventObject())) {
+ return;
}
- lastGestureCenterPosition.current = gestureCenterPoint;
- return shift;
+ offsetX.current = newOffsetX;
+ offsetY.current = newOffsetY;
+ panAnim.current.setValue({
+ x: offsetX.current,
+ y: offsetY.current
+ });
+ zoomAnim.current.setValue(zoomLevel.current);
+ onShiftingAfter?.(null, null, _getZoomableViewEventObject());
});
/**
@@ -550,28 +450,87 @@ const ReactNativeZoomableView = (props, ref) => {
});
/**
- * Set the state to offset moved
+ * Zooms to a specific level. A "zoom center" can be provided, which specifies
+ * the point that will remain in the same position on the screen after the zoom.
+ * The coordinates of the zoom center is relative to the zoom subject.
+ * { x: 0, y: 0 } is the very center of the zoom subject.
*
- * @param {number} newOffsetX
- * @param {number} newOffsetY
- * @returns
+ * @param newZoomLevel
+ * @param zoomCenter - If not supplied, the container's center is the zoom center
*/
- const _setNewOffsetPosition = (0, _useLatestCallback.useLatestCallback)((newOffsetX, newOffsetY) => {
+ const publicZoomTo = (0, _useLatestCallback.useLatestCallback)((newZoomLevel, zoomCenter) => {
+ if (!props.zoomEnabled) return false;
+ if (props.maxZoom && newZoomLevel > props.maxZoom) return false;
+ if (props.minZoom && newZoomLevel < props.minZoom) return false;
+ props.onZoomBefore?.(null, null, _getZoomableViewEventObject());
+
+ // == Perform Pan Animation to preserve the zoom center while zooming ==
+ let listenerId = '';
+ if (zoomCenter) {
+ // Calculates panAnim values based on changes in zoomAnim.
+ let prevScale = zoomLevel.current;
+ // Since zoomAnim is calculated in native driver,
+ // it will jitter panAnim once in a while,
+ // because here panAnim is being calculated in js.
+ // However the jittering should mostly occur in simulator.
+ listenerId = zoomAnim.current.addListener(({
+ value: newScale
+ }) => {
+ panAnim.current.setValue({
+ x: (0, _helper.calcNewScaledOffsetForZoomCentering)(offsetX.current, originalWidth, prevScale, newScale, zoomCenter.x),
+ y: (0, _helper.calcNewScaledOffsetForZoomCentering)(offsetY.current, originalHeight, prevScale, newScale, zoomCenter.y)
+ });
+ prevScale = newScale;
+ });
+ }
+
+ // == Perform Zoom Animation ==
+ (0, _animations.getZoomToAnimation)(zoomAnim.current, newZoomLevel).start(() => {
+ zoomAnim.current.removeListener(listenerId);
+ });
+ // == Zoom Animation Ends ==
+
+ props.onZoomAfter?.(null, null, _getZoomableViewEventObject());
+ return true;
+ });
+
+ /**
+ * Handles the double tap event
+ *
+ * @param e
+ *
+ * @private
+ */
+ const _handleDoubleTap = (0, _useLatestCallback.useLatestCallback)(e => {
const {
- onShiftingBefore,
- onShiftingAfter
+ onDoubleTapBefore,
+ onDoubleTapAfter,
+ doubleTapZoomToCenter
} = props;
- if (onShiftingBefore?.(null, null, _getZoomableViewEventObject())) {
- return;
- }
- offsetX.current = newOffsetX;
- offsetY.current = newOffsetY;
- panAnim.current.setValue({
- x: offsetX.current,
- y: offsetY.current
+ onDoubleTapBefore?.(e, _getZoomableViewEventObject());
+ const nextZoomStep = (0, _getNextZoomStep.getNextZoomStep)({
+ zoomLevel: zoomLevel.current,
+ zoomStep: props.zoomStep,
+ maxZoom: props.maxZoom,
+ initialZoom: props.initialZoom
});
- zoomAnim.current.setValue(zoomLevel.current);
- onShiftingAfter?.(null, null, _getZoomableViewEventObject());
+ if (nextZoomStep == null) return;
+
+ // define new zoom position coordinates
+ const zoomPositionCoordinates = {
+ x: e.nativeEvent.pageX - originalPageX,
+ y: e.nativeEvent.pageY - originalPageY
+ };
+
+ // if doubleTapZoomToCenter enabled -> always zoom to center instead
+ if (doubleTapZoomToCenter) {
+ zoomPositionCoordinates.x = 0;
+ zoomPositionCoordinates.y = 0;
+ }
+ publicZoomTo(nextZoomStep, zoomPositionCoordinates);
+ onDoubleTapAfter?.(e, _getZoomableViewEventObject({
+ zoomLevel: nextZoomStep
+ }));
});
/**
@@ -660,142 +619,6 @@ const ReactNativeZoomableView = (props, ref) => {
});
}
});
- const _staticPinPosition = (0, _useLatestCallback.useLatestCallback)(() => {
- if (!props.staticPinPosition) return;
- if (!props.contentWidth || !props.contentHeight) return;
- return (0, _coordinateConversion.viewportPositionToImagePosition)({
- viewportPosition: {
- x: props.staticPinPosition.x,
- y: props.staticPinPosition.y
- },
- imageSize: {
- height: props.contentHeight,
- width: props.contentWidth
- },
- zoomableEvent: {
- ..._getZoomableViewEventObject(),
- offsetX: offsetX.current,
- offsetY: offsetY.current,
- zoomLevel: zoomLevel.current
- }
- });
- });
- const _updateStaticPin = (0, _useLatestCallback.useLatestCallback)(() => {
- const position = _staticPinPosition();
- if (!position) return;
- props.onStaticPinPositionChange?.(position);
- });
- const _addTouch = (0, _useLatestCallback.useLatestCallback)(touch => {
- touches.current.push(touch);
- setStateTouches([...touches.current]);
- });
- const _removeTouch = (0, _useLatestCallback.useLatestCallback)(touch => {
- touches.current.splice(touches.current.indexOf(touch), 1);
- setStateTouches([...touches.current]);
- });
-
- /**
- * Handles the double tap event
- *
- * @param e
- *
- * @private
- */
- const _handleDoubleTap = (0, _useLatestCallback.useLatestCallback)(e => {
- const {
- onDoubleTapBefore,
- onDoubleTapAfter,
- doubleTapZoomToCenter
- } = props;
- onDoubleTapBefore?.(e, _getZoomableViewEventObject());
- const nextZoomStep = _getNextZoomStep();
- if (nextZoomStep == null) return;
-
- // define new zoom position coordinates
- const zoomPositionCoordinates = {
- x: e.nativeEvent.pageX - originalPageX,
- y: e.nativeEvent.pageY - originalPageY
- };
-
- // if doubleTapZoomToCenter enabled -> always zoom to center instead
- if (doubleTapZoomToCenter) {
- zoomPositionCoordinates.x = 0;
- zoomPositionCoordinates.y = 0;
- }
- publicZoomTo(nextZoomStep, zoomPositionCoordinates);
- onDoubleTapAfter?.(e, _getZoomableViewEventObject({
- zoomLevel: nextZoomStep
- }));
- });
-
- /**
- * Returns the next zoom step based on current step and zoomStep property.
- * If we are zoomed all the way in -> return to initialzoom
- *
- * @returns {*}
- */
- const _getNextZoomStep = (0, _useLatestCallback.useLatestCallback)(() => {
- const {
- zoomStep,
- maxZoom,
- initialZoom
- } = props;
- if (maxZoom == null) return;
- if (zoomLevel.current.toFixed(2) === maxZoom.toFixed(2)) {
- return initialZoom;
- }
- if (zoomStep == null) return;
- const nextZoomStep = zoomLevel.current * (1 + zoomStep);
- if (nextZoomStep > maxZoom) {
- return maxZoom;
- }
- return nextZoomStep;
- });
-
- /**
- * Zooms to a specific level. A "zoom center" can be provided, which specifies
- * the point that will remain in the same position on the screen after the zoom.
- * The coordinates of the zoom center is relative to the zoom subject.
- * { x: 0, y: 0 } is the very center of the zoom subject.
- *
- * @param newZoomLevel
- * @param zoomCenter - If not supplied, the container's center is the zoom center
- */
- const publicZoomTo = (0, _useLatestCallback.useLatestCallback)((newZoomLevel, zoomCenter) => {
- if (!props.zoomEnabled) return false;
- if (props.maxZoom && newZoomLevel > props.maxZoom) return false;
- if (props.minZoom && newZoomLevel < props.minZoom) return false;
- props.onZoomBefore?.(null, null, _getZoomableViewEventObject());
-
- // == Perform Pan Animation to preserve the zoom center while zooming ==
- let listenerId = '';
- if (zoomCenter) {
- // Calculates panAnim values based on changes in zoomAnim.
- let prevScale = zoomLevel.current;
- // Since zoomAnim is calculated in native driver,
- // it will jitter panAnim once in a while,
- // because here panAnim is being calculated in js.
- // However the jittering should mostly occur in simulator.
- listenerId = zoomAnim.current.addListener(({
- value: newScale
- }) => {
- panAnim.current.setValue({
- x: (0, _helper.calcNewScaledOffsetForZoomCentering)(offsetX.current, originalWidth, prevScale, newScale, zoomCenter.x),
- y: (0, _helper.calcNewScaledOffsetForZoomCentering)(offsetY.current, originalHeight, prevScale, newScale, zoomCenter.y)
- });
- prevScale = newScale;
- });
- }
-
- // == Perform Zoom Animation ==
- (0, _animations.getZoomToAnimation)(zoomAnim.current, newZoomLevel).start(() => {
- zoomAnim.current.removeListener(listenerId);
- });
- // == Zoom Animation Ends ==
-
- props.onZoomAfter?.(null, null, _getZoomableViewEventObject());
- return true;
- });
/**
* Zooms in or out by a specified change level
@@ -855,23 +678,132 @@ const ReactNativeZoomableView = (props, ref) => {
return gestureStarted.current;
}
}));
- const {
- staticPinIcon,
- children,
- visualTouchFeedbackEnabled,
- doubleTapDelay,
- staticPinPosition,
- onStaticPinLongPress,
- onStaticPinPress,
- pinProps
- } = props;
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
+
+ /**
+ * Handles the end of touch events
+ *
+ * @param e
+ * @param gestureState
+ *
+ * @private
+ */
+ const _handlePanResponderEnd = (0, _useLatestCallback.useLatestCallback)((e, gestureState) => {
+ if (!gestureType.current) {
+ _resolveAndHandleTap(e);
+ }
+ setDebugPoints([]);
+ lastGestureCenterPosition.current = null;
+ if (longPressTimeout.current) {
+ clearTimeout(longPressTimeout.current);
+ longPressTimeout.current = undefined;
+ }
+ props.onPanResponderEnd?.(e, gestureState, _getZoomableViewEventObject());
+ if (gestureType.current === 'pinch') {
+ props.onZoomEnd?.(e, gestureState, _getZoomableViewEventObject());
+ } else if (gestureType.current === 'shift') {
+ props.onShiftingEnd?.(e, gestureState, _getZoomableViewEventObject());
+ }
+ if (props.staticPinPosition) {
+ _updateStaticPin();
+ }
+ gestureType.current = undefined;
+ gestureStarted.current = false;
+ });
+
+ /**
+ * Handles the actual movement of our pan responder
+ *
+ * @param e
+ * @param gestureState
+ *
+ * @private
+ */
+ const _handlePanResponderMove = (0, _useLatestCallback.useLatestCallback)((e, gestureState) => {
+ if (props.onPanResponderMove) {
+ if (props.onPanResponderMove(e, gestureState, _getZoomableViewEventObject())) {
+ return false;
+ }
+ }
+
+ // Only supports 2 touches and below,
+ // any invalid number will cause the gesture to end.
+ if (gestureState.numberActiveTouches <= 2) {
+ if (!gestureStarted.current) {
+ _handlePanResponderGrant(e, gestureState);
+ }
+ } else {
+ if (gestureStarted.current) {
+ _handlePanResponderEnd(e, gestureState);
+ }
+ return true;
+ }
+ if (gestureState.numberActiveTouches === 2) {
+ if (longPressTimeout.current) {
+ clearTimeout(longPressTimeout.current);
+ longPressTimeout.current = undefined;
+ }
+
+ // change some measurement states when switching gesture to ensure a smooth transition
+ if (gestureType.current !== 'pinch') {
+ lastGestureCenterPosition.current = (0, _helper.calcGestureCenterPoint)(e, gestureState);
+ lastGestureTouchDistance.current = (0, _helper.calcGestureTouchDistance)(e, gestureState);
+ }
+ gestureType.current = 'pinch';
+ _handlePinching(e, gestureState);
+ } else if (gestureState.numberActiveTouches === 1) {
+ if (longPressTimeout.current && (Math.abs(gestureState.dx) > 5 || Math.abs(gestureState.dy) > 5)) {
+ clearTimeout(longPressTimeout.current);
+ longPressTimeout.current = undefined;
+ }
+ // change some measurement states when switching gesture to ensure a smooth transition
+ if (gestureType.current !== 'shift') {
+ lastGestureCenterPosition.current = (0, _helper.calcGestureCenterPoint)(e, gestureState);
+ }
+ const {
+ dx,
+ dy
+ } = gestureState;
+ const isShiftGesture = Math.abs(dx) > 2 || Math.abs(dy) > 2;
+ if (isShiftGesture) {
+ gestureType.current = 'shift';
+ _handleShifting(gestureState);
+ }
+ }
+ });
+ (0, _react.useLayoutEffect)(() => {
+ gestureHandlers.current = _reactNative.PanResponder.create({
+ onStartShouldSetPanResponder: _handleStartShouldSetPanResponder,
+ onPanResponderGrant: _handlePanResponderGrant,
+ onPanResponderMove: _handlePanResponderMove,
+ onPanResponderRelease: _handlePanResponderEnd,
+ onPanResponderTerminate: (evt, gestureState) => {
+ // We should also call _handlePanResponderEnd
+ // to properly perform cleanups when the gesture is terminated
+ // (aka gesture handling responsibility is taken over by another component).
+ // This also fixes a weird issue where
+ // on real device, sometimes onPanResponderRelease is not called when you lift 2 fingers up,
+ // but onPanResponderTerminate is called instead for no apparent reason.
+ _handlePanResponderEnd(evt, gestureState);
+ props.onPanResponderTerminate?.(evt, gestureState, _getZoomableViewEventObject());
+ },
+ onPanResponderTerminationRequest: (evt, gestureState) => !!props.onPanResponderTerminationRequest?.(evt, gestureState, _getZoomableViewEventObject()),
+ // Defaults to true to prevent parent components, such as React Navigation's tab view, from taking over as responder.
+ onShouldBlockNativeResponder: (evt, gestureState) => props.onShouldBlockNativeResponder?.(evt, gestureState, _getZoomableViewEventObject()) ?? true,
+ onStartShouldSetPanResponderCapture: (evt, gestureState) => !!props.onStartShouldSetPanResponderCapture?.(evt, gestureState),
+ onMoveShouldSetPanResponderCapture: (evt, gestureState) => !!props.onMoveShouldSetPanResponderCapture?.(evt, gestureState)
+ });
+ }, []);
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ , {
style: styles.container,
...gestureHandlers.current?.panHandlers,
ref: zoomSubjectWrapperRef,
onLayout: measureZoomSubject,
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
- style: [styles.zoomSubject, props.style, {
+ style: [
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ styles.zoomSubject, props.style, {
transform: [
// In RN79, we need to split the scale into X and Y to avoid
// the content getting pixelated when zooming in
diff --git a/lib/commonjs/ReactNativeZoomableView.js.map b/lib/commonjs/ReactNativeZoomableView.js.map
index 42a9b99..4c3f9d1 100644
--- a/lib/commonjs/ReactNativeZoomableView.js.map
+++ b/lib/commonjs/ReactNativeZoomableView.js.map
@@ -1 +1 @@
-{"version":3,"names":["_lodash","require","_react","_interopRequireWildcard","_reactNative","_animations","_components","_StaticPin","_debugHelper","_helper","_coordinateConversion","_useLatestCallback","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ReactNativeZoomableView","props","ref","originalWidth","setOriginalWidth","useState","originalHeight","setOriginalHeight","originalPageX","setOriginalPageX","originalPageY","setOriginalPageY","originalX","setOriginalX","originalY","setOriginalY","pinSize","setPinSize","width","height","debugPoints","setDebugPoints","stateTouches","setStateTouches","zoomSubjectWrapperRef","useRef","gestureHandlers","doubleTapFirstTapReleaseTimestamp","defaults","zoomEnabled","panEnabled","initialZoom","initialOffsetX","initialOffsetY","maxZoom","minZoom","pinchToZoomInSensitivity","pinchToZoomOutSensitivity","movementSensibility","doubleTapDelay","zoomStep","onLongPress","undefined","longPressDuration","contentWidth","contentHeight","visualTouchFeedbackEnabled","staticPinPosition","staticPinIcon","onStaticPinPositionChange","onStaticPinPositionMove","disablePanOnInitialZoom","panAnim","Animated","ValueXY","x","y","zoomAnim","Value","offsetX","offsetY","zoomLevel","lastGestureCenterPosition","lastGestureTouchDistance","gestureType","gestureStarted","longPressTimeout","onTransformInvocationInitialized","singleTapTimeoutId","touches","doubleTapFirstTap","measureZoomSubjectInterval","useLayoutEffect","current","PanResponder","create","onStartShouldSetPanResponder","_handleStartShouldSetPanResponder","onPanResponderGrant","_handlePanResponderGrant","onPanResponderMove","_handlePanResponderMove","onPanResponderRelease","_handlePanResponderEnd","onPanResponderTerminate","evt","gestureState","_getZoomableViewEventObject","onPanResponderTerminationRequest","onShouldBlockNativeResponder","onStartShouldSetPanResponderCapture","onMoveShouldSetPanResponderCapture","zoomAnimatedValue","panAnimatedValueXY","setValue","addListener","value","_invokeOnTransform","successful","onLayout","layout","nativeEvent","useEffect","measureZoomSubject","setInterval","clearInterval","useLatestCallback","debouncedOnStaticPinPositionChange","useMemo","debounce","zoomableViewEvent","position","_staticPinPosition","onTransform","overwriteObj","requestAnimationFrame","setTimeout","measure","pageX","pageY","persist","stopAnimation","_resolveAndHandleTap","clearTimeout","onPanResponderEnd","onZoomEnd","onShiftingEnd","_updateStaticPin","numberActiveTouches","calcGestureCenterPoint","calcGestureTouchDistance","_handlePinching","Math","abs","dx","dy","isShiftGesture","_handleShifting","distance","onZoomBefore","zoomGrowthFromLastGestureState","pinchToZoomSensitivity","deltaGrowth","deltaGrowthAdjustedBySensitivity","newZoomLevel","gestureCenterPoint","zoomCenter","debug","_setPinchDebugPoints","oldOffsetX","oldOffsetY","oldScale","newScale","newOffsetY","calcNewScaledOffsetForZoomCentering","newOffsetX","offsetShift","_calcOffsetShiftSinceLastGestureState","onZoomAfter","gestureResponderEvent","points","shift","shiftX","shiftY","moveX","moveY","_setNewOffsetPosition","onShiftingBefore","onShiftingAfter","now","Date","_addTouch","id","toString","isSecondTap","_handleDoubleTap","tapX","tapY","timing","toValue","useNativeDriver","duration","start","onSingleTap","publicMoveStaticPinTo","pinX","pinY","viewportPositionToImagePosition","viewportPosition","imageSize","zoomableEvent","touch","push","_removeTouch","splice","indexOf","onDoubleTapBefore","onDoubleTapAfter","doubleTapZoomToCenter","nextZoomStep","_getNextZoomStep","zoomPositionCoordinates","publicZoomTo","toFixed","listenerId","prevScale","getZoomToAnimation","removeListener","publicZoomBy","zoomLevelChange","publicMoveTo","publicMoveBy","offsetChangeX","offsetChangeY","useImperativeHandle","zoomTo","zoomBy","moveTo","moveBy","moveStaticPinTo","children","onStaticPinLongPress","onStaticPinPress","pinProps","jsxs","View","style","styles","container","panHandlers","jsx","zoomSubject","transform","scaleX","scaleY","getTranslateTransform","map","AnimatedTouchFeedback","animationDuration","onAnimationDone","index","DebugTouchPoint","StaticPin","onPress","onParentMove","exports","StyleSheet","alignItems","flex","justifyContent","overflow","_default"],"sourceRoot":"../../src","sources":["ReactNativeZoomableView.tsx"],"mappings":"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","ignoreList":[]}
+{"version":3,"names":["_lodash","require","_react","_interopRequireWildcard","_reactNative","_animations","_components","_StaticPin","_debugHelper","_helper","_coordinateConversion","_getNextZoomStep","_useDebugPoints","_useLatestCallback","_useZoomSubject","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ReactNativeZoomableView","props","ref","wrapperRef","zoomSubjectWrapperRef","measure","measureZoomSubject","originalWidth","originalHeight","originalPageX","originalPageY","originalX","originalY","useZoomSubject","pinSize","setPinSize","useState","width","height","stateTouches","setStateTouches","debugPoints","setDebugPoints","setPinchDebugPoints","useDebugPoints","gestureHandlers","useRef","doubleTapFirstTapReleaseTimestamp","defaults","zoomEnabled","panEnabled","initialZoom","initialOffsetX","initialOffsetY","maxZoom","minZoom","pinchToZoomInSensitivity","pinchToZoomOutSensitivity","movementSensibility","doubleTapDelay","zoomStep","onLongPress","undefined","longPressDuration","contentWidth","contentHeight","visualTouchFeedbackEnabled","staticPinPosition","staticPinIcon","onStaticPinPositionChange","onStaticPinPositionMove","disablePanOnInitialZoom","children","onStaticPinLongPress","onStaticPinPress","pinProps","panAnim","Animated","ValueXY","x","y","zoomAnim","Value","offsetX","offsetY","zoomLevel","lastGestureCenterPosition","lastGestureTouchDistance","gestureType","gestureStarted","longPressTimeout","onTransformInvocationInitialized","singleTapTimeoutId","touches","doubleTapFirstTap","_getZoomableViewEventObject","useLatestCallback","overwriteObj","current","_staticPinPosition","viewportPositionToImagePosition","viewportPosition","imageSize","zoomableEvent","_updateStaticPin","position","_addTouch","touch","push","_removeTouch","splice","indexOf","debouncedOnStaticPinPositionChange","useMemo","debounce","_invokeOnTransform","zoomableViewEvent","successful","onTransform","useLayoutEffect","zoomAnimatedValue","panAnimatedValueXY","setValue","addListener","value","onLayout","layout","nativeEvent","_handleStartShouldSetPanResponder","gestureState","onStartShouldSetPanResponder","_handlePanResponderGrant","persist","setTimeout","onPanResponderGrant","stopAnimation","_calcOffsetShiftSinceLastGestureState","gestureCenterPoint","shift","dx","dy","shiftX","shiftY","_handlePinching","distance","calcGestureTouchDistance","onZoomBefore","zoomGrowthFromLastGestureState","pinchToZoomSensitivity","deltaGrowth","deltaGrowthAdjustedBySensitivity","newZoomLevel","calcGestureCenterPoint","zoomCenter","debug","oldOffsetX","oldOffsetY","oldScale","newScale","newOffsetY","calcNewScaledOffsetForZoomCentering","newOffsetX","offsetShift","onZoomAfter","_setNewOffsetPosition","onShiftingBefore","onShiftingAfter","_handleShifting","moveX","moveY","publicZoomTo","listenerId","prevScale","getZoomToAnimation","start","removeListener","_handleDoubleTap","onDoubleTapBefore","onDoubleTapAfter","doubleTapZoomToCenter","nextZoomStep","getNextZoomStep","zoomPositionCoordinates","pageX","pageY","_resolveAndHandleTap","now","Date","id","toString","isSecondTap","clearTimeout","tapX","tapY","timing","toValue","useNativeDriver","duration","onSingleTap","publicMoveStaticPinTo","pinX","pinY","publicZoomBy","zoomLevelChange","publicMoveTo","publicMoveBy","offsetChangeX","offsetChangeY","useImperativeHandle","zoomTo","zoomBy","moveTo","moveBy","moveStaticPinTo","_handlePanResponderEnd","onPanResponderEnd","onZoomEnd","onShiftingEnd","_handlePanResponderMove","onPanResponderMove","numberActiveTouches","Math","abs","isShiftGesture","PanResponder","create","onPanResponderRelease","onPanResponderTerminate","evt","onPanResponderTerminationRequest","onShouldBlockNativeResponder","onStartShouldSetPanResponderCapture","onMoveShouldSetPanResponderCapture","jsxs","View","style","styles","container","panHandlers","jsx","zoomSubject","transform","scaleX","scaleY","getTranslateTransform","map","AnimatedTouchFeedback","animationDuration","onAnimationDone","index","DebugTouchPoint","StaticPin","onPress","onParentMove","exports","StyleSheet","alignItems","flex","justifyContent","overflow","_default"],"sourceRoot":"../../src","sources":["ReactNativeZoomableView.tsx"],"mappings":"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","ignoreList":[]}
diff --git a/lib/commonjs/components/AnimatedTouchFeedback.js b/lib/commonjs/components/AnimatedTouchFeedback.js
index 02a15b8..fb2fdfe 100644
--- a/lib/commonjs/components/AnimatedTouchFeedback.js
+++ b/lib/commonjs/components/AnimatedTouchFeedback.js
@@ -37,7 +37,9 @@ const AnimatedTouchFeedback = ({
}, [animationDelay, animationDuration]);
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
pointerEvents: "none",
- style: [styles.animatedTouchFeedback, {
+ style: [
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ styles.animatedTouchFeedback, {
opacity: appearDisappearAnimRef.current.interpolate({
inputRange: [0, 1],
outputRange: [0, 0.3]
diff --git a/lib/commonjs/components/AnimatedTouchFeedback.js.map b/lib/commonjs/components/AnimatedTouchFeedback.js.map
index b33e7fb..3330ce4 100644
--- a/lib/commonjs/components/AnimatedTouchFeedback.js.map
+++ b/lib/commonjs/components/AnimatedTouchFeedback.js.map
@@ -1 +1 @@
-{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","AnimatedTouchFeedback","x","y","animationDelay","animationDuration","onAnimationDone","appearDisappearAnimRef","useRef","Animated","Value","onAnimationDoneRef","current","useEffect","setValue","inDuration","outDuration","sequence","timing","delay","toValue","duration","easing","Easing","linear","useNativeDriver","out","ease","start","jsx","View","pointerEvents","style","styles","animatedTouchFeedback","opacity","interpolate","inputRange","outputRange","left","top","transform","scale","exports","StyleSheet","create","backgroundColor","borderRadius","height","position","width"],"sourceRoot":"../../../src","sources":["components/AnimatedTouchFeedback.tsx"],"mappings":"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","ignoreList":[]}
+{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","AnimatedTouchFeedback","x","y","animationDelay","animationDuration","onAnimationDone","appearDisappearAnimRef","useRef","Animated","Value","onAnimationDoneRef","current","useEffect","setValue","inDuration","outDuration","sequence","timing","delay","toValue","duration","easing","Easing","linear","useNativeDriver","out","ease","start","jsx","View","pointerEvents","style","styles","animatedTouchFeedback","opacity","interpolate","inputRange","outputRange","left","top","transform","scale","exports","StyleSheet","create","backgroundColor","borderRadius","height","position","width"],"sourceRoot":"../../../src","sources":["components/AnimatedTouchFeedback.tsx"],"mappings":"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","ignoreList":[]}
diff --git a/lib/commonjs/components/StaticPin.js b/lib/commonjs/components/StaticPin.js
index 14318a9..66c6c65 100644
--- a/lib/commonjs/components/StaticPin.js
+++ b/lib/commonjs/components/StaticPin.js
@@ -53,7 +53,9 @@ const StaticPin = ({
style: [{
left: staticPinPosition.x,
top: staticPinPosition.y
- }, styles.pinWrapper, {
+ },
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ styles.pinWrapper, {
opacity,
transform
}],
@@ -69,7 +71,7 @@ const StaticPin = ({
...panResponder.panHandlers,
children: staticPinIcon ||
/*#__PURE__*/
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-use-before-define
(0, _jsxRuntime.jsx)(_reactNative.Image, {
source: require('../assets/pin.png'),
style: styles.pin
diff --git a/lib/commonjs/components/StaticPin.js.map b/lib/commonjs/components/StaticPin.js.map
index 95f9eda..0ee0ad8 100644
--- a/lib/commonjs/components/StaticPin.js.map
+++ b/lib/commonjs/components/StaticPin.js.map
@@ -1 +1 @@
-{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_jsxRuntime","e","__esModule","default","StaticPin","staticPinPosition","staticPinIcon","pinSize","onParentMove","onPress","onLongPress","setPinSize","pinProps","tapTime","React","useRef","transform","translateY","height","translateX","width","opacity","panResponder","PanResponder","create","onStartShouldSetPanResponder","current","Date","now","onPanResponderMove","evt","gestureState","Math","abs","dx","dy","onPanResponderRelease","dt","jsx","Animated","View","style","left","x","top","y","styles","pinWrapper","children","onLayout","nativeEvent","layout","panHandlers","Image","source","pin","exports","StyleSheet","position"],"sourceRoot":"../../../src","sources":["components/StaticPin.tsx"],"mappings":"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","ignoreList":[]}
+{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_jsxRuntime","e","__esModule","default","StaticPin","staticPinPosition","staticPinIcon","pinSize","onParentMove","onPress","onLongPress","setPinSize","pinProps","tapTime","React","useRef","transform","translateY","height","translateX","width","opacity","panResponder","PanResponder","create","onStartShouldSetPanResponder","current","Date","now","onPanResponderMove","evt","gestureState","Math","abs","dx","dy","onPanResponderRelease","dt","jsx","Animated","View","style","left","x","top","y","styles","pinWrapper","children","onLayout","nativeEvent","layout","panHandlers","Image","source","pin","exports","StyleSheet","position"],"sourceRoot":"../../../src","sources":["components/StaticPin.tsx"],"mappings":"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","ignoreList":[]}
diff --git a/lib/commonjs/debugHelper/index.js b/lib/commonjs/debugHelper/index.js
index 75beac3..eb86437 100644
--- a/lib/commonjs/debugHelper/index.js
+++ b/lib/commonjs/debugHelper/index.js
@@ -16,7 +16,9 @@ const DebugTouchPoint = ({
}) => {
const radius = diameter / 2;
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
- style: [styles.debugPoint, {
+ style: [
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ styles.debugPoint, {
width: diameter,
height: diameter,
borderRadius: diameter,
@@ -36,7 +38,9 @@ const DebugRect = ({
}) => {
const width = 5;
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
- style: [styles.debugRect, {
+ style: [
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ styles.debugRect, {
width,
height,
backgroundColor: color,
diff --git a/lib/commonjs/debugHelper/index.js.map b/lib/commonjs/debugHelper/index.js.map
index 8e47667..82c0e22 100644
--- a/lib/commonjs/debugHelper/index.js.map
+++ b/lib/commonjs/debugHelper/index.js.map
@@ -1 +1 @@
-{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_jsxRuntime","e","__esModule","default","DebugTouchPoint","diameter","x","y","color","radius","jsx","View","style","styles","debugPoint","width","height","borderRadius","backgroundColor","left","top","pointerEvents","exports","DebugRect","debugRect","StyleSheet","create","opacity","position"],"sourceRoot":"../../../src","sources":["debugHelper/index.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAAgD,IAAAE,WAAA,GAAAF,OAAA;AAAA,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEzC,MAAMG,eAAe,GAAGA,CAAC;EAC9BC,QAAQ,GAAG,EAAE;EACbC,CAAC,GAAG,CAAC;EACLC,CAAC,GAAG,CAAC;EACLC,KAAK,GAAG;AACV,CAAC,KAAK;EACJ,MAAMC,MAAM,GAAGJ,QAAQ,GAAG,CAAC;EAC3B,oBACE,IAAAL,WAAA,CAAAU,GAAA,EAACX,YAAA,CAAAY,IAAI;IACHC,KAAK,EAAE,CACLC,MAAM,CAACC,UAAU,EACjB;MACEC,KAAK,EAAEV,QAAQ;MACfW,MAAM,EAAEX,QAAQ;MAChBY,YAAY,EAAEZ,QAAQ;MACtBa,eAAe,EAAEV,KAAK;MACtBW,IAAI,EAAEb,CAAC,GAAGG,MAAM;MAChBW,GAAG,EAAEb,CAAC,GAAGE;IACX,CAAC,CACD;IACFY,aAAa,EAAC;EAAM,CACrB,CAAC;AAEN,CAAC;AAACC,OAAA,CAAAlB,eAAA,GAAAA,eAAA;AACK,MAAMmB,SAAS,GAAGA,CAAC;EACxBP,MAAM;EACNV,CAAC,GAAG,CAAC;EACLC,CAAC,GAAG,CAAC;EACLC,KAAK,GAAG;AAMV,CAAC,KAAK;EACJ,MAAMO,KAAK,GAAG,CAAC;EACf,oBACE,IAAAf,WAAA,CAAAU,GAAA,EAACX,YAAA,CAAAY,IAAI;IACHC,KAAK,EAAE,CACLC,MAAM,CAACW,SAAS,EAChB;MACET,KAAK;MACLC,MAAM;MACNE,eAAe,EAAEV,KAAK;MACtBW,IAAI,EAAEb,CAAC,GAAGS,KAAK,GAAG,CAAC;MACnBK,GAAG,EAAEb;IACP,CAAC,CACD;IACFc,aAAa,EAAC;EAAM,CACrB,CAAC;AAEN,CAAC;AAACC,OAAA,CAAAC,SAAA,GAAAA,SAAA;AAEF,MAAMV,MAAM,GAAGY,uBAAU,CAACC,MAAM,CAAC;EAC/BZ,UAAU,EAAE;IACVa,OAAO,EAAE,GAAG;IACZC,QAAQ,EAAE;EACZ,CAAC;EACDJ,SAAS,EAAE;IACTG,OAAO,EAAE,GAAG;IACZC,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC","ignoreList":[]}
+{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_jsxRuntime","e","__esModule","default","DebugTouchPoint","diameter","x","y","color","radius","jsx","View","style","styles","debugPoint","width","height","borderRadius","backgroundColor","left","top","pointerEvents","exports","DebugRect","debugRect","StyleSheet","create","opacity","position"],"sourceRoot":"../../../src","sources":["debugHelper/index.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAAgD,IAAAE,WAAA,GAAAF,OAAA;AAAA,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEzC,MAAMG,eAAe,GAAGA,CAAC;EAC9BC,QAAQ,GAAG,EAAE;EACbC,CAAC,GAAG,CAAC;EACLC,CAAC,GAAG,CAAC;EACLC,KAAK,GAAG;AACV,CAAC,KAAK;EACJ,MAAMC,MAAM,GAAGJ,QAAQ,GAAG,CAAC;EAC3B,oBACE,IAAAL,WAAA,CAAAU,GAAA,EAACX,YAAA,CAAAY,IAAI;IACHC,KAAK,EAAE;IACL;IACAC,MAAM,CAACC,UAAU,EACjB;MACEC,KAAK,EAAEV,QAAQ;MACfW,MAAM,EAAEX,QAAQ;MAChBY,YAAY,EAAEZ,QAAQ;MACtBa,eAAe,EAAEV,KAAK;MACtBW,IAAI,EAAEb,CAAC,GAAGG,MAAM;MAChBW,GAAG,EAAEb,CAAC,GAAGE;IACX,CAAC,CACD;IACFY,aAAa,EAAC;EAAM,CACrB,CAAC;AAEN,CAAC;AAACC,OAAA,CAAAlB,eAAA,GAAAA,eAAA;AACK,MAAMmB,SAAS,GAAGA,CAAC;EACxBP,MAAM;EACNV,CAAC,GAAG,CAAC;EACLC,CAAC,GAAG,CAAC;EACLC,KAAK,GAAG;AAMV,CAAC,KAAK;EACJ,MAAMO,KAAK,GAAG,CAAC;EACf,oBACE,IAAAf,WAAA,CAAAU,GAAA,EAACX,YAAA,CAAAY,IAAI;IACHC,KAAK,EAAE;IACL;IACAC,MAAM,CAACW,SAAS,EAChB;MACET,KAAK;MACLC,MAAM;MACNE,eAAe,EAAEV,KAAK;MACtBW,IAAI,EAAEb,CAAC,GAAGS,KAAK,GAAG,CAAC;MACnBK,GAAG,EAAEb;IACP,CAAC,CACD;IACFc,aAAa,EAAC;EAAM,CACrB,CAAC;AAEN,CAAC;AAACC,OAAA,CAAAC,SAAA,GAAAA,SAAA;AAEF,MAAMV,MAAM,GAAGY,uBAAU,CAACC,MAAM,CAAC;EAC/BZ,UAAU,EAAE;IACVa,OAAO,EAAE,GAAG;IACZC,QAAQ,EAAE;EACZ,CAAC;EACDJ,SAAS,EAAE;IACTG,OAAO,EAAE,GAAG;IACZC,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC","ignoreList":[]}
diff --git a/lib/commonjs/helper/getNextZoomStep.js b/lib/commonjs/helper/getNextZoomStep.js
new file mode 100644
index 0000000..1ad0d46
--- /dev/null
+++ b/lib/commonjs/helper/getNextZoomStep.js
@@ -0,0 +1,31 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.getNextZoomStep = void 0;
+/**
+ * Returns the next zoom step based on current step and zoomStep property.
+ * If we are zoomed all the way in -> return to initialzoom
+ *
+ * @returns {*}
+ */
+const getNextZoomStep = ({
+ zoomStep,
+ maxZoom,
+ initialZoom,
+ zoomLevel
+}) => {
+ if (maxZoom == null) return;
+ if (zoomLevel.toFixed(2) === maxZoom.toFixed(2)) {
+ return initialZoom;
+ }
+ if (zoomStep == null) return;
+ const nextZoomStep = zoomLevel * (1 + zoomStep);
+ if (nextZoomStep > maxZoom) {
+ return maxZoom;
+ }
+ return nextZoomStep;
+};
+exports.getNextZoomStep = getNextZoomStep;
+//# sourceMappingURL=getNextZoomStep.js.map
\ No newline at end of file
diff --git a/lib/commonjs/helper/getNextZoomStep.js.map b/lib/commonjs/helper/getNextZoomStep.js.map
new file mode 100644
index 0000000..e956f68
--- /dev/null
+++ b/lib/commonjs/helper/getNextZoomStep.js.map
@@ -0,0 +1 @@
+{"version":3,"names":["getNextZoomStep","zoomStep","maxZoom","initialZoom","zoomLevel","toFixed","nextZoomStep","exports"],"sourceRoot":"../../../src","sources":["helper/getNextZoomStep.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,eAAe,GAAGA,CAAC;EAC9BC,QAAQ;EACRC,OAAO;EACPC,WAAW;EACXC;AAMF,CAAC,KAAK;EACJ,IAAIF,OAAO,IAAI,IAAI,EAAE;EAErB,IAAIE,SAAS,CAACC,OAAO,CAAC,CAAC,CAAC,KAAKH,OAAO,CAACG,OAAO,CAAC,CAAC,CAAC,EAAE;IAC/C,OAAOF,WAAW;EACpB;EAEA,IAAIF,QAAQ,IAAI,IAAI,EAAE;EAEtB,MAAMK,YAAY,GAAGF,SAAS,IAAI,CAAC,GAAGH,QAAQ,CAAC;EAC/C,IAAIK,YAAY,GAAGJ,OAAO,EAAE;IAC1B,OAAOA,OAAO;EAChB;EAEA,OAAOI,YAAY;AACrB,CAAC;AAACC,OAAA,CAAAP,eAAA,GAAAA,eAAA","ignoreList":[]}
diff --git a/lib/commonjs/hooks/useDebugPoints.js b/lib/commonjs/hooks/useDebugPoints.js
new file mode 100644
index 0000000..12308dd
--- /dev/null
+++ b/lib/commonjs/hooks/useDebugPoints.js
@@ -0,0 +1,40 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.useDebugPoints = void 0;
+var _react = require("react");
+var _useLatestCallback = require("./useLatestCallback");
+const useDebugPoints = ({
+ originalPageX,
+ originalPageY
+}) => {
+ const [debugPoints, setDebugPoints] = (0, _react.useState)([]);
+
+ /**
+ * Used to debug pinch events
+ * @param gestureResponderEvent
+ * @param zoomCenter
+ * @param points
+ */
+ const setPinchDebugPoints = (0, _useLatestCallback.useLatestCallback)((gestureResponderEvent, zoomCenter, ...points) => {
+ const {
+ touches
+ } = gestureResponderEvent.nativeEvent;
+ setDebugPoints([{
+ x: touches[0].pageX - originalPageX,
+ y: touches[0].pageY - originalPageY
+ }, {
+ x: touches[1].pageX - originalPageX,
+ y: touches[1].pageY - originalPageY
+ }, zoomCenter, ...points]);
+ });
+ return {
+ debugPoints,
+ setDebugPoints,
+ setPinchDebugPoints
+ };
+};
+exports.useDebugPoints = useDebugPoints;
+//# sourceMappingURL=useDebugPoints.js.map
\ No newline at end of file
diff --git a/lib/commonjs/hooks/useDebugPoints.js.map b/lib/commonjs/hooks/useDebugPoints.js.map
new file mode 100644
index 0000000..7c9a084
--- /dev/null
+++ b/lib/commonjs/hooks/useDebugPoints.js.map
@@ -0,0 +1 @@
+{"version":3,"names":["_react","require","_useLatestCallback","useDebugPoints","originalPageX","originalPageY","debugPoints","setDebugPoints","useState","setPinchDebugPoints","useLatestCallback","gestureResponderEvent","zoomCenter","points","touches","nativeEvent","x","pageX","y","pageY","exports"],"sourceRoot":"../../../src","sources":["hooks/useDebugPoints.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAIA,IAAAC,kBAAA,GAAAD,OAAA;AAEO,MAAME,cAAc,GAAGA,CAAC;EAC7BC,aAAa;EACbC;AAIF,CAAC,KAAK;EACJ,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAG,IAAAC,eAAQ,EAAU,EAAE,CAAC;;EAE3D;AACF;AACA;AACA;AACA;AACA;EACE,MAAMC,mBAAmB,GAAG,IAAAC,oCAAiB,EAC3C,CACEC,qBAA4C,EAC5CC,UAAiB,EACjB,GAAGC,MAAe,KACf;IACH,MAAM;MAAEC;IAAQ,CAAC,GAAGH,qBAAqB,CAACI,WAAW;IAErDR,cAAc,CAAC,CACb;MACES,CAAC,EAAEF,OAAO,CAAC,CAAC,CAAC,CAACG,KAAK,GAAGb,aAAa;MACnCc,CAAC,EAAEJ,OAAO,CAAC,CAAC,CAAC,CAACK,KAAK,GAAGd;IACxB,CAAC,EACD;MACEW,CAAC,EAAEF,OAAO,CAAC,CAAC,CAAC,CAACG,KAAK,GAAGb,aAAa;MACnCc,CAAC,EAAEJ,OAAO,CAAC,CAAC,CAAC,CAACK,KAAK,GAAGd;IACxB,CAAC,EACDO,UAAU,EACV,GAAGC,MAAM,CACV,CAAC;EACJ,CACF,CAAC;EAED,OAAO;IAAEP,WAAW;IAAEC,cAAc;IAAEE;EAAoB,CAAC;AAC7D,CAAC;AAACW,OAAA,CAAAjB,cAAA,GAAAA,cAAA","ignoreList":[]}
diff --git a/lib/commonjs/hooks/useZoomSubject.js b/lib/commonjs/hooks/useZoomSubject.js
new file mode 100644
index 0000000..e3e8e0b
--- /dev/null
+++ b/lib/commonjs/hooks/useZoomSubject.js
@@ -0,0 +1,78 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.useZoomSubject = void 0;
+var _react = require("react");
+var _useLatestCallback = require("./useLatestCallback");
+const useZoomSubject = () => {
+ const wrapperRef = (0, _react.useRef)(null);
+ const [originalWidth, setOriginalWidth] = (0, _react.useState)(0);
+ const [originalHeight, setOriginalHeight] = (0, _react.useState)(0);
+ const [originalPageX, setOriginalPageX] = (0, _react.useState)(0);
+ const [originalPageY, setOriginalPageY] = (0, _react.useState)(0);
+ const [originalX, setOriginalX] = (0, _react.useState)(0);
+ const [originalY, setOriginalY] = (0, _react.useState)(0);
+ const measureZoomSubjectInterval = (0, _react.useRef)();
+
+ /**
+ * Get the original box dimensions and save them for later use.
+ * (They will be used to calculate boxBorders)
+ *
+ * @private
+ */
+ const measure = (0, _useLatestCallback.useLatestCallback)(() => {
+ // make sure we measure after animations are complete
+ requestAnimationFrame(() => {
+ // this setTimeout is here to fix a weird issue on iOS where the measurements are all `0`
+ // when navigating back (react-navigation stack) from another view
+ // while closing the keyboard at the same time
+ setTimeout(() => {
+ // In normal conditions, we're supposed to measure zoomSubject instead of its wrapper.
+ // However, our zoomSubject may have been transformed by an initial zoomLevel or offset,
+ // in which case these measurements will not represent the true "original" measurements.
+ // We just need to make sure the zoomSubjectWrapper perfectly aligns with the zoomSubject
+ // (no border, space, or anything between them)
+ wrapperRef.current?.measure((x, y, width, height, pageX, pageY) => {
+ // When the component is off-screen, these become all 0s, so we don't set them
+ // to avoid messing up calculations, especially ones that are done right after
+ // the component transitions from hidden to visible.
+ if (!pageX && !pageY && !width && !height) return;
+ setOriginalX(x);
+ setOriginalY(y);
+ setOriginalWidth(width);
+ setOriginalHeight(height);
+ setOriginalPageX(pageX);
+ setOriginalPageY(pageY);
+ });
+ });
+ });
+ });
+ (0, _react.useEffect)(() => {
+ measure();
+ // We've already run `grabZoomSubjectOriginalMeasurements` at various events
+ // to make sure the measurements are promptly updated.
+ // However, there might be cases we haven't accounted for, especially when
+ // native processes are involved. To account for those cases,
+ // we'll use an interval here to ensure we're always up-to-date.
+ // The `setState` in `grabZoomSubjectOriginalMeasurements` won't trigger a rerender
+ // if the values given haven't changed, so we're not running performance risk here.
+ measureZoomSubjectInterval.current = setInterval(measure, 1e3);
+ return () => {
+ measureZoomSubjectInterval.current && clearInterval(measureZoomSubjectInterval.current);
+ };
+ }, []);
+ return {
+ wrapperRef,
+ measure,
+ originalWidth,
+ originalHeight,
+ originalPageX,
+ originalPageY,
+ originalX,
+ originalY
+ };
+};
+exports.useZoomSubject = useZoomSubject;
+//# sourceMappingURL=useZoomSubject.js.map
\ No newline at end of file
diff --git a/lib/commonjs/hooks/useZoomSubject.js.map b/lib/commonjs/hooks/useZoomSubject.js.map
new file mode 100644
index 0000000..937b6c3
--- /dev/null
+++ b/lib/commonjs/hooks/useZoomSubject.js.map
@@ -0,0 +1 @@
+{"version":3,"names":["_react","require","_useLatestCallback","useZoomSubject","wrapperRef","useRef","originalWidth","setOriginalWidth","useState","originalHeight","setOriginalHeight","originalPageX","setOriginalPageX","originalPageY","setOriginalPageY","originalX","setOriginalX","originalY","setOriginalY","measureZoomSubjectInterval","measure","useLatestCallback","requestAnimationFrame","setTimeout","current","x","y","width","height","pageX","pageY","useEffect","setInterval","clearInterval","exports"],"sourceRoot":"../../../src","sources":["hooks/useZoomSubject.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAGA,IAAAC,kBAAA,GAAAD,OAAA;AAEO,MAAME,cAAc,GAAGA,CAAA,KAAM;EAClC,MAAMC,UAAU,GAAG,IAAAC,aAAM,EAAO,IAAI,CAAC;EACrC,MAAM,CAACC,aAAa,EAAEC,gBAAgB,CAAC,GAAG,IAAAC,eAAQ,EAAC,CAAC,CAAC;EACrD,MAAM,CAACC,cAAc,EAAEC,iBAAiB,CAAC,GAAG,IAAAF,eAAQ,EAAC,CAAC,CAAC;EACvD,MAAM,CAACG,aAAa,EAAEC,gBAAgB,CAAC,GAAG,IAAAJ,eAAQ,EAAC,CAAC,CAAC;EACrD,MAAM,CAACK,aAAa,EAAEC,gBAAgB,CAAC,GAAG,IAAAN,eAAQ,EAAC,CAAC,CAAC;EACrD,MAAM,CAACO,SAAS,EAAEC,YAAY,CAAC,GAAG,IAAAR,eAAQ,EAAC,CAAC,CAAC;EAC7C,MAAM,CAACS,SAAS,EAAEC,YAAY,CAAC,GAAG,IAAAV,eAAQ,EAAC,CAAC,CAAC;EAC7C,MAAMW,0BAA0B,GAAG,IAAAd,aAAM,EAAe,CAAC;;EAEzD;AACF;AACA;AACA;AACA;AACA;EACE,MAAMe,OAAO,GAAG,IAAAC,oCAAiB,EAAC,MAAM;IACtC;IACAC,qBAAqB,CAAC,MAAM;MAC1B;MACA;MACA;MACAC,UAAU,CAAC,MAAM;QACf;QACA;QACA;QACA;QACA;QACAnB,UAAU,CAACoB,OAAO,EAAEJ,OAAO,CAAC,CAACK,CAAC,EAAEC,CAAC,EAAEC,KAAK,EAAEC,MAAM,EAAEC,KAAK,EAAEC,KAAK,KAAK;UACjE;UACA;UACA;UACA,IAAI,CAACD,KAAK,IAAI,CAACC,KAAK,IAAI,CAACH,KAAK,IAAI,CAACC,MAAM,EAAE;UAE3CZ,YAAY,CAACS,CAAC,CAAC;UACfP,YAAY,CAACQ,CAAC,CAAC;UACfnB,gBAAgB,CAACoB,KAAK,CAAC;UACvBjB,iBAAiB,CAACkB,MAAM,CAAC;UACzBhB,gBAAgB,CAACiB,KAAK,CAAC;UACvBf,gBAAgB,CAACgB,KAAK,CAAC;QACzB,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,IAAAC,gBAAS,EAAC,MAAM;IACdX,OAAO,CAAC,CAAC;IACT;IACA;IACA;IACA;IACA;IACA;IACA;IACAD,0BAA0B,CAACK,OAAO,GAAGQ,WAAW,CAACZ,OAAO,EAAE,GAAG,CAAC;IAE9D,OAAO,MAAM;MACXD,0BAA0B,CAACK,OAAO,IAChCS,aAAa,CAACd,0BAA0B,CAACK,OAAO,CAAC;IACrD,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IACLpB,UAAU;IACVgB,OAAO;IACPd,aAAa;IACbG,cAAc;IACdE,aAAa;IACbE,aAAa;IACbE,SAAS;IACTE;EACF,CAAC;AACH,CAAC;AAACiB,OAAA,CAAA/B,cAAA,GAAAA,cAAA","ignoreList":[]}
diff --git a/lib/module/ReactNativeZoomableView.js b/lib/module/ReactNativeZoomableView.js
index 2f6c9e6..e269932 100644
--- a/lib/module/ReactNativeZoomableView.js
+++ b/lib/module/ReactNativeZoomableView.js
@@ -1,7 +1,7 @@
"use strict";
import { debounce, defaults } from 'lodash';
-import React, { useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from 'react';
+import React, { useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from 'react';
import { Animated, PanResponder, StyleSheet, View } from 'react-native';
import { getZoomToAnimation } from './animations';
import { AnimatedTouchFeedback } from './components';
@@ -9,22 +9,35 @@ import { StaticPin } from './components/StaticPin';
import { DebugTouchPoint } from './debugHelper';
import { calcGestureCenterPoint, calcGestureTouchDistance, calcNewScaledOffsetForZoomCentering } from './helper';
import { viewportPositionToImagePosition } from './helper/coordinateConversion';
+import { getNextZoomStep } from './helper/getNextZoomStep';
+import { useDebugPoints } from './hooks/useDebugPoints';
import { useLatestCallback } from './hooks/useLatestCallback';
+import { useZoomSubject } from './hooks/useZoomSubject';
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
const ReactNativeZoomableView = (props, ref) => {
- const [originalWidth, setOriginalWidth] = useState(0);
- const [originalHeight, setOriginalHeight] = useState(0);
- const [originalPageX, setOriginalPageX] = useState(0);
- const [originalPageY, setOriginalPageY] = useState(0);
- const [originalX, setOriginalX] = useState(0);
- const [originalY, setOriginalY] = useState(0);
+ const {
+ wrapperRef: zoomSubjectWrapperRef,
+ measure: measureZoomSubject,
+ originalWidth,
+ originalHeight,
+ originalPageX,
+ originalPageY,
+ originalX,
+ originalY
+ } = useZoomSubject();
const [pinSize, setPinSize] = useState({
width: 0,
height: 0
});
- const [debugPoints, setDebugPoints] = useState([]);
const [stateTouches, setStateTouches] = useState([]);
- const zoomSubjectWrapperRef = useRef(null);
+ const {
+ debugPoints,
+ setDebugPoints,
+ setPinchDebugPoints
+ } = useDebugPoints({
+ originalPageX,
+ originalPageY
+ });
const gestureHandlers = useRef();
const doubleTapFirstTapReleaseTimestamp = useRef();
props = defaults({}, props, {
@@ -51,6 +64,16 @@ const ReactNativeZoomableView = (props, ref) => {
onStaticPinPositionMove: undefined,
disablePanOnInitialZoom: false
});
+ const {
+ staticPinIcon,
+ children,
+ visualTouchFeedbackEnabled,
+ doubleTapDelay,
+ staticPinPosition,
+ onStaticPinLongPress,
+ onStaticPinPress,
+ pinProps
+ } = props;
const panAnim = useRef(new Animated.ValueXY({
x: 0,
y: 0
@@ -72,29 +95,81 @@ const ReactNativeZoomableView = (props, ref) => {
const singleTapTimeoutId = useRef();
const touches = useRef([]);
const doubleTapFirstTap = useRef();
- const measureZoomSubjectInterval = useRef();
- useLayoutEffect(() => {
- gestureHandlers.current = PanResponder.create({
- onStartShouldSetPanResponder: _handleStartShouldSetPanResponder,
- onPanResponderGrant: _handlePanResponderGrant,
- onPanResponderMove: _handlePanResponderMove,
- onPanResponderRelease: _handlePanResponderEnd,
- onPanResponderTerminate: (evt, gestureState) => {
- // We should also call _handlePanResponderEnd
- // to properly perform cleanups when the gesture is terminated
- // (aka gesture handling responsibility is taken over by another component).
- // This also fixes a weird issue where
- // on real device, sometimes onPanResponderRelease is not called when you lift 2 fingers up,
- // but onPanResponderTerminate is called instead for no apparent reason.
- _handlePanResponderEnd(evt, gestureState);
- props.onPanResponderTerminate?.(evt, gestureState, _getZoomableViewEventObject());
+
+ /**
+ * Returns additional information about components current state for external event hooks
+ *
+ * @returns {{}}
+ * @private
+ */
+ const _getZoomableViewEventObject = useLatestCallback((overwriteObj = {}) => {
+ return {
+ zoomLevel: zoomLevel.current,
+ offsetX: offsetX.current,
+ offsetY: offsetY.current,
+ originalHeight,
+ originalWidth,
+ originalPageX,
+ originalPageY,
+ ...overwriteObj
+ };
+ });
+ const _staticPinPosition = useLatestCallback(() => {
+ if (!props.staticPinPosition) return;
+ if (!props.contentWidth || !props.contentHeight) return;
+ return viewportPositionToImagePosition({
+ viewportPosition: {
+ x: props.staticPinPosition.x,
+ y: props.staticPinPosition.y
},
- onPanResponderTerminationRequest: (evt, gestureState) => !!props.onPanResponderTerminationRequest?.(evt, gestureState, _getZoomableViewEventObject()),
- // Defaults to true to prevent parent components, such as React Navigation's tab view, from taking over as responder.
- onShouldBlockNativeResponder: (evt, gestureState) => props.onShouldBlockNativeResponder?.(evt, gestureState, _getZoomableViewEventObject()) ?? true,
- onStartShouldSetPanResponderCapture: (evt, gestureState) => !!props.onStartShouldSetPanResponderCapture?.(evt, gestureState),
- onMoveShouldSetPanResponderCapture: (evt, gestureState) => !!props.onMoveShouldSetPanResponderCapture?.(evt, gestureState)
+ imageSize: {
+ height: props.contentHeight,
+ width: props.contentWidth
+ },
+ zoomableEvent: {
+ ..._getZoomableViewEventObject(),
+ offsetX: offsetX.current,
+ offsetY: offsetY.current,
+ zoomLevel: zoomLevel.current
+ }
});
+ });
+ const _updateStaticPin = useLatestCallback(() => {
+ const position = _staticPinPosition();
+ if (!position) return;
+ props.onStaticPinPositionChange?.(position);
+ });
+ const _addTouch = useLatestCallback(touch => {
+ touches.current.push(touch);
+ setStateTouches([...touches.current]);
+ });
+ const _removeTouch = useLatestCallback(touch => {
+ touches.current.splice(touches.current.indexOf(touch), 1);
+ setStateTouches([...touches.current]);
+ });
+ const onStaticPinPositionChange = useLatestCallback(props.onStaticPinPositionChange || (() => undefined));
+ const debouncedOnStaticPinPositionChange = useMemo(() => debounce(onStaticPinPositionChange, 100), []);
+
+ /**
+ * try to invoke onTransform
+ * @private
+ */
+ const _invokeOnTransform = useLatestCallback(() => {
+ const zoomableViewEvent = _getZoomableViewEventObject();
+ const position = _staticPinPosition();
+ if (!zoomableViewEvent.originalWidth || !zoomableViewEvent.originalHeight) return {
+ successful: false
+ };
+ props.onTransform?.(zoomableViewEvent);
+ if (position) {
+ props.onStaticPinPositionMove?.(position);
+ debouncedOnStaticPinPositionChange(position);
+ }
+ return {
+ successful: true
+ };
+ });
+ useLayoutEffect(() => {
if (props.zoomAnimatedValue) zoomAnim.current = props.zoomAnimatedValue;
if (props.panAnimatedValueXY) panAnim.current = props.panAnimatedValueXY;
if (props.initialZoom) zoomLevel.current = props.initialZoom;
@@ -164,95 +239,6 @@ const ReactNativeZoomableView = (props, ref) => {
useLayoutEffect(() => {
if (onTransformInvocationInitialized.current) _invokeOnTransform();
}, [props.staticPinPosition?.x, props.staticPinPosition?.y]);
- useEffect(() => {
- measureZoomSubject();
- // We've already run `grabZoomSubjectOriginalMeasurements` at various events
- // to make sure the measurements are promptly updated.
- // However, there might be cases we haven't accounted for, especially when
- // native processes are involved. To account for those cases,
- // we'll use an interval here to ensure we're always up-to-date.
- // The `setState` in `grabZoomSubjectOriginalMeasurements` won't trigger a rerender
- // if the values given haven't changed, so we're not running performance risk here.
- measureZoomSubjectInterval.current = setInterval(measureZoomSubject, 1e3);
- return () => {
- measureZoomSubjectInterval.current && clearInterval(measureZoomSubjectInterval.current);
- };
- }, []);
- const onStaticPinPositionChange = useLatestCallback(props.onStaticPinPositionChange || (() => undefined));
- const debouncedOnStaticPinPositionChange = useMemo(() => debounce(onStaticPinPositionChange, 100), []);
-
- /**
- * try to invoke onTransform
- * @private
- */
- const _invokeOnTransform = useLatestCallback(() => {
- const zoomableViewEvent = _getZoomableViewEventObject();
- const position = _staticPinPosition();
- if (!zoomableViewEvent.originalWidth || !zoomableViewEvent.originalHeight) return {
- successful: false
- };
- props.onTransform?.(zoomableViewEvent);
- if (position) {
- props.onStaticPinPositionMove?.(position);
- debouncedOnStaticPinPositionChange(position);
- }
- return {
- successful: true
- };
- });
-
- /**
- * Returns additional information about components current state for external event hooks
- *
- * @returns {{}}
- * @private
- */
- const _getZoomableViewEventObject = useLatestCallback((overwriteObj = {}) => {
- return {
- zoomLevel: zoomLevel.current,
- offsetX: offsetX.current,
- offsetY: offsetY.current,
- originalHeight,
- originalWidth,
- originalPageX,
- originalPageY,
- ...overwriteObj
- };
- });
-
- /**
- * Get the original box dimensions and save them for later use.
- * (They will be used to calculate boxBorders)
- *
- * @private
- */
- const measureZoomSubject = useLatestCallback(() => {
- // make sure we measure after animations are complete
- requestAnimationFrame(() => {
- // this setTimeout is here to fix a weird issue on iOS where the measurements are all `0`
- // when navigating back (react-navigation stack) from another view
- // while closing the keyboard at the same time
- setTimeout(() => {
- // In normal conditions, we're supposed to measure zoomSubject instead of its wrapper.
- // However, our zoomSubject may have been transformed by an initial zoomLevel or offset,
- // in which case these measurements will not represent the true "original" measurements.
- // We just need to make sure the zoomSubjectWrapper perfectly aligns with the zoomSubject
- // (no border, space, or anything between them)
- zoomSubjectWrapperRef.current?.measure((x, y, width, height, pageX, pageY) => {
- // When the component is off-screen, these become all 0s, so we don't set them
- // to avoid messing up calculations, especially ones that are done right after
- // the component transitions from hidden to visible.
- if (!pageX && !pageY && !width && !height) return;
- setOriginalX(x);
- setOriginalY(y);
- setOriginalWidth(width);
- setOriginalHeight(height);
- setOriginalPageX(pageX);
- setOriginalPageY(pageY);
- });
- });
- });
- });
/**
* Handles the start of touch events and checks for taps
@@ -297,130 +283,64 @@ const ReactNativeZoomableView = (props, ref) => {
});
/**
- * Handles the end of touch events
+ * Calculates the amount the offset should shift since the last position during panning
*
- * @param e
- * @param gestureState
+ * @param {Vec2D} gestureCenterPoint
*
* @private
*/
- const _handlePanResponderEnd = useLatestCallback((e, gestureState) => {
- if (!gestureType.current) {
- _resolveAndHandleTap(e);
- }
- setDebugPoints([]);
- lastGestureCenterPosition.current = null;
- if (longPressTimeout.current) {
- clearTimeout(longPressTimeout.current);
- longPressTimeout.current = undefined;
- }
- props.onPanResponderEnd?.(e, gestureState, _getZoomableViewEventObject());
- if (gestureType.current === 'pinch') {
- props.onZoomEnd?.(e, gestureState, _getZoomableViewEventObject());
- } else if (gestureType.current === 'shift') {
- props.onShiftingEnd?.(e, gestureState, _getZoomableViewEventObject());
- }
- if (props.staticPinPosition) {
- _updateStaticPin();
+ const _calcOffsetShiftSinceLastGestureState = useLatestCallback(gestureCenterPoint => {
+ const {
+ movementSensibility
+ } = props;
+ let shift = null;
+ if (lastGestureCenterPosition.current && movementSensibility) {
+ const dx = gestureCenterPoint.x - lastGestureCenterPosition.current.x;
+ const dy = gestureCenterPoint.y - lastGestureCenterPosition.current.y;
+ const shiftX = dx / zoomLevel.current / movementSensibility;
+ const shiftY = dy / zoomLevel.current / movementSensibility;
+ shift = {
+ x: shiftX,
+ y: shiftY
+ };
}
- gestureType.current = undefined;
- gestureStarted.current = false;
+ lastGestureCenterPosition.current = gestureCenterPoint;
+ return shift;
});
/**
- * Handles the actual movement of our pan responder
+ * Handles the pinch movement and zooming
*
* @param e
* @param gestureState
*
* @private
*/
- const _handlePanResponderMove = useLatestCallback((e, gestureState) => {
- if (props.onPanResponderMove) {
- if (props.onPanResponderMove(e, gestureState, _getZoomableViewEventObject())) {
- return false;
- }
+ const _handlePinching = useLatestCallback((e, gestureState) => {
+ if (!props.zoomEnabled) return;
+ const {
+ maxZoom,
+ minZoom,
+ pinchToZoomInSensitivity,
+ pinchToZoomOutSensitivity
+ } = props;
+ const distance = calcGestureTouchDistance(e, gestureState);
+ if (props.onZoomBefore && props.onZoomBefore(e, gestureState, _getZoomableViewEventObject())) {
+ return;
}
+ if (!distance) return;
+ if (!lastGestureTouchDistance.current) return;
- // Only supports 2 touches and below,
- // any invalid number will cause the gesture to end.
- if (gestureState.numberActiveTouches <= 2) {
- if (!gestureStarted.current) {
- _handlePanResponderGrant(e, gestureState);
- }
- } else {
- if (gestureStarted.current) {
- _handlePanResponderEnd(e, gestureState);
- }
- return true;
- }
- if (gestureState.numberActiveTouches === 2) {
- if (longPressTimeout.current) {
- clearTimeout(longPressTimeout.current);
- longPressTimeout.current = undefined;
- }
-
- // change some measurement states when switching gesture to ensure a smooth transition
- if (gestureType.current !== 'pinch') {
- lastGestureCenterPosition.current = calcGestureCenterPoint(e, gestureState);
- lastGestureTouchDistance.current = calcGestureTouchDistance(e, gestureState);
- }
- gestureType.current = 'pinch';
- _handlePinching(e, gestureState);
- } else if (gestureState.numberActiveTouches === 1) {
- if (longPressTimeout.current && (Math.abs(gestureState.dx) > 5 || Math.abs(gestureState.dy) > 5)) {
- clearTimeout(longPressTimeout.current);
- longPressTimeout.current = undefined;
- }
- // change some measurement states when switching gesture to ensure a smooth transition
- if (gestureType.current !== 'shift') {
- lastGestureCenterPosition.current = calcGestureCenterPoint(e, gestureState);
- }
- const {
- dx,
- dy
- } = gestureState;
- const isShiftGesture = Math.abs(dx) > 2 || Math.abs(dy) > 2;
- if (isShiftGesture) {
- gestureType.current = 'shift';
- _handleShifting(gestureState);
- }
- }
- });
-
- /**
- * Handles the pinch movement and zooming
- *
- * @param e
- * @param gestureState
- *
- * @private
- */
- const _handlePinching = useLatestCallback((e, gestureState) => {
- if (!props.zoomEnabled) return;
- const {
- maxZoom,
- minZoom,
- pinchToZoomInSensitivity,
- pinchToZoomOutSensitivity
- } = props;
- const distance = calcGestureTouchDistance(e, gestureState);
- if (props.onZoomBefore && props.onZoomBefore(e, gestureState, _getZoomableViewEventObject())) {
- return;
- }
- if (!distance) return;
- if (!lastGestureTouchDistance.current) return;
-
- // define the new zoom level and take zoom level sensitivity into consideration
- const zoomGrowthFromLastGestureState = distance / lastGestureTouchDistance.current;
- lastGestureTouchDistance.current = distance;
- const pinchToZoomSensitivity = zoomGrowthFromLastGestureState < 1 ? pinchToZoomOutSensitivity : pinchToZoomInSensitivity;
- if (pinchToZoomSensitivity == null) return;
- const deltaGrowth = zoomGrowthFromLastGestureState - 1;
- // 0 - no resistance
- // 10 - 90% resistance
- const deltaGrowthAdjustedBySensitivity = deltaGrowth * (1 - pinchToZoomSensitivity * 9 / 100);
- let newZoomLevel = zoomLevel.current * (1 + deltaGrowthAdjustedBySensitivity);
+ // define the new zoom level and take zoom level sensitivity into consideration
+ const zoomGrowthFromLastGestureState = distance / lastGestureTouchDistance.current;
+ lastGestureTouchDistance.current = distance;
+ const pinchToZoomSensitivity = zoomGrowthFromLastGestureState < 1 ? pinchToZoomOutSensitivity : pinchToZoomInSensitivity;
+ if (pinchToZoomSensitivity == null) return;
+ const deltaGrowth = zoomGrowthFromLastGestureState - 1;
+ // 0 - no resistance
+ // 10 - 90% resistance
+ const deltaGrowthAdjustedBySensitivity = deltaGrowth * (1 - pinchToZoomSensitivity * 9 / 100);
+ let newZoomLevel = zoomLevel.current * (1 + deltaGrowthAdjustedBySensitivity);
// make sure max and min zoom levels are respected
if (maxZoom != null && newZoomLevel > maxZoom) {
@@ -445,7 +365,7 @@ const ReactNativeZoomableView = (props, ref) => {
}
// Uncomment to debug
- props.debug && _setPinchDebugPoints(e, zoomCenter);
+ props.debug && setPinchDebugPoints(e, zoomCenter);
const oldOffsetX = offsetX.current;
const oldOffsetY = offsetY.current;
const oldScale = zoomLevel.current;
@@ -470,48 +390,28 @@ const ReactNativeZoomableView = (props, ref) => {
});
/**
- * Used to debug pinch events
- * @param gestureResponderEvent
- * @param zoomCenter
- * @param points
- */
- const _setPinchDebugPoints = useLatestCallback((gestureResponderEvent, zoomCenter, ...points) => {
- const {
- touches
- } = gestureResponderEvent.nativeEvent;
- setDebugPoints([{
- x: touches[0].pageX - originalPageX,
- y: touches[0].pageY - originalPageY
- }, {
- x: touches[1].pageX - originalPageX,
- y: touches[1].pageY - originalPageY
- }, zoomCenter, ...points]);
- });
-
- /**
- * Calculates the amount the offset should shift since the last position during panning
- *
- * @param {Vec2D} gestureCenterPoint
+ * Set the state to offset moved
*
- * @private
+ * @param {number} newOffsetX
+ * @param {number} newOffsetY
+ * @returns
*/
- const _calcOffsetShiftSinceLastGestureState = useLatestCallback(gestureCenterPoint => {
+ const _setNewOffsetPosition = useLatestCallback((newOffsetX, newOffsetY) => {
const {
- movementSensibility
+ onShiftingBefore,
+ onShiftingAfter
} = props;
- let shift = null;
- if (lastGestureCenterPosition.current && movementSensibility) {
- const dx = gestureCenterPoint.x - lastGestureCenterPosition.current.x;
- const dy = gestureCenterPoint.y - lastGestureCenterPosition.current.y;
- const shiftX = dx / zoomLevel.current / movementSensibility;
- const shiftY = dy / zoomLevel.current / movementSensibility;
- shift = {
- x: shiftX,
- y: shiftY
- };
+ if (onShiftingBefore?.(null, null, _getZoomableViewEventObject())) {
+ return;
}
- lastGestureCenterPosition.current = gestureCenterPoint;
- return shift;
+ offsetX.current = newOffsetX;
+ offsetY.current = newOffsetY;
+ panAnim.current.setValue({
+ x: offsetX.current,
+ y: offsetY.current
+ });
+ zoomAnim.current.setValue(zoomLevel.current);
+ onShiftingAfter?.(null, null, _getZoomableViewEventObject());
});
/**
@@ -545,28 +445,87 @@ const ReactNativeZoomableView = (props, ref) => {
});
/**
- * Set the state to offset moved
+ * Zooms to a specific level. A "zoom center" can be provided, which specifies
+ * the point that will remain in the same position on the screen after the zoom.
+ * The coordinates of the zoom center is relative to the zoom subject.
+ * { x: 0, y: 0 } is the very center of the zoom subject.
*
- * @param {number} newOffsetX
- * @param {number} newOffsetY
- * @returns
+ * @param newZoomLevel
+ * @param zoomCenter - If not supplied, the container's center is the zoom center
*/
- const _setNewOffsetPosition = useLatestCallback((newOffsetX, newOffsetY) => {
+ const publicZoomTo = useLatestCallback((newZoomLevel, zoomCenter) => {
+ if (!props.zoomEnabled) return false;
+ if (props.maxZoom && newZoomLevel > props.maxZoom) return false;
+ if (props.minZoom && newZoomLevel < props.minZoom) return false;
+ props.onZoomBefore?.(null, null, _getZoomableViewEventObject());
+
+ // == Perform Pan Animation to preserve the zoom center while zooming ==
+ let listenerId = '';
+ if (zoomCenter) {
+ // Calculates panAnim values based on changes in zoomAnim.
+ let prevScale = zoomLevel.current;
+ // Since zoomAnim is calculated in native driver,
+ // it will jitter panAnim once in a while,
+ // because here panAnim is being calculated in js.
+ // However the jittering should mostly occur in simulator.
+ listenerId = zoomAnim.current.addListener(({
+ value: newScale
+ }) => {
+ panAnim.current.setValue({
+ x: calcNewScaledOffsetForZoomCentering(offsetX.current, originalWidth, prevScale, newScale, zoomCenter.x),
+ y: calcNewScaledOffsetForZoomCentering(offsetY.current, originalHeight, prevScale, newScale, zoomCenter.y)
+ });
+ prevScale = newScale;
+ });
+ }
+
+ // == Perform Zoom Animation ==
+ getZoomToAnimation(zoomAnim.current, newZoomLevel).start(() => {
+ zoomAnim.current.removeListener(listenerId);
+ });
+ // == Zoom Animation Ends ==
+
+ props.onZoomAfter?.(null, null, _getZoomableViewEventObject());
+ return true;
+ });
+
+ /**
+ * Handles the double tap event
+ *
+ * @param e
+ *
+ * @private
+ */
+ const _handleDoubleTap = useLatestCallback(e => {
const {
- onShiftingBefore,
- onShiftingAfter
+ onDoubleTapBefore,
+ onDoubleTapAfter,
+ doubleTapZoomToCenter
} = props;
- if (onShiftingBefore?.(null, null, _getZoomableViewEventObject())) {
- return;
- }
- offsetX.current = newOffsetX;
- offsetY.current = newOffsetY;
- panAnim.current.setValue({
- x: offsetX.current,
- y: offsetY.current
+ onDoubleTapBefore?.(e, _getZoomableViewEventObject());
+ const nextZoomStep = getNextZoomStep({
+ zoomLevel: zoomLevel.current,
+ zoomStep: props.zoomStep,
+ maxZoom: props.maxZoom,
+ initialZoom: props.initialZoom
});
- zoomAnim.current.setValue(zoomLevel.current);
- onShiftingAfter?.(null, null, _getZoomableViewEventObject());
+ if (nextZoomStep == null) return;
+
+ // define new zoom position coordinates
+ const zoomPositionCoordinates = {
+ x: e.nativeEvent.pageX - originalPageX,
+ y: e.nativeEvent.pageY - originalPageY
+ };
+
+ // if doubleTapZoomToCenter enabled -> always zoom to center instead
+ if (doubleTapZoomToCenter) {
+ zoomPositionCoordinates.x = 0;
+ zoomPositionCoordinates.y = 0;
+ }
+ publicZoomTo(nextZoomStep, zoomPositionCoordinates);
+ onDoubleTapAfter?.(e, _getZoomableViewEventObject({
+ zoomLevel: nextZoomStep
+ }));
});
/**
@@ -655,142 +614,6 @@ const ReactNativeZoomableView = (props, ref) => {
});
}
});
- const _staticPinPosition = useLatestCallback(() => {
- if (!props.staticPinPosition) return;
- if (!props.contentWidth || !props.contentHeight) return;
- return viewportPositionToImagePosition({
- viewportPosition: {
- x: props.staticPinPosition.x,
- y: props.staticPinPosition.y
- },
- imageSize: {
- height: props.contentHeight,
- width: props.contentWidth
- },
- zoomableEvent: {
- ..._getZoomableViewEventObject(),
- offsetX: offsetX.current,
- offsetY: offsetY.current,
- zoomLevel: zoomLevel.current
- }
- });
- });
- const _updateStaticPin = useLatestCallback(() => {
- const position = _staticPinPosition();
- if (!position) return;
- props.onStaticPinPositionChange?.(position);
- });
- const _addTouch = useLatestCallback(touch => {
- touches.current.push(touch);
- setStateTouches([...touches.current]);
- });
- const _removeTouch = useLatestCallback(touch => {
- touches.current.splice(touches.current.indexOf(touch), 1);
- setStateTouches([...touches.current]);
- });
-
- /**
- * Handles the double tap event
- *
- * @param e
- *
- * @private
- */
- const _handleDoubleTap = useLatestCallback(e => {
- const {
- onDoubleTapBefore,
- onDoubleTapAfter,
- doubleTapZoomToCenter
- } = props;
- onDoubleTapBefore?.(e, _getZoomableViewEventObject());
- const nextZoomStep = _getNextZoomStep();
- if (nextZoomStep == null) return;
-
- // define new zoom position coordinates
- const zoomPositionCoordinates = {
- x: e.nativeEvent.pageX - originalPageX,
- y: e.nativeEvent.pageY - originalPageY
- };
-
- // if doubleTapZoomToCenter enabled -> always zoom to center instead
- if (doubleTapZoomToCenter) {
- zoomPositionCoordinates.x = 0;
- zoomPositionCoordinates.y = 0;
- }
- publicZoomTo(nextZoomStep, zoomPositionCoordinates);
- onDoubleTapAfter?.(e, _getZoomableViewEventObject({
- zoomLevel: nextZoomStep
- }));
- });
-
- /**
- * Returns the next zoom step based on current step and zoomStep property.
- * If we are zoomed all the way in -> return to initialzoom
- *
- * @returns {*}
- */
- const _getNextZoomStep = useLatestCallback(() => {
- const {
- zoomStep,
- maxZoom,
- initialZoom
- } = props;
- if (maxZoom == null) return;
- if (zoomLevel.current.toFixed(2) === maxZoom.toFixed(2)) {
- return initialZoom;
- }
- if (zoomStep == null) return;
- const nextZoomStep = zoomLevel.current * (1 + zoomStep);
- if (nextZoomStep > maxZoom) {
- return maxZoom;
- }
- return nextZoomStep;
- });
-
- /**
- * Zooms to a specific level. A "zoom center" can be provided, which specifies
- * the point that will remain in the same position on the screen after the zoom.
- * The coordinates of the zoom center is relative to the zoom subject.
- * { x: 0, y: 0 } is the very center of the zoom subject.
- *
- * @param newZoomLevel
- * @param zoomCenter - If not supplied, the container's center is the zoom center
- */
- const publicZoomTo = useLatestCallback((newZoomLevel, zoomCenter) => {
- if (!props.zoomEnabled) return false;
- if (props.maxZoom && newZoomLevel > props.maxZoom) return false;
- if (props.minZoom && newZoomLevel < props.minZoom) return false;
- props.onZoomBefore?.(null, null, _getZoomableViewEventObject());
-
- // == Perform Pan Animation to preserve the zoom center while zooming ==
- let listenerId = '';
- if (zoomCenter) {
- // Calculates panAnim values based on changes in zoomAnim.
- let prevScale = zoomLevel.current;
- // Since zoomAnim is calculated in native driver,
- // it will jitter panAnim once in a while,
- // because here panAnim is being calculated in js.
- // However the jittering should mostly occur in simulator.
- listenerId = zoomAnim.current.addListener(({
- value: newScale
- }) => {
- panAnim.current.setValue({
- x: calcNewScaledOffsetForZoomCentering(offsetX.current, originalWidth, prevScale, newScale, zoomCenter.x),
- y: calcNewScaledOffsetForZoomCentering(offsetY.current, originalHeight, prevScale, newScale, zoomCenter.y)
- });
- prevScale = newScale;
- });
- }
-
- // == Perform Zoom Animation ==
- getZoomToAnimation(zoomAnim.current, newZoomLevel).start(() => {
- zoomAnim.current.removeListener(listenerId);
- });
- // == Zoom Animation Ends ==
-
- props.onZoomAfter?.(null, null, _getZoomableViewEventObject());
- return true;
- });
/**
* Zooms in or out by a specified change level
@@ -850,23 +673,132 @@ const ReactNativeZoomableView = (props, ref) => {
return gestureStarted.current;
}
}));
- const {
- staticPinIcon,
- children,
- visualTouchFeedbackEnabled,
- doubleTapDelay,
- staticPinPosition,
- onStaticPinLongPress,
- onStaticPinPress,
- pinProps
- } = props;
- return /*#__PURE__*/_jsxs(View, {
+
+ /**
+ * Handles the end of touch events
+ *
+ * @param e
+ * @param gestureState
+ *
+ * @private
+ */
+ const _handlePanResponderEnd = useLatestCallback((e, gestureState) => {
+ if (!gestureType.current) {
+ _resolveAndHandleTap(e);
+ }
+ setDebugPoints([]);
+ lastGestureCenterPosition.current = null;
+ if (longPressTimeout.current) {
+ clearTimeout(longPressTimeout.current);
+ longPressTimeout.current = undefined;
+ }
+ props.onPanResponderEnd?.(e, gestureState, _getZoomableViewEventObject());
+ if (gestureType.current === 'pinch') {
+ props.onZoomEnd?.(e, gestureState, _getZoomableViewEventObject());
+ } else if (gestureType.current === 'shift') {
+ props.onShiftingEnd?.(e, gestureState, _getZoomableViewEventObject());
+ }
+ if (props.staticPinPosition) {
+ _updateStaticPin();
+ }
+ gestureType.current = undefined;
+ gestureStarted.current = false;
+ });
+
+ /**
+ * Handles the actual movement of our pan responder
+ *
+ * @param e
+ * @param gestureState
+ *
+ * @private
+ */
+ const _handlePanResponderMove = useLatestCallback((e, gestureState) => {
+ if (props.onPanResponderMove) {
+ if (props.onPanResponderMove(e, gestureState, _getZoomableViewEventObject())) {
+ return false;
+ }
+ }
+
+ // Only supports 2 touches and below,
+ // any invalid number will cause the gesture to end.
+ if (gestureState.numberActiveTouches <= 2) {
+ if (!gestureStarted.current) {
+ _handlePanResponderGrant(e, gestureState);
+ }
+ } else {
+ if (gestureStarted.current) {
+ _handlePanResponderEnd(e, gestureState);
+ }
+ return true;
+ }
+ if (gestureState.numberActiveTouches === 2) {
+ if (longPressTimeout.current) {
+ clearTimeout(longPressTimeout.current);
+ longPressTimeout.current = undefined;
+ }
+
+ // change some measurement states when switching gesture to ensure a smooth transition
+ if (gestureType.current !== 'pinch') {
+ lastGestureCenterPosition.current = calcGestureCenterPoint(e, gestureState);
+ lastGestureTouchDistance.current = calcGestureTouchDistance(e, gestureState);
+ }
+ gestureType.current = 'pinch';
+ _handlePinching(e, gestureState);
+ } else if (gestureState.numberActiveTouches === 1) {
+ if (longPressTimeout.current && (Math.abs(gestureState.dx) > 5 || Math.abs(gestureState.dy) > 5)) {
+ clearTimeout(longPressTimeout.current);
+ longPressTimeout.current = undefined;
+ }
+ // change some measurement states when switching gesture to ensure a smooth transition
+ if (gestureType.current !== 'shift') {
+ lastGestureCenterPosition.current = calcGestureCenterPoint(e, gestureState);
+ }
+ const {
+ dx,
+ dy
+ } = gestureState;
+ const isShiftGesture = Math.abs(dx) > 2 || Math.abs(dy) > 2;
+ if (isShiftGesture) {
+ gestureType.current = 'shift';
+ _handleShifting(gestureState);
+ }
+ }
+ });
+ useLayoutEffect(() => {
+ gestureHandlers.current = PanResponder.create({
+ onStartShouldSetPanResponder: _handleStartShouldSetPanResponder,
+ onPanResponderGrant: _handlePanResponderGrant,
+ onPanResponderMove: _handlePanResponderMove,
+ onPanResponderRelease: _handlePanResponderEnd,
+ onPanResponderTerminate: (evt, gestureState) => {
+ // We should also call _handlePanResponderEnd
+ // to properly perform cleanups when the gesture is terminated
+ // (aka gesture handling responsibility is taken over by another component).
+ // This also fixes a weird issue where
+ // on real device, sometimes onPanResponderRelease is not called when you lift 2 fingers up,
+ // but onPanResponderTerminate is called instead for no apparent reason.
+ _handlePanResponderEnd(evt, gestureState);
+ props.onPanResponderTerminate?.(evt, gestureState, _getZoomableViewEventObject());
+ },
+ onPanResponderTerminationRequest: (evt, gestureState) => !!props.onPanResponderTerminationRequest?.(evt, gestureState, _getZoomableViewEventObject()),
+ // Defaults to true to prevent parent components, such as React Navigation's tab view, from taking over as responder.
+ onShouldBlockNativeResponder: (evt, gestureState) => props.onShouldBlockNativeResponder?.(evt, gestureState, _getZoomableViewEventObject()) ?? true,
+ onStartShouldSetPanResponderCapture: (evt, gestureState) => !!props.onStartShouldSetPanResponderCapture?.(evt, gestureState),
+ onMoveShouldSetPanResponderCapture: (evt, gestureState) => !!props.onMoveShouldSetPanResponderCapture?.(evt, gestureState)
+ });
+ }, []);
+ return /*#__PURE__*/_jsxs(View
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ , {
style: styles.container,
...gestureHandlers.current?.panHandlers,
ref: zoomSubjectWrapperRef,
onLayout: measureZoomSubject,
children: [/*#__PURE__*/_jsx(Animated.View, {
- style: [styles.zoomSubject, props.style, {
+ style: [
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ styles.zoomSubject, props.style, {
transform: [
// In RN79, we need to split the scale into X and Y to avoid
// the content getting pixelated when zooming in
diff --git a/lib/module/ReactNativeZoomableView.js.map b/lib/module/ReactNativeZoomableView.js.map
index 4c655bd..e72f481 100644
--- a/lib/module/ReactNativeZoomableView.js.map
+++ b/lib/module/ReactNativeZoomableView.js.map
@@ -1 +1 @@
-{"version":3,"names":["debounce","defaults","React","useEffect","useImperativeHandle","useLayoutEffect","useMemo","useRef","useState","Animated","PanResponder","StyleSheet","View","getZoomToAnimation","AnimatedTouchFeedback","StaticPin","DebugTouchPoint","calcGestureCenterPoint","calcGestureTouchDistance","calcNewScaledOffsetForZoomCentering","viewportPositionToImagePosition","useLatestCallback","jsx","_jsx","jsxs","_jsxs","ReactNativeZoomableView","props","ref","originalWidth","setOriginalWidth","originalHeight","setOriginalHeight","originalPageX","setOriginalPageX","originalPageY","setOriginalPageY","originalX","setOriginalX","originalY","setOriginalY","pinSize","setPinSize","width","height","debugPoints","setDebugPoints","stateTouches","setStateTouches","zoomSubjectWrapperRef","gestureHandlers","doubleTapFirstTapReleaseTimestamp","zoomEnabled","panEnabled","initialZoom","initialOffsetX","initialOffsetY","maxZoom","minZoom","pinchToZoomInSensitivity","pinchToZoomOutSensitivity","movementSensibility","doubleTapDelay","zoomStep","onLongPress","undefined","longPressDuration","contentWidth","contentHeight","visualTouchFeedbackEnabled","staticPinPosition","staticPinIcon","onStaticPinPositionChange","onStaticPinPositionMove","disablePanOnInitialZoom","panAnim","ValueXY","x","y","zoomAnim","Value","offsetX","offsetY","zoomLevel","lastGestureCenterPosition","lastGestureTouchDistance","gestureType","gestureStarted","longPressTimeout","onTransformInvocationInitialized","singleTapTimeoutId","touches","doubleTapFirstTap","measureZoomSubjectInterval","current","create","onStartShouldSetPanResponder","_handleStartShouldSetPanResponder","onPanResponderGrant","_handlePanResponderGrant","onPanResponderMove","_handlePanResponderMove","onPanResponderRelease","_handlePanResponderEnd","onPanResponderTerminate","evt","gestureState","_getZoomableViewEventObject","onPanResponderTerminationRequest","onShouldBlockNativeResponder","onStartShouldSetPanResponderCapture","onMoveShouldSetPanResponderCapture","zoomAnimatedValue","panAnimatedValueXY","setValue","addListener","value","_invokeOnTransform","successful","onLayout","layout","nativeEvent","measureZoomSubject","setInterval","clearInterval","debouncedOnStaticPinPositionChange","zoomableViewEvent","position","_staticPinPosition","onTransform","overwriteObj","requestAnimationFrame","setTimeout","measure","pageX","pageY","e","persist","stopAnimation","_resolveAndHandleTap","clearTimeout","onPanResponderEnd","onZoomEnd","onShiftingEnd","_updateStaticPin","numberActiveTouches","_handlePinching","Math","abs","dx","dy","isShiftGesture","_handleShifting","distance","onZoomBefore","zoomGrowthFromLastGestureState","pinchToZoomSensitivity","deltaGrowth","deltaGrowthAdjustedBySensitivity","newZoomLevel","gestureCenterPoint","zoomCenter","debug","_setPinchDebugPoints","oldOffsetX","oldOffsetY","oldScale","newScale","newOffsetY","newOffsetX","offsetShift","_calcOffsetShiftSinceLastGestureState","onZoomAfter","gestureResponderEvent","points","shift","shiftX","shiftY","moveX","moveY","_setNewOffsetPosition","onShiftingBefore","onShiftingAfter","now","Date","_addTouch","id","toString","isSecondTap","_handleDoubleTap","tapX","tapY","timing","toValue","useNativeDriver","duration","start","onSingleTap","publicMoveStaticPinTo","pinX","pinY","viewportPosition","imageSize","zoomableEvent","touch","push","_removeTouch","splice","indexOf","onDoubleTapBefore","onDoubleTapAfter","doubleTapZoomToCenter","nextZoomStep","_getNextZoomStep","zoomPositionCoordinates","publicZoomTo","toFixed","listenerId","prevScale","removeListener","publicZoomBy","zoomLevelChange","publicMoveTo","publicMoveBy","offsetChangeX","offsetChangeY","zoomTo","zoomBy","moveTo","moveBy","moveStaticPinTo","children","onStaticPinLongPress","onStaticPinPress","pinProps","style","styles","container","panHandlers","zoomSubject","transform","scaleX","scaleY","getTranslateTransform","map","animationDuration","onAnimationDone","index","onPress","onParentMove","alignItems","flex","justifyContent","overflow"],"sourceRoot":"../../src","sources":["ReactNativeZoomableView.tsx"],"mappings":"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","ignoreList":[]}
+{"version":3,"names":["debounce","defaults","React","useImperativeHandle","useLayoutEffect","useMemo","useRef","useState","Animated","PanResponder","StyleSheet","View","getZoomToAnimation","AnimatedTouchFeedback","StaticPin","DebugTouchPoint","calcGestureCenterPoint","calcGestureTouchDistance","calcNewScaledOffsetForZoomCentering","viewportPositionToImagePosition","getNextZoomStep","useDebugPoints","useLatestCallback","useZoomSubject","jsx","_jsx","jsxs","_jsxs","ReactNativeZoomableView","props","ref","wrapperRef","zoomSubjectWrapperRef","measure","measureZoomSubject","originalWidth","originalHeight","originalPageX","originalPageY","originalX","originalY","pinSize","setPinSize","width","height","stateTouches","setStateTouches","debugPoints","setDebugPoints","setPinchDebugPoints","gestureHandlers","doubleTapFirstTapReleaseTimestamp","zoomEnabled","panEnabled","initialZoom","initialOffsetX","initialOffsetY","maxZoom","minZoom","pinchToZoomInSensitivity","pinchToZoomOutSensitivity","movementSensibility","doubleTapDelay","zoomStep","onLongPress","undefined","longPressDuration","contentWidth","contentHeight","visualTouchFeedbackEnabled","staticPinPosition","staticPinIcon","onStaticPinPositionChange","onStaticPinPositionMove","disablePanOnInitialZoom","children","onStaticPinLongPress","onStaticPinPress","pinProps","panAnim","ValueXY","x","y","zoomAnim","Value","offsetX","offsetY","zoomLevel","lastGestureCenterPosition","lastGestureTouchDistance","gestureType","gestureStarted","longPressTimeout","onTransformInvocationInitialized","singleTapTimeoutId","touches","doubleTapFirstTap","_getZoomableViewEventObject","overwriteObj","current","_staticPinPosition","viewportPosition","imageSize","zoomableEvent","_updateStaticPin","position","_addTouch","touch","push","_removeTouch","splice","indexOf","debouncedOnStaticPinPositionChange","_invokeOnTransform","zoomableViewEvent","successful","onTransform","zoomAnimatedValue","panAnimatedValueXY","setValue","addListener","value","onLayout","layout","nativeEvent","_handleStartShouldSetPanResponder","e","gestureState","onStartShouldSetPanResponder","_handlePanResponderGrant","persist","setTimeout","onPanResponderGrant","stopAnimation","_calcOffsetShiftSinceLastGestureState","gestureCenterPoint","shift","dx","dy","shiftX","shiftY","_handlePinching","distance","onZoomBefore","zoomGrowthFromLastGestureState","pinchToZoomSensitivity","deltaGrowth","deltaGrowthAdjustedBySensitivity","newZoomLevel","zoomCenter","debug","oldOffsetX","oldOffsetY","oldScale","newScale","newOffsetY","newOffsetX","offsetShift","onZoomAfter","_setNewOffsetPosition","onShiftingBefore","onShiftingAfter","_handleShifting","moveX","moveY","publicZoomTo","listenerId","prevScale","start","removeListener","_handleDoubleTap","onDoubleTapBefore","onDoubleTapAfter","doubleTapZoomToCenter","nextZoomStep","zoomPositionCoordinates","pageX","pageY","_resolveAndHandleTap","now","Date","id","toString","isSecondTap","clearTimeout","tapX","tapY","timing","toValue","useNativeDriver","duration","onSingleTap","publicMoveStaticPinTo","pinX","pinY","publicZoomBy","zoomLevelChange","publicMoveTo","publicMoveBy","offsetChangeX","offsetChangeY","zoomTo","zoomBy","moveTo","moveBy","moveStaticPinTo","_handlePanResponderEnd","onPanResponderEnd","onZoomEnd","onShiftingEnd","_handlePanResponderMove","onPanResponderMove","numberActiveTouches","Math","abs","isShiftGesture","create","onPanResponderRelease","onPanResponderTerminate","evt","onPanResponderTerminationRequest","onShouldBlockNativeResponder","onStartShouldSetPanResponderCapture","onMoveShouldSetPanResponderCapture","style","styles","container","panHandlers","zoomSubject","transform","scaleX","scaleY","getTranslateTransform","map","animationDuration","onAnimationDone","index","onPress","onParentMove","alignItems","flex","justifyContent","overflow"],"sourceRoot":"../../src","sources":["ReactNativeZoomableView.tsx"],"mappings":"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","ignoreList":[]}
diff --git a/lib/module/components/AnimatedTouchFeedback.js b/lib/module/components/AnimatedTouchFeedback.js
index 391b2e1..a7769ea 100644
--- a/lib/module/components/AnimatedTouchFeedback.js
+++ b/lib/module/components/AnimatedTouchFeedback.js
@@ -32,7 +32,9 @@ export const AnimatedTouchFeedback = ({
}, [animationDelay, animationDuration]);
return /*#__PURE__*/_jsx(Animated.View, {
pointerEvents: "none",
- style: [styles.animatedTouchFeedback, {
+ style: [
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ styles.animatedTouchFeedback, {
opacity: appearDisappearAnimRef.current.interpolate({
inputRange: [0, 1],
outputRange: [0, 0.3]
diff --git a/lib/module/components/AnimatedTouchFeedback.js.map b/lib/module/components/AnimatedTouchFeedback.js.map
index 0f745d8..8ab9b08 100644
--- a/lib/module/components/AnimatedTouchFeedback.js.map
+++ b/lib/module/components/AnimatedTouchFeedback.js.map
@@ -1 +1 @@
-{"version":3,"names":["React","useEffect","useRef","Animated","Easing","StyleSheet","jsx","_jsx","AnimatedTouchFeedback","x","y","animationDelay","animationDuration","onAnimationDone","appearDisappearAnimRef","Value","onAnimationDoneRef","current","setValue","inDuration","outDuration","sequence","timing","delay","toValue","duration","easing","linear","useNativeDriver","out","ease","start","View","pointerEvents","style","styles","animatedTouchFeedback","opacity","interpolate","inputRange","outputRange","left","top","transform","scale","create","backgroundColor","borderRadius","height","position","width"],"sourceRoot":"../../../src","sources":["components/AnimatedTouchFeedback.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAChD,SAASC,QAAQ,EAAEC,MAAM,EAAEC,UAAU,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE5D,OAAO,MAAMC,qBAAqB,GAAGA,CAAC;EACpCC,CAAC;EACDC,CAAC;EACDC,cAAc;EACdC,iBAAiB;EACjBC;AAOF,CAAC,KAAK;EACJ,MAAMC,sBAAsB,GAAGZ,MAAM,CAAiB,IAAIC,QAAQ,CAACY,KAAK,CAAC,CAAC,CAAC,CAAC;EAC5E,MAAMC,kBAAkB,GAAGd,MAAM,CAACW,eAAe,CAAC;EAClDG,kBAAkB,CAACC,OAAO,GAAGJ,eAAe;EAE5CZ,SAAS,CAAC,MAAM;IACda,sBAAsB,CAACG,OAAO,CAACC,QAAQ,CAAC,CAAC,CAAC;IAC1C,MAAMC,UAAU,GAAGP,iBAAiB,GAAG,GAAG;IAC1C,MAAMQ,WAAW,GAAGR,iBAAiB,GAAGO,UAAU;IAClDhB,QAAQ,CAACkB,QAAQ,CAAC,CAChBlB,QAAQ,CAACmB,MAAM,CAACR,sBAAsB,CAACG,OAAO,EAAE;MAC9CM,KAAK,EAAEZ,cAAc,IAAI,CAAC;MAC1Ba,OAAO,EAAE,CAAC;MACVC,QAAQ,EAAEN,UAAU;MACpBO,MAAM,EAAEtB,MAAM,CAACuB,MAAM;MACrBC,eAAe,EAAE;IACnB,CAAC,CAAC,EACFzB,QAAQ,CAACmB,MAAM,CAACR,sBAAsB,CAACG,OAAO,EAAE;MAC9CO,OAAO,EAAE,CAAC;MACVC,QAAQ,EAAEL,WAAW;MACrBM,MAAM,EAAEtB,MAAM,CAACyB,GAAG,CAACzB,MAAM,CAAC0B,IAAI,CAAC;MAC/BF,eAAe,EAAE;IACnB,CAAC,CAAC,CACH,CAAC,CAACG,KAAK,CAAC,MAAMf,kBAAkB,CAACC,OAAO,GAAG,CAAC,CAAC;EAChD,CAAC,EAAE,CAACN,cAAc,EAAEC,iBAAiB,CAAC,CAAC;EAEvC,oBACEL,IAAA,CAACJ,QAAQ,CAAC6B,IAAI;IACZC,aAAa,EAAC,MAAM;IACpBC,KAAK,EAAE,CACLC,MAAM,CAACC,qBAAqB,EAC5B;MACEC,OAAO,EAAEvB,sBAAsB,CAACG,OAAO,CAACqB,WAAW,CAAC;QAClDC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAClBC,WAAW,EAAE,CAAC,CAAC,EAAE,GAAG;MACtB,CAAC,CAAC;MACFC,IAAI,EAAEhC,CAAC,GAAG,EAAE;MACZiC,GAAG,EAAEhC,CAAC,GAAG,EAAE;MACXiC,SAAS,EAAE,CACT;QACEC,KAAK,EAAE9B,sBAAsB,CAACG,OAAO,CAACqB,WAAW,CAAC;UAChDC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;UAClBC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC;QACtB,CAAC;MACH,CAAC;IAEL,CAAC;EACD,CACH,CAAC;AAEN,CAAC;AAED,MAAML,MAAM,GAAG9B,UAAU,CAACwC,MAAM,CAAC;EAC/BT,qBAAqB,EAAE;IACrBU,eAAe,EAAE,WAAW;IAC5BC,YAAY,EAAE,EAAE;IAChBC,MAAM,EAAE,EAAE;IACVC,QAAQ,EAAE,UAAU;IACpBC,KAAK,EAAE;EACT;AACF,CAAC,CAAC","ignoreList":[]}
+{"version":3,"names":["React","useEffect","useRef","Animated","Easing","StyleSheet","jsx","_jsx","AnimatedTouchFeedback","x","y","animationDelay","animationDuration","onAnimationDone","appearDisappearAnimRef","Value","onAnimationDoneRef","current","setValue","inDuration","outDuration","sequence","timing","delay","toValue","duration","easing","linear","useNativeDriver","out","ease","start","View","pointerEvents","style","styles","animatedTouchFeedback","opacity","interpolate","inputRange","outputRange","left","top","transform","scale","create","backgroundColor","borderRadius","height","position","width"],"sourceRoot":"../../../src","sources":["components/AnimatedTouchFeedback.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAChD,SAASC,QAAQ,EAAEC,MAAM,EAAEC,UAAU,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE5D,OAAO,MAAMC,qBAAqB,GAAGA,CAAC;EACpCC,CAAC;EACDC,CAAC;EACDC,cAAc;EACdC,iBAAiB;EACjBC;AAOF,CAAC,KAAK;EACJ,MAAMC,sBAAsB,GAAGZ,MAAM,CAAiB,IAAIC,QAAQ,CAACY,KAAK,CAAC,CAAC,CAAC,CAAC;EAC5E,MAAMC,kBAAkB,GAAGd,MAAM,CAACW,eAAe,CAAC;EAClDG,kBAAkB,CAACC,OAAO,GAAGJ,eAAe;EAE5CZ,SAAS,CAAC,MAAM;IACda,sBAAsB,CAACG,OAAO,CAACC,QAAQ,CAAC,CAAC,CAAC;IAC1C,MAAMC,UAAU,GAAGP,iBAAiB,GAAG,GAAG;IAC1C,MAAMQ,WAAW,GAAGR,iBAAiB,GAAGO,UAAU;IAClDhB,QAAQ,CAACkB,QAAQ,CAAC,CAChBlB,QAAQ,CAACmB,MAAM,CAACR,sBAAsB,CAACG,OAAO,EAAE;MAC9CM,KAAK,EAAEZ,cAAc,IAAI,CAAC;MAC1Ba,OAAO,EAAE,CAAC;MACVC,QAAQ,EAAEN,UAAU;MACpBO,MAAM,EAAEtB,MAAM,CAACuB,MAAM;MACrBC,eAAe,EAAE;IACnB,CAAC,CAAC,EACFzB,QAAQ,CAACmB,MAAM,CAACR,sBAAsB,CAACG,OAAO,EAAE;MAC9CO,OAAO,EAAE,CAAC;MACVC,QAAQ,EAAEL,WAAW;MACrBM,MAAM,EAAEtB,MAAM,CAACyB,GAAG,CAACzB,MAAM,CAAC0B,IAAI,CAAC;MAC/BF,eAAe,EAAE;IACnB,CAAC,CAAC,CACH,CAAC,CAACG,KAAK,CAAC,MAAMf,kBAAkB,CAACC,OAAO,GAAG,CAAC,CAAC;EAChD,CAAC,EAAE,CAACN,cAAc,EAAEC,iBAAiB,CAAC,CAAC;EAEvC,oBACEL,IAAA,CAACJ,QAAQ,CAAC6B,IAAI;IACZC,aAAa,EAAC,MAAM;IACpBC,KAAK,EAAE;IACL;IACAC,MAAM,CAACC,qBAAqB,EAC5B;MACEC,OAAO,EAAEvB,sBAAsB,CAACG,OAAO,CAACqB,WAAW,CAAC;QAClDC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAClBC,WAAW,EAAE,CAAC,CAAC,EAAE,GAAG;MACtB,CAAC,CAAC;MACFC,IAAI,EAAEhC,CAAC,GAAG,EAAE;MACZiC,GAAG,EAAEhC,CAAC,GAAG,EAAE;MACXiC,SAAS,EAAE,CACT;QACEC,KAAK,EAAE9B,sBAAsB,CAACG,OAAO,CAACqB,WAAW,CAAC;UAChDC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;UAClBC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC;QACtB,CAAC;MACH,CAAC;IAEL,CAAC;EACD,CACH,CAAC;AAEN,CAAC;AAED,MAAML,MAAM,GAAG9B,UAAU,CAACwC,MAAM,CAAC;EAC/BT,qBAAqB,EAAE;IACrBU,eAAe,EAAE,WAAW;IAC5BC,YAAY,EAAE,EAAE;IAChBC,MAAM,EAAE,EAAE;IACVC,QAAQ,EAAE,UAAU;IACpBC,KAAK,EAAE;EACT;AACF,CAAC,CAAC","ignoreList":[]}
diff --git a/lib/module/components/StaticPin.js b/lib/module/components/StaticPin.js
index 310dc3e..761afbd 100644
--- a/lib/module/components/StaticPin.js
+++ b/lib/module/components/StaticPin.js
@@ -48,7 +48,9 @@ export const StaticPin = ({
style: [{
left: staticPinPosition.x,
top: staticPinPosition.y
- }, styles.pinWrapper, {
+ },
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ styles.pinWrapper, {
opacity,
transform
}],
@@ -64,7 +66,7 @@ export const StaticPin = ({
...panResponder.panHandlers,
children: staticPinIcon ||
/*#__PURE__*/
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-use-before-define
_jsx(Image, {
source: require('../assets/pin.png'),
style: styles.pin
diff --git a/lib/module/components/StaticPin.js.map b/lib/module/components/StaticPin.js.map
index a40cc35..5b867c9 100644
--- a/lib/module/components/StaticPin.js.map
+++ b/lib/module/components/StaticPin.js.map
@@ -1 +1 @@
-{"version":3,"names":["React","Animated","Image","PanResponder","StyleSheet","View","jsx","_jsx","StaticPin","staticPinPosition","staticPinIcon","pinSize","onParentMove","onPress","onLongPress","setPinSize","pinProps","tapTime","useRef","transform","translateY","height","translateX","width","opacity","panResponder","create","onStartShouldSetPanResponder","current","Date","now","onPanResponderMove","evt","gestureState","Math","abs","dx","dy","onPanResponderRelease","dt","style","left","x","top","y","styles","pinWrapper","children","onLayout","nativeEvent","layout","panHandlers","source","require","pin","position"],"sourceRoot":"../../../src","sources":["components/StaticPin.tsx"],"mappings":"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","ignoreList":[]}
+{"version":3,"names":["React","Animated","Image","PanResponder","StyleSheet","View","jsx","_jsx","StaticPin","staticPinPosition","staticPinIcon","pinSize","onParentMove","onPress","onLongPress","setPinSize","pinProps","tapTime","useRef","transform","translateY","height","translateX","width","opacity","panResponder","create","onStartShouldSetPanResponder","current","Date","now","onPanResponderMove","evt","gestureState","Math","abs","dx","dy","onPanResponderRelease","dt","style","left","x","top","y","styles","pinWrapper","children","onLayout","nativeEvent","layout","panHandlers","source","require","pin","position"],"sourceRoot":"../../../src","sources":["components/StaticPin.tsx"],"mappings":"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","ignoreList":[]}
diff --git a/lib/module/debugHelper/index.js b/lib/module/debugHelper/index.js
index f689e53..f37e7db 100644
--- a/lib/module/debugHelper/index.js
+++ b/lib/module/debugHelper/index.js
@@ -11,7 +11,9 @@ export const DebugTouchPoint = ({
}) => {
const radius = diameter / 2;
return /*#__PURE__*/_jsx(View, {
- style: [styles.debugPoint, {
+ style: [
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ styles.debugPoint, {
width: diameter,
height: diameter,
borderRadius: diameter,
@@ -30,7 +32,9 @@ export const DebugRect = ({
}) => {
const width = 5;
return /*#__PURE__*/_jsx(View, {
- style: [styles.debugRect, {
+ style: [
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ styles.debugRect, {
width,
height,
backgroundColor: color,
diff --git a/lib/module/debugHelper/index.js.map b/lib/module/debugHelper/index.js.map
index c87cf2b..6ea5ba4 100644
--- a/lib/module/debugHelper/index.js.map
+++ b/lib/module/debugHelper/index.js.map
@@ -1 +1 @@
-{"version":3,"names":["React","StyleSheet","View","jsx","_jsx","DebugTouchPoint","diameter","x","y","color","radius","style","styles","debugPoint","width","height","borderRadius","backgroundColor","left","top","pointerEvents","DebugRect","debugRect","create","opacity","position"],"sourceRoot":"../../../src","sources":["debugHelper/index.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEhD,OAAO,MAAMC,eAAe,GAAGA,CAAC;EAC9BC,QAAQ,GAAG,EAAE;EACbC,CAAC,GAAG,CAAC;EACLC,CAAC,GAAG,CAAC;EACLC,KAAK,GAAG;AACV,CAAC,KAAK;EACJ,MAAMC,MAAM,GAAGJ,QAAQ,GAAG,CAAC;EAC3B,oBACEF,IAAA,CAACF,IAAI;IACHS,KAAK,EAAE,CACLC,MAAM,CAACC,UAAU,EACjB;MACEC,KAAK,EAAER,QAAQ;MACfS,MAAM,EAAET,QAAQ;MAChBU,YAAY,EAAEV,QAAQ;MACtBW,eAAe,EAAER,KAAK;MACtBS,IAAI,EAAEX,CAAC,GAAGG,MAAM;MAChBS,GAAG,EAAEX,CAAC,GAAGE;IACX,CAAC,CACD;IACFU,aAAa,EAAC;EAAM,CACrB,CAAC;AAEN,CAAC;AACD,OAAO,MAAMC,SAAS,GAAGA,CAAC;EACxBN,MAAM;EACNR,CAAC,GAAG,CAAC;EACLC,CAAC,GAAG,CAAC;EACLC,KAAK,GAAG;AAMV,CAAC,KAAK;EACJ,MAAMK,KAAK,GAAG,CAAC;EACf,oBACEV,IAAA,CAACF,IAAI;IACHS,KAAK,EAAE,CACLC,MAAM,CAACU,SAAS,EAChB;MACER,KAAK;MACLC,MAAM;MACNE,eAAe,EAAER,KAAK;MACtBS,IAAI,EAAEX,CAAC,GAAGO,KAAK,GAAG,CAAC;MACnBK,GAAG,EAAEX;IACP,CAAC,CACD;IACFY,aAAa,EAAC;EAAM,CACrB,CAAC;AAEN,CAAC;AAED,MAAMR,MAAM,GAAGX,UAAU,CAACsB,MAAM,CAAC;EAC/BV,UAAU,EAAE;IACVW,OAAO,EAAE,GAAG;IACZC,QAAQ,EAAE;EACZ,CAAC;EACDH,SAAS,EAAE;IACTE,OAAO,EAAE,GAAG;IACZC,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC","ignoreList":[]}
+{"version":3,"names":["React","StyleSheet","View","jsx","_jsx","DebugTouchPoint","diameter","x","y","color","radius","style","styles","debugPoint","width","height","borderRadius","backgroundColor","left","top","pointerEvents","DebugRect","debugRect","create","opacity","position"],"sourceRoot":"../../../src","sources":["debugHelper/index.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEhD,OAAO,MAAMC,eAAe,GAAGA,CAAC;EAC9BC,QAAQ,GAAG,EAAE;EACbC,CAAC,GAAG,CAAC;EACLC,CAAC,GAAG,CAAC;EACLC,KAAK,GAAG;AACV,CAAC,KAAK;EACJ,MAAMC,MAAM,GAAGJ,QAAQ,GAAG,CAAC;EAC3B,oBACEF,IAAA,CAACF,IAAI;IACHS,KAAK,EAAE;IACL;IACAC,MAAM,CAACC,UAAU,EACjB;MACEC,KAAK,EAAER,QAAQ;MACfS,MAAM,EAAET,QAAQ;MAChBU,YAAY,EAAEV,QAAQ;MACtBW,eAAe,EAAER,KAAK;MACtBS,IAAI,EAAEX,CAAC,GAAGG,MAAM;MAChBS,GAAG,EAAEX,CAAC,GAAGE;IACX,CAAC,CACD;IACFU,aAAa,EAAC;EAAM,CACrB,CAAC;AAEN,CAAC;AACD,OAAO,MAAMC,SAAS,GAAGA,CAAC;EACxBN,MAAM;EACNR,CAAC,GAAG,CAAC;EACLC,CAAC,GAAG,CAAC;EACLC,KAAK,GAAG;AAMV,CAAC,KAAK;EACJ,MAAMK,KAAK,GAAG,CAAC;EACf,oBACEV,IAAA,CAACF,IAAI;IACHS,KAAK,EAAE;IACL;IACAC,MAAM,CAACU,SAAS,EAChB;MACER,KAAK;MACLC,MAAM;MACNE,eAAe,EAAER,KAAK;MACtBS,IAAI,EAAEX,CAAC,GAAGO,KAAK,GAAG,CAAC;MACnBK,GAAG,EAAEX;IACP,CAAC,CACD;IACFY,aAAa,EAAC;EAAM,CACrB,CAAC;AAEN,CAAC;AAED,MAAMR,MAAM,GAAGX,UAAU,CAACsB,MAAM,CAAC;EAC/BV,UAAU,EAAE;IACVW,OAAO,EAAE,GAAG;IACZC,QAAQ,EAAE;EACZ,CAAC;EACDH,SAAS,EAAE;IACTE,OAAO,EAAE,GAAG;IACZC,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC","ignoreList":[]}
diff --git a/lib/module/helper/getNextZoomStep.js b/lib/module/helper/getNextZoomStep.js
new file mode 100644
index 0000000..6cf8e94
--- /dev/null
+++ b/lib/module/helper/getNextZoomStep.js
@@ -0,0 +1,26 @@
+"use strict";
+
+/**
+ * Returns the next zoom step based on current step and zoomStep property.
+ * If we are zoomed all the way in -> return to initialzoom
+ *
+ * @returns {*}
+ */
+export const getNextZoomStep = ({
+ zoomStep,
+ maxZoom,
+ initialZoom,
+ zoomLevel
+}) => {
+ if (maxZoom == null) return;
+ if (zoomLevel.toFixed(2) === maxZoom.toFixed(2)) {
+ return initialZoom;
+ }
+ if (zoomStep == null) return;
+ const nextZoomStep = zoomLevel * (1 + zoomStep);
+ if (nextZoomStep > maxZoom) {
+ return maxZoom;
+ }
+ return nextZoomStep;
+};
+//# sourceMappingURL=getNextZoomStep.js.map
\ No newline at end of file
diff --git a/lib/module/helper/getNextZoomStep.js.map b/lib/module/helper/getNextZoomStep.js.map
new file mode 100644
index 0000000..df06be8
--- /dev/null
+++ b/lib/module/helper/getNextZoomStep.js.map
@@ -0,0 +1 @@
+{"version":3,"names":["getNextZoomStep","zoomStep","maxZoom","initialZoom","zoomLevel","toFixed","nextZoomStep"],"sourceRoot":"../../../src","sources":["helper/getNextZoomStep.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,eAAe,GAAGA,CAAC;EAC9BC,QAAQ;EACRC,OAAO;EACPC,WAAW;EACXC;AAMF,CAAC,KAAK;EACJ,IAAIF,OAAO,IAAI,IAAI,EAAE;EAErB,IAAIE,SAAS,CAACC,OAAO,CAAC,CAAC,CAAC,KAAKH,OAAO,CAACG,OAAO,CAAC,CAAC,CAAC,EAAE;IAC/C,OAAOF,WAAW;EACpB;EAEA,IAAIF,QAAQ,IAAI,IAAI,EAAE;EAEtB,MAAMK,YAAY,GAAGF,SAAS,IAAI,CAAC,GAAGH,QAAQ,CAAC;EAC/C,IAAIK,YAAY,GAAGJ,OAAO,EAAE;IAC1B,OAAOA,OAAO;EAChB;EAEA,OAAOI,YAAY;AACrB,CAAC","ignoreList":[]}
diff --git a/lib/module/hooks/useDebugPoints.js b/lib/module/hooks/useDebugPoints.js
new file mode 100644
index 0000000..7d628fc
--- /dev/null
+++ b/lib/module/hooks/useDebugPoints.js
@@ -0,0 +1,35 @@
+"use strict";
+
+import { useState } from 'react';
+import { useLatestCallback } from './useLatestCallback';
+export const useDebugPoints = ({
+ originalPageX,
+ originalPageY
+}) => {
+ const [debugPoints, setDebugPoints] = useState([]);
+
+ /**
+ * Used to debug pinch events
+ * @param gestureResponderEvent
+ * @param zoomCenter
+ * @param points
+ */
+ const setPinchDebugPoints = useLatestCallback((gestureResponderEvent, zoomCenter, ...points) => {
+ const {
+ touches
+ } = gestureResponderEvent.nativeEvent;
+ setDebugPoints([{
+ x: touches[0].pageX - originalPageX,
+ y: touches[0].pageY - originalPageY
+ }, {
+ x: touches[1].pageX - originalPageX,
+ y: touches[1].pageY - originalPageY
+ }, zoomCenter, ...points]);
+ });
+ return {
+ debugPoints,
+ setDebugPoints,
+ setPinchDebugPoints
+ };
+};
+//# sourceMappingURL=useDebugPoints.js.map
\ No newline at end of file
diff --git a/lib/module/hooks/useDebugPoints.js.map b/lib/module/hooks/useDebugPoints.js.map
new file mode 100644
index 0000000..def583d
--- /dev/null
+++ b/lib/module/hooks/useDebugPoints.js.map
@@ -0,0 +1 @@
+{"version":3,"names":["useState","useLatestCallback","useDebugPoints","originalPageX","originalPageY","debugPoints","setDebugPoints","setPinchDebugPoints","gestureResponderEvent","zoomCenter","points","touches","nativeEvent","x","pageX","y","pageY"],"sourceRoot":"../../../src","sources":["hooks/useDebugPoints.ts"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,OAAO;AAIhC,SAASC,iBAAiB,QAAQ,qBAAqB;AAEvD,OAAO,MAAMC,cAAc,GAAGA,CAAC;EAC7BC,aAAa;EACbC;AAIF,CAAC,KAAK;EACJ,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAGN,QAAQ,CAAU,EAAE,CAAC;;EAE3D;AACF;AACA;AACA;AACA;AACA;EACE,MAAMO,mBAAmB,GAAGN,iBAAiB,CAC3C,CACEO,qBAA4C,EAC5CC,UAAiB,EACjB,GAAGC,MAAe,KACf;IACH,MAAM;MAAEC;IAAQ,CAAC,GAAGH,qBAAqB,CAACI,WAAW;IAErDN,cAAc,CAAC,CACb;MACEO,CAAC,EAAEF,OAAO,CAAC,CAAC,CAAC,CAACG,KAAK,GAAGX,aAAa;MACnCY,CAAC,EAAEJ,OAAO,CAAC,CAAC,CAAC,CAACK,KAAK,GAAGZ;IACxB,CAAC,EACD;MACES,CAAC,EAAEF,OAAO,CAAC,CAAC,CAAC,CAACG,KAAK,GAAGX,aAAa;MACnCY,CAAC,EAAEJ,OAAO,CAAC,CAAC,CAAC,CAACK,KAAK,GAAGZ;IACxB,CAAC,EACDK,UAAU,EACV,GAAGC,MAAM,CACV,CAAC;EACJ,CACF,CAAC;EAED,OAAO;IAAEL,WAAW;IAAEC,cAAc;IAAEC;EAAoB,CAAC;AAC7D,CAAC","ignoreList":[]}
diff --git a/lib/module/hooks/useZoomSubject.js b/lib/module/hooks/useZoomSubject.js
new file mode 100644
index 0000000..64756bb
--- /dev/null
+++ b/lib/module/hooks/useZoomSubject.js
@@ -0,0 +1,73 @@
+"use strict";
+
+import { useEffect, useRef, useState } from 'react';
+import { useLatestCallback } from './useLatestCallback';
+export const useZoomSubject = () => {
+ const wrapperRef = useRef(null);
+ const [originalWidth, setOriginalWidth] = useState(0);
+ const [originalHeight, setOriginalHeight] = useState(0);
+ const [originalPageX, setOriginalPageX] = useState(0);
+ const [originalPageY, setOriginalPageY] = useState(0);
+ const [originalX, setOriginalX] = useState(0);
+ const [originalY, setOriginalY] = useState(0);
+ const measureZoomSubjectInterval = useRef();
+
+ /**
+ * Get the original box dimensions and save them for later use.
+ * (They will be used to calculate boxBorders)
+ *
+ * @private
+ */
+ const measure = useLatestCallback(() => {
+ // make sure we measure after animations are complete
+ requestAnimationFrame(() => {
+ // this setTimeout is here to fix a weird issue on iOS where the measurements are all `0`
+ // when navigating back (react-navigation stack) from another view
+ // while closing the keyboard at the same time
+ setTimeout(() => {
+ // In normal conditions, we're supposed to measure zoomSubject instead of its wrapper.
+ // However, our zoomSubject may have been transformed by an initial zoomLevel or offset,
+ // in which case these measurements will not represent the true "original" measurements.
+ // We just need to make sure the zoomSubjectWrapper perfectly aligns with the zoomSubject
+ // (no border, space, or anything between them)
+ wrapperRef.current?.measure((x, y, width, height, pageX, pageY) => {
+ // When the component is off-screen, these become all 0s, so we don't set them
+ // to avoid messing up calculations, especially ones that are done right after
+ // the component transitions from hidden to visible.
+ if (!pageX && !pageY && !width && !height) return;
+ setOriginalX(x);
+ setOriginalY(y);
+ setOriginalWidth(width);
+ setOriginalHeight(height);
+ setOriginalPageX(pageX);
+ setOriginalPageY(pageY);
+ });
+ });
+ });
+ });
+ useEffect(() => {
+ measure();
+ // We've already run `grabZoomSubjectOriginalMeasurements` at various events
+ // to make sure the measurements are promptly updated.
+ // However, there might be cases we haven't accounted for, especially when
+ // native processes are involved. To account for those cases,
+ // we'll use an interval here to ensure we're always up-to-date.
+ // The `setState` in `grabZoomSubjectOriginalMeasurements` won't trigger a rerender
+ // if the values given haven't changed, so we're not running performance risk here.
+ measureZoomSubjectInterval.current = setInterval(measure, 1e3);
+ return () => {
+ measureZoomSubjectInterval.current && clearInterval(measureZoomSubjectInterval.current);
+ };
+ }, []);
+ return {
+ wrapperRef,
+ measure,
+ originalWidth,
+ originalHeight,
+ originalPageX,
+ originalPageY,
+ originalX,
+ originalY
+ };
+};
+//# sourceMappingURL=useZoomSubject.js.map
\ No newline at end of file
diff --git a/lib/module/hooks/useZoomSubject.js.map b/lib/module/hooks/useZoomSubject.js.map
new file mode 100644
index 0000000..89245a9
--- /dev/null
+++ b/lib/module/hooks/useZoomSubject.js.map
@@ -0,0 +1 @@
+{"version":3,"names":["useEffect","useRef","useState","useLatestCallback","useZoomSubject","wrapperRef","originalWidth","setOriginalWidth","originalHeight","setOriginalHeight","originalPageX","setOriginalPageX","originalPageY","setOriginalPageY","originalX","setOriginalX","originalY","setOriginalY","measureZoomSubjectInterval","measure","requestAnimationFrame","setTimeout","current","x","y","width","height","pageX","pageY","setInterval","clearInterval"],"sourceRoot":"../../../src","sources":["hooks/useZoomSubject.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAGnD,SAASC,iBAAiB,QAAQ,qBAAqB;AAEvD,OAAO,MAAMC,cAAc,GAAGA,CAAA,KAAM;EAClC,MAAMC,UAAU,GAAGJ,MAAM,CAAO,IAAI,CAAC;EACrC,MAAM,CAACK,aAAa,EAAEC,gBAAgB,CAAC,GAAGL,QAAQ,CAAC,CAAC,CAAC;EACrD,MAAM,CAACM,cAAc,EAAEC,iBAAiB,CAAC,GAAGP,QAAQ,CAAC,CAAC,CAAC;EACvD,MAAM,CAACQ,aAAa,EAAEC,gBAAgB,CAAC,GAAGT,QAAQ,CAAC,CAAC,CAAC;EACrD,MAAM,CAACU,aAAa,EAAEC,gBAAgB,CAAC,GAAGX,QAAQ,CAAC,CAAC,CAAC;EACrD,MAAM,CAACY,SAAS,EAAEC,YAAY,CAAC,GAAGb,QAAQ,CAAC,CAAC,CAAC;EAC7C,MAAM,CAACc,SAAS,EAAEC,YAAY,CAAC,GAAGf,QAAQ,CAAC,CAAC,CAAC;EAC7C,MAAMgB,0BAA0B,GAAGjB,MAAM,CAAe,CAAC;;EAEzD;AACF;AACA;AACA;AACA;AACA;EACE,MAAMkB,OAAO,GAAGhB,iBAAiB,CAAC,MAAM;IACtC;IACAiB,qBAAqB,CAAC,MAAM;MAC1B;MACA;MACA;MACAC,UAAU,CAAC,MAAM;QACf;QACA;QACA;QACA;QACA;QACAhB,UAAU,CAACiB,OAAO,EAAEH,OAAO,CAAC,CAACI,CAAC,EAAEC,CAAC,EAAEC,KAAK,EAAEC,MAAM,EAAEC,KAAK,EAAEC,KAAK,KAAK;UACjE;UACA;UACA;UACA,IAAI,CAACD,KAAK,IAAI,CAACC,KAAK,IAAI,CAACH,KAAK,IAAI,CAACC,MAAM,EAAE;UAE3CX,YAAY,CAACQ,CAAC,CAAC;UACfN,YAAY,CAACO,CAAC,CAAC;UACfjB,gBAAgB,CAACkB,KAAK,CAAC;UACvBhB,iBAAiB,CAACiB,MAAM,CAAC;UACzBf,gBAAgB,CAACgB,KAAK,CAAC;UACvBd,gBAAgB,CAACe,KAAK,CAAC;QACzB,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF5B,SAAS,CAAC,MAAM;IACdmB,OAAO,CAAC,CAAC;IACT;IACA;IACA;IACA;IACA;IACA;IACA;IACAD,0BAA0B,CAACI,OAAO,GAAGO,WAAW,CAACV,OAAO,EAAE,GAAG,CAAC;IAE9D,OAAO,MAAM;MACXD,0BAA0B,CAACI,OAAO,IAChCQ,aAAa,CAACZ,0BAA0B,CAACI,OAAO,CAAC;IACrD,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IACLjB,UAAU;IACVc,OAAO;IACPb,aAAa;IACbE,cAAc;IACdE,aAAa;IACbE,aAAa;IACbE,SAAS;IACTE;EACF,CAAC;AACH,CAAC","ignoreList":[]}
diff --git a/lib/typescript/ReactNativeZoomableView.d.ts.map b/lib/typescript/ReactNativeZoomableView.d.ts.map
index fe4cb85..2d2a5b6 100644
--- a/lib/typescript/ReactNativeZoomableView.d.ts.map
+++ b/lib/typescript/ReactNativeZoomableView.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"ReactNativeZoomableView.d.ts","sourceRoot":"","sources":["../../src/ReactNativeZoomableView.tsx"],"names":[],"mappings":"AACA,OAAc,EACZ,wBAAwB,EAOzB,MAAM,OAAO,CAAC;AAuBf,OAAO,EACL,4BAA4B,EAE5B,KAAK,EAEN,MAAM,WAAW,CAAC;AAEnB,KAAK,uBAAuB,GAAG;IAC7B,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACrD,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3D,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;IAC1D,MAAM,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC;IACzC,eAAe,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9D,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF,QAAA,MAAM,uBAAuB,EAAE,wBAAwB,CACrD,uBAAuB,EACvB,4BAA4B,CAmkC7B,CAAC;AAkBF,eAAe,uBAAuB,CAAC;AAEvC,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
\ No newline at end of file
+{"version":3,"file":"ReactNativeZoomableView.d.ts","sourceRoot":"","sources":["../../src/ReactNativeZoomableView.tsx"],"names":[],"mappings":"AACA,OAAc,EACZ,wBAAwB,EAMzB,MAAM,OAAO,CAAC;AA0Bf,OAAO,EACL,4BAA4B,EAE5B,KAAK,EAEN,MAAM,WAAW,CAAC;AAEnB,KAAK,uBAAuB,GAAG;IAC7B,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACrD,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3D,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;IAC1D,MAAM,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC;IACzC,eAAe,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9D,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF,QAAA,MAAM,uBAAuB,EAAE,wBAAwB,CACrD,uBAAuB,EACvB,4BAA4B,CAu+B7B,CAAC;AAkBF,eAAe,uBAAuB,CAAC;AAEvC,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/lib/typescript/components/AnimatedTouchFeedback.d.ts.map b/lib/typescript/components/AnimatedTouchFeedback.d.ts.map
index 47da034..521a5d6 100644
--- a/lib/typescript/components/AnimatedTouchFeedback.d.ts.map
+++ b/lib/typescript/components/AnimatedTouchFeedback.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"AnimatedTouchFeedback.d.ts","sourceRoot":"","sources":["../../../src/components/AnimatedTouchFeedback.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAGjD,eAAO,MAAM,qBAAqB;OAO7B,MAAM;OACN,MAAM;uBACU,MAAM;;6BAED,IAAI;uBAmD7B,CAAC"}
\ No newline at end of file
+{"version":3,"file":"AnimatedTouchFeedback.d.ts","sourceRoot":"","sources":["../../../src/components/AnimatedTouchFeedback.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAGjD,eAAO,MAAM,qBAAqB;OAO7B,MAAM;OACN,MAAM;uBACU,MAAM;;6BAED,IAAI;uBAoD7B,CAAC"}
\ No newline at end of file
diff --git a/lib/typescript/components/StaticPin.d.ts.map b/lib/typescript/components/StaticPin.d.ts.map
index b968077..2adcbc3 100644
--- a/lib/typescript/components/StaticPin.d.ts.map
+++ b/lib/typescript/components/StaticPin.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"StaticPin.d.ts","sourceRoot":"","sources":["../../../src/components/StaticPin.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAEL,qBAAqB,EAGrB,wBAAwB,EAGxB,SAAS,EACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,eAAO,MAAM,SAAS;uBAUD;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;mBAC5B,MAAM,SAAS;aACrB,MAAM;IACf,wDAAwD;wBAEjD,qBAAqB,gBACZ,wBAAwB,KACnC,OAAO,GAAG,SAAS;qBACR,qBAAqB,KAAK,IAAI;yBAC1B,qBAAqB,KAAK,IAAI;uBAC/B,MAAM,KAAK,IAAI;;uBAiEnC,CAAC"}
\ No newline at end of file
+{"version":3,"file":"StaticPin.d.ts","sourceRoot":"","sources":["../../../src/components/StaticPin.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAEL,qBAAqB,EAGrB,wBAAwB,EAGxB,SAAS,EACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,eAAO,MAAM,SAAS;uBAUD;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;mBAC5B,MAAM,SAAS;aACrB,MAAM;IACf,wDAAwD;wBAEjD,qBAAqB,gBACZ,wBAAwB,KACnC,OAAO,GAAG,SAAS;qBACR,qBAAqB,KAAK,IAAI;yBAC1B,qBAAqB,KAAK,IAAI;uBAC/B,MAAM,KAAK,IAAI;;uBAkEnC,CAAC"}
\ No newline at end of file
diff --git a/lib/typescript/debugHelper/index.d.ts.map b/lib/typescript/debugHelper/index.d.ts.map
index 86a4d35..6b7a9e4 100644
--- a/lib/typescript/debugHelper/index.d.ts.map
+++ b/lib/typescript/debugHelper/index.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/debugHelper/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,eAAO,MAAM,eAAe;;;;;uBAuB3B,CAAC;AACF,eAAO,MAAM,SAAS;YAMZ,MAAM;OACX,MAAM;OACN,MAAM;WACF,MAAM;uBAkBd,CAAC"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/debugHelper/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,eAAO,MAAM,eAAe;;;;;uBAwB3B,CAAC;AACF,eAAO,MAAM,SAAS;YAMZ,MAAM;OACX,MAAM;OACN,MAAM;WACF,MAAM;uBAmBd,CAAC"}
\ No newline at end of file
diff --git a/lib/typescript/helper/getNextZoomStep.d.ts b/lib/typescript/helper/getNextZoomStep.d.ts
new file mode 100644
index 0000000..bad2645
--- /dev/null
+++ b/lib/typescript/helper/getNextZoomStep.d.ts
@@ -0,0 +1,13 @@
+/**
+ * Returns the next zoom step based on current step and zoomStep property.
+ * If we are zoomed all the way in -> return to initialzoom
+ *
+ * @returns {*}
+ */
+export declare const getNextZoomStep: ({ zoomStep, maxZoom, initialZoom, zoomLevel, }: {
+ zoomStep: number | undefined;
+ maxZoom: number | undefined;
+ initialZoom: number | undefined;
+ zoomLevel: number;
+}) => number | undefined;
+//# sourceMappingURL=getNextZoomStep.d.ts.map
\ No newline at end of file
diff --git a/lib/typescript/helper/getNextZoomStep.d.ts.map b/lib/typescript/helper/getNextZoomStep.d.ts.map
new file mode 100644
index 0000000..cd741fe
--- /dev/null
+++ b/lib/typescript/helper/getNextZoomStep.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"getNextZoomStep.d.ts","sourceRoot":"","sources":["../../../src/helper/getNextZoomStep.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,eAAe;cAMhB,MAAM,GAAG,SAAS;aACnB,MAAM,GAAG,SAAS;iBACd,MAAM,GAAG,SAAS;eACpB,MAAM;wBAgBlB,CAAC"}
\ No newline at end of file
diff --git a/lib/typescript/hooks/useDebugPoints.d.ts b/lib/typescript/hooks/useDebugPoints.d.ts
new file mode 100644
index 0000000..91de831
--- /dev/null
+++ b/lib/typescript/hooks/useDebugPoints.d.ts
@@ -0,0 +1,12 @@
+///
+import { GestureResponderEvent } from 'react-native';
+import { Vec2D } from '../typings';
+export declare const useDebugPoints: ({ originalPageX, originalPageY, }: {
+ originalPageX: number;
+ originalPageY: number;
+}) => {
+ debugPoints: Vec2D[];
+ setDebugPoints: import("react").Dispatch>;
+ setPinchDebugPoints: (gestureResponderEvent: GestureResponderEvent, zoomCenter: Vec2D, ...points: Vec2D[]) => void;
+};
+//# sourceMappingURL=useDebugPoints.d.ts.map
\ No newline at end of file
diff --git a/lib/typescript/hooks/useDebugPoints.d.ts.map b/lib/typescript/hooks/useDebugPoints.d.ts.map
new file mode 100644
index 0000000..7230df2
--- /dev/null
+++ b/lib/typescript/hooks/useDebugPoints.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"useDebugPoints.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDebugPoints.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,eAAO,MAAM,cAAc;mBAIV,MAAM;mBACN,MAAM;;;;;CAkCtB,CAAC"}
\ No newline at end of file
diff --git a/lib/typescript/hooks/useZoomSubject.d.ts b/lib/typescript/hooks/useZoomSubject.d.ts
new file mode 100644
index 0000000..9a6c972
--- /dev/null
+++ b/lib/typescript/hooks/useZoomSubject.d.ts
@@ -0,0 +1,13 @@
+///
+import { View } from 'react-native';
+export declare const useZoomSubject: () => {
+ wrapperRef: import("react").RefObject;
+ measure: () => void;
+ originalWidth: number;
+ originalHeight: number;
+ originalPageX: number;
+ originalPageY: number;
+ originalX: number;
+ originalY: number;
+};
+//# sourceMappingURL=useZoomSubject.d.ts.map
\ No newline at end of file
diff --git a/lib/typescript/hooks/useZoomSubject.d.ts.map b/lib/typescript/hooks/useZoomSubject.d.ts.map
new file mode 100644
index 0000000..ac0b8ce
--- /dev/null
+++ b/lib/typescript/hooks/useZoomSubject.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"useZoomSubject.d.ts","sourceRoot":"","sources":["../../../src/hooks/useZoomSubject.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAIpC,eAAO,MAAM,cAAc;;;;;;;;;CAwE1B,CAAC"}
\ No newline at end of file
diff --git a/package.json b/package.json
index 7b027da..cd6b9df 100644
--- a/package.json
+++ b/package.json
@@ -155,6 +155,7 @@
}
],
"react-native/no-color-literals": "off",
+ "react-native/no-inline-styles": "off",
"simple-import-sort/imports": "error",
"simple-import-sort/exports": "error"
},
@@ -182,6 +183,16 @@
{
"allowNumber": true
}
+ ],
+ "@typescript-eslint/no-use-before-define": [
+ "error",
+ {
+ "functions": true,
+ "variables": true,
+ "enums": false,
+ "classes": false,
+ "typedefs": false
+ }
]
}
}
diff --git a/src/ReactNativeZoomableView.tsx b/src/ReactNativeZoomableView.tsx
index b517c88..25f13a9 100644
--- a/src/ReactNativeZoomableView.tsx
+++ b/src/ReactNativeZoomableView.tsx
@@ -1,7 +1,6 @@
import { debounce, defaults } from 'lodash';
import React, {
ForwardRefRenderFunction,
- useEffect,
useImperativeHandle,
useLayoutEffect,
useMemo,
@@ -29,7 +28,10 @@ import {
calcNewScaledOffsetForZoomCentering,
} from './helper';
import { viewportPositionToImagePosition } from './helper/coordinateConversion';
+import { getNextZoomStep } from './helper/getNextZoomStep';
+import { useDebugPoints } from './hooks/useDebugPoints';
import { useLatestCallback } from './hooks/useLatestCallback';
+import { useZoomSubject } from './hooks/useZoomSubject';
import {
ReactNativeZoomableViewProps,
TouchPoint,
@@ -50,17 +52,25 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
ReactNativeZoomableView,
ReactNativeZoomableViewProps
> = (props, ref) => {
- const [originalWidth, setOriginalWidth] = useState(0);
- const [originalHeight, setOriginalHeight] = useState(0);
- const [originalPageX, setOriginalPageX] = useState(0);
- const [originalPageY, setOriginalPageY] = useState(0);
- const [originalX, setOriginalX] = useState(0);
- const [originalY, setOriginalY] = useState(0);
+ const {
+ wrapperRef: zoomSubjectWrapperRef,
+ measure: measureZoomSubject,
+ originalWidth,
+ originalHeight,
+ originalPageX,
+ originalPageY,
+ originalX,
+ originalY,
+ } = useZoomSubject();
+
const [pinSize, setPinSize] = useState({ width: 0, height: 0 });
- const [debugPoints, setDebugPoints] = useState([]);
const [stateTouches, setStateTouches] = useState([]);
- const zoomSubjectWrapperRef = useRef(null);
+ const { debugPoints, setDebugPoints, setPinchDebugPoints } = useDebugPoints({
+ originalPageX,
+ originalPageY,
+ });
+
const gestureHandlers = useRef();
const doubleTapFirstTapReleaseTimestamp = useRef();
@@ -89,6 +99,17 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
disablePanOnInitialZoom: false,
});
+ const {
+ staticPinIcon,
+ children,
+ visualTouchFeedbackEnabled,
+ doubleTapDelay,
+ staticPinPosition,
+ onStaticPinLongPress,
+ onStaticPinPress,
+ pinProps,
+ } = props;
+
const panAnim = useRef(new Animated.ValueXY({ x: 0, y: 0 }));
const zoomAnim = useRef(new Animated.Value(1));
@@ -112,47 +133,97 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
const singleTapTimeoutId = useRef();
const touches = useRef([]);
const doubleTapFirstTap = useRef();
- const measureZoomSubjectInterval = useRef();
- useLayoutEffect(() => {
- gestureHandlers.current = PanResponder.create({
- onStartShouldSetPanResponder: _handleStartShouldSetPanResponder,
- onPanResponderGrant: _handlePanResponderGrant,
- onPanResponderMove: _handlePanResponderMove,
- onPanResponderRelease: _handlePanResponderEnd,
- onPanResponderTerminate: (evt, gestureState) => {
- // We should also call _handlePanResponderEnd
- // to properly perform cleanups when the gesture is terminated
- // (aka gesture handling responsibility is taken over by another component).
- // This also fixes a weird issue where
- // on real device, sometimes onPanResponderRelease is not called when you lift 2 fingers up,
- // but onPanResponderTerminate is called instead for no apparent reason.
- _handlePanResponderEnd(evt, gestureState);
- props.onPanResponderTerminate?.(
- evt,
- gestureState,
- _getZoomableViewEventObject()
- );
+ /**
+ * Returns additional information about components current state for external event hooks
+ *
+ * @returns {{}}
+ * @private
+ */
+ const _getZoomableViewEventObject = useLatestCallback(
+ (overwriteObj: Partial = {}): ZoomableViewEvent => {
+ return {
+ zoomLevel: zoomLevel.current,
+ offsetX: offsetX.current,
+ offsetY: offsetY.current,
+ originalHeight,
+ originalWidth,
+ originalPageX,
+ originalPageY,
+ ...overwriteObj,
+ };
+ }
+ );
+
+ const _staticPinPosition = useLatestCallback(() => {
+ if (!props.staticPinPosition) return;
+ if (!props.contentWidth || !props.contentHeight) return;
+
+ return viewportPositionToImagePosition({
+ viewportPosition: {
+ x: props.staticPinPosition.x,
+ y: props.staticPinPosition.y,
+ },
+ imageSize: {
+ height: props.contentHeight,
+ width: props.contentWidth,
+ },
+ zoomableEvent: {
+ ..._getZoomableViewEventObject(),
+ offsetX: offsetX.current,
+ offsetY: offsetY.current,
+ zoomLevel: zoomLevel.current,
},
- onPanResponderTerminationRequest: (evt, gestureState) =>
- !!props.onPanResponderTerminationRequest?.(
- evt,
- gestureState,
- _getZoomableViewEventObject()
- ),
- // Defaults to true to prevent parent components, such as React Navigation's tab view, from taking over as responder.
- onShouldBlockNativeResponder: (evt, gestureState) =>
- props.onShouldBlockNativeResponder?.(
- evt,
- gestureState,
- _getZoomableViewEventObject()
- ) ?? true,
- onStartShouldSetPanResponderCapture: (evt, gestureState) =>
- !!props.onStartShouldSetPanResponderCapture?.(evt, gestureState),
- onMoveShouldSetPanResponderCapture: (evt, gestureState) =>
- !!props.onMoveShouldSetPanResponderCapture?.(evt, gestureState),
});
+ });
+
+ const _updateStaticPin = useLatestCallback(() => {
+ const position = _staticPinPosition();
+ if (!position) return;
+ props.onStaticPinPositionChange?.(position);
+ });
+
+ const _addTouch = useLatestCallback((touch: TouchPoint) => {
+ touches.current.push(touch);
+ setStateTouches([...touches.current]);
+ });
+
+ const _removeTouch = useLatestCallback((touch: TouchPoint) => {
+ touches.current.splice(touches.current.indexOf(touch), 1);
+ setStateTouches([...touches.current]);
+ });
+
+ const onStaticPinPositionChange = useLatestCallback(
+ props.onStaticPinPositionChange || (() => undefined)
+ );
+
+ const debouncedOnStaticPinPositionChange = useMemo(
+ () => debounce(onStaticPinPositionChange, 100),
+ []
+ );
+
+ /**
+ * try to invoke onTransform
+ * @private
+ */
+ const _invokeOnTransform = useLatestCallback(() => {
+ const zoomableViewEvent = _getZoomableViewEventObject();
+ const position = _staticPinPosition();
+
+ if (!zoomableViewEvent.originalWidth || !zoomableViewEvent.originalHeight)
+ return { successful: false };
+
+ props.onTransform?.(zoomableViewEvent);
+
+ if (position) {
+ props.onStaticPinPositionMove?.(position);
+ debouncedOnStaticPinPositionChange(position);
+ }
+
+ return { successful: true };
+ });
+ useLayoutEffect(() => {
if (props.zoomAnimatedValue) zoomAnim.current = props.zoomAnimatedValue;
if (props.panAnimatedValueXY) panAnim.current = props.panAnimatedValueXY;
@@ -227,111 +298,6 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
if (onTransformInvocationInitialized.current) _invokeOnTransform();
}, [props.staticPinPosition?.x, props.staticPinPosition?.y]);
- useEffect(() => {
- measureZoomSubject();
- // We've already run `grabZoomSubjectOriginalMeasurements` at various events
- // to make sure the measurements are promptly updated.
- // However, there might be cases we haven't accounted for, especially when
- // native processes are involved. To account for those cases,
- // we'll use an interval here to ensure we're always up-to-date.
- // The `setState` in `grabZoomSubjectOriginalMeasurements` won't trigger a rerender
- // if the values given haven't changed, so we're not running performance risk here.
- measureZoomSubjectInterval.current = setInterval(measureZoomSubject, 1e3);
-
- return () => {
- measureZoomSubjectInterval.current &&
- clearInterval(measureZoomSubjectInterval.current);
- };
- }, []);
-
- const onStaticPinPositionChange = useLatestCallback(
- props.onStaticPinPositionChange || (() => undefined)
- );
-
- const debouncedOnStaticPinPositionChange = useMemo(
- () => debounce(onStaticPinPositionChange, 100),
- []
- );
-
- /**
- * try to invoke onTransform
- * @private
- */
- const _invokeOnTransform = useLatestCallback(() => {
- const zoomableViewEvent = _getZoomableViewEventObject();
- const position = _staticPinPosition();
-
- if (!zoomableViewEvent.originalWidth || !zoomableViewEvent.originalHeight)
- return { successful: false };
-
- props.onTransform?.(zoomableViewEvent);
-
- if (position) {
- props.onStaticPinPositionMove?.(position);
- debouncedOnStaticPinPositionChange(position);
- }
-
- return { successful: true };
- });
-
- /**
- * Returns additional information about components current state for external event hooks
- *
- * @returns {{}}
- * @private
- */
- const _getZoomableViewEventObject = useLatestCallback(
- (overwriteObj: Partial = {}): ZoomableViewEvent => {
- return {
- zoomLevel: zoomLevel.current,
- offsetX: offsetX.current,
- offsetY: offsetY.current,
- originalHeight,
- originalWidth,
- originalPageX,
- originalPageY,
- ...overwriteObj,
- };
- }
- );
-
- /**
- * Get the original box dimensions and save them for later use.
- * (They will be used to calculate boxBorders)
- *
- * @private
- */
- const measureZoomSubject = useLatestCallback(() => {
- // make sure we measure after animations are complete
- requestAnimationFrame(() => {
- // this setTimeout is here to fix a weird issue on iOS where the measurements are all `0`
- // when navigating back (react-navigation stack) from another view
- // while closing the keyboard at the same time
- setTimeout(() => {
- // In normal conditions, we're supposed to measure zoomSubject instead of its wrapper.
- // However, our zoomSubject may have been transformed by an initial zoomLevel or offset,
- // in which case these measurements will not represent the true "original" measurements.
- // We just need to make sure the zoomSubjectWrapper perfectly aligns with the zoomSubject
- // (no border, space, or anything between them)
- zoomSubjectWrapperRef.current?.measure(
- (x, y, width, height, pageX, pageY) => {
- // When the component is off-screen, these become all 0s, so we don't set them
- // to avoid messing up calculations, especially ones that are done right after
- // the component transitions from hidden to visible.
- if (!pageX && !pageY && !width && !height) return;
-
- setOriginalX(x);
- setOriginalY(y);
- setOriginalWidth(width);
- setOriginalHeight(height);
- setOriginalPageX(pageX);
- setOriginalPageY(pageY);
- }
- );
- });
- });
- });
-
/**
* Handles the start of touch events and checks for taps
*
@@ -386,124 +352,36 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
});
/**
- * Handles the end of touch events
+ * Calculates the amount the offset should shift since the last position during panning
*
- * @param e
- * @param gestureState
+ * @param {Vec2D} gestureCenterPoint
*
* @private
*/
- const _handlePanResponderEnd: NonNullable<
- PanResponderCallbacks['onPanResponderEnd']
- > = useLatestCallback((e, gestureState) => {
- if (!gestureType.current) {
- _resolveAndHandleTap(e);
- }
+ const _calcOffsetShiftSinceLastGestureState = useLatestCallback(
+ (gestureCenterPoint: Vec2D) => {
+ const { movementSensibility } = props;
- setDebugPoints([]);
+ let shift = null;
- lastGestureCenterPosition.current = null;
+ if (lastGestureCenterPosition.current && movementSensibility) {
+ const dx = gestureCenterPoint.x - lastGestureCenterPosition.current.x;
+ const dy = gestureCenterPoint.y - lastGestureCenterPosition.current.y;
- if (longPressTimeout.current) {
- clearTimeout(longPressTimeout.current);
- longPressTimeout.current = undefined;
- }
+ const shiftX = dx / zoomLevel.current / movementSensibility;
+ const shiftY = dy / zoomLevel.current / movementSensibility;
- props.onPanResponderEnd?.(e, gestureState, _getZoomableViewEventObject());
+ shift = {
+ x: shiftX,
+ y: shiftY,
+ };
+ }
- if (gestureType.current === 'pinch') {
- props.onZoomEnd?.(e, gestureState, _getZoomableViewEventObject());
- } else if (gestureType.current === 'shift') {
- props.onShiftingEnd?.(e, gestureState, _getZoomableViewEventObject());
- }
+ lastGestureCenterPosition.current = gestureCenterPoint;
- if (props.staticPinPosition) {
- _updateStaticPin();
+ return shift;
}
-
- gestureType.current = undefined;
- gestureStarted.current = false;
- });
-
- /**
- * Handles the actual movement of our pan responder
- *
- * @param e
- * @param gestureState
- *
- * @private
- */
- const _handlePanResponderMove = useLatestCallback(
- (e: GestureResponderEvent, gestureState: PanResponderGestureState) => {
- if (props.onPanResponderMove) {
- if (
- props.onPanResponderMove(
- e,
- gestureState,
- _getZoomableViewEventObject()
- )
- ) {
- return false;
- }
- }
-
- // Only supports 2 touches and below,
- // any invalid number will cause the gesture to end.
- if (gestureState.numberActiveTouches <= 2) {
- if (!gestureStarted.current) {
- _handlePanResponderGrant(e, gestureState);
- }
- } else {
- if (gestureStarted.current) {
- _handlePanResponderEnd(e, gestureState);
- }
- return true;
- }
-
- if (gestureState.numberActiveTouches === 2) {
- if (longPressTimeout.current) {
- clearTimeout(longPressTimeout.current);
- longPressTimeout.current = undefined;
- }
-
- // change some measurement states when switching gesture to ensure a smooth transition
- if (gestureType.current !== 'pinch') {
- lastGestureCenterPosition.current = calcGestureCenterPoint(
- e,
- gestureState
- );
- lastGestureTouchDistance.current = calcGestureTouchDistance(
- e,
- gestureState
- );
- }
- gestureType.current = 'pinch';
- _handlePinching(e, gestureState);
- } else if (gestureState.numberActiveTouches === 1) {
- if (
- longPressTimeout.current &&
- (Math.abs(gestureState.dx) > 5 || Math.abs(gestureState.dy) > 5)
- ) {
- clearTimeout(longPressTimeout.current);
- longPressTimeout.current = undefined;
- }
- // change some measurement states when switching gesture to ensure a smooth transition
- if (gestureType.current !== 'shift') {
- lastGestureCenterPosition.current = calcGestureCenterPoint(
- e,
- gestureState
- );
- }
-
- const { dx, dy } = gestureState;
- const isShiftGesture = Math.abs(dx) > 2 || Math.abs(dy) > 2;
- if (isShiftGesture) {
- gestureType.current = 'shift';
- _handleShifting(gestureState);
- }
- }
- }
- );
+ );
/**
* Handles the pinch movement and zooming
@@ -584,7 +462,7 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
}
// Uncomment to debug
- props.debug && _setPinchDebugPoints(e, zoomCenter);
+ props.debug && setPinchDebugPoints(e, zoomCenter);
const oldOffsetX = offsetX.current;
const oldOffsetY = offsetY.current;
@@ -627,63 +505,27 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
);
/**
- * Used to debug pinch events
- * @param gestureResponderEvent
- * @param zoomCenter
- * @param points
- */
- const _setPinchDebugPoints = useLatestCallback(
- (
- gestureResponderEvent: GestureResponderEvent,
- zoomCenter: Vec2D,
- ...points: Vec2D[]
- ) => {
- const { touches } = gestureResponderEvent.nativeEvent;
-
- setDebugPoints([
- {
- x: touches[0].pageX - originalPageX,
- y: touches[0].pageY - originalPageY,
- },
- {
- x: touches[1].pageX - originalPageX,
- y: touches[1].pageY - originalPageY,
- },
- zoomCenter,
- ...points,
- ]);
- }
- );
-
- /**
- * Calculates the amount the offset should shift since the last position during panning
- *
- * @param {Vec2D} gestureCenterPoint
+ * Set the state to offset moved
*
- * @private
+ * @param {number} newOffsetX
+ * @param {number} newOffsetY
+ * @returns
*/
- const _calcOffsetShiftSinceLastGestureState = useLatestCallback(
- (gestureCenterPoint: Vec2D) => {
- const { movementSensibility } = props;
-
- let shift = null;
-
- if (lastGestureCenterPosition.current && movementSensibility) {
- const dx = gestureCenterPoint.x - lastGestureCenterPosition.current.x;
- const dy = gestureCenterPoint.y - lastGestureCenterPosition.current.y;
-
- const shiftX = dx / zoomLevel.current / movementSensibility;
- const shiftY = dy / zoomLevel.current / movementSensibility;
+ const _setNewOffsetPosition = useLatestCallback(
+ (newOffsetX: number, newOffsetY: number) => {
+ const { onShiftingBefore, onShiftingAfter } = props;
- shift = {
- x: shiftX,
- y: shiftY,
- };
+ if (onShiftingBefore?.(null, null, _getZoomableViewEventObject())) {
+ return;
}
- lastGestureCenterPosition.current = gestureCenterPoint;
+ offsetX.current = newOffsetX;
+ offsetY.current = newOffsetY;
- return shift;
+ panAnim.current.setValue({ x: offsetX.current, y: offsetY.current });
+ zoomAnim.current.setValue(zoomLevel.current);
+
+ onShiftingAfter?.(null, null, _getZoomableViewEventObject());
}
);
@@ -724,30 +566,104 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
);
/**
- * Set the state to offset moved
+ * Zooms to a specific level. A "zoom center" can be provided, which specifies
+ * the point that will remain in the same position on the screen after the zoom.
+ * The coordinates of the zoom center is relative to the zoom subject.
+ * { x: 0, y: 0 } is the very center of the zoom subject.
*
- * @param {number} newOffsetX
- * @param {number} newOffsetY
- * @returns
+ * @param newZoomLevel
+ * @param zoomCenter - If not supplied, the container's center is the zoom center
*/
- const _setNewOffsetPosition = useLatestCallback(
- (newOffsetX: number, newOffsetY: number) => {
- const { onShiftingBefore, onShiftingAfter } = props;
+ const publicZoomTo = useLatestCallback(
+ (newZoomLevel: number, zoomCenter?: Vec2D) => {
+ if (!props.zoomEnabled) return false;
+ if (props.maxZoom && newZoomLevel > props.maxZoom) return false;
+ if (props.minZoom && newZoomLevel < props.minZoom) return false;
- if (onShiftingBefore?.(null, null, _getZoomableViewEventObject())) {
- return;
- }
+ props.onZoomBefore?.(null, null, _getZoomableViewEventObject());
- offsetX.current = newOffsetX;
- offsetY.current = newOffsetY;
+ // == Perform Pan Animation to preserve the zoom center while zooming ==
+ let listenerId = '';
+ if (zoomCenter) {
+ // Calculates panAnim values based on changes in zoomAnim.
+ let prevScale = zoomLevel.current;
+ // Since zoomAnim is calculated in native driver,
+ // it will jitter panAnim once in a while,
+ // because here panAnim is being calculated in js.
+ // However the jittering should mostly occur in simulator.
+ listenerId = zoomAnim.current.addListener(({ value: newScale }) => {
+ panAnim.current.setValue({
+ x: calcNewScaledOffsetForZoomCentering(
+ offsetX.current,
+ originalWidth,
+ prevScale,
+ newScale,
+ zoomCenter.x
+ ),
+ y: calcNewScaledOffsetForZoomCentering(
+ offsetY.current,
+ originalHeight,
+ prevScale,
+ newScale,
+ zoomCenter.y
+ ),
+ });
+ prevScale = newScale;
+ });
+ }
- panAnim.current.setValue({ x: offsetX.current, y: offsetY.current });
- zoomAnim.current.setValue(zoomLevel.current);
+ // == Perform Zoom Animation ==
+ getZoomToAnimation(zoomAnim.current, newZoomLevel).start(() => {
+ zoomAnim.current.removeListener(listenerId);
+ });
+ // == Zoom Animation Ends ==
- onShiftingAfter?.(null, null, _getZoomableViewEventObject());
+ props.onZoomAfter?.(null, null, _getZoomableViewEventObject());
+ return true;
}
);
+ /**
+ * Handles the double tap event
+ *
+ * @param e
+ *
+ * @private
+ */
+ const _handleDoubleTap = useLatestCallback((e: GestureResponderEvent) => {
+ const { onDoubleTapBefore, onDoubleTapAfter, doubleTapZoomToCenter } =
+ props;
+
+ onDoubleTapBefore?.(e, _getZoomableViewEventObject());
+
+ const nextZoomStep = getNextZoomStep({
+ zoomLevel: zoomLevel.current,
+ zoomStep: props.zoomStep,
+ maxZoom: props.maxZoom,
+ initialZoom: props.initialZoom,
+ });
+ if (nextZoomStep == null) return;
+
+ // define new zoom position coordinates
+ const zoomPositionCoordinates = {
+ x: e.nativeEvent.pageX - originalPageX,
+ y: e.nativeEvent.pageY - originalPageY,
+ };
+
+ // if doubleTapZoomToCenter enabled -> always zoom to center instead
+ if (doubleTapZoomToCenter) {
+ zoomPositionCoordinates.x = 0;
+ zoomPositionCoordinates.y = 0;
+ }
+
+ publicZoomTo(nextZoomStep, zoomPositionCoordinates);
+
+ onDoubleTapAfter?.(
+ e,
+ _getZoomableViewEventObject({ zoomLevel: nextZoomStep })
+ );
+ });
+
/**
* Check whether the press event is double tap
* or single tap and handle the event accordingly
@@ -840,178 +756,21 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
}
);
- const _staticPinPosition = useLatestCallback(() => {
- if (!props.staticPinPosition) return;
- if (!props.contentWidth || !props.contentHeight) return;
-
- return viewportPositionToImagePosition({
- viewportPosition: {
- x: props.staticPinPosition.x,
- y: props.staticPinPosition.y,
- },
- imageSize: {
- height: props.contentHeight,
- width: props.contentWidth,
- },
- zoomableEvent: {
- ..._getZoomableViewEventObject(),
- offsetX: offsetX.current,
- offsetY: offsetY.current,
- zoomLevel: zoomLevel.current,
- },
- });
- });
-
- const _updateStaticPin = useLatestCallback(() => {
- const position = _staticPinPosition();
- if (!position) return;
- props.onStaticPinPositionChange?.(position);
- });
-
- const _addTouch = useLatestCallback((touch: TouchPoint) => {
- touches.current.push(touch);
- setStateTouches([...touches.current]);
- });
-
- const _removeTouch = useLatestCallback((touch: TouchPoint) => {
- touches.current.splice(touches.current.indexOf(touch), 1);
- setStateTouches([...touches.current]);
- });
-
- /**
- * Handles the double tap event
- *
- * @param e
- *
- * @private
- */
- const _handleDoubleTap = useLatestCallback((e: GestureResponderEvent) => {
- const { onDoubleTapBefore, onDoubleTapAfter, doubleTapZoomToCenter } =
- props;
-
- onDoubleTapBefore?.(e, _getZoomableViewEventObject());
-
- const nextZoomStep = _getNextZoomStep();
- if (nextZoomStep == null) return;
-
- // define new zoom position coordinates
- const zoomPositionCoordinates = {
- x: e.nativeEvent.pageX - originalPageX,
- y: e.nativeEvent.pageY - originalPageY,
- };
-
- // if doubleTapZoomToCenter enabled -> always zoom to center instead
- if (doubleTapZoomToCenter) {
- zoomPositionCoordinates.x = 0;
- zoomPositionCoordinates.y = 0;
- }
-
- publicZoomTo(nextZoomStep, zoomPositionCoordinates);
-
- onDoubleTapAfter?.(
- e,
- _getZoomableViewEventObject({ zoomLevel: nextZoomStep })
- );
- });
-
- /**
- * Returns the next zoom step based on current step and zoomStep property.
- * If we are zoomed all the way in -> return to initialzoom
- *
- * @returns {*}
- */
- const _getNextZoomStep = useLatestCallback(() => {
- const { zoomStep, maxZoom, initialZoom } = props;
-
- if (maxZoom == null) return;
-
- if (zoomLevel.current.toFixed(2) === maxZoom.toFixed(2)) {
- return initialZoom;
- }
-
- if (zoomStep == null) return;
-
- const nextZoomStep = zoomLevel.current * (1 + zoomStep);
- if (nextZoomStep > maxZoom) {
- return maxZoom;
- }
-
- return nextZoomStep;
- });
-
- /**
- * Zooms to a specific level. A "zoom center" can be provided, which specifies
- * the point that will remain in the same position on the screen after the zoom.
- * The coordinates of the zoom center is relative to the zoom subject.
- * { x: 0, y: 0 } is the very center of the zoom subject.
- *
- * @param newZoomLevel
- * @param zoomCenter - If not supplied, the container's center is the zoom center
- */
- const publicZoomTo = useLatestCallback(
- (newZoomLevel: number, zoomCenter?: Vec2D) => {
- if (!props.zoomEnabled) return false;
- if (props.maxZoom && newZoomLevel > props.maxZoom) return false;
- if (props.minZoom && newZoomLevel < props.minZoom) return false;
-
- props.onZoomBefore?.(null, null, _getZoomableViewEventObject());
-
- // == Perform Pan Animation to preserve the zoom center while zooming ==
- let listenerId = '';
- if (zoomCenter) {
- // Calculates panAnim values based on changes in zoomAnim.
- let prevScale = zoomLevel.current;
- // Since zoomAnim is calculated in native driver,
- // it will jitter panAnim once in a while,
- // because here panAnim is being calculated in js.
- // However the jittering should mostly occur in simulator.
- listenerId = zoomAnim.current.addListener(({ value: newScale }) => {
- panAnim.current.setValue({
- x: calcNewScaledOffsetForZoomCentering(
- offsetX.current,
- originalWidth,
- prevScale,
- newScale,
- zoomCenter.x
- ),
- y: calcNewScaledOffsetForZoomCentering(
- offsetY.current,
- originalHeight,
- prevScale,
- newScale,
- zoomCenter.y
- ),
- });
- prevScale = newScale;
- });
- }
-
- // == Perform Zoom Animation ==
- getZoomToAnimation(zoomAnim.current, newZoomLevel).start(() => {
- zoomAnim.current.removeListener(listenerId);
- });
- // == Zoom Animation Ends ==
-
- props.onZoomAfter?.(null, null, _getZoomableViewEventObject());
- return true;
- }
- );
-
- /**
- * Zooms in or out by a specified change level
- * Use a positive number for `zoomLevelChange` to zoom in
- * Use a negative number for `zoomLevelChange` to zoom out
- *
- * Returns a promise if everything was updated and a boolean, whether it could be updated or if it exceeded the min/max zoom limits.
- *
- * @param {number | null} zoomLevelChange
- *
- * @return {bool}
- */
- const publicZoomBy = useLatestCallback((zoomLevelChange: number) => {
- // if no zoom level Change given -> just use zoom step
- zoomLevelChange ||= props.zoomStep || 0;
- return publicZoomTo(zoomLevel.current + zoomLevelChange);
+ /**
+ * Zooms in or out by a specified change level
+ * Use a positive number for `zoomLevelChange` to zoom in
+ * Use a negative number for `zoomLevelChange` to zoom out
+ *
+ * Returns a promise if everything was updated and a boolean, whether it could be updated or if it exceeded the min/max zoom limits.
+ *
+ * @param {number | null} zoomLevelChange
+ *
+ * @return {bool}
+ */
+ const publicZoomBy = useLatestCallback((zoomLevelChange: number) => {
+ // if no zoom level Change given -> just use zoom step
+ zoomLevelChange ||= props.zoomStep || 0;
+ return publicZoomTo(zoomLevel.current + zoomLevelChange);
});
/**
@@ -1068,19 +827,169 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
},
}));
- const {
- staticPinIcon,
- children,
- visualTouchFeedbackEnabled,
- doubleTapDelay,
- staticPinPosition,
- onStaticPinLongPress,
- onStaticPinPress,
- pinProps,
- } = props;
+ /**
+ * Handles the end of touch events
+ *
+ * @param e
+ * @param gestureState
+ *
+ * @private
+ */
+ const _handlePanResponderEnd: NonNullable<
+ PanResponderCallbacks['onPanResponderEnd']
+ > = useLatestCallback((e, gestureState) => {
+ if (!gestureType.current) {
+ _resolveAndHandleTap(e);
+ }
+
+ setDebugPoints([]);
+
+ lastGestureCenterPosition.current = null;
+
+ if (longPressTimeout.current) {
+ clearTimeout(longPressTimeout.current);
+ longPressTimeout.current = undefined;
+ }
+
+ props.onPanResponderEnd?.(e, gestureState, _getZoomableViewEventObject());
+
+ if (gestureType.current === 'pinch') {
+ props.onZoomEnd?.(e, gestureState, _getZoomableViewEventObject());
+ } else if (gestureType.current === 'shift') {
+ props.onShiftingEnd?.(e, gestureState, _getZoomableViewEventObject());
+ }
+
+ if (props.staticPinPosition) {
+ _updateStaticPin();
+ }
+
+ gestureType.current = undefined;
+ gestureStarted.current = false;
+ });
+
+ /**
+ * Handles the actual movement of our pan responder
+ *
+ * @param e
+ * @param gestureState
+ *
+ * @private
+ */
+ const _handlePanResponderMove = useLatestCallback(
+ (e: GestureResponderEvent, gestureState: PanResponderGestureState) => {
+ if (props.onPanResponderMove) {
+ if (
+ props.onPanResponderMove(
+ e,
+ gestureState,
+ _getZoomableViewEventObject()
+ )
+ ) {
+ return false;
+ }
+ }
+
+ // Only supports 2 touches and below,
+ // any invalid number will cause the gesture to end.
+ if (gestureState.numberActiveTouches <= 2) {
+ if (!gestureStarted.current) {
+ _handlePanResponderGrant(e, gestureState);
+ }
+ } else {
+ if (gestureStarted.current) {
+ _handlePanResponderEnd(e, gestureState);
+ }
+ return true;
+ }
+
+ if (gestureState.numberActiveTouches === 2) {
+ if (longPressTimeout.current) {
+ clearTimeout(longPressTimeout.current);
+ longPressTimeout.current = undefined;
+ }
+
+ // change some measurement states when switching gesture to ensure a smooth transition
+ if (gestureType.current !== 'pinch') {
+ lastGestureCenterPosition.current = calcGestureCenterPoint(
+ e,
+ gestureState
+ );
+ lastGestureTouchDistance.current = calcGestureTouchDistance(
+ e,
+ gestureState
+ );
+ }
+ gestureType.current = 'pinch';
+ _handlePinching(e, gestureState);
+ } else if (gestureState.numberActiveTouches === 1) {
+ if (
+ longPressTimeout.current &&
+ (Math.abs(gestureState.dx) > 5 || Math.abs(gestureState.dy) > 5)
+ ) {
+ clearTimeout(longPressTimeout.current);
+ longPressTimeout.current = undefined;
+ }
+ // change some measurement states when switching gesture to ensure a smooth transition
+ if (gestureType.current !== 'shift') {
+ lastGestureCenterPosition.current = calcGestureCenterPoint(
+ e,
+ gestureState
+ );
+ }
+
+ const { dx, dy } = gestureState;
+ const isShiftGesture = Math.abs(dx) > 2 || Math.abs(dy) > 2;
+ if (isShiftGesture) {
+ gestureType.current = 'shift';
+ _handleShifting(gestureState);
+ }
+ }
+ }
+ );
+
+ useLayoutEffect(() => {
+ gestureHandlers.current = PanResponder.create({
+ onStartShouldSetPanResponder: _handleStartShouldSetPanResponder,
+ onPanResponderGrant: _handlePanResponderGrant,
+ onPanResponderMove: _handlePanResponderMove,
+ onPanResponderRelease: _handlePanResponderEnd,
+ onPanResponderTerminate: (evt, gestureState) => {
+ // We should also call _handlePanResponderEnd
+ // to properly perform cleanups when the gesture is terminated
+ // (aka gesture handling responsibility is taken over by another component).
+ // This also fixes a weird issue where
+ // on real device, sometimes onPanResponderRelease is not called when you lift 2 fingers up,
+ // but onPanResponderTerminate is called instead for no apparent reason.
+ _handlePanResponderEnd(evt, gestureState);
+ props.onPanResponderTerminate?.(
+ evt,
+ gestureState,
+ _getZoomableViewEventObject()
+ );
+ },
+ onPanResponderTerminationRequest: (evt, gestureState) =>
+ !!props.onPanResponderTerminationRequest?.(
+ evt,
+ gestureState,
+ _getZoomableViewEventObject()
+ ),
+ // Defaults to true to prevent parent components, such as React Navigation's tab view, from taking over as responder.
+ onShouldBlockNativeResponder: (evt, gestureState) =>
+ props.onShouldBlockNativeResponder?.(
+ evt,
+ gestureState,
+ _getZoomableViewEventObject()
+ ) ?? true,
+ onStartShouldSetPanResponderCapture: (evt, gestureState) =>
+ !!props.onStartShouldSetPanResponderCapture?.(evt, gestureState),
+ onMoveShouldSetPanResponderCapture: (evt, gestureState) =>
+ !!props.onMoveShouldSetPanResponderCapture?.(evt, gestureState),
+ });
+ }, []);
return (
{staticPinIcon || (
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-use-before-define
)}
diff --git a/src/debugHelper/index.tsx b/src/debugHelper/index.tsx
index d9a3f7d..d088b9b 100644
--- a/src/debugHelper/index.tsx
+++ b/src/debugHelper/index.tsx
@@ -11,6 +11,7 @@ export const DebugTouchPoint = ({
return (
return to initialzoom
+ *
+ * @returns {*}
+ */
+export const getNextZoomStep = ({
+ zoomStep,
+ maxZoom,
+ initialZoom,
+ zoomLevel,
+}: {
+ zoomStep: number | undefined;
+ maxZoom: number | undefined;
+ initialZoom: number | undefined;
+ zoomLevel: number;
+}) => {
+ if (maxZoom == null) return;
+
+ if (zoomLevel.toFixed(2) === maxZoom.toFixed(2)) {
+ return initialZoom;
+ }
+
+ if (zoomStep == null) return;
+
+ const nextZoomStep = zoomLevel * (1 + zoomStep);
+ if (nextZoomStep > maxZoom) {
+ return maxZoom;
+ }
+
+ return nextZoomStep;
+};
diff --git a/src/hooks/useDebugPoints.ts b/src/hooks/useDebugPoints.ts
new file mode 100644
index 0000000..5f6b736
--- /dev/null
+++ b/src/hooks/useDebugPoints.ts
@@ -0,0 +1,46 @@
+import { useState } from 'react';
+import { GestureResponderEvent } from 'react-native';
+
+import { Vec2D } from '../typings';
+import { useLatestCallback } from './useLatestCallback';
+
+export const useDebugPoints = ({
+ originalPageX,
+ originalPageY,
+}: {
+ originalPageX: number;
+ originalPageY: number;
+}) => {
+ const [debugPoints, setDebugPoints] = useState([]);
+
+ /**
+ * Used to debug pinch events
+ * @param gestureResponderEvent
+ * @param zoomCenter
+ * @param points
+ */
+ const setPinchDebugPoints = useLatestCallback(
+ (
+ gestureResponderEvent: GestureResponderEvent,
+ zoomCenter: Vec2D,
+ ...points: Vec2D[]
+ ) => {
+ const { touches } = gestureResponderEvent.nativeEvent;
+
+ setDebugPoints([
+ {
+ x: touches[0].pageX - originalPageX,
+ y: touches[0].pageY - originalPageY,
+ },
+ {
+ x: touches[1].pageX - originalPageX,
+ y: touches[1].pageY - originalPageY,
+ },
+ zoomCenter,
+ ...points,
+ ]);
+ }
+ );
+
+ return { debugPoints, setDebugPoints, setPinchDebugPoints };
+};
diff --git a/src/hooks/useZoomSubject.ts b/src/hooks/useZoomSubject.ts
new file mode 100644
index 0000000..c1f6526
--- /dev/null
+++ b/src/hooks/useZoomSubject.ts
@@ -0,0 +1,78 @@
+import { useEffect, useRef, useState } from 'react';
+import { View } from 'react-native';
+
+import { useLatestCallback } from './useLatestCallback';
+
+export const useZoomSubject = () => {
+ const wrapperRef = useRef(null);
+ const [originalWidth, setOriginalWidth] = useState(0);
+ const [originalHeight, setOriginalHeight] = useState(0);
+ const [originalPageX, setOriginalPageX] = useState(0);
+ const [originalPageY, setOriginalPageY] = useState(0);
+ const [originalX, setOriginalX] = useState(0);
+ const [originalY, setOriginalY] = useState(0);
+ const measureZoomSubjectInterval = useRef();
+
+ /**
+ * Get the original box dimensions and save them for later use.
+ * (They will be used to calculate boxBorders)
+ *
+ * @private
+ */
+ const measure = useLatestCallback(() => {
+ // make sure we measure after animations are complete
+ requestAnimationFrame(() => {
+ // this setTimeout is here to fix a weird issue on iOS where the measurements are all `0`
+ // when navigating back (react-navigation stack) from another view
+ // while closing the keyboard at the same time
+ setTimeout(() => {
+ // In normal conditions, we're supposed to measure zoomSubject instead of its wrapper.
+ // However, our zoomSubject may have been transformed by an initial zoomLevel or offset,
+ // in which case these measurements will not represent the true "original" measurements.
+ // We just need to make sure the zoomSubjectWrapper perfectly aligns with the zoomSubject
+ // (no border, space, or anything between them)
+ wrapperRef.current?.measure((x, y, width, height, pageX, pageY) => {
+ // When the component is off-screen, these become all 0s, so we don't set them
+ // to avoid messing up calculations, especially ones that are done right after
+ // the component transitions from hidden to visible.
+ if (!pageX && !pageY && !width && !height) return;
+
+ setOriginalX(x);
+ setOriginalY(y);
+ setOriginalWidth(width);
+ setOriginalHeight(height);
+ setOriginalPageX(pageX);
+ setOriginalPageY(pageY);
+ });
+ });
+ });
+ });
+
+ useEffect(() => {
+ measure();
+ // We've already run `grabZoomSubjectOriginalMeasurements` at various events
+ // to make sure the measurements are promptly updated.
+ // However, there might be cases we haven't accounted for, especially when
+ // native processes are involved. To account for those cases,
+ // we'll use an interval here to ensure we're always up-to-date.
+ // The `setState` in `grabZoomSubjectOriginalMeasurements` won't trigger a rerender
+ // if the values given haven't changed, so we're not running performance risk here.
+ measureZoomSubjectInterval.current = setInterval(measure, 1e3);
+
+ return () => {
+ measureZoomSubjectInterval.current &&
+ clearInterval(measureZoomSubjectInterval.current);
+ };
+ }, []);
+
+ return {
+ wrapperRef,
+ measure,
+ originalWidth,
+ originalHeight,
+ originalPageX,
+ originalPageY,
+ originalX,
+ originalY,
+ };
+};