react-native-reanimated-carousel 4.0.0-alpha.0 → 4.0.0-alpha.10

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.
Files changed (230) hide show
  1. package/README.md +22 -162
  2. package/lib/commonjs/components/BaseLayout.js +95 -0
  3. package/lib/commonjs/components/BaseLayout.js.map +1 -0
  4. package/lib/commonjs/components/Carousel.js +210 -0
  5. package/lib/commonjs/components/Carousel.js.map +1 -0
  6. package/lib/commonjs/components/ItemRenderer.js +80 -0
  7. package/lib/commonjs/components/ItemRenderer.js.map +1 -0
  8. package/lib/commonjs/components/LazyView.js +22 -0
  9. package/lib/commonjs/components/LazyView.js.map +1 -0
  10. package/lib/commonjs/components/ScrollViewGesture.js +315 -0
  11. package/lib/commonjs/components/ScrollViewGesture.js.map +1 -0
  12. package/lib/commonjs/components/rnr-demo.test.js +45 -0
  13. package/lib/commonjs/components/rnr-demo.test.js.map +1 -0
  14. package/lib/commonjs/constants/index.js +21 -1
  15. package/lib/commonjs/constants/index.js.map +1 -1
  16. package/lib/commonjs/hooks/useAutoPlay.js +56 -1
  17. package/lib/commonjs/hooks/useAutoPlay.js.map +1 -1
  18. package/lib/commonjs/hooks/useCarouselController.js +245 -1
  19. package/lib/commonjs/hooks/useCarouselController.js.map +1 -1
  20. package/lib/commonjs/hooks/useCheckMounted.js +23 -1
  21. package/lib/commonjs/hooks/useCheckMounted.js.map +1 -1
  22. package/lib/commonjs/hooks/useCommonVariables.js +102 -1
  23. package/lib/commonjs/hooks/useCommonVariables.js.map +1 -1
  24. package/lib/commonjs/hooks/useCommonVariables.test.js +38 -0
  25. package/lib/commonjs/hooks/useCommonVariables.test.js.map +1 -0
  26. package/lib/commonjs/hooks/useInitProps.js +78 -1
  27. package/lib/commonjs/hooks/useInitProps.js.map +1 -1
  28. package/lib/commonjs/hooks/useLayoutConfig.js +39 -1
  29. package/lib/commonjs/hooks/useLayoutConfig.js.map +1 -1
  30. package/lib/commonjs/hooks/useOffsetX.js +51 -1
  31. package/lib/commonjs/hooks/useOffsetX.js.map +1 -1
  32. package/lib/commonjs/hooks/useOffsetX.test.js +53 -0
  33. package/lib/commonjs/hooks/useOffsetX.test.js.map +1 -0
  34. package/lib/commonjs/hooks/useOnProgressChange.js +38 -1
  35. package/lib/commonjs/hooks/useOnProgressChange.js.map +1 -1
  36. package/lib/commonjs/hooks/usePanGestureProxy.js +84 -0
  37. package/lib/commonjs/hooks/usePanGestureProxy.js.map +1 -0
  38. package/lib/commonjs/hooks/usePanGestureProxy.test.js +397 -0
  39. package/lib/commonjs/hooks/usePanGestureProxy.test.js.map +1 -0
  40. package/lib/commonjs/hooks/usePropsErrorBoundary.js +36 -1
  41. package/lib/commonjs/hooks/usePropsErrorBoundary.js.map +1 -1
  42. package/lib/commonjs/hooks/useUpdateGestureConfig.js +20 -0
  43. package/lib/commonjs/hooks/useUpdateGestureConfig.js.map +1 -0
  44. package/lib/commonjs/hooks/useVisibleRanges.js +71 -1
  45. package/lib/commonjs/hooks/useVisibleRanges.js.map +1 -1
  46. package/lib/commonjs/hooks/useVisibleRanges.test.js +162 -0
  47. package/lib/commonjs/hooks/useVisibleRanges.test.js.map +1 -0
  48. package/lib/commonjs/index.js +13 -1
  49. package/lib/commonjs/index.js.map +1 -1
  50. package/lib/commonjs/layouts/index.js +20 -1
  51. package/lib/commonjs/layouts/index.js.map +1 -1
  52. package/lib/commonjs/layouts/normal.js +27 -1
  53. package/lib/commonjs/layouts/normal.js.map +1 -1
  54. package/lib/commonjs/layouts/parallax.js +38 -1
  55. package/lib/commonjs/layouts/parallax.js.map +1 -1
  56. package/lib/commonjs/layouts/stack.js +215 -1
  57. package/lib/commonjs/layouts/stack.js.map +1 -1
  58. package/lib/commonjs/store/index.js +14 -1
  59. package/lib/commonjs/store/index.js.map +1 -1
  60. package/lib/commonjs/types.js +5 -1
  61. package/lib/commonjs/utils/compute-offset-if-data-changed.js +52 -0
  62. package/lib/commonjs/utils/compute-offset-if-data-changed.js.map +1 -0
  63. package/lib/commonjs/utils/compute-offset-if-data-changed.test.js +30 -0
  64. package/lib/commonjs/utils/compute-offset-if-data-changed.test.js.map +1 -0
  65. package/lib/commonjs/utils/compute-offset-if-size-changed.js +18 -0
  66. package/lib/commonjs/utils/compute-offset-if-size-changed.js.map +1 -0
  67. package/lib/commonjs/utils/compute-offset-if-size-changed.test.js +72 -0
  68. package/lib/commonjs/utils/compute-offset-if-size-changed.test.js.map +1 -0
  69. package/lib/commonjs/utils/computed-with-auto-fill-data.js +124 -0
  70. package/lib/commonjs/utils/computed-with-auto-fill-data.js.map +1 -0
  71. package/lib/commonjs/utils/deal-with-animation.js +21 -0
  72. package/lib/commonjs/utils/deal-with-animation.js.map +1 -0
  73. package/lib/commonjs/utils/handleroffset-direction.js +16 -0
  74. package/lib/commonjs/utils/handleroffset-direction.js.map +1 -0
  75. package/lib/commonjs/utils/handleroffset-direction.test.js +46 -0
  76. package/lib/commonjs/utils/handleroffset-direction.test.js.map +1 -0
  77. package/lib/commonjs/utils/index.test.js +74 -0
  78. package/lib/commonjs/utils/index.test.js.map +1 -0
  79. package/lib/commonjs/utils/log.js +22 -1
  80. package/lib/commonjs/utils/log.js.map +1 -1
  81. package/lib/module/{layouts → components}/BaseLayout.js +6 -16
  82. package/lib/module/components/BaseLayout.js.map +1 -0
  83. package/lib/module/{Carousel.js → components/Carousel.js} +33 -52
  84. package/lib/module/components/Carousel.js.map +1 -0
  85. package/lib/module/components/ItemRenderer.js +62 -0
  86. package/lib/module/components/ItemRenderer.js.map +1 -0
  87. package/lib/module/{ScrollViewGesture.js → components/ScrollViewGesture.js} +59 -32
  88. package/lib/module/components/ScrollViewGesture.js.map +1 -0
  89. package/lib/module/components/rnr-demo.test.js +33 -0
  90. package/lib/module/components/rnr-demo.test.js.map +1 -0
  91. package/lib/module/hooks/useCarouselController.js +15 -14
  92. package/lib/module/hooks/useCarouselController.js.map +1 -1
  93. package/lib/module/hooks/useCommonVariables.js +39 -9
  94. package/lib/module/hooks/useCommonVariables.js.map +1 -1
  95. package/lib/module/hooks/useCommonVariables.test.js +34 -0
  96. package/lib/module/hooks/useCommonVariables.test.js.map +1 -0
  97. package/lib/module/hooks/useInitProps.js +1 -3
  98. package/lib/module/hooks/useInitProps.js.map +1 -1
  99. package/lib/module/hooks/useLayoutConfig.js.map +1 -1
  100. package/lib/module/hooks/useOffsetX.js +9 -6
  101. package/lib/module/hooks/useOffsetX.js.map +1 -1
  102. package/lib/module/hooks/useOffsetX.test.js +48 -0
  103. package/lib/module/hooks/useOffsetX.test.js.map +1 -0
  104. package/lib/module/hooks/useOnProgressChange.js +1 -1
  105. package/lib/module/hooks/useOnProgressChange.js.map +1 -1
  106. package/lib/module/hooks/usePanGestureProxy.js +71 -0
  107. package/lib/module/hooks/usePanGestureProxy.js.map +1 -0
  108. package/lib/module/hooks/usePanGestureProxy.test.js +383 -0
  109. package/lib/module/hooks/usePanGestureProxy.test.js.map +1 -0
  110. package/lib/module/hooks/useUpdateGestureConfig.js +10 -0
  111. package/lib/module/hooks/useUpdateGestureConfig.js.map +1 -0
  112. package/lib/module/hooks/useVisibleRanges.js +47 -19
  113. package/lib/module/hooks/useVisibleRanges.js.map +1 -1
  114. package/lib/module/hooks/useVisibleRanges.test.js +157 -0
  115. package/lib/module/hooks/useVisibleRanges.test.js.map +1 -0
  116. package/lib/module/index.js +1 -2
  117. package/lib/module/index.js.map +1 -1
  118. package/lib/module/{hooks/computeNewIndexWhenDataChanges.js → utils/compute-offset-if-data-changed.js} +2 -2
  119. package/lib/module/utils/compute-offset-if-data-changed.js.map +1 -0
  120. package/lib/module/utils/compute-offset-if-data-changed.test.js +27 -0
  121. package/lib/module/utils/compute-offset-if-data-changed.test.js.map +1 -0
  122. package/lib/module/utils/compute-offset-if-size-changed.js +11 -0
  123. package/lib/module/utils/compute-offset-if-size-changed.js.map +1 -0
  124. package/lib/module/utils/compute-offset-if-size-changed.test.js +69 -0
  125. package/lib/module/utils/compute-offset-if-size-changed.test.js.map +1 -0
  126. package/lib/module/utils/{computedWithAutoFillData.js → computed-with-auto-fill-data.js} +1 -1
  127. package/lib/module/utils/computed-with-auto-fill-data.js.map +1 -0
  128. package/lib/module/utils/{dealWithAnimation.js → deal-with-animation.js} +1 -1
  129. package/lib/module/utils/deal-with-animation.js.map +1 -0
  130. package/lib/module/utils/handleroffset-direction.js +9 -0
  131. package/lib/module/utils/handleroffset-direction.js.map +1 -0
  132. package/lib/module/utils/handleroffset-direction.test.js +41 -0
  133. package/lib/module/utils/handleroffset-direction.test.js.map +1 -0
  134. package/lib/module/{hooks → utils}/index.test.js +6 -6
  135. package/lib/module/utils/index.test.js.map +1 -0
  136. package/lib/typescript/{Carousel.d.ts → components/Carousel.d.ts} +1 -1
  137. package/lib/typescript/components/ItemRenderer.d.ts +22 -0
  138. package/lib/typescript/{ScrollViewGesture.d.ts → components/ScrollViewGesture.d.ts} +1 -1
  139. package/lib/typescript/hooks/useCarouselController.d.ts +3 -2
  140. package/lib/typescript/hooks/useCommonVariables.test.d.ts +1 -0
  141. package/lib/typescript/hooks/useLayoutConfig.d.ts +1 -1
  142. package/lib/typescript/hooks/useOffsetX.test.d.ts +1 -0
  143. package/lib/typescript/hooks/usePanGestureProxy.d.ts +9 -0
  144. package/lib/typescript/hooks/usePanGestureProxy.test.d.ts +1 -0
  145. package/lib/typescript/hooks/useUpdateGestureConfig.d.ts +5 -0
  146. package/lib/typescript/hooks/useVisibleRanges.d.ts +8 -4
  147. package/lib/typescript/hooks/useVisibleRanges.test.d.ts +1 -0
  148. package/lib/typescript/index.d.ts +3 -2
  149. package/lib/typescript/types.d.ts +113 -104
  150. package/lib/typescript/{hooks/computeNewIndexWhenDataChanges.d.ts → utils/compute-offset-if-data-changed.d.ts} +1 -1
  151. package/lib/typescript/utils/compute-offset-if-data-changed.test.d.ts +1 -0
  152. package/lib/typescript/utils/compute-offset-if-size-changed.d.ts +5 -0
  153. package/lib/typescript/utils/compute-offset-if-size-changed.test.d.ts +1 -0
  154. package/lib/typescript/utils/handleroffset-direction.d.ts +3 -0
  155. package/lib/typescript/utils/handleroffset-direction.test.d.ts +1 -0
  156. package/lib/typescript/utils/index.test.d.ts +1 -0
  157. package/package.json +32 -73
  158. package/src/{layouts → components}/BaseLayout.tsx +7 -35
  159. package/src/{Carousel.tsx → components/Carousel.tsx} +35 -69
  160. package/src/components/ItemRenderer.tsx +105 -0
  161. package/src/{ScrollViewGesture.tsx → components/ScrollViewGesture.tsx} +88 -48
  162. package/src/components/rnr-demo.test.tsx +43 -0
  163. package/src/hooks/useCarouselController.tsx +27 -24
  164. package/src/hooks/useCommonVariables.test.tsx +41 -0
  165. package/src/hooks/useCommonVariables.ts +36 -11
  166. package/src/hooks/useInitProps.ts +1 -3
  167. package/src/hooks/useLayoutConfig.ts +1 -1
  168. package/src/hooks/useOffsetX.test.ts +54 -0
  169. package/src/hooks/useOffsetX.ts +33 -31
  170. package/src/hooks/useOnProgressChange.ts +1 -1
  171. package/src/hooks/usePanGestureProxy.test.tsx +376 -0
  172. package/src/hooks/usePanGestureProxy.ts +110 -0
  173. package/src/hooks/useUpdateGestureConfig.ts +15 -0
  174. package/src/hooks/useVisibleRanges.test.tsx +179 -0
  175. package/src/hooks/useVisibleRanges.tsx +72 -24
  176. package/src/index.tsx +4 -2
  177. package/src/types.ts +132 -125
  178. package/src/utils/compute-offset-if-data-changed.test.ts +30 -0
  179. package/src/{hooks/computeNewIndexWhenDataChanges.ts → utils/compute-offset-if-data-changed.ts} +1 -1
  180. package/src/utils/compute-offset-if-size-changed.test.ts +78 -0
  181. package/src/utils/compute-offset-if-size-changed.ts +11 -0
  182. package/src/utils/handleroffset-direction.test.ts +52 -0
  183. package/src/utils/handleroffset-direction.ts +18 -0
  184. package/src/{hooks → utils}/index.test.ts +6 -6
  185. package/README.zh-CN.md +0 -202
  186. package/lib/commonjs/Carousel.js +0 -2
  187. package/lib/commonjs/Carousel.js.map +0 -1
  188. package/lib/commonjs/LazyView.js +0 -2
  189. package/lib/commonjs/LazyView.js.map +0 -1
  190. package/lib/commonjs/ScrollViewGesture.js +0 -2
  191. package/lib/commonjs/ScrollViewGesture.js.map +0 -1
  192. package/lib/commonjs/hooks/computeNewIndexWhenDataChanges.js +0 -2
  193. package/lib/commonjs/hooks/computeNewIndexWhenDataChanges.js.map +0 -1
  194. package/lib/commonjs/hooks/index.test.js +0 -2
  195. package/lib/commonjs/hooks/index.test.js.map +0 -1
  196. package/lib/commonjs/layouts/BaseLayout.js +0 -2
  197. package/lib/commonjs/layouts/BaseLayout.js.map +0 -1
  198. package/lib/commonjs/layouts/ParallaxLayout.js +0 -2
  199. package/lib/commonjs/layouts/ParallaxLayout.js.map +0 -1
  200. package/lib/commonjs/utils/computedWithAutoFillData.js +0 -2
  201. package/lib/commonjs/utils/computedWithAutoFillData.js.map +0 -1
  202. package/lib/commonjs/utils/dealWithAnimation.js +0 -2
  203. package/lib/commonjs/utils/dealWithAnimation.js.map +0 -1
  204. package/lib/commonjs/utils/handlerOffsetDirection.js +0 -2
  205. package/lib/commonjs/utils/handlerOffsetDirection.js.map +0 -1
  206. package/lib/module/Carousel.js.map +0 -1
  207. package/lib/module/ScrollViewGesture.js.map +0 -1
  208. package/lib/module/hooks/computeNewIndexWhenDataChanges.js.map +0 -1
  209. package/lib/module/hooks/index.test.js.map +0 -1
  210. package/lib/module/layouts/BaseLayout.js.map +0 -1
  211. package/lib/module/layouts/ParallaxLayout.js +0 -61
  212. package/lib/module/layouts/ParallaxLayout.js.map +0 -1
  213. package/lib/module/utils/computedWithAutoFillData.js.map +0 -1
  214. package/lib/module/utils/dealWithAnimation.js.map +0 -1
  215. package/lib/module/utils/handlerOffsetDirection.js +0 -9
  216. package/lib/module/utils/handlerOffsetDirection.js.map +0 -1
  217. package/lib/typescript/layouts/ParallaxLayout.d.ts +0 -13
  218. package/lib/typescript/utils/handlerOffsetDirection.d.ts +0 -2
  219. package/src/layouts/ParallaxLayout.tsx +0 -141
  220. package/src/utils/handlerOffsetDirection.ts +0 -15
  221. /package/lib/module/{LazyView.js → components/LazyView.js} +0 -0
  222. /package/lib/module/{LazyView.js.map → components/LazyView.js.map} +0 -0
  223. /package/lib/typescript/{layouts → components}/BaseLayout.d.ts +0 -0
  224. /package/lib/typescript/{LazyView.d.ts → components/LazyView.d.ts} +0 -0
  225. /package/lib/typescript/{hooks/index.test.d.ts → components/rnr-demo.test.d.ts} +0 -0
  226. /package/lib/typescript/utils/{computedWithAutoFillData.d.ts → computed-with-auto-fill-data.d.ts} +0 -0
  227. /package/lib/typescript/utils/{dealWithAnimation.d.ts → deal-with-animation.d.ts} +0 -0
  228. /package/src/{LazyView.tsx → components/LazyView.tsx} +0 -0
  229. /package/src/utils/{computedWithAutoFillData.ts → computed-with-auto-fill-data.ts} +0 -0
  230. /package/src/utils/{dealWithAnimation.ts → deal-with-animation.ts} +0 -0
@@ -0,0 +1,397 @@
1
+ "use strict";
2
+
3
+ var _react = _interopRequireDefault(require("react"));
4
+
5
+ var _reactNative = require("react-native");
6
+
7
+ var _reactNativeGestureHandler = require("react-native-gesture-handler");
8
+
9
+ var _reactNative2 = require("@testing-library/react-native");
10
+
11
+ var _jestUtils = require("react-native-gesture-handler/jest-utils");
12
+
13
+ var _usePanGestureProxy = require("./usePanGestureProxy");
14
+
15
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
+
17
+ beforeEach(_reactNative2.cleanup);
18
+
19
+ const mockedEventHandlers = () => {
20
+ return {
21
+ begin: jest.fn(),
22
+ start: jest.fn(),
23
+ active: jest.fn(),
24
+ end: jest.fn(),
25
+ fail: jest.fn(),
26
+ cancel: jest.fn(),
27
+ finish: jest.fn()
28
+ };
29
+ };
30
+
31
+ const mockedEventHandlersFromUser = () => {
32
+ return {
33
+ begin: jest.fn(),
34
+ start: jest.fn(),
35
+ active: jest.fn(),
36
+ end: jest.fn(),
37
+ fail: jest.fn(),
38
+ cancel: jest.fn(),
39
+ finish: jest.fn()
40
+ };
41
+ };
42
+
43
+ describe("Using RNGH v2 gesture API", () => {
44
+ function SingleHandler(_ref) {
45
+ let {
46
+ handlers,
47
+ handlersFromUser,
48
+ treatStartAsUpdate
49
+ } = _ref;
50
+ const pan = (0, _usePanGestureProxy.usePanGestureProxy)({
51
+ onConfigurePanGesture: gesture => {
52
+ // This is user's customizations
53
+ gesture.onBegin(handlersFromUser.begin).onUpdate(handlersFromUser.active).onEnd(handlersFromUser.end).onFinalize(handlers.finish).withTestId("pan");
54
+ },
55
+ onGestureStart: treatStartAsUpdate ? handlers.active : handlers.start,
56
+ onGestureUpdate: handlers.active,
57
+ onGestureEnd: handlers.end,
58
+ options: {
59
+ enabled: true
60
+ }
61
+ });
62
+ return /*#__PURE__*/_react.default.createElement(_reactNativeGestureHandler.GestureHandlerRootView, null, /*#__PURE__*/_react.default.createElement(_reactNativeGestureHandler.GestureDetector, {
63
+ gesture: pan
64
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, null, "v2 API test")));
65
+ }
66
+
67
+ function RacingHandlers(_ref2) {
68
+ let {
69
+ tapHandlers,
70
+ panHandlers
71
+ } = _ref2;
72
+
73
+ const tap = _reactNativeGestureHandler.Gesture.Tap().onBegin(tapHandlers.begin).onEnd(tapHandlers.end).withTestId("tap");
74
+
75
+ const pan = (0, _usePanGestureProxy.usePanGestureProxy)({
76
+ onConfigurePanGesture: _ => {
77
+ _.onBegin(panHandlers.begin).onFinalize(panHandlers.finish).withTestId("pan");
78
+ },
79
+ onGestureStart: panHandlers.start,
80
+ onGestureUpdate: panHandlers.active,
81
+ onGestureEnd: panHandlers.end,
82
+ options: {
83
+ enabled: true
84
+ }
85
+ });
86
+ return /*#__PURE__*/_react.default.createElement(_reactNativeGestureHandler.GestureHandlerRootView, null, /*#__PURE__*/_react.default.createElement(_reactNativeGestureHandler.GestureDetector, {
87
+ gesture: _reactNativeGestureHandler.Gesture.Race(tap, pan)
88
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, null, "v2 API test")));
89
+ }
90
+
91
+ it("sends events to handlers", () => {
92
+ const tapHandlers = mockedEventHandlers();
93
+ const panHandlers = mockedEventHandlers();
94
+ (0, _reactNative2.render)( /*#__PURE__*/_react.default.createElement(RacingHandlers, {
95
+ tapHandlers: tapHandlers,
96
+ panHandlers: panHandlers
97
+ }));
98
+ (0, _jestUtils.fireGestureHandler)((0, _jestUtils.getByGestureTestId)("pan"), [{
99
+ state: _reactNativeGestureHandler.State.BEGAN
100
+ }, {
101
+ state: _reactNativeGestureHandler.State.ACTIVE
102
+ }, {
103
+ state: _reactNativeGestureHandler.State.END
104
+ }]);
105
+ expect(panHandlers.begin).toBeCalledWith(expect.objectContaining({
106
+ state: _reactNativeGestureHandler.State.BEGAN
107
+ }));
108
+ expect(panHandlers.finish).toBeCalled();
109
+ expect(tapHandlers.begin).not.toBeCalled();
110
+ });
111
+ it("sends events with additional data to handlers", () => {
112
+ const panHandlers = mockedEventHandlers();
113
+ const panHandlersFromUser = mockedEventHandlersFromUser();
114
+ (0, _reactNative2.render)( /*#__PURE__*/_react.default.createElement(SingleHandler, {
115
+ handlers: panHandlers,
116
+ handlersFromUser: panHandlersFromUser,
117
+ treatStartAsUpdate: true
118
+ }));
119
+ (0, _jestUtils.fireGestureHandler)((0, _jestUtils.getByGestureTestId)("pan"), [{
120
+ state: _reactNativeGestureHandler.State.BEGAN,
121
+ translationX: 0
122
+ }, {
123
+ state: _reactNativeGestureHandler.State.ACTIVE,
124
+ translationX: 10
125
+ }, {
126
+ translationX: 20
127
+ }, {
128
+ translationX: 20
129
+ }, {
130
+ state: _reactNativeGestureHandler.State.END,
131
+ translationX: 30
132
+ }]);
133
+ expect(panHandlersFromUser.begin).toBeCalledTimes(1);
134
+ expect(panHandlersFromUser.active).toBeCalledTimes(2);
135
+ expect(panHandlersFromUser.end).toBeCalledTimes(1);
136
+ expect(panHandlers.active).toBeCalledTimes(3);
137
+ expect(panHandlers.active).toHaveBeenLastCalledWith(expect.objectContaining({
138
+ translationX: 20
139
+ }));
140
+ });
141
+ });
142
+ describe("Event list validation", () => {
143
+ function SingleHandler(_ref3) {
144
+ let {
145
+ handlers,
146
+ handlersFromUser,
147
+ treatStartAsUpdate
148
+ } = _ref3;
149
+ const pan = (0, _usePanGestureProxy.usePanGestureProxy)({
150
+ onConfigurePanGesture: _ => {
151
+ _.onBegin(handlersFromUser.begin).onUpdate(handlersFromUser.active).onEnd(handlersFromUser.end).onFinalize(handlers.finish).withTestId("pan");
152
+ },
153
+ onGestureStart: treatStartAsUpdate ? handlers.active : handlers.start,
154
+ onGestureUpdate: handlers.active,
155
+ onGestureEnd: handlers.end,
156
+ options: {
157
+ enabled: true
158
+ }
159
+ });
160
+ return /*#__PURE__*/_react.default.createElement(_reactNativeGestureHandler.GestureHandlerRootView, null, /*#__PURE__*/_react.default.createElement(_reactNativeGestureHandler.GestureDetector, {
161
+ gesture: pan
162
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, null, "v2 API test")));
163
+ }
164
+
165
+ it("throws error when oldState doesn't correspond to previous event's state", () => {
166
+ const panHandlers = mockedEventHandlers();
167
+ const panHandlersFromUser = mockedEventHandlersFromUser();
168
+ (0, _reactNative2.render)( /*#__PURE__*/_react.default.createElement(SingleHandler, {
169
+ handlers: panHandlers,
170
+ handlersFromUser: panHandlersFromUser
171
+ }));
172
+ expect(() => {
173
+ (0, _jestUtils.fireGestureHandler)((0, _jestUtils.getByGestureTestId)("pan"), [{
174
+ oldState: _reactNativeGestureHandler.State.UNDETERMINED,
175
+ state: _reactNativeGestureHandler.State.BEGAN,
176
+ x: 0,
177
+ y: 10
178
+ }, {
179
+ oldState: _reactNativeGestureHandler.State.UNDETERMINED,
180
+ state: _reactNativeGestureHandler.State.ACTIVE,
181
+ x: 1,
182
+ y: 11
183
+ }]);
184
+ }).toThrow("when state changes, oldState should be the same as previous event' state");
185
+ });
186
+ it.each([[_reactNativeGestureHandler.State.END], [_reactNativeGestureHandler.State.FAILED], [_reactNativeGestureHandler.State.CANCELLED]])("correctly handles events ending with state %s", lastState => {
187
+ const panHandlers = mockedEventHandlers();
188
+ const panHandlersFromUser = mockedEventHandlersFromUser();
189
+ (0, _reactNative2.render)( /*#__PURE__*/_react.default.createElement(SingleHandler, {
190
+ handlers: panHandlers,
191
+ handlersFromUser: panHandlersFromUser
192
+ }));
193
+ (0, _jestUtils.fireGestureHandler)((0, _jestUtils.getByGestureTestId)("pan"), [{
194
+ state: _reactNativeGestureHandler.State.BEGAN
195
+ }, {
196
+ state: _reactNativeGestureHandler.State.ACTIVE
197
+ }, {
198
+ state: lastState
199
+ }]);
200
+ expect(panHandlersFromUser.begin).toBeCalledTimes(1);
201
+ expect(panHandlersFromUser.active).toBeCalledTimes(0);
202
+ expect(panHandlersFromUser.end).toBeCalledTimes(1);
203
+ if (lastState === _reactNativeGestureHandler.State.END) expect(panHandlers.end).toBeCalled();else expect(panHandlers.finish).toBeCalledWith(expect.any(Object), false);
204
+ });
205
+ });
206
+ describe("Filling event list with defaults", () => {
207
+ function RacingTapAndPan(_ref4) {
208
+ let {
209
+ handlers,
210
+ treatStartAsUpdate
211
+ } = _ref4;
212
+
213
+ const tap = _reactNativeGestureHandler.Gesture.Tap().onBegin(handlers.begin).onEnd(handlers.end).withTestId("tap");
214
+
215
+ const pan = (0, _usePanGestureProxy.usePanGestureProxy)({
216
+ onConfigurePanGesture: _ => {
217
+ _.onBegin(handlers.begin).onFinalize(handlers.finish).withTestId("pan");
218
+ },
219
+ onGestureStart: treatStartAsUpdate ? handlers.active : handlers.start,
220
+ onGestureUpdate: handlers.active,
221
+ onGestureEnd: handlers.end,
222
+ options: {
223
+ enabled: true
224
+ }
225
+ });
226
+ return /*#__PURE__*/_react.default.createElement(_reactNativeGestureHandler.GestureHandlerRootView, null, /*#__PURE__*/_react.default.createElement(_reactNativeGestureHandler.GestureDetector, {
227
+ gesture: _reactNativeGestureHandler.Gesture.Exclusive(pan, tap)
228
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, null, "v2 API test")));
229
+ }
230
+
231
+ it("fills oldState if not passed", () => {
232
+ const handlers = mockedEventHandlers();
233
+ (0, _reactNative2.render)( /*#__PURE__*/_react.default.createElement(RacingTapAndPan, {
234
+ handlers: handlers,
235
+ treatStartAsUpdate: true
236
+ }));
237
+ (0, _jestUtils.fireGestureHandler)((0, _jestUtils.getByGestureTestId)("pan"), [{
238
+ state: _reactNativeGestureHandler.State.BEGAN
239
+ }, {
240
+ state: _reactNativeGestureHandler.State.ACTIVE
241
+ }, {
242
+ state: _reactNativeGestureHandler.State.ACTIVE
243
+ }, {
244
+ state: _reactNativeGestureHandler.State.ACTIVE
245
+ }, {
246
+ state: _reactNativeGestureHandler.State.END
247
+ }]);
248
+ expect(handlers.begin).toBeCalledWith(expect.objectContaining({
249
+ oldState: _reactNativeGestureHandler.State.UNDETERMINED
250
+ }));
251
+ expect(handlers.active).nthCalledWith(1, expect.objectContaining({
252
+ oldState: _reactNativeGestureHandler.State.BEGAN
253
+ }));
254
+ expect(handlers.active).lastCalledWith(expect.not.objectContaining({
255
+ oldState: expect.anything()
256
+ }));
257
+ expect(handlers.end).toBeCalledWith(expect.objectContaining({
258
+ oldState: _reactNativeGestureHandler.State.ACTIVE
259
+ }), true);
260
+ });
261
+ it("fills missing ACTIVE states", () => {
262
+ const panHandlers = mockedEventHandlers();
263
+ (0, _reactNative2.render)( /*#__PURE__*/_react.default.createElement(RacingTapAndPan, {
264
+ handlers: panHandlers,
265
+ treatStartAsUpdate: true
266
+ }));
267
+ (0, _jestUtils.fireGestureHandler)((0, _jestUtils.getByGestureTestId)("pan"), [{
268
+ state: _reactNativeGestureHandler.State.BEGAN,
269
+ x: 0,
270
+ y: 10
271
+ }, {
272
+ state: _reactNativeGestureHandler.State.ACTIVE,
273
+ x: 1,
274
+ y: 11
275
+ }, {
276
+ x: 2,
277
+ y: 12
278
+ }, {
279
+ x: 3,
280
+ y: 13
281
+ }, {
282
+ state: _reactNativeGestureHandler.State.END,
283
+ x: 4,
284
+ y: 14
285
+ }]);
286
+ expect(panHandlers.active).toBeCalledTimes(3);
287
+ expect(panHandlers.active).toHaveBeenLastCalledWith(expect.objectContaining({
288
+ x: 3,
289
+ y: 13
290
+ }));
291
+ });
292
+ it("fills BEGIN and END events for discrete handlers", () => {
293
+ const handlers = mockedEventHandlers();
294
+ (0, _reactNative2.render)( /*#__PURE__*/_react.default.createElement(RacingTapAndPan, {
295
+ handlers: handlers,
296
+ treatStartAsUpdate: true
297
+ }));
298
+ (0, _jestUtils.fireGestureHandler)((0, _jestUtils.getByGestureTestId)("tap"), [{
299
+ x: 5
300
+ }]);
301
+ expect(handlers.begin).toBeCalledTimes(1);
302
+ expect(handlers.end).toBeCalledTimes(1);
303
+ });
304
+ it("with FAILED event, fills BEGIN event for discrete handlers", () => {
305
+ const handlers = mockedEventHandlers();
306
+ (0, _reactNative2.render)( /*#__PURE__*/_react.default.createElement(RacingTapAndPan, {
307
+ handlers: handlers,
308
+ treatStartAsUpdate: true
309
+ }));
310
+ (0, _jestUtils.fireGestureHandler)((0, _jestUtils.getByGestureTestId)("tap"), [{
311
+ state: _reactNativeGestureHandler.State.FAILED
312
+ }]);
313
+ expect(handlers.begin).toBeCalledTimes(1);
314
+ expect(handlers.end).toBeCalledTimes(1);
315
+ expect(handlers.end).toBeCalledWith(expect.anything(), false);
316
+ });
317
+ it("uses event data from first event in filled BEGIN, ACTIVE events", () => {
318
+ const handlers = mockedEventHandlers();
319
+ (0, _reactNative2.render)( /*#__PURE__*/_react.default.createElement(RacingTapAndPan, {
320
+ handlers: handlers,
321
+ treatStartAsUpdate: true
322
+ }));
323
+ (0, _jestUtils.fireGestureHandler)((0, _jestUtils.getByGestureTestId)("pan"), [{
324
+ x: 120
325
+ }]);
326
+ expect(handlers.begin).toBeCalledWith(expect.objectContaining({
327
+ x: 120
328
+ }));
329
+ expect(handlers.active).toHaveBeenNthCalledWith(1, expect.objectContaining({
330
+ x: 120
331
+ }));
332
+ });
333
+ it("uses event data from last event in filled END events", () => {
334
+ const handlers = mockedEventHandlers();
335
+ (0, _reactNative2.render)( /*#__PURE__*/_react.default.createElement(RacingTapAndPan, {
336
+ handlers: handlers,
337
+ treatStartAsUpdate: true
338
+ }));
339
+ (0, _jestUtils.fireGestureHandler)((0, _jestUtils.getByGestureTestId)("pan"), [{
340
+ x: 120,
341
+ state: _reactNativeGestureHandler.State.FAILED
342
+ }]);
343
+ expect(handlers.begin).toBeCalledTimes(1);
344
+ expect(handlers.active).toBeCalledTimes(1);
345
+ expect(handlers.end).toBeCalledWith(expect.objectContaining({
346
+ x: 120
347
+ }), false);
348
+ });
349
+ it("uses event data filled events", () => {
350
+ const handlers = mockedEventHandlers();
351
+ (0, _reactNative2.render)( /*#__PURE__*/_react.default.createElement(RacingTapAndPan, {
352
+ handlers: handlers,
353
+ treatStartAsUpdate: true
354
+ }));
355
+ (0, _jestUtils.fireGestureHandler)((0, _jestUtils.getByGestureTestId)("pan"), [{
356
+ x: 5,
357
+ y: 15
358
+ }, {
359
+ x: 6,
360
+ y: 16
361
+ }, {
362
+ x: 7,
363
+ y: 17
364
+ }]);
365
+ expect(handlers.begin).toBeCalledWith(expect.objectContaining({
366
+ x: 5,
367
+ y: 15
368
+ }));
369
+ expect(handlers.active).toBeCalledTimes(3);
370
+ expect(handlers.end).toBeCalledWith(expect.objectContaining({
371
+ x: 7,
372
+ y: 17
373
+ }), true);
374
+ });
375
+ it("fills BEGIN and END events when they're not present, for discrete handlers", () => {
376
+ const handlers = mockedEventHandlers();
377
+ (0, _reactNative2.render)( /*#__PURE__*/_react.default.createElement(RacingTapAndPan, {
378
+ handlers: handlers,
379
+ treatStartAsUpdate: true
380
+ }));
381
+ (0, _jestUtils.fireGestureHandler)((0, _jestUtils.getByGestureTestId)("tap"));
382
+ expect(handlers.begin).toBeCalledTimes(1);
383
+ expect(handlers.end).toHaveBeenCalledTimes(1);
384
+ });
385
+ it("fills BEGIN, ACTIVE and END events when they're not present, for continuous handlers", () => {
386
+ const handlers = mockedEventHandlers();
387
+ (0, _reactNative2.render)( /*#__PURE__*/_react.default.createElement(RacingTapAndPan, {
388
+ handlers: handlers,
389
+ treatStartAsUpdate: true
390
+ }));
391
+ (0, _jestUtils.fireGestureHandler)((0, _jestUtils.getByGestureTestId)("pan"));
392
+ expect(handlers.begin).toBeCalledTimes(1);
393
+ expect(handlers.active).toBeCalledTimes(1);
394
+ expect(handlers.end).toHaveBeenCalledTimes(1);
395
+ });
396
+ });
397
+ //# sourceMappingURL=usePanGestureProxy.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["usePanGestureProxy.test.tsx"],"names":["beforeEach","cleanup","mockedEventHandlers","begin","jest","fn","start","active","end","fail","cancel","finish","mockedEventHandlersFromUser","describe","SingleHandler","handlers","handlersFromUser","treatStartAsUpdate","pan","onConfigurePanGesture","gesture","onBegin","onUpdate","onEnd","onFinalize","withTestId","onGestureStart","onGestureUpdate","onGestureEnd","options","enabled","RacingHandlers","tapHandlers","panHandlers","tap","Gesture","Tap","_","Race","it","state","State","BEGAN","ACTIVE","END","expect","toBeCalledWith","objectContaining","toBeCalled","not","panHandlersFromUser","translationX","toBeCalledTimes","toHaveBeenLastCalledWith","oldState","UNDETERMINED","x","y","toThrow","each","FAILED","CANCELLED","lastState","any","Object","RacingTapAndPan","Exclusive","nthCalledWith","lastCalledWith","anything","toHaveBeenNthCalledWith","toHaveBeenCalledTimes"],"mappings":"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","sourcesContent":["import React from \"react\";\nimport { Text } from \"react-native\";\nimport type { PanGesture, PanGestureHandler, TapGesture } from \"react-native-gesture-handler\";\nimport { Gesture, GestureDetector, GestureHandlerRootView, State } from \"react-native-gesture-handler\";\n\nimport { cleanup, render } from \"@testing-library/react-native\";\nimport { fireGestureHandler, getByGestureTestId } from \"react-native-gesture-handler/jest-utils\";\n\nimport { usePanGestureProxy } from \"./usePanGestureProxy\";\n\nbeforeEach(cleanup);\n\nconst mockedEventHandlers = () => {\n return {\n begin: jest.fn(),\n start: jest.fn(),\n active: jest.fn(),\n end: jest.fn(),\n fail: jest.fn(),\n cancel: jest.fn(),\n finish: jest.fn(),\n };\n};\n\nconst mockedEventHandlersFromUser = () => {\n return {\n begin: jest.fn(),\n start: jest.fn(),\n active: jest.fn(),\n end: jest.fn(),\n fail: jest.fn(),\n cancel: jest.fn(),\n finish: jest.fn(),\n };\n};\n\ndescribe(\"Using RNGH v2 gesture API\", () => {\n interface SingleHandlerProps {\n handlers: ReturnType<typeof mockedEventHandlers>\n handlersFromUser: ReturnType<typeof mockedEventHandlers>\n treatStartAsUpdate?: boolean\n }\n\n function SingleHandler({ handlers, handlersFromUser, treatStartAsUpdate }: SingleHandlerProps) {\n const pan = usePanGestureProxy({\n onConfigurePanGesture: (gesture: PanGesture) => {\n // This is user's customizations\n gesture\n .onBegin(handlersFromUser.begin)\n .onUpdate(handlersFromUser.active)\n .onEnd(handlersFromUser.end)\n .onFinalize(handlers.finish)\n .withTestId(\"pan\");\n },\n onGestureStart: treatStartAsUpdate ? handlers.active : handlers.start,\n onGestureUpdate: handlers.active,\n onGestureEnd: handlers.end,\n options: { enabled: true },\n });\n\n return (\n <GestureHandlerRootView>\n <GestureDetector gesture={pan}>\n <Text>v2 API test</Text>\n </GestureDetector>\n </GestureHandlerRootView>\n );\n }\n\n interface RacingHandlersProps {\n tapHandlers: ReturnType<typeof mockedEventHandlers>\n panHandlers: ReturnType<typeof mockedEventHandlers>\n }\n\n function RacingHandlers({ tapHandlers, panHandlers }: RacingHandlersProps) {\n const tap = Gesture.Tap()\n .onBegin(tapHandlers.begin)\n .onEnd(tapHandlers.end)\n .withTestId(\"tap\");\n\n const pan = usePanGestureProxy({\n onConfigurePanGesture: (_: PanGesture) => {\n _\n .onBegin(panHandlers.begin)\n .onFinalize(panHandlers.finish)\n .withTestId(\"pan\");\n },\n onGestureStart: panHandlers.start,\n onGestureUpdate: panHandlers.active,\n onGestureEnd: panHandlers.end,\n options: { enabled: true },\n });\n\n return (\n <GestureHandlerRootView>\n <GestureDetector gesture={Gesture.Race(tap, pan)}>\n <Text>v2 API test</Text>\n </GestureDetector>\n </GestureHandlerRootView>\n );\n }\n\n it(\"sends events to handlers\", () => {\n const tapHandlers = mockedEventHandlers();\n const panHandlers = mockedEventHandlers();\n render(\n <RacingHandlers tapHandlers={tapHandlers} panHandlers={panHandlers} />,\n );\n\n fireGestureHandler<PanGesture>(getByGestureTestId(\"pan\"), [\n { state: State.BEGAN },\n { state: State.ACTIVE },\n { state: State.END },\n ]);\n expect(panHandlers.begin).toBeCalledWith(\n expect.objectContaining({ state: State.BEGAN }),\n );\n expect(panHandlers.finish).toBeCalled();\n expect(tapHandlers.begin).not.toBeCalled();\n });\n\n it(\"sends events with additional data to handlers\", () => {\n const panHandlers = mockedEventHandlers();\n const panHandlersFromUser = mockedEventHandlersFromUser();\n render(<SingleHandler handlers={panHandlers} handlersFromUser={panHandlersFromUser} treatStartAsUpdate />);\n fireGestureHandler<PanGesture>(getByGestureTestId(\"pan\"), [\n { state: State.BEGAN, translationX: 0 },\n { state: State.ACTIVE, translationX: 10 },\n { translationX: 20 },\n { translationX: 20 },\n { state: State.END, translationX: 30 },\n ]);\n\n expect(panHandlersFromUser.begin).toBeCalledTimes(1);\n expect(panHandlersFromUser.active).toBeCalledTimes(2);\n expect(panHandlersFromUser.end).toBeCalledTimes(1);\n\n expect(panHandlers.active).toBeCalledTimes(3);\n expect(panHandlers.active).toHaveBeenLastCalledWith(\n expect.objectContaining({ translationX: 20 }),\n );\n });\n});\n\ndescribe(\"Event list validation\", () => {\n interface SingleHandlerProps {\n handlers: ReturnType<typeof mockedEventHandlers>\n handlersFromUser: ReturnType<typeof mockedEventHandlers>\n treatStartAsUpdate?: boolean\n }\n\n function SingleHandler({ handlers, handlersFromUser, treatStartAsUpdate }: SingleHandlerProps) {\n const pan = usePanGestureProxy({\n onConfigurePanGesture: (_: PanGesture) => {\n _\n .onBegin(handlersFromUser.begin)\n .onUpdate(handlersFromUser.active)\n .onEnd(handlersFromUser.end)\n .onFinalize(handlers.finish)\n .withTestId(\"pan\");\n },\n onGestureStart: treatStartAsUpdate ? handlers.active : handlers.start,\n onGestureUpdate: handlers.active,\n onGestureEnd: handlers.end,\n options: { enabled: true },\n });\n\n return (\n <GestureHandlerRootView>\n <GestureDetector gesture={pan}>\n <Text>v2 API test</Text>\n </GestureDetector>\n </GestureHandlerRootView>\n );\n }\n\n it(\"throws error when oldState doesn't correspond to previous event's state\", () => {\n const panHandlers = mockedEventHandlers();\n const panHandlersFromUser = mockedEventHandlersFromUser();\n render(<SingleHandler handlers={panHandlers} handlersFromUser={panHandlersFromUser} />);\n\n expect(() => {\n fireGestureHandler<PanGesture>(getByGestureTestId(\"pan\"), [\n { oldState: State.UNDETERMINED, state: State.BEGAN, x: 0, y: 10 },\n { oldState: State.UNDETERMINED, state: State.ACTIVE, x: 1, y: 11 },\n ]);\n }).toThrow(\n \"when state changes, oldState should be the same as previous event' state\",\n );\n });\n\n it.each([[State.END], [State.FAILED], [State.CANCELLED]])(\n \"correctly handles events ending with state %s\",\n (lastState) => {\n const panHandlers = mockedEventHandlers();\n const panHandlersFromUser = mockedEventHandlersFromUser();\n render(<SingleHandler handlers={panHandlers} handlersFromUser={panHandlersFromUser} />);\n fireGestureHandler<PanGesture>(getByGestureTestId(\"pan\"), [\n { state: State.BEGAN },\n { state: State.ACTIVE },\n { state: lastState },\n ]);\n\n expect(panHandlersFromUser.begin).toBeCalledTimes(1);\n expect(panHandlersFromUser.active).toBeCalledTimes(0);\n expect(panHandlersFromUser.end).toBeCalledTimes(1);\n\n if (lastState === State.END)\n expect(panHandlers.end).toBeCalled();\n\n else\n expect(panHandlers.finish).toBeCalledWith(expect.any(Object), false);\n },\n );\n});\n\ndescribe(\"Filling event list with defaults\", () => {\n interface RacingTapAndPanProps {\n handlers: ReturnType<typeof mockedEventHandlers>\n treatStartAsUpdate?: boolean\n }\n\n function RacingTapAndPan({\n handlers,\n treatStartAsUpdate,\n }: RacingTapAndPanProps) {\n const tap = Gesture.Tap()\n .onBegin(handlers.begin)\n .onEnd(handlers.end)\n .withTestId(\"tap\");\n\n const pan = usePanGestureProxy({\n onConfigurePanGesture: (_: PanGesture) => {\n _\n .onBegin(handlers.begin)\n .onFinalize(handlers.finish)\n .withTestId(\"pan\");\n },\n onGestureStart: treatStartAsUpdate ? handlers.active : handlers.start,\n onGestureUpdate: handlers.active,\n onGestureEnd: handlers.end,\n options: { enabled: true },\n });\n\n return (\n <GestureHandlerRootView>\n <GestureDetector gesture={Gesture.Exclusive(pan, tap)}>\n <Text>v2 API test</Text>\n </GestureDetector>\n </GestureHandlerRootView>\n );\n }\n\n it(\"fills oldState if not passed\", () => {\n const handlers = mockedEventHandlers();\n render(<RacingTapAndPan handlers={handlers} treatStartAsUpdate />);\n fireGestureHandler<PanGestureHandler>(getByGestureTestId(\"pan\"), [\n { state: State.BEGAN },\n { state: State.ACTIVE },\n { state: State.ACTIVE },\n { state: State.ACTIVE },\n { state: State.END },\n ]);\n\n expect(handlers.begin).toBeCalledWith(\n expect.objectContaining({ oldState: State.UNDETERMINED }),\n );\n expect(handlers.active).nthCalledWith(\n 1,\n expect.objectContaining({ oldState: State.BEGAN }),\n );\n expect(handlers.active).lastCalledWith(\n expect.not.objectContaining({ oldState: expect.anything() }),\n );\n expect(handlers.end).toBeCalledWith(\n expect.objectContaining({ oldState: State.ACTIVE }),\n true,\n );\n });\n\n it(\"fills missing ACTIVE states\", () => {\n const panHandlers = mockedEventHandlers();\n render(<RacingTapAndPan handlers={panHandlers} treatStartAsUpdate />);\n fireGestureHandler<PanGesture>(getByGestureTestId(\"pan\"), [\n { state: State.BEGAN, x: 0, y: 10 },\n { state: State.ACTIVE, x: 1, y: 11 },\n { x: 2, y: 12 },\n { x: 3, y: 13 },\n { state: State.END, x: 4, y: 14 },\n ]);\n\n expect(panHandlers.active).toBeCalledTimes(3);\n expect(panHandlers.active).toHaveBeenLastCalledWith(\n expect.objectContaining({ x: 3, y: 13 }),\n );\n });\n\n it(\"fills BEGIN and END events for discrete handlers\", () => {\n const handlers = mockedEventHandlers();\n render(<RacingTapAndPan handlers={handlers} treatStartAsUpdate />);\n fireGestureHandler<TapGesture>(getByGestureTestId(\"tap\"), [{ x: 5 }]);\n expect(handlers.begin).toBeCalledTimes(1);\n expect(handlers.end).toBeCalledTimes(1);\n });\n\n it(\"with FAILED event, fills BEGIN event for discrete handlers\", () => {\n const handlers = mockedEventHandlers();\n render(<RacingTapAndPan handlers={handlers} treatStartAsUpdate />);\n fireGestureHandler<TapGesture>(getByGestureTestId(\"tap\"), [\n { state: State.FAILED },\n ]);\n expect(handlers.begin).toBeCalledTimes(1);\n expect(handlers.end).toBeCalledTimes(1);\n expect(handlers.end).toBeCalledWith(expect.anything(), false);\n });\n\n it(\"uses event data from first event in filled BEGIN, ACTIVE events\", () => {\n const handlers = mockedEventHandlers();\n render(<RacingTapAndPan handlers={handlers} treatStartAsUpdate />);\n fireGestureHandler<PanGesture>(getByGestureTestId(\"pan\"), [{ x: 120 }]);\n expect(handlers.begin).toBeCalledWith(expect.objectContaining({ x: 120 }));\n expect(handlers.active).toHaveBeenNthCalledWith(\n 1,\n expect.objectContaining({ x: 120 }),\n );\n });\n\n it(\"uses event data from last event in filled END events\", () => {\n const handlers = mockedEventHandlers();\n render(<RacingTapAndPan handlers={handlers} treatStartAsUpdate />);\n fireGestureHandler<PanGesture>(getByGestureTestId(\"pan\"), [\n { x: 120, state: State.FAILED },\n ]);\n expect(handlers.begin).toBeCalledTimes(1);\n expect(handlers.active).toBeCalledTimes(1);\n expect(handlers.end).toBeCalledWith(\n expect.objectContaining({ x: 120 }),\n false,\n );\n });\n\n it(\"uses event data filled events\", () => {\n const handlers = mockedEventHandlers();\n render(<RacingTapAndPan handlers={handlers} treatStartAsUpdate />);\n fireGestureHandler<PanGesture>(getByGestureTestId(\"pan\"), [\n { x: 5, y: 15 },\n { x: 6, y: 16 },\n { x: 7, y: 17 },\n ]);\n expect(handlers.begin).toBeCalledWith(\n expect.objectContaining({ x: 5, y: 15 }),\n );\n expect(handlers.active).toBeCalledTimes(3);\n expect(handlers.end).toBeCalledWith(\n expect.objectContaining({ x: 7, y: 17 }),\n true,\n );\n });\n\n it(\"fills BEGIN and END events when they're not present, for discrete handlers\", () => {\n const handlers = mockedEventHandlers();\n render(<RacingTapAndPan handlers={handlers} treatStartAsUpdate />);\n fireGestureHandler<TapGesture>(getByGestureTestId(\"tap\"));\n expect(handlers.begin).toBeCalledTimes(1);\n expect(handlers.end).toHaveBeenCalledTimes(1);\n });\n\n it(\"fills BEGIN, ACTIVE and END events when they're not present, for continuous handlers\", () => {\n const handlers = mockedEventHandlers();\n render(<RacingTapAndPan handlers={handlers} treatStartAsUpdate />);\n fireGestureHandler<PanGesture>(getByGestureTestId(\"pan\"));\n expect(handlers.begin).toBeCalledTimes(1);\n expect(handlers.active).toBeCalledTimes(1);\n expect(handlers.end).toHaveBeenCalledTimes(1);\n });\n});\n"]}
@@ -1,2 +1,37 @@
1
- var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.usePropsErrorBoundary=usePropsErrorBoundary;var _react=_interopRequireDefault(require("react"));function usePropsErrorBoundary(props){_react.default.useEffect(function(){var defaultIndex=props.defaultIndex,viewCount=props.dataLength;if(typeof defaultIndex==="number"&&viewCount>0){if(defaultIndex<0||defaultIndex>=viewCount){throw new Error("DefaultIndex must be in the range of data length.");}}if(!props.mode||props.mode==="parallax"){if(!props.vertical&&!props.width){throw new Error("`width` must be specified for horizontal carousels.");}if(props.vertical&&!props.height){throw new Error("`height` must be specified for vertical carousels.");}}},[props]);}
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.usePropsErrorBoundary = usePropsErrorBoundary;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ function usePropsErrorBoundary(props) {
13
+ _react.default.useEffect(() => {
14
+ const {
15
+ defaultIndex,
16
+ dataLength: viewCount
17
+ } = props;
18
+
19
+ if (typeof defaultIndex === "number" && viewCount > 0) {
20
+ if (defaultIndex < 0 || defaultIndex >= viewCount) {
21
+ throw new Error("DefaultIndex must be in the range of data length.");
22
+ }
23
+ } // TODO
24
+
25
+
26
+ if (!props.mode || props.mode === "parallax") {
27
+ if (!props.vertical && !props.width) {
28
+ throw new Error("`width` must be specified for horizontal carousels.");
29
+ }
30
+
31
+ if (props.vertical && !props.height) {
32
+ throw new Error("`height` must be specified for vertical carousels.");
33
+ }
34
+ }
35
+ }, [props]);
36
+ }
2
37
  //# sourceMappingURL=usePropsErrorBoundary.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["usePropsErrorBoundary.ts"],"names":["usePropsErrorBoundary","props","React","useEffect","defaultIndex","viewCount","dataLength","Error","mode","vertical","width","height"],"mappings":"gMAAA,oDAIO,QAASA,CAAAA,qBAAT,CAA+BC,KAA/B,CAA+E,CACpFC,eAAMC,SAAN,CAAgB,UAAM,CACpB,GAAQC,CAAAA,YAAR,CAAgDH,KAAhD,CAAQG,YAAR,CAAkCC,SAAlC,CAAgDJ,KAAhD,CAAsBK,UAAtB,CAEA,GAAI,MAAOF,CAAAA,YAAP,GAAwB,QAAxB,EAAoCC,SAAS,CAAG,CAApD,CAAuD,CACrD,GAAID,YAAY,CAAG,CAAf,EAAoBA,YAAY,EAAIC,SAAxC,CAAmD,CACjD,KAAM,IAAIE,CAAAA,KAAJ,CACJ,mDADI,CAAN,CAGD,CACF,CAGD,GAAI,CAACN,KAAK,CAACO,IAAP,EAAeP,KAAK,CAACO,IAAN,GAAe,UAAlC,CAA8C,CAC5C,GAAI,CAACP,KAAK,CAACQ,QAAP,EAAmB,CAACR,KAAK,CAACS,KAA9B,CAAqC,CACnC,KAAM,IAAIH,CAAAA,KAAJ,CACJ,qDADI,CAAN,CAGD,CACD,GAAIN,KAAK,CAACQ,QAAN,EAAkB,CAACR,KAAK,CAACU,MAA7B,CAAqC,CACnC,KAAM,IAAIJ,CAAAA,KAAJ,CACJ,oDADI,CAAN,CAGD,CACF,CACF,CAxBD,CAwBG,CAACN,KAAD,CAxBH,EAyBD","sourcesContent":["import React from \"react\";\n\nimport type { TCarouselProps } from \"../types\";\n\nexport function usePropsErrorBoundary(props: TCarouselProps & { dataLength: number }) {\n React.useEffect(() => {\n const { defaultIndex, dataLength: viewCount } = props;\n\n if (typeof defaultIndex === \"number\" && viewCount > 0) {\n if (defaultIndex < 0 || defaultIndex >= viewCount) {\n throw new Error(\n \"DefaultIndex must be in the range of data length.\",\n );\n }\n }\n\n // TODO\n if (!props.mode || props.mode === \"parallax\") {\n if (!props.vertical && !props.width) {\n throw new Error(\n \"`width` must be specified for horizontal carousels.\",\n );\n }\n if (props.vertical && !props.height) {\n throw new Error(\n \"`height` must be specified for vertical carousels.\",\n );\n }\n }\n }, [props]);\n}\n"]}
1
+ {"version":3,"sources":["usePropsErrorBoundary.ts"],"names":["usePropsErrorBoundary","props","React","useEffect","defaultIndex","dataLength","viewCount","Error","mode","vertical","width","height"],"mappings":";;;;;;;AAAA;;;;AAIO,SAASA,qBAAT,CAA+BC,KAA/B,EAA+E;AACpFC,iBAAMC,SAAN,CAAgB,MAAM;AACpB,UAAM;AAAEC,MAAAA,YAAF;AAAgBC,MAAAA,UAAU,EAAEC;AAA5B,QAA0CL,KAAhD;;AAEA,QAAI,OAAOG,YAAP,KAAwB,QAAxB,IAAoCE,SAAS,GAAG,CAApD,EAAuD;AACrD,UAAIF,YAAY,GAAG,CAAf,IAAoBA,YAAY,IAAIE,SAAxC,EAAmD;AACjD,cAAM,IAAIC,KAAJ,CACJ,mDADI,CAAN;AAGD;AACF,KATmB,CAWpB;;;AACA,QAAI,CAACN,KAAK,CAACO,IAAP,IAAeP,KAAK,CAACO,IAAN,KAAe,UAAlC,EAA8C;AAC5C,UAAI,CAACP,KAAK,CAACQ,QAAP,IAAmB,CAACR,KAAK,CAACS,KAA9B,EAAqC;AACnC,cAAM,IAAIH,KAAJ,CACJ,qDADI,CAAN;AAGD;;AACD,UAAIN,KAAK,CAACQ,QAAN,IAAkB,CAACR,KAAK,CAACU,MAA7B,EAAqC;AACnC,cAAM,IAAIJ,KAAJ,CACJ,oDADI,CAAN;AAGD;AACF;AACF,GAxBD,EAwBG,CAACN,KAAD,CAxBH;AAyBD","sourcesContent":["import React from \"react\";\n\nimport type { TCarouselProps } from \"../types\";\n\nexport function usePropsErrorBoundary(props: TCarouselProps & { dataLength: number }) {\n React.useEffect(() => {\n const { defaultIndex, dataLength: viewCount } = props;\n\n if (typeof defaultIndex === \"number\" && viewCount > 0) {\n if (defaultIndex < 0 || defaultIndex >= viewCount) {\n throw new Error(\n \"DefaultIndex must be in the range of data length.\",\n );\n }\n }\n\n // TODO\n if (!props.mode || props.mode === \"parallax\") {\n if (!props.vertical && !props.width) {\n throw new Error(\n \"`width` must be specified for horizontal carousels.\",\n );\n }\n if (props.vertical && !props.height) {\n throw new Error(\n \"`height` must be specified for vertical carousels.\",\n );\n }\n }\n }, [props]);\n}\n"]}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useUpdateGestureConfig = void 0;
7
+
8
+ var _react = require("react");
9
+
10
+ const useUpdateGestureConfig = (gesture, config) => {
11
+ const {
12
+ enabled
13
+ } = config;
14
+ (0, _react.useEffect)(() => {
15
+ if (typeof enabled !== "undefined") gesture.enabled(enabled);
16
+ }, [enabled, gesture]);
17
+ };
18
+
19
+ exports.useUpdateGestureConfig = useUpdateGestureConfig;
20
+ //# sourceMappingURL=useUpdateGestureConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["useUpdateGestureConfig.ts"],"names":["useUpdateGestureConfig","gesture","config","enabled"],"mappings":";;;;;;;AAAA;;AAOO,MAAMA,sBAAsB,GAAG,CAACC,OAAD,EAAsBC,MAAtB,KAAgD;AACpF,QAAM;AAAEC,IAAAA;AAAF,MAAcD,MAApB;AAEA,wBAAU,MAAM;AACd,QAAI,OAAOC,OAAP,KAAmB,WAAvB,EACEF,OAAO,CAACE,OAAR,CAAgBA,OAAhB;AACH,GAHD,EAGG,CAACA,OAAD,EAAUF,OAAV,CAHH;AAID,CAPM","sourcesContent":["import { useEffect } from \"react\";\nimport type { PanGesture } from \"react-native-gesture-handler\";\n\nexport interface GestureConfig {\n enabled?: boolean\n}\n\nexport const useUpdateGestureConfig = (gesture: PanGesture, config: GestureConfig) => {\n const { enabled } = config;\n\n useEffect(() => {\n if (typeof enabled !== \"undefined\")\n gesture.enabled(enabled);\n }, [enabled, gesture]);\n};\n"]}
@@ -1,2 +1,72 @@
1
- Object.defineProperty(exports,"__esModule",{value:true});exports.useVisibleRanges=useVisibleRanges;var _reactNativeReanimated=require("react-native-reanimated");var _worklet_1686155145629_init_data={code:"function anonymous() {\n const {\n windowSize,\n translation,\n viewSize,\n total\n } = this._closure;\n const positiveCount = Math.round(windowSize / 2);\n const negativeCount = windowSize - positiveCount;\n let curIndex = Math.round(-translation.value / viewSize);\n curIndex = curIndex < 0 ? curIndex % total + total : curIndex;\n const negativeRange = [(curIndex - negativeCount + total) % total, (curIndex - 1 + total) % total];\n const positiveRange = [(curIndex + total) % total, (curIndex + positiveCount + total) % total];\n if (negativeRange[0] < total && negativeRange[0] > negativeRange[1]) {\n negativeRange[1] = total - 1;\n positiveRange[0] = 0;\n }\n if (positiveRange[0] > positiveRange[1]) {\n negativeRange[1] = total - 1;\n positiveRange[0] = 0;\n }\n return {\n negativeRange: negativeRange,\n positiveRange: positiveRange\n };\n}",location:"/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/hooks/useVisibleRanges.tsx",sourceMap:"{\"version\":3,\"names\":[\"anonymous\",\"windowSize\",\"translation\",\"viewSize\",\"total\",\"_closure\",\"positiveCount\",\"Math\",\"round\",\"negativeCount\",\"curIndex\",\"value\",\"negativeRange\",\"positiveRange\"],\"sources\":[\"/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/hooks/useVisibleRanges.tsx\"],\"mappings\":\"AAuBiC,SAAAA,SAAMA,CAAA;EAAA;IAAAC,UAAA;IAAAC,WAAA;IAAAC,QAAA;IAAAC;EAAA,SAAAC,QAAA;EACnC,MAAMC,aAAa,GAAGC,IAAI,CAACC,KAAK,CAACP,UAAU,GAAG,CAAC,CAAC;EAChD,MAAMQ,aAAa,GAAGR,UAAU,GAAGK,aAAa;EAChD,IAAII,QAAQ,GAAGH,IAAI,CAACC,KAAK,CAAC,CAACN,WAAW,CAACS,KAAK,GAAGR,QAAQ,CAAC;EACxDO,QAAQ,GAAGA,QAAQ,GAAG,CAAC,GAAIA,QAAQ,GAAGN,KAAK,GAAIA,KAAK,GAAGM,QAAQ;EAC/D,MAAME,aAAa,GAAG,CACpB,CAACF,QAAQ,GAAGD,aAAa,GAAGL,KAAK,IAAIA,KAAK,EAC1C,CAACM,QAAQ,GAAG,CAAC,GAAGN,KAAK,IAAIA,KAAK,CAC/B;EACD,MAAMS,aAAa,GAAG,CACpB,CAACH,QAAQ,GAAGN,KAAK,IAAIA,KAAK,EAC1B,CAACM,QAAQ,GAAGJ,aAAa,GAAGF,KAAK,IAAIA,KAAK,CAC3C;EACD,IAAIQ,aAAa,CAAC,CAAC,CAAC,GAAGR,KAAK,IAAIQ,aAAa,CAAC,CAAC,CAAC,GAAGA,aAAa,CAAC,CAAC,CAAC,EAAE;IACnEA,aAAa,CAAC,CAAC,CAAC,GAAGR,KAAK,GAAG,CAAC;IAC5BS,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC;EACtB;EACA,IAAIA,aAAa,CAAC,CAAC,CAAC,GAAGA,aAAa,CAAC,CAAC,CAAC,EAAE;IACvCD,aAAa,CAAC,CAAC,CAAC,GAAGR,KAAK,GAAG,CAAC;IAC5BS,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC;EACtB;EACA,OAAO;IAAED,aAAa,EAAbA,aAAa;IAAEC,aAAA,EAAAA;EAAc,CAAC;AACzC\"}"};function useVisibleRanges(options){var _options$total=options.total,total=_options$total===void 0?0:_options$total,viewSize=options.viewSize,translation=options.translation,_options$windowSize=options.windowSize,_windowSize=_options$windowSize===void 0?0:_options$windowSize;var windowSize=total<=_windowSize?total:_windowSize;var ranges=(0,_reactNativeReanimated.useDerivedValue)(function(){var _e=[new global.Error(),-5,-27];var _f=function _f(){var positiveCount=Math.round(windowSize/2);var negativeCount=windowSize-positiveCount;var curIndex=Math.round(-translation.value/viewSize);curIndex=curIndex<0?curIndex%total+total:curIndex;var negativeRange=[(curIndex-negativeCount+total)%total,(curIndex-1+total)%total];var positiveRange=[(curIndex+total)%total,(curIndex+positiveCount+total)%total];if(negativeRange[0]<total&&negativeRange[0]>negativeRange[1]){negativeRange[1]=total-1;positiveRange[0]=0;}if(positiveRange[0]>positiveRange[1]){negativeRange[1]=total-1;positiveRange[0]=0;}return{negativeRange:negativeRange,positiveRange:positiveRange};};_f._closure={windowSize:windowSize,translation:translation,viewSize:viewSize,total:total};_f.__initData=_worklet_1686155145629_init_data;_f.__workletHash=1686155145629;_f.__stackDetails=_e;_f.__version="3.3.0";return _f;}(),[total,windowSize,translation]);return ranges;}
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useVisibleRanges = useVisibleRanges;
7
+
8
+ var _react = require("react");
9
+
10
+ var _reactNativeReanimated = require("react-native-reanimated");
11
+
12
+ function useVisibleRanges(options) {
13
+ const {
14
+ total = 0,
15
+ viewSize,
16
+ translation,
17
+ windowSize: _windowSize,
18
+ loop
19
+ } = options;
20
+ const windowSize = _windowSize !== null && _windowSize !== void 0 ? _windowSize : total;
21
+ const cachedRanges = (0, _react.useRef)(null);
22
+ const ranges = (0, _reactNativeReanimated.useDerivedValue)(() => {
23
+ var _cachedRanges$current, _cachedRanges$current2, _cachedRanges$current3, _cachedRanges$current4;
24
+
25
+ const positiveCount = Math.round(windowSize / 2);
26
+ const negativeCount = windowSize - positiveCount;
27
+ let currentIndex = Math.round(-translation.value / viewSize);
28
+ currentIndex = currentIndex < 0 ? currentIndex % total + total : currentIndex;
29
+ let newRanges;
30
+
31
+ if (!loop) {
32
+ // Adjusting negative range if the carousel is not loopable.
33
+ // So, It will be only displayed the positive items.
34
+ newRanges = {
35
+ negativeRange: [0 + currentIndex - (windowSize - 1), 0 + currentIndex],
36
+ positiveRange: [0 + currentIndex, currentIndex + (windowSize - 1)]
37
+ };
38
+ } else {
39
+ const negativeRange = [(currentIndex - negativeCount + total) % total, (currentIndex - 1 + total) % total];
40
+ const positiveRange = [(currentIndex + total) % total, (currentIndex + positiveCount + total) % total];
41
+
42
+ if (negativeRange[0] < total && negativeRange[0] > negativeRange[1]) {
43
+ negativeRange[1] = total - 1;
44
+ positiveRange[0] = 0;
45
+ }
46
+
47
+ if (positiveRange[0] > positiveRange[1]) {
48
+ negativeRange[1] = total - 1;
49
+ positiveRange[0] = 0;
50
+ } // console.log({ negativeRange, positiveRange ,total,windowSize,a:total <= _windowSize})
51
+
52
+
53
+ newRanges = {
54
+ negativeRange,
55
+ positiveRange
56
+ };
57
+ }
58
+
59
+ if (isArraysEqual((_cachedRanges$current = (_cachedRanges$current2 = cachedRanges.current) === null || _cachedRanges$current2 === void 0 ? void 0 : _cachedRanges$current2.negativeRange) !== null && _cachedRanges$current !== void 0 ? _cachedRanges$current : [], newRanges.negativeRange) && isArraysEqual((_cachedRanges$current3 = (_cachedRanges$current4 = cachedRanges.current) === null || _cachedRanges$current4 === void 0 ? void 0 : _cachedRanges$current4.positiveRange) !== null && _cachedRanges$current3 !== void 0 ? _cachedRanges$current3 : [], newRanges.positiveRange)) return cachedRanges.current;
60
+ cachedRanges.current = newRanges;
61
+ return cachedRanges.current;
62
+ }, [loop, total, windowSize, translation]);
63
+ return ranges;
64
+ }
65
+
66
+ function isArraysEqual(a, b) {
67
+ "worklet";
68
+
69
+ if (a.length !== b.length) return false;
70
+ return a.every((value, index) => value === b[index]);
71
+ }
2
72
  //# sourceMappingURL=useVisibleRanges.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["useVisibleRanges.tsx"],"names":["useVisibleRanges","options","total","viewSize","translation","windowSize","_windowSize","ranges","positiveCount","Math","round","negativeCount","curIndex","value","negativeRange","positiveRange"],"mappings":"mGACA,8D,m5EAOO,QAASA,CAAAA,gBAAT,CAA0BC,OAA1B,CAKY,CACjB,mBAKIA,OALJ,CACEC,KADF,CACEA,KADF,yBACU,CADV,gBAEEC,QAFF,CAKIF,OALJ,CAEEE,QAFF,CAGEC,WAHF,CAKIH,OALJ,CAGEG,WAHF,qBAKIH,OALJ,CAIEI,UAJF,CAIcC,WAJd,8BAI4B,CAJ5B,qBAOA,GAAMD,CAAAA,UAAU,CAAGH,KAAK,EAAII,WAAT,CAAuBJ,KAAvB,CAA+BI,WAAlD,CAEA,GAAMC,CAAAA,MAAM,CAAG,6GAAsB,CACnC,GAAMC,CAAAA,aAAa,CAAGC,IAAI,CAACC,KAAL,CAAWL,UAAU,CAAG,CAAxB,CAAtB,CACA,GAAMM,CAAAA,aAAa,CAAGN,UAAU,CAAGG,aAAnC,CACA,GAAII,CAAAA,QAAQ,CAAGH,IAAI,CAACC,KAAL,CAAW,CAACN,WAAW,CAACS,KAAb,CAAqBV,QAAhC,CAAf,CACAS,QAAQ,CAAGA,QAAQ,CAAG,CAAX,CAAgBA,QAAQ,CAAGV,KAAZ,CAAqBA,KAApC,CAA4CU,QAAvD,CACA,GAAME,CAAAA,aAAa,CAAG,CACpB,CAACF,QAAQ,CAAGD,aAAX,CAA2BT,KAA5B,EAAqCA,KADjB,CAEpB,CAACU,QAAQ,CAAG,CAAX,CAAeV,KAAhB,EAAyBA,KAFL,CAAtB,CAIA,GAAMa,CAAAA,aAAa,CAAG,CACpB,CAACH,QAAQ,CAAGV,KAAZ,EAAqBA,KADD,CAEpB,CAACU,QAAQ,CAAGJ,aAAX,CAA2BN,KAA5B,EAAqCA,KAFjB,CAAtB,CAIA,GAAIY,aAAa,CAAC,CAAD,CAAb,CAAmBZ,KAAnB,EAA4BY,aAAa,CAAC,CAAD,CAAb,CAAmBA,aAAa,CAAC,CAAD,CAAhE,CAAqE,CACnEA,aAAa,CAAC,CAAD,CAAb,CAAmBZ,KAAK,CAAG,CAA3B,CACAa,aAAa,CAAC,CAAD,CAAb,CAAmB,CAAnB,CACD,CACD,GAAIA,aAAa,CAAC,CAAD,CAAb,CAAmBA,aAAa,CAAC,CAAD,CAApC,CAAyC,CACvCD,aAAa,CAAC,CAAD,CAAb,CAAmBZ,KAAK,CAAG,CAA3B,CACAa,aAAa,CAAC,CAAD,CAAb,CAAmB,CAAnB,CACD,CACD,MAAO,CAAED,aAAa,CAAbA,aAAF,CAAiBC,aAAa,CAAbA,aAAjB,CAAP,CACD,CAtBc,yBArBOV,UAqBP,aApBYD,WAoBZ,UApBgCD,QAoBhC,OAXMD,KAWN,wIAsBZ,CAACA,KAAD,CAAQG,UAAR,CAAoBD,WAApB,CAtBY,CAAf,CAwBA,MAAOG,CAAAA,MAAP,CACD","sourcesContent":["import type Animated from \"react-native-reanimated\";\nimport { useDerivedValue } from \"react-native-reanimated\";\n\nexport type IVisibleRanges = Animated.SharedValue<{\n negativeRange: number[]\n positiveRange: number[]\n}>;\n\nexport function useVisibleRanges(options: {\n total: number\n viewSize: number\n windowSize?: number\n translation: Animated.SharedValue<number>\n}): IVisibleRanges {\n const {\n total = 0,\n viewSize,\n translation,\n windowSize: _windowSize = 0,\n } = options;\n\n const windowSize = total <= _windowSize ? total : _windowSize;\n\n const ranges = useDerivedValue(() => {\n const positiveCount = Math.round(windowSize / 2);\n const negativeCount = windowSize - positiveCount;\n let curIndex = Math.round(-translation.value / viewSize);\n curIndex = curIndex < 0 ? (curIndex % total) + total : curIndex;\n const negativeRange = [\n (curIndex - negativeCount + total) % total,\n (curIndex - 1 + total) % total,\n ];\n const positiveRange = [\n (curIndex + total) % total,\n (curIndex + positiveCount + total) % total,\n ];\n if (negativeRange[0] < total && negativeRange[0] > negativeRange[1]) {\n negativeRange[1] = total - 1;\n positiveRange[0] = 0;\n }\n if (positiveRange[0] > positiveRange[1]) {\n negativeRange[1] = total - 1;\n positiveRange[0] = 0;\n }\n return { negativeRange, positiveRange };\n }, [total, windowSize, translation]);\n\n return ranges;\n}\n"]}
1
+ {"version":3,"sources":["useVisibleRanges.tsx"],"names":["useVisibleRanges","options","total","viewSize","translation","windowSize","_windowSize","loop","cachedRanges","ranges","positiveCount","Math","round","negativeCount","currentIndex","value","newRanges","negativeRange","positiveRange","isArraysEqual","current","a","b","length","every","index"],"mappings":";;;;;;;AAAA;;AAEA;;AAWO,SAASA,gBAAT,CAA0BC,OAA1B,EAMY;AACjB,QAAM;AACJC,IAAAA,KAAK,GAAG,CADJ;AAEJC,IAAAA,QAFI;AAGJC,IAAAA,WAHI;AAIJC,IAAAA,UAAU,EAAEC,WAJR;AAKJC,IAAAA;AALI,MAMFN,OANJ;AAQA,QAAMI,UAAU,GAAGC,WAAH,aAAGA,WAAH,cAAGA,WAAH,GAAkBJ,KAAlC;AACA,QAAMM,YAAY,GAAG,mBAAsB,IAAtB,CAArB;AAEA,QAAMC,MAAM,GAAG,4CAAgB,MAAM;AAAA;;AACnC,UAAMC,aAAa,GAAGC,IAAI,CAACC,KAAL,CAAWP,UAAU,GAAG,CAAxB,CAAtB;AACA,UAAMQ,aAAa,GAAGR,UAAU,GAAGK,aAAnC;AAEA,QAAII,YAAY,GAAGH,IAAI,CAACC,KAAL,CAAW,CAACR,WAAW,CAACW,KAAb,GAAqBZ,QAAhC,CAAnB;AACAW,IAAAA,YAAY,GAAGA,YAAY,GAAG,CAAf,GAAoBA,YAAY,GAAGZ,KAAhB,GAAyBA,KAA5C,GAAoDY,YAAnE;AAEA,QAAIE,SAAJ;;AAEA,QAAI,CAACT,IAAL,EAAW;AACT;AACA;AACAS,MAAAA,SAAS,GAAG;AACVC,QAAAA,aAAa,EAAE,CAAC,IAAIH,YAAJ,IAAoBT,UAAU,GAAG,CAAjC,CAAD,EAAsC,IAAIS,YAA1C,CADL;AAEVI,QAAAA,aAAa,EAAE,CAAC,IAAIJ,YAAL,EAAmBA,YAAY,IAAIT,UAAU,GAAG,CAAjB,CAA/B;AAFL,OAAZ;AAID,KAPD,MAQK;AACH,YAAMY,aAAoB,GAAG,CAC3B,CAACH,YAAY,GAAGD,aAAf,GAA+BX,KAAhC,IAAyCA,KADd,EAE3B,CAACY,YAAY,GAAG,CAAf,GAAmBZ,KAApB,IAA6BA,KAFF,CAA7B;AAKA,YAAMgB,aAAoB,GAAG,CAC3B,CAACJ,YAAY,GAAGZ,KAAhB,IAAyBA,KADE,EAE3B,CAACY,YAAY,GAAGJ,aAAf,GAA+BR,KAAhC,IAAyCA,KAFd,CAA7B;;AAKA,UAAIe,aAAa,CAAC,CAAD,CAAb,GAAmBf,KAAnB,IAA4Be,aAAa,CAAC,CAAD,CAAb,GAAmBA,aAAa,CAAC,CAAD,CAAhE,EAAqE;AACnEA,QAAAA,aAAa,CAAC,CAAD,CAAb,GAAmBf,KAAK,GAAG,CAA3B;AACAgB,QAAAA,aAAa,CAAC,CAAD,CAAb,GAAmB,CAAnB;AACD;;AACD,UAAIA,aAAa,CAAC,CAAD,CAAb,GAAmBA,aAAa,CAAC,CAAD,CAApC,EAAyC;AACvCD,QAAAA,aAAa,CAAC,CAAD,CAAb,GAAmBf,KAAK,GAAG,CAA3B;AACAgB,QAAAA,aAAa,CAAC,CAAD,CAAb,GAAmB,CAAnB;AACD,OAlBE,CAoBH;;;AACAF,MAAAA,SAAS,GAAG;AAAEC,QAAAA,aAAF;AAAiBC,QAAAA;AAAjB,OAAZ;AACD;;AAED,QACEC,aAAa,oDACXX,YAAY,CAACY,OADF,2DACX,uBAAsBH,aADX,yEAC4B,EAD5B,EAEXD,SAAS,CAACC,aAFC,CAAb,IAIGE,aAAa,qDACdX,YAAY,CAACY,OADC,2DACd,uBAAsBF,aADR,2EACyB,EADzB,EAEdF,SAAS,CAACE,aAFI,CALlB,EAUE,OAAOV,YAAY,CAACY,OAApB;AAEFZ,IAAAA,YAAY,CAACY,OAAb,GAAuBJ,SAAvB;AACA,WAAOR,YAAY,CAACY,OAApB;AACD,GAvDc,EAuDZ,CAACb,IAAD,EAAOL,KAAP,EAAcG,UAAd,EAA0BD,WAA1B,CAvDY,CAAf;AAyDA,SAAOK,MAAP;AACD;;AAED,SAASU,aAAT,CAAuBE,CAAvB,EAAoCC,CAApC,EAA0D;AACxD;;AACA,MAAID,CAAC,CAACE,MAAF,KAAaD,CAAC,CAACC,MAAnB,EAA2B,OAAO,KAAP;AAE3B,SAAOF,CAAC,CAACG,KAAF,CAAQ,CAACT,KAAD,EAAQU,KAAR,KAAkBV,KAAK,KAAKO,CAAC,CAACG,KAAD,CAArC,CAAP;AACD","sourcesContent":["import { useRef } from \"react\";\nimport type Animated from \"react-native-reanimated\";\nimport { useDerivedValue } from \"react-native-reanimated\";\n\ntype Range = [number, number];\n\nexport interface VisibleRanges {\n negativeRange: Range\n positiveRange: Range\n}\n\nexport type IVisibleRanges = Animated.SharedValue<VisibleRanges>;\n\nexport function useVisibleRanges(options: {\n total: number\n viewSize: number\n windowSize?: number\n translation: Animated.SharedValue<number>\n loop?: boolean\n}): IVisibleRanges {\n const {\n total = 0,\n viewSize,\n translation,\n windowSize: _windowSize,\n loop,\n } = options;\n\n const windowSize = _windowSize ?? total;\n const cachedRanges = useRef<VisibleRanges>(null!);\n\n const ranges = useDerivedValue(() => {\n const positiveCount = Math.round(windowSize / 2);\n const negativeCount = windowSize - positiveCount;\n\n let currentIndex = Math.round(-translation.value / viewSize);\n currentIndex = currentIndex < 0 ? (currentIndex % total) + total : currentIndex;\n\n let newRanges: VisibleRanges;\n\n if (!loop) {\n // Adjusting negative range if the carousel is not loopable.\n // So, It will be only displayed the positive items.\n newRanges = {\n negativeRange: [0 + currentIndex - (windowSize - 1), 0 + currentIndex],\n positiveRange: [0 + currentIndex, currentIndex + (windowSize - 1)],\n };\n }\n else {\n const negativeRange: Range = [\n (currentIndex - negativeCount + total) % total,\n (currentIndex - 1 + total) % total,\n ];\n\n const positiveRange: Range = [\n (currentIndex + total) % total,\n (currentIndex + positiveCount + total) % total,\n ];\n\n if (negativeRange[0] < total && negativeRange[0] > negativeRange[1]) {\n negativeRange[1] = total - 1;\n positiveRange[0] = 0;\n }\n if (positiveRange[0] > positiveRange[1]) {\n negativeRange[1] = total - 1;\n positiveRange[0] = 0;\n }\n\n // console.log({ negativeRange, positiveRange ,total,windowSize,a:total <= _windowSize})\n newRanges = { negativeRange, positiveRange };\n }\n\n if (\n isArraysEqual(\n cachedRanges.current?.negativeRange ?? [],\n newRanges.negativeRange,\n )\n && isArraysEqual(\n cachedRanges.current?.positiveRange ?? [],\n newRanges.positiveRange,\n )\n )\n return cachedRanges.current;\n\n cachedRanges.current = newRanges;\n return cachedRanges.current;\n }, [loop, total, windowSize, translation]);\n\n return ranges;\n}\n\nfunction isArraysEqual(a: number[], b: number[]): boolean {\n \"worklet\";\n if (a.length !== b.length) return false;\n\n return a.every((value, index) => value === b[index]);\n}\n"]}