react-native-gesture-image-viewer 3.0.0-beta.2 → 3.0.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/module/GestureViewer.js +8 -1
- package/lib/module/GestureViewer.js.map +1 -1
- package/lib/module/GestureViewerManager.js +32 -10
- package/lib/module/GestureViewerManager.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/itemDimensions.js +86 -0
- package/lib/module/itemDimensions.js.map +1 -0
- package/lib/module/useGestureViewer.js +127 -10
- package/lib/module/useGestureViewer.js.map +1 -1
- package/lib/module/useGestureViewerManagerBridge.js +11 -2
- package/lib/module/useGestureViewerManagerBridge.js.map +1 -1
- package/lib/module/useWebClickHandler.js.map +1 -1
- package/lib/module/useWebClickHandler.web.js +9 -1
- package/lib/module/useWebClickHandler.web.js.map +1 -1
- package/lib/module/utils/index.js +27 -7
- package/lib/module/utils/index.js.map +1 -1
- package/lib/module/utils/tapZoom.js +47 -14
- package/lib/module/utils/tapZoom.js.map +1 -1
- package/lib/typescript/src/GestureViewer.d.ts.map +1 -1
- package/lib/typescript/src/GestureViewerManager.d.ts +12 -1
- package/lib/typescript/src/GestureViewerManager.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +1 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/itemDimensions.d.ts +26 -0
- package/lib/typescript/src/itemDimensions.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +28 -0
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/useGestureViewer.d.ts +3 -2
- package/lib/typescript/src/useGestureViewer.d.ts.map +1 -1
- package/lib/typescript/src/useGestureViewerManagerBridge.d.ts +3 -1
- package/lib/typescript/src/useGestureViewerManagerBridge.d.ts.map +1 -1
- package/lib/typescript/src/useWebClickHandler.d.ts +2 -0
- package/lib/typescript/src/useWebClickHandler.d.ts.map +1 -1
- package/lib/typescript/src/useWebClickHandler.web.d.ts +4 -2
- package/lib/typescript/src/useWebClickHandler.web.d.ts.map +1 -1
- package/lib/typescript/src/utils/index.d.ts +4 -2
- package/lib/typescript/src/utils/index.d.ts.map +1 -1
- package/lib/typescript/src/utils/tapZoom.d.ts +17 -1
- package/lib/typescript/src/utils/tapZoom.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/GestureViewer.tsx +16 -2
- package/src/GestureViewerManager.ts +47 -15
- package/src/index.tsx +4 -0
- package/src/itemDimensions.ts +162 -0
- package/src/types.ts +38 -0
- package/src/useGestureViewer.ts +184 -13
- package/src/useGestureViewerManagerBridge.ts +24 -2
- package/src/useWebClickHandler.ts +2 -0
- package/src/useWebClickHandler.web.ts +12 -0
- package/src/utils/index.ts +55 -22
- package/src/utils/tapZoom.ts +55 -15
|
@@ -15,10 +15,14 @@ function RenderWindowSlotView({
|
|
|
15
15
|
isActive,
|
|
16
16
|
pageStride,
|
|
17
17
|
renderItem,
|
|
18
|
+
setItemDimensions,
|
|
18
19
|
slot,
|
|
19
20
|
visualPage,
|
|
20
21
|
width
|
|
21
22
|
}) {
|
|
23
|
+
const registerItemDimensions = dimensions => {
|
|
24
|
+
setItemDimensions(slot.logicalIndex, slot.item, dimensions);
|
|
25
|
+
};
|
|
22
26
|
const slotAnimatedStyle = useAnimatedStyle(() => ({
|
|
23
27
|
transform: [{
|
|
24
28
|
translateX: (slot.virtualIndex - visualPage.get()) * pageStride
|
|
@@ -37,7 +41,8 @@ function RenderWindowSlotView({
|
|
|
37
41
|
width
|
|
38
42
|
}],
|
|
39
43
|
children: renderItem(slot.item, slot.logicalIndex, {
|
|
40
|
-
isActive
|
|
44
|
+
isActive,
|
|
45
|
+
setItemDimensions: registerItemDimensions
|
|
41
46
|
})
|
|
42
47
|
})
|
|
43
48
|
})
|
|
@@ -75,6 +80,7 @@ export function GestureViewer({
|
|
|
75
80
|
pageStride,
|
|
76
81
|
renderWindowSlots,
|
|
77
82
|
visualPage,
|
|
83
|
+
setItemDimensions,
|
|
78
84
|
zoomGesture,
|
|
79
85
|
zoomPinchGesture
|
|
80
86
|
} = useGestureViewer({
|
|
@@ -123,6 +129,7 @@ export function GestureViewer({
|
|
|
123
129
|
isActive: slot.virtualIndex === centerVirtualIndex,
|
|
124
130
|
pageStride: pageStride,
|
|
125
131
|
renderItem: renderItem,
|
|
132
|
+
setItemDimensions: setItemDimensions,
|
|
126
133
|
slot: slot,
|
|
127
134
|
visualPage: visualPage,
|
|
128
135
|
width: width
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useMemo","StyleSheet","useWindowDimensions","View","GestureDetector","GestureHandlerRootView","Animated","useAnimatedStyle","composeGestureViewerGestures","registry","getWebContentProps","useGestureViewer","jsx","_jsx","jsxs","_jsxs","RenderWindowSlotView","animatedStyle","height","isActive","pageStride","renderItem","slot","visualPage","width","slotAnimatedStyle","transform","translateX","virtualIndex","get","style","styles","children","page","
|
|
1
|
+
{"version":3,"names":["useEffect","useMemo","StyleSheet","useWindowDimensions","View","GestureDetector","GestureHandlerRootView","Animated","useAnimatedStyle","composeGestureViewerGestures","registry","getWebContentProps","useGestureViewer","jsx","_jsx","jsxs","_jsxs","RenderWindowSlotView","animatedStyle","height","isActive","pageStride","renderItem","setItemDimensions","slot","visualPage","width","registerItemDimensions","dimensions","logicalIndex","item","slotAnimatedStyle","transform","translateX","virtualIndex","get","style","styles","children","page","GestureViewer","id","data","renderContainer","customWidth","customHeight","backdropStyle","backdropStyleProps","containerStyle","initialIndex","pageSpacing","windowSize","enableLoop","props","screenWidth","screenHeight","centerVirtualIndex","dismissGesture","handleDismiss","horizontalPagingGesture","onWebClick","renderWindowSlots","zoomGesture","zoomPinchGesture","gesture","createManager","deleteManager","control","dismiss","webContentProps","viewer","container","background","content","map","slotKey","create","absoluteFill","backgroundColor","overflow","alignItems","justifyContent","flex","left","position","top"],"sourceRoot":"../../src","sources":["GestureViewer.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { withTiming } from 'react-native-reanimated';
|
|
4
|
-
import {
|
|
4
|
+
import { clampTranslationToBounds } from "./utils/index.js";
|
|
5
5
|
const DEFAULT_STATE_READER = () => ({
|
|
6
6
|
currentIndex: 0,
|
|
7
7
|
totalCount: 0
|
|
@@ -16,6 +16,8 @@ class GestureViewerManager {
|
|
|
16
16
|
rotation = null;
|
|
17
17
|
translateX = null;
|
|
18
18
|
translateY = null;
|
|
19
|
+
contentWidth = null;
|
|
20
|
+
contentHeight = null;
|
|
19
21
|
listeners = new Set();
|
|
20
22
|
eventListeners = new Map();
|
|
21
23
|
eventListenerPresenceSubscribers = new Set();
|
|
@@ -102,11 +104,20 @@ class GestureViewerManager {
|
|
|
102
104
|
setStateReader(reader) {
|
|
103
105
|
this.stateReader = reader ?? DEFAULT_STATE_READER;
|
|
104
106
|
}
|
|
105
|
-
setZoomSharedValues(
|
|
107
|
+
setZoomSharedValues({
|
|
108
|
+
scale,
|
|
109
|
+
translateX,
|
|
110
|
+
translateY,
|
|
111
|
+
maxZoomScale,
|
|
112
|
+
contentWidth,
|
|
113
|
+
contentHeight
|
|
114
|
+
}) {
|
|
106
115
|
this.scale = scale;
|
|
107
116
|
this.translateX = translateX;
|
|
108
117
|
this.translateY = translateY;
|
|
109
118
|
this.maxZoomScale = maxZoomScale;
|
|
119
|
+
this.contentWidth = contentWidth ?? null;
|
|
120
|
+
this.contentHeight = contentHeight ?? null;
|
|
110
121
|
}
|
|
111
122
|
notifyStateChange() {
|
|
112
123
|
this.notifyListeners();
|
|
@@ -141,10 +152,7 @@ class GestureViewerManager {
|
|
|
141
152
|
const {
|
|
142
153
|
translateX,
|
|
143
154
|
translateY
|
|
144
|
-
} =
|
|
145
|
-
width: this.width,
|
|
146
|
-
height: this.height
|
|
147
|
-
})({
|
|
155
|
+
} = this.clampZoomTranslationToBounds({
|
|
148
156
|
translateX: this.translateX.get(),
|
|
149
157
|
translateY: this.translateY.get(),
|
|
150
158
|
scale: nextScale
|
|
@@ -166,10 +174,7 @@ class GestureViewerManager {
|
|
|
166
174
|
const {
|
|
167
175
|
translateX,
|
|
168
176
|
translateY
|
|
169
|
-
} =
|
|
170
|
-
width: this.width,
|
|
171
|
-
height: this.height
|
|
172
|
-
})({
|
|
177
|
+
} = this.clampZoomTranslationToBounds({
|
|
173
178
|
translateX: this.translateX.get(),
|
|
174
179
|
translateY: this.translateY.get(),
|
|
175
180
|
scale: nextScale
|
|
@@ -207,14 +212,31 @@ class GestureViewerManager {
|
|
|
207
212
|
this.listeners.clear();
|
|
208
213
|
this.navigationAdapter = null;
|
|
209
214
|
this.stateReader = DEFAULT_STATE_READER;
|
|
215
|
+
this.width = 0;
|
|
216
|
+
this.height = 0;
|
|
210
217
|
this.maxZoomScale = 2;
|
|
211
218
|
this.scale = null;
|
|
212
219
|
this.translateX = null;
|
|
213
220
|
this.translateY = null;
|
|
214
221
|
this.rotation = null;
|
|
222
|
+
this.contentWidth = null;
|
|
223
|
+
this.contentHeight = null;
|
|
215
224
|
this.eventListeners.clear();
|
|
216
225
|
this.eventListenerPresenceSubscribers.clear();
|
|
217
226
|
}
|
|
227
|
+
clampZoomTranslationToBounds = ({
|
|
228
|
+
scale,
|
|
229
|
+
translateX,
|
|
230
|
+
translateY
|
|
231
|
+
}) => clampTranslationToBounds({
|
|
232
|
+
contentHeight: this.contentHeight?.get(),
|
|
233
|
+
contentWidth: this.contentWidth?.get(),
|
|
234
|
+
height: this.height,
|
|
235
|
+
scale,
|
|
236
|
+
translateX,
|
|
237
|
+
translateY,
|
|
238
|
+
width: this.width
|
|
239
|
+
});
|
|
218
240
|
}
|
|
219
241
|
export default GestureViewerManager;
|
|
220
242
|
//# sourceMappingURL=GestureViewerManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["withTiming","
|
|
1
|
+
{"version":3,"names":["withTiming","clampTranslationToBounds","DEFAULT_STATE_READER","currentIndex","totalCount","GestureViewerManager","width","height","maxZoomScale","navigationAdapter","stateReader","scale","rotation","translateX","translateY","contentWidth","contentHeight","listeners","Set","eventListeners","Map","eventListenerPresenceSubscribers","notifyListeners","state","getState","forEach","listener","subscribe","add","delete","addEventListener","eventType","callback","has","set","get","notifyEventListenerPresence","size","subscribeToEventListenerPresence","notifyEventListenerPresenceSubscriber","hasEventListeners","emitEvent","data","emitZoomChange","previousScale","emitRotationChange","previousRotation","emitTap","setWidth","setHeight","setNavigationAdapter","adapter","setStateReader","reader","setZoomSharedValues","notifyStateChange","setRotation","rotate","angle","clockwise","MAX_ANGLE","currentRotation","undefined","nextAngle","Math","floor","zoomIn","multiplier","nextScale","min","clampZoomTranslationToBounds","zoomOut","max","resetZoom","goToIndex","index","options","goToPrevious","goToNext","cleanUp","clear"],"sourceRoot":"../../src","sources":["GestureViewerManager.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["GestureTrigger","GestureViewer","useGestureViewerController","useGestureViewerEvent","useGestureViewerState"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AACA,SAASA,cAAc,QAAQ,qBAAkB;AACjD,SAASC,aAAa,QAAQ,oBAAiB;
|
|
1
|
+
{"version":3,"names":["GestureTrigger","GestureViewer","useGestureViewerController","useGestureViewerEvent","useGestureViewerState"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AACA,SAASA,cAAc,QAAQ,qBAAkB;AACjD,SAASC,aAAa,QAAQ,oBAAiB;AAe/C,SAASC,0BAA0B,QAAQ,iCAA8B;AACzE,SAASC,qBAAqB,QAAQ,4BAAyB;AAC/D,SAASC,qBAAqB,QAAQ,4BAAyB","ignoreList":[]}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export const isValidItemDimensions = dimensions => {
|
|
4
|
+
return dimensions !== null && dimensions !== undefined && Number.isFinite(dimensions.width) && Number.isFinite(dimensions.height) && dimensions.width > 0 && dimensions.height > 0;
|
|
5
|
+
};
|
|
6
|
+
const resolveItemKey = (getItemKey, item, index) => {
|
|
7
|
+
const itemKey = getItemKey?.(item, index);
|
|
8
|
+
if (typeof itemKey === 'string') {
|
|
9
|
+
return itemKey;
|
|
10
|
+
}
|
|
11
|
+
return typeof itemKey === 'number' && Number.isFinite(itemKey) ? itemKey : undefined;
|
|
12
|
+
};
|
|
13
|
+
const doesEntryMatchItem = (entry, item, itemKey) => {
|
|
14
|
+
if (itemKey !== undefined && entry.itemKey !== undefined) {
|
|
15
|
+
return entry.itemKey === itemKey;
|
|
16
|
+
}
|
|
17
|
+
return Object.is(entry.item, item);
|
|
18
|
+
};
|
|
19
|
+
export const pruneItemDimensionsRegistry = (registry, dataLength) => {
|
|
20
|
+
for (const index of registry.keys()) {
|
|
21
|
+
if (index < 0 || index >= dataLength) {
|
|
22
|
+
registry.delete(index);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
export const resolveItemDimensions = ({
|
|
27
|
+
registry,
|
|
28
|
+
data,
|
|
29
|
+
index,
|
|
30
|
+
getItemDimensions,
|
|
31
|
+
getItemKey
|
|
32
|
+
}) => {
|
|
33
|
+
if (index < 0 || index >= data.length) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// `as ItemT` restores the viewer's dense-list invariant, which TypeScript cannot infer from
|
|
38
|
+
// generic indexed access when `noUncheckedIndexedAccess` is enabled.
|
|
39
|
+
const item = data[index];
|
|
40
|
+
const registered = registry.get(index);
|
|
41
|
+
const itemKey = registered ? resolveItemKey(getItemKey, item, index) : undefined;
|
|
42
|
+
if (registered && doesEntryMatchItem(registered, item, itemKey) && isValidItemDimensions(registered.dimensions)) {
|
|
43
|
+
return registered.dimensions;
|
|
44
|
+
}
|
|
45
|
+
const resolved = getItemDimensions?.(item, index);
|
|
46
|
+
if (isValidItemDimensions(resolved)) {
|
|
47
|
+
return resolved;
|
|
48
|
+
}
|
|
49
|
+
return undefined;
|
|
50
|
+
};
|
|
51
|
+
export const registerItemDimensions = ({
|
|
52
|
+
registry,
|
|
53
|
+
data,
|
|
54
|
+
index,
|
|
55
|
+
item,
|
|
56
|
+
dimensions,
|
|
57
|
+
getItemKey
|
|
58
|
+
}) => {
|
|
59
|
+
if (index < 0 || index >= data.length || !isValidItemDimensions(dimensions)) {
|
|
60
|
+
return 'ignored';
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// `as ItemT` restores the viewer's dense-list invariant, which TypeScript cannot infer from
|
|
64
|
+
// generic indexed access when `noUncheckedIndexedAccess` is enabled.
|
|
65
|
+
const currentItem = data[index];
|
|
66
|
+
const currentItemKey = resolveItemKey(getItemKey, currentItem, index);
|
|
67
|
+
const reportedItemKey = Object.is(currentItem, item) ? currentItemKey : resolveItemKey(getItemKey, item, index);
|
|
68
|
+
const hasMatchingKey = currentItemKey !== undefined && reportedItemKey !== undefined && currentItemKey === reportedItemKey;
|
|
69
|
+
if (!Object.is(currentItem, item) && !hasMatchingKey) {
|
|
70
|
+
return 'ignored';
|
|
71
|
+
}
|
|
72
|
+
const registered = registry.get(index);
|
|
73
|
+
if (registered && doesEntryMatchItem(registered, currentItem, currentItemKey) && registered.dimensions.width === dimensions.width && registered.dimensions.height === dimensions.height) {
|
|
74
|
+
return 'unchanged';
|
|
75
|
+
}
|
|
76
|
+
registry.set(index, {
|
|
77
|
+
dimensions: {
|
|
78
|
+
height: dimensions.height,
|
|
79
|
+
width: dimensions.width
|
|
80
|
+
},
|
|
81
|
+
item: currentItem,
|
|
82
|
+
itemKey: currentItemKey
|
|
83
|
+
});
|
|
84
|
+
return 'updated';
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=itemDimensions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["isValidItemDimensions","dimensions","undefined","Number","isFinite","width","height","resolveItemKey","getItemKey","item","index","itemKey","doesEntryMatchItem","entry","Object","is","pruneItemDimensionsRegistry","registry","dataLength","keys","delete","resolveItemDimensions","data","getItemDimensions","length","registered","get","resolved","registerItemDimensions","currentItem","currentItemKey","reportedItemKey","hasMatchingKey","set"],"sourceRoot":"../../src","sources":["itemDimensions.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -9,13 +9,14 @@ import { PAGE_SPRING_CONFIG, SWIPE_THRESHOLD_RATIO, SWIPE_VELOCITY_THRESHOLD } f
|
|
|
9
9
|
import { normalizeHorizontalSwipeThreshold } from "./gestureViewerPaging.js";
|
|
10
10
|
import { registry } from "./GestureViewerRegistry.js";
|
|
11
11
|
import { resolveGestureViewerRenderWindow } from "./gestureViewerRenderWindow.js";
|
|
12
|
+
import { pruneItemDimensionsRegistry, registerItemDimensions, resolveItemDimensions } from "./itemDimensions.js";
|
|
12
13
|
import { enableNativeTapGestures } from './platformTapGestures';
|
|
13
14
|
import { getLogicalIndex, getPageStride, getVirtualIndexForLogicalIndex, normalizePageSpacing, clampIndex, resolveNavigation, shouldRunNavigationDuringTransition } from "./renderWindow.js";
|
|
14
15
|
import { useGestureViewerManagerBridge } from "./useGestureViewerManagerBridge.js";
|
|
15
16
|
import { useGestureViewerPaging } from "./useGestureViewerPaging.js";
|
|
16
17
|
import { useWebClickHandler } from './useWebClickHandler';
|
|
17
18
|
import { useWebSingleTapTimer } from './useWebSingleTapTimer';
|
|
18
|
-
import {
|
|
19
|
+
import { clampTranslationToBounds, resolveGeometrySyncTranslationMode } from "./utils/index.js";
|
|
19
20
|
import { getDismissDistance, shouldDismissByDirection } from "./utils/dismiss.js";
|
|
20
21
|
import { applyTapZoomAtPoint } from "./utils/tapZoom.js";
|
|
21
22
|
import { calculateFocalPointTranslation, shouldAcceptFocalPoint } from "./utils/zoom.js";
|
|
@@ -23,6 +24,16 @@ const NATIVE_TAP_MAX_DISTANCE = 10;
|
|
|
23
24
|
const isValidTriggerRect = rect => {
|
|
24
25
|
return !!rect && rect.width > 0 && rect.height > 0;
|
|
25
26
|
};
|
|
27
|
+
function fitItemDimensions(dimensions, viewport) {
|
|
28
|
+
if (!dimensions) {
|
|
29
|
+
return viewport;
|
|
30
|
+
}
|
|
31
|
+
const fit = Math.min(viewport.width / dimensions.width, viewport.height / dimensions.height);
|
|
32
|
+
return {
|
|
33
|
+
height: dimensions.height * fit,
|
|
34
|
+
width: dimensions.width * fit
|
|
35
|
+
};
|
|
36
|
+
}
|
|
26
37
|
export const useGestureViewer = ({
|
|
27
38
|
data,
|
|
28
39
|
initialIndex = 0,
|
|
@@ -43,7 +54,9 @@ export const useGestureViewer = ({
|
|
|
43
54
|
onDismissStart,
|
|
44
55
|
triggerAnimation,
|
|
45
56
|
autoPlay = false,
|
|
46
|
-
autoPlayInterval = 3000
|
|
57
|
+
autoPlayInterval = 3000,
|
|
58
|
+
getItemDimensions,
|
|
59
|
+
getItemKey
|
|
47
60
|
}) => {
|
|
48
61
|
const {
|
|
49
62
|
width: screenWidth,
|
|
@@ -76,12 +89,21 @@ export const useGestureViewer = ({
|
|
|
76
89
|
const onAnimationCompleteRef = useRef(triggerAnimation?.onAnimationComplete);
|
|
77
90
|
const onSingleTapRef = useRef(onSingleTap);
|
|
78
91
|
const dataRef = useRef(data);
|
|
92
|
+
const getItemDimensionsRef = useRef(getItemDimensions);
|
|
93
|
+
const getItemKeyRef = useRef(getItemKey);
|
|
79
94
|
const dataLengthRef = useRef(dataLength);
|
|
80
95
|
const enableLoopRef = useRef(enableLoop);
|
|
81
96
|
const managerRef = useRef(null);
|
|
82
97
|
const isZoomedRef = useRef(isZoomed);
|
|
83
98
|
const isRotatedRef = useRef(isRotated);
|
|
84
99
|
const isPinchingRef = useRef(isPinching);
|
|
100
|
+
const itemDimensionsRef = useRef(new Map());
|
|
101
|
+
const viewportRef = useRef({
|
|
102
|
+
height,
|
|
103
|
+
width
|
|
104
|
+
});
|
|
105
|
+
const activeGeometryRef = useRef(null);
|
|
106
|
+
const activeGeometryIndexRef = useRef(null);
|
|
85
107
|
const initialTranslateY = useSharedValue(0);
|
|
86
108
|
const initialTranslateX = useSharedValue(0);
|
|
87
109
|
const startScale = useSharedValue(1);
|
|
@@ -89,6 +111,8 @@ export const useGestureViewer = ({
|
|
|
89
111
|
const translateX = useSharedValue(0);
|
|
90
112
|
const scale = useSharedValue(1);
|
|
91
113
|
const rotation = useSharedValue(0);
|
|
114
|
+
const contentWidth = useSharedValue(width);
|
|
115
|
+
const contentHeight = useSharedValue(height);
|
|
92
116
|
const triggerScale = useSharedValue(1);
|
|
93
117
|
const triggerTranslateX = useSharedValue(0);
|
|
94
118
|
const triggerTranslateY = useSharedValue(0);
|
|
@@ -130,10 +154,85 @@ export const useGestureViewer = ({
|
|
|
130
154
|
isTriggerOpening,
|
|
131
155
|
windowSize
|
|
132
156
|
});
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
157
|
+
const syncActiveContentDimensions = useCallback((index = pendingIndexRef.current) => {
|
|
158
|
+
const viewport = viewportRef.current;
|
|
159
|
+
const fitted = fitItemDimensions(resolveItemDimensions({
|
|
160
|
+
data: dataRef.current,
|
|
161
|
+
getItemKey: getItemKeyRef.current,
|
|
162
|
+
getItemDimensions: getItemDimensionsRef.current,
|
|
163
|
+
index,
|
|
164
|
+
registry: itemDimensionsRef.current
|
|
165
|
+
}), viewport);
|
|
166
|
+
const nextGeometry = {
|
|
167
|
+
contentHeight: fitted.height,
|
|
168
|
+
contentWidth: fitted.width,
|
|
169
|
+
height: viewport.height,
|
|
170
|
+
width: viewport.width
|
|
171
|
+
};
|
|
172
|
+
const previousGeometry = activeGeometryRef.current;
|
|
173
|
+
const previousGeometryIndex = activeGeometryIndexRef.current;
|
|
174
|
+
activeGeometryIndexRef.current = index;
|
|
175
|
+
const currentScale = scale.get();
|
|
176
|
+
const translationMode = resolveGeometrySyncTranslationMode(previousGeometryIndex, index, currentScale);
|
|
177
|
+
if (translationMode === 'reset') {
|
|
178
|
+
// Complete the page-owned reset before the next item's geometry can reuse the old offset.
|
|
179
|
+
translateX.set(0);
|
|
180
|
+
translateY.set(0);
|
|
181
|
+
}
|
|
182
|
+
if (previousGeometry?.contentHeight === nextGeometry.contentHeight && previousGeometry.contentWidth === nextGeometry.contentWidth && previousGeometry.height === nextGeometry.height && previousGeometry.width === nextGeometry.width) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
activeGeometryRef.current = nextGeometry;
|
|
186
|
+
if (contentWidth.get() !== fitted.width) {
|
|
187
|
+
contentWidth.set(fitted.width);
|
|
188
|
+
}
|
|
189
|
+
if (contentHeight.get() !== fitted.height) {
|
|
190
|
+
contentHeight.set(fitted.height);
|
|
191
|
+
}
|
|
192
|
+
if (translationMode !== 'constrain') {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
const constrained = clampTranslationToBounds({
|
|
196
|
+
contentHeight: fitted.height,
|
|
197
|
+
contentWidth: fitted.width,
|
|
198
|
+
height: viewport.height,
|
|
199
|
+
width: viewport.width,
|
|
200
|
+
scale: currentScale,
|
|
201
|
+
translateX: translateX.get(),
|
|
202
|
+
translateY: translateY.get()
|
|
203
|
+
});
|
|
204
|
+
translateX.set(withTiming(constrained.translateX));
|
|
205
|
+
translateY.set(withTiming(constrained.translateY));
|
|
206
|
+
}, [contentHeight, contentWidth, scale, translateX, translateY]);
|
|
207
|
+
const setItemDimensions = useCallback((index, item, dimensions) => {
|
|
208
|
+
if (registerItemDimensions({
|
|
209
|
+
data: dataRef.current,
|
|
210
|
+
dimensions,
|
|
211
|
+
getItemKey: getItemKeyRef.current,
|
|
212
|
+
index,
|
|
213
|
+
item,
|
|
214
|
+
registry: itemDimensionsRef.current
|
|
215
|
+
}) === 'updated' && index === pendingIndexRef.current) {
|
|
216
|
+
syncActiveContentDimensions(index);
|
|
217
|
+
}
|
|
218
|
+
}, [syncActiveContentDimensions]);
|
|
219
|
+
const constrainTranslation = useCallback(({
|
|
220
|
+
scale: targetScale,
|
|
221
|
+
translateX: targetX,
|
|
222
|
+
translateY: targetY
|
|
223
|
+
}) => {
|
|
224
|
+
'worklet';
|
|
225
|
+
|
|
226
|
+
return clampTranslationToBounds({
|
|
227
|
+
contentHeight: contentHeight.get(),
|
|
228
|
+
contentWidth: contentWidth.get(),
|
|
229
|
+
height,
|
|
230
|
+
scale: targetScale,
|
|
231
|
+
translateX: targetX,
|
|
232
|
+
translateY: targetY,
|
|
233
|
+
width
|
|
234
|
+
});
|
|
235
|
+
}, [contentHeight, contentWidth, height, width]);
|
|
137
236
|
const resetTransformState = useCallback(() => {
|
|
138
237
|
translateX.set(withTiming(0));
|
|
139
238
|
translateY.set(withTiming(0));
|
|
@@ -162,9 +261,10 @@ export const useGestureViewer = ({
|
|
|
162
261
|
const commitCurrentIndex = useCallback(nextIndex => {
|
|
163
262
|
pendingIndexRef.current = nextIndex;
|
|
164
263
|
currentIndexRef.current = nextIndex;
|
|
264
|
+
syncActiveContentDimensions(nextIndex);
|
|
165
265
|
setCurrentIndex(nextIndex);
|
|
166
266
|
managerRef.current?.notifyStateChange();
|
|
167
|
-
}, []);
|
|
267
|
+
}, [syncActiveContentDimensions]);
|
|
168
268
|
const commitVirtualIndexOnly = useCallback(nextVirtualIndex => {
|
|
169
269
|
const nextLogicalIndex = getLogicalIndex(nextVirtualIndex, dataLengthRef.current, enableLoopRef.current);
|
|
170
270
|
if (nextLogicalIndex === null) {
|
|
@@ -248,6 +348,8 @@ export const useGestureViewer = ({
|
|
|
248
348
|
navigateByDirection(-1);
|
|
249
349
|
}, [navigateByDirection]);
|
|
250
350
|
useGestureViewerManagerBridge({
|
|
351
|
+
contentHeight,
|
|
352
|
+
contentWidth,
|
|
251
353
|
currentIndexRef,
|
|
252
354
|
dataLengthRef,
|
|
253
355
|
goToIndex: navigateToIndex,
|
|
@@ -303,9 +405,19 @@ export const useGestureViewer = ({
|
|
|
303
405
|
}
|
|
304
406
|
});
|
|
305
407
|
}, [id]);
|
|
306
|
-
|
|
408
|
+
useLayoutEffect(() => {
|
|
307
409
|
dataRef.current = data;
|
|
308
|
-
|
|
410
|
+
getItemDimensionsRef.current = getItemDimensions;
|
|
411
|
+
getItemKeyRef.current = getItemKey;
|
|
412
|
+
viewportRef.current = {
|
|
413
|
+
height,
|
|
414
|
+
width
|
|
415
|
+
};
|
|
416
|
+
syncActiveContentDimensions();
|
|
417
|
+
}, [data, dataLength, getItemDimensions, getItemKey, height, syncActiveContentDimensions, width]);
|
|
418
|
+
useEffect(() => {
|
|
419
|
+
pruneItemDimensionsRegistry(itemDimensionsRef.current, dataLength);
|
|
420
|
+
}, [dataLength]);
|
|
309
421
|
useEffect(() => {
|
|
310
422
|
isZoomedRef.current = isZoomed;
|
|
311
423
|
}, [isZoomed]);
|
|
@@ -594,6 +706,8 @@ export const useGestureViewer = ({
|
|
|
594
706
|
return;
|
|
595
707
|
}
|
|
596
708
|
applyTapZoomAtPoint({
|
|
709
|
+
contentHeight: contentHeight.get(),
|
|
710
|
+
contentWidth: contentWidth.get(),
|
|
597
711
|
x: event.x,
|
|
598
712
|
y: event.y,
|
|
599
713
|
width,
|
|
@@ -603,7 +717,7 @@ export const useGestureViewer = ({
|
|
|
603
717
|
translateX,
|
|
604
718
|
translateY
|
|
605
719
|
});
|
|
606
|
-
}), [enableDoubleTapZoom, height, maxZoomScale, nativeInteractionHadMultipleTouches, pageTransitionLocked, scale, suppressNativeTap, translateX, translateY, width]);
|
|
720
|
+
}), [contentHeight, contentWidth, enableDoubleTapZoom, height, maxZoomScale, nativeInteractionHadMultipleTouches, pageTransitionLocked, scale, suppressNativeTap, translateX, translateY, width]);
|
|
607
721
|
const tapGesture = useMemo(() => Gesture.Exclusive(doubleTapGesture, singleTapGesture), [doubleTapGesture, singleTapGesture]);
|
|
608
722
|
const zoomPinchGesture = useMemo(() => Gesture.Pinch().enabled(enablePinchZoom).onTouchesDown(event => {
|
|
609
723
|
if (event.numberOfTouches === 2) {
|
|
@@ -779,6 +893,8 @@ export const useGestureViewer = ({
|
|
|
779
893
|
const zoomGesture = useMemo(() => Gesture.Exclusive(zoomPanGesture, tapGesture), [zoomPanGesture, tapGesture]);
|
|
780
894
|
const onWebClick = useWebClickHandler({
|
|
781
895
|
clearPendingWebSingleTap,
|
|
896
|
+
contentHeight,
|
|
897
|
+
contentWidth,
|
|
782
898
|
emitSingleTap,
|
|
783
899
|
enableDoubleTapZoom,
|
|
784
900
|
getCurrentTapTarget,
|
|
@@ -838,6 +954,7 @@ export const useGestureViewer = ({
|
|
|
838
954
|
pageStride,
|
|
839
955
|
renderWindowSlots,
|
|
840
956
|
visualPage,
|
|
957
|
+
setItemDimensions,
|
|
841
958
|
zoomGesture,
|
|
842
959
|
zoomPinchGesture
|
|
843
960
|
};
|