react-native-gesture-image-viewer 0.2.0 → 0.3.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/lib/module/GestureImageViewer.js +8 -1
- package/lib/module/GestureImageViewer.js.map +1 -1
- package/lib/module/ImageViewerManager.js +78 -0
- package/lib/module/ImageViewerManager.js.map +1 -0
- package/lib/module/ImageViewerRegistry.js +26 -0
- package/lib/module/ImageViewerRegistry.js.map +1 -0
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/useGestureImageViewer.js +42 -46
- package/lib/module/useGestureImageViewer.js.map +1 -1
- package/lib/module/useImageViewerController.js +28 -0
- package/lib/module/useImageViewerController.js.map +1 -0
- package/lib/typescript/src/GestureImageViewer.d.ts +1 -1
- package/lib/typescript/src/GestureImageViewer.d.ts.map +1 -1
- package/lib/typescript/src/ImageViewerManager.d.ts +28 -0
- package/lib/typescript/src/ImageViewerManager.d.ts.map +1 -0
- package/lib/typescript/src/ImageViewerRegistry.d.ts +10 -0
- package/lib/typescript/src/ImageViewerRegistry.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +1 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +1 -0
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/useGestureImageViewer.d.ts +1 -4
- package/lib/typescript/src/useGestureImageViewer.d.ts.map +1 -1
- package/lib/typescript/src/useImageViewerController.d.ts +8 -0
- package/lib/typescript/src/useImageViewerController.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/GestureImageViewer.tsx +10 -1
- package/src/ImageViewerManager.ts +92 -0
- package/src/ImageViewerRegistry.ts +30 -0
- package/src/index.tsx +1 -0
- package/src/types.ts +1 -0
- package/src/useGestureImageViewer.ts +57 -50
- package/src/useImageViewerController.ts +34 -0
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useMemo } from 'react';
|
|
3
|
+
import { useCallback, useEffect, useMemo } from 'react';
|
|
4
4
|
import { Platform, StyleSheet, useWindowDimensions, View } from 'react-native';
|
|
5
5
|
import { FlatList, Gesture, GestureDetector, GestureHandlerRootView } from 'react-native-gesture-handler';
|
|
6
6
|
import Animated from 'react-native-reanimated';
|
|
7
|
+
import { registry } from "./ImageViewerRegistry.js";
|
|
7
8
|
import { useGestureImageViewer } from "./useGestureImageViewer.js";
|
|
8
9
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
10
|
const WebPagingFix = () => {
|
|
@@ -15,6 +16,7 @@ const WebPagingFix = () => {
|
|
|
15
16
|
});
|
|
16
17
|
};
|
|
17
18
|
export function GestureImageViewer({
|
|
19
|
+
id = 'default',
|
|
18
20
|
data,
|
|
19
21
|
renderImage,
|
|
20
22
|
renderContainer,
|
|
@@ -40,6 +42,7 @@ export function GestureImageViewer({
|
|
|
40
42
|
animatedStyle,
|
|
41
43
|
backdropStyle
|
|
42
44
|
} = useGestureImageViewer({
|
|
45
|
+
id,
|
|
43
46
|
data,
|
|
44
47
|
width,
|
|
45
48
|
initialIndex,
|
|
@@ -69,6 +72,10 @@ export function GestureImageViewer({
|
|
|
69
72
|
const gesture = useMemo(() => {
|
|
70
73
|
return Gesture.Race(dismissGesture, zoomGesture);
|
|
71
74
|
}, [zoomGesture, dismissGesture]);
|
|
75
|
+
useEffect(() => {
|
|
76
|
+
registry.createManager(id);
|
|
77
|
+
return () => registry.deleteManager(id);
|
|
78
|
+
}, [id]);
|
|
72
79
|
const listComponent = /*#__PURE__*/_jsx(GestureHandlerRootView, {
|
|
73
80
|
children: /*#__PURE__*/_jsx(GestureDetector, {
|
|
74
81
|
gesture: gesture,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useMemo","Platform","StyleSheet","useWindowDimensions","View","FlatList","Gesture","GestureDetector","GestureHandlerRootView","Animated","useGestureImageViewer","jsx","_jsx","jsxs","_jsxs","WebPagingFix","OS","children","GestureImageViewer","data","renderImage","renderContainer","ListComponent","width","customWidth","listProps","backdropStyle","backdropStyleProps","containerStyle","initialIndex","props","screenWidth","currentIndex","flatListRef","isZoomed","dismissGesture","zoomGesture","onMomentumScrollEnd","animatedStyle","renderItem","item","index","isActive","style","height","justifyContent","alignItems","getItemLayout","_","length","offset","keyExtractor","gesture","Race","listComponent","styles","container","background","content","ref","horizontal","pagingEnabled","scrollEnabled","showsHorizontalScrollIndicator","initialScrollIndex","windowSize","maxToRenderPerBatch","removeClippedSubviews","dataSet","create","flex","position","top","left","right","bottom","backgroundColor"],"sourceRoot":"../../src","sources":["GestureImageViewer.tsx"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,OAAO,QAAQ,OAAO;
|
|
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","props","screenWidth","currentIndex","flatListRef","isZoomed","dismissGesture","zoomGesture","onMomentumScrollEnd","animatedStyle","renderItem","item","index","isActive","style","height","justifyContent","alignItems","getItemLayout","_","length","offset","keyExtractor","gesture","Race","createManager","deleteManager","listComponent","styles","container","background","content","ref","horizontal","pagingEnabled","scrollEnabled","showsHorizontalScrollIndicator","initialScrollIndex","windowSize","maxToRenderPerBatch","removeClippedSubviews","dataSet","create","flex","position","top","left","right","bottom","backgroundColor"],"sourceRoot":"../../src","sources":["GestureImageViewer.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
class ImageViewerManager {
|
|
4
|
+
currentIndex = 0;
|
|
5
|
+
dataLength = 0;
|
|
6
|
+
flatListRef = null;
|
|
7
|
+
enableSwipeGesture = true;
|
|
8
|
+
listeners = new Set();
|
|
9
|
+
|
|
10
|
+
// private updateState(newState: Partial<any>) {
|
|
11
|
+
// Object.assign(this, newState);
|
|
12
|
+
// this.notifyListeners();
|
|
13
|
+
// }
|
|
14
|
+
|
|
15
|
+
notifyListeners() {
|
|
16
|
+
const state = this.getState();
|
|
17
|
+
this.listeners.forEach(listener => listener(state));
|
|
18
|
+
}
|
|
19
|
+
subscribe(listener) {
|
|
20
|
+
this.listeners.add(listener);
|
|
21
|
+
return () => {
|
|
22
|
+
this.listeners.delete(listener);
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
getState() {
|
|
26
|
+
return {
|
|
27
|
+
currentIndex: this.currentIndex,
|
|
28
|
+
dataLength: this.dataLength
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
setFlatListRef(ref) {
|
|
32
|
+
this.flatListRef = ref;
|
|
33
|
+
}
|
|
34
|
+
setDataLength(length) {
|
|
35
|
+
this.dataLength = length;
|
|
36
|
+
}
|
|
37
|
+
setEnableSwipeGesture(enabled) {
|
|
38
|
+
this.enableSwipeGesture = enabled;
|
|
39
|
+
}
|
|
40
|
+
setCurrentIndex(index) {
|
|
41
|
+
if (index !== this.currentIndex) {
|
|
42
|
+
this.currentIndex = index;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
notifyStateChange() {
|
|
46
|
+
this.notifyListeners();
|
|
47
|
+
}
|
|
48
|
+
goToIndex = index => {
|
|
49
|
+
if (index < 0 || index >= this.dataLength || !this.enableSwipeGesture || !this.flatListRef) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
this.currentIndex = index;
|
|
53
|
+
this.flatListRef.scrollToIndex({
|
|
54
|
+
index,
|
|
55
|
+
animated: true
|
|
56
|
+
});
|
|
57
|
+
this.notifyListeners();
|
|
58
|
+
};
|
|
59
|
+
goToPrevious = () => {
|
|
60
|
+
if (this.currentIndex > 0) {
|
|
61
|
+
this.goToIndex(this.currentIndex - 1);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
goToNext = () => {
|
|
65
|
+
if (this.currentIndex < this.dataLength - 1) {
|
|
66
|
+
this.goToIndex(this.currentIndex + 1);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
cleanUp() {
|
|
70
|
+
this.listeners.clear();
|
|
71
|
+
this.flatListRef = null;
|
|
72
|
+
this.enableSwipeGesture = true;
|
|
73
|
+
this.currentIndex = 0;
|
|
74
|
+
this.dataLength = 0;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export default ImageViewerManager;
|
|
78
|
+
//# sourceMappingURL=ImageViewerManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ImageViewerManager","currentIndex","dataLength","flatListRef","enableSwipeGesture","listeners","Set","notifyListeners","state","getState","forEach","listener","subscribe","add","delete","setFlatListRef","ref","setDataLength","length","setEnableSwipeGesture","enabled","setCurrentIndex","index","notifyStateChange","goToIndex","scrollToIndex","animated","goToPrevious","goToNext","cleanUp","clear"],"sourceRoot":"../../src","sources":["ImageViewerManager.ts"],"mappings":";;AAKA,MAAMA,kBAAkB,CAAC;EACfC,YAAY,GAAG,CAAC;EAChBC,UAAU,GAAG,CAAC;EACdC,WAAW,GAAQ,IAAI;EACvBC,kBAAkB,GAAG,IAAI;EACzBC,SAAS,GAAG,IAAIC,GAAG,CAA2C,CAAC;;EAEvE;EACA;EACA;EACA;;EAEQC,eAAeA,CAAA,EAAG;IACxB,MAAMC,KAAK,GAAG,IAAI,CAACC,QAAQ,CAAC,CAAC;IAE7B,IAAI,CAACJ,SAAS,CAACK,OAAO,CAAEC,QAAQ,IAAKA,QAAQ,CAACH,KAAK,CAAC,CAAC;EACvD;EAEAI,SAASA,CAACD,QAAkD,EAAE;IAC5D,IAAI,CAACN,SAAS,CAACQ,GAAG,CAACF,QAAQ,CAAC;IAE5B,OAAO,MAAM;MACX,IAAI,CAACN,SAAS,CAACS,MAAM,CAACH,QAAQ,CAAC;IACjC,CAAC;EACH;EAEAF,QAAQA,CAAA,EAAG;IACT,OAAO;MACLR,YAAY,EAAE,IAAI,CAACA,YAAY;MAC/BC,UAAU,EAAE,IAAI,CAACA;IACnB,CAAC;EACH;EAEAa,cAAcA,CAACC,GAAQ,EAAE;IACvB,IAAI,CAACb,WAAW,GAAGa,GAAG;EACxB;EAEAC,aAAaA,CAACC,MAAc,EAAE;IAC5B,IAAI,CAAChB,UAAU,GAAGgB,MAAM;EAC1B;EAEAC,qBAAqBA,CAACC,OAAgB,EAAE;IACtC,IAAI,CAAChB,kBAAkB,GAAGgB,OAAO;EACnC;EAEAC,eAAeA,CAACC,KAAa,EAAE;IAC7B,IAAIA,KAAK,KAAK,IAAI,CAACrB,YAAY,EAAE;MAC/B,IAAI,CAACA,YAAY,GAAGqB,KAAK;IAC3B;EACF;EAEAC,iBAAiBA,CAAA,EAAG;IAClB,IAAI,CAAChB,eAAe,CAAC,CAAC;EACxB;EAEAiB,SAAS,GAAIF,KAAa,IAAK;IAC7B,IAAIA,KAAK,GAAG,CAAC,IAAIA,KAAK,IAAI,IAAI,CAACpB,UAAU,IAAI,CAAC,IAAI,CAACE,kBAAkB,IAAI,CAAC,IAAI,CAACD,WAAW,EAAE;MAC1F;IACF;IAEA,IAAI,CAACF,YAAY,GAAGqB,KAAK;IACzB,IAAI,CAACnB,WAAW,CAACsB,aAAa,CAAC;MAAEH,KAAK;MAAEI,QAAQ,EAAE;IAAK,CAAC,CAAC;IACzD,IAAI,CAACnB,eAAe,CAAC,CAAC;EACxB,CAAC;EAEDoB,YAAY,GAAGA,CAAA,KAAM;IACnB,IAAI,IAAI,CAAC1B,YAAY,GAAG,CAAC,EAAE;MACzB,IAAI,CAACuB,SAAS,CAAC,IAAI,CAACvB,YAAY,GAAG,CAAC,CAAC;IACvC;EACF,CAAC;EAED2B,QAAQ,GAAGA,CAAA,KAAM;IACf,IAAI,IAAI,CAAC3B,YAAY,GAAG,IAAI,CAACC,UAAU,GAAG,CAAC,EAAE;MAC3C,IAAI,CAACsB,SAAS,CAAC,IAAI,CAACvB,YAAY,GAAG,CAAC,CAAC;IACvC;EACF,CAAC;EAED4B,OAAOA,CAAA,EAAG;IACR,IAAI,CAACxB,SAAS,CAACyB,KAAK,CAAC,CAAC;IACtB,IAAI,CAAC3B,WAAW,GAAG,IAAI;IACvB,IAAI,CAACC,kBAAkB,GAAG,IAAI;IAC9B,IAAI,CAACH,YAAY,GAAG,CAAC;IACrB,IAAI,CAACC,UAAU,GAAG,CAAC;EACrB;AACF;AAEA,eAAeF,kBAAkB","ignoreList":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import ImageViewerManager from "./ImageViewerManager.js";
|
|
4
|
+
class ImageViewerRegistry {
|
|
5
|
+
managers = new Map();
|
|
6
|
+
createManager(id) {
|
|
7
|
+
if (this.managers.has(id)) {
|
|
8
|
+
return this.managers.get(id) || null;
|
|
9
|
+
}
|
|
10
|
+
const manager = new ImageViewerManager();
|
|
11
|
+
this.managers.set(id, manager);
|
|
12
|
+
return manager;
|
|
13
|
+
}
|
|
14
|
+
getManager(id) {
|
|
15
|
+
return this.managers.get(id) || null;
|
|
16
|
+
}
|
|
17
|
+
deleteManager(id) {
|
|
18
|
+
const manager = this.managers.get(id);
|
|
19
|
+
if (manager) {
|
|
20
|
+
manager.cleanUp();
|
|
21
|
+
this.managers.delete(id);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export const registry = new ImageViewerRegistry();
|
|
26
|
+
//# sourceMappingURL=ImageViewerRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ImageViewerManager","ImageViewerRegistry","managers","Map","createManager","id","has","get","manager","set","getManager","deleteManager","cleanUp","delete","registry"],"sourceRoot":"../../src","sources":["ImageViewerRegistry.ts"],"mappings":";;AAAA,OAAOA,kBAAkB,MAAM,yBAAsB;AAErD,MAAMC,mBAAmB,CAAC;EAChBC,QAAQ,GAAG,IAAIC,GAAG,CAA6B,CAAC;EAExDC,aAAaA,CAACC,EAAU,EAA6B;IACnD,IAAI,IAAI,CAACH,QAAQ,CAACI,GAAG,CAACD,EAAE,CAAC,EAAE;MACzB,OAAO,IAAI,CAACH,QAAQ,CAACK,GAAG,CAACF,EAAE,CAAC,IAAI,IAAI;IACtC;IAEA,MAAMG,OAAO,GAAG,IAAIR,kBAAkB,CAAC,CAAC;IACxC,IAAI,CAACE,QAAQ,CAACO,GAAG,CAACJ,EAAE,EAAEG,OAAO,CAAC;IAC9B,OAAOA,OAAO;EAChB;EAEAE,UAAUA,CAACL,EAAU,EAA6B;IAChD,OAAO,IAAI,CAACH,QAAQ,CAACK,GAAG,CAACF,EAAE,CAAC,IAAI,IAAI;EACtC;EAEAM,aAAaA,CAACN,EAAU,EAAE;IACxB,MAAMG,OAAO,GAAG,IAAI,CAACN,QAAQ,CAACK,GAAG,CAACF,EAAE,CAAC;IAErC,IAAIG,OAAO,EAAE;MACXA,OAAO,CAACI,OAAO,CAAC,CAAC;MACjB,IAAI,CAACV,QAAQ,CAACW,MAAM,CAACR,EAAE,CAAC;IAC1B;EACF;AACF;AAEA,OAAO,MAAMS,QAAQ,GAAG,IAAIb,mBAAmB,CAAC,CAAC","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["GestureImageViewer"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,kBAAkB,QAAQ,yBAAsB","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["GestureImageViewer","useImageViewerController"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,kBAAkB,QAAQ,yBAAsB;AAEzD,SAASC,wBAAwB,QAAQ,+BAA4B","ignoreList":[]}
|
|
@@ -4,6 +4,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
|
4
4
|
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
|
+
import { registry } from "./ImageViewerRegistry.js";
|
|
7
8
|
export const useGestureImageViewer = ({
|
|
8
9
|
data,
|
|
9
10
|
initialIndex = 0,
|
|
@@ -20,15 +21,19 @@ export const useGestureImageViewer = ({
|
|
|
20
21
|
enableZoomGesture = true,
|
|
21
22
|
enableDoubleTapGesture = true,
|
|
22
23
|
enableZoomPanGesture = true,
|
|
23
|
-
maxZoomScale = 2
|
|
24
|
+
maxZoomScale = 2,
|
|
25
|
+
id = 'default'
|
|
24
26
|
}) => {
|
|
25
27
|
const {
|
|
26
28
|
width: screenWidth,
|
|
27
29
|
height: screenHeight
|
|
28
30
|
} = useWindowDimensions();
|
|
29
31
|
const width = customWidth || screenWidth;
|
|
30
|
-
const [currentIndex, setCurrentIndex] = useState(initialIndex);
|
|
31
32
|
const [isZoomed, setIsZoomed] = useState(false);
|
|
33
|
+
const [managerState, setManagerState] = useState({
|
|
34
|
+
currentIndex: initialIndex,
|
|
35
|
+
dataLength: data?.length || 0
|
|
36
|
+
});
|
|
32
37
|
const initialTranslateY = useSharedValue(0);
|
|
33
38
|
const initialTranslateX = useSharedValue(0);
|
|
34
39
|
const startScale = useSharedValue(1);
|
|
@@ -41,10 +46,35 @@ export const useGestureImageViewer = ({
|
|
|
41
46
|
useAnimatedReaction(() => scale.value, currentScale => {
|
|
42
47
|
runOnJS(setIsZoomed)(currentScale > 1);
|
|
43
48
|
});
|
|
44
|
-
|
|
45
|
-
// 초기 위치 설정
|
|
46
49
|
useEffect(() => {
|
|
47
|
-
|
|
50
|
+
const manager = registry.getManager(id);
|
|
51
|
+
if (!manager) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
setManagerState(manager.getState());
|
|
55
|
+
return manager.subscribe(setManagerState);
|
|
56
|
+
}, [id]);
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
const manager = registry.getManager(id);
|
|
59
|
+
if (!manager) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
manager.setDataLength(dataLength);
|
|
63
|
+
manager.setEnableSwipeGesture(enableSwipeGesture);
|
|
64
|
+
manager.setCurrentIndex(initialIndex);
|
|
65
|
+
manager.notifyStateChange();
|
|
66
|
+
}, [dataLength, enableSwipeGesture, initialIndex, id]);
|
|
67
|
+
useEffect(() => {
|
|
68
|
+
const manager = registry.getManager(id);
|
|
69
|
+
if (!manager || !flatListRef.current) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
manager.setFlatListRef(flatListRef.current);
|
|
73
|
+
}, [id]);
|
|
74
|
+
useEffect(() => {
|
|
75
|
+
onIndexChange?.(managerState.currentIndex);
|
|
76
|
+
}, [managerState.currentIndex, onIndexChange]);
|
|
77
|
+
useEffect(() => {
|
|
48
78
|
translateY.value = 0;
|
|
49
79
|
translateX.value = 0;
|
|
50
80
|
scale.value = 1;
|
|
@@ -53,8 +83,6 @@ export const useGestureImageViewer = ({
|
|
|
53
83
|
if (initialIndex <= 0 || !flatListRef.current) {
|
|
54
84
|
return;
|
|
55
85
|
}
|
|
56
|
-
|
|
57
|
-
// FlatList 초기 위치 설정
|
|
58
86
|
const runAfterInteractions = InteractionManager.runAfterInteractions(() => {
|
|
59
87
|
flatListRef.current?.scrollToIndex({
|
|
60
88
|
index: initialIndex,
|
|
@@ -65,21 +93,17 @@ export const useGestureImageViewer = ({
|
|
|
65
93
|
runAfterInteractions?.cancel();
|
|
66
94
|
};
|
|
67
95
|
}, [initialIndex, translateY, backdropOpacity, translateX, scale, startScale]);
|
|
68
|
-
|
|
69
|
-
// 인덱스 변경 알림
|
|
70
|
-
useEffect(() => {
|
|
71
|
-
onIndexChange?.(currentIndex);
|
|
72
|
-
}, [currentIndex, onIndexChange]);
|
|
73
|
-
|
|
74
|
-
// FlatList 스크롤 핸들러
|
|
75
96
|
const onMomentumScrollEnd = useCallback(event => {
|
|
76
97
|
if (!enableSwipeGesture) {
|
|
77
98
|
return;
|
|
78
99
|
}
|
|
79
100
|
const contentOffset = event.nativeEvent.contentOffset;
|
|
80
101
|
const newIndex = Math.round(contentOffset.x / width);
|
|
81
|
-
if (newIndex !== currentIndex && newIndex >= 0 && newIndex < dataLength) {
|
|
82
|
-
|
|
102
|
+
if (newIndex !== managerState.currentIndex && newIndex >= 0 && newIndex < dataLength) {
|
|
103
|
+
const manager = registry.getManager(id);
|
|
104
|
+
if (manager) {
|
|
105
|
+
manager.setCurrentIndex(newIndex);
|
|
106
|
+
}
|
|
83
107
|
translateX.value = withTiming(0);
|
|
84
108
|
translateY.value = withTiming(0);
|
|
85
109
|
initialTranslateX.value = withTiming(0);
|
|
@@ -87,27 +111,7 @@ export const useGestureImageViewer = ({
|
|
|
87
111
|
startScale.value = withTiming(1);
|
|
88
112
|
scale.value = withTiming(1);
|
|
89
113
|
}
|
|
90
|
-
}, [currentIndex, dataLength, width, enableSwipeGesture, translateX, translateY, scale, initialTranslateX, initialTranslateY, startScale]);
|
|
91
|
-
const goToIndex = useCallback(index => {
|
|
92
|
-
if (index < 0 || index >= dataLength || !enableSwipeGesture) {
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
setCurrentIndex(index);
|
|
96
|
-
flatListRef.current?.scrollToIndex({
|
|
97
|
-
index,
|
|
98
|
-
animated: true
|
|
99
|
-
});
|
|
100
|
-
}, [dataLength, enableSwipeGesture]);
|
|
101
|
-
const goToPrevious = useCallback(() => {
|
|
102
|
-
if (currentIndex > 0) {
|
|
103
|
-
goToIndex(currentIndex - 1);
|
|
104
|
-
}
|
|
105
|
-
}, [currentIndex, goToIndex]);
|
|
106
|
-
const goToNext = useCallback(() => {
|
|
107
|
-
if (currentIndex < dataLength - 1) {
|
|
108
|
-
goToIndex(currentIndex + 1);
|
|
109
|
-
}
|
|
110
|
-
}, [currentIndex, dataLength, goToIndex]);
|
|
114
|
+
}, [id, managerState.currentIndex, dataLength, width, enableSwipeGesture, translateX, translateY, scale, initialTranslateX, initialTranslateY, startScale]);
|
|
111
115
|
const dismissGesture = useMemo(() => {
|
|
112
116
|
return Gesture.Pan().minDistance(10).averageTouches(true).activeOffsetY([-10, 10]).failOffsetX([-10, 10]).enabled(!isZoomed).onUpdate(event => {
|
|
113
117
|
translateY.value = event.translationY / resistance;
|
|
@@ -205,22 +209,14 @@ export const useGestureImageViewer = ({
|
|
|
205
209
|
};
|
|
206
210
|
}, [animateBackdrop]);
|
|
207
211
|
return {
|
|
208
|
-
|
|
209
|
-
currentIndex,
|
|
212
|
+
currentIndex: managerState.currentIndex,
|
|
210
213
|
dataLength,
|
|
211
214
|
translateY,
|
|
212
215
|
flatListRef,
|
|
213
216
|
isZoomed,
|
|
214
|
-
// Actions
|
|
215
|
-
goToPrevious,
|
|
216
|
-
goToNext,
|
|
217
|
-
goToIndex,
|
|
218
|
-
// Gesture
|
|
219
217
|
dismissGesture,
|
|
220
218
|
zoomGesture,
|
|
221
|
-
// FlatList handlers
|
|
222
219
|
onMomentumScrollEnd,
|
|
223
|
-
// Animated styles
|
|
224
220
|
animatedStyle,
|
|
225
221
|
backdropStyle
|
|
226
222
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","InteractionManager","useWindowDimensions","Gesture","Easing","interpolate","runOnJS","useAnimatedReaction","useAnimatedStyle","useSharedValue","withSpring","withTiming","useGestureImageViewer","data","initialIndex","onIndexChange","onDismiss","width","customWidth","dismissThreshold","resistance","animateBackdrop","enableDismissGesture","enableSwipeGesture","enableZoomGesture","enableDoubleTapGesture","enableZoomPanGesture","maxZoomScale","screenWidth","height","screenHeight","currentIndex","setCurrentIndex","isZoomed","setIsZoomed","initialTranslateY","initialTranslateX","startScale","translateY","translateX","scale","backdropOpacity","flatListRef","dataLength","length","value","currentScale","current","runAfterInteractions","scrollToIndex","index","animated","cancel","onMomentumScrollEnd","event","contentOffset","nativeEvent","newIndex","Math","round","x","goToIndex","goToPrevious","goToNext","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","id","screenWidth","height","screenHeight","isZoomed","setIsZoomed","managerState","setManagerState","currentIndex","dataLength","length","initialTranslateY","initialTranslateX","startScale","translateY","translateX","scale","backdropOpacity","flatListRef","value","currentScale","manager","getManager","getState","subscribe","setDataLength","setEnableSwipeGesture","setCurrentIndex","notifyStateChange","current","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":[]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
4
|
+
import { registry } from "./ImageViewerRegistry.js";
|
|
5
|
+
export const useImageViewerController = (id = 'default') => {
|
|
6
|
+
const [state, setState] = useState({
|
|
7
|
+
currentIndex: 0,
|
|
8
|
+
dataLength: 0
|
|
9
|
+
});
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
const manager = registry.createManager(id);
|
|
12
|
+
if (!manager) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
setState(manager.getState());
|
|
16
|
+
return manager.subscribe(setState);
|
|
17
|
+
}, [id]);
|
|
18
|
+
const manager = registry.getManager(id);
|
|
19
|
+
const noopFunction = useMemo(() => () => {}, []);
|
|
20
|
+
return {
|
|
21
|
+
goToIndex: manager?.goToIndex || noopFunction,
|
|
22
|
+
goToPrevious: manager?.goToPrevious || noopFunction,
|
|
23
|
+
goToNext: manager?.goToNext || noopFunction,
|
|
24
|
+
currentIndex: state.currentIndex,
|
|
25
|
+
totalCount: state.dataLength
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=useImageViewerController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useMemo","useState","registry","useImageViewerController","id","state","setState","currentIndex","dataLength","manager","createManager","getState","subscribe","getManager","noopFunction","goToIndex","goToPrevious","goToNext","totalCount"],"sourceRoot":"../../src","sources":["useImageViewerController.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AAEpD,SAASC,QAAQ,QAAQ,0BAAuB;AAEhD,OAAO,MAAMC,wBAAwB,GAAGA,CAACC,EAAE,GAAG,SAAS,KAAK;EAC1D,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGL,QAAQ,CAA0B;IAC1DM,YAAY,EAAE,CAAC;IACfC,UAAU,EAAE;EACd,CAAC,CAAC;EAEFT,SAAS,CAAC,MAAM;IACd,MAAMU,OAAO,GAAGP,QAAQ,CAACQ,aAAa,CAACN,EAAE,CAAC;IAE1C,IAAI,CAACK,OAAO,EAAE;MACZ;IACF;IAEAH,QAAQ,CAACG,OAAO,CAACE,QAAQ,CAAC,CAAC,CAAC;IAE5B,OAAOF,OAAO,CAACG,SAAS,CAACN,QAAQ,CAAC;EACpC,CAAC,EAAE,CAACF,EAAE,CAAC,CAAC;EAER,MAAMK,OAAO,GAAGP,QAAQ,CAACW,UAAU,CAACT,EAAE,CAAC;EAEvC,MAAMU,YAAY,GAAGd,OAAO,CAAC,MAAM,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC;EAEhD,OAAO;IACLe,SAAS,EAAEN,OAAO,EAAEM,SAAS,IAAID,YAAY;IAC7CE,YAAY,EAAEP,OAAO,EAAEO,YAAY,IAAIF,YAAY;IACnDG,QAAQ,EAAER,OAAO,EAAEQ,QAAQ,IAAIH,YAAY;IAC3CP,YAAY,EAAEF,KAAK,CAACE,YAAY;IAChCW,UAAU,EAAEb,KAAK,CAACG;EACpB,CAAC;AACH,CAAC","ignoreList":[]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { GestureImageViewerProps } from './types';
|
|
2
|
-
export declare function GestureImageViewer<T = any>({ data, renderImage, renderContainer, ListComponent, width: customWidth, listProps, backdropStyle: backdropStyleProps, containerStyle, initialIndex, ...props }: GestureImageViewerProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export declare function GestureImageViewer<T = any>({ id, data, renderImage, renderContainer, ListComponent, width: customWidth, listProps, backdropStyle: backdropStyleProps, containerStyle, initialIndex, ...props }: GestureImageViewerProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=GestureImageViewer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GestureImageViewer.d.ts","sourceRoot":"","sources":["../../../src/GestureImageViewer.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GestureImageViewer.d.ts","sourceRoot":"","sources":["../../../src/GestureImageViewer.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAWvD,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,GAAG,KAAK,EACT,EAAE,uBAAuB,CAAC,CAAC,CAAC,2CAmG5B"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type ImageViewerManagerState = {
|
|
2
|
+
currentIndex: number;
|
|
3
|
+
dataLength: number;
|
|
4
|
+
};
|
|
5
|
+
declare class ImageViewerManager {
|
|
6
|
+
private currentIndex;
|
|
7
|
+
private dataLength;
|
|
8
|
+
private flatListRef;
|
|
9
|
+
private enableSwipeGesture;
|
|
10
|
+
private listeners;
|
|
11
|
+
private notifyListeners;
|
|
12
|
+
subscribe(listener: (state: ImageViewerManagerState) => void): () => void;
|
|
13
|
+
getState(): {
|
|
14
|
+
currentIndex: number;
|
|
15
|
+
dataLength: number;
|
|
16
|
+
};
|
|
17
|
+
setFlatListRef(ref: any): void;
|
|
18
|
+
setDataLength(length: number): void;
|
|
19
|
+
setEnableSwipeGesture(enabled: boolean): void;
|
|
20
|
+
setCurrentIndex(index: number): void;
|
|
21
|
+
notifyStateChange(): void;
|
|
22
|
+
goToIndex: (index: number) => void;
|
|
23
|
+
goToPrevious: () => void;
|
|
24
|
+
goToNext: () => void;
|
|
25
|
+
cleanUp(): void;
|
|
26
|
+
}
|
|
27
|
+
export default ImageViewerManager;
|
|
28
|
+
//# sourceMappingURL=ImageViewerManager.d.ts.map
|
|
@@ -0,0 +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,WAAW,CAAa;IAChC,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,cAAc,CAAC,GAAG,EAAE,GAAG;IAIvB,aAAa,CAAC,MAAM,EAAE,MAAM;IAI5B,qBAAqB,CAAC,OAAO,EAAE,OAAO;IAItC,eAAe,CAAC,KAAK,EAAE,MAAM;IAM7B,iBAAiB;IAIjB,SAAS,GAAI,OAAO,MAAM,UAQxB;IAEF,YAAY,aAIV;IAEF,QAAQ,aAIN;IAEF,OAAO;CAOR;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import ImageViewerManager from './ImageViewerManager';
|
|
2
|
+
declare class ImageViewerRegistry {
|
|
3
|
+
private managers;
|
|
4
|
+
createManager(id: string): ImageViewerManager | null;
|
|
5
|
+
getManager(id: string): ImageViewerManager | null;
|
|
6
|
+
deleteManager(id: string): void;
|
|
7
|
+
}
|
|
8
|
+
export declare const registry: ImageViewerRegistry;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=ImageViewerRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageViewerRegistry.d.ts","sourceRoot":"","sources":["../../../src/ImageViewerRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AAEtD,cAAM,mBAAmB;IACvB,OAAO,CAAC,QAAQ,CAAyC;IAEzD,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAUpD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAIjD,aAAa,CAAC,EAAE,EAAE,MAAM;CAQzB;AAED,eAAO,MAAM,QAAQ,qBAA4B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { StyleProp, ViewStyle } from 'react-native';
|
|
2
2
|
import type { SharedValue } from 'react-native-reanimated';
|
|
3
3
|
export interface GestureImageViewerProps<T = any> {
|
|
4
|
+
id?: string;
|
|
4
5
|
data: T[];
|
|
5
6
|
initialIndex?: number;
|
|
6
7
|
onIndexChange?: (index: number) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,WAAW,uBAAuB,CAAC,CAAC,GAAG,GAAG;IAC9C,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,YAAY,CAAC;IAC5D,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY,CAAC;IACvE,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,aAAa,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACrC,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,YAAY,GAAG,UAAU,GAAG,IAAI,CAAC;CACjD"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,WAAW,uBAAuB,CAAC,CAAC,GAAG,GAAG;IAC9C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,YAAY,CAAC;IAC5D,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY,CAAC;IACvE,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,aAAa,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACrC,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,YAAY,GAAG,UAAU,GAAG,IAAI,CAAC;CACjD"}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import { type NativeScrollEvent, type NativeSyntheticEvent } from 'react-native';
|
|
2
2
|
import type { GestureImageViewerProps } from './types';
|
|
3
3
|
type UseGestureImageViewerProps<T = any> = Omit<GestureImageViewerProps<T>, 'renderImage' | 'renderContainer' | 'ListComponent' | 'listProps' | 'containerStyle' | 'backdropStyle'>;
|
|
4
|
-
export declare const useGestureImageViewer: <T = any>({ data, initialIndex, onIndexChange, onDismiss, width: customWidth, dismissThreshold, resistance, animateBackdrop, enableDismissGesture, enableSwipeGesture, enableZoomGesture, enableDoubleTapGesture, enableZoomPanGesture, maxZoomScale, }: UseGestureImageViewerProps<T>) => {
|
|
4
|
+
export declare const useGestureImageViewer: <T = any>({ data, initialIndex, onIndexChange, onDismiss, width: customWidth, dismissThreshold, resistance, animateBackdrop, enableDismissGesture, enableSwipeGesture, enableZoomGesture, enableDoubleTapGesture, enableZoomPanGesture, maxZoomScale, id, }: UseGestureImageViewerProps<T>) => {
|
|
5
5
|
currentIndex: number;
|
|
6
6
|
dataLength: number;
|
|
7
7
|
translateY: import("react-native-reanimated").SharedValue<number>;
|
|
8
8
|
flatListRef: import("react").RefObject<any>;
|
|
9
9
|
isZoomed: boolean;
|
|
10
|
-
goToPrevious: () => void;
|
|
11
|
-
goToNext: () => void;
|
|
12
|
-
goToIndex: (index: number) => void;
|
|
13
10
|
dismissGesture: import("react-native-gesture-handler/lib/typescript/handlers/gestures/panGesture").PanGesture;
|
|
14
11
|
zoomGesture: import("react-native-gesture-handler/lib/typescript/handlers/gestures/gestureComposition").SimultaneousGesture;
|
|
15
12
|
onMomentumScrollEnd: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;
|
|
@@ -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;
|
|
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,mPAkB5C,0BAA0B,CAAC,CAAC,CAAC;;;;;;;;iCA8FpB,oBAAoB,CAAC,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;CA0LlD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useImageViewerController.d.ts","sourceRoot":"","sources":["../../../src/useImageViewerController.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,wBAAwB,GAAI,WAAc;;;;;;CA6BtD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { useCallback, useMemo } from 'react';
|
|
1
|
+
import { useCallback, useEffect, useMemo } from 'react';
|
|
2
2
|
import { Platform, 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
|
+
import { registry } from './ImageViewerRegistry';
|
|
5
6
|
import type { GestureImageViewerProps } from './types';
|
|
6
7
|
import { useGestureImageViewer } from './useGestureImageViewer';
|
|
7
8
|
|
|
@@ -14,6 +15,7 @@ const WebPagingFix = () => {
|
|
|
14
15
|
};
|
|
15
16
|
|
|
16
17
|
export function GestureImageViewer<T = any>({
|
|
18
|
+
id = 'default',
|
|
17
19
|
data,
|
|
18
20
|
renderImage,
|
|
19
21
|
renderContainer,
|
|
@@ -39,6 +41,7 @@ export function GestureImageViewer<T = any>({
|
|
|
39
41
|
animatedStyle,
|
|
40
42
|
backdropStyle,
|
|
41
43
|
} = useGestureImageViewer({
|
|
44
|
+
id,
|
|
42
45
|
data,
|
|
43
46
|
width,
|
|
44
47
|
initialIndex,
|
|
@@ -83,6 +86,12 @@ export function GestureImageViewer<T = any>({
|
|
|
83
86
|
return Gesture.Race(dismissGesture, zoomGesture);
|
|
84
87
|
}, [zoomGesture, dismissGesture]);
|
|
85
88
|
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
registry.createManager(id);
|
|
91
|
+
|
|
92
|
+
return () => registry.deleteManager(id);
|
|
93
|
+
}, [id]);
|
|
94
|
+
|
|
86
95
|
const listComponent = (
|
|
87
96
|
<GestureHandlerRootView>
|
|
88
97
|
<GestureDetector gesture={gesture}>
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
export type ImageViewerManagerState = {
|
|
2
|
+
currentIndex: number;
|
|
3
|
+
dataLength: number;
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
class ImageViewerManager {
|
|
7
|
+
private currentIndex = 0;
|
|
8
|
+
private dataLength = 0;
|
|
9
|
+
private flatListRef: any = null;
|
|
10
|
+
private enableSwipeGesture = true;
|
|
11
|
+
private listeners = new Set<(state: ImageViewerManagerState) => void>();
|
|
12
|
+
|
|
13
|
+
// private updateState(newState: Partial<any>) {
|
|
14
|
+
// Object.assign(this, newState);
|
|
15
|
+
// this.notifyListeners();
|
|
16
|
+
// }
|
|
17
|
+
|
|
18
|
+
private notifyListeners() {
|
|
19
|
+
const state = this.getState();
|
|
20
|
+
|
|
21
|
+
this.listeners.forEach((listener) => listener(state));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
subscribe(listener: (state: ImageViewerManagerState) => void) {
|
|
25
|
+
this.listeners.add(listener);
|
|
26
|
+
|
|
27
|
+
return () => {
|
|
28
|
+
this.listeners.delete(listener);
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
getState() {
|
|
33
|
+
return {
|
|
34
|
+
currentIndex: this.currentIndex,
|
|
35
|
+
dataLength: this.dataLength,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
setFlatListRef(ref: any) {
|
|
40
|
+
this.flatListRef = ref;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
setDataLength(length: number) {
|
|
44
|
+
this.dataLength = length;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
setEnableSwipeGesture(enabled: boolean) {
|
|
48
|
+
this.enableSwipeGesture = enabled;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
setCurrentIndex(index: number) {
|
|
52
|
+
if (index !== this.currentIndex) {
|
|
53
|
+
this.currentIndex = index;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
notifyStateChange() {
|
|
58
|
+
this.notifyListeners();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
goToIndex = (index: number) => {
|
|
62
|
+
if (index < 0 || index >= this.dataLength || !this.enableSwipeGesture || !this.flatListRef) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
this.currentIndex = index;
|
|
67
|
+
this.flatListRef.scrollToIndex({ index, animated: true });
|
|
68
|
+
this.notifyListeners();
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
goToPrevious = () => {
|
|
72
|
+
if (this.currentIndex > 0) {
|
|
73
|
+
this.goToIndex(this.currentIndex - 1);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
goToNext = () => {
|
|
78
|
+
if (this.currentIndex < this.dataLength - 1) {
|
|
79
|
+
this.goToIndex(this.currentIndex + 1);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
cleanUp() {
|
|
84
|
+
this.listeners.clear();
|
|
85
|
+
this.flatListRef = null;
|
|
86
|
+
this.enableSwipeGesture = true;
|
|
87
|
+
this.currentIndex = 0;
|
|
88
|
+
this.dataLength = 0;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export default ImageViewerManager;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import ImageViewerManager from './ImageViewerManager';
|
|
2
|
+
|
|
3
|
+
class ImageViewerRegistry {
|
|
4
|
+
private managers = new Map<string, ImageViewerManager>();
|
|
5
|
+
|
|
6
|
+
createManager(id: string): ImageViewerManager | null {
|
|
7
|
+
if (this.managers.has(id)) {
|
|
8
|
+
return this.managers.get(id) || null;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const manager = new ImageViewerManager();
|
|
12
|
+
this.managers.set(id, manager);
|
|
13
|
+
return manager;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
getManager(id: string): ImageViewerManager | null {
|
|
17
|
+
return this.managers.get(id) || null;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
deleteManager(id: string) {
|
|
21
|
+
const manager = this.managers.get(id);
|
|
22
|
+
|
|
23
|
+
if (manager) {
|
|
24
|
+
manager.cleanUp();
|
|
25
|
+
this.managers.delete(id);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const registry = new ImageViewerRegistry();
|
package/src/index.tsx
CHANGED
package/src/types.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { StyleProp, ViewStyle } from 'react-native';
|
|
|
2
2
|
import type { SharedValue } from 'react-native-reanimated';
|
|
3
3
|
|
|
4
4
|
export interface GestureImageViewerProps<T = any> {
|
|
5
|
+
id?: string;
|
|
5
6
|
data: T[];
|
|
6
7
|
initialIndex?: number;
|
|
7
8
|
onIndexChange?: (index: number) => void;
|
|
@@ -16,6 +16,8 @@ import {
|
|
|
16
16
|
withSpring,
|
|
17
17
|
withTiming,
|
|
18
18
|
} from 'react-native-reanimated';
|
|
19
|
+
import type { ImageViewerManagerState } from './ImageViewerManager';
|
|
20
|
+
import { registry } from './ImageViewerRegistry';
|
|
19
21
|
import type { GestureImageViewerProps } from './types';
|
|
20
22
|
|
|
21
23
|
type UseGestureImageViewerProps<T = any> = Omit<
|
|
@@ -40,13 +42,18 @@ export const useGestureImageViewer = <T = any>({
|
|
|
40
42
|
enableDoubleTapGesture = true,
|
|
41
43
|
enableZoomPanGesture = true,
|
|
42
44
|
maxZoomScale = 2,
|
|
45
|
+
id = 'default',
|
|
43
46
|
}: UseGestureImageViewerProps<T>) => {
|
|
44
47
|
const { width: screenWidth, height: screenHeight } = useWindowDimensions();
|
|
45
48
|
const width = customWidth || screenWidth;
|
|
46
49
|
|
|
47
|
-
const [currentIndex, setCurrentIndex] = useState(initialIndex);
|
|
48
50
|
const [isZoomed, setIsZoomed] = useState(false);
|
|
49
51
|
|
|
52
|
+
const [managerState, setManagerState] = useState<ImageViewerManagerState>({
|
|
53
|
+
currentIndex: initialIndex,
|
|
54
|
+
dataLength: data?.length || 0,
|
|
55
|
+
});
|
|
56
|
+
|
|
50
57
|
const initialTranslateY = useSharedValue(0);
|
|
51
58
|
const initialTranslateX = useSharedValue(0);
|
|
52
59
|
const startScale = useSharedValue(1);
|
|
@@ -67,9 +74,46 @@ export const useGestureImageViewer = <T = any>({
|
|
|
67
74
|
},
|
|
68
75
|
);
|
|
69
76
|
|
|
70
|
-
// 초기 위치 설정
|
|
71
77
|
useEffect(() => {
|
|
72
|
-
|
|
78
|
+
const manager = registry.getManager(id);
|
|
79
|
+
|
|
80
|
+
if (!manager) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
setManagerState(manager.getState());
|
|
85
|
+
|
|
86
|
+
return manager.subscribe(setManagerState);
|
|
87
|
+
}, [id]);
|
|
88
|
+
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
const manager = registry.getManager(id);
|
|
91
|
+
|
|
92
|
+
if (!manager) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
manager.setDataLength(dataLength);
|
|
97
|
+
manager.setEnableSwipeGesture(enableSwipeGesture);
|
|
98
|
+
manager.setCurrentIndex(initialIndex);
|
|
99
|
+
manager.notifyStateChange();
|
|
100
|
+
}, [dataLength, enableSwipeGesture, initialIndex, id]);
|
|
101
|
+
|
|
102
|
+
useEffect(() => {
|
|
103
|
+
const manager = registry.getManager(id);
|
|
104
|
+
|
|
105
|
+
if (!manager || !flatListRef.current) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
manager.setFlatListRef(flatListRef.current);
|
|
110
|
+
}, [id]);
|
|
111
|
+
|
|
112
|
+
useEffect(() => {
|
|
113
|
+
onIndexChange?.(managerState.currentIndex);
|
|
114
|
+
}, [managerState.currentIndex, onIndexChange]);
|
|
115
|
+
|
|
116
|
+
useEffect(() => {
|
|
73
117
|
translateY.value = 0;
|
|
74
118
|
translateX.value = 0;
|
|
75
119
|
scale.value = 1;
|
|
@@ -80,7 +124,6 @@ export const useGestureImageViewer = <T = any>({
|
|
|
80
124
|
return;
|
|
81
125
|
}
|
|
82
126
|
|
|
83
|
-
// FlatList 초기 위치 설정
|
|
84
127
|
const runAfterInteractions = InteractionManager.runAfterInteractions(() => {
|
|
85
128
|
flatListRef.current?.scrollToIndex({
|
|
86
129
|
index: initialIndex,
|
|
@@ -93,12 +136,6 @@ export const useGestureImageViewer = <T = any>({
|
|
|
93
136
|
};
|
|
94
137
|
}, [initialIndex, translateY, backdropOpacity, translateX, scale, startScale]);
|
|
95
138
|
|
|
96
|
-
// 인덱스 변경 알림
|
|
97
|
-
useEffect(() => {
|
|
98
|
-
onIndexChange?.(currentIndex);
|
|
99
|
-
}, [currentIndex, onIndexChange]);
|
|
100
|
-
|
|
101
|
-
// FlatList 스크롤 핸들러
|
|
102
139
|
const onMomentumScrollEnd = useCallback(
|
|
103
140
|
(event: NativeSyntheticEvent<NativeScrollEvent>) => {
|
|
104
141
|
if (!enableSwipeGesture) {
|
|
@@ -108,8 +145,13 @@ export const useGestureImageViewer = <T = any>({
|
|
|
108
145
|
const contentOffset = event.nativeEvent.contentOffset;
|
|
109
146
|
const newIndex = Math.round(contentOffset.x / width);
|
|
110
147
|
|
|
111
|
-
if (newIndex !== currentIndex && newIndex >= 0 && newIndex < dataLength) {
|
|
112
|
-
|
|
148
|
+
if (newIndex !== managerState.currentIndex && newIndex >= 0 && newIndex < dataLength) {
|
|
149
|
+
const manager = registry.getManager(id);
|
|
150
|
+
|
|
151
|
+
if (manager) {
|
|
152
|
+
manager.setCurrentIndex(newIndex);
|
|
153
|
+
}
|
|
154
|
+
|
|
113
155
|
translateX.value = withTiming(0);
|
|
114
156
|
translateY.value = withTiming(0);
|
|
115
157
|
initialTranslateX.value = withTiming(0);
|
|
@@ -119,7 +161,8 @@ export const useGestureImageViewer = <T = any>({
|
|
|
119
161
|
}
|
|
120
162
|
},
|
|
121
163
|
[
|
|
122
|
-
|
|
164
|
+
id,
|
|
165
|
+
managerState.currentIndex,
|
|
123
166
|
dataLength,
|
|
124
167
|
width,
|
|
125
168
|
enableSwipeGesture,
|
|
@@ -132,33 +175,6 @@ export const useGestureImageViewer = <T = any>({
|
|
|
132
175
|
],
|
|
133
176
|
);
|
|
134
177
|
|
|
135
|
-
const goToIndex = useCallback(
|
|
136
|
-
(index: number) => {
|
|
137
|
-
if (index < 0 || index >= dataLength || !enableSwipeGesture) {
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
setCurrentIndex(index);
|
|
142
|
-
flatListRef.current?.scrollToIndex({
|
|
143
|
-
index,
|
|
144
|
-
animated: true,
|
|
145
|
-
});
|
|
146
|
-
},
|
|
147
|
-
[dataLength, enableSwipeGesture],
|
|
148
|
-
);
|
|
149
|
-
|
|
150
|
-
const goToPrevious = useCallback(() => {
|
|
151
|
-
if (currentIndex > 0) {
|
|
152
|
-
goToIndex(currentIndex - 1);
|
|
153
|
-
}
|
|
154
|
-
}, [currentIndex, goToIndex]);
|
|
155
|
-
|
|
156
|
-
const goToNext = useCallback(() => {
|
|
157
|
-
if (currentIndex < dataLength - 1) {
|
|
158
|
-
goToIndex(currentIndex + 1);
|
|
159
|
-
}
|
|
160
|
-
}, [currentIndex, dataLength, goToIndex]);
|
|
161
|
-
|
|
162
178
|
const dismissGesture = useMemo(() => {
|
|
163
179
|
return Gesture.Pan()
|
|
164
180
|
.minDistance(10)
|
|
@@ -293,26 +309,17 @@ export const useGestureImageViewer = <T = any>({
|
|
|
293
309
|
}, [animateBackdrop]);
|
|
294
310
|
|
|
295
311
|
return {
|
|
296
|
-
|
|
297
|
-
currentIndex,
|
|
312
|
+
currentIndex: managerState.currentIndex,
|
|
298
313
|
dataLength,
|
|
299
314
|
translateY,
|
|
300
315
|
flatListRef,
|
|
301
316
|
isZoomed,
|
|
302
317
|
|
|
303
|
-
// Actions
|
|
304
|
-
goToPrevious,
|
|
305
|
-
goToNext,
|
|
306
|
-
goToIndex,
|
|
307
|
-
|
|
308
|
-
// Gesture
|
|
309
318
|
dismissGesture,
|
|
310
319
|
zoomGesture,
|
|
311
320
|
|
|
312
|
-
// FlatList handlers
|
|
313
321
|
onMomentumScrollEnd,
|
|
314
322
|
|
|
315
|
-
// Animated styles
|
|
316
323
|
animatedStyle,
|
|
317
324
|
backdropStyle,
|
|
318
325
|
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
2
|
+
import type { ImageViewerManagerState } from './ImageViewerManager';
|
|
3
|
+
import { registry } from './ImageViewerRegistry';
|
|
4
|
+
|
|
5
|
+
export const useImageViewerController = (id = 'default') => {
|
|
6
|
+
const [state, setState] = useState<ImageViewerManagerState>({
|
|
7
|
+
currentIndex: 0,
|
|
8
|
+
dataLength: 0,
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
const manager = registry.createManager(id);
|
|
13
|
+
|
|
14
|
+
if (!manager) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
setState(manager.getState());
|
|
19
|
+
|
|
20
|
+
return manager.subscribe(setState);
|
|
21
|
+
}, [id]);
|
|
22
|
+
|
|
23
|
+
const manager = registry.getManager(id);
|
|
24
|
+
|
|
25
|
+
const noopFunction = useMemo(() => () => {}, []);
|
|
26
|
+
|
|
27
|
+
return {
|
|
28
|
+
goToIndex: manager?.goToIndex || noopFunction,
|
|
29
|
+
goToPrevious: manager?.goToPrevious || noopFunction,
|
|
30
|
+
goToNext: manager?.goToNext || noopFunction,
|
|
31
|
+
currentIndex: state.currentIndex,
|
|
32
|
+
totalCount: state.dataLength,
|
|
33
|
+
};
|
|
34
|
+
};
|