Skip to content

Commit 13d9a03

Browse files
committed
dean-added-auto-scroll-classifier
1 parent f33c42d commit 13d9a03

File tree

6 files changed

+32
-27
lines changed

6 files changed

+32
-27
lines changed

demo/src/screens/componentScreens/CarouselScreen.tsx

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ class CarouselScreen extends Component<Props, State> {
5757
limitShownPages: false,
5858
numberOfPagesShown: 7,
5959
currentPage: INITIAL_PAGE,
60-
autoplay: false
60+
autoplay: true
6161
};
6262
}
6363

@@ -82,8 +82,9 @@ class CarouselScreen extends Component<Props, State> {
8282
return Constants.windowWidth - Spacings.s5 * 2;
8383
};
8484

85-
onChangePage = (currentPage: number) => {
85+
onChangePage = (currentPage: number, _: any) => {
8686
this.setState({currentPage});
87+
8788
};
8889

8990
onPagePress = (index: number) => {
@@ -102,23 +103,19 @@ class CarouselScreen extends Component<Props, State> {
102103
</Text>
103104

104105
<View marginH-20 marginB-20>
105-
{renderBooleanOption.call(
106-
this,
106+
{renderBooleanOption.call(this,
107107
'Limit number of pages shown in page control',
108-
'limitShownPages'
109-
)}
108+
'limitShownPages')}
110109
{renderBooleanOption.call(this, 'autoplay', 'autoplay')}
111-
{renderSliderOption.call(
112-
this,
110+
{renderSliderOption.call(this,
113111
'Number of pages shown',
114112
'numberOfPagesShown',
115113
{
116114
min: 5,
117115
max: 10,
118116
step: 1,
119117
initial: 7
120-
}
121-
)}
118+
})}
122119
</View>
123120

124121
<Carousel
@@ -136,6 +133,7 @@ class CarouselScreen extends Component<Props, State> {
136133
pageControlProps={{onPagePress: this.onPagePress, limitShownPages}}
137134
// showCounter
138135
allowAccessibleLayout
136+
loop
139137
>
140138
{_.map([...Array(numberOfPagesShown)], (item, index) => (
141139
<Page

generatedTypes/components/carousel/CarouselPresenter.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { PropsWithChildren } from 'react';
2-
import { CarouselProps, CarouselState } from './types';
1+
import {PropsWithChildren} from 'react';
2+
import {CarouselProps, CarouselState} from './types';
33
export declare function getChildrenLength(props: PropsWithChildren<CarouselProps>): number;
44
export declare function calcOffset(props: CarouselProps, state: Omit<CarouselState, 'initialOffset' | 'prevProps'>): {
55
x: number;

generatedTypes/components/carousel/index.d.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import React, { Component, RefObject, ReactNode, Key } from 'react';
2-
import { ScrollView, LayoutChangeEvent, NativeSyntheticEvent, NativeScrollEvent } from 'react-native';
3-
import { CarouselProps, CarouselState, PageControlPosition } from './types';
4-
export { CarouselProps, PageControlPosition };
1+
import React, {Component, RefObject, ReactNode, Key} from 'react';
2+
import {ScrollView, LayoutChangeEvent, NativeSyntheticEvent, NativeScrollEvent} from 'react-native';
3+
import {CarouselProps, CarouselState, PageControlPosition} from './types';
4+
export {CarouselProps, PageControlPosition};
55
declare type DefaultProps = Partial<CarouselProps>;
66
/**
77
* @description: Carousel for scrolling pages horizontally
@@ -48,7 +48,7 @@ declare class Carousel extends Component<CarouselProps, CarouselState> {
4848
getSnapToOffsets: () => number[] | undefined;
4949
shouldUsePageWidth(): number | false | undefined;
5050
shouldEnablePagination(): boolean | undefined;
51-
onContainerLayout: ({ nativeEvent: { layout: { width: containerWidth, height: containerHeight } } }: LayoutChangeEvent) => void;
51+
onContainerLayout: ({nativeEvent: {layout: {width: containerWidth, height: containerHeight}}}: LayoutChangeEvent) => void;
5252
shouldAllowAccessibilityLayout(): boolean | undefined;
5353
onContentSizeChange: () => void;
5454
onMomentumScrollEnd: () => void;
@@ -63,7 +63,7 @@ declare class Carousel extends Component<CarouselProps, CarouselState> {
6363
renderCarousel(): JSX.Element;
6464
render(): JSX.Element;
6565
}
66-
export { Carousel };
66+
export {Carousel};
6767
declare const _default: React.ComponentClass<CarouselProps & {
6868
useCustomTheme?: boolean | undefined;
6969
}, any> & Carousel & {

generatedTypes/components/carousel/types.d.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { ScrollViewProps, StyleProp, ViewStyle, NativeSyntheticEvent, NativeScrollEvent, PointPropType, Animated } from 'react-native';
2-
import { PageControlProps } from '../pageControl';
1+
import {ScrollViewProps, StyleProp, ViewStyle, NativeSyntheticEvent, NativeScrollEvent, PointPropType, Animated} from 'react-native';
2+
import {PageControlProps} from '../pageControl';
33
export declare enum PageControlPosition {
4-
OVER = "over",
5-
UNDER = "under"
4+
OVER = 'over',
5+
UNDER = 'under'
66
}
77
export interface CarouselProps extends ScrollViewProps {
88
/**

src/components/carousel/index.tsx

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,14 @@ class Carousel extends Component<CarouselProps, CarouselState> {
3737
autoplayTimer?: ReturnType<typeof setTimeout>;
3838
orientationChange?: boolean;
3939
skippedInitialScroll?: boolean;
40+
isAutoScrolled: boolean;
4041

4142
constructor(props: CarouselProps) {
4243
super(props);
4344

4445
const defaultPageWidth = props.loop || !props.pageWidth ? Constants.screenWidth : props.pageWidth;
4546
const pageHeight = props.pageHeight ?? Constants.screenHeight;
46-
47+
this.isAutoScrolled = false;
4748
this.state = {
4849
containerWidth: undefined,
4950
// @ts-ignore (defaultProps)
@@ -167,8 +168,10 @@ class Carousel extends Component<CarouselProps, CarouselState> {
167168

168169
startAutoPlay() {
169170
this.autoplayTimer = setInterval(() => {
171+
this.isAutoScrolled = true;
170172
this.goToNextPage();
171173
}, this.props.autoplayInterval);
174+
172175
}
173176

174177
stopAutoPlay() {
@@ -258,7 +261,8 @@ class Carousel extends Component<CarouselProps, CarouselState> {
258261
if (index < pagesCount) {
259262
this.setState({currentStandingPage: index});
260263
if (currentStandingPage !== index) {
261-
this.props.onChangePage?.(index, currentStandingPage);
264+
this.props.onChangePage?.(index, currentStandingPage, this.isAutoScrolled);
265+
this.isAutoScrolled = false;
262266
}
263267
}
264268
};
@@ -276,12 +280,13 @@ class Carousel extends Component<CarouselProps, CarouselState> {
276280
}
277281

278282
this.goToPage(nextPageIndex, true);
279-
283+
280284
// in case of a loop, after we advanced right to the cloned first page,
281285
// we return silently to the real first page
282286
if (loop && currentPage === pagesCount) {
283287
this.goToPage(0, false);
284288
}
289+
285290
}
286291

287292
onScroll = (event: NativeSyntheticEvent<NativeScrollEvent>) => {
@@ -425,7 +430,7 @@ class Carousel extends Component<CarouselProps, CarouselState> {
425430
const {containerStyle, children} = this.props;
426431

427432
return (
428-
<View style={containerStyle} onLayout={this.onContainerLayout}>
433+
<View style={containerStyle} onLayout={this.onContainerLayout}>
429434
<ScrollView
430435
ref={this.carousel}
431436
showsVerticalScrollIndicator={false}

src/components/carousel/types.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export interface CarouselProps extends ScrollViewProps {
4040
/**
4141
* callback for when page has changed
4242
*/
43-
onChangePage?: (newPageIndex: number, oldPageIndex: number) => void;
43+
onChangePage?: (newPageIndex: number, oldPageIndex: number, isAutoScrolled: boolean) => void;
4444
/**
4545
* callback for onScroll event of the internal ScrollView
4646
*/
@@ -95,6 +95,7 @@ export interface CarouselProps extends ScrollViewProps {
9595
* Carousel scroll offset (pass new Animated.ValueXY())
9696
*/
9797
animatedScrollOffset?: Animated.ValueXY;
98+
9899
}
99100

100101
export interface CarouselState {
@@ -105,6 +106,7 @@ export interface CarouselState {
105106
pageHeight: number;
106107
initialOffset: PointPropType;
107108
prevProps: CarouselProps;
109+
// isAutoScrolled:boolean //dean
108110
}
109111

110112
// @ts-ignore

0 commit comments

Comments
 (0)