react-native-reanimated-carousel 4.0.0 → 4.0.2

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 (120) hide show
  1. package/README.md +2 -40
  2. package/lib/commonjs/components/Carousel.js +1 -42
  3. package/lib/commonjs/components/Carousel.js.map +1 -1
  4. package/lib/commonjs/components/Carousel.test.js +2 -678
  5. package/lib/commonjs/components/Carousel.test.js.map +1 -1
  6. package/lib/commonjs/components/CarouselLayout.js +1 -211
  7. package/lib/commonjs/components/CarouselLayout.js.map +1 -1
  8. package/lib/commonjs/components/ItemLayout.js +1 -98
  9. package/lib/commonjs/components/ItemLayout.js.map +1 -1
  10. package/lib/commonjs/components/ItemRenderer.js +1 -79
  11. package/lib/commonjs/components/ItemRenderer.js.map +1 -1
  12. package/lib/commonjs/components/LazyView.js +1 -21
  13. package/lib/commonjs/components/LazyView.js.map +1 -1
  14. package/lib/commonjs/components/Pagination/Basic/PaginationItem.js +1 -83
  15. package/lib/commonjs/components/Pagination/Basic/PaginationItem.js.map +1 -1
  16. package/lib/commonjs/components/Pagination/Basic/index.js +1 -53
  17. package/lib/commonjs/components/Pagination/Basic/index.js.map +1 -1
  18. package/lib/commonjs/components/Pagination/Custom/PaginationItem.js +1 -88
  19. package/lib/commonjs/components/Pagination/Custom/PaginationItem.js.map +1 -1
  20. package/lib/commonjs/components/Pagination/Custom/index.js +1 -61
  21. package/lib/commonjs/components/Pagination/Custom/index.js.map +1 -1
  22. package/lib/commonjs/components/Pagination/index.js +1 -16
  23. package/lib/commonjs/components/Pagination/index.js.map +1 -1
  24. package/lib/commonjs/components/ScrollViewGesture.js +1 -362
  25. package/lib/commonjs/components/ScrollViewGesture.js.map +1 -1
  26. package/lib/commonjs/components/rnr-demo.test.js +1 -44
  27. package/lib/commonjs/components/rnr-demo.test.js.map +1 -1
  28. package/lib/commonjs/constants/index.js +1 -21
  29. package/lib/commonjs/constants/index.js.map +1 -1
  30. package/lib/commonjs/hooks/useAutoPlay.js +1 -56
  31. package/lib/commonjs/hooks/useAutoPlay.js.map +1 -1
  32. package/lib/commonjs/hooks/useAutoPlay.test.js +1 -154
  33. package/lib/commonjs/hooks/useAutoPlay.test.js.map +1 -1
  34. package/lib/commonjs/hooks/useCarouselController.js +1 -301
  35. package/lib/commonjs/hooks/useCarouselController.js.map +1 -1
  36. package/lib/commonjs/hooks/useCarouselController.test.js +1 -456
  37. package/lib/commonjs/hooks/useCarouselController.test.js.map +1 -1
  38. package/lib/commonjs/hooks/useCheckMounted.js +1 -23
  39. package/lib/commonjs/hooks/useCheckMounted.js.map +1 -1
  40. package/lib/commonjs/hooks/useCheckMounted.test.js +1 -44
  41. package/lib/commonjs/hooks/useCheckMounted.test.js.map +1 -1
  42. package/lib/commonjs/hooks/useCommonVariables.js +1 -102
  43. package/lib/commonjs/hooks/useCommonVariables.js.map +1 -1
  44. package/lib/commonjs/hooks/useCommonVariables.test.js +1 -37
  45. package/lib/commonjs/hooks/useCommonVariables.test.js.map +1 -1
  46. package/lib/commonjs/hooks/useInitProps.js +1 -78
  47. package/lib/commonjs/hooks/useInitProps.js.map +1 -1
  48. package/lib/commonjs/hooks/useInitProps.test.js +1 -126
  49. package/lib/commonjs/hooks/useInitProps.test.js.map +1 -1
  50. package/lib/commonjs/hooks/useLayoutConfig.js +1 -39
  51. package/lib/commonjs/hooks/useLayoutConfig.js.map +1 -1
  52. package/lib/commonjs/hooks/useLayoutConfig.test.js +1 -241
  53. package/lib/commonjs/hooks/useLayoutConfig.test.js.map +1 -1
  54. package/lib/commonjs/hooks/useOffsetX.js +1 -51
  55. package/lib/commonjs/hooks/useOffsetX.js.map +1 -1
  56. package/lib/commonjs/hooks/useOffsetX.test.js +2 -40
  57. package/lib/commonjs/hooks/useOffsetX.test.js.map +1 -1
  58. package/lib/commonjs/hooks/useOnProgressChange.js +1 -46
  59. package/lib/commonjs/hooks/useOnProgressChange.js.map +1 -1
  60. package/lib/commonjs/hooks/useOnProgressChange.test.js +1 -162
  61. package/lib/commonjs/hooks/useOnProgressChange.test.js.map +1 -1
  62. package/lib/commonjs/hooks/usePanGestureProxy.js +1 -117
  63. package/lib/commonjs/hooks/usePanGestureProxy.js.map +1 -1
  64. package/lib/commonjs/hooks/usePanGestureProxy.test.js +1 -419
  65. package/lib/commonjs/hooks/usePanGestureProxy.test.js.map +1 -1
  66. package/lib/commonjs/hooks/usePropsErrorBoundary.js +1 -36
  67. package/lib/commonjs/hooks/usePropsErrorBoundary.js.map +1 -1
  68. package/lib/commonjs/hooks/useUpdateGestureConfig.js +1 -19
  69. package/lib/commonjs/hooks/useUpdateGestureConfig.js.map +1 -1
  70. package/lib/commonjs/hooks/useUpdateGestureConfig.test.js +1 -91
  71. package/lib/commonjs/hooks/useUpdateGestureConfig.test.js.map +1 -1
  72. package/lib/commonjs/hooks/useVisibleRanges.js +1 -71
  73. package/lib/commonjs/hooks/useVisibleRanges.js.map +1 -1
  74. package/lib/commonjs/hooks/useVisibleRanges.test.js +7 -101
  75. package/lib/commonjs/hooks/useVisibleRanges.test.js.map +1 -1
  76. package/lib/commonjs/index.js +1 -21
  77. package/lib/commonjs/index.js.map +1 -1
  78. package/lib/commonjs/layouts/index.js +1 -20
  79. package/lib/commonjs/layouts/index.js.map +1 -1
  80. package/lib/commonjs/layouts/normal.js +1 -27
  81. package/lib/commonjs/layouts/normal.js.map +1 -1
  82. package/lib/commonjs/layouts/parallax.js +1 -38
  83. package/lib/commonjs/layouts/parallax.js.map +1 -1
  84. package/lib/commonjs/layouts/stack.js +1 -213
  85. package/lib/commonjs/layouts/stack.js.map +1 -1
  86. package/lib/commonjs/layouts/stack.test.js +3 -22
  87. package/lib/commonjs/layouts/stack.test.js.map +1 -1
  88. package/lib/commonjs/store/index.js +1 -67
  89. package/lib/commonjs/store/index.js.map +1 -1
  90. package/lib/commonjs/types.js +1 -5
  91. package/lib/commonjs/utils/compute-offset-if-data-changed.js +1 -51
  92. package/lib/commonjs/utils/compute-offset-if-data-changed.js.map +1 -1
  93. package/lib/commonjs/utils/compute-offset-if-data-changed.test.js +1 -29
  94. package/lib/commonjs/utils/compute-offset-if-data-changed.test.js.map +1 -1
  95. package/lib/commonjs/utils/compute-offset-if-size-changed.js +1 -17
  96. package/lib/commonjs/utils/compute-offset-if-size-changed.js.map +1 -1
  97. package/lib/commonjs/utils/compute-offset-if-size-changed.test.js +1 -71
  98. package/lib/commonjs/utils/compute-offset-if-size-changed.test.js.map +1 -1
  99. package/lib/commonjs/utils/computed-with-auto-fill-data.js +1 -123
  100. package/lib/commonjs/utils/computed-with-auto-fill-data.js.map +1 -1
  101. package/lib/commonjs/utils/computed-with-auto-fill-data.test.js +1 -179
  102. package/lib/commonjs/utils/computed-with-auto-fill-data.test.js.map +1 -1
  103. package/lib/commonjs/utils/deal-with-animation.js +1 -20
  104. package/lib/commonjs/utils/deal-with-animation.js.map +1 -1
  105. package/lib/commonjs/utils/deal-with-animation.test.js +1 -75
  106. package/lib/commonjs/utils/deal-with-animation.test.js.map +1 -1
  107. package/lib/commonjs/utils/handleroffset-direction.js +1 -15
  108. package/lib/commonjs/utils/handleroffset-direction.js.map +1 -1
  109. package/lib/commonjs/utils/handleroffset-direction.test.js +1 -45
  110. package/lib/commonjs/utils/handleroffset-direction.test.js.map +1 -1
  111. package/lib/commonjs/utils/index.test.js +1 -73
  112. package/lib/commonjs/utils/index.test.js.map +1 -1
  113. package/lib/commonjs/utils/log.js +1 -21
  114. package/lib/commonjs/utils/log.js.map +1 -1
  115. package/lib/commonjs/utils/log.test.js +1 -57
  116. package/lib/commonjs/utils/log.test.js.map +1 -1
  117. package/lib/module/hooks/useOnProgressChange.js +1 -1
  118. package/lib/module/hooks/useOnProgressChange.js.map +1 -1
  119. package/package.json +7 -2
  120. package/src/hooks/useOnProgressChange.ts +1 -1
@@ -1,685 +1,9 @@
1
- "use strict";
2
-
3
- var _react = _interopRequireDefault(require("react"));
4
-
5
- var _reactNativeGestureHandler = require("react-native-gesture-handler");
6
-
7
- var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
8
-
9
- var _reactNative = require("@testing-library/react-native");
10
-
11
- var _jestUtils = require("react-native-gesture-handler/jest-utils");
12
-
13
- var _Carousel = _interopRequireDefault(require("./Carousel"));
14
-
15
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
16
-
17
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
18
-
19
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
-
21
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
22
-
23
- jest.setTimeout(1000 * 12);
24
- const mockPan = jest.fn();
25
-
26
- const realPan = _reactNativeGestureHandler.Gesture.Pan();
27
-
28
- const gestureTestId = "rnrc-gesture-handler";
29
- jest.spyOn(_reactNativeGestureHandler.Gesture, "Pan").mockImplementation(() => {
30
- mockPan();
31
- return realPan.withTestId(gestureTestId);
32
- });
33
- describe("Test the real swipe behavior of Carousel to ensure it's working as expected", () => {
34
- const slideWidth = 300;
35
- const slideHeight = 200;
36
- const slideCount = 4;
37
- beforeEach(() => {
38
- mockPan.mockClear();
39
- }); // Helper function to create mock data
40
-
41
- const createMockData = function () {
42
- let length = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : slideCount;
43
- return Array.from({
44
- length
45
- }, (_, i) => `Item ${i + 1}`);
46
- }; // Helper function to create default props with correct typing
47
-
48
-
49
- const createDefaultProps = function (progressAnimVal) {
50
- let customProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
51
- const baseProps = {
52
- width: slideWidth,
53
- height: slideHeight,
54
- data: createMockData(),
55
- defaultIndex: 0,
56
- testID: "carousel-swipe-container",
57
- onProgressChange: progressAnimVal
58
- };
59
- return { ...baseProps,
60
- ...customProps
61
- };
62
- }; // Helper function to create test wrapper
63
-
64
-
65
- const createCarousel = progress => {
66
- const Wrapper = /*#__PURE__*/_react.default.forwardRef((customProps, ref) => {
67
- const progressAnimVal = (0, _reactNativeReanimated.useSharedValue)(progress.current);
68
-
69
- const defaultRenderItem = _ref => {
70
- let {
71
- item,
72
- index
73
- } = _ref;
74
- return /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.View, {
75
- testID: `carousel-item-${index}`,
76
- style: {
77
- width: slideWidth,
78
- height: slideHeight,
79
- flex: 1
80
- }
81
- }, item);
82
- };
83
-
84
- const {
85
- renderItem = defaultRenderItem,
86
- ...defaultProps
87
- } = createDefaultProps(progressAnimVal, customProps);
88
- (0, _reactNativeReanimated.useDerivedValue)(() => {
89
- progress.current = progressAnimVal.value;
90
- }, [progressAnimVal]);
91
- return /*#__PURE__*/_react.default.createElement(_Carousel.default, _extends({}, defaultProps, {
92
- renderItem: renderItem,
93
- ref: ref
94
- }));
95
- });
96
-
97
- return Wrapper;
98
- }; // Helper function to simulate swipe
99
-
100
-
101
- const swipeToLeftOnce = function () {
102
- let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
103
- const {
104
- itemWidth = slideWidth,
105
- velocityX = -slideWidth
106
- } = options;
107
- (0, _jestUtils.fireGestureHandler)((0, _jestUtils.getByGestureTestId)(gestureTestId), [{
108
- state: _reactNativeGestureHandler.State.BEGAN,
109
- translationX: 0,
110
- velocityX
111
- }, {
112
- state: _reactNativeGestureHandler.State.ACTIVE,
113
- translationX: -itemWidth * 0.25,
114
- velocityX
115
- }, {
116
- state: _reactNativeGestureHandler.State.ACTIVE,
117
- translationX: -itemWidth * 0.5,
118
- velocityX
119
- }, {
120
- state: _reactNativeGestureHandler.State.ACTIVE,
121
- translationX: -itemWidth * 0.75,
122
- velocityX
123
- }, {
124
- state: _reactNativeGestureHandler.State.END,
125
- translationX: -itemWidth,
126
- velocityX
127
- }]);
128
- }; // Helper function to verify initial render
129
-
130
-
131
- const verifyInitialRender = async getByTestId => {
132
- await (0, _reactNative.waitFor)(() => {
133
- const item = getByTestId("carousel-item-0");
134
- expect(item).toBeTruthy();
135
- }, {
136
- timeout: 1000 * 3
137
- });
138
- };
139
-
140
- it("`data` prop: should render correctly", async () => {
141
- const progress = {
142
- current: 0
143
- };
144
- const Wrapper = createCarousel(progress);
145
- const {
146
- getByTestId
147
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(Wrapper, {
148
- data: createMockData(6)
149
- }));
150
- await verifyInitialRender(getByTestId);
151
- expect(getByTestId("carousel-item-0")).toBeTruthy();
152
- expect(getByTestId("carousel-item-1")).toBeTruthy();
153
- expect(getByTestId("carousel-item-2")).toBeTruthy();
154
- expect(getByTestId("carousel-item-3")).toBeTruthy();
155
- expect(getByTestId("carousel-item-4")).toBeTruthy();
156
- expect(getByTestId("carousel-item-5")).toBeTruthy();
157
- });
158
- it("`renderItem` prop: should render items correctly", async () => {
159
- const progress = {
160
- current: 0
161
- };
162
- const Wrapper = createCarousel(progress);
163
- const {
164
- getByTestId
165
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(Wrapper, {
166
- renderItem: _ref2 => {
167
- let {
168
- item,
169
- index
170
- } = _ref2;
171
- return /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.Text, {
172
- testID: `item-${index}`
173
- }, item);
174
- }
175
- }));
176
- await (0, _reactNative.waitFor)(() => expect(getByTestId("item-0")).toBeTruthy());
177
- });
178
- it("should swipe to the left", async () => {
179
- const progress = {
180
- current: 0
181
- };
182
- const Wrapper = createCarousel(progress);
183
- const {
184
- getByTestId
185
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(Wrapper, null));
186
- await verifyInitialRender(getByTestId); // Test swipe sequence
187
-
188
- for (let i = 1; i <= slideCount; i++) {
189
- swipeToLeftOnce();
190
- await (0, _reactNative.waitFor)(() => expect(progress.current).toBe(i % slideCount));
191
- }
192
- });
193
- it("`loop` prop: should swipe back to the first item when loop is true", async () => {
194
- const progress = {
195
- current: 0
196
- };
197
- const Wrapper = createCarousel(progress);
198
- {
199
- const {
200
- getByTestId
201
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(Wrapper, {
202
- loop: true
203
- }));
204
- await verifyInitialRender(getByTestId); // Test swipe sequence
205
-
206
- for (let i = 1; i <= slideCount; i++) {
207
- swipeToLeftOnce();
208
- await (0, _reactNative.waitFor)(() => expect(progress.current).toBe(i % slideCount));
209
- }
210
- }
211
- {
212
- const {
213
- getByTestId
214
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(Wrapper, {
215
- loop: false
216
- }));
217
- await verifyInitialRender(getByTestId);
218
- (0, _jestUtils.fireGestureHandler)((0, _jestUtils.getByGestureTestId)(gestureTestId), [{
219
- state: _reactNativeGestureHandler.State.BEGAN,
220
- translationX: 0
221
- }, {
222
- state: _reactNativeGestureHandler.State.ACTIVE,
223
- translationX: slideWidth * 0.25
224
- }, {
225
- state: _reactNativeGestureHandler.State.END,
226
- translationX: slideWidth * 0.5
227
- }]); // Because the loop is false, so the the carousel will swipe back to the first item
228
-
229
- await (0, _reactNative.waitFor)(() => expect(progress.current).toBe(0));
230
- }
231
- });
232
- it("`onSnapToItem` prop: should call the onSnapToItem callback", async () => {
233
- const progress = {
234
- current: 0
235
- };
236
- const onSnapToItem = jest.fn();
237
- const Wrapper = createCarousel(progress);
238
- const {
239
- getByTestId
240
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(Wrapper, {
241
- onSnapToItem: onSnapToItem
242
- }));
243
- await verifyInitialRender(getByTestId);
244
- expect(onSnapToItem).not.toHaveBeenCalled();
245
- swipeToLeftOnce();
246
- await (0, _reactNative.waitFor)(() => expect(onSnapToItem).toHaveBeenCalledWith(1));
247
- swipeToLeftOnce();
248
- await (0, _reactNative.waitFor)(() => expect(onSnapToItem).toHaveBeenCalledWith(2));
249
- swipeToLeftOnce();
250
- await (0, _reactNative.waitFor)(() => expect(onSnapToItem).toHaveBeenCalledWith(3));
251
- });
252
- it("`autoPlay` prop: should swipe automatically when autoPlay is true", async () => {
253
- const progress = {
254
- current: 0
255
- };
256
- const Wrapper = createCarousel(progress);
257
- const {
258
- getByTestId
259
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(Wrapper, {
260
- autoPlay: true,
261
- autoPlayInterval: 300
262
- }));
263
- await verifyInitialRender(getByTestId);
264
- await (0, _reactNative.waitFor)(() => expect(progress.current).toBe(1));
265
- await (0, _reactNative.waitFor)(() => expect(progress.current).toBe(2));
266
- await (0, _reactNative.waitFor)(() => expect(progress.current).toBe(3));
267
- await (0, _reactNative.waitFor)(() => expect(progress.current).toBe(0));
268
- });
269
- it("`autoPlayReverse` prop: should swipe automatically in reverse when autoPlayReverse is true", async () => {
270
- const progress = {
271
- current: 0
272
- };
273
- const Wrapper = createCarousel(progress);
274
- const {
275
- getByTestId
276
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(Wrapper, {
277
- autoPlay: true,
278
- autoPlayReverse: true
279
- }));
280
- await verifyInitialRender(getByTestId);
281
- await (0, _reactNative.waitFor)(() => expect(progress.current).toBe(3));
282
- await (0, _reactNative.waitFor)(() => expect(progress.current).toBe(2));
283
- await (0, _reactNative.waitFor)(() => expect(progress.current).toBe(1));
284
- await (0, _reactNative.waitFor)(() => expect(progress.current).toBe(0));
285
- });
286
- it("`defaultIndex` prop: should render the correct item with the defaultIndex props", async () => {
287
- const progress = {
288
- current: 0
289
- };
290
- const Wrapper = createCarousel(progress);
291
- const {
292
- getByTestId
293
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(Wrapper, {
294
- defaultIndex: 2
295
- }));
296
- await verifyInitialRender(getByTestId);
297
- await (0, _reactNative.waitFor)(() => expect(progress.current).toBe(2));
298
- });
299
- it("`defaultScrollOffsetValue` prop: should render the correct progress value with the defaultScrollOffsetValue props", async () => {
300
- const progress = {
301
- current: 0
302
- };
303
- const Wrapper = createCarousel(progress);
304
-
305
- const WrapperWithCustomProps = () => {
306
- const defaultScrollOffsetValue = (0, _reactNativeReanimated.useSharedValue)(-slideWidth);
307
- return /*#__PURE__*/_react.default.createElement(Wrapper, {
308
- defaultScrollOffsetValue: defaultScrollOffsetValue
309
- });
310
- };
311
-
312
- (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(WrapperWithCustomProps, null));
313
- await (0, _reactNative.waitFor)(() => expect(progress.current).toBe(1));
314
- });
315
- it("`ref` prop: should handle the ref props", async () => {
316
- const Wrapper = createCarousel({
317
- current: 0
318
- });
319
- const fn = jest.fn();
320
-
321
- const WrapperWithCustomProps = _ref3 => {
322
- let {
323
- refSetupCallback
324
- } = _ref3;
325
- return /*#__PURE__*/_react.default.createElement(Wrapper, {
326
- ref: ref => {
327
- refSetupCallback(!!ref);
328
- }
329
- });
330
- };
331
-
332
- (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(WrapperWithCustomProps, {
333
- refSetupCallback: fn
334
- }));
335
- await (0, _reactNative.waitFor)(() => expect(fn).toHaveBeenCalledWith(true));
336
- });
337
- it("`autoFillData` prop: should auto fill data array to allow loop playback when the loop props is true", async () => {
338
- const progress = {
339
- current: 0
340
- };
341
- const Wrapper = createCarousel(progress);
342
- {
343
- const {
344
- getAllByTestId
345
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(Wrapper, {
346
- autoFillData: true,
347
- data: createMockData(1)
348
- }));
349
- await (0, _reactNative.waitFor)(() => {
350
- expect(getAllByTestId("carousel-item-0").length).toBe(3);
351
- });
352
- }
353
- {
354
- const {
355
- getAllByTestId
356
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(Wrapper, {
357
- autoFillData: false,
358
- data: createMockData(1)
359
- }));
360
- await (0, _reactNative.waitFor)(() => {
361
- expect(getAllByTestId("carousel-item-0").length).toBe(1);
362
- });
363
- }
364
- });
365
- it("`pagingEnabled` prop: should swipe to the next item when pagingEnabled is true", async () => {
366
- const progress = {
367
- current: 0
368
- };
369
- const Wrapper = createCarousel(progress);
370
- {
371
- const {
372
- getByTestId
373
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(Wrapper, {
374
- pagingEnabled: false
375
- }));
376
- await verifyInitialRender(getByTestId);
377
- (0, _jestUtils.fireGestureHandler)((0, _jestUtils.getByGestureTestId)(gestureTestId), [{
378
- state: _reactNativeGestureHandler.State.BEGAN,
379
- translationX: 0,
380
- velocityX: -5
381
- }, {
382
- state: _reactNativeGestureHandler.State.ACTIVE,
383
- translationX: -slideWidth * 0.15,
384
- velocityX: -5
385
- }, {
386
- state: _reactNativeGestureHandler.State.END,
387
- translationX: -slideWidth * 0.25,
388
- velocityX: -5
389
- }]);
390
- await (0, _reactNative.waitFor)(() => expect(progress.current).toBe(0));
391
- }
392
- {
393
- const {
394
- getByTestId
395
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(Wrapper, {
396
- pagingEnabled: true
397
- }));
398
- await verifyInitialRender(getByTestId);
399
- (0, _jestUtils.fireGestureHandler)((0, _jestUtils.getByGestureTestId)(gestureTestId), [{
400
- state: _reactNativeGestureHandler.State.BEGAN,
401
- translationX: 0,
402
- velocityX: -1000
403
- }, {
404
- state: _reactNativeGestureHandler.State.ACTIVE,
405
- translationX: -slideWidth * 0.15,
406
- velocityX: -1000
407
- }, {
408
- state: _reactNativeGestureHandler.State.END,
409
- translationX: -slideWidth * 0.25,
410
- velocityX: -1000
411
- }]);
412
- await (0, _reactNative.waitFor)(() => expect(progress.current).toBe(1));
413
- }
414
- });
415
- it("`onConfigurePanGesture` prop: should call the onConfigurePanGesture callback", async () => {
416
- const progress = {
417
- current: 0
418
- };
419
- const Wrapper = createCarousel(progress);
420
- let _pan = null;
421
- (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(Wrapper, {
422
- onConfigurePanGesture: pan => {
423
- _pan = pan;
424
- return pan;
425
- }
426
- }));
427
- const {
428
- getByTestId
429
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(Wrapper, {
430
- pagingEnabled: false
431
- }));
432
- await verifyInitialRender(getByTestId);
433
- expect(_pan).not.toBeNull();
434
- });
435
- it("`onScrollStart` prop: should call the onScrollStart callback", async () => {
436
- const progress = {
437
- current: 0
438
- };
439
- let startedProgress;
440
-
441
- const onScrollStart = () => {
442
- if (typeof startedProgress === "number") return;
443
- startedProgress = progress.current;
444
- };
445
-
446
- const Wrapper = createCarousel(progress);
447
- const {
448
- getByTestId
449
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(Wrapper, {
450
- onScrollStart: onScrollStart
451
- }));
452
- await verifyInitialRender(getByTestId);
453
- (0, _jestUtils.fireGestureHandler)((0, _jestUtils.getByGestureTestId)(gestureTestId), [{
454
- state: _reactNativeGestureHandler.State.BEGAN,
455
- translationX: 0,
456
- velocityX: 1000
457
- }, {
458
- state: _reactNativeGestureHandler.State.ACTIVE,
459
- translationX: slideWidth / 2,
460
- velocityX: 1000
461
- }, {
462
- state: _reactNativeGestureHandler.State.END,
463
- translationX: slideWidth,
464
- velocityX: 1000
465
- }]);
466
- await (0, _reactNative.waitFor)(() => {
467
- expect(startedProgress).toBe(0);
468
- });
469
- });
470
- it("`onScrollEnd` prop: should call the onScrollEnd callback", async () => {
471
- const progress = {
472
- current: 0
473
- };
474
- let endedProgress;
475
- const onScrollEnd = jest.fn(() => {
476
- if (typeof endedProgress === "number") return;
477
- endedProgress = progress.current;
478
- });
479
- const Wrapper = createCarousel(progress);
480
- const {
481
- getByTestId
482
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(Wrapper, {
483
- onScrollEnd: onScrollEnd
484
- }));
485
- await verifyInitialRender(getByTestId);
486
- (0, _jestUtils.fireGestureHandler)((0, _jestUtils.getByGestureTestId)(gestureTestId), [{
487
- state: _reactNativeGestureHandler.State.BEGAN,
488
- translationX: 0,
489
- velocityX: 1000
490
- }, {
491
- state: _reactNativeGestureHandler.State.ACTIVE,
492
- translationX: slideWidth / 2,
493
- velocityX: 1000
494
- }, {
495
- state: _reactNativeGestureHandler.State.END,
496
- translationX: slideWidth,
497
- velocityX: 1000
498
- }]);
499
- await (0, _reactNative.waitFor)(() => {
500
- expect(endedProgress).toBe(3);
501
- expect(onScrollEnd).toHaveBeenCalledWith(3);
502
- });
503
- });
504
- it("`onProgressChange` prop: should call the onProgressChange callback", async () => {
505
- const offsetProgressVal = {
506
- current: 0
507
- };
508
- const absoluteProgressVal = {
509
- current: 0
510
- };
511
- const onProgressChange = jest.fn((offsetProgress, absoluteProgress) => {
512
- offsetProgressVal.current = offsetProgress;
513
- absoluteProgressVal.current = absoluteProgress;
514
- });
515
- const Wrapper = createCarousel(offsetProgressVal);
516
- const {
517
- getByTestId
518
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(Wrapper, {
519
- onProgressChange: onProgressChange,
520
- defaultIndex: 0
521
- }));
522
- await verifyInitialRender(getByTestId);
523
- await (0, _reactNative.waitFor)(() => {
524
- expect(offsetProgressVal.current).toBe(0);
525
- expect(absoluteProgressVal.current).toBe(0);
526
- });
527
- (0, _jestUtils.fireGestureHandler)((0, _jestUtils.getByGestureTestId)(gestureTestId), [{
528
- state: _reactNativeGestureHandler.State.BEGAN,
529
- translationX: 0,
530
- velocityX: -1000
531
- }, {
532
- state: _reactNativeGestureHandler.State.ACTIVE,
533
- translationX: -slideWidth / 2,
534
- velocityX: -1000
535
- }, {
536
- state: _reactNativeGestureHandler.State.END,
537
- translationX: -slideWidth,
538
- velocityX: -1000
539
- }]);
540
- await (0, _reactNative.waitFor)(() => {
541
- expect(offsetProgressVal.current).toBe(-slideWidth);
542
- expect(absoluteProgressVal.current).toBe(1);
543
- });
544
- });
545
- it("`fixedDirection` prop: should swipe to the correct direction when fixedDirection is positive", async () => {
546
- {
547
- const progress = {
548
- current: 0
549
- };
550
- const Wrapper = createCarousel(progress);
551
- const {
552
- getByTestId
553
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(Wrapper, {
554
- fixedDirection: "positive"
555
- }));
556
- await verifyInitialRender(getByTestId);
557
- swipeToLeftOnce({
558
- velocityX: slideWidth
559
- });
560
- await (0, _reactNative.waitFor)(() => {
561
- expect(progress.current).toBe(3);
562
- });
563
- }
564
- {
565
- const progress = {
566
- current: 0
567
- };
568
- const Wrapper = createCarousel(progress);
569
- const {
570
- getByTestId
571
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(Wrapper, {
572
- fixedDirection: "negative"
573
- }));
574
- await verifyInitialRender(getByTestId);
575
- swipeToLeftOnce({
576
- velocityX: -slideWidth
577
- });
578
- await (0, _reactNative.waitFor)(() => expect(progress.current).toBe(1));
579
- }
580
- });
581
- it("`customAnimation` prop: should apply the custom animation", async () => {
582
- const progress = {
583
- current: 0
584
- };
585
- const indexes = {};
586
- const Wrapper = createCarousel(progress);
587
- const {
588
- getByTestId
589
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(Wrapper, {
590
- customAnimation: (value, index) => {
591
- "worklet";
592
-
593
- indexes[index] = index;
594
- const zIndex = (0, _reactNativeReanimated.interpolate)(value, [-1, 0, 1], [10, 20, 30]);
595
- const translateX = (0, _reactNativeReanimated.interpolate)(value, [-2, 0, 1], [-slideWidth, 0, slideWidth]);
596
- return {
597
- transform: [{
598
- translateX
599
- }],
600
- zIndex
601
- };
602
- }
603
- }));
604
- await verifyInitialRender(getByTestId);
605
- swipeToLeftOnce();
606
- await (0, _reactNative.waitFor)(() => {
607
- expect(progress.current).toBe(1);
608
- expect(indexes).toMatchInlineSnapshot(`
1
+ var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _react=_interopRequireDefault(require("react"));var _reactNativeGestureHandler=require("react-native-gesture-handler");var _reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated"));var _reactNative=require("@testing-library/react-native");var _jestUtils=require("react-native-gesture-handler/jest-utils");var _Carousel=_interopRequireDefault(require("./Carousel"));var _jsxRuntime=require("react/jsx-runtime");var _excluded=["renderItem"];var _this=this,_jsxFileName="/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/components/Carousel.test.tsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}jest.setTimeout(1000*12);var mockPan=jest.fn();var realPan=_reactNativeGestureHandler.Gesture.Pan();var gestureTestId="rnrc-gesture-handler";jest.spyOn(_reactNativeGestureHandler.Gesture,"Pan").mockImplementation(function(){mockPan();return realPan.withTestId(gestureTestId);});var _worklet_7652950458501_init_data={code:"function anonymous(){const{progress,progressAnimVal}=this.__closure;progress.current=progressAnimVal.value;}",location:"/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/components/Carousel.test.tsx",sourceMap:"{\"version\":3,\"mappings\":\"AAiFsB,QAAAA,UAAA,EAAM,gDACpBC,QAAQ,CAACC,OAATD,CAAmBE,eAAe,CAACC,KAAnCH,CADc\",\"names\":[\"anonymous\",\"progress\",\"current\",\"progressAnimVal\",\"value\"],\"sources\":[\"/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/components/Carousel.test.tsx\"]}",version:"3.10.1"};var _worklet_3861612759563_init_data={code:"function anonymous(value,index){const{indexes,interpolate,slideWidth}=this.__closure;indexes[index]=index;const zIndex=interpolate(value,[-1,0,1],[10,20,30]);const translateX=interpolate(value,[-2,0,1],[-slideWidth,0,slideWidth]);return{transform:[{translateX:translateX}],zIndex:zIndex};}",location:"/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/components/Carousel.test.tsx",sourceMap:"{\"version\":3,\"mappings\":\"AA6cyB,QAACA,UAAD,CAAgBC,KAAhB,CAAkCA,KAAlC,CAAkC,sDAGjDC,OAAO,CAACD,KAAD,CAAPC,CAAiBD,KAAjBC,CAEA,KAAMC,OAAM,CAAGC,WAAW,CAACJ,KAAD,CAAQ,CAAC,CAAC,CAAF,CAAK,CAAL,CAAQ,CAAR,CAAR,CAAoB,CAAC,EAAD,CAAK,EAAL,CAAS,EAAT,CAApB,CAA1B,CACA,KAAMK,WAAU,CAAGD,WAAW,CAACJ,KAAD,CAAQ,CAAC,CAAC,CAAF,CAAK,CAAL,CAAQ,CAAR,CAAR,CAAoB,CAAC,CAACM,UAAF,CAAc,CAAd,CAAiBA,UAAjB,CAApB,CAA9B,CAEA,MAAO,CACLC,SAAS,CAAE,CAAC,CAAEF,qBAAF,CAAD,CADN,CAELF,aAFK,CAAP,CARe\",\"names\":[\"value\",\"index\",\"indexes\",\"zIndex\",\"interpolate\",\"translateX\",\"slideWidth\",\"transform\"],\"sources\":[\"/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/components/Carousel.test.tsx\"]}",version:"3.10.1"};describe("Test the real swipe behavior of Carousel to ensure it's working as expected",function(){var slideWidth=300;var slideHeight=200;var slideCount=4;beforeEach(function(){mockPan.mockClear();});var createMockData=function createMockData(){var length=arguments.length>0&&arguments[0]!==undefined?arguments[0]:slideCount;return Array.from({length:length},function(_,i){return`Item ${i+1}`;});};var createDefaultProps=function createDefaultProps(progressAnimVal){var customProps=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var baseProps={width:slideWidth,height:slideHeight,data:createMockData(),defaultIndex:0,testID:"carousel-swipe-container",onProgressChange:progressAnimVal};return Object.assign({},baseProps,customProps);};var createCarousel=function createCarousel(progress){var Wrapper=_react.default.forwardRef(function(customProps,ref){var progressAnimVal=(0,_reactNativeReanimated.useSharedValue)(progress.current);var defaultRenderItem=function defaultRenderItem(_ref){var item=_ref.item,index=_ref.index;return(0,_jsxRuntime.jsx)(_reactNativeReanimated.default.View,{testID:`carousel-item-${index}`,style:{width:slideWidth,height:slideHeight,flex:1},children:item});};var _createDefaultProps=createDefaultProps(progressAnimVal,customProps),_createDefaultProps$r=_createDefaultProps.renderItem,renderItem=_createDefaultProps$r===void 0?defaultRenderItem:_createDefaultProps$r,defaultProps=(0,_objectWithoutProperties2.default)(_createDefaultProps,_excluded);(0,_reactNativeReanimated.useDerivedValue)(function(){var _e=[new global.Error(),-3,-27];var anonymous=function anonymous(){progress.current=progressAnimVal.value;};anonymous.__closure={progress:progress,progressAnimVal:progressAnimVal};anonymous.__workletHash=7652950458501;anonymous.__initData=_worklet_7652950458501_init_data;anonymous.__stackDetails=_e;return anonymous;}(),[progressAnimVal]);return(0,_jsxRuntime.jsx)(_Carousel.default,Object.assign({},defaultProps,{renderItem:renderItem,ref:ref}));});return Wrapper;};var swipeToLeftOnce=function swipeToLeftOnce(){var options=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var _options$itemWidth=options.itemWidth,itemWidth=_options$itemWidth===void 0?slideWidth:_options$itemWidth,_options$velocityX=options.velocityX,velocityX=_options$velocityX===void 0?-slideWidth:_options$velocityX;(0,_jestUtils.fireGestureHandler)((0,_jestUtils.getByGestureTestId)(gestureTestId),[{state:_reactNativeGestureHandler.State.BEGAN,translationX:0,velocityX:velocityX},{state:_reactNativeGestureHandler.State.ACTIVE,translationX:-itemWidth*0.25,velocityX:velocityX},{state:_reactNativeGestureHandler.State.ACTIVE,translationX:-itemWidth*0.5,velocityX:velocityX},{state:_reactNativeGestureHandler.State.ACTIVE,translationX:-itemWidth*0.75,velocityX:velocityX},{state:_reactNativeGestureHandler.State.END,translationX:-itemWidth,velocityX:velocityX}]);};var verifyInitialRender=function(){var _ref2=(0,_asyncToGenerator2.default)(function*(getByTestId){yield(0,_reactNative.waitFor)(function(){var item=getByTestId("carousel-item-0");expect(item).toBeTruthy();},{timeout:1000*3});});return function verifyInitialRender(_x){return _ref2.apply(this,arguments);};}();it("`data` prop: should render correctly",(0,_asyncToGenerator2.default)(function*(){var progress={current:0};var Wrapper=createCarousel(progress);var _render=(0,_reactNative.render)((0,_jsxRuntime.jsx)(Wrapper,{data:createMockData(6)})),getByTestId=_render.getByTestId;yield verifyInitialRender(getByTestId);expect(getByTestId("carousel-item-0")).toBeTruthy();expect(getByTestId("carousel-item-1")).toBeTruthy();expect(getByTestId("carousel-item-2")).toBeTruthy();expect(getByTestId("carousel-item-3")).toBeTruthy();expect(getByTestId("carousel-item-4")).toBeTruthy();expect(getByTestId("carousel-item-5")).toBeTruthy();}));it("`renderItem` prop: should render items correctly",(0,_asyncToGenerator2.default)(function*(){var progress={current:0};var Wrapper=createCarousel(progress);var _render2=(0,_reactNative.render)((0,_jsxRuntime.jsx)(Wrapper,{renderItem:function renderItem(_ref5){var item=_ref5.item,index=_ref5.index;return(0,_jsxRuntime.jsx)(_reactNativeReanimated.default.Text,{testID:`item-${index}`,children:item});}})),getByTestId=_render2.getByTestId;yield(0,_reactNative.waitFor)(function(){return expect(getByTestId("item-0")).toBeTruthy();});}));it("should swipe to the left",(0,_asyncToGenerator2.default)(function*(){var progress={current:0};var Wrapper=createCarousel(progress);var _render3=(0,_reactNative.render)((0,_jsxRuntime.jsx)(Wrapper,{})),getByTestId=_render3.getByTestId;yield verifyInitialRender(getByTestId);var _loop=function*_loop(i){swipeToLeftOnce();yield(0,_reactNative.waitFor)(function(){return expect(progress.current).toBe(i%slideCount);});};for(var i=1;i<=slideCount;i++){yield*_loop(i);}}));it("`loop` prop: should swipe back to the first item when loop is true",(0,_asyncToGenerator2.default)(function*(){var progress={current:0};var Wrapper=createCarousel(progress);{var _render4=(0,_reactNative.render)((0,_jsxRuntime.jsx)(Wrapper,{loop:true})),getByTestId=_render4.getByTestId;yield verifyInitialRender(getByTestId);var _loop2=function*_loop2(i){swipeToLeftOnce();yield(0,_reactNative.waitFor)(function(){return expect(progress.current).toBe(i%slideCount);});};for(var i=1;i<=slideCount;i++){yield*_loop2(i);}}{var _render5=(0,_reactNative.render)((0,_jsxRuntime.jsx)(Wrapper,{loop:false})),_getByTestId=_render5.getByTestId;yield verifyInitialRender(_getByTestId);(0,_jestUtils.fireGestureHandler)((0,_jestUtils.getByGestureTestId)(gestureTestId),[{state:_reactNativeGestureHandler.State.BEGAN,translationX:0},{state:_reactNativeGestureHandler.State.ACTIVE,translationX:slideWidth*0.25},{state:_reactNativeGestureHandler.State.END,translationX:slideWidth*0.5}]);yield(0,_reactNative.waitFor)(function(){return expect(progress.current).toBe(0);});}}));it("`onSnapToItem` prop: should call the onSnapToItem callback",(0,_asyncToGenerator2.default)(function*(){var progress={current:0};var onSnapToItem=jest.fn();var Wrapper=createCarousel(progress);var _render6=(0,_reactNative.render)((0,_jsxRuntime.jsx)(Wrapper,{onSnapToItem:onSnapToItem})),getByTestId=_render6.getByTestId;yield verifyInitialRender(getByTestId);expect(onSnapToItem).not.toHaveBeenCalled();swipeToLeftOnce();yield(0,_reactNative.waitFor)(function(){return expect(onSnapToItem).toHaveBeenCalledWith(1);});swipeToLeftOnce();yield(0,_reactNative.waitFor)(function(){return expect(onSnapToItem).toHaveBeenCalledWith(2);});swipeToLeftOnce();yield(0,_reactNative.waitFor)(function(){return expect(onSnapToItem).toHaveBeenCalledWith(3);});}));it("`autoPlay` prop: should swipe automatically when autoPlay is true",(0,_asyncToGenerator2.default)(function*(){var progress={current:0};var Wrapper=createCarousel(progress);var _render7=(0,_reactNative.render)((0,_jsxRuntime.jsx)(Wrapper,{autoPlay:true,autoPlayInterval:300})),getByTestId=_render7.getByTestId;yield verifyInitialRender(getByTestId);yield(0,_reactNative.waitFor)(function(){return expect(progress.current).toBe(1);});yield(0,_reactNative.waitFor)(function(){return expect(progress.current).toBe(2);});yield(0,_reactNative.waitFor)(function(){return expect(progress.current).toBe(3);});yield(0,_reactNative.waitFor)(function(){return expect(progress.current).toBe(0);});}));it("`autoPlayReverse` prop: should swipe automatically in reverse when autoPlayReverse is true",(0,_asyncToGenerator2.default)(function*(){var progress={current:0};var Wrapper=createCarousel(progress);var _render8=(0,_reactNative.render)((0,_jsxRuntime.jsx)(Wrapper,{autoPlay:true,autoPlayReverse:true})),getByTestId=_render8.getByTestId;yield verifyInitialRender(getByTestId);yield(0,_reactNative.waitFor)(function(){return expect(progress.current).toBe(3);});yield(0,_reactNative.waitFor)(function(){return expect(progress.current).toBe(2);});yield(0,_reactNative.waitFor)(function(){return expect(progress.current).toBe(1);});yield(0,_reactNative.waitFor)(function(){return expect(progress.current).toBe(0);});}));it("`defaultIndex` prop: should render the correct item with the defaultIndex props",(0,_asyncToGenerator2.default)(function*(){var progress={current:0};var Wrapper=createCarousel(progress);var _render9=(0,_reactNative.render)((0,_jsxRuntime.jsx)(Wrapper,{defaultIndex:2})),getByTestId=_render9.getByTestId;yield verifyInitialRender(getByTestId);yield(0,_reactNative.waitFor)(function(){return expect(progress.current).toBe(2);});}));it("`defaultScrollOffsetValue` prop: should render the correct progress value with the defaultScrollOffsetValue props",(0,_asyncToGenerator2.default)(function*(){var progress={current:0};var Wrapper=createCarousel(progress);var WrapperWithCustomProps=function WrapperWithCustomProps(){var defaultScrollOffsetValue=(0,_reactNativeReanimated.useSharedValue)(-slideWidth);return(0,_jsxRuntime.jsx)(Wrapper,{defaultScrollOffsetValue:defaultScrollOffsetValue});};(0,_reactNative.render)((0,_jsxRuntime.jsx)(WrapperWithCustomProps,{}));yield(0,_reactNative.waitFor)(function(){return expect(progress.current).toBe(1);});}));it("`ref` prop: should handle the ref props",(0,_asyncToGenerator2.default)(function*(){var Wrapper=createCarousel({current:0});var fn=jest.fn();var WrapperWithCustomProps=function WrapperWithCustomProps(_ref14){var refSetupCallback=_ref14.refSetupCallback;return(0,_jsxRuntime.jsx)(Wrapper,{ref:function(_ref15){function ref(_x2){return _ref15.apply(this,arguments);}ref.toString=function(){return _ref15.toString();};return ref;}(function(ref){refSetupCallback(!!ref);})});};(0,_reactNative.render)((0,_jsxRuntime.jsx)(WrapperWithCustomProps,{refSetupCallback:fn}));yield(0,_reactNative.waitFor)(function(){return expect(fn).toHaveBeenCalledWith(true);});}));it("`autoFillData` prop: should auto fill data array to allow loop playback when the loop props is true",(0,_asyncToGenerator2.default)(function*(){var progress={current:0};var Wrapper=createCarousel(progress);{var _render10=(0,_reactNative.render)((0,_jsxRuntime.jsx)(Wrapper,{autoFillData:true,data:createMockData(1)})),getAllByTestId=_render10.getAllByTestId;yield(0,_reactNative.waitFor)(function(){expect(getAllByTestId("carousel-item-0").length).toBe(3);});}{var _render11=(0,_reactNative.render)((0,_jsxRuntime.jsx)(Wrapper,{autoFillData:false,data:createMockData(1)})),_getAllByTestId=_render11.getAllByTestId;yield(0,_reactNative.waitFor)(function(){expect(_getAllByTestId("carousel-item-0").length).toBe(1);});}}));it("`pagingEnabled` prop: should swipe to the next item when pagingEnabled is true",(0,_asyncToGenerator2.default)(function*(){var progress={current:0};var Wrapper=createCarousel(progress);{var _render12=(0,_reactNative.render)((0,_jsxRuntime.jsx)(Wrapper,{pagingEnabled:false})),getByTestId=_render12.getByTestId;yield verifyInitialRender(getByTestId);(0,_jestUtils.fireGestureHandler)((0,_jestUtils.getByGestureTestId)(gestureTestId),[{state:_reactNativeGestureHandler.State.BEGAN,translationX:0,velocityX:-5},{state:_reactNativeGestureHandler.State.ACTIVE,translationX:-slideWidth*0.15,velocityX:-5},{state:_reactNativeGestureHandler.State.END,translationX:-slideWidth*0.25,velocityX:-5}]);yield(0,_reactNative.waitFor)(function(){return expect(progress.current).toBe(0);});}{var _render13=(0,_reactNative.render)((0,_jsxRuntime.jsx)(Wrapper,{pagingEnabled:true})),_getByTestId2=_render13.getByTestId;yield verifyInitialRender(_getByTestId2);(0,_jestUtils.fireGestureHandler)((0,_jestUtils.getByGestureTestId)(gestureTestId),[{state:_reactNativeGestureHandler.State.BEGAN,translationX:0,velocityX:-1000},{state:_reactNativeGestureHandler.State.ACTIVE,translationX:-slideWidth*0.15,velocityX:-1000},{state:_reactNativeGestureHandler.State.END,translationX:-slideWidth*0.25,velocityX:-1000}]);yield(0,_reactNative.waitFor)(function(){return expect(progress.current).toBe(1);});}}));it("`onConfigurePanGesture` prop: should call the onConfigurePanGesture callback",(0,_asyncToGenerator2.default)(function*(){var progress={current:0};var Wrapper=createCarousel(progress);var _pan=null;(0,_reactNative.render)((0,_jsxRuntime.jsx)(Wrapper,{onConfigurePanGesture:function onConfigurePanGesture(pan){_pan=pan;return pan;}}));var _render14=(0,_reactNative.render)((0,_jsxRuntime.jsx)(Wrapper,{pagingEnabled:false})),getByTestId=_render14.getByTestId;yield verifyInitialRender(getByTestId);expect(_pan).not.toBeNull();}));it("`onScrollStart` prop: should call the onScrollStart callback",(0,_asyncToGenerator2.default)(function*(){var progress={current:0};var startedProgress;var onScrollStart=function onScrollStart(){if(typeof startedProgress==="number")return;startedProgress=progress.current;};var Wrapper=createCarousel(progress);var _render15=(0,_reactNative.render)((0,_jsxRuntime.jsx)(Wrapper,{onScrollStart:onScrollStart})),getByTestId=_render15.getByTestId;yield verifyInitialRender(getByTestId);(0,_jestUtils.fireGestureHandler)((0,_jestUtils.getByGestureTestId)(gestureTestId),[{state:_reactNativeGestureHandler.State.BEGAN,translationX:0,velocityX:1000},{state:_reactNativeGestureHandler.State.ACTIVE,translationX:slideWidth/2,velocityX:1000},{state:_reactNativeGestureHandler.State.END,translationX:slideWidth,velocityX:1000}]);yield(0,_reactNative.waitFor)(function(){expect(startedProgress).toBe(0);});}));it("`onScrollEnd` prop: should call the onScrollEnd callback",(0,_asyncToGenerator2.default)(function*(){var progress={current:0};var endedProgress;var onScrollEnd=jest.fn(function(){if(typeof endedProgress==="number")return;endedProgress=progress.current;});var Wrapper=createCarousel(progress);var _render16=(0,_reactNative.render)((0,_jsxRuntime.jsx)(Wrapper,{onScrollEnd:onScrollEnd})),getByTestId=_render16.getByTestId;yield verifyInitialRender(getByTestId);(0,_jestUtils.fireGestureHandler)((0,_jestUtils.getByGestureTestId)(gestureTestId),[{state:_reactNativeGestureHandler.State.BEGAN,translationX:0,velocityX:1000},{state:_reactNativeGestureHandler.State.ACTIVE,translationX:slideWidth/2,velocityX:1000},{state:_reactNativeGestureHandler.State.END,translationX:slideWidth,velocityX:1000}]);yield(0,_reactNative.waitFor)(function(){expect(endedProgress).toBe(3);expect(onScrollEnd).toHaveBeenCalledWith(3);});}));it("`onProgressChange` prop: should call the onProgressChange callback",(0,_asyncToGenerator2.default)(function*(){var offsetProgressVal={current:0};var absoluteProgressVal={current:0};var onProgressChange=jest.fn(function(offsetProgress,absoluteProgress){offsetProgressVal.current=offsetProgress;absoluteProgressVal.current=absoluteProgress;});var Wrapper=createCarousel(offsetProgressVal);var _render17=(0,_reactNative.render)((0,_jsxRuntime.jsx)(Wrapper,{onProgressChange:onProgressChange,defaultIndex:0})),getByTestId=_render17.getByTestId;yield verifyInitialRender(getByTestId);yield(0,_reactNative.waitFor)(function(){expect(offsetProgressVal.current).toBe(0);expect(absoluteProgressVal.current).toBe(0);});(0,_jestUtils.fireGestureHandler)((0,_jestUtils.getByGestureTestId)(gestureTestId),[{state:_reactNativeGestureHandler.State.BEGAN,translationX:0,velocityX:-1000},{state:_reactNativeGestureHandler.State.ACTIVE,translationX:-slideWidth/2,velocityX:-1000},{state:_reactNativeGestureHandler.State.END,translationX:-slideWidth,velocityX:-1000}]);yield(0,_reactNative.waitFor)(function(){expect(offsetProgressVal.current).toBe(-slideWidth);expect(absoluteProgressVal.current).toBe(1);});}));it("`fixedDirection` prop: should swipe to the correct direction when fixedDirection is positive",(0,_asyncToGenerator2.default)(function*(){{var progress={current:0};var Wrapper=createCarousel(progress);var _render18=(0,_reactNative.render)((0,_jsxRuntime.jsx)(Wrapper,{fixedDirection:"positive"})),getByTestId=_render18.getByTestId;yield verifyInitialRender(getByTestId);swipeToLeftOnce({velocityX:slideWidth});yield(0,_reactNative.waitFor)(function(){expect(progress.current).toBe(3);});}{var _progress={current:0};var _Wrapper=createCarousel(_progress);var _render19=(0,_reactNative.render)((0,_jsxRuntime.jsx)(_Wrapper,{fixedDirection:"negative"})),_getByTestId3=_render19.getByTestId;yield verifyInitialRender(_getByTestId3);swipeToLeftOnce({velocityX:-slideWidth});yield(0,_reactNative.waitFor)(function(){return expect(_progress.current).toBe(1);});}}));it("`customAnimation` prop: should apply the custom animation",(0,_asyncToGenerator2.default)(function*(){var progress={current:0};var indexes={};var Wrapper=createCarousel(progress);var _render20=(0,_reactNative.render)((0,_jsxRuntime.jsx)(Wrapper,{customAnimation:function(){var _e=[new global.Error(),-4,-27];var anonymous=function anonymous(value,index){indexes[index]=index;var zIndex=(0,_reactNativeReanimated.interpolate)(value,[-1,0,1],[10,20,30]);var translateX=(0,_reactNativeReanimated.interpolate)(value,[-2,0,1],[-slideWidth,0,slideWidth]);return{transform:[{translateX:translateX}],zIndex:zIndex};};anonymous.__closure={indexes:indexes,interpolate:_reactNativeReanimated.interpolate,slideWidth:slideWidth};anonymous.__workletHash=3861612759563;anonymous.__initData=_worklet_3861612759563_init_data;anonymous.__stackDetails=_e;return anonymous;}()})),getByTestId=_render20.getByTestId;yield verifyInitialRender(getByTestId);swipeToLeftOnce();yield(0,_reactNative.waitFor)(function(){expect(progress.current).toBe(1);expect(indexes).toMatchInlineSnapshot(`
609
2
  {
610
3
  "0": 0,
611
4
  "1": 1,
612
5
  "2": 2,
613
6
  "3": 3,
614
7
  }
615
- `);
616
- });
617
- });
618
- it("`overscrollEnabled` prop: should respect overscrollEnabled=false and prevent scrolling beyond bounds", async () => {
619
- var _nextSlide, _nextSlide2, _nextSlide3;
620
-
621
- const containerWidth = slideWidth;
622
- const containerHeight = containerWidth / 2;
623
- const itemWidth = containerWidth / 4;
624
- let nextSlide;
625
- const testId = "CarouselAnimatedView";
626
- const progress = {
627
- current: 0
628
- };
629
- const Carousel = createCarousel(progress);
630
- const baseOptions = {
631
- vertical: false,
632
- width: itemWidth,
633
- height: containerHeight,
634
- style: {
635
- width: containerWidth
636
- },
637
- testID: testId
638
- };
639
- const {
640
- getByTestId
641
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(Carousel, _extends({
642
- ref: ref => {
643
- if (ref) {
644
- nextSlide = ref.next;
645
- }
646
- }
647
- }, baseOptions, {
648
- loop: false,
649
- overscrollEnabled: false,
650
- data: createMockData(6),
651
- pagingEnabled: false
652
- })));
653
- await (0, _reactNative.act)(() => {
654
- getByTestId(testId).props.onLayout({
655
- nativeEvent: {
656
- layout: {
657
- width: containerWidth,
658
- height: containerHeight
659
- }
660
- }
661
- });
662
- });
663
- await verifyInitialRender(getByTestId);
664
- await new Promise(resolve => setTimeout(resolve, 3000)); // The test logic is that the first screen has four elements
665
-
666
- await (0, _reactNative.waitFor)(() => {
667
- expect(progress.current).toBe(0);
668
- }); // After swiping left twice, the last element is close to the right side of the container
669
-
670
- (_nextSlide = nextSlide) === null || _nextSlide === void 0 ? void 0 : _nextSlide();
671
- await (0, _reactNative.waitFor)(() => {
672
- expect(progress.current).toBe(1);
673
- });
674
- (_nextSlide2 = nextSlide) === null || _nextSlide2 === void 0 ? void 0 : _nextSlide2();
675
- await (0, _reactNative.waitFor)(() => {
676
- expect(progress.current).toBe(2);
677
- }); // At this point, swiping left again should stay on the last element, meaning this swipe is invalid
678
-
679
- (_nextSlide3 = nextSlide) === null || _nextSlide3 === void 0 ? void 0 : _nextSlide3();
680
- await (0, _reactNative.waitFor)(() => {
681
- expect(progress.current).toBe(2);
682
- });
683
- });
684
- });
8
+ `);});}));it("`overscrollEnabled` prop: should respect overscrollEnabled=false and prevent scrolling beyond bounds",(0,_asyncToGenerator2.default)(function*(){var containerWidth=slideWidth;var containerHeight=containerWidth/2;var itemWidth=containerWidth/4;var nextSlide;var testId="CarouselAnimatedView";var progress={current:0};var Carousel=createCarousel(progress);var baseOptions={vertical:false,width:itemWidth,height:containerHeight,style:{width:containerWidth},testID:testId};var _render21=(0,_reactNative.render)((0,_jsxRuntime.jsx)(Carousel,Object.assign({ref:function(_ref25){function ref(_x3){return _ref25.apply(this,arguments);}ref.toString=function(){return _ref25.toString();};return ref;}(function(ref){if(ref){nextSlide=ref.next;}})},baseOptions,{loop:false,overscrollEnabled:false,data:createMockData(6),pagingEnabled:false}))),getByTestId=_render21.getByTestId;yield(0,_reactNative.act)(function(){getByTestId(testId).props.onLayout({nativeEvent:{layout:{width:containerWidth,height:containerHeight}}});});yield verifyInitialRender(getByTestId);yield new Promise(function(resolve){return setTimeout(resolve,3000);});yield(0,_reactNative.waitFor)(function(){expect(progress.current).toBe(0);});nextSlide==null?void 0:nextSlide();yield(0,_reactNative.waitFor)(function(){expect(progress.current).toBe(1);});nextSlide==null?void 0:nextSlide();yield(0,_reactNative.waitFor)(function(){expect(progress.current).toBe(2);});nextSlide==null?void 0:nextSlide();yield(0,_reactNative.waitFor)(function(){expect(progress.current).toBe(2);});}));});
685
9
  //# sourceMappingURL=Carousel.test.js.map