react-native-gesture-image-viewer 1.5.1 → 1.6.0
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/README.md +2 -0
- package/lib/module/GestureViewer.js +21 -9
- package/lib/module/GestureViewer.js.map +1 -1
- package/lib/module/GestureViewerManager.js +51 -20
- package/lib/module/GestureViewerManager.js.map +1 -1
- package/lib/module/useGestureViewer.js +34 -20
- package/lib/module/useGestureViewer.js.map +1 -1
- package/lib/module/utils.js +52 -0
- package/lib/module/utils.js.map +1 -1
- package/lib/typescript/src/GestureViewer.d.ts +1 -1
- package/lib/typescript/src/GestureViewer.d.ts.map +1 -1
- package/lib/typescript/src/GestureViewerManager.d.ts +6 -0
- package/lib/typescript/src/GestureViewerManager.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +5 -0
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/useGestureViewer.d.ts +2 -1
- package/lib/typescript/src/useGestureViewer.d.ts.map +1 -1
- package/lib/typescript/src/utils.d.ts +9 -0
- package/lib/typescript/src/utils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/GestureViewer.tsx +47 -31
- package/src/GestureViewerManager.ts +61 -15
- package/src/types.ts +5 -0
- package/src/useGestureViewer.ts +41 -18
- package/src/utils.ts +53 -0
package/README.md
CHANGED
|
@@ -149,6 +149,7 @@ function App() {
|
|
|
149
149
|
<GestureViewer
|
|
150
150
|
data={images}
|
|
151
151
|
renderItem={renderImage}
|
|
152
|
+
enableLoop={false}
|
|
152
153
|
enableDismissGesture
|
|
153
154
|
enableSwipeGesture
|
|
154
155
|
enableZoomGesture
|
|
@@ -161,6 +162,7 @@ function App() {
|
|
|
161
162
|
|
|
162
163
|
|Property|Description|Default|
|
|
163
164
|
|:--:|:-----|:--:|
|
|
165
|
+
|`enableLoop`|Enables loop mode. When `true`, navigating next from the last item goes to the first item, and navigating previous from the first item goes to the last item.|`false`|
|
|
164
166
|
|`enableDismissGesture`|Calls `onDismiss` function when swiping down. Useful for closing modals with downward swipe gestures.|`true`|
|
|
165
167
|
|`enableSwipeGesture`|Controls left/right swipe gestures. When `false`, horizontal gestures are disabled.|`true`|
|
|
166
168
|
|`enableZoomGesture`|Controls two-finger pinch gestures with focal point zooming. When `false`, pinch zoom is disabled. Zoom centers on the point between your two fingers for intuitive scaling.|`true`|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useEffect, useMemo } from 'react';
|
|
3
|
+
import { useCallback, useEffect, useMemo, useRef } from 'react';
|
|
4
4
|
import { Platform, StyleSheet, useWindowDimensions, View } from 'react-native';
|
|
5
5
|
import { Gesture, GestureDetector, GestureHandlerRootView } from 'react-native-gesture-handler';
|
|
6
6
|
import Animated from 'react-native-reanimated';
|
|
7
7
|
import { registry } from "./GestureViewerRegistry.js";
|
|
8
8
|
import { useGestureViewer } from "./useGestureViewer.js";
|
|
9
|
-
import { isFlashListLike, isFlatListLike, isScrollViewLike } from "./utils.js";
|
|
9
|
+
import { createLoopData, isFlashListLike, isFlatListLike, isScrollViewLike } from "./utils.js";
|
|
10
10
|
import WebPagingFixStyle from "./WebPagingFixStyle.js";
|
|
11
11
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
12
|
export function GestureViewer({
|
|
@@ -22,13 +22,17 @@ export function GestureViewer({
|
|
|
22
22
|
initialIndex = 0,
|
|
23
23
|
itemSpacing = 0,
|
|
24
24
|
useSnap = false,
|
|
25
|
+
enableLoop = false,
|
|
25
26
|
...props
|
|
26
27
|
}) {
|
|
27
28
|
const Component = ListComponent;
|
|
29
|
+
const dataRef = useRef(data);
|
|
30
|
+
dataRef.current = data;
|
|
28
31
|
const {
|
|
29
32
|
width: screenWidth
|
|
30
33
|
} = useWindowDimensions();
|
|
31
34
|
const width = useSnap ? customWidth || screenWidth : screenWidth;
|
|
35
|
+
const loopData = useMemo(() => createLoopData(dataRef, enableLoop), [enableLoop]);
|
|
32
36
|
const {
|
|
33
37
|
listRef,
|
|
34
38
|
isZoomed,
|
|
@@ -36,6 +40,7 @@ export function GestureViewer({
|
|
|
36
40
|
dismissGesture,
|
|
37
41
|
zoomGesture,
|
|
38
42
|
onMomentumScrollEnd,
|
|
43
|
+
onScrollBeginDrag,
|
|
39
44
|
animatedStyle,
|
|
40
45
|
backdropStyle
|
|
41
46
|
} = useGestureViewer({
|
|
@@ -45,8 +50,15 @@ export function GestureViewer({
|
|
|
45
50
|
initialIndex,
|
|
46
51
|
itemSpacing,
|
|
47
52
|
useSnap,
|
|
53
|
+
enableLoop,
|
|
48
54
|
...props
|
|
49
55
|
});
|
|
56
|
+
const keyExtractor = useCallback((item, index) => {
|
|
57
|
+
if (enableLoop) {
|
|
58
|
+
return typeof item === 'string' ? `${item}-${index}` : `item-${index}`;
|
|
59
|
+
}
|
|
60
|
+
return typeof item === 'string' ? item : `image-${index}`;
|
|
61
|
+
}, [enableLoop]);
|
|
50
62
|
const renderItem = useCallback(({
|
|
51
63
|
item,
|
|
52
64
|
index
|
|
@@ -60,14 +72,13 @@ export function GestureViewer({
|
|
|
60
72
|
marginHorizontal: itemSpacing / 2
|
|
61
73
|
}],
|
|
62
74
|
children: renderItemProp(item, index)
|
|
63
|
-
},
|
|
64
|
-
}, [width, itemSpacing, renderItemProp]);
|
|
75
|
+
}, keyExtractor(item, index));
|
|
76
|
+
}, [width, itemSpacing, renderItemProp, keyExtractor]);
|
|
65
77
|
const getItemLayout = useCallback((_, index) => ({
|
|
66
78
|
length: width + itemSpacing,
|
|
67
79
|
offset: (width + itemSpacing) * index,
|
|
68
80
|
index
|
|
69
81
|
}), [width, itemSpacing]);
|
|
70
|
-
const keyExtractor = useCallback((item, index) => typeof item === 'string' ? item : `image-${index}`, []);
|
|
71
82
|
const gesture = useMemo(() => {
|
|
72
83
|
return Gesture.Race(dismissGesture, zoomGesture);
|
|
73
84
|
}, [zoomGesture, dismissGesture]);
|
|
@@ -80,6 +91,7 @@ export function GestureViewer({
|
|
|
80
91
|
scrollEnabled: !isZoomed && !isRotated,
|
|
81
92
|
showsHorizontalScrollIndicator: false,
|
|
82
93
|
onMomentumScrollEnd: onMomentumScrollEnd,
|
|
94
|
+
onScrollBeginDrag,
|
|
83
95
|
...(useSnap ? {
|
|
84
96
|
snapToInterval: width + itemSpacing,
|
|
85
97
|
snapToAlignment: 'center',
|
|
@@ -89,7 +101,7 @@ export function GestureViewer({
|
|
|
89
101
|
}),
|
|
90
102
|
scrollEventThrottle: 16,
|
|
91
103
|
removeClippedSubviews: true
|
|
92
|
-
}), [width, itemSpacing, isZoomed, isRotated, onMomentumScrollEnd, useSnap]);
|
|
104
|
+
}), [width, itemSpacing, isZoomed, isRotated, onMomentumScrollEnd, onScrollBeginDrag, useSnap]);
|
|
93
105
|
const listComponent = /*#__PURE__*/_jsx(GestureHandlerRootView, {
|
|
94
106
|
children: /*#__PURE__*/_jsx(GestureDetector, {
|
|
95
107
|
gesture: gesture,
|
|
@@ -108,16 +120,16 @@ export function GestureViewer({
|
|
|
108
120
|
ref: listRef,
|
|
109
121
|
...commonProps,
|
|
110
122
|
...listProps,
|
|
111
|
-
children:
|
|
123
|
+
children: loopData.map((item, index) => renderItem({
|
|
112
124
|
item,
|
|
113
125
|
index
|
|
114
126
|
}))
|
|
115
127
|
}) : isFlatListLike(Component) && /*#__PURE__*/_jsx(Component, {
|
|
116
128
|
ref: listRef,
|
|
117
129
|
...commonProps,
|
|
118
|
-
data:
|
|
130
|
+
data: loopData,
|
|
119
131
|
renderItem: renderItem,
|
|
120
|
-
initialScrollIndex: initialIndex,
|
|
132
|
+
initialScrollIndex: enableLoop && data.length > 1 ? initialIndex + 1 : initialIndex,
|
|
121
133
|
keyExtractor: keyExtractor,
|
|
122
134
|
windowSize: 3,
|
|
123
135
|
maxToRenderPerBatch: 3,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","useMemo","Platform","StyleSheet","useWindowDimensions","View","Gesture","GestureDetector","GestureHandlerRootView","Animated","registry","useGestureViewer","isFlashListLike","isFlatListLike","isScrollViewLike","WebPagingFixStyle","jsx","_jsx","jsxs","_jsxs","GestureViewer","id","data","renderItem","renderItemProp","renderContainer","ListComponent","width","customWidth","listProps","backdropStyle","backdropStyleProps","containerStyle","initialIndex","itemSpacing","useSnap","props","Component","screenWidth","listRef","isZoomed","isRotated","dismissGesture","zoomGesture","onMomentumScrollEnd","animatedStyle","item","index","style","height","justifyContent","alignItems","marginHorizontal","children","getItemLayout","_","length","offset","
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useMemo","useRef","Platform","StyleSheet","useWindowDimensions","View","Gesture","GestureDetector","GestureHandlerRootView","Animated","registry","useGestureViewer","createLoopData","isFlashListLike","isFlatListLike","isScrollViewLike","WebPagingFixStyle","jsx","_jsx","jsxs","_jsxs","GestureViewer","id","data","renderItem","renderItemProp","renderContainer","ListComponent","width","customWidth","listProps","backdropStyle","backdropStyleProps","containerStyle","initialIndex","itemSpacing","useSnap","enableLoop","props","Component","dataRef","current","screenWidth","loopData","listRef","isZoomed","isRotated","dismissGesture","zoomGesture","onMomentumScrollEnd","onScrollBeginDrag","animatedStyle","keyExtractor","item","index","style","height","justifyContent","alignItems","marginHorizontal","children","getItemLayout","_","length","offset","gesture","Race","createManager","deleteManager","commonProps","horizontal","scrollEnabled","showsHorizontalScrollIndicator","snapToInterval","snapToAlignment","decelerationRate","pagingEnabled","scrollEventThrottle","removeClippedSubviews","listComponent","styles","container","background","content","OS","dataSet","ref","map","initialScrollIndex","windowSize","maxToRenderPerBatch","estimatedItemSize","create","flex","position","top","left","right","bottom","backgroundColor"],"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 { createBoundsConstraint } from "./utils.js";
|
|
4
|
+
import { createBoundsConstraint, createScrollAction } from "./utils.js";
|
|
5
5
|
class GestureViewerManager {
|
|
6
6
|
currentIndex = 0;
|
|
7
7
|
dataLength = 0;
|
|
@@ -13,9 +13,12 @@ class GestureViewerManager {
|
|
|
13
13
|
maxZoomScale = 2;
|
|
14
14
|
listRef = null;
|
|
15
15
|
enableSwipeGesture = true;
|
|
16
|
+
enableLoop = false;
|
|
16
17
|
listeners = new Set();
|
|
17
18
|
rotation = null;
|
|
18
19
|
eventListeners = new Map();
|
|
20
|
+
animationTimeout = null;
|
|
21
|
+
static LOOP_ANIMATION_DURATION = 300;
|
|
19
22
|
notifyListeners() {
|
|
20
23
|
const state = this.getState();
|
|
21
24
|
this.listeners.forEach(listener => listener(state));
|
|
@@ -65,6 +68,9 @@ class GestureViewerManager {
|
|
|
65
68
|
totalCount: this.dataLength
|
|
66
69
|
};
|
|
67
70
|
}
|
|
71
|
+
setEnableLoop(enabled) {
|
|
72
|
+
this.enableLoop = enabled;
|
|
73
|
+
}
|
|
68
74
|
setWidth(width) {
|
|
69
75
|
this.width = width;
|
|
70
76
|
}
|
|
@@ -168,34 +174,55 @@ class GestureViewerManager {
|
|
|
168
174
|
this.translateY.value = withTiming(0);
|
|
169
175
|
};
|
|
170
176
|
goToIndex = index => {
|
|
171
|
-
if (
|
|
177
|
+
if (!this.enableSwipeGesture || !this.listRef) {
|
|
172
178
|
return;
|
|
173
179
|
}
|
|
174
|
-
this.
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
180
|
+
this.cancelAnimation();
|
|
181
|
+
const {
|
|
182
|
+
scrollTo
|
|
183
|
+
} = createScrollAction(this.listRef, this.width);
|
|
184
|
+
if (this.enableLoop && this.dataLength > 1) {
|
|
185
|
+
if (index < 0) {
|
|
186
|
+
scrollTo(0, true);
|
|
187
|
+
this.animationTimeout = setTimeout(() => {
|
|
188
|
+
scrollTo(this.dataLength, false);
|
|
189
|
+
this.updateCurrentIndex(this.dataLength - 1);
|
|
190
|
+
}, GestureViewerManager.LOOP_ANIMATION_DURATION);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
if (index >= this.dataLength) {
|
|
194
|
+
scrollTo(this.dataLength + 1, true);
|
|
195
|
+
this.animationTimeout = setTimeout(() => {
|
|
196
|
+
scrollTo(1, false);
|
|
197
|
+
this.updateCurrentIndex(0);
|
|
198
|
+
}, GestureViewerManager.LOOP_ANIMATION_DURATION);
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
const scrollIndex = index + 1;
|
|
202
|
+
scrollTo(scrollIndex, true);
|
|
203
|
+
this.updateCurrentIndex(index);
|
|
204
|
+
return;
|
|
185
205
|
}
|
|
186
|
-
this.
|
|
206
|
+
if (index < 0 || index >= this.dataLength) {
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
scrollTo(index, true);
|
|
210
|
+
this.updateCurrentIndex(index);
|
|
187
211
|
};
|
|
188
|
-
|
|
189
|
-
if (this.
|
|
190
|
-
|
|
212
|
+
cancelAnimation = () => {
|
|
213
|
+
if (this.animationTimeout) {
|
|
214
|
+
clearTimeout(this.animationTimeout);
|
|
215
|
+
this.animationTimeout = null;
|
|
191
216
|
}
|
|
192
217
|
};
|
|
218
|
+
goToPrevious = () => {
|
|
219
|
+
this.goToIndex(this.currentIndex - 1);
|
|
220
|
+
};
|
|
193
221
|
goToNext = () => {
|
|
194
|
-
|
|
195
|
-
this.goToIndex(this.currentIndex + 1);
|
|
196
|
-
}
|
|
222
|
+
this.goToIndex(this.currentIndex + 1);
|
|
197
223
|
};
|
|
198
224
|
cleanUp() {
|
|
225
|
+
this.cancelAnimation();
|
|
199
226
|
this.listeners.clear();
|
|
200
227
|
this.listRef = null;
|
|
201
228
|
this.enableSwipeGesture = true;
|
|
@@ -208,6 +235,10 @@ class GestureViewerManager {
|
|
|
208
235
|
this.rotation = null;
|
|
209
236
|
this.eventListeners.clear();
|
|
210
237
|
}
|
|
238
|
+
updateCurrentIndex = targetIndex => {
|
|
239
|
+
this.currentIndex = targetIndex;
|
|
240
|
+
this.notifyListeners();
|
|
241
|
+
};
|
|
211
242
|
}
|
|
212
243
|
export default GestureViewerManager;
|
|
213
244
|
//# sourceMappingURL=GestureViewerManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["withTiming","createBoundsConstraint","GestureViewerManager","currentIndex","dataLength","width","height","scale","translateX","translateY","maxZoomScale","listRef","enableSwipeGesture","listeners","Set","rotation","eventListeners","Map","notifyListeners","state","getState","forEach","listener","subscribe","add","delete","addEventListener","eventType","callback","has","set","get","size","emitEvent","data","emitZoomChange","previousScale","emitRotationChange","previousRotation","totalCount","setWidth","setHeight","setListRef","ref","setDataLength","length","setEnableSwipeGesture","
|
|
1
|
+
{"version":3,"names":["withTiming","createBoundsConstraint","createScrollAction","GestureViewerManager","currentIndex","dataLength","width","height","scale","translateX","translateY","maxZoomScale","listRef","enableSwipeGesture","enableLoop","listeners","Set","rotation","eventListeners","Map","animationTimeout","LOOP_ANIMATION_DURATION","notifyListeners","state","getState","forEach","listener","subscribe","add","delete","addEventListener","eventType","callback","has","set","get","size","emitEvent","data","emitZoomChange","previousScale","emitRotationChange","previousRotation","totalCount","setEnableLoop","enabled","setWidth","setHeight","setListRef","ref","setDataLength","length","setEnableSwipeGesture","setCurrentIndex","index","setZoomSharedValues","notifyStateChange","setRotation","rotate","angle","clockwise","MAX_ANGLE","value","nextAngle","Math","floor","zoomIn","multiplier","nextScale","min","zoomOut","max","resetZoom","goToIndex","cancelAnimation","scrollTo","setTimeout","updateCurrentIndex","scrollIndex","clearTimeout","goToPrevious","goToNext","cleanUp","clear","targetIndex"],"sourceRoot":"../../src","sources":["GestureViewerManager.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -5,7 +5,7 @@ import { InteractionManager, useWindowDimensions } from 'react-native';
|
|
|
5
5
|
import { Gesture } from 'react-native-gesture-handler';
|
|
6
6
|
import { Easing, interpolate, runOnJS, useAnimatedReaction, useAnimatedStyle, useSharedValue, withSpring, withTiming } from 'react-native-reanimated';
|
|
7
7
|
import { registry } from "./GestureViewerRegistry.js";
|
|
8
|
-
import { createBoundsConstraint } from "./utils.js";
|
|
8
|
+
import { createBoundsConstraint, createScrollAction, getLoopAdjustedIndex } from "./utils.js";
|
|
9
9
|
export const useGestureViewer = ({
|
|
10
10
|
data,
|
|
11
11
|
initialIndex = 0,
|
|
@@ -22,6 +22,7 @@ export const useGestureViewer = ({
|
|
|
22
22
|
enableZoomGesture = true,
|
|
23
23
|
enableDoubleTapGesture = true,
|
|
24
24
|
enableZoomPanGesture = true,
|
|
25
|
+
enableLoop = false,
|
|
25
26
|
maxZoomScale = 2,
|
|
26
27
|
itemSpacing = 0,
|
|
27
28
|
useSnap = false,
|
|
@@ -47,10 +48,20 @@ export const useGestureViewer = ({
|
|
|
47
48
|
const rotation = useSharedValue(0);
|
|
48
49
|
const listRef = useRef(null);
|
|
49
50
|
const dataLength = data?.length || 0;
|
|
51
|
+
const adjustedInitialIndex = useMemo(() => {
|
|
52
|
+
if (enableLoop && data.length > 1) {
|
|
53
|
+
return initialIndex + 1;
|
|
54
|
+
}
|
|
55
|
+
return initialIndex;
|
|
56
|
+
}, [enableLoop, data.length, initialIndex]);
|
|
50
57
|
const constrainTranslation = useMemo(() => createBoundsConstraint({
|
|
51
58
|
width,
|
|
52
59
|
height: screenHeight
|
|
53
60
|
}), [width, screenHeight]);
|
|
61
|
+
const scrollTo = useCallback((index, animated) => {
|
|
62
|
+
const scrollAction = createScrollAction(listRef.current, width + itemSpacing);
|
|
63
|
+
return scrollAction.scrollTo(index, animated);
|
|
64
|
+
}, [width, itemSpacing]);
|
|
54
65
|
const emitZoomChange = useCallback((currentScale, prevScale) => {
|
|
55
66
|
manager?.emitZoomChange(currentScale, prevScale);
|
|
56
67
|
}, [manager]);
|
|
@@ -100,8 +111,9 @@ export const useGestureViewer = ({
|
|
|
100
111
|
manager.setHeight(screenHeight);
|
|
101
112
|
manager.setZoomSharedValues(scale, translateX, translateY, maxZoomScale);
|
|
102
113
|
manager.setRotation(rotation);
|
|
114
|
+
manager.setEnableLoop(enableLoop);
|
|
103
115
|
manager.notifyStateChange();
|
|
104
|
-
}, [dataLength, enableSwipeGesture, initialIndex, manager, width, itemSpacing, maxZoomScale, scale, screenHeight, translateX, translateY, rotation]);
|
|
116
|
+
}, [dataLength, enableSwipeGesture, initialIndex, manager, width, itemSpacing, maxZoomScale, enableLoop, scale, screenHeight, translateX, translateY, rotation]);
|
|
105
117
|
useEffect(() => {
|
|
106
118
|
if (!manager || !listRef.current) {
|
|
107
119
|
return;
|
|
@@ -118,36 +130,34 @@ export const useGestureViewer = ({
|
|
|
118
130
|
backdropOpacity.value = 1;
|
|
119
131
|
startScale.value = 1;
|
|
120
132
|
rotation.value = 0;
|
|
121
|
-
if (
|
|
133
|
+
if (adjustedInitialIndex <= 0 || !listRef.current) {
|
|
122
134
|
return;
|
|
123
135
|
}
|
|
124
136
|
const runAfterInteractions = InteractionManager.runAfterInteractions(() => {
|
|
125
|
-
|
|
126
|
-
listRef.current.scrollToIndex({
|
|
127
|
-
index: initialIndex,
|
|
128
|
-
animated: false
|
|
129
|
-
});
|
|
130
|
-
} else if (listRef.current.scrollTo) {
|
|
131
|
-
listRef.current.scrollTo({
|
|
132
|
-
x: initialIndex * (width + itemSpacing),
|
|
133
|
-
animated: false
|
|
134
|
-
});
|
|
135
|
-
}
|
|
137
|
+
scrollTo(adjustedInitialIndex, false);
|
|
136
138
|
});
|
|
137
139
|
return () => {
|
|
138
140
|
runAfterInteractions?.cancel();
|
|
139
141
|
};
|
|
140
|
-
}, [
|
|
142
|
+
}, [adjustedInitialIndex, translateY, backdropOpacity, translateX, scale, startScale, rotation, scrollTo]);
|
|
141
143
|
const onMomentumScrollEnd = useCallback(event => {
|
|
142
144
|
if (!enableSwipeGesture) {
|
|
143
145
|
return;
|
|
144
146
|
}
|
|
145
147
|
const contentOffset = event.nativeEvent.contentOffset;
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
+
const scrollIndex = Math.round(contentOffset.x / (width + itemSpacing));
|
|
149
|
+
const {
|
|
150
|
+
realIndex,
|
|
151
|
+
needsJump,
|
|
152
|
+
jumpToIndex
|
|
153
|
+
} = getLoopAdjustedIndex(scrollIndex, dataLength, enableLoop);
|
|
154
|
+
if (needsJump && jumpToIndex !== undefined) {
|
|
155
|
+
scrollTo(jumpToIndex, false);
|
|
156
|
+
}
|
|
157
|
+
if (realIndex !== currentIndex && realIndex >= 0 && realIndex < dataLength) {
|
|
148
158
|
if (manager) {
|
|
149
|
-
manager.setCurrentIndex(
|
|
150
|
-
setCurrentIndex(
|
|
159
|
+
manager.setCurrentIndex(realIndex);
|
|
160
|
+
setCurrentIndex(realIndex);
|
|
151
161
|
manager.notifyStateChange();
|
|
152
162
|
}
|
|
153
163
|
translateX.value = withTiming(0);
|
|
@@ -158,7 +168,7 @@ export const useGestureViewer = ({
|
|
|
158
168
|
scale.value = withTiming(1);
|
|
159
169
|
rotation.value = 0;
|
|
160
170
|
}
|
|
161
|
-
}, [manager, currentIndex, dataLength, width, itemSpacing, enableSwipeGesture, translateX, translateY, scale, initialTranslateX, initialTranslateY, startScale, rotation]);
|
|
171
|
+
}, [scrollTo, manager, currentIndex, dataLength, width, itemSpacing, enableSwipeGesture, enableLoop, translateX, translateY, scale, initialTranslateX, initialTranslateY, startScale, rotation]);
|
|
162
172
|
const dismissGesture = useMemo(() => {
|
|
163
173
|
return Gesture.Pan().minDistance(10).averageTouches(true).activeCursor('grabbing').activeOffsetY([-10, 10]).failOffsetX([-10, 10]).enabled(!isZoomed).onUpdate(event => {
|
|
164
174
|
translateY.value = event.translationY / resistance;
|
|
@@ -324,6 +334,9 @@ export const useGestureViewer = ({
|
|
|
324
334
|
opacity
|
|
325
335
|
};
|
|
326
336
|
}, [animateBackdrop]);
|
|
337
|
+
const onScrollBeginDrag = useCallback(() => {
|
|
338
|
+
manager?.cancelAnimation();
|
|
339
|
+
}, [manager]);
|
|
327
340
|
return {
|
|
328
341
|
currentIndex,
|
|
329
342
|
dataLength,
|
|
@@ -334,6 +347,7 @@ export const useGestureViewer = ({
|
|
|
334
347
|
dismissGesture,
|
|
335
348
|
zoomGesture,
|
|
336
349
|
onMomentumScrollEnd,
|
|
350
|
+
onScrollBeginDrag,
|
|
337
351
|
animatedStyle,
|
|
338
352
|
backdropStyle
|
|
339
353
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","InteractionManager","useWindowDimensions","Gesture","Easing","interpolate","runOnJS","useAnimatedReaction","useAnimatedStyle","useSharedValue","withSpring","withTiming","registry","createBoundsConstraint","useGestureViewer","data","initialIndex","onIndexChange","onDismiss","width","customWidth","dismissThreshold","resistance","animateBackdrop","enableDismissGesture","enableSwipeGesture","enableZoomGesture","enableDoubleTapGesture","enableZoomPanGesture","maxZoomScale","itemSpacing","useSnap","id","screenWidth","height","screenHeight","isZoomed","setIsZoomed","isRotated","setIsRotated","currentIndex","setCurrentIndex","manager","setManager","unsubscribeRef","initialTranslateY","initialTranslateX","startScale","translateY","translateX","scale","backdropOpacity","rotation","listRef","dataLength","length","constrainTranslation","emitZoomChange","currentScale","prevScale","emitRotationChange","currentRotation","prevRotation","value","previousScale","previousRotation","handleManagerChange","current","getState","subscribe","state","unsubscribeFromRegistry","subscribeToManager","setDataLength","setEnableSwipeGesture","setWidth","setHeight","setZoomSharedValues","setRotation","notifyStateChange","setListRef","runAfterInteractions","scrollToIndex","index","animated","scrollTo","x","cancel","onMomentumScrollEnd","event","contentOffset","nativeEvent","newIndex","Math","round","dismissGesture","Pan","minDistance","averageTouches","activeCursor","activeOffsetY","failOffsetX","enabled","onUpdate","translationY","onEnd","damping","stiffness","zoomPinchGesture","Pinch","onBegin","newScale","deltaScale","centerX","focalX","centerY","focalY","newTranslateX","newTranslateY","constrainedTranslateX","constrainedTranslateY","duration","easing","bezier","zoomPanGesture","translationX","doubleTapGesture","Tap","numberOfTaps","nextScale","y","zoomGesture","Race","Exclusive","animatedStyle","transform","rotate","backdropStyle","opacity"],"sourceRoot":"../../src","sources":["useGestureViewer.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","InteractionManager","useWindowDimensions","Gesture","Easing","interpolate","runOnJS","useAnimatedReaction","useAnimatedStyle","useSharedValue","withSpring","withTiming","registry","createBoundsConstraint","createScrollAction","getLoopAdjustedIndex","useGestureViewer","data","initialIndex","onIndexChange","onDismiss","width","customWidth","dismissThreshold","resistance","animateBackdrop","enableDismissGesture","enableSwipeGesture","enableZoomGesture","enableDoubleTapGesture","enableZoomPanGesture","enableLoop","maxZoomScale","itemSpacing","useSnap","id","screenWidth","height","screenHeight","isZoomed","setIsZoomed","isRotated","setIsRotated","currentIndex","setCurrentIndex","manager","setManager","unsubscribeRef","initialTranslateY","initialTranslateX","startScale","translateY","translateX","scale","backdropOpacity","rotation","listRef","dataLength","length","adjustedInitialIndex","constrainTranslation","scrollTo","index","animated","scrollAction","current","emitZoomChange","currentScale","prevScale","emitRotationChange","currentRotation","prevRotation","value","previousScale","previousRotation","handleManagerChange","getState","subscribe","state","unsubscribeFromRegistry","subscribeToManager","setDataLength","setEnableSwipeGesture","setWidth","setHeight","setZoomSharedValues","setRotation","setEnableLoop","notifyStateChange","setListRef","runAfterInteractions","cancel","onMomentumScrollEnd","event","contentOffset","nativeEvent","scrollIndex","Math","round","x","realIndex","needsJump","jumpToIndex","undefined","dismissGesture","Pan","minDistance","averageTouches","activeCursor","activeOffsetY","failOffsetX","enabled","onUpdate","translationY","onEnd","damping","stiffness","zoomPinchGesture","Pinch","onBegin","newScale","deltaScale","centerX","focalX","centerY","focalY","newTranslateX","newTranslateY","constrainedTranslateX","constrainedTranslateY","duration","easing","bezier","zoomPanGesture","translationX","doubleTapGesture","Tap","numberOfTaps","nextScale","y","zoomGesture","Race","Exclusive","animatedStyle","transform","rotate","backdropStyle","opacity","onScrollBeginDrag","cancelAnimation"],"sourceRoot":"../../src","sources":["useGestureViewer.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/utils.js
CHANGED
|
@@ -45,4 +45,56 @@ export const createBoundsConstraint = ({
|
|
|
45
45
|
translateY: Math.max(-maxTranslateY, Math.min(maxTranslateY, translateY))
|
|
46
46
|
};
|
|
47
47
|
};
|
|
48
|
+
export const createLoopData = (dataRef, enableLoop) => {
|
|
49
|
+
const data = dataRef.current;
|
|
50
|
+
if (!enableLoop || !data?.length || data.length <= 1) {
|
|
51
|
+
return data;
|
|
52
|
+
}
|
|
53
|
+
const lastItem = data[data.length - 1];
|
|
54
|
+
const firstItem = data[0];
|
|
55
|
+
if (lastItem === undefined || firstItem === undefined) {
|
|
56
|
+
return data;
|
|
57
|
+
}
|
|
58
|
+
return [lastItem, ...data, firstItem];
|
|
59
|
+
};
|
|
60
|
+
export const getLoopAdjustedIndex = (scrollIndex, originalDataLength, enableLoop) => {
|
|
61
|
+
if (!enableLoop || originalDataLength <= 1) {
|
|
62
|
+
return {
|
|
63
|
+
realIndex: scrollIndex,
|
|
64
|
+
needsJump: false
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
if (scrollIndex === 0) {
|
|
68
|
+
return {
|
|
69
|
+
realIndex: originalDataLength - 1,
|
|
70
|
+
needsJump: true,
|
|
71
|
+
jumpToIndex: originalDataLength
|
|
72
|
+
};
|
|
73
|
+
} else if (scrollIndex === originalDataLength + 1) {
|
|
74
|
+
return {
|
|
75
|
+
realIndex: 0,
|
|
76
|
+
needsJump: true,
|
|
77
|
+
jumpToIndex: 1
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
realIndex: scrollIndex - 1,
|
|
82
|
+
needsJump: false
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
export const createScrollAction = (listRef, width) => ({
|
|
86
|
+
scrollTo: (index, animated) => {
|
|
87
|
+
if (listRef?.scrollToIndex) {
|
|
88
|
+
listRef.scrollToIndex({
|
|
89
|
+
index,
|
|
90
|
+
animated
|
|
91
|
+
});
|
|
92
|
+
} else if (listRef?.scrollTo) {
|
|
93
|
+
listRef.scrollTo({
|
|
94
|
+
x: index * width,
|
|
95
|
+
animated
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
});
|
|
48
100
|
//# sourceMappingURL=utils.js.map
|
package/lib/module/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["FlatList","RNFlatList","ScrollView","RNScrollView","GestureFlatList","GestureScrollView","isScrollViewLike","component","isFlatListLike","isFlashListLike","FlashList","require","name","createBoundsConstraint","width","height","scale","translateX","translateY","maxTranslateX","maxTranslateY","Math","max","min"],"sourceRoot":"../../src","sources":["utils.ts"],"mappings":";;AAAA,SAASA,QAAQ,IAAIC,UAAU,EAAEC,UAAU,IAAIC,YAAY,QAAQ,cAAc;AACjF,SAASH,QAAQ,IAAII,eAAe,EAAEF,UAAU,IAAIG,iBAAiB,QAAQ,8BAA8B;AAG3G,OAAO,MAAMC,gBAAgB,GAAIC,SAAc,IAAuC;EACpF,OAAOA,SAAS,KAAKJ,YAAY,IAAII,SAAS,KAAKF,iBAAiB;AACtE,CAAC;AAED,OAAO,MAAMG,cAAc,GAAID,SAAc,IAAqC;EAChF,IAAIA,SAAS,KAAKN,UAAU,IAAIM,SAAS,KAAKH,eAAe,IAAIK,eAAe,CAACF,SAAS,CAAC,EAAE;IAC3F,OAAO,IAAI;EACb;EAEA,OAAO,KAAK;AACd,CAAC;AAED,OAAO,MAAME,eAAe,GAAIF,SAAc,IAAuB;EACnE,IAAI;IACF,MAAMG,SAAS,GAAGC,OAAO,CAAC,qBAAqB,CAAC,EAAED,SAAS;IAE3D,IAAIA,SAAS,IAAIH,SAAS,KAAKG,SAAS,EAAE;MACxC,OAAO,IAAI;IACb;EACF,CAAC,CAAC,MAAM;IACN;EAAA;EAGF,OAAOH,SAAS,EAAEK,IAAI,KAAK,WAAW;AACxC,CAAC;AAED,OAAO,MAAMC,sBAAsB,GACjCA,CAAC;EAAEC,KAAK;EAAEC;AAA0C,CAAC,KACrD,CAAC;EAAEC,KAAK;EAAEC,UAAU;EAAEC;AAAsE,CAAC,KAAK;EAChG,SAAS;;EAET,IAAIF,KAAK,IAAI,CAAC,EAAE;IACd,OAAO;MACLC,UAAU;MACVC;IACF,CAAC;EACH;EAEA,MAAMC,aAAa,GAAG,CAACL,KAAK,GAAGE,KAAK,GAAGF,KAAK,IAAI,CAAC;EACjD,MAAMM,aAAa,GAAG,CAACL,MAAM,GAAGC,KAAK,GAAGD,MAAM,IAAI,CAAC;EAEnD,OAAO;IACLE,UAAU,EAAEI,IAAI,CAACC,GAAG,CAAC,CAACH,aAAa,EAAEE,IAAI,CAACE,GAAG,CAACJ,aAAa,EAAEF,UAAU,CAAC,CAAC;IACzEC,UAAU,EAAEG,IAAI,CAACC,GAAG,CAAC,CAACF,aAAa,EAAEC,IAAI,CAACE,GAAG,CAACH,aAAa,EAAEF,UAAU,CAAC;EAC1E,CAAC;AACH,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["FlatList","RNFlatList","ScrollView","RNScrollView","GestureFlatList","GestureScrollView","isScrollViewLike","component","isFlatListLike","isFlashListLike","FlashList","require","name","createBoundsConstraint","width","height","scale","translateX","translateY","maxTranslateX","maxTranslateY","Math","max","min","createLoopData","dataRef","enableLoop","data","current","length","lastItem","firstItem","undefined","getLoopAdjustedIndex","scrollIndex","originalDataLength","realIndex","needsJump","jumpToIndex","createScrollAction","listRef","scrollTo","index","animated","scrollToIndex","x"],"sourceRoot":"../../src","sources":["utils.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type FlatList } from 'react-native';
|
|
2
2
|
import type { GestureViewerProps } from './types';
|
|
3
|
-
export declare function GestureViewer<T = any, LC = typeof FlatList>({ id, data, renderItem: renderItemProp, renderContainer, ListComponent, width: customWidth, listProps, backdropStyle: backdropStyleProps, containerStyle, initialIndex, itemSpacing, useSnap, ...props }: GestureViewerProps<T, LC>): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
export declare function GestureViewer<T = any, LC = typeof FlatList>({ id, data, renderItem: renderItemProp, renderContainer, ListComponent, width: customWidth, listProps, backdropStyle: backdropStyleProps, containerStyle, initialIndex, itemSpacing, useSnap, enableLoop, ...props }: GestureViewerProps<T, LC>): import("react/jsx-runtime").JSX.Element;
|
|
4
4
|
//# sourceMappingURL=GestureViewer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GestureViewer.d.ts","sourceRoot":"","sources":["../../../src/GestureViewer.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAyE,MAAM,cAAc,CAAC;AAIpH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAKlD,wBAAgB,aAAa,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,GAAG,OAAO,QAAQ,EAAE,EAC3D,EAAc,EACd,IAAI,EACJ,UAAU,EAAE,cAAc,EAC1B,eAAe,EACf,aAAa,EACb,KAAK,EAAE,WAAW,EAClB,SAAS,EACT,aAAa,EAAE,kBAAkB,EACjC,cAAc,EACd,YAAgB,EAChB,WAAe,EACf,OAAe,EACf,GAAG,KAAK,EACT,EAAE,kBAAkB,CAAC,CAAC,EAAE,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"GestureViewer.d.ts","sourceRoot":"","sources":["../../../src/GestureViewer.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAyE,MAAM,cAAc,CAAC;AAIpH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAKlD,wBAAgB,aAAa,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,GAAG,OAAO,QAAQ,EAAE,EAC3D,EAAc,EACd,IAAI,EACJ,UAAU,EAAE,cAAc,EAC1B,eAAe,EACf,aAAa,EACb,KAAK,EAAE,WAAW,EAClB,SAAS,EACT,aAAa,EAAE,kBAAkB,EACjC,cAAc,EACd,YAAgB,EAChB,WAAe,EACf,OAAe,EACf,UAAkB,EAClB,GAAG,KAAK,EACT,EAAE,kBAAkB,CAAC,CAAC,EAAE,EAAE,CAAC,2CAsJ3B"}
|
|
@@ -11,9 +11,12 @@ declare class GestureViewerManager {
|
|
|
11
11
|
private maxZoomScale;
|
|
12
12
|
private listRef;
|
|
13
13
|
private enableSwipeGesture;
|
|
14
|
+
private enableLoop;
|
|
14
15
|
private listeners;
|
|
15
16
|
private rotation;
|
|
16
17
|
private eventListeners;
|
|
18
|
+
private animationTimeout;
|
|
19
|
+
private static readonly LOOP_ANIMATION_DURATION;
|
|
17
20
|
private notifyListeners;
|
|
18
21
|
subscribe(listener: (state: GestureViewerControllerState) => void): () => void;
|
|
19
22
|
addEventListener<T extends GestureViewerEventType>(eventType: T, callback: GestureViewerEventCallback<T>): () => void;
|
|
@@ -24,6 +27,7 @@ declare class GestureViewerManager {
|
|
|
24
27
|
currentIndex: number;
|
|
25
28
|
totalCount: number;
|
|
26
29
|
};
|
|
30
|
+
setEnableLoop(enabled: boolean): void;
|
|
27
31
|
setWidth(width: number): void;
|
|
28
32
|
setHeight(height: number): void;
|
|
29
33
|
setListRef(ref: any): void;
|
|
@@ -38,9 +42,11 @@ declare class GestureViewerManager {
|
|
|
38
42
|
zoomOut: (multiplier?: number) => void;
|
|
39
43
|
resetZoom: (scale?: number) => void;
|
|
40
44
|
goToIndex: (index: number) => void;
|
|
45
|
+
cancelAnimation: () => void;
|
|
41
46
|
goToPrevious: () => void;
|
|
42
47
|
goToNext: () => void;
|
|
43
48
|
cleanUp(): void;
|
|
49
|
+
private updateCurrentIndex;
|
|
44
50
|
}
|
|
45
51
|
export default GestureViewerManager;
|
|
46
52
|
//# sourceMappingURL=GestureViewerManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GestureViewerManager.d.ts","sourceRoot":"","sources":["../../../src/GestureViewerManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAc,MAAM,yBAAyB,CAAC;AACvE,OAAO,KAAK,EACV,4BAA4B,EAC5B,0BAA0B,EAE1B,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAGjB,cAAM,oBAAoB;IACxB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,SAAS,CAA4D;IAC7E,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,cAAc,CAA+D;
|
|
1
|
+
{"version":3,"file":"GestureViewerManager.d.ts","sourceRoot":"","sources":["../../../src/GestureViewerManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAc,MAAM,yBAAyB,CAAC;AACvE,OAAO,KAAK,EACV,4BAA4B,EAC5B,0BAA0B,EAE1B,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAGjB,cAAM,oBAAoB;IACxB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAA4D;IAC7E,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,cAAc,CAA+D;IACrF,OAAO,CAAC,gBAAgB,CAA+B;IAEvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAO;IAEtD,OAAO,CAAC,eAAe;IAMvB,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,4BAA4B,KAAK,IAAI;IAQjE,gBAAgB,CAAC,CAAC,SAAS,sBAAsB,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAC,CAAC;IAoBxG,OAAO,CAAC,SAAS;IAQjB,cAAc,GAAI,OAAO,MAAM,EAAE,eAAe,MAAM,GAAG,IAAI,UAE3D;IAEF,kBAAkB,GAAI,UAAU,MAAM,EAAE,kBAAkB,MAAM,GAAG,IAAI,UAErE;IAEF,QAAQ;;;;IAOR,aAAa,CAAC,OAAO,EAAE,OAAO;IAI9B,QAAQ,CAAC,KAAK,EAAE,MAAM;IAItB,SAAS,CAAC,MAAM,EAAE,MAAM;IAIxB,UAAU,CAAC,GAAG,EAAE,GAAG;IAInB,aAAa,CAAC,MAAM,EAAE,MAAM;IAI5B,qBAAqB,CAAC,OAAO,EAAE,OAAO;IAItC,eAAe,CAAC,KAAK,EAAE,MAAM;IAM7B,mBAAmB,CACjB,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,EAC1B,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,EAC/B,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,EAC/B,YAAY,EAAE,MAAM;IAQtB,iBAAiB;IAIjB,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC;IAIzC,MAAM,GAAI,QAAO,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAQ,EAAE,mBAAgB,UA2B9D;IAEF,MAAM,GAAI,mBAAiB,UAoBzB;IAEF,OAAO,GAAI,mBAAiB,UA0B1B;IAEF,SAAS,GAAI,cAAS,UAQpB;IAEF,SAAS,GAAI,OAAO,MAAM,UA4CxB;IAEF,eAAe,aAKb;IAEF,YAAY,aAEV;IAEF,QAAQ,aAEN;IAEF,OAAO;IAeP,OAAO,CAAC,kBAAkB,CAGxB;CACH;AAED,eAAe,oBAAoB,CAAC"}
|
|
@@ -120,6 +120,11 @@ export interface GestureViewerProps<T = any, LC = typeof RNFlatList> {
|
|
|
120
120
|
* @defaultValue true
|
|
121
121
|
*/
|
|
122
122
|
enableDoubleTapGesture?: boolean;
|
|
123
|
+
/**
|
|
124
|
+
* Enables infinite loop navigation.
|
|
125
|
+
* @defaultValue false
|
|
126
|
+
*/
|
|
127
|
+
enableLoop?: boolean;
|
|
123
128
|
/**
|
|
124
129
|
* The maximum zoom scale.
|
|
125
130
|
* @defaultValue 2
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type NativeScrollEvent, type NativeSyntheticEvent } from 'react-native';
|
|
2
2
|
import type { GestureViewerProps } from './types';
|
|
3
3
|
type UseGestureViewerProps<T = any> = Omit<GestureViewerProps<T>, 'renderItem' | 'renderContainer' | 'ListComponent' | 'listProps' | 'containerStyle' | 'backdropStyle'>;
|
|
4
|
-
export declare const useGestureViewer: <T = any>({ data, initialIndex, onIndexChange, onDismiss, width: customWidth, dismissThreshold, resistance, animateBackdrop, enableDismissGesture, enableSwipeGesture, enableZoomGesture, enableDoubleTapGesture, enableZoomPanGesture, maxZoomScale, itemSpacing, useSnap, id, }: UseGestureViewerProps<T>) => {
|
|
4
|
+
export declare const useGestureViewer: <T = any>({ data, initialIndex, onIndexChange, onDismiss, width: customWidth, dismissThreshold, resistance, animateBackdrop, enableDismissGesture, enableSwipeGesture, enableZoomGesture, enableDoubleTapGesture, enableZoomPanGesture, enableLoop, maxZoomScale, itemSpacing, useSnap, id, }: UseGestureViewerProps<T>) => {
|
|
5
5
|
currentIndex: number;
|
|
6
6
|
dataLength: number;
|
|
7
7
|
translateY: import("react-native-reanimated").SharedValue<number>;
|
|
@@ -11,6 +11,7 @@ export declare const useGestureViewer: <T = any>({ data, initialIndex, onIndexCh
|
|
|
11
11
|
dismissGesture: import("react-native-gesture-handler/lib/typescript/handlers/gestures/panGesture").PanGesture;
|
|
12
12
|
zoomGesture: import("react-native-gesture-handler/lib/typescript/handlers/gestures/gestureComposition").ComposedGesture;
|
|
13
13
|
onMomentumScrollEnd: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;
|
|
14
|
+
onScrollBeginDrag: () => void;
|
|
14
15
|
animatedStyle: {
|
|
15
16
|
transform: ({
|
|
16
17
|
translateY: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGestureViewer.d.ts","sourceRoot":"","sources":["../../../src/useGestureViewer.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAE1B,MAAM,cAAc,CAAC;AActB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAGlD,KAAK,qBAAqB,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CACxC,kBAAkB,CAAC,CAAC,CAAC,EACrB,YAAY,GAAG,iBAAiB,GAAG,eAAe,GAAG,WAAW,GAAG,gBAAgB,GAAG,eAAe,CACtG,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,CAAC,GAAG,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"useGestureViewer.d.ts","sourceRoot":"","sources":["../../../src/useGestureViewer.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAE1B,MAAM,cAAc,CAAC;AActB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAGlD,KAAK,qBAAqB,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CACxC,kBAAkB,CAAC,CAAC,CAAC,EACrB,YAAY,GAAG,iBAAiB,GAAG,eAAe,GAAG,WAAW,GAAG,gBAAgB,GAAG,eAAe,CACtG,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,CAAC,GAAG,GAAG,EAAE,qRAqBvC,qBAAqB,CAAC,CAAC,CAAC;;;;;;;;;iCA6Kf,oBAAoB,CAAC,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyRlD,CAAC"}
|
|
@@ -13,4 +13,13 @@ export declare const createBoundsConstraint: ({ width, height }: {
|
|
|
13
13
|
translateX: number;
|
|
14
14
|
translateY: number;
|
|
15
15
|
};
|
|
16
|
+
export declare const createLoopData: <T>(dataRef: React.RefObject<T[]>, enableLoop: boolean) => T[];
|
|
17
|
+
export declare const getLoopAdjustedIndex: (scrollIndex: number, originalDataLength: number, enableLoop: boolean) => {
|
|
18
|
+
realIndex: number;
|
|
19
|
+
needsJump: boolean;
|
|
20
|
+
jumpToIndex?: number;
|
|
21
|
+
};
|
|
22
|
+
export declare const createScrollAction: (listRef: any, width: number) => {
|
|
23
|
+
scrollTo: (index: number, animated: boolean) => void;
|
|
24
|
+
};
|
|
16
25
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEtE,eAAO,MAAM,gBAAgB,GAAI,WAAW,GAAG,KAAG,SAAS,IAAI,mBAE9D,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,WAAW,GAAG,KAAG,SAAS,IAAI,iBAM5D,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,WAAW,GAAG,KAAG,SAAS,IAAI,GAY7D,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAChC,mBAAmB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,MACpD,mCAAmC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;;;CAiB5F,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEtE,eAAO,MAAM,gBAAgB,GAAI,WAAW,GAAG,KAAG,SAAS,IAAI,mBAE9D,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,WAAW,GAAG,KAAG,SAAS,IAAI,iBAM5D,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,WAAW,GAAG,KAAG,SAAS,IAAI,GAY7D,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAChC,mBAAmB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,MACpD,mCAAmC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;;;CAiB5F,CAAC;AAEJ,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,SAAS,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,OAAO,KAAG,CAAC,EAevF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,aAAa,MAAM,EACnB,oBAAoB,MAAM,EAC1B,YAAY,OAAO,KAClB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAoB/D,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,SAAS,GAAG,EAAE,OAAO,MAAM;sBAC1C,MAAM,YAAY,OAAO;CAO3C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-gesture-image-viewer",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "🖼️ A highly customizable and easy-to-use React Native image viewer with gesture support and external controls",
|
|
5
5
|
"main": "./lib/module/index.js",
|
|
6
6
|
"types": "./lib/typescript/src/index.d.ts",
|
package/src/GestureViewer.tsx
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { useCallback, useEffect, useMemo } from 'react';
|
|
1
|
+
import { useCallback, useEffect, useMemo, useRef } from 'react';
|
|
2
2
|
import { type FlatList, Platform, type ScrollViewProps, StyleSheet, useWindowDimensions, View } from 'react-native';
|
|
3
3
|
import { Gesture, GestureDetector, GestureHandlerRootView } from 'react-native-gesture-handler';
|
|
4
4
|
import Animated from 'react-native-reanimated';
|
|
5
5
|
import { registry } from './GestureViewerRegistry';
|
|
6
6
|
import type { GestureViewerProps } from './types';
|
|
7
7
|
import { useGestureViewer } from './useGestureViewer';
|
|
8
|
-
import { isFlashListLike, isFlatListLike, isScrollViewLike } from './utils';
|
|
8
|
+
import { createLoopData, isFlashListLike, isFlatListLike, isScrollViewLike } from './utils';
|
|
9
9
|
import WebPagingFixStyle from './WebPagingFixStyle';
|
|
10
10
|
|
|
11
11
|
export function GestureViewer<T = any, LC = typeof FlatList>({
|
|
@@ -21,14 +21,20 @@ export function GestureViewer<T = any, LC = typeof FlatList>({
|
|
|
21
21
|
initialIndex = 0,
|
|
22
22
|
itemSpacing = 0,
|
|
23
23
|
useSnap = false,
|
|
24
|
+
enableLoop = false,
|
|
24
25
|
...props
|
|
25
26
|
}: GestureViewerProps<T, LC>) {
|
|
26
27
|
const Component = ListComponent as React.ComponentType<any>;
|
|
27
28
|
|
|
29
|
+
const dataRef = useRef(data);
|
|
30
|
+
dataRef.current = data;
|
|
31
|
+
|
|
28
32
|
const { width: screenWidth } = useWindowDimensions();
|
|
29
33
|
|
|
30
34
|
const width = useSnap ? customWidth || screenWidth : screenWidth;
|
|
31
35
|
|
|
36
|
+
const loopData = useMemo(() => createLoopData(dataRef, enableLoop), [enableLoop]);
|
|
37
|
+
|
|
32
38
|
const {
|
|
33
39
|
listRef,
|
|
34
40
|
isZoomed,
|
|
@@ -36,6 +42,7 @@ export function GestureViewer<T = any, LC = typeof FlatList>({
|
|
|
36
42
|
dismissGesture,
|
|
37
43
|
zoomGesture,
|
|
38
44
|
onMomentumScrollEnd,
|
|
45
|
+
onScrollBeginDrag,
|
|
39
46
|
animatedStyle,
|
|
40
47
|
backdropStyle,
|
|
41
48
|
} = useGestureViewer({
|
|
@@ -45,14 +52,26 @@ export function GestureViewer<T = any, LC = typeof FlatList>({
|
|
|
45
52
|
initialIndex,
|
|
46
53
|
itemSpacing,
|
|
47
54
|
useSnap,
|
|
55
|
+
enableLoop,
|
|
48
56
|
...props,
|
|
49
57
|
});
|
|
50
58
|
|
|
59
|
+
const keyExtractor = useCallback(
|
|
60
|
+
(item: T, index: number) => {
|
|
61
|
+
if (enableLoop) {
|
|
62
|
+
return typeof item === 'string' ? `${item}-${index}` : `item-${index}`;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return typeof item === 'string' ? item : `image-${index}`;
|
|
66
|
+
},
|
|
67
|
+
[enableLoop],
|
|
68
|
+
);
|
|
69
|
+
|
|
51
70
|
const renderItem = useCallback(
|
|
52
71
|
({ item, index }: { item: T; index: number }) => {
|
|
53
72
|
return (
|
|
54
73
|
<View
|
|
55
|
-
key={
|
|
74
|
+
key={keyExtractor(item, index)}
|
|
56
75
|
style={[
|
|
57
76
|
{
|
|
58
77
|
width,
|
|
@@ -67,7 +86,7 @@ export function GestureViewer<T = any, LC = typeof FlatList>({
|
|
|
67
86
|
</View>
|
|
68
87
|
);
|
|
69
88
|
},
|
|
70
|
-
[width, itemSpacing, renderItemProp],
|
|
89
|
+
[width, itemSpacing, renderItemProp, keyExtractor],
|
|
71
90
|
);
|
|
72
91
|
|
|
73
92
|
const getItemLayout = useCallback(
|
|
@@ -79,11 +98,6 @@ export function GestureViewer<T = any, LC = typeof FlatList>({
|
|
|
79
98
|
[width, itemSpacing],
|
|
80
99
|
);
|
|
81
100
|
|
|
82
|
-
const keyExtractor = useCallback(
|
|
83
|
-
(item: T, index: number) => (typeof item === 'string' ? item : `image-${index}`),
|
|
84
|
-
[],
|
|
85
|
-
);
|
|
86
|
-
|
|
87
101
|
const gesture = useMemo(() => {
|
|
88
102
|
return Gesture.Race(dismissGesture, zoomGesture);
|
|
89
103
|
}, [zoomGesture, dismissGesture]);
|
|
@@ -94,25 +108,27 @@ export function GestureViewer<T = any, LC = typeof FlatList>({
|
|
|
94
108
|
return () => registry.deleteManager(id);
|
|
95
109
|
}, [id]);
|
|
96
110
|
|
|
97
|
-
const commonProps
|
|
98
|
-
() =>
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
111
|
+
const commonProps = useMemo(
|
|
112
|
+
() =>
|
|
113
|
+
({
|
|
114
|
+
horizontal: true,
|
|
115
|
+
scrollEnabled: !isZoomed && !isRotated,
|
|
116
|
+
showsHorizontalScrollIndicator: false,
|
|
117
|
+
onMomentumScrollEnd: onMomentumScrollEnd,
|
|
118
|
+
onScrollBeginDrag,
|
|
119
|
+
...(useSnap
|
|
120
|
+
? {
|
|
121
|
+
snapToInterval: width + itemSpacing,
|
|
122
|
+
snapToAlignment: 'center',
|
|
123
|
+
decelerationRate: 'fast',
|
|
124
|
+
}
|
|
125
|
+
: {
|
|
126
|
+
pagingEnabled: true,
|
|
127
|
+
}),
|
|
128
|
+
scrollEventThrottle: 16,
|
|
129
|
+
removeClippedSubviews: true,
|
|
130
|
+
}) satisfies ScrollViewProps,
|
|
131
|
+
[width, itemSpacing, isZoomed, isRotated, onMomentumScrollEnd, onScrollBeginDrag, useSnap],
|
|
116
132
|
);
|
|
117
133
|
|
|
118
134
|
const listComponent = (
|
|
@@ -127,16 +143,16 @@ export function GestureViewer<T = any, LC = typeof FlatList>({
|
|
|
127
143
|
>
|
|
128
144
|
{isScrollViewLike(Component) ? (
|
|
129
145
|
<Component ref={listRef} {...commonProps} {...listProps}>
|
|
130
|
-
{
|
|
146
|
+
{loopData.map((item, index) => renderItem({ item, index }))}
|
|
131
147
|
</Component>
|
|
132
148
|
) : (
|
|
133
149
|
isFlatListLike(Component) && (
|
|
134
150
|
<Component
|
|
135
151
|
ref={listRef}
|
|
136
152
|
{...commonProps}
|
|
137
|
-
data={
|
|
153
|
+
data={loopData}
|
|
138
154
|
renderItem={renderItem}
|
|
139
|
-
initialScrollIndex={initialIndex}
|
|
155
|
+
initialScrollIndex={enableLoop && data.length > 1 ? initialIndex + 1 : initialIndex}
|
|
140
156
|
keyExtractor={keyExtractor}
|
|
141
157
|
windowSize={3}
|
|
142
158
|
maxToRenderPerBatch={3}
|
|
@@ -5,7 +5,7 @@ import type {
|
|
|
5
5
|
GestureViewerEventData,
|
|
6
6
|
GestureViewerEventType,
|
|
7
7
|
} from './types';
|
|
8
|
-
import { createBoundsConstraint } from './utils';
|
|
8
|
+
import { createBoundsConstraint, createScrollAction } from './utils';
|
|
9
9
|
|
|
10
10
|
class GestureViewerManager {
|
|
11
11
|
private currentIndex = 0;
|
|
@@ -18,9 +18,13 @@ class GestureViewerManager {
|
|
|
18
18
|
private maxZoomScale = 2;
|
|
19
19
|
private listRef: any | null = null;
|
|
20
20
|
private enableSwipeGesture = true;
|
|
21
|
+
private enableLoop = false;
|
|
21
22
|
private listeners = new Set<(state: GestureViewerControllerState) => void>();
|
|
22
23
|
private rotation: SharedValue<number> | null = null;
|
|
23
24
|
private eventListeners = new Map<GestureViewerEventType, Set<(data: any) => void>>();
|
|
25
|
+
private animationTimeout: NodeJS.Timeout | null = null;
|
|
26
|
+
|
|
27
|
+
private static readonly LOOP_ANIMATION_DURATION = 300;
|
|
24
28
|
|
|
25
29
|
private notifyListeners() {
|
|
26
30
|
const state = this.getState();
|
|
@@ -79,6 +83,10 @@ class GestureViewerManager {
|
|
|
79
83
|
};
|
|
80
84
|
}
|
|
81
85
|
|
|
86
|
+
setEnableLoop(enabled: boolean) {
|
|
87
|
+
this.enableLoop = enabled;
|
|
88
|
+
}
|
|
89
|
+
|
|
82
90
|
setWidth(width: number) {
|
|
83
91
|
this.width = width;
|
|
84
92
|
}
|
|
@@ -215,40 +223,73 @@ class GestureViewerManager {
|
|
|
215
223
|
};
|
|
216
224
|
|
|
217
225
|
goToIndex = (index: number) => {
|
|
218
|
-
if (
|
|
226
|
+
if (!this.enableSwipeGesture || !this.listRef) {
|
|
219
227
|
return;
|
|
220
228
|
}
|
|
221
229
|
|
|
222
|
-
this.
|
|
230
|
+
this.cancelAnimation();
|
|
231
|
+
|
|
232
|
+
const { scrollTo } = createScrollAction(this.listRef, this.width);
|
|
233
|
+
|
|
234
|
+
if (this.enableLoop && this.dataLength > 1) {
|
|
235
|
+
if (index < 0) {
|
|
236
|
+
scrollTo(0, true);
|
|
237
|
+
|
|
238
|
+
this.animationTimeout = setTimeout(() => {
|
|
239
|
+
scrollTo(this.dataLength, false);
|
|
240
|
+
this.updateCurrentIndex(this.dataLength - 1);
|
|
241
|
+
}, GestureViewerManager.LOOP_ANIMATION_DURATION);
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
if (index >= this.dataLength) {
|
|
246
|
+
scrollTo(this.dataLength + 1, true);
|
|
247
|
+
|
|
248
|
+
this.animationTimeout = setTimeout(() => {
|
|
249
|
+
scrollTo(1, false);
|
|
250
|
+
this.updateCurrentIndex(0);
|
|
251
|
+
}, GestureViewerManager.LOOP_ANIMATION_DURATION);
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
const scrollIndex = index + 1;
|
|
256
|
+
|
|
257
|
+
scrollTo(scrollIndex, true);
|
|
258
|
+
this.updateCurrentIndex(index);
|
|
259
|
+
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
223
262
|
|
|
224
|
-
if (this.
|
|
225
|
-
|
|
226
|
-
} else if (this.listRef.scrollTo) {
|
|
227
|
-
this.listRef.scrollTo({ x: index * this.width, animated: true });
|
|
263
|
+
if (index < 0 || index >= this.dataLength) {
|
|
264
|
+
return;
|
|
228
265
|
}
|
|
229
266
|
|
|
230
|
-
|
|
267
|
+
scrollTo(index, true);
|
|
268
|
+
this.updateCurrentIndex(index);
|
|
231
269
|
};
|
|
232
270
|
|
|
233
|
-
|
|
234
|
-
if (this.
|
|
235
|
-
|
|
271
|
+
cancelAnimation = () => {
|
|
272
|
+
if (this.animationTimeout) {
|
|
273
|
+
clearTimeout(this.animationTimeout);
|
|
274
|
+
this.animationTimeout = null;
|
|
236
275
|
}
|
|
237
276
|
};
|
|
238
277
|
|
|
278
|
+
goToPrevious = () => {
|
|
279
|
+
this.goToIndex(this.currentIndex - 1);
|
|
280
|
+
};
|
|
281
|
+
|
|
239
282
|
goToNext = () => {
|
|
240
|
-
|
|
241
|
-
this.goToIndex(this.currentIndex + 1);
|
|
242
|
-
}
|
|
283
|
+
this.goToIndex(this.currentIndex + 1);
|
|
243
284
|
};
|
|
244
285
|
|
|
245
286
|
cleanUp() {
|
|
287
|
+
this.cancelAnimation();
|
|
246
288
|
this.listeners.clear();
|
|
247
289
|
this.listRef = null;
|
|
248
290
|
this.enableSwipeGesture = true;
|
|
249
291
|
this.currentIndex = 0;
|
|
250
292
|
this.dataLength = 0;
|
|
251
|
-
|
|
252
293
|
this.maxZoomScale = 2;
|
|
253
294
|
this.scale = null;
|
|
254
295
|
this.translateX = null;
|
|
@@ -256,6 +297,11 @@ class GestureViewerManager {
|
|
|
256
297
|
this.rotation = null;
|
|
257
298
|
this.eventListeners.clear();
|
|
258
299
|
}
|
|
300
|
+
|
|
301
|
+
private updateCurrentIndex = (targetIndex: number) => {
|
|
302
|
+
this.currentIndex = targetIndex;
|
|
303
|
+
this.notifyListeners();
|
|
304
|
+
};
|
|
259
305
|
}
|
|
260
306
|
|
|
261
307
|
export default GestureViewerManager;
|
package/src/types.ts
CHANGED
|
@@ -130,6 +130,11 @@ export interface GestureViewerProps<T = any, LC = typeof RNFlatList> {
|
|
|
130
130
|
* @defaultValue true
|
|
131
131
|
*/
|
|
132
132
|
enableDoubleTapGesture?: boolean;
|
|
133
|
+
/**
|
|
134
|
+
* Enables infinite loop navigation.
|
|
135
|
+
* @defaultValue false
|
|
136
|
+
*/
|
|
137
|
+
enableLoop?: boolean;
|
|
133
138
|
/**
|
|
134
139
|
* The maximum zoom scale.
|
|
135
140
|
* @defaultValue 2
|
package/src/useGestureViewer.ts
CHANGED
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
import type GestureViewerManager from './GestureViewerManager';
|
|
20
20
|
import { registry } from './GestureViewerRegistry';
|
|
21
21
|
import type { GestureViewerProps } from './types';
|
|
22
|
-
import { createBoundsConstraint } from './utils';
|
|
22
|
+
import { createBoundsConstraint, createScrollAction, getLoopAdjustedIndex } from './utils';
|
|
23
23
|
|
|
24
24
|
type UseGestureViewerProps<T = any> = Omit<
|
|
25
25
|
GestureViewerProps<T>,
|
|
@@ -42,6 +42,7 @@ export const useGestureViewer = <T = any>({
|
|
|
42
42
|
enableZoomGesture = true,
|
|
43
43
|
enableDoubleTapGesture = true,
|
|
44
44
|
enableZoomPanGesture = true,
|
|
45
|
+
enableLoop = false,
|
|
45
46
|
maxZoomScale = 2,
|
|
46
47
|
itemSpacing = 0,
|
|
47
48
|
useSnap = false,
|
|
@@ -71,11 +72,28 @@ export const useGestureViewer = <T = any>({
|
|
|
71
72
|
|
|
72
73
|
const dataLength = data?.length || 0;
|
|
73
74
|
|
|
75
|
+
const adjustedInitialIndex = useMemo(() => {
|
|
76
|
+
if (enableLoop && data.length > 1) {
|
|
77
|
+
return initialIndex + 1;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return initialIndex;
|
|
81
|
+
}, [enableLoop, data.length, initialIndex]);
|
|
82
|
+
|
|
74
83
|
const constrainTranslation = useMemo(
|
|
75
84
|
() => createBoundsConstraint({ width, height: screenHeight }),
|
|
76
85
|
[width, screenHeight],
|
|
77
86
|
);
|
|
78
87
|
|
|
88
|
+
const scrollTo = useCallback(
|
|
89
|
+
(index: number, animated: boolean) => {
|
|
90
|
+
const scrollAction = createScrollAction(listRef.current, width + itemSpacing);
|
|
91
|
+
|
|
92
|
+
return scrollAction.scrollTo(index, animated);
|
|
93
|
+
},
|
|
94
|
+
[width, itemSpacing],
|
|
95
|
+
);
|
|
96
|
+
|
|
79
97
|
const emitZoomChange = useCallback(
|
|
80
98
|
(currentScale: number, prevScale: number | null) => {
|
|
81
99
|
manager?.emitZoomChange(currentScale, prevScale);
|
|
@@ -150,6 +168,7 @@ export const useGestureViewer = <T = any>({
|
|
|
150
168
|
manager.setHeight(screenHeight);
|
|
151
169
|
manager.setZoomSharedValues(scale, translateX, translateY, maxZoomScale);
|
|
152
170
|
manager.setRotation(rotation);
|
|
171
|
+
manager.setEnableLoop(enableLoop);
|
|
153
172
|
manager.notifyStateChange();
|
|
154
173
|
}, [
|
|
155
174
|
dataLength,
|
|
@@ -159,6 +178,7 @@ export const useGestureViewer = <T = any>({
|
|
|
159
178
|
width,
|
|
160
179
|
itemSpacing,
|
|
161
180
|
maxZoomScale,
|
|
181
|
+
enableLoop,
|
|
162
182
|
scale,
|
|
163
183
|
screenHeight,
|
|
164
184
|
translateX,
|
|
@@ -186,28 +206,18 @@ export const useGestureViewer = <T = any>({
|
|
|
186
206
|
startScale.value = 1;
|
|
187
207
|
rotation.value = 0;
|
|
188
208
|
|
|
189
|
-
if (
|
|
209
|
+
if (adjustedInitialIndex <= 0 || !listRef.current) {
|
|
190
210
|
return;
|
|
191
211
|
}
|
|
192
212
|
|
|
193
213
|
const runAfterInteractions = InteractionManager.runAfterInteractions(() => {
|
|
194
|
-
|
|
195
|
-
listRef.current.scrollToIndex({
|
|
196
|
-
index: initialIndex,
|
|
197
|
-
animated: false,
|
|
198
|
-
});
|
|
199
|
-
} else if (listRef.current.scrollTo) {
|
|
200
|
-
listRef.current.scrollTo({
|
|
201
|
-
x: initialIndex * (width + itemSpacing),
|
|
202
|
-
animated: false,
|
|
203
|
-
});
|
|
204
|
-
}
|
|
214
|
+
scrollTo(adjustedInitialIndex, false);
|
|
205
215
|
});
|
|
206
216
|
|
|
207
217
|
return () => {
|
|
208
218
|
runAfterInteractions?.cancel();
|
|
209
219
|
};
|
|
210
|
-
}, [
|
|
220
|
+
}, [adjustedInitialIndex, translateY, backdropOpacity, translateX, scale, startScale, rotation, scrollTo]);
|
|
211
221
|
|
|
212
222
|
const onMomentumScrollEnd = useCallback(
|
|
213
223
|
(event: NativeSyntheticEvent<NativeScrollEvent>) => {
|
|
@@ -216,12 +226,18 @@ export const useGestureViewer = <T = any>({
|
|
|
216
226
|
}
|
|
217
227
|
|
|
218
228
|
const contentOffset = event.nativeEvent.contentOffset;
|
|
219
|
-
const
|
|
229
|
+
const scrollIndex = Math.round(contentOffset.x / (width + itemSpacing));
|
|
220
230
|
|
|
221
|
-
|
|
231
|
+
const { realIndex, needsJump, jumpToIndex } = getLoopAdjustedIndex(scrollIndex, dataLength, enableLoop);
|
|
232
|
+
|
|
233
|
+
if (needsJump && jumpToIndex !== undefined) {
|
|
234
|
+
scrollTo(jumpToIndex, false);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if (realIndex !== currentIndex && realIndex >= 0 && realIndex < dataLength) {
|
|
222
238
|
if (manager) {
|
|
223
|
-
manager.setCurrentIndex(
|
|
224
|
-
setCurrentIndex(
|
|
239
|
+
manager.setCurrentIndex(realIndex);
|
|
240
|
+
setCurrentIndex(realIndex);
|
|
225
241
|
manager.notifyStateChange();
|
|
226
242
|
}
|
|
227
243
|
|
|
@@ -235,12 +251,14 @@ export const useGestureViewer = <T = any>({
|
|
|
235
251
|
}
|
|
236
252
|
},
|
|
237
253
|
[
|
|
254
|
+
scrollTo,
|
|
238
255
|
manager,
|
|
239
256
|
currentIndex,
|
|
240
257
|
dataLength,
|
|
241
258
|
width,
|
|
242
259
|
itemSpacing,
|
|
243
260
|
enableSwipeGesture,
|
|
261
|
+
enableLoop,
|
|
244
262
|
translateX,
|
|
245
263
|
translateY,
|
|
246
264
|
scale,
|
|
@@ -463,6 +481,10 @@ export const useGestureViewer = <T = any>({
|
|
|
463
481
|
return { opacity };
|
|
464
482
|
}, [animateBackdrop]);
|
|
465
483
|
|
|
484
|
+
const onScrollBeginDrag = useCallback(() => {
|
|
485
|
+
manager?.cancelAnimation();
|
|
486
|
+
}, [manager]);
|
|
487
|
+
|
|
466
488
|
return {
|
|
467
489
|
currentIndex,
|
|
468
490
|
dataLength,
|
|
@@ -474,6 +496,7 @@ export const useGestureViewer = <T = any>({
|
|
|
474
496
|
zoomGesture,
|
|
475
497
|
|
|
476
498
|
onMomentumScrollEnd,
|
|
499
|
+
onScrollBeginDrag,
|
|
477
500
|
|
|
478
501
|
animatedStyle,
|
|
479
502
|
backdropStyle,
|
package/src/utils.ts
CHANGED
|
@@ -48,3 +48,56 @@ export const createBoundsConstraint =
|
|
|
48
48
|
translateY: Math.max(-maxTranslateY, Math.min(maxTranslateY, translateY)),
|
|
49
49
|
};
|
|
50
50
|
};
|
|
51
|
+
|
|
52
|
+
export const createLoopData = <T>(dataRef: React.RefObject<T[]>, enableLoop: boolean): T[] => {
|
|
53
|
+
const data = dataRef.current;
|
|
54
|
+
|
|
55
|
+
if (!enableLoop || !data?.length || data.length <= 1) {
|
|
56
|
+
return data;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const lastItem = data[data.length - 1];
|
|
60
|
+
const firstItem = data[0];
|
|
61
|
+
|
|
62
|
+
if (lastItem === undefined || firstItem === undefined) {
|
|
63
|
+
return data;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return [lastItem, ...data, firstItem];
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
export const getLoopAdjustedIndex = (
|
|
70
|
+
scrollIndex: number,
|
|
71
|
+
originalDataLength: number,
|
|
72
|
+
enableLoop: boolean,
|
|
73
|
+
): { realIndex: number; needsJump: boolean; jumpToIndex?: number } => {
|
|
74
|
+
if (!enableLoop || originalDataLength <= 1) {
|
|
75
|
+
return { realIndex: scrollIndex, needsJump: false };
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (scrollIndex === 0) {
|
|
79
|
+
return {
|
|
80
|
+
realIndex: originalDataLength - 1,
|
|
81
|
+
needsJump: true,
|
|
82
|
+
jumpToIndex: originalDataLength,
|
|
83
|
+
};
|
|
84
|
+
} else if (scrollIndex === originalDataLength + 1) {
|
|
85
|
+
return {
|
|
86
|
+
realIndex: 0,
|
|
87
|
+
needsJump: true,
|
|
88
|
+
jumpToIndex: 1,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return { realIndex: scrollIndex - 1, needsJump: false };
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export const createScrollAction = (listRef: any, width: number) => ({
|
|
96
|
+
scrollTo: (index: number, animated: boolean) => {
|
|
97
|
+
if (listRef?.scrollToIndex) {
|
|
98
|
+
listRef.scrollToIndex({ index, animated });
|
|
99
|
+
} else if (listRef?.scrollTo) {
|
|
100
|
+
listRef.scrollTo({ x: index * width, animated });
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
});
|