@momo-kits/carousel 0.79.6 → 0.80.1-beta.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.
@@ -0,0 +1,1041 @@
1
+ // import React from 'react';
2
+ // import {
3
+ // Animated,
4
+ // I18nManager,
5
+ // LayoutChangeEvent,
6
+ // NativeScrollEvent,
7
+ // NativeSyntheticEvent,
8
+ // Platform,
9
+ // View,
10
+ // } from 'react-native';
11
+ // import {defaultAnimatedStyles, defaultScrollInterpolator} from './animation';
12
+ // import {CarouselProps, CarouselState, Position} from './types';
13
+ //
14
+ // const IS_ANDROID = Platform.OS === 'android';
15
+ // const IS_IOS = Platform.OS === 'ios';
16
+ // const IS_RTL = I18nManager.isRTL;
17
+ //
18
+ // export default class Carousel extends React.PureComponent<
19
+ // CarouselProps,
20
+ // CarouselState
21
+ // > {
22
+ // static defaultProps = {
23
+ // activeSlideAlignment: 'center',
24
+ // activeSlideOffset: 20,
25
+ // apparitionDelay: 0,
26
+ // autoplay: false,
27
+ // autoplayDelay: 1000,
28
+ // autoplayInterval: 3000,
29
+ // callbackOffsetMargin: 5,
30
+ // containerCustomStyle: {},
31
+ // contentContainerCustomStyle: {},
32
+ // enableSnap: true,
33
+ // firstItem: 0,
34
+ // hasParallaxImages: false,
35
+ // inactiveSlideOpacity: 0.7,
36
+ // inactiveSlideScale: 0.9,
37
+ // inactiveSlideShift: 0,
38
+ // layout: 'default',
39
+ // loop: false,
40
+ // loopClonesPerSide: 3,
41
+ // scrollEnabled: true,
42
+ // slideStyle: {},
43
+ // shouldOptimizeUpdates: true,
44
+ // useScrollView: !Animated.FlatList,
45
+ // vertical: false,
46
+ // isCustomScrollWidth: false,
47
+ // disableIntervalMomentum: IS_ANDROID,
48
+ // useExperimentalSnap: IS_ANDROID,
49
+ // };
50
+ //
51
+ // _activeItem;
52
+ // _onScrollActiveItem;
53
+ // _previousFirstItem;
54
+ // _previousItemsLength;
55
+ // _mounted;
56
+ // _positions: Position[];
57
+ // _currentScrollOffset;
58
+ // _scrollEnabled;
59
+ // _initTimeout?: NodeJS.Timeout;
60
+ // _apparitionTimeout?: NodeJS.Timeout;
61
+ // _hackSlideAnimationTimeout?: NodeJS.Timeout;
62
+ // _enableAutoplayTimeout?: NodeJS.Timeout;
63
+ // _autoplayTimeout?: NodeJS.Timeout;
64
+ // _snapNoMomentumTimeout?: NodeJS.Timeout;
65
+ // _androidRepositioningTimeout?: NodeJS.Timeout;
66
+ // _scrollPos?: Animated.Value;
67
+ // _onScrollHandler?: (...args: any[]) => void;
68
+ // _autoplay?: boolean;
69
+ // _autoplaying?: boolean;
70
+ // _autoplayInterval?: NodeJS.Timeout;
71
+ // _carouselRef?: {scrollTo: any; scrollToOffset: any; getNode: () => any};
72
+ // _onLayoutInitDone?: boolean;
73
+ // constructor(props: CarouselProps) {
74
+ // super(props);
75
+ //
76
+ // this.state = {
77
+ // hideCarousel: !!props.apparitionDelay,
78
+ // interpolators: [],
79
+ // };
80
+ //
81
+ // const initialActiveItem = this._getFirstItem(props.firstItem);
82
+ // this._activeItem = initialActiveItem;
83
+ // this._onScrollActiveItem = initialActiveItem;
84
+ // this._previousFirstItem = initialActiveItem;
85
+ // this._previousItemsLength = initialActiveItem;
86
+ //
87
+ // this._mounted = false;
88
+ // this._positions = [];
89
+ // this._currentScrollOffset = 0;
90
+ // this._scrollEnabled = props.scrollEnabled;
91
+ //
92
+ // this._getItemLayout = this._getItemLayout.bind(this);
93
+ // this._getKeyExtractor = this._getKeyExtractor.bind(this);
94
+ // this._onLayout = this._onLayout.bind(this);
95
+ // this._onScroll = this._onScroll.bind(this);
96
+ // this._onMomentumScrollEnd = this._onMomentumScrollEnd.bind(this);
97
+ // this._onTouchStart = this._onTouchStart.bind(this);
98
+ // this._onTouchEnd = this._onTouchEnd.bind(this);
99
+ // this._renderItem = this._renderItem.bind(this);
100
+ // this._setScrollHandler(props);
101
+ // }
102
+ //
103
+ // get realIndex() {
104
+ // return this._activeItem;
105
+ // }
106
+ //
107
+ // get currentIndex() {
108
+ // return this._getDataIndex(this._activeItem);
109
+ // }
110
+ //
111
+ // get currentScrollPosition() {
112
+ // return this._currentScrollOffset;
113
+ // }
114
+ //
115
+ // componentDidMount() {
116
+ // const {apparitionDelay, autoplay, firstItem} = this.props;
117
+ //
118
+ // this._mounted = true;
119
+ // this._initPositionsAndInterpolators();
120
+ //
121
+ // // Without 'requestAnimationFrame' or a `0` timeout, images will randomly not be rendered on Android...
122
+ // this._initTimeout = setTimeout(() => {
123
+ // if (!this._mounted) {
124
+ // return;
125
+ // }
126
+ //
127
+ // const apparitionCallback = () => {
128
+ // if (apparitionDelay) {
129
+ // this.setState({hideCarousel: false});
130
+ // }
131
+ // if (autoplay) {
132
+ // this.startAutoplay();
133
+ // }
134
+ // };
135
+ //
136
+ // // FlatList will use its own built-in prop `initialScrollIndex`
137
+ // if (this._needsScrollView()) {
138
+ // const _firstItem = this._getFirstItem(firstItem);
139
+ // this._snapToItem(_firstItem, false, false, true);
140
+ // // this._hackActiveSlideAnimation(_firstItem);
141
+ // }
142
+ //
143
+ // if (apparitionDelay) {
144
+ // this._apparitionTimeout = setTimeout(() => {
145
+ // apparitionCallback();
146
+ // }, apparitionDelay);
147
+ // } else {
148
+ // apparitionCallback();
149
+ // }
150
+ // }, 1);
151
+ // }
152
+ //
153
+ // componentDidUpdate(prevProps: CarouselProps) {
154
+ // const {interpolators} = this.state;
155
+ // const {firstItem, scrollEnabled} = this.props;
156
+ // const itemsLength = this._getCustomDataLength(this.props);
157
+ //
158
+ // if (!itemsLength) {
159
+ // return;
160
+ // }
161
+ //
162
+ // const nextFirstItem = this._getFirstItem(firstItem, this.props);
163
+ // let nextActiveItem =
164
+ // typeof this._activeItem !== 'undefined'
165
+ // ? this._activeItem
166
+ // : nextFirstItem;
167
+ //
168
+ // const hasNewSize =
169
+ // prevProps.itemWidth !== this.props.itemWidth ||
170
+ // prevProps.sliderWidth !== this.props.sliderWidth;
171
+ //
172
+ // if (nextActiveItem > itemsLength - 1) {
173
+ // nextActiveItem = itemsLength - 1;
174
+ // }
175
+ //
176
+ // if (scrollEnabled !== prevProps.scrollEnabled) {
177
+ // this._setScrollEnabled(scrollEnabled);
178
+ // }
179
+ //
180
+ // if (interpolators.length !== itemsLength || hasNewSize) {
181
+ // this._activeItem = nextActiveItem;
182
+ // this._previousItemsLength = itemsLength;
183
+ //
184
+ // this._initPositionsAndInterpolators(this.props);
185
+ //
186
+ // if (this._previousItemsLength > itemsLength) {
187
+ // this._hackActiveSlideAnimation(nextActiveItem);
188
+ // }
189
+ //
190
+ // if (hasNewSize) {
191
+ // this._snapToItem(nextActiveItem, false, false, true);
192
+ // }
193
+ // } else if (
194
+ // nextFirstItem !== this._previousFirstItem &&
195
+ // nextFirstItem !== this._activeItem
196
+ // ) {
197
+ // this._activeItem = nextFirstItem;
198
+ // this._previousFirstItem = nextFirstItem;
199
+ // this._snapToItem(nextFirstItem, false, true, true);
200
+ // }
201
+ //
202
+ // if (this.props.onScroll !== prevProps.onScroll) {
203
+ // this._setScrollHandler(this.props);
204
+ // }
205
+ // }
206
+ //
207
+ // componentWillUnmount() {
208
+ // this._mounted = false;
209
+ // this.stopAutoplay();
210
+ // clearTimeout(this._initTimeout);
211
+ // clearTimeout(this._apparitionTimeout);
212
+ // clearTimeout(this._hackSlideAnimationTimeout);
213
+ // clearTimeout(this._enableAutoplayTimeout);
214
+ // clearTimeout(this._autoplayTimeout);
215
+ // clearTimeout(this._snapNoMomentumTimeout);
216
+ // clearTimeout(this._androidRepositioningTimeout);
217
+ // }
218
+ //
219
+ // _setScrollHandler(props: CarouselProps) {
220
+ // const scrollEventConfig = {
221
+ // listener: this._onScroll,
222
+ // useNativeDriver: true,
223
+ // };
224
+ // this._scrollPos = new Animated.Value(0);
225
+ // const argMapping = [{nativeEvent: {contentOffset: {x: this._scrollPos}}}];
226
+ //
227
+ // if (props.onScroll && Array.isArray(props.onScroll._argMapping)) {
228
+ // argMapping.pop();
229
+ // const [argMap] = props.onScroll._argMapping;
230
+ // if (argMap && argMap.nativeEvent && argMap.nativeEvent.contentOffset) {
231
+ // this._scrollPos =
232
+ // argMap.nativeEvent.contentOffset.x ||
233
+ // argMap.nativeEvent.contentOffset.y ||
234
+ // this._scrollPos;
235
+ // }
236
+ // argMapping.push(...props.onScroll._argMapping);
237
+ // }
238
+ // this._onScrollHandler = Animated.event(argMapping, scrollEventConfig);
239
+ // }
240
+ //
241
+ // _needsScrollView() {
242
+ // const {useScrollView} = this.props;
243
+ // return IS_ANDROID
244
+ // ? useScrollView || !Animated.FlatList
245
+ // : useScrollView || !Animated.FlatList;
246
+ // }
247
+ //
248
+ // _needsRTLAdaptations() {
249
+ // return IS_RTL && IS_ANDROID;
250
+ // }
251
+ //
252
+ // _enableLoop() {
253
+ // const {data, enableSnap, loop} = this.props;
254
+ // return enableSnap && loop && data && data.length && data.length > 1;
255
+ // }
256
+ //
257
+ // _shouldAnimateSlides(props = this.props) {
258
+ // const {
259
+ // inactiveSlideOpacity,
260
+ // inactiveSlideScale,
261
+ // scrollInterpolator,
262
+ // slideInterpolatedStyle,
263
+ // } = props;
264
+ // return (
265
+ // inactiveSlideOpacity < 1 ||
266
+ // inactiveSlideScale < 1 ||
267
+ // !!scrollInterpolator ||
268
+ // !!slideInterpolatedStyle
269
+ // );
270
+ // }
271
+ //
272
+ // _shouldRepositionScroll(index: number) {
273
+ // const {data, enableSnap, loopClonesPerSide} = this.props;
274
+ // const dataLength = data && data.length;
275
+ // return !(
276
+ // !enableSnap ||
277
+ // !dataLength ||
278
+ // !this._enableLoop() ||
279
+ // (index >= loopClonesPerSide && index < dataLength + loopClonesPerSide)
280
+ // );
281
+ // }
282
+ //
283
+ // _isMultiple(x: number, y: number) {
284
+ // return Math.round(Math.round(x / y) / (1 / y)) === Math.round(x);
285
+ // }
286
+ //
287
+ // _getCustomData(props = this.props) {
288
+ // const {data, loopClonesPerSide} = props;
289
+ // const dataLength = data && data.length;
290
+ //
291
+ // if (!dataLength) {
292
+ // return [];
293
+ // }
294
+ //
295
+ // if (!this._enableLoop()) {
296
+ // return data;
297
+ // }
298
+ //
299
+ // let previousItems = [];
300
+ // let nextItems = [];
301
+ //
302
+ // if (loopClonesPerSide > dataLength) {
303
+ // const dataMultiplier = Math.floor(loopClonesPerSide / dataLength);
304
+ // const remainder = loopClonesPerSide % dataLength;
305
+ //
306
+ // for (let i = 0; i < dataMultiplier; i++) {
307
+ // previousItems.push(...data);
308
+ // nextItems.push(...data);
309
+ // }
310
+ //
311
+ // previousItems.unshift(...data.slice(-remainder));
312
+ // nextItems.push(...data.slice(0, remainder));
313
+ // } else {
314
+ // previousItems = data.slice(-loopClonesPerSide);
315
+ // nextItems = data.slice(0, loopClonesPerSide);
316
+ // }
317
+ //
318
+ // return previousItems.concat(data, nextItems);
319
+ // }
320
+ //
321
+ // _getCustomDataLength(props = this.props) {
322
+ // const {data, loopClonesPerSide} = props;
323
+ // const dataLength = data && data.length;
324
+ //
325
+ // if (!dataLength) {
326
+ // return 0;
327
+ // }
328
+ //
329
+ // return this._enableLoop() ? dataLength + 2 * loopClonesPerSide : dataLength;
330
+ // }
331
+ //
332
+ // _getCustomIndex(index: number, props = this.props) {
333
+ // const itemsLength = this._getCustomDataLength(props);
334
+ //
335
+ // if (!itemsLength || typeof index === 'undefined') {
336
+ // return 0;
337
+ // }
338
+ //
339
+ // return this._needsRTLAdaptations() ? itemsLength - index - 1 : index;
340
+ // }
341
+ //
342
+ // _getDataIndex(index: number) {
343
+ // const {data, loopClonesPerSide} = this.props;
344
+ // const dataLength = data && data.length;
345
+ // if (!this._enableLoop() || !dataLength) {
346
+ // return index;
347
+ // }
348
+ //
349
+ // if (index >= dataLength + loopClonesPerSide) {
350
+ // return loopClonesPerSide > dataLength
351
+ // ? (index - loopClonesPerSide) % dataLength
352
+ // : index - dataLength - loopClonesPerSide;
353
+ // } else if (index < loopClonesPerSide) {
354
+ // if (loopClonesPerSide > dataLength) {
355
+ // const baseDataIndexes = [];
356
+ // const dataIndexes = [];
357
+ // const dataMultiplier = Math.floor(loopClonesPerSide / dataLength);
358
+ // const remainder = loopClonesPerSide % dataLength;
359
+ //
360
+ // for (let i = 0; i < dataLength; i++) {
361
+ // baseDataIndexes.push(i);
362
+ // }
363
+ //
364
+ // for (let j = 0; j < dataMultiplier; j++) {
365
+ // dataIndexes.push(...baseDataIndexes);
366
+ // }
367
+ //
368
+ // dataIndexes.unshift(...baseDataIndexes.slice(-remainder));
369
+ // return dataIndexes[index];
370
+ // } else {
371
+ // return index + dataLength - loopClonesPerSide;
372
+ // }
373
+ // } else {
374
+ // return index - loopClonesPerSide;
375
+ // }
376
+ // }
377
+ // //
378
+ // // _getPositionIndex(index: number) {
379
+ // // const {loop, loopClonesPerSide} = this.props;
380
+ // // return loop ? index + loopClonesPerSide : index;
381
+ // // }
382
+ //
383
+ // _getSnapOffsets(props = this.props) {
384
+ // const offset = this._getItemMainDimension();
385
+ // if (!props.enableSnap) return;
386
+ // return [...Array(this._getCustomDataLength(props))].map((_, i) => {
387
+ // return i * offset;
388
+ // });
389
+ // }
390
+ //
391
+ // _getFirstItem(index: number, props = this.props) {
392
+ // const {loopClonesPerSide} = props;
393
+ // const itemsLength = this._getCustomDataLength(props);
394
+ //
395
+ // if (!itemsLength || index > itemsLength - 1 || index < 0) {
396
+ // return 0;
397
+ // }
398
+ //
399
+ // return this._enableLoop() ? index + loopClonesPerSide : index;
400
+ // }
401
+ //
402
+ // _getWrappedRef() {
403
+ // if (
404
+ // this._carouselRef &&
405
+ // ((this._needsScrollView() && this._carouselRef.scrollTo) ||
406
+ // (!this._needsScrollView() && this._carouselRef.scrollToOffset))
407
+ // ) {
408
+ // return this._carouselRef;
409
+ // }
410
+ // return (
411
+ // this._carouselRef &&
412
+ // this._carouselRef.getNode &&
413
+ // this._carouselRef.getNode()
414
+ // );
415
+ // }
416
+ //
417
+ // _getScrollEnabled() {
418
+ // return this._scrollEnabled;
419
+ // }
420
+ //
421
+ // _setScrollEnabled(scrollEnabled = true) {
422
+ // const wrappedRef = this._getWrappedRef();
423
+ //
424
+ // if (!wrappedRef || !wrappedRef.setNativeProps) {
425
+ // return;
426
+ // }
427
+ //
428
+ // wrappedRef.setNativeProps({scrollEnabled});
429
+ // this._scrollEnabled = scrollEnabled;
430
+ // }
431
+ //
432
+ // _getItemMainDimension() {
433
+ // return this.props.itemWidth || 20;
434
+ // }
435
+ //
436
+ // _getItemScrollOffset(index: number) {
437
+ // return (
438
+ // this._positions && this._positions[index] && this._positions[index].start
439
+ // );
440
+ // }
441
+ //
442
+ // _getItemLayout(_: any, index: number) {
443
+ // const itemMainDimension = this._getItemMainDimension();
444
+ // return {
445
+ // index,
446
+ // length: itemMainDimension,
447
+ // offset: itemMainDimension * index,
448
+ // };
449
+ // }
450
+ //
451
+ // _getKeyExtractor(_: any, index: any) {
452
+ // return this._needsScrollView()
453
+ // ? `scrollview-item-${index}`
454
+ // : `flatlist-item-${index}`;
455
+ // }
456
+ //
457
+ // _getScrollOffset(event: NativeSyntheticEvent<NativeScrollEvent>) {
458
+ // return event.nativeEvent.contentOffset.x;
459
+ // }
460
+ //
461
+ // _getContainerInnerMargin(opposite = false) {
462
+ // const {
463
+ // activeSlideAlignment,
464
+ // sliderWidth = 100,
465
+ // itemWidth = 20,
466
+ // } = this.props;
467
+ //
468
+ // if (
469
+ // (activeSlideAlignment === 'start' && !opposite) ||
470
+ // (activeSlideAlignment === 'end' && opposite)
471
+ // ) {
472
+ // return 0;
473
+ // } else if (
474
+ // (activeSlideAlignment === 'end' && !opposite) ||
475
+ // (activeSlideAlignment === 'start' && opposite)
476
+ // ) {
477
+ // return sliderWidth - itemWidth;
478
+ // } else {
479
+ // return (sliderWidth - itemWidth) / 2;
480
+ // }
481
+ // }
482
+ //
483
+ // _getActiveSlideOffset() {
484
+ // const {activeSlideOffset} = this.props;
485
+ // const itemMainDimension = this._getItemMainDimension();
486
+ // const minOffset = 10;
487
+ // return itemMainDimension / 2 - activeSlideOffset >= minOffset
488
+ // ? activeSlideOffset
489
+ // : minOffset;
490
+ // }
491
+ //
492
+ // _getActiveItem(offset: number) {
493
+ // const itemMainDimension = this._getItemMainDimension();
494
+ // const center = offset + itemMainDimension / 2;
495
+ // const activeSlideOffset = this._getActiveSlideOffset();
496
+ // const lastIndex = this._positions.length - 1;
497
+ // let itemIndex;
498
+ //
499
+ // if (offset <= 0) {
500
+ // return 0;
501
+ // }
502
+ //
503
+ // if (
504
+ // this._positions[lastIndex] &&
505
+ // offset >= this._positions[lastIndex].start
506
+ // ) {
507
+ // return lastIndex;
508
+ // }
509
+ //
510
+ // for (let i = 0; i < this._positions.length; i++) {
511
+ // const {start, end} = this._positions[i];
512
+ // if (
513
+ // center + activeSlideOffset >= start &&
514
+ // center - activeSlideOffset <= end
515
+ // ) {
516
+ // itemIndex = i;
517
+ // break;
518
+ // }
519
+ // }
520
+ //
521
+ // return itemIndex || 0;
522
+ // }
523
+ //
524
+ // _getSlideInterpolatedStyle(index: number, animatedValue: Animated.Value) {
525
+ // const {slideInterpolatedStyle} = this.props;
526
+ //
527
+ // if (slideInterpolatedStyle) {
528
+ // return slideInterpolatedStyle(index, animatedValue, this.props);
529
+ // } else {
530
+ // return defaultAnimatedStyles(index, animatedValue, this.props);
531
+ // }
532
+ // }
533
+ //
534
+ // _initPositionsAndInterpolators(props = this.props) {
535
+ // const {data, scrollInterpolator} = props;
536
+ // const itemMainDimension = this._getItemMainDimension();
537
+ //
538
+ // if (!data || !data.length) {
539
+ // return;
540
+ // }
541
+ //
542
+ // const interpolators: any[] = [];
543
+ // this._positions = [];
544
+ //
545
+ // this._getCustomData(props).forEach((_itemData, index) => {
546
+ // const _index = this._getCustomIndex(index, props);
547
+ // let animatedValue;
548
+ //
549
+ // this._positions[index] = {
550
+ // start: index * itemMainDimension,
551
+ // end: index * itemMainDimension + itemMainDimension,
552
+ // };
553
+ //
554
+ // if (!this._shouldAnimateSlides(props) || !this._scrollPos) {
555
+ // animatedValue = new Animated.Value(1);
556
+ // } else {
557
+ // let interpolator;
558
+ //
559
+ // if (scrollInterpolator) {
560
+ // interpolator = scrollInterpolator(_index, props);
561
+ // }
562
+ //
563
+ // if (
564
+ // !interpolator ||
565
+ // !interpolator.inputRange ||
566
+ // !interpolator.outputRange
567
+ // ) {
568
+ // interpolator = defaultScrollInterpolator(_index, props);
569
+ // }
570
+ //
571
+ // animatedValue = this._scrollPos.interpolate({
572
+ // ...interpolator,
573
+ // extrapolate: 'clamp',
574
+ // });
575
+ // }
576
+ //
577
+ // interpolators.push(animatedValue);
578
+ // });
579
+ //
580
+ // this.setState({interpolators});
581
+ // }
582
+ //
583
+ // _hackActiveSlideAnimation(index: number, scrollValue = 1) {
584
+ // const offset = this._getItemScrollOffset(index);
585
+ //
586
+ // if (!this._mounted || !this._carouselRef || typeof offset === 'undefined') {
587
+ // return;
588
+ // }
589
+ //
590
+ // const multiplier = this._currentScrollOffset === 0 ? 1 : -1;
591
+ // const scrollDelta = scrollValue * multiplier;
592
+ //
593
+ // this._scrollTo({
594
+ // offset: offset + scrollDelta,
595
+ // animated: false,
596
+ // });
597
+ //
598
+ // clearTimeout(this._hackSlideAnimationTimeout);
599
+ // this._hackSlideAnimationTimeout = setTimeout(() => {
600
+ // this._scrollTo({
601
+ // offset,
602
+ // animated: false,
603
+ // });
604
+ // }, 1);
605
+ // }
606
+ //
607
+ // _repositionScroll(index: number, animated = false) {
608
+ // const {data, loopClonesPerSide} = this.props;
609
+ // const dataLength = data && data.length;
610
+ //
611
+ // if (typeof index === 'undefined' || !this._shouldRepositionScroll(index)) {
612
+ // return;
613
+ // }
614
+ //
615
+ // let repositionTo = index;
616
+ //
617
+ // if (index >= dataLength + loopClonesPerSide) {
618
+ // repositionTo = index - dataLength;
619
+ // } else if (index < loopClonesPerSide) {
620
+ // repositionTo = index + dataLength;
621
+ // }
622
+ //
623
+ // this._snapToItem(repositionTo, animated, false);
624
+ // }
625
+ //
626
+ // _scrollTo(info: {offset?: number; index?: number; animated?: boolean}) {
627
+ // const {offset, index, animated = true} = info;
628
+ // const wrappedRef = this._getWrappedRef();
629
+ // if (
630
+ // !this._mounted ||
631
+ // !wrappedRef ||
632
+ // (typeof offset === 'undefined' && typeof index === 'undefined')
633
+ // ) {
634
+ // return;
635
+ // }
636
+ //
637
+ // let scrollToOffset;
638
+ // if (typeof index !== 'undefined') {
639
+ // scrollToOffset = this._getItemScrollOffset(index);
640
+ // } else {
641
+ // scrollToOffset = offset;
642
+ // }
643
+ //
644
+ // if (typeof scrollToOffset === 'undefined') {
645
+ // return;
646
+ // }
647
+ //
648
+ // const options = this._needsScrollView()
649
+ // ? {
650
+ // x: offset,
651
+ // y: 0,
652
+ // animated,
653
+ // }
654
+ // : {
655
+ // offset,
656
+ // animated,
657
+ // };
658
+ //
659
+ // if (this._needsScrollView()) {
660
+ // wrappedRef.scrollTo(options);
661
+ // } else {
662
+ // wrappedRef.scrollToOffset(options);
663
+ // }
664
+ // }
665
+ //
666
+ // _onTouchStart(event: any) {
667
+ // const {onTouchStart} = this.props;
668
+ //
669
+ // if (this._getScrollEnabled() !== false && this._autoplaying) {
670
+ // this.pauseAutoPlay();
671
+ // }
672
+ //
673
+ // onTouchStart && onTouchStart(event);
674
+ // }
675
+ //
676
+ // _onTouchEnd(event: NativeSyntheticEvent<NativeScrollEvent>) {
677
+ // const {onTouchEnd} = this.props;
678
+ //
679
+ // if (
680
+ // this._getScrollEnabled() !== false &&
681
+ // this._autoplay &&
682
+ // !this._autoplaying
683
+ // ) {
684
+ // this.startAutoplay();
685
+ // }
686
+ //
687
+ // onTouchEnd && onTouchEnd(event);
688
+ // }
689
+ //
690
+ // _onScroll(event: NativeSyntheticEvent<NativeScrollEvent>) {
691
+ // const {onScroll, onScrollIndexChanged, onSnapToItem} = this.props;
692
+ // const scrollOffset = event
693
+ // ? this._getScrollOffset(event)
694
+ // : this._currentScrollOffset;
695
+ // const nextActiveItem = this._getActiveItem(scrollOffset);
696
+ // const dataLength = this._getCustomDataLength();
697
+ // const lastItemScrollOffset = this._getItemScrollOffset(dataLength - 1);
698
+ //
699
+ // this._currentScrollOffset = scrollOffset;
700
+ //
701
+ // if (nextActiveItem !== this._onScrollActiveItem) {
702
+ // this._onScrollActiveItem = nextActiveItem;
703
+ // onScrollIndexChanged &&
704
+ // onScrollIndexChanged(this._getDataIndex(nextActiveItem));
705
+ //
706
+ // onSnapToItem && onSnapToItem(this._getDataIndex(nextActiveItem));
707
+ // }
708
+ //
709
+ // if (
710
+ // (IS_IOS && scrollOffset > lastItemScrollOffset) ||
711
+ // (IS_ANDROID &&
712
+ // Math.floor(scrollOffset) > Math.floor(lastItemScrollOffset))
713
+ // ) {
714
+ // this._activeItem = nextActiveItem;
715
+ // this._repositionScroll(nextActiveItem);
716
+ // }
717
+ //
718
+ // if (typeof onScroll === 'function' && event) {
719
+ // onScroll(event);
720
+ // }
721
+ // }
722
+ //
723
+ // _onMomentumScrollEnd(event: NativeSyntheticEvent<NativeScrollEvent>) {
724
+ // const {
725
+ // autoplayDelay,
726
+ // onMomentumScrollEnd,
727
+ // onSnapToItem,
728
+ // itemWidth = 20,
729
+ // } = this.props;
730
+ // const scrollOffset = event
731
+ // ? this._getScrollOffset(event)
732
+ // : this._currentScrollOffset;
733
+ // const nextActiveItem = this._getActiveItem(scrollOffset);
734
+ // const hasSnapped = this._isMultiple(scrollOffset, itemWidth || 20);
735
+ //
736
+ // if (nextActiveItem !== this._activeItem) {
737
+ // this._activeItem = nextActiveItem;
738
+ // onSnapToItem && onSnapToItem(this._getDataIndex(nextActiveItem));
739
+ //
740
+ // if (hasSnapped && IS_ANDROID) {
741
+ // this._repositionScroll(nextActiveItem);
742
+ // } else if (IS_IOS) {
743
+ // this._repositionScroll(nextActiveItem);
744
+ // }
745
+ // }
746
+ //
747
+ // onMomentumScrollEnd && onMomentumScrollEnd(event);
748
+ //
749
+ // if (IS_ANDROID && this._autoplay && !this._autoplaying) {
750
+ // clearTimeout(this._enableAutoplayTimeout);
751
+ // this._enableAutoplayTimeout = setTimeout(() => {
752
+ // this.startAutoplay();
753
+ // }, autoplayDelay);
754
+ // }
755
+ // }
756
+ //
757
+ // _onLayout(event: LayoutChangeEvent) {
758
+ // const {onLayout} = this.props;
759
+ //
760
+ // if (this._onLayoutInitDone) {
761
+ // this._initPositionsAndInterpolators();
762
+ // this._snapToItem(this._activeItem, false, false, true);
763
+ // } else {
764
+ // this._onLayoutInitDone = true;
765
+ // }
766
+ //
767
+ // onLayout && onLayout(event);
768
+ // }
769
+ //
770
+ // _snapToItem(
771
+ // index: number,
772
+ // animated = true,
773
+ // fireCallback = true,
774
+ // forceScrollTo = false,
775
+ // ) {
776
+ // const {onSnapToItem} = this.props;
777
+ // const itemsLength = this._getCustomDataLength();
778
+ // const wrappedRef = this._getWrappedRef();
779
+ // if (!itemsLength || !wrappedRef) {
780
+ // return;
781
+ // }
782
+ //
783
+ // if (!index || index < 0) {
784
+ // index = 0;
785
+ // } else if (itemsLength > 0 && index >= itemsLength) {
786
+ // index = itemsLength - 1;
787
+ // }
788
+ //
789
+ // if (index === this._activeItem && !forceScrollTo) {
790
+ // return;
791
+ // }
792
+ //
793
+ // const offset = this._getItemScrollOffset(index);
794
+ //
795
+ // if (offset === undefined) {
796
+ // return;
797
+ // }
798
+ //
799
+ // this._scrollTo({
800
+ // offset,
801
+ // animated,
802
+ // });
803
+ //
804
+ // const requiresManualTrigger = !animated || IS_ANDROID;
805
+ // if (requiresManualTrigger) {
806
+ // this._activeItem = index;
807
+ //
808
+ // if (fireCallback) {
809
+ // onSnapToItem && onSnapToItem(this._getDataIndex(index));
810
+ // }
811
+ //
812
+ // if (IS_ANDROID && this._shouldRepositionScroll(index)) {
813
+ // if (animated) {
814
+ // this._androidRepositioningTimeout = setTimeout(() => {
815
+ // this._repositionScroll(index, false);
816
+ // }, 400);
817
+ // } else {
818
+ // this._repositionScroll(index);
819
+ // }
820
+ // }
821
+ // }
822
+ // }
823
+ //
824
+ // startAutoplay() {
825
+ // const {autoplayInterval, autoplayDelay} = this.props;
826
+ // this._autoplay = true;
827
+ //
828
+ // if (this._autoplaying) {
829
+ // return;
830
+ // }
831
+ //
832
+ // clearTimeout(this._autoplayTimeout);
833
+ // this._autoplayTimeout = setTimeout(() => {
834
+ // this._autoplaying = true;
835
+ // this._autoplayInterval = setInterval(() => {
836
+ // if (this._autoplaying) {
837
+ // this.snapToNext();
838
+ // }
839
+ // }, autoplayInterval);
840
+ // }, autoplayDelay);
841
+ // }
842
+ //
843
+ // pauseAutoPlay() {
844
+ // this._autoplaying = false;
845
+ // clearTimeout(this._autoplayTimeout);
846
+ // clearTimeout(this._enableAutoplayTimeout);
847
+ // clearInterval(this._autoplayInterval);
848
+ // }
849
+ //
850
+ // stopAutoplay() {
851
+ // this._autoplay = false;
852
+ // this.pauseAutoPlay();
853
+ // }
854
+ //
855
+ // snapToNext(animated = true, fireCallback = true) {
856
+ // const itemsLength = this._getCustomDataLength();
857
+ //
858
+ // let newIndex = this._activeItem + 1;
859
+ // if (newIndex > itemsLength - 1) {
860
+ // newIndex = 0;
861
+ // }
862
+ // this._snapToItem(newIndex, animated, fireCallback);
863
+ // }
864
+ //
865
+ // snapToPrev(animated = true, fireCallback = true) {
866
+ // const itemsLength = this._getCustomDataLength();
867
+ //
868
+ // let newIndex = this._activeItem - 1;
869
+ // if (newIndex < 0) {
870
+ // newIndex = itemsLength - 1;
871
+ // }
872
+ // this._snapToItem(newIndex, animated, fireCallback);
873
+ // }
874
+ //
875
+ // triggerRenderingHack(offset = 1) {
876
+ // this._hackActiveSlideAnimation(this._activeItem, offset);
877
+ // }
878
+ //
879
+ // _renderItem(info: {item: any; index: number}) {
880
+ // const {item, index} = info;
881
+ // const {interpolators} = this.state;
882
+ // const {keyExtractor, slideStyle} = this.props;
883
+ // const animatedValue = interpolators && interpolators[index];
884
+ //
885
+ // if (typeof animatedValue === 'undefined') {
886
+ // return null;
887
+ // }
888
+ //
889
+ // const animate = this._shouldAnimateSlides();
890
+ // const Component = animate ? Animated.View : View;
891
+ // const animatedStyle = animate
892
+ // ? this._getSlideInterpolatedStyle(index, animatedValue)
893
+ // : {};
894
+ //
895
+ // const mainDimension = {width: this.props.itemWidth};
896
+ // const specificProps = this._needsScrollView()
897
+ // ? {
898
+ // key: keyExtractor
899
+ // ? keyExtractor(item, index)
900
+ // : this._getKeyExtractor(item, index),
901
+ // }
902
+ // : {};
903
+ //
904
+ // return (
905
+ // <Component
906
+ // style={[mainDimension, slideStyle, animatedStyle]}
907
+ // pointerEvents="box-none"
908
+ // {...specificProps}>
909
+ // {this.props.renderItem({
910
+ // item,
911
+ // index,
912
+ // })}
913
+ // </Component>
914
+ // );
915
+ // }
916
+ //
917
+ // _getComponentOverridableProps() {
918
+ // const {hideCarousel} = this.state;
919
+ // const {loopClonesPerSide, sliderWidth = 100, itemWidth = 20} = this.props;
920
+ // const visibleItems = Math.ceil(sliderWidth / itemWidth) + 1;
921
+ // const initialNumPerSide = this._enableLoop() ? loopClonesPerSide : 2;
922
+ // const initialNumToRender =
923
+ // visibleItems > 2
924
+ // ? visibleItems + initialNumPerSide * 2
925
+ // : initialNumPerSide * 2;
926
+ // const maxToRenderPerBatch = initialNumToRender;
927
+ // const windowSize = maxToRenderPerBatch;
928
+ // const specificProps = !this._needsScrollView()
929
+ // ? {
930
+ // initialNumToRender,
931
+ // maxToRenderPerBatch,
932
+ // windowSize,
933
+ // }
934
+ // : {};
935
+ //
936
+ // return {
937
+ // ...specificProps,
938
+ // automaticallyAdjustContentInsets: false,
939
+ // decelerationRate: 'fast',
940
+ // directionalLockEnabled: true,
941
+ // disableScrollViewPanResponder: false, // If set to `true`, touch events will be triggered too easily
942
+ // inverted: this._needsRTLAdaptations(),
943
+ // overScrollMode: 'never',
944
+ // pinchGestureEnabled: false,
945
+ // pointerEvents: hideCarousel ? 'none' : 'auto',
946
+ // scrollsToTop: false,
947
+ // showsHorizontalScrollIndicator: false,
948
+ // showsVerticalScrollIndicator: false,
949
+ // };
950
+ // }
951
+ //
952
+ // _getComponentStaticProps() {
953
+ // const {hideCarousel} = this.state;
954
+ // const {
955
+ // activeSlideAlignment,
956
+ // containerCustomStyle,
957
+ // contentContainerCustomStyle,
958
+ // firstItem,
959
+ // getItemLayout,
960
+ // keyExtractor,
961
+ // style,
962
+ // useExperimentalSnap,
963
+ // disableIntervalMomentum,
964
+ // enableSnap,
965
+ // } = this.props;
966
+ // const containerStyle = [
967
+ // containerCustomStyle || style || {},
968
+ // hideCarousel ? {opacity: 0} : {},
969
+ // {
970
+ // width: this.props.sliderWidth,
971
+ // flexDirection: this._needsRTLAdaptations() ? 'row-reverse' : 'row',
972
+ // },
973
+ // ];
974
+ //
975
+ // const contentContainerStyle = [
976
+ // {
977
+ // paddingLeft: this._getContainerInnerMargin(),
978
+ // paddingRight: this._getContainerInnerMargin(true),
979
+ // },
980
+ // contentContainerCustomStyle || {},
981
+ // ];
982
+ //
983
+ // const snapProps =
984
+ // enableSnap && useExperimentalSnap
985
+ // ? {
986
+ // disableIntervalMomentum, // Slide ± one item at a time
987
+ // snapToAlignment: activeSlideAlignment,
988
+ // snapToInterval: this._getItemMainDimension(),
989
+ // }
990
+ // : {
991
+ // snapToOffsets: this._getSnapOffsets(),
992
+ // };
993
+ //
994
+ // const specificProps = !this._needsScrollView()
995
+ // ? {
996
+ // getItemLayout: getItemLayout || this._getItemLayout,
997
+ // initialScrollIndex: this._getFirstItem(firstItem),
998
+ // keyExtractor: keyExtractor || this._getKeyExtractor,
999
+ // numColumns: 1,
1000
+ // renderItem: this._renderItem,
1001
+ // }
1002
+ // : {};
1003
+ //
1004
+ // return {
1005
+ // ...specificProps,
1006
+ // ...snapProps,
1007
+ // ref: (
1008
+ // c: {scrollTo: any; scrollToOffset: any; getNode: () => any} | undefined,
1009
+ // ) => {
1010
+ // this._carouselRef = c;
1011
+ // },
1012
+ // contentContainerStyle: contentContainerStyle,
1013
+ // data: this._getCustomData(),
1014
+ // horizontal: true,
1015
+ // scrollEventThrottle: 1,
1016
+ // style: containerStyle,
1017
+ // onLayout: this._onLayout,
1018
+ // onMomentumScrollEnd: this._onMomentumScrollEnd,
1019
+ // onScroll: this._onScrollHandler,
1020
+ // onTouchStart: this._onTouchStart,
1021
+ // onTouchEnd: this._onTouchEnd,
1022
+ // };
1023
+ // }
1024
+ //
1025
+ // render() {
1026
+ // const {data, renderItem, useScrollView} = this.props;
1027
+ // if (!data || !renderItem) {
1028
+ // return null;
1029
+ // }
1030
+ //
1031
+ // console.log(data);
1032
+ //
1033
+ // const props = {
1034
+ // ...this._getComponentOverridableProps(),
1035
+ // ...this.props,
1036
+ // ...this._getComponentStaticProps(),
1037
+ // };
1038
+ //
1039
+ // return <Animated.FlatList {...props} />;
1040
+ // }
1041
+ // }