react-native-gesture-image-viewer 0.4.0 → 0.5.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 +1 -1
- package/lib/module/GestureImageViewer.js +29 -17
- package/lib/module/GestureImageViewer.js.map +1 -1
- package/lib/module/ImageViewerManager.js +20 -9
- package/lib/module/ImageViewerManager.js.map +1 -1
- package/lib/module/useGestureImageViewer.js +19 -11
- package/lib/module/useGestureImageViewer.js.map +1 -1
- package/lib/module/utils.js +22 -0
- package/lib/module/utils.js.map +1 -0
- package/lib/typescript/src/GestureImageViewer.d.ts.map +1 -1
- package/lib/typescript/src/ImageViewerManager.d.ts +4 -2
- package/lib/typescript/src/ImageViewerManager.d.ts.map +1 -1
- package/lib/typescript/src/useGestureImageViewer.d.ts +1 -1
- package/lib/typescript/src/useGestureImageViewer.d.ts.map +1 -1
- package/lib/typescript/src/utils.d.ts +4 -0
- package/lib/typescript/src/utils.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/GestureImageViewer.tsx +46 -26
- package/src/ImageViewerManager.ts +17 -6
- package/src/useGestureImageViewer.ts +19 -11
- package/src/utils.ts +24 -0
package/README.md
CHANGED
|
@@ -168,7 +168,7 @@ function App() {
|
|
|
168
168
|
|
|
169
169
|
#### List Components
|
|
170
170
|
|
|
171
|
-
Support for `FlatList`, `FlashList`,
|
|
171
|
+
Support for `ScrollView`, `FlatList`, `FlashList`, and other list components through the `ListComponent` prop.
|
|
172
172
|
You can also customize the props of each supported list component through `listProps`.
|
|
173
173
|
|
|
174
174
|
```tsx
|
|
@@ -6,6 +6,7 @@ import { FlatList, Gesture, GestureDetector, GestureHandlerRootView } from 'reac
|
|
|
6
6
|
import Animated from 'react-native-reanimated';
|
|
7
7
|
import { registry } from "./ImageViewerRegistry.js";
|
|
8
8
|
import { useGestureImageViewer } from "./useGestureImageViewer.js";
|
|
9
|
+
import { isFlatListLike, isScrollViewLike } from "./utils.js";
|
|
9
10
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
11
|
const WebPagingFix = () => {
|
|
11
12
|
if (Platform.OS !== 'web') {
|
|
@@ -34,7 +35,7 @@ export function GestureImageViewer({
|
|
|
34
35
|
} = useWindowDimensions();
|
|
35
36
|
const width = customWidth || screenWidth;
|
|
36
37
|
const {
|
|
37
|
-
|
|
38
|
+
listRef,
|
|
38
39
|
isZoomed,
|
|
39
40
|
dismissGesture,
|
|
40
41
|
zoomGesture,
|
|
@@ -62,14 +63,14 @@ export function GestureImageViewer({
|
|
|
62
63
|
marginHorizontal: itemSpacing / 2
|
|
63
64
|
}],
|
|
64
65
|
children: renderImage(item, index)
|
|
65
|
-
});
|
|
66
|
+
}, typeof item === 'string' ? item : index);
|
|
66
67
|
}, [width, itemSpacing, renderImage]);
|
|
67
68
|
const getItemLayout = useCallback((_, index) => ({
|
|
68
69
|
length: width + itemSpacing,
|
|
69
70
|
offset: (width + itemSpacing) * index,
|
|
70
71
|
index
|
|
71
72
|
}), [width, itemSpacing]);
|
|
72
|
-
const keyExtractor = useCallback((item, index) => `image-${index}
|
|
73
|
+
const keyExtractor = useCallback((item, index) => typeof item === 'string' ? item : `image-${index}`, []);
|
|
73
74
|
const gesture = useMemo(() => {
|
|
74
75
|
return Gesture.Race(dismissGesture, zoomGesture);
|
|
75
76
|
}, [zoomGesture, dismissGesture]);
|
|
@@ -77,6 +78,17 @@ export function GestureImageViewer({
|
|
|
77
78
|
registry.createManager(id);
|
|
78
79
|
return () => registry.deleteManager(id);
|
|
79
80
|
}, [id]);
|
|
81
|
+
const commonProps = useMemo(() => ({
|
|
82
|
+
horizontal: true,
|
|
83
|
+
scrollEnabled: !isZoomed,
|
|
84
|
+
showsHorizontalScrollIndicator: false,
|
|
85
|
+
onMomentumScrollEnd: onMomentumScrollEnd,
|
|
86
|
+
snapToInterval: width + itemSpacing,
|
|
87
|
+
snapToAlignment: 'center',
|
|
88
|
+
decelerationRate: 'fast',
|
|
89
|
+
scrollEventThrottle: 16,
|
|
90
|
+
removeClippedSubviews: true
|
|
91
|
+
}), [width, itemSpacing, isZoomed, onMomentumScrollEnd]);
|
|
80
92
|
const listComponent = /*#__PURE__*/_jsx(GestureHandlerRootView, {
|
|
81
93
|
children: /*#__PURE__*/_jsx(GestureDetector, {
|
|
82
94
|
gesture: gesture,
|
|
@@ -86,25 +98,25 @@ export function GestureImageViewer({
|
|
|
86
98
|
style: [styles.background, backdropStyleProps, backdropStyle]
|
|
87
99
|
}), /*#__PURE__*/_jsx(Animated.View, {
|
|
88
100
|
style: [styles.content, animatedStyle],
|
|
89
|
-
children: /*#__PURE__*/_jsx(ListComponent, {
|
|
90
|
-
ref:
|
|
101
|
+
children: isScrollViewLike(ListComponent) ? /*#__PURE__*/_jsx(ListComponent, {
|
|
102
|
+
ref: listRef,
|
|
103
|
+
...commonProps,
|
|
104
|
+
...listProps,
|
|
105
|
+
children: data.map((item, index) => renderItem({
|
|
106
|
+
item,
|
|
107
|
+
index
|
|
108
|
+
}))
|
|
109
|
+
}) : isFlatListLike(ListComponent) && /*#__PURE__*/_jsx(ListComponent, {
|
|
110
|
+
ref: listRef,
|
|
111
|
+
...commonProps,
|
|
91
112
|
data: data,
|
|
92
113
|
renderItem: renderItem,
|
|
93
|
-
keyExtractor: keyExtractor,
|
|
94
|
-
horizontal: true,
|
|
95
|
-
scrollEnabled: !isZoomed,
|
|
96
|
-
showsHorizontalScrollIndicator: false,
|
|
97
|
-
onMomentumScrollEnd: onMomentumScrollEnd,
|
|
98
|
-
getItemLayout: getItemLayout,
|
|
99
114
|
initialScrollIndex: initialIndex,
|
|
115
|
+
keyExtractor: keyExtractor,
|
|
116
|
+
estimatedItemSize: width + itemSpacing,
|
|
100
117
|
windowSize: 3,
|
|
101
118
|
maxToRenderPerBatch: 3,
|
|
102
|
-
|
|
103
|
-
snapToInterval: width + itemSpacing,
|
|
104
|
-
estimatedItemSize: width + itemSpacing,
|
|
105
|
-
snapToAlignment: "center",
|
|
106
|
-
decelerationRate: "fast",
|
|
107
|
-
scrollEventThrottle: 16
|
|
119
|
+
getItemLayout: getItemLayout
|
|
108
120
|
// NOTE - https://github.com/necolas/react-native-web/issues/1299
|
|
109
121
|
,
|
|
110
122
|
...(Platform.OS === 'web' && {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","useMemo","Platform","StyleSheet","useWindowDimensions","View","FlatList","Gesture","GestureDetector","GestureHandlerRootView","Animated","registry","useGestureImageViewer","jsx","_jsx","jsxs","_jsxs","WebPagingFix","OS","children","GestureImageViewer","id","data","renderImage","renderContainer","ListComponent","width","customWidth","listProps","backdropStyle","backdropStyleProps","containerStyle","initialIndex","itemSpacing","props","screenWidth","
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useMemo","Platform","StyleSheet","useWindowDimensions","View","FlatList","Gesture","GestureDetector","GestureHandlerRootView","Animated","registry","useGestureImageViewer","isFlatListLike","isScrollViewLike","jsx","_jsx","jsxs","_jsxs","WebPagingFix","OS","children","GestureImageViewer","id","data","renderImage","renderContainer","ListComponent","width","customWidth","listProps","backdropStyle","backdropStyleProps","containerStyle","initialIndex","itemSpacing","props","screenWidth","listRef","isZoomed","dismissGesture","zoomGesture","onMomentumScrollEnd","animatedStyle","renderItem","item","index","style","height","justifyContent","alignItems","marginHorizontal","getItemLayout","_","length","offset","keyExtractor","gesture","Race","createManager","deleteManager","commonProps","horizontal","scrollEnabled","showsHorizontalScrollIndicator","snapToInterval","snapToAlignment","decelerationRate","scrollEventThrottle","removeClippedSubviews","listComponent","styles","container","background","content","ref","map","initialScrollIndex","estimatedItemSize","windowSize","maxToRenderPerBatch","dataSet","create","flex","position","top","left","right","bottom","backgroundColor"],"sourceRoot":"../../src","sources":["GestureImageViewer.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
class ImageViewerManager {
|
|
4
4
|
currentIndex = 0;
|
|
5
5
|
dataLength = 0;
|
|
6
|
-
|
|
6
|
+
width = 0;
|
|
7
|
+
listRef = null;
|
|
7
8
|
enableSwipeGesture = true;
|
|
8
9
|
listeners = new Set();
|
|
9
10
|
|
|
@@ -28,8 +29,11 @@ class ImageViewerManager {
|
|
|
28
29
|
dataLength: this.dataLength
|
|
29
30
|
};
|
|
30
31
|
}
|
|
31
|
-
|
|
32
|
-
this.
|
|
32
|
+
setWidth(width) {
|
|
33
|
+
this.width = width;
|
|
34
|
+
}
|
|
35
|
+
setListRef(ref) {
|
|
36
|
+
this.listRef = ref;
|
|
33
37
|
}
|
|
34
38
|
setDataLength(length) {
|
|
35
39
|
this.dataLength = length;
|
|
@@ -46,14 +50,21 @@ class ImageViewerManager {
|
|
|
46
50
|
this.notifyListeners();
|
|
47
51
|
}
|
|
48
52
|
goToIndex = index => {
|
|
49
|
-
if (index < 0 || index >= this.dataLength || !this.enableSwipeGesture || !this.
|
|
53
|
+
if (index < 0 || index >= this.dataLength || !this.enableSwipeGesture || !this.listRef) {
|
|
50
54
|
return;
|
|
51
55
|
}
|
|
52
56
|
this.currentIndex = index;
|
|
53
|
-
this.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
+
if (this.listRef.scrollToIndex) {
|
|
58
|
+
this.listRef.scrollToIndex({
|
|
59
|
+
index,
|
|
60
|
+
animated: true
|
|
61
|
+
});
|
|
62
|
+
} else if (this.listRef.scrollTo) {
|
|
63
|
+
this.listRef.scrollTo({
|
|
64
|
+
x: index * this.width,
|
|
65
|
+
animated: true
|
|
66
|
+
});
|
|
67
|
+
}
|
|
57
68
|
this.notifyListeners();
|
|
58
69
|
};
|
|
59
70
|
goToPrevious = () => {
|
|
@@ -68,7 +79,7 @@ class ImageViewerManager {
|
|
|
68
79
|
};
|
|
69
80
|
cleanUp() {
|
|
70
81
|
this.listeners.clear();
|
|
71
|
-
this.
|
|
82
|
+
this.listRef = null;
|
|
72
83
|
this.enableSwipeGesture = true;
|
|
73
84
|
this.currentIndex = 0;
|
|
74
85
|
this.dataLength = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ImageViewerManager","currentIndex","dataLength","
|
|
1
|
+
{"version":3,"names":["ImageViewerManager","currentIndex","dataLength","width","listRef","enableSwipeGesture","listeners","Set","notifyListeners","state","getState","forEach","listener","subscribe","add","delete","setWidth","setListRef","ref","setDataLength","length","setEnableSwipeGesture","enabled","setCurrentIndex","index","notifyStateChange","goToIndex","scrollToIndex","animated","scrollTo","x","goToPrevious","goToNext","cleanUp","clear"],"sourceRoot":"../../src","sources":["ImageViewerManager.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -41,7 +41,7 @@ export const useGestureImageViewer = ({
|
|
|
41
41
|
const translateX = useSharedValue(0);
|
|
42
42
|
const scale = useSharedValue(1);
|
|
43
43
|
const backdropOpacity = useSharedValue(1);
|
|
44
|
-
const
|
|
44
|
+
const listRef = useRef(null);
|
|
45
45
|
const dataLength = data?.length || 0;
|
|
46
46
|
useAnimatedReaction(() => scale.value, currentScale => {
|
|
47
47
|
runOnJS(setIsZoomed)(currentScale > 1);
|
|
@@ -73,13 +73,14 @@ export const useGestureImageViewer = ({
|
|
|
73
73
|
manager.setDataLength(dataLength);
|
|
74
74
|
manager.setEnableSwipeGesture(enableSwipeGesture);
|
|
75
75
|
manager.setCurrentIndex(initialIndex);
|
|
76
|
+
manager.setWidth(width + itemSpacing);
|
|
76
77
|
manager.notifyStateChange();
|
|
77
|
-
}, [dataLength, enableSwipeGesture, initialIndex, manager]);
|
|
78
|
+
}, [dataLength, enableSwipeGesture, initialIndex, manager, width, itemSpacing]);
|
|
78
79
|
useEffect(() => {
|
|
79
|
-
if (!manager || !
|
|
80
|
+
if (!manager || !listRef.current) {
|
|
80
81
|
return;
|
|
81
82
|
}
|
|
82
|
-
manager.
|
|
83
|
+
manager.setListRef(listRef.current);
|
|
83
84
|
}, [manager]);
|
|
84
85
|
useEffect(() => {
|
|
85
86
|
onIndexChange?.(currentIndex);
|
|
@@ -90,19 +91,26 @@ export const useGestureImageViewer = ({
|
|
|
90
91
|
scale.value = 1;
|
|
91
92
|
backdropOpacity.value = 1;
|
|
92
93
|
startScale.value = 1;
|
|
93
|
-
if (initialIndex <= 0 || !
|
|
94
|
+
if (initialIndex <= 0 || !listRef.current) {
|
|
94
95
|
return;
|
|
95
96
|
}
|
|
96
97
|
const runAfterInteractions = InteractionManager.runAfterInteractions(() => {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
if (listRef.current.scrollToIndex) {
|
|
99
|
+
listRef.current.scrollToIndex({
|
|
100
|
+
index: initialIndex,
|
|
101
|
+
animated: false
|
|
102
|
+
});
|
|
103
|
+
} else if (listRef.current.scrollTo) {
|
|
104
|
+
listRef.current.scrollTo({
|
|
105
|
+
x: initialIndex * (width + itemSpacing),
|
|
106
|
+
animated: false
|
|
107
|
+
});
|
|
108
|
+
}
|
|
101
109
|
});
|
|
102
110
|
return () => {
|
|
103
111
|
runAfterInteractions?.cancel();
|
|
104
112
|
};
|
|
105
|
-
}, [initialIndex, translateY, backdropOpacity, translateX, scale, startScale]);
|
|
113
|
+
}, [initialIndex, translateY, backdropOpacity, translateX, scale, startScale, width, itemSpacing]);
|
|
106
114
|
const onMomentumScrollEnd = useCallback(event => {
|
|
107
115
|
if (!enableSwipeGesture) {
|
|
108
116
|
return;
|
|
@@ -223,7 +231,7 @@ export const useGestureImageViewer = ({
|
|
|
223
231
|
currentIndex,
|
|
224
232
|
dataLength,
|
|
225
233
|
translateY,
|
|
226
|
-
|
|
234
|
+
listRef,
|
|
227
235
|
isZoomed,
|
|
228
236
|
dismissGesture,
|
|
229
237
|
zoomGesture,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","InteractionManager","useWindowDimensions","Gesture","Easing","interpolate","runOnJS","useAnimatedReaction","useAnimatedStyle","useSharedValue","withSpring","withTiming","registry","useGestureImageViewer","data","initialIndex","onIndexChange","onDismiss","width","customWidth","dismissThreshold","resistance","animateBackdrop","enableDismissGesture","enableSwipeGesture","enableZoomGesture","enableDoubleTapGesture","enableZoomPanGesture","maxZoomScale","itemSpacing","id","screenWidth","height","screenHeight","isZoomed","setIsZoomed","currentIndex","setCurrentIndex","manager","setManager","unsubscribeRef","initialTranslateY","initialTranslateX","startScale","translateY","translateX","scale","backdropOpacity","flatListRef","dataLength","length","value","currentScale","handleManagerChange","current","getState","subscribe","state","unsubscribeFromRegistry","subscribeToManager","setDataLength","setEnableSwipeGesture","notifyStateChange","setFlatListRef","runAfterInteractions","scrollToIndex","index","animated","cancel","onMomentumScrollEnd","event","contentOffset","nativeEvent","newIndex","Math","round","x","dismissGesture","Pan","minDistance","averageTouches","activeOffsetY","failOffsetX","enabled","onUpdate","translationY","onEnd","damping","stiffness","zoomPinchGesture","Pinch","onBegin","duration","easing","bezier","zoomPanGesture","maxTranslateX","maxTranslateY","max","min","translationX","doubleTapGesture","Tap","numberOfTaps","nextScale","zoomGesture","Simultaneous","animatedStyle","transform","backdropStyle","opacity"],"sourceRoot":"../../src","sources":["useGestureImageViewer.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","useGestureImageViewer","data","initialIndex","onIndexChange","onDismiss","width","customWidth","dismissThreshold","resistance","animateBackdrop","enableDismissGesture","enableSwipeGesture","enableZoomGesture","enableDoubleTapGesture","enableZoomPanGesture","maxZoomScale","itemSpacing","id","screenWidth","height","screenHeight","isZoomed","setIsZoomed","currentIndex","setCurrentIndex","manager","setManager","unsubscribeRef","initialTranslateY","initialTranslateX","startScale","translateY","translateX","scale","backdropOpacity","listRef","dataLength","length","value","currentScale","handleManagerChange","current","getState","subscribe","state","unsubscribeFromRegistry","subscribeToManager","setDataLength","setEnableSwipeGesture","setWidth","notifyStateChange","setListRef","runAfterInteractions","scrollToIndex","index","animated","scrollTo","x","cancel","onMomentumScrollEnd","event","contentOffset","nativeEvent","newIndex","Math","round","dismissGesture","Pan","minDistance","averageTouches","activeOffsetY","failOffsetX","enabled","onUpdate","translationY","onEnd","damping","stiffness","zoomPinchGesture","Pinch","onBegin","duration","easing","bezier","zoomPanGesture","maxTranslateX","maxTranslateY","max","min","translationX","doubleTapGesture","Tap","numberOfTaps","nextScale","zoomGesture","Simultaneous","animatedStyle","transform","backdropStyle","opacity"],"sourceRoot":"../../src","sources":["useGestureImageViewer.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { FlatList as RNFlatList, ScrollView as RNScrollView } from 'react-native';
|
|
4
|
+
import { FlatList as GestureFlatList, ScrollView as GestureScrollView } from 'react-native-gesture-handler';
|
|
5
|
+
export const isScrollViewLike = component => {
|
|
6
|
+
return component === RNScrollView || component === GestureScrollView;
|
|
7
|
+
};
|
|
8
|
+
export const isFlatListLike = component => {
|
|
9
|
+
try {
|
|
10
|
+
const FlashList = require('@shopify/flash-list')?.FlashList;
|
|
11
|
+
if (FlashList && component === FlashList) {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
} catch {
|
|
15
|
+
// do nothing
|
|
16
|
+
}
|
|
17
|
+
if (component === RNFlatList || component === GestureFlatList) {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
return component?.name === 'FlashList';
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["FlatList","RNFlatList","ScrollView","RNScrollView","GestureFlatList","GestureScrollView","isScrollViewLike","component","isFlatListLike","FlashList","require","name"],"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;AAE3G,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,IAAI;IACF,MAAME,SAAS,GAAGC,OAAO,CAAC,qBAAqB,CAAC,EAAED,SAAS;IAE3D,IAAIA,SAAS,IAAIF,SAAS,KAAKE,SAAS,EAAE;MACxC,OAAO,IAAI;IACb;EACF,CAAC,CAAC,MAAM;IACN;EAAA;EAGF,IAAIF,SAAS,KAAKN,UAAU,IAAIM,SAAS,KAAKH,eAAe,EAAE;IAC7D,OAAO,IAAI;EACb;EAEA,OAAOG,SAAS,EAAEI,IAAI,KAAK,WAAW;AACxC,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GestureImageViewer.d.ts","sourceRoot":"","sources":["../../../src/GestureImageViewer.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"GestureImageViewer.d.ts","sourceRoot":"","sources":["../../../src/GestureImageViewer.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAYvD,wBAAgB,kBAAkB,CAAC,CAAC,GAAG,GAAG,EAAE,EAC1C,EAAc,EACd,IAAI,EACJ,WAAW,EACX,eAAe,EACf,aAAwB,EACxB,KAAK,EAAE,WAAW,EAClB,SAAS,EACT,aAAa,EAAE,kBAAkB,EACjC,cAAc,EACd,YAAgB,EAChB,WAAe,EACf,GAAG,KAAK,EACT,EAAE,uBAAuB,CAAC,CAAC,CAAC,2CAiH5B"}
|
|
@@ -5,7 +5,8 @@ export type ImageViewerManagerState = {
|
|
|
5
5
|
declare class ImageViewerManager {
|
|
6
6
|
private currentIndex;
|
|
7
7
|
private dataLength;
|
|
8
|
-
private
|
|
8
|
+
private width;
|
|
9
|
+
private listRef;
|
|
9
10
|
private enableSwipeGesture;
|
|
10
11
|
private listeners;
|
|
11
12
|
private notifyListeners;
|
|
@@ -14,7 +15,8 @@ declare class ImageViewerManager {
|
|
|
14
15
|
currentIndex: number;
|
|
15
16
|
dataLength: number;
|
|
16
17
|
};
|
|
17
|
-
|
|
18
|
+
setWidth(width: number): void;
|
|
19
|
+
setListRef(ref: any): void;
|
|
18
20
|
setDataLength(length: number): void;
|
|
19
21
|
setEnableSwipeGesture(enabled: boolean): void;
|
|
20
22
|
setCurrentIndex(index: number): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageViewerManager.d.ts","sourceRoot":"","sources":["../../../src/ImageViewerManager.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,cAAM,kBAAkB;IACtB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"ImageViewerManager.d.ts","sourceRoot":"","sources":["../../../src/ImageViewerManager.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,cAAM,kBAAkB;IACtB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,SAAS,CAAuD;IAOxE,OAAO,CAAC,eAAe;IAMvB,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI;IAQ5D,QAAQ;;;;IAOR,QAAQ,CAAC,KAAK,EAAE,MAAM;IAItB,UAAU,CAAC,GAAG,EAAE,GAAG;IAInB,aAAa,CAAC,MAAM,EAAE,MAAM;IAI5B,qBAAqB,CAAC,OAAO,EAAE,OAAO;IAItC,eAAe,CAAC,KAAK,EAAE,MAAM;IAM7B,iBAAiB;IAIjB,SAAS,GAAI,OAAO,MAAM,UAcxB;IAEF,YAAY,aAIV;IAEF,QAAQ,aAIN;IAEF,OAAO;CAOR;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -5,7 +5,7 @@ export declare const useGestureImageViewer: <T = any>({ data, initialIndex, onIn
|
|
|
5
5
|
currentIndex: number;
|
|
6
6
|
dataLength: number;
|
|
7
7
|
translateY: import("react-native-reanimated").SharedValue<number>;
|
|
8
|
-
|
|
8
|
+
listRef: import("react").RefObject<any>;
|
|
9
9
|
isZoomed: boolean;
|
|
10
10
|
dismissGesture: import("react-native-gesture-handler/lib/typescript/handlers/gestures/panGesture").PanGesture;
|
|
11
11
|
zoomGesture: import("react-native-gesture-handler/lib/typescript/handlers/gestures/gestureComposition").SimultaneousGesture;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGestureImageViewer.d.ts","sourceRoot":"","sources":["../../../src/useGestureImageViewer.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAE1B,MAAM,cAAc,CAAC;AActB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAEvD,KAAK,0BAA0B,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAC7C,uBAAuB,CAAC,CAAC,CAAC,EAC1B,aAAa,GAAG,iBAAiB,GAAG,eAAe,GAAG,WAAW,GAAG,gBAAgB,GAAG,eAAe,CACvG,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,CAAC,GAAG,GAAG,EAAE,gQAmB5C,0BAA0B,CAAC,CAAC,CAAC;;;;;;;;
|
|
1
|
+
{"version":3,"file":"useGestureImageViewer.d.ts","sourceRoot":"","sources":["../../../src/useGestureImageViewer.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAE1B,MAAM,cAAc,CAAC;AActB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAEvD,KAAK,0BAA0B,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAC7C,uBAAuB,CAAC,CAAC,CAAC,EAC1B,aAAa,GAAG,iBAAiB,GAAG,eAAe,GAAG,WAAW,GAAG,gBAAgB,GAAG,eAAe,CACvG,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,CAAC,GAAG,GAAG,EAAE,gQAmB5C,0BAA0B,CAAC,CAAC,CAAC;;;;;;;;iCAgHpB,oBAAoB,CAAC,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;CA2LlD,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { FlatList as RNFlatList, ScrollView as RNScrollView } from 'react-native';
|
|
2
|
+
export declare const isScrollViewLike: (component: any) => component is typeof RNScrollView;
|
|
3
|
+
export declare const isFlatListLike: (component: any) => component is typeof RNFlatList;
|
|
4
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,UAAU,IAAI,YAAY,EAAE,MAAM,cAAc,CAAC;AAGlF,eAAO,MAAM,gBAAgB,GAAI,WAAW,GAAG,KAAG,SAAS,IAAI,OAAO,YAErE,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,WAAW,GAAG,KAAG,SAAS,IAAI,OAAO,UAgBnE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-gesture-image-viewer",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.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",
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { useCallback, useEffect, useMemo } from 'react';
|
|
2
|
-
import { Platform, StyleSheet, useWindowDimensions, View } from 'react-native';
|
|
2
|
+
import { Platform, type ScrollViewProps, StyleSheet, useWindowDimensions, View } from 'react-native';
|
|
3
3
|
import { FlatList, Gesture, GestureDetector, GestureHandlerRootView } from 'react-native-gesture-handler';
|
|
4
4
|
import Animated from 'react-native-reanimated';
|
|
5
5
|
import { registry } from './ImageViewerRegistry';
|
|
6
6
|
import type { GestureImageViewerProps } from './types';
|
|
7
7
|
import { useGestureImageViewer } from './useGestureImageViewer';
|
|
8
|
+
import { isFlatListLike, isScrollViewLike } from './utils';
|
|
8
9
|
|
|
9
10
|
const WebPagingFix = () => {
|
|
10
11
|
if (Platform.OS !== 'web') {
|
|
@@ -32,7 +33,7 @@ export function GestureImageViewer<T = any>({
|
|
|
32
33
|
|
|
33
34
|
const width = customWidth || screenWidth;
|
|
34
35
|
|
|
35
|
-
const {
|
|
36
|
+
const { listRef, isZoomed, dismissGesture, zoomGesture, onMomentumScrollEnd, animatedStyle, backdropStyle } =
|
|
36
37
|
useGestureImageViewer({
|
|
37
38
|
id,
|
|
38
39
|
data,
|
|
@@ -46,6 +47,7 @@ export function GestureImageViewer<T = any>({
|
|
|
46
47
|
({ item, index }: { item: T; index: number }) => {
|
|
47
48
|
return (
|
|
48
49
|
<View
|
|
50
|
+
key={typeof item === 'string' ? item : index}
|
|
49
51
|
style={[
|
|
50
52
|
{
|
|
51
53
|
width: width,
|
|
@@ -72,7 +74,10 @@ export function GestureImageViewer<T = any>({
|
|
|
72
74
|
[width, itemSpacing],
|
|
73
75
|
);
|
|
74
76
|
|
|
75
|
-
const keyExtractor = useCallback(
|
|
77
|
+
const keyExtractor = useCallback(
|
|
78
|
+
(item: T, index: number) => (typeof item === 'string' ? item : `image-${index}`),
|
|
79
|
+
[],
|
|
80
|
+
);
|
|
76
81
|
|
|
77
82
|
const gesture = useMemo(() => {
|
|
78
83
|
return Gesture.Race(dismissGesture, zoomGesture);
|
|
@@ -84,35 +89,50 @@ export function GestureImageViewer<T = any>({
|
|
|
84
89
|
return () => registry.deleteManager(id);
|
|
85
90
|
}, [id]);
|
|
86
91
|
|
|
92
|
+
const commonProps: ScrollViewProps = useMemo(
|
|
93
|
+
() => ({
|
|
94
|
+
horizontal: true,
|
|
95
|
+
scrollEnabled: !isZoomed,
|
|
96
|
+
showsHorizontalScrollIndicator: false,
|
|
97
|
+
onMomentumScrollEnd: onMomentumScrollEnd,
|
|
98
|
+
snapToInterval: width + itemSpacing,
|
|
99
|
+
snapToAlignment: 'center',
|
|
100
|
+
decelerationRate: 'fast',
|
|
101
|
+
scrollEventThrottle: 16,
|
|
102
|
+
removeClippedSubviews: true,
|
|
103
|
+
}),
|
|
104
|
+
[width, itemSpacing, isZoomed, onMomentumScrollEnd],
|
|
105
|
+
);
|
|
106
|
+
|
|
87
107
|
const listComponent = (
|
|
88
108
|
<GestureHandlerRootView>
|
|
89
109
|
<GestureDetector gesture={gesture}>
|
|
90
110
|
<View style={[styles.container, containerStyle]}>
|
|
91
111
|
<Animated.View style={[styles.background, backdropStyleProps, backdropStyle]} />
|
|
92
112
|
<Animated.View style={[styles.content, animatedStyle]}>
|
|
93
|
-
|
|
94
|
-
ref={
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
113
|
+
{isScrollViewLike(ListComponent) ? (
|
|
114
|
+
<ListComponent ref={listRef} {...commonProps} {...listProps}>
|
|
115
|
+
{data.map((item, index) => renderItem({ item, index }))}
|
|
116
|
+
</ListComponent>
|
|
117
|
+
) : (
|
|
118
|
+
isFlatListLike(ListComponent) && (
|
|
119
|
+
<ListComponent
|
|
120
|
+
ref={listRef}
|
|
121
|
+
{...commonProps}
|
|
122
|
+
data={data}
|
|
123
|
+
renderItem={renderItem}
|
|
124
|
+
initialScrollIndex={initialIndex}
|
|
125
|
+
keyExtractor={keyExtractor}
|
|
126
|
+
estimatedItemSize={width + itemSpacing}
|
|
127
|
+
windowSize={3}
|
|
128
|
+
maxToRenderPerBatch={3}
|
|
129
|
+
getItemLayout={getItemLayout}
|
|
130
|
+
// NOTE - https://github.com/necolas/react-native-web/issues/1299
|
|
131
|
+
{...(Platform.OS === 'web' && { dataSet: { 'paging-enabled-fix': true } })}
|
|
132
|
+
{...listProps}
|
|
133
|
+
/>
|
|
134
|
+
)
|
|
135
|
+
)}
|
|
116
136
|
</Animated.View>
|
|
117
137
|
<WebPagingFix />
|
|
118
138
|
</View>
|
|
@@ -6,7 +6,8 @@ export type ImageViewerManagerState = {
|
|
|
6
6
|
class ImageViewerManager {
|
|
7
7
|
private currentIndex = 0;
|
|
8
8
|
private dataLength = 0;
|
|
9
|
-
private
|
|
9
|
+
private width = 0;
|
|
10
|
+
private listRef: any | null = null;
|
|
10
11
|
private enableSwipeGesture = true;
|
|
11
12
|
private listeners = new Set<(state: ImageViewerManagerState) => void>();
|
|
12
13
|
|
|
@@ -36,8 +37,12 @@ class ImageViewerManager {
|
|
|
36
37
|
};
|
|
37
38
|
}
|
|
38
39
|
|
|
39
|
-
|
|
40
|
-
this.
|
|
40
|
+
setWidth(width: number) {
|
|
41
|
+
this.width = width;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
setListRef(ref: any) {
|
|
45
|
+
this.listRef = ref;
|
|
41
46
|
}
|
|
42
47
|
|
|
43
48
|
setDataLength(length: number) {
|
|
@@ -59,12 +64,18 @@ class ImageViewerManager {
|
|
|
59
64
|
}
|
|
60
65
|
|
|
61
66
|
goToIndex = (index: number) => {
|
|
62
|
-
if (index < 0 || index >= this.dataLength || !this.enableSwipeGesture || !this.
|
|
67
|
+
if (index < 0 || index >= this.dataLength || !this.enableSwipeGesture || !this.listRef) {
|
|
63
68
|
return;
|
|
64
69
|
}
|
|
65
70
|
|
|
66
71
|
this.currentIndex = index;
|
|
67
|
-
|
|
72
|
+
|
|
73
|
+
if (this.listRef.scrollToIndex) {
|
|
74
|
+
this.listRef.scrollToIndex({ index, animated: true });
|
|
75
|
+
} else if (this.listRef.scrollTo) {
|
|
76
|
+
this.listRef.scrollTo({ x: index * this.width, animated: true });
|
|
77
|
+
}
|
|
78
|
+
|
|
68
79
|
this.notifyListeners();
|
|
69
80
|
};
|
|
70
81
|
|
|
@@ -82,7 +93,7 @@ class ImageViewerManager {
|
|
|
82
93
|
|
|
83
94
|
cleanUp() {
|
|
84
95
|
this.listeners.clear();
|
|
85
|
-
this.
|
|
96
|
+
this.listRef = null;
|
|
86
97
|
this.enableSwipeGesture = true;
|
|
87
98
|
this.currentIndex = 0;
|
|
88
99
|
this.dataLength = 0;
|
|
@@ -64,7 +64,7 @@ export const useGestureImageViewer = <T = any>({
|
|
|
64
64
|
const scale = useSharedValue(1);
|
|
65
65
|
const backdropOpacity = useSharedValue(1);
|
|
66
66
|
|
|
67
|
-
const
|
|
67
|
+
const listRef = useRef<any>(null);
|
|
68
68
|
|
|
69
69
|
const dataLength = data?.length || 0;
|
|
70
70
|
|
|
@@ -109,15 +109,16 @@ export const useGestureImageViewer = <T = any>({
|
|
|
109
109
|
manager.setDataLength(dataLength);
|
|
110
110
|
manager.setEnableSwipeGesture(enableSwipeGesture);
|
|
111
111
|
manager.setCurrentIndex(initialIndex);
|
|
112
|
+
manager.setWidth(width + itemSpacing);
|
|
112
113
|
manager.notifyStateChange();
|
|
113
|
-
}, [dataLength, enableSwipeGesture, initialIndex, manager]);
|
|
114
|
+
}, [dataLength, enableSwipeGesture, initialIndex, manager, width, itemSpacing]);
|
|
114
115
|
|
|
115
116
|
useEffect(() => {
|
|
116
|
-
if (!manager || !
|
|
117
|
+
if (!manager || !listRef.current) {
|
|
117
118
|
return;
|
|
118
119
|
}
|
|
119
120
|
|
|
120
|
-
manager.
|
|
121
|
+
manager.setListRef(listRef.current);
|
|
121
122
|
}, [manager]);
|
|
122
123
|
|
|
123
124
|
useEffect(() => {
|
|
@@ -131,21 +132,28 @@ export const useGestureImageViewer = <T = any>({
|
|
|
131
132
|
backdropOpacity.value = 1;
|
|
132
133
|
startScale.value = 1;
|
|
133
134
|
|
|
134
|
-
if (initialIndex <= 0 || !
|
|
135
|
+
if (initialIndex <= 0 || !listRef.current) {
|
|
135
136
|
return;
|
|
136
137
|
}
|
|
137
138
|
|
|
138
139
|
const runAfterInteractions = InteractionManager.runAfterInteractions(() => {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
140
|
+
if (listRef.current.scrollToIndex) {
|
|
141
|
+
listRef.current.scrollToIndex({
|
|
142
|
+
index: initialIndex,
|
|
143
|
+
animated: false,
|
|
144
|
+
});
|
|
145
|
+
} else if (listRef.current.scrollTo) {
|
|
146
|
+
listRef.current.scrollTo({
|
|
147
|
+
x: initialIndex * (width + itemSpacing),
|
|
148
|
+
animated: false,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
143
151
|
});
|
|
144
152
|
|
|
145
153
|
return () => {
|
|
146
154
|
runAfterInteractions?.cancel();
|
|
147
155
|
};
|
|
148
|
-
}, [initialIndex, translateY, backdropOpacity, translateX, scale, startScale]);
|
|
156
|
+
}, [initialIndex, translateY, backdropOpacity, translateX, scale, startScale, width, itemSpacing]);
|
|
149
157
|
|
|
150
158
|
const onMomentumScrollEnd = useCallback(
|
|
151
159
|
(event: NativeSyntheticEvent<NativeScrollEvent>) => {
|
|
@@ -324,7 +332,7 @@ export const useGestureImageViewer = <T = any>({
|
|
|
324
332
|
currentIndex,
|
|
325
333
|
dataLength,
|
|
326
334
|
translateY,
|
|
327
|
-
|
|
335
|
+
listRef,
|
|
328
336
|
isZoomed,
|
|
329
337
|
|
|
330
338
|
dismissGesture,
|
package/src/utils.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { FlatList as RNFlatList, ScrollView as RNScrollView } from 'react-native';
|
|
2
|
+
import { FlatList as GestureFlatList, ScrollView as GestureScrollView } from 'react-native-gesture-handler';
|
|
3
|
+
|
|
4
|
+
export const isScrollViewLike = (component: any): component is typeof RNScrollView => {
|
|
5
|
+
return component === RNScrollView || component === GestureScrollView;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export const isFlatListLike = (component: any): component is typeof RNFlatList => {
|
|
9
|
+
try {
|
|
10
|
+
const FlashList = require('@shopify/flash-list')?.FlashList;
|
|
11
|
+
|
|
12
|
+
if (FlashList && component === FlashList) {
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
} catch {
|
|
16
|
+
// do nothing
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (component === RNFlatList || component === GestureFlatList) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return component?.name === 'FlashList';
|
|
24
|
+
};
|