react-native-gesture-image-viewer 1.6.3 → 1.6.5

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.
@@ -33,6 +33,7 @@ export function GestureViewer({
33
33
  } = useWindowDimensions();
34
34
  const width = useSnap ? customWidth || screenWidth : screenWidth;
35
35
  const loopData = useMemo(() => createLoopData(dataRef, enableLoop), [enableLoop]);
36
+ const isScrollView = isScrollViewLike(Component);
36
37
  const {
37
38
  listRef,
38
39
  isZoomed,
@@ -72,8 +73,8 @@ export function GestureViewer({
72
73
  marginHorizontal: itemSpacing / 2
73
74
  }],
74
75
  children: renderItemProp(item, index)
75
- }, keyExtractor(item, index));
76
- }, [width, itemSpacing, renderItemProp, keyExtractor]);
76
+ }, isScrollView ? keyExtractor(item, index) : undefined);
77
+ }, [width, itemSpacing, renderItemProp, keyExtractor, isScrollView]);
77
78
  const getItemLayout = useCallback((_, index) => ({
78
79
  length: width + itemSpacing,
79
80
  offset: (width + itemSpacing) * index,
@@ -116,7 +117,7 @@ export function GestureViewer({
116
117
  'flash-list-paging-enabled-fix': true
117
118
  }
118
119
  }),
119
- children: isScrollViewLike(Component) ? /*#__PURE__*/_jsx(Component, {
120
+ children: isScrollView ? /*#__PURE__*/_jsx(Component, {
120
121
  ref: listRef,
121
122
  ...commonProps,
122
123
  ...listProps,
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","useMemo","useRef","Platform","StyleSheet","useWindowDimensions","View","Gesture","GestureDetector","GestureHandlerRootView","Animated","registry","useGestureViewer","createLoopData","isFlashListLike","isFlatListLike","isScrollViewLike","WebPagingFixStyle","jsx","_jsx","jsxs","_jsxs","GestureViewer","id","data","renderItem","renderItemProp","renderContainer","ListComponent","width","customWidth","listProps","backdropStyle","backdropStyleProps","containerStyle","initialIndex","itemSpacing","useSnap","enableLoop","props","Component","dataRef","current","screenWidth","loopData","listRef","isZoomed","isRotated","dismissGesture","zoomGesture","onMomentumScrollEnd","onScrollBeginDrag","animatedStyle","keyExtractor","item","index","style","height","justifyContent","alignItems","marginHorizontal","children","getItemLayout","_","length","offset","gesture","Race","createManager","deleteManager","commonProps","horizontal","scrollEnabled","showsHorizontalScrollIndicator","snapToInterval","snapToAlignment","decelerationRate","pagingEnabled","scrollEventThrottle","removeClippedSubviews","listComponent","styles","container","background","content","OS","dataSet","ref","map","initialScrollIndex","windowSize","maxToRenderPerBatch","estimatedItemSize","create","flex","position","top","left","right","bottom","backgroundColor"],"sourceRoot":"../../src","sources":["GestureViewer.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useEffect","useMemo","useRef","Platform","StyleSheet","useWindowDimensions","View","Gesture","GestureDetector","GestureHandlerRootView","Animated","registry","useGestureViewer","createLoopData","isFlashListLike","isFlatListLike","isScrollViewLike","WebPagingFixStyle","jsx","_jsx","jsxs","_jsxs","GestureViewer","id","data","renderItem","renderItemProp","renderContainer","ListComponent","width","customWidth","listProps","backdropStyle","backdropStyleProps","containerStyle","initialIndex","itemSpacing","useSnap","enableLoop","props","Component","dataRef","current","screenWidth","loopData","isScrollView","listRef","isZoomed","isRotated","dismissGesture","zoomGesture","onMomentumScrollEnd","onScrollBeginDrag","animatedStyle","keyExtractor","item","index","style","height","justifyContent","alignItems","marginHorizontal","children","undefined","getItemLayout","_","length","offset","gesture","Race","createManager","deleteManager","commonProps","horizontal","scrollEnabled","showsHorizontalScrollIndicator","snapToInterval","snapToAlignment","decelerationRate","pagingEnabled","scrollEventThrottle","removeClippedSubviews","listComponent","styles","container","background","content","OS","dataSet","ref","map","initialScrollIndex","windowSize","maxToRenderPerBatch","estimatedItemSize","create","flex","position","top","left","right","bottom","backgroundColor"],"sourceRoot":"../../src","sources":["GestureViewer.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { useEffect, useMemo, useRef, useState } from 'react';
3
+ import { useCallback, useMemo, useRef, useSyncExternalStore } from 'react';
4
4
  import { registry } from "./GestureViewerRegistry.js";
5
5
  /**
6
6
  * Hook to control the gesture viewer programmatically.
@@ -55,42 +55,72 @@ import { registry } from "./GestureViewerRegistry.js";
55
55
  * ```
56
56
  */
57
57
  export const useGestureViewerController = (id = 'default') => {
58
- const [state, setState] = useState({
58
+ const managerRef = useRef(null);
59
+ const stateRef = useRef({
59
60
  currentIndex: 0,
60
61
  totalCount: 0
61
62
  });
62
- const [manager, setManager] = useState(null);
63
- const unsubscribeRef = useRef(null);
64
- useEffect(() => {
65
- const handleManagerChange = newManager => {
66
- unsubscribeRef.current?.();
67
- unsubscribeRef.current = null;
68
- setManager(newManager);
63
+ const updateState = useCallback((newState, onStoreChange) => {
64
+ if (stateRef.current.currentIndex !== newState.currentIndex || stateRef.current.totalCount !== newState.totalCount) {
65
+ stateRef.current = {
66
+ currentIndex: newState.currentIndex,
67
+ totalCount: newState.totalCount
68
+ };
69
+ onStoreChange();
70
+ }
71
+ }, []);
72
+ const subscribe = useCallback(onStoreChange => {
73
+ let unsubscribeFromManager = null;
74
+ const unsubscribeFromRegistry = registry.subscribeToManager(id, newManager => {
75
+ unsubscribeFromManager?.();
76
+ unsubscribeFromManager = null;
77
+ managerRef.current = newManager;
69
78
  if (newManager) {
70
- setState(newManager.getState());
71
- unsubscribeRef.current = newManager.subscribe(setState);
79
+ unsubscribeFromManager = newManager.subscribe(newState => {
80
+ updateState(newState, onStoreChange);
81
+ });
82
+ updateState(newManager.getState(), onStoreChange);
72
83
  return;
73
84
  }
74
- setState({
85
+ updateState({
75
86
  currentIndex: 0,
76
87
  totalCount: 0
77
- });
78
- };
79
- const unsubscribeFromRegistry = registry.subscribeToManager(id, handleManagerChange);
88
+ }, onStoreChange);
89
+ });
80
90
  return () => {
81
91
  unsubscribeFromRegistry();
82
- unsubscribeRef.current?.();
92
+ unsubscribeFromManager?.();
83
93
  };
84
- }, [id]);
85
- const noopFunction = useMemo(() => () => {}, []);
94
+ }, [id, updateState]);
95
+ const getSnapshot = useCallback(() => {
96
+ return stateRef.current;
97
+ }, []);
98
+ const state = useSyncExternalStore(subscribe, getSnapshot);
99
+ const controller = useMemo(() => ({
100
+ goToIndex: index => {
101
+ managerRef.current?.goToIndex(index);
102
+ },
103
+ goToPrevious: () => {
104
+ managerRef.current?.goToPrevious();
105
+ },
106
+ goToNext: () => {
107
+ managerRef.current?.goToNext();
108
+ },
109
+ zoomIn: multiplier => {
110
+ managerRef.current?.zoomIn(multiplier);
111
+ },
112
+ zoomOut: multiplier => {
113
+ managerRef.current?.zoomOut(multiplier);
114
+ },
115
+ resetZoom: scale => {
116
+ managerRef.current?.resetZoom(scale);
117
+ },
118
+ rotate: (angle, clockwise) => {
119
+ managerRef.current?.rotate(angle, clockwise);
120
+ }
121
+ }), []);
86
122
  return {
87
- goToIndex: manager?.goToIndex || noopFunction,
88
- goToPrevious: manager?.goToPrevious || noopFunction,
89
- goToNext: manager?.goToNext || noopFunction,
90
- zoomIn: manager?.zoomIn || noopFunction,
91
- zoomOut: manager?.zoomOut || noopFunction,
92
- resetZoom: manager?.resetZoom || noopFunction,
93
- rotate: manager?.rotate || noopFunction,
123
+ ...controller,
94
124
  ...state
95
125
  };
96
126
  };
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useMemo","useRef","useState","registry","useGestureViewerController","id","state","setState","currentIndex","totalCount","manager","setManager","unsubscribeRef","handleManagerChange","newManager","current","getState","subscribe","unsubscribeFromRegistry","subscribeToManager","noopFunction","goToIndex","goToPrevious","goToNext","zoomIn","zoomOut","resetZoom","rotate"],"sourceRoot":"../../src","sources":["useGestureViewerController.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAE5D,SAASC,QAAQ,QAAQ,4BAAyB;AAGlD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,0BAA0B,GAAGA,CAACC,EAAE,GAAG,SAAS,KAA8B;EACrF,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGL,QAAQ,CAA+B;IAC/DM,YAAY,EAAE,CAAC;IACfC,UAAU,EAAE;EACd,CAAC,CAAC;EAEF,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGT,QAAQ,CAA8B,IAAI,CAAC;EACzE,MAAMU,cAAc,GAAGX,MAAM,CAAsB,IAAI,CAAC;EAExDF,SAAS,CAAC,MAAM;IACd,MAAMc,mBAAmB,GAAIC,UAAuC,IAAK;MACvEF,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;IAC3CI,MAAM,EAAEd,OAAO,EAAEc,MAAM,IAAIJ,YAAY;IACvCK,OAAO,EAAEf,OAAO,EAAEe,OAAO,IAAIL,YAAY;IACzCM,SAAS,EAAEhB,OAAO,EAAEgB,SAAS,IAAIN,YAAY;IAC7CO,MAAM,EAAEjB,OAAO,EAAEiB,MAAM,IAAIP,YAAY;IACvC,GAAGd;EACL,CAAC;AACH,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useMemo","useRef","useSyncExternalStore","registry","useGestureViewerController","id","managerRef","stateRef","currentIndex","totalCount","updateState","newState","onStoreChange","current","subscribe","unsubscribeFromManager","unsubscribeFromRegistry","subscribeToManager","newManager","getState","getSnapshot","state","controller","goToIndex","index","goToPrevious","goToNext","zoomIn","multiplier","zoomOut","resetZoom","scale","rotate","angle","clockwise"],"sourceRoot":"../../src","sources":["useGestureViewerController.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,OAAO,EAAEC,MAAM,EAAEC,oBAAoB,QAAQ,OAAO;AAE1E,SAASC,QAAQ,QAAQ,4BAAyB;AAGlD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,0BAA0B,GAAGA,CAACC,EAAE,GAAG,SAAS,KAA8B;EACrF,MAAMC,UAAU,GAAGL,MAAM,CAA8B,IAAI,CAAC;EAC5D,MAAMM,QAAQ,GAAGN,MAAM,CAA+B;IAAEO,YAAY,EAAE,CAAC;IAAEC,UAAU,EAAE;EAAE,CAAC,CAAC;EAEzF,MAAMC,WAAW,GAAGX,WAAW,CAAC,CAACY,QAAsC,EAAEC,aAAyB,KAAK;IACrG,IACEL,QAAQ,CAACM,OAAO,CAACL,YAAY,KAAKG,QAAQ,CAACH,YAAY,IACvDD,QAAQ,CAACM,OAAO,CAACJ,UAAU,KAAKE,QAAQ,CAACF,UAAU,EACnD;MACAF,QAAQ,CAACM,OAAO,GAAG;QACjBL,YAAY,EAAEG,QAAQ,CAACH,YAAY;QACnCC,UAAU,EAAEE,QAAQ,CAACF;MACvB,CAAC;MACDG,aAAa,CAAC,CAAC;IACjB;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,MAAME,SAAS,GAAGf,WAAW,CAC1Ba,aAAyB,IAAK;IAC7B,IAAIG,sBAA2C,GAAG,IAAI;IAEtD,MAAMC,uBAAuB,GAAGb,QAAQ,CAACc,kBAAkB,CAACZ,EAAE,EAAGa,UAAU,IAAK;MAC9EH,sBAAsB,GAAG,CAAC;MAC1BA,sBAAsB,GAAG,IAAI;MAC7BT,UAAU,CAACO,OAAO,GAAGK,UAAU;MAE/B,IAAIA,UAAU,EAAE;QACdH,sBAAsB,GAAGG,UAAU,CAACJ,SAAS,CAAEH,QAAQ,IAAK;UAC1DD,WAAW,CAACC,QAAQ,EAAEC,aAAa,CAAC;QACtC,CAAC,CAAC;QAEFF,WAAW,CAACQ,UAAU,CAACC,QAAQ,CAAC,CAAC,EAAEP,aAAa,CAAC;QACjD;MACF;MAEAF,WAAW,CAAC;QAAEF,YAAY,EAAE,CAAC;QAAEC,UAAU,EAAE;MAAE,CAAC,EAAEG,aAAa,CAAC;IAChE,CAAC,CAAC;IAEF,OAAO,MAAM;MACXI,uBAAuB,CAAC,CAAC;MACzBD,sBAAsB,GAAG,CAAC;IAC5B,CAAC;EACH,CAAC,EACD,CAACV,EAAE,EAAEK,WAAW,CAClB,CAAC;EAED,MAAMU,WAAW,GAAGrB,WAAW,CAAC,MAAM;IACpC,OAAOQ,QAAQ,CAACM,OAAO;EACzB,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMQ,KAAK,GAAGnB,oBAAoB,CAACY,SAAS,EAAEM,WAAW,CAAC;EAE1D,MAAME,UAAU,GAAGtB,OAAO,CACxB,OAAO;IACLuB,SAAS,EAAGC,KAAK,IAAK;MACpBlB,UAAU,CAACO,OAAO,EAAEU,SAAS,CAACC,KAAK,CAAC;IACtC,CAAC;IACDC,YAAY,EAAEA,CAAA,KAAM;MAClBnB,UAAU,CAACO,OAAO,EAAEY,YAAY,CAAC,CAAC;IACpC,CAAC;IACDC,QAAQ,EAAEA,CAAA,KAAM;MACdpB,UAAU,CAACO,OAAO,EAAEa,QAAQ,CAAC,CAAC;IAChC,CAAC;IACDC,MAAM,EAAGC,UAAU,IAAK;MACtBtB,UAAU,CAACO,OAAO,EAAEc,MAAM,CAACC,UAAU,CAAC;IACxC,CAAC;IACDC,OAAO,EAAGD,UAAU,IAAK;MACvBtB,UAAU,CAACO,OAAO,EAAEgB,OAAO,CAACD,UAAU,CAAC;IACzC,CAAC;IACDE,SAAS,EAAGC,KAAK,IAAK;MACpBzB,UAAU,CAACO,OAAO,EAAEiB,SAAS,CAACC,KAAK,CAAC;IACtC,CAAC;IACDC,MAAM,EAAEA,CAACC,KAAK,EAAEC,SAAS,KAAK;MAC5B5B,UAAU,CAACO,OAAO,EAAEmB,MAAM,CAACC,KAAK,EAAEC,SAAS,CAAC;IAC9C;EACF,CAAC,CAAC,EACF,EACF,CAAC;EAED,OAAO;IACL,GAAGZ,UAAU;IACb,GAAGD;EACL,CAAC;AACH,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"GestureViewer.d.ts","sourceRoot":"","sources":["../../../src/GestureViewer.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAyE,MAAM,cAAc,CAAC;AAIpH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAKlD,wBAAgB,aAAa,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,GAAG,OAAO,QAAQ,EAAE,EAC3D,EAAc,EACd,IAAI,EACJ,UAAU,EAAE,cAAc,EAC1B,eAAe,EACf,aAAa,EACb,KAAK,EAAE,WAAW,EAClB,SAAS,EACT,aAAa,EAAE,kBAAkB,EACjC,cAAc,EACd,YAAgB,EAChB,WAAe,EACf,OAAe,EACf,UAAkB,EAClB,GAAG,KAAK,EACT,EAAE,kBAAkB,CAAC,CAAC,EAAE,EAAE,CAAC,2CAsJ3B"}
1
+ {"version":3,"file":"GestureViewer.d.ts","sourceRoot":"","sources":["../../../src/GestureViewer.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAyE,MAAM,cAAc,CAAC;AAIpH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAKlD,wBAAgB,aAAa,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,GAAG,OAAO,QAAQ,EAAE,EAC3D,EAAc,EACd,IAAI,EACJ,UAAU,EAAE,cAAc,EAC1B,eAAe,EACf,aAAa,EACb,KAAK,EAAE,WAAW,EAClB,SAAS,EACT,aAAa,EAAE,kBAAkB,EACjC,cAAc,EACd,YAAgB,EAChB,WAAe,EACf,OAAe,EACf,UAAkB,EAClB,GAAG,KAAK,EACT,EAAE,kBAAkB,CAAC,CAAC,EAAE,EAAE,CAAC,2CAwJ3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"useGestureViewerController.d.ts","sourceRoot":"","sources":["../../../src/useGestureViewerController.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAgC,MAAM,SAAS,CAAC;AAErF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,eAAO,MAAM,0BAA0B,GAAI,WAAc,KAAG,uBA6C3D,CAAC"}
1
+ {"version":3,"file":"useGestureViewerController.d.ts","sourceRoot":"","sources":["../../../src/useGestureViewerController.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAgC,MAAM,SAAS,CAAC;AAErF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,eAAO,MAAM,0BAA0B,GAAI,WAAc,KAAG,uBAmF3D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-gesture-image-viewer",
3
- "version": "1.6.3",
3
+ "version": "1.6.5",
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",
@@ -35,6 +35,8 @@ export function GestureViewer<T = any, LC = typeof FlatList>({
35
35
 
36
36
  const loopData = useMemo(() => createLoopData(dataRef, enableLoop), [enableLoop]);
37
37
 
38
+ const isScrollView = isScrollViewLike(Component);
39
+
38
40
  const {
39
41
  listRef,
40
42
  isZoomed,
@@ -71,7 +73,7 @@ export function GestureViewer<T = any, LC = typeof FlatList>({
71
73
  ({ item, index }: { item: T; index: number }) => {
72
74
  return (
73
75
  <View
74
- key={keyExtractor(item, index)}
76
+ key={isScrollView ? keyExtractor(item, index) : undefined}
75
77
  style={[
76
78
  {
77
79
  width,
@@ -86,7 +88,7 @@ export function GestureViewer<T = any, LC = typeof FlatList>({
86
88
  </View>
87
89
  );
88
90
  },
89
- [width, itemSpacing, renderItemProp, keyExtractor],
91
+ [width, itemSpacing, renderItemProp, keyExtractor, isScrollView],
90
92
  );
91
93
 
92
94
  const getItemLayout = useCallback(
@@ -141,7 +143,7 @@ export function GestureViewer<T = any, LC = typeof FlatList>({
141
143
  {...(Platform.OS === 'web' &&
142
144
  isFlashListLike(Component) && { dataSet: { 'flash-list-paging-enabled-fix': true } })}
143
145
  >
144
- {isScrollViewLike(Component) ? (
146
+ {isScrollView ? (
145
147
  <Component ref={listRef} {...commonProps} {...listProps}>
146
148
  {loopData.map((item, index) => renderItem({ item, index }))}
147
149
  </Component>
@@ -1,4 +1,4 @@
1
- import { useEffect, useMemo, useRef, useState } from 'react';
1
+ import { useCallback, useMemo, useRef, useSyncExternalStore } from 'react';
2
2
  import type GestureViewerManager from './GestureViewerManager';
3
3
  import { registry } from './GestureViewerRegistry';
4
4
  import type { GestureViewerController, GestureViewerControllerState } from './types';
@@ -56,48 +56,86 @@ import type { GestureViewerController, GestureViewerControllerState } from './ty
56
56
  * ```
57
57
  */
58
58
  export const useGestureViewerController = (id = 'default'): GestureViewerController => {
59
- const [state, setState] = useState<GestureViewerControllerState>({
60
- currentIndex: 0,
61
- totalCount: 0,
62
- });
59
+ const managerRef = useRef<GestureViewerManager | null>(null);
60
+ const stateRef = useRef<GestureViewerControllerState>({ currentIndex: 0, totalCount: 0 });
63
61
 
64
- const [manager, setManager] = useState<GestureViewerManager | null>(null);
65
- const unsubscribeRef = useRef<(() => void) | null>(null);
62
+ const updateState = useCallback((newState: GestureViewerControllerState, onStoreChange: () => void) => {
63
+ if (
64
+ stateRef.current.currentIndex !== newState.currentIndex ||
65
+ stateRef.current.totalCount !== newState.totalCount
66
+ ) {
67
+ stateRef.current = {
68
+ currentIndex: newState.currentIndex,
69
+ totalCount: newState.totalCount,
70
+ };
71
+ onStoreChange();
72
+ }
73
+ }, []);
66
74
 
67
- useEffect(() => {
68
- const handleManagerChange = (newManager: GestureViewerManager | null) => {
69
- unsubscribeRef.current?.();
70
- unsubscribeRef.current = null;
75
+ const subscribe = useCallback(
76
+ (onStoreChange: () => void) => {
77
+ let unsubscribeFromManager: (() => void) | null = null;
71
78
 
72
- setManager(newManager);
79
+ const unsubscribeFromRegistry = registry.subscribeToManager(id, (newManager) => {
80
+ unsubscribeFromManager?.();
81
+ unsubscribeFromManager = null;
82
+ managerRef.current = newManager;
73
83
 
74
- if (newManager) {
75
- setState(newManager.getState());
76
- unsubscribeRef.current = newManager.subscribe(setState);
77
- return;
78
- }
84
+ if (newManager) {
85
+ unsubscribeFromManager = newManager.subscribe((newState) => {
86
+ updateState(newState, onStoreChange);
87
+ });
79
88
 
80
- setState({ currentIndex: 0, totalCount: 0 });
81
- };
89
+ updateState(newManager.getState(), onStoreChange);
90
+ return;
91
+ }
82
92
 
83
- const unsubscribeFromRegistry = registry.subscribeToManager(id, handleManagerChange);
93
+ updateState({ currentIndex: 0, totalCount: 0 }, onStoreChange);
94
+ });
84
95
 
85
- return () => {
86
- unsubscribeFromRegistry();
87
- unsubscribeRef.current?.();
88
- };
89
- }, [id]);
96
+ return () => {
97
+ unsubscribeFromRegistry();
98
+ unsubscribeFromManager?.();
99
+ };
100
+ },
101
+ [id, updateState],
102
+ );
90
103
 
91
- const noopFunction = useMemo(() => () => {}, []);
104
+ const getSnapshot = useCallback(() => {
105
+ return stateRef.current;
106
+ }, []);
107
+
108
+ const state = useSyncExternalStore(subscribe, getSnapshot);
109
+
110
+ const controller = useMemo<Omit<GestureViewerController, 'currentIndex' | 'totalCount'>>(
111
+ () => ({
112
+ goToIndex: (index) => {
113
+ managerRef.current?.goToIndex(index);
114
+ },
115
+ goToPrevious: () => {
116
+ managerRef.current?.goToPrevious();
117
+ },
118
+ goToNext: () => {
119
+ managerRef.current?.goToNext();
120
+ },
121
+ zoomIn: (multiplier) => {
122
+ managerRef.current?.zoomIn(multiplier);
123
+ },
124
+ zoomOut: (multiplier) => {
125
+ managerRef.current?.zoomOut(multiplier);
126
+ },
127
+ resetZoom: (scale) => {
128
+ managerRef.current?.resetZoom(scale);
129
+ },
130
+ rotate: (angle, clockwise) => {
131
+ managerRef.current?.rotate(angle, clockwise);
132
+ },
133
+ }),
134
+ [],
135
+ );
92
136
 
93
137
  return {
94
- goToIndex: manager?.goToIndex || noopFunction,
95
- goToPrevious: manager?.goToPrevious || noopFunction,
96
- goToNext: manager?.goToNext || noopFunction,
97
- zoomIn: manager?.zoomIn || noopFunction,
98
- zoomOut: manager?.zoomOut || noopFunction,
99
- resetZoom: manager?.resetZoom || noopFunction,
100
- rotate: manager?.rotate || noopFunction,
138
+ ...controller,
101
139
  ...state,
102
140
  };
103
141
  };