react-native-gesture-image-viewer 0.3.0 → 0.3.1

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.
@@ -3,12 +3,29 @@
3
3
  import ImageViewerManager from "./ImageViewerManager.js";
4
4
  class ImageViewerRegistry {
5
5
  managers = new Map();
6
+ subscribers = new Map();
7
+ subscribeToManager(id, callback) {
8
+ if (!this.subscribers.has(id)) {
9
+ this.subscribers.set(id, new Set());
10
+ }
11
+ this.subscribers.get(id)?.add(callback);
12
+ const manager = this.managers.get(id) || null;
13
+ callback(manager);
14
+ return () => {
15
+ const subscribers = this.subscribers.get(id);
16
+ subscribers?.delete(callback);
17
+ if (subscribers && subscribers.size === 0) {
18
+ this.subscribers.delete(id);
19
+ }
20
+ };
21
+ }
6
22
  createManager(id) {
7
23
  if (this.managers.has(id)) {
8
24
  return this.managers.get(id) || null;
9
25
  }
10
26
  const manager = new ImageViewerManager();
11
27
  this.managers.set(id, manager);
28
+ this.notifySubscribers(id, manager);
12
29
  return manager;
13
30
  }
14
31
  getManager(id) {
@@ -19,6 +36,13 @@ class ImageViewerRegistry {
19
36
  if (manager) {
20
37
  manager.cleanUp();
21
38
  this.managers.delete(id);
39
+ this.notifySubscribers(id, null);
40
+ }
41
+ }
42
+ notifySubscribers(id, manager) {
43
+ const listeners = this.subscribers.get(id);
44
+ if (listeners) {
45
+ [...listeners].forEach(callback => callback(manager));
22
46
  }
23
47
  }
24
48
  }
@@ -1 +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":[]}
1
+ {"version":3,"names":["ImageViewerManager","ImageViewerRegistry","managers","Map","subscribers","subscribeToManager","id","callback","has","set","Set","get","add","manager","delete","size","createManager","notifySubscribers","getManager","deleteManager","cleanUp","listeners","forEach","registry"],"sourceRoot":"../../src","sources":["ImageViewerRegistry.ts"],"mappings":";;AAAA,OAAOA,kBAAkB,MAAM,yBAAsB;AAErD,MAAMC,mBAAmB,CAAC;EAChBC,QAAQ,GAAG,IAAIC,GAAG,CAA6B,CAAC;EAChDC,WAAW,GAAG,IAAID,GAAG,CAA4D,CAAC;EAE1FE,kBAAkBA,CAACC,EAAU,EAAEC,QAAsD,EAAE;IACrF,IAAI,CAAC,IAAI,CAACH,WAAW,CAACI,GAAG,CAACF,EAAE,CAAC,EAAE;MAC7B,IAAI,CAACF,WAAW,CAACK,GAAG,CAACH,EAAE,EAAE,IAAII,GAAG,CAAC,CAAC,CAAC;IACrC;IAEA,IAAI,CAACN,WAAW,CAACO,GAAG,CAACL,EAAE,CAAC,EAAEM,GAAG,CAACL,QAAQ,CAAC;IAEvC,MAAMM,OAAO,GAAG,IAAI,CAACX,QAAQ,CAACS,GAAG,CAACL,EAAE,CAAC,IAAI,IAAI;IAE7CC,QAAQ,CAACM,OAAO,CAAC;IAEjB,OAAO,MAAM;MACX,MAAMT,WAAW,GAAG,IAAI,CAACA,WAAW,CAACO,GAAG,CAACL,EAAE,CAAC;MAE5CF,WAAW,EAAEU,MAAM,CAACP,QAAQ,CAAC;MAE7B,IAAIH,WAAW,IAAIA,WAAW,CAACW,IAAI,KAAK,CAAC,EAAE;QACzC,IAAI,CAACX,WAAW,CAACU,MAAM,CAACR,EAAE,CAAC;MAC7B;IACF,CAAC;EACH;EAEAU,aAAaA,CAACV,EAAU,EAA6B;IACnD,IAAI,IAAI,CAACJ,QAAQ,CAACM,GAAG,CAACF,EAAE,CAAC,EAAE;MACzB,OAAO,IAAI,CAACJ,QAAQ,CAACS,GAAG,CAACL,EAAE,CAAC,IAAI,IAAI;IACtC;IAEA,MAAMO,OAAO,GAAG,IAAIb,kBAAkB,CAAC,CAAC;IACxC,IAAI,CAACE,QAAQ,CAACO,GAAG,CAACH,EAAE,EAAEO,OAAO,CAAC;IAE9B,IAAI,CAACI,iBAAiB,CAACX,EAAE,EAAEO,OAAO,CAAC;IAEnC,OAAOA,OAAO;EAChB;EAEAK,UAAUA,CAACZ,EAAU,EAA6B;IAChD,OAAO,IAAI,CAACJ,QAAQ,CAACS,GAAG,CAACL,EAAE,CAAC,IAAI,IAAI;EACtC;EAEAa,aAAaA,CAACb,EAAU,EAAE;IACxB,MAAMO,OAAO,GAAG,IAAI,CAACX,QAAQ,CAACS,GAAG,CAACL,EAAE,CAAC;IAErC,IAAIO,OAAO,EAAE;MACXA,OAAO,CAACO,OAAO,CAAC,CAAC;MACjB,IAAI,CAAClB,QAAQ,CAACY,MAAM,CAACR,EAAE,CAAC;MAExB,IAAI,CAACW,iBAAiB,CAACX,EAAE,EAAE,IAAI,CAAC;IAClC;EACF;EAEAW,iBAAiBA,CAACX,EAAU,EAAEO,OAAkC,EAAE;IAChE,MAAMQ,SAAS,GAAG,IAAI,CAACjB,WAAW,CAACO,GAAG,CAACL,EAAE,CAAC;IAE1C,IAAIe,SAAS,EAAE;MACb,CAAC,GAAGA,SAAS,CAAC,CAACC,OAAO,CAAEf,QAAQ,IAAKA,QAAQ,CAACM,OAAO,CAAC,CAAC;IACzD;EACF;AACF;AAEA,OAAO,MAAMU,QAAQ,GAAG,IAAItB,mBAAmB,CAAC,CAAC","ignoreList":[]}
@@ -30,10 +30,9 @@ export const useGestureImageViewer = ({
30
30
  } = useWindowDimensions();
31
31
  const width = customWidth || screenWidth;
32
32
  const [isZoomed, setIsZoomed] = useState(false);
33
- const [managerState, setManagerState] = useState({
34
- currentIndex: initialIndex,
35
- dataLength: data?.length || 0
36
- });
33
+ const [currentIndex, setCurrentIndex] = useState(initialIndex);
34
+ const [manager, setManager] = useState(null);
35
+ const unsubscribeRef = useRef(null);
37
36
  const initialTranslateY = useSharedValue(0);
38
37
  const initialTranslateX = useSharedValue(0);
39
38
  const startScale = useSharedValue(1);
@@ -47,15 +46,26 @@ export const useGestureImageViewer = ({
47
46
  runOnJS(setIsZoomed)(currentScale > 1);
48
47
  });
49
48
  useEffect(() => {
50
- const manager = registry.getManager(id);
51
- if (!manager) {
52
- return;
53
- }
54
- setManagerState(manager.getState());
55
- return manager.subscribe(setManagerState);
49
+ const handleManagerChange = manager => {
50
+ unsubscribeRef.current?.();
51
+ unsubscribeRef.current = null;
52
+ setManager(manager);
53
+ if (manager) {
54
+ setCurrentIndex(manager.getState().currentIndex);
55
+ unsubscribeRef.current = manager.subscribe(state => {
56
+ setCurrentIndex(state.currentIndex);
57
+ });
58
+ return;
59
+ }
60
+ setCurrentIndex(0);
61
+ };
62
+ const unsubscribeFromRegistry = registry.subscribeToManager(id, handleManagerChange);
63
+ return () => {
64
+ unsubscribeFromRegistry();
65
+ unsubscribeRef.current?.();
66
+ };
56
67
  }, [id]);
57
68
  useEffect(() => {
58
- const manager = registry.getManager(id);
59
69
  if (!manager) {
60
70
  return;
61
71
  }
@@ -63,17 +73,16 @@ export const useGestureImageViewer = ({
63
73
  manager.setEnableSwipeGesture(enableSwipeGesture);
64
74
  manager.setCurrentIndex(initialIndex);
65
75
  manager.notifyStateChange();
66
- }, [dataLength, enableSwipeGesture, initialIndex, id]);
76
+ }, [dataLength, enableSwipeGesture, initialIndex, manager]);
67
77
  useEffect(() => {
68
- const manager = registry.getManager(id);
69
78
  if (!manager || !flatListRef.current) {
70
79
  return;
71
80
  }
72
81
  manager.setFlatListRef(flatListRef.current);
73
- }, [id]);
82
+ }, [manager]);
74
83
  useEffect(() => {
75
- onIndexChange?.(managerState.currentIndex);
76
- }, [managerState.currentIndex, onIndexChange]);
84
+ onIndexChange?.(currentIndex);
85
+ }, [currentIndex, onIndexChange]);
77
86
  useEffect(() => {
78
87
  translateY.value = 0;
79
88
  translateX.value = 0;
@@ -99,10 +108,11 @@ export const useGestureImageViewer = ({
99
108
  }
100
109
  const contentOffset = event.nativeEvent.contentOffset;
101
110
  const newIndex = Math.round(contentOffset.x / width);
102
- if (newIndex !== managerState.currentIndex && newIndex >= 0 && newIndex < dataLength) {
103
- const manager = registry.getManager(id);
111
+ if (newIndex !== currentIndex && newIndex >= 0 && newIndex < dataLength) {
104
112
  if (manager) {
105
113
  manager.setCurrentIndex(newIndex);
114
+ setCurrentIndex(newIndex);
115
+ manager.notifyStateChange();
106
116
  }
107
117
  translateX.value = withTiming(0);
108
118
  translateY.value = withTiming(0);
@@ -111,7 +121,7 @@ export const useGestureImageViewer = ({
111
121
  startScale.value = withTiming(1);
112
122
  scale.value = withTiming(1);
113
123
  }
114
- }, [id, managerState.currentIndex, dataLength, width, enableSwipeGesture, translateX, translateY, scale, initialTranslateX, initialTranslateY, startScale]);
124
+ }, [manager, currentIndex, dataLength, width, enableSwipeGesture, translateX, translateY, scale, initialTranslateX, initialTranslateY, startScale]);
115
125
  const dismissGesture = useMemo(() => {
116
126
  return Gesture.Pan().minDistance(10).averageTouches(true).activeOffsetY([-10, 10]).failOffsetX([-10, 10]).enabled(!isZoomed).onUpdate(event => {
117
127
  translateY.value = event.translationY / resistance;
@@ -209,7 +219,7 @@ export const useGestureImageViewer = ({
209
219
  };
210
220
  }, [animateBackdrop]);
211
221
  return {
212
- currentIndex: managerState.currentIndex,
222
+ currentIndex,
213
223
  dataLength,
214
224
  translateY,
215
225
  flatListRef,
@@ -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","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":[]}
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","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,21 +1,35 @@
1
1
  "use strict";
2
2
 
3
- import { useEffect, useMemo, useState } from 'react';
3
+ import { useEffect, useMemo, useRef, useState } from 'react';
4
4
  import { registry } from "./ImageViewerRegistry.js";
5
5
  export const useImageViewerController = (id = 'default') => {
6
6
  const [state, setState] = useState({
7
7
  currentIndex: 0,
8
8
  dataLength: 0
9
9
  });
10
+ const [manager, setManager] = useState(null);
11
+ const unsubscribeRef = useRef(null);
10
12
  useEffect(() => {
11
- const manager = registry.createManager(id);
12
- if (!manager) {
13
- return;
14
- }
15
- setState(manager.getState());
16
- return manager.subscribe(setState);
13
+ const handleManagerChange = newManager => {
14
+ unsubscribeRef.current?.();
15
+ unsubscribeRef.current = null;
16
+ setManager(newManager);
17
+ if (newManager) {
18
+ setState(newManager.getState());
19
+ unsubscribeRef.current = newManager.subscribe(setState);
20
+ return;
21
+ }
22
+ setState({
23
+ currentIndex: 0,
24
+ dataLength: 0
25
+ });
26
+ };
27
+ const unsubscribeFromRegistry = registry.subscribeToManager(id, handleManagerChange);
28
+ return () => {
29
+ unsubscribeFromRegistry();
30
+ unsubscribeRef.current?.();
31
+ };
17
32
  }, [id]);
18
- const manager = registry.getManager(id);
19
33
  const noopFunction = useMemo(() => () => {}, []);
20
34
  return {
21
35
  goToIndex: manager?.goToIndex || noopFunction,
@@ -1 +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
+ {"version":3,"names":["useEffect","useMemo","useRef","useState","registry","useImageViewerController","id","state","setState","currentIndex","dataLength","manager","setManager","unsubscribeRef","handleManagerChange","newManager","current","getState","subscribe","unsubscribeFromRegistry","subscribeToManager","noopFunction","goToIndex","goToPrevious","goToNext","totalCount"],"sourceRoot":"../../src","sources":["useImageViewerController.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAG5D,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;EAEF,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGT,QAAQ,CAA4B,IAAI,CAAC;EACvE,MAAMU,cAAc,GAAGX,MAAM,CAAsB,IAAI,CAAC;EAExDF,SAAS,CAAC,MAAM;IACd,MAAMc,mBAAmB,GAAIC,UAAqC,IAAK;MACrEF,cAAc,CAACG,OAAO,GAAG,CAAC;MAC1BH,cAAc,CAACG,OAAO,GAAG,IAAI;MAE7BJ,UAAU,CAACG,UAAU,CAAC;MAEtB,IAAIA,UAAU,EAAE;QACdP,QAAQ,CAACO,UAAU,CAACE,QAAQ,CAAC,CAAC,CAAC;QAC/BJ,cAAc,CAACG,OAAO,GAAGD,UAAU,CAACG,SAAS,CAACV,QAAQ,CAAC;QACvD;MACF;MAEAA,QAAQ,CAAC;QAAEC,YAAY,EAAE,CAAC;QAAEC,UAAU,EAAE;MAAE,CAAC,CAAC;IAC9C,CAAC;IAED,MAAMS,uBAAuB,GAAGf,QAAQ,CAACgB,kBAAkB,CAACd,EAAE,EAAEQ,mBAAmB,CAAC;IAEpF,OAAO,MAAM;MACXK,uBAAuB,CAAC,CAAC;MACzBN,cAAc,CAACG,OAAO,GAAG,CAAC;IAC5B,CAAC;EACH,CAAC,EAAE,CAACV,EAAE,CAAC,CAAC;EAER,MAAMe,YAAY,GAAGpB,OAAO,CAAC,MAAM,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC;EAEhD,OAAO;IACLqB,SAAS,EAAEX,OAAO,EAAEW,SAAS,IAAID,YAAY;IAC7CE,YAAY,EAAEZ,OAAO,EAAEY,YAAY,IAAIF,YAAY;IACnDG,QAAQ,EAAEb,OAAO,EAAEa,QAAQ,IAAIH,YAAY;IAC3CZ,YAAY,EAAEF,KAAK,CAACE,YAAY;IAChCgB,UAAU,EAAElB,KAAK,CAACG;EACpB,CAAC;AACH,CAAC","ignoreList":[]}
@@ -1,9 +1,12 @@
1
1
  import ImageViewerManager from './ImageViewerManager';
2
2
  declare class ImageViewerRegistry {
3
3
  private managers;
4
+ private subscribers;
5
+ subscribeToManager(id: string, callback: (manager: ImageViewerManager | null) => void): () => void;
4
6
  createManager(id: string): ImageViewerManager | null;
5
7
  getManager(id: string): ImageViewerManager | null;
6
8
  deleteManager(id: string): void;
9
+ notifySubscribers(id: string, manager: ImageViewerManager | null): void;
7
10
  }
8
11
  export declare const registry: ImageViewerRegistry;
9
12
  export {};
@@ -1 +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
+ {"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;IACzD,OAAO,CAAC,WAAW,CAAwE;IAE3F,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,KAAK,IAAI;IAsBrF,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAapD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAIjD,aAAa,CAAC,EAAE,EAAE,MAAM;IAWxB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;CAOjE;AAED,eAAO,MAAM,QAAQ,qBAA4B,CAAC"}
@@ -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,mPAkB5C,0BAA0B,CAAC,CAAC,CAAC;;;;;;;;iCA8FpB,oBAAoB,CAAC,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;CA0LlD,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;;;;;;;;iCAwGpB,oBAAoB,CAAC,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;CA0LlD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useImageViewerController.d.ts","sourceRoot":"","sources":["../../../src/useImageViewerController.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,wBAAwB,GAAI,WAAc;;;;;;CA6BtD,CAAC"}
1
+ {"version":3,"file":"useImageViewerController.d.ts","sourceRoot":"","sources":["../../../src/useImageViewerController.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,wBAAwB,GAAI,WAAc;;;;;;CA0CtD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-gesture-image-viewer",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "react-native-gesture-image-viewer",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -2,6 +2,29 @@ import ImageViewerManager from './ImageViewerManager';
2
2
 
3
3
  class ImageViewerRegistry {
4
4
  private managers = new Map<string, ImageViewerManager>();
5
+ private subscribers = new Map<string, Set<(manager: ImageViewerManager | null) => void>>();
6
+
7
+ subscribeToManager(id: string, callback: (manager: ImageViewerManager | null) => void) {
8
+ if (!this.subscribers.has(id)) {
9
+ this.subscribers.set(id, new Set());
10
+ }
11
+
12
+ this.subscribers.get(id)?.add(callback);
13
+
14
+ const manager = this.managers.get(id) || null;
15
+
16
+ callback(manager);
17
+
18
+ return () => {
19
+ const subscribers = this.subscribers.get(id);
20
+
21
+ subscribers?.delete(callback);
22
+
23
+ if (subscribers && subscribers.size === 0) {
24
+ this.subscribers.delete(id);
25
+ }
26
+ };
27
+ }
5
28
 
6
29
  createManager(id: string): ImageViewerManager | null {
7
30
  if (this.managers.has(id)) {
@@ -10,6 +33,9 @@ class ImageViewerRegistry {
10
33
 
11
34
  const manager = new ImageViewerManager();
12
35
  this.managers.set(id, manager);
36
+
37
+ this.notifySubscribers(id, manager);
38
+
13
39
  return manager;
14
40
  }
15
41
 
@@ -23,6 +49,16 @@ class ImageViewerRegistry {
23
49
  if (manager) {
24
50
  manager.cleanUp();
25
51
  this.managers.delete(id);
52
+
53
+ this.notifySubscribers(id, null);
54
+ }
55
+ }
56
+
57
+ notifySubscribers(id: string, manager: ImageViewerManager | null) {
58
+ const listeners = this.subscribers.get(id);
59
+
60
+ if (listeners) {
61
+ [...listeners].forEach((callback) => callback(manager));
26
62
  }
27
63
  }
28
64
  }
@@ -16,7 +16,7 @@ import {
16
16
  withSpring,
17
17
  withTiming,
18
18
  } from 'react-native-reanimated';
19
- import type { ImageViewerManagerState } from './ImageViewerManager';
19
+ import type ImageViewerManager from './ImageViewerManager';
20
20
  import { registry } from './ImageViewerRegistry';
21
21
  import type { GestureImageViewerProps } from './types';
22
22
 
@@ -49,10 +49,10 @@ export const useGestureImageViewer = <T = any>({
49
49
 
50
50
  const [isZoomed, setIsZoomed] = useState(false);
51
51
 
52
- const [managerState, setManagerState] = useState<ImageViewerManagerState>({
53
- currentIndex: initialIndex,
54
- dataLength: data?.length || 0,
55
- });
52
+ const [currentIndex, setCurrentIndex] = useState(initialIndex);
53
+ const [manager, setManager] = useState<ImageViewerManager | null>(null);
54
+
55
+ const unsubscribeRef = useRef<(() => void) | null>(null);
56
56
 
57
57
  const initialTranslateY = useSharedValue(0);
58
58
  const initialTranslateX = useSharedValue(0);
@@ -75,20 +75,32 @@ export const useGestureImageViewer = <T = any>({
75
75
  );
76
76
 
77
77
  useEffect(() => {
78
- const manager = registry.getManager(id);
78
+ const handleManagerChange = (manager: ImageViewerManager | null) => {
79
+ unsubscribeRef.current?.();
80
+ unsubscribeRef.current = null;
79
81
 
80
- if (!manager) {
81
- return;
82
- }
82
+ setManager(manager);
83
83
 
84
- setManagerState(manager.getState());
84
+ if (manager) {
85
+ setCurrentIndex(manager.getState().currentIndex);
86
+ unsubscribeRef.current = manager.subscribe((state) => {
87
+ setCurrentIndex(state.currentIndex);
88
+ });
89
+ return;
90
+ }
85
91
 
86
- return manager.subscribe(setManagerState);
92
+ setCurrentIndex(0);
93
+ };
94
+
95
+ const unsubscribeFromRegistry = registry.subscribeToManager(id, handleManagerChange);
96
+
97
+ return () => {
98
+ unsubscribeFromRegistry();
99
+ unsubscribeRef.current?.();
100
+ };
87
101
  }, [id]);
88
102
 
89
103
  useEffect(() => {
90
- const manager = registry.getManager(id);
91
-
92
104
  if (!manager) {
93
105
  return;
94
106
  }
@@ -97,21 +109,19 @@ export const useGestureImageViewer = <T = any>({
97
109
  manager.setEnableSwipeGesture(enableSwipeGesture);
98
110
  manager.setCurrentIndex(initialIndex);
99
111
  manager.notifyStateChange();
100
- }, [dataLength, enableSwipeGesture, initialIndex, id]);
112
+ }, [dataLength, enableSwipeGesture, initialIndex, manager]);
101
113
 
102
114
  useEffect(() => {
103
- const manager = registry.getManager(id);
104
-
105
115
  if (!manager || !flatListRef.current) {
106
116
  return;
107
117
  }
108
118
 
109
119
  manager.setFlatListRef(flatListRef.current);
110
- }, [id]);
120
+ }, [manager]);
111
121
 
112
122
  useEffect(() => {
113
- onIndexChange?.(managerState.currentIndex);
114
- }, [managerState.currentIndex, onIndexChange]);
123
+ onIndexChange?.(currentIndex);
124
+ }, [currentIndex, onIndexChange]);
115
125
 
116
126
  useEffect(() => {
117
127
  translateY.value = 0;
@@ -145,11 +155,11 @@ export const useGestureImageViewer = <T = any>({
145
155
  const contentOffset = event.nativeEvent.contentOffset;
146
156
  const newIndex = Math.round(contentOffset.x / width);
147
157
 
148
- if (newIndex !== managerState.currentIndex && newIndex >= 0 && newIndex < dataLength) {
149
- const manager = registry.getManager(id);
150
-
158
+ if (newIndex !== currentIndex && newIndex >= 0 && newIndex < dataLength) {
151
159
  if (manager) {
152
160
  manager.setCurrentIndex(newIndex);
161
+ setCurrentIndex(newIndex);
162
+ manager.notifyStateChange();
153
163
  }
154
164
 
155
165
  translateX.value = withTiming(0);
@@ -161,8 +171,8 @@ export const useGestureImageViewer = <T = any>({
161
171
  }
162
172
  },
163
173
  [
164
- id,
165
- managerState.currentIndex,
174
+ manager,
175
+ currentIndex,
166
176
  dataLength,
167
177
  width,
168
178
  enableSwipeGesture,
@@ -309,7 +319,7 @@ export const useGestureImageViewer = <T = any>({
309
319
  }, [animateBackdrop]);
310
320
 
311
321
  return {
312
- currentIndex: managerState.currentIndex,
322
+ currentIndex,
313
323
  dataLength,
314
324
  translateY,
315
325
  flatListRef,
@@ -1,4 +1,5 @@
1
- import { useEffect, useMemo, useState } from 'react';
1
+ import { useEffect, useMemo, useRef, useState } from 'react';
2
+ import type ImageViewerManager from './ImageViewerManager';
2
3
  import type { ImageViewerManagerState } from './ImageViewerManager';
3
4
  import { registry } from './ImageViewerRegistry';
4
5
 
@@ -8,19 +9,32 @@ export const useImageViewerController = (id = 'default') => {
8
9
  dataLength: 0,
9
10
  });
10
11
 
12
+ const [manager, setManager] = useState<ImageViewerManager | null>(null);
13
+ const unsubscribeRef = useRef<(() => void) | null>(null);
14
+
11
15
  useEffect(() => {
12
- const manager = registry.createManager(id);
16
+ const handleManagerChange = (newManager: ImageViewerManager | null) => {
17
+ unsubscribeRef.current?.();
18
+ unsubscribeRef.current = null;
13
19
 
14
- if (!manager) {
15
- return;
16
- }
20
+ setManager(newManager);
17
21
 
18
- setState(manager.getState());
22
+ if (newManager) {
23
+ setState(newManager.getState());
24
+ unsubscribeRef.current = newManager.subscribe(setState);
25
+ return;
26
+ }
19
27
 
20
- return manager.subscribe(setState);
21
- }, [id]);
28
+ setState({ currentIndex: 0, dataLength: 0 });
29
+ };
22
30
 
23
- const manager = registry.getManager(id);
31
+ const unsubscribeFromRegistry = registry.subscribeToManager(id, handleManagerChange);
32
+
33
+ return () => {
34
+ unsubscribeFromRegistry();
35
+ unsubscribeRef.current?.();
36
+ };
37
+ }, [id]);
24
38
 
25
39
  const noopFunction = useMemo(() => () => {}, []);
26
40