react-native-reanimated-carousel 2.2.1 → 2.2.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.
- package/lib/commonjs/Carousel.js +5 -4
- package/lib/commonjs/Carousel.js.map +1 -1
- package/lib/commonjs/hooks/useAutoPlay.js +5 -1
- package/lib/commonjs/hooks/useAutoPlay.js.map +1 -1
- package/lib/commonjs/hooks/useInitProps.js +9 -8
- package/lib/commonjs/hooks/useInitProps.js.map +1 -1
- package/lib/commonjs/hooks/useOnProgressChange.js +5 -5
- package/lib/commonjs/hooks/useOnProgressChange.js.map +1 -1
- package/lib/module/Carousel.js +5 -4
- package/lib/module/Carousel.js.map +1 -1
- package/lib/module/hooks/useAutoPlay.js +5 -1
- package/lib/module/hooks/useAutoPlay.js.map +1 -1
- package/lib/module/hooks/useInitProps.js +9 -8
- package/lib/module/hooks/useInitProps.js.map +1 -1
- package/lib/module/hooks/useOnProgressChange.js +5 -5
- package/lib/module/hooks/useOnProgressChange.js.map +1 -1
- package/lib/typescript/hooks/useInitProps.d.ts +3 -1
- package/lib/typescript/hooks/useOnProgressChange.d.ts +2 -1
- package/package.json +2 -2
- package/src/Carousel.tsx +5 -4
- package/src/hooks/useAutoPlay.ts +4 -1
- package/src/hooks/useInitProps.ts +13 -9
- package/src/hooks/useOnProgressChange.ts +7 -6
package/lib/commonjs/Carousel.js
CHANGED
|
@@ -45,6 +45,7 @@ function Carousel(_props, ref) {
|
|
|
45
45
|
const props = (0, _useInitProps.useInitProps)(_props);
|
|
46
46
|
const {
|
|
47
47
|
data,
|
|
48
|
+
rawData,
|
|
48
49
|
loop,
|
|
49
50
|
mode,
|
|
50
51
|
style,
|
|
@@ -82,7 +83,7 @@ function Carousel(_props, ref) {
|
|
|
82
83
|
(0, _useOnProgressChange.useOnProgressChange)({
|
|
83
84
|
size,
|
|
84
85
|
offsetX,
|
|
85
|
-
|
|
86
|
+
rawData,
|
|
86
87
|
onProgressChange
|
|
87
88
|
});
|
|
88
89
|
const carouselController = (0, _useCarouselController.useCarouselController)({
|
|
@@ -156,11 +157,11 @@ function Carousel(_props, ref) {
|
|
|
156
157
|
const renderLayout = _react.default.useCallback((item, i) => {
|
|
157
158
|
let realIndex = i;
|
|
158
159
|
|
|
159
|
-
if (
|
|
160
|
+
if (rawData.length === _constants.DATA_LENGTH.SINGLE_ITEM) {
|
|
160
161
|
realIndex = i % 1;
|
|
161
162
|
}
|
|
162
163
|
|
|
163
|
-
if (
|
|
164
|
+
if (rawData.length === _constants.DATA_LENGTH.DOUBLE_ITEM) {
|
|
164
165
|
realIndex = i % 2;
|
|
165
166
|
}
|
|
166
167
|
|
|
@@ -177,7 +178,7 @@ function Carousel(_props, ref) {
|
|
|
177
178
|
index: realIndex,
|
|
178
179
|
animationValue
|
|
179
180
|
}));
|
|
180
|
-
}, [
|
|
181
|
+
}, [rawData, offsetX, visibleRanges, renderItem, layoutConfig, customAnimation]);
|
|
181
182
|
|
|
182
183
|
return /*#__PURE__*/_react.default.createElement(_store.CTX.Provider, {
|
|
183
184
|
value: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Carousel.tsx"],"names":["Carousel","_props","ref","props","data","loop","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","commonVariables","size","handlerOffsetX","offsetX","totalSize","length","x","value","isNaN","carouselController","disable","originalLength","_onScrollEnd","onChange","i","duration","next","prev","sharedPreIndex","sharedIndex","computedIndex","getCurrentIndex","start","pause","scrollViewGestureOnScrollBegin","React","useCallback","current","scrollViewGestureOnScrollEnd","goToIndex","animated","to","useImperativeHandle","scrollTo","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","realIndex","DATA_LENGTH","SINGLE_ITEM","DOUBLE_ITEM","animationValue","index","common","styles","container","itemsVertical","itemsHorizontal","map","forwardRef","StyleSheet","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren } from 'react';\nimport Animated, { runOnJS, useDerivedValue } from 'react-native-reanimated';\n\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\nimport { ScrollViewGesture } from './ScrollViewGesture';\nimport { useVisibleRanges } from './hooks/useVisibleRanges';\n\nimport type { ICarouselInstance, TCarouselProps } from './types';\nimport { StyleSheet, View } from 'react-native';\nimport { DATA_LENGTH } from './constants';\nimport { BaseLayout } from './layouts/BaseLayout';\nimport { useLayoutConfig } from './hooks/useLayoutConfig';\nimport { useInitProps } from './hooks/useInitProps';\nimport { CTX } from './store';\nimport { useCommonVariables } from './hooks/useCommonVariables';\nimport { useOnProgressChange } from './hooks/useOnProgressChange';\n\nfunction Carousel<T>(\n _props: PropsWithChildren<TCarouselProps<T>>,\n ref: React.Ref<ICarouselInstance>\n) {\n const props = useInitProps(_props);\n\n const {\n data,\n loop,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffsetX } = commonVariables;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * data.length;\n const x = handlerOffsetX.value % totalSize;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [loop, size, data]);\n\n usePropsErrorBoundary(props);\n useOnProgressChange({ size, offsetX, data, onProgressChange });\n\n const carouselController = useCarouselController({\n loop,\n size,\n handlerOffsetX,\n length: data.length,\n disable: !data.length,\n originalLength: data.length,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n onChange: (i) => !!onSnapToItem && runOnJS(onSnapToItem)(i),\n duration: scrollAnimationDuration,\n });\n\n const {\n next,\n prev,\n sharedPreIndex,\n sharedIndex,\n computedIndex,\n getCurrentIndex,\n } = carouselController;\n\n const { start, pause } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pause();\n onScrollBegin?.();\n }, [onScrollBegin, pause]);\n\n const _onScrollEnd = React.useCallback(() => {\n computedIndex();\n onScrollEnd?.(sharedPreIndex.current, sharedIndex.current);\n }, [sharedPreIndex, sharedIndex, computedIndex, onScrollEnd]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n start();\n _onScrollEnd();\n }, [_onScrollEnd, start]);\n\n const goToIndex = React.useCallback(\n (i: number, animated?: boolean) => {\n carouselController.to(i, animated);\n },\n [carouselController]\n );\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n goToIndex,\n scrollTo: carouselController.scrollTo,\n }),\n [getCurrentIndex, goToIndex, next, prev, carouselController.scrollTo]\n );\n\n const visibleRanges = useVisibleRanges({\n total: data.length,\n viewSize: size,\n translation: handlerOffsetX,\n windowSize,\n });\n\n const layoutConfig = useLayoutConfig<T>({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: T, i: number) => {\n let realIndex = i;\n if (data.length === DATA_LENGTH.SINGLE_ITEM) {\n realIndex = i % 1;\n }\n\n if (data.length === DATA_LENGTH.DOUBLE_ITEM) {\n realIndex = i % 2;\n }\n\n return (\n <BaseLayout\n key={i}\n index={i}\n handlerOffsetX={offsetX}\n visibleRanges={visibleRanges}\n animationStyle={customAnimation || layoutConfig}\n >\n {({ animationValue }) =>\n renderItem({\n item,\n index: realIndex,\n animationValue,\n })\n }\n </BaseLayout>\n );\n },\n [\n data,\n offsetX,\n visibleRanges,\n renderItem,\n layoutConfig,\n customAnimation,\n ]\n );\n\n return (\n <CTX.Provider value={{ props, common: commonVariables }}>\n <View\n style={[\n styles.container,\n { width: width || '100%', height: height || '100%' },\n style,\n ]}\n >\n <ScrollViewGesture\n size={size}\n translation={handlerOffsetX}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n >\n <Animated.View\n key={mode}\n style={[\n styles.container,\n {\n width: width || '100%',\n height: height || '100%',\n },\n style,\n vertical\n ? styles.itemsVertical\n : styles.itemsHorizontal,\n ]}\n >\n {data.map(renderLayout)}\n </Animated.View>\n </ScrollViewGesture>\n </View>\n </CTX.Provider>\n );\n}\n\nexport default React.forwardRef(Carousel) as typeof Carousel;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n itemsHorizontal: {\n flexDirection: 'row',\n },\n itemsVertical: {\n flexDirection: 'column',\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["Carousel.tsx"],"names":["Carousel","_props","ref","props","data","rawData","loop","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","commonVariables","size","handlerOffsetX","offsetX","totalSize","length","x","value","isNaN","carouselController","disable","originalLength","_onScrollEnd","onChange","i","duration","next","prev","sharedPreIndex","sharedIndex","computedIndex","getCurrentIndex","start","pause","scrollViewGestureOnScrollBegin","React","useCallback","current","scrollViewGestureOnScrollEnd","goToIndex","animated","to","useImperativeHandle","scrollTo","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","realIndex","DATA_LENGTH","SINGLE_ITEM","DOUBLE_ITEM","animationValue","index","common","styles","container","itemsVertical","itemsHorizontal","map","forwardRef","StyleSheet","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren } from 'react';\nimport Animated, { runOnJS, useDerivedValue } from 'react-native-reanimated';\n\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\nimport { ScrollViewGesture } from './ScrollViewGesture';\nimport { useVisibleRanges } from './hooks/useVisibleRanges';\n\nimport type { ICarouselInstance, TCarouselProps } from './types';\nimport { StyleSheet, View } from 'react-native';\nimport { DATA_LENGTH } from './constants';\nimport { BaseLayout } from './layouts/BaseLayout';\nimport { useLayoutConfig } from './hooks/useLayoutConfig';\nimport { useInitProps } from './hooks/useInitProps';\nimport { CTX } from './store';\nimport { useCommonVariables } from './hooks/useCommonVariables';\nimport { useOnProgressChange } from './hooks/useOnProgressChange';\n\nfunction Carousel<T>(\n _props: PropsWithChildren<TCarouselProps<T>>,\n ref: React.Ref<ICarouselInstance>\n) {\n const props = useInitProps(_props);\n\n const {\n data,\n rawData,\n loop,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffsetX } = commonVariables;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * data.length;\n const x = handlerOffsetX.value % totalSize;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [loop, size, data]);\n\n usePropsErrorBoundary(props);\n useOnProgressChange({ size, offsetX, rawData, onProgressChange });\n\n const carouselController = useCarouselController({\n loop,\n size,\n handlerOffsetX,\n length: data.length,\n disable: !data.length,\n originalLength: data.length,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n onChange: (i) => !!onSnapToItem && runOnJS(onSnapToItem)(i),\n duration: scrollAnimationDuration,\n });\n\n const {\n next,\n prev,\n sharedPreIndex,\n sharedIndex,\n computedIndex,\n getCurrentIndex,\n } = carouselController;\n\n const { start, pause } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pause();\n onScrollBegin?.();\n }, [onScrollBegin, pause]);\n\n const _onScrollEnd = React.useCallback(() => {\n computedIndex();\n onScrollEnd?.(sharedPreIndex.current, sharedIndex.current);\n }, [sharedPreIndex, sharedIndex, computedIndex, onScrollEnd]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n start();\n _onScrollEnd();\n }, [_onScrollEnd, start]);\n\n const goToIndex = React.useCallback(\n (i: number, animated?: boolean) => {\n carouselController.to(i, animated);\n },\n [carouselController]\n );\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n goToIndex,\n scrollTo: carouselController.scrollTo,\n }),\n [getCurrentIndex, goToIndex, next, prev, carouselController.scrollTo]\n );\n\n const visibleRanges = useVisibleRanges({\n total: data.length,\n viewSize: size,\n translation: handlerOffsetX,\n windowSize,\n });\n\n const layoutConfig = useLayoutConfig<T>({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: T, i: number) => {\n let realIndex = i;\n if (rawData.length === DATA_LENGTH.SINGLE_ITEM) {\n realIndex = i % 1;\n }\n\n if (rawData.length === DATA_LENGTH.DOUBLE_ITEM) {\n realIndex = i % 2;\n }\n\n return (\n <BaseLayout\n key={i}\n index={i}\n handlerOffsetX={offsetX}\n visibleRanges={visibleRanges}\n animationStyle={customAnimation || layoutConfig}\n >\n {({ animationValue }) =>\n renderItem({\n item,\n index: realIndex,\n animationValue,\n })\n }\n </BaseLayout>\n );\n },\n [\n rawData,\n offsetX,\n visibleRanges,\n renderItem,\n layoutConfig,\n customAnimation,\n ]\n );\n\n return (\n <CTX.Provider value={{ props, common: commonVariables }}>\n <View\n style={[\n styles.container,\n { width: width || '100%', height: height || '100%' },\n style,\n ]}\n >\n <ScrollViewGesture\n size={size}\n translation={handlerOffsetX}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n >\n <Animated.View\n key={mode}\n style={[\n styles.container,\n {\n width: width || '100%',\n height: height || '100%',\n },\n style,\n vertical\n ? styles.itemsVertical\n : styles.itemsHorizontal,\n ]}\n >\n {data.map(renderLayout)}\n </Animated.View>\n </ScrollViewGesture>\n </View>\n </CTX.Provider>\n );\n}\n\nexport default React.forwardRef(Carousel) as typeof Carousel;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n itemsHorizontal: {\n flexDirection: 'row',\n },\n itemsVertical: {\n flexDirection: 'column',\n },\n});\n"]}
|
|
@@ -38,9 +38,13 @@ function useAutoPlay(opts) {
|
|
|
38
38
|
stopped.current = true;
|
|
39
39
|
}, []);
|
|
40
40
|
const start = React.useCallback(() => {
|
|
41
|
+
if (!autoPlay) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
41
45
|
stopped.current = false;
|
|
42
46
|
play();
|
|
43
|
-
}, [play]);
|
|
47
|
+
}, [play, autoPlay]);
|
|
44
48
|
React.useEffect(() => {
|
|
45
49
|
if (autoPlay) {
|
|
46
50
|
start();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useAutoPlay.ts"],"names":["useAutoPlay","opts","autoPlay","autoPlayReverse","autoPlayInterval","carouselController","timer","React","useRef","stopped","play","useCallback","current","setTimeout","prev","onFinished","next","pause","clearInterval","start","useEffect"],"mappings":";;;;;;;AAAA;;;;;;AAGO,SAASA,WAAT,CAAqBC,IAArB,EAKJ;AACC,QAAM;AACFC,IAAAA,QAAQ,GAAG,KADT;AAEFC,IAAAA,eAAe,GAAG,KAFhB;AAGFC,IAAAA,gBAHE;AAIFC,IAAAA;AAJE,MAKFJ,IALJ;AAOA,QAAMK,KAAK,GAAGC,KAAK,CAACC,MAAN,EAAd;AACA,QAAMC,OAAO,GAAGF,KAAK,CAACC,MAAN,CAAsB,CAACN,QAAvB,CAAhB;AAEA,QAAMQ,IAAI,GAAGH,KAAK,CAACI,WAAN,CAAkB,MAAM;AACjC,QAAIF,OAAO,CAACG,OAAZ,EAAqB;AACjB;AACH;;AAEDN,IAAAA,KAAK,CAACM,OAAN,GAAgBC,UAAU,CAAC,MAAM;AAC7BV,MAAAA,eAAe,GACTE,kBAAkB,CAACS,IAAnB,CAAwB;AAAEC,QAAAA,UAAU,EAAEL;AAAd,OAAxB,CADS,GAETL,kBAAkB,CAACW,IAAnB,CAAwB;AAAED,QAAAA,UAAU,EAAEL;AAAd,OAAxB,CAFN;AAGH,KAJyB,EAIvBN,gBAJuB,CAA1B;AAKH,GAVY,EAUV,CAACD,eAAD,EAAkBC,gBAAlB,EAAoCC,kBAApC,CAVU,CAAb;AAYA,QAAMY,KAAK,GAAGV,KAAK,CAACI,WAAN,CAAkB,MAAM;AAClCL,IAAAA,KAAK,CAACM,OAAN,IAAiBM,aAAa,CAACZ,KAAK,CAACM,OAAP,CAA9B;AACAH,IAAAA,OAAO,CAACG,OAAR,GAAkB,IAAlB;AACH,GAHa,EAGX,EAHW,CAAd;AAKA,QAAMO,KAAK,GAAGZ,KAAK,CAACI,WAAN,CAAkB,MAAM;
|
|
1
|
+
{"version":3,"sources":["useAutoPlay.ts"],"names":["useAutoPlay","opts","autoPlay","autoPlayReverse","autoPlayInterval","carouselController","timer","React","useRef","stopped","play","useCallback","current","setTimeout","prev","onFinished","next","pause","clearInterval","start","useEffect"],"mappings":";;;;;;;AAAA;;;;;;AAGO,SAASA,WAAT,CAAqBC,IAArB,EAKJ;AACC,QAAM;AACFC,IAAAA,QAAQ,GAAG,KADT;AAEFC,IAAAA,eAAe,GAAG,KAFhB;AAGFC,IAAAA,gBAHE;AAIFC,IAAAA;AAJE,MAKFJ,IALJ;AAOA,QAAMK,KAAK,GAAGC,KAAK,CAACC,MAAN,EAAd;AACA,QAAMC,OAAO,GAAGF,KAAK,CAACC,MAAN,CAAsB,CAACN,QAAvB,CAAhB;AAEA,QAAMQ,IAAI,GAAGH,KAAK,CAACI,WAAN,CAAkB,MAAM;AACjC,QAAIF,OAAO,CAACG,OAAZ,EAAqB;AACjB;AACH;;AAEDN,IAAAA,KAAK,CAACM,OAAN,GAAgBC,UAAU,CAAC,MAAM;AAC7BV,MAAAA,eAAe,GACTE,kBAAkB,CAACS,IAAnB,CAAwB;AAAEC,QAAAA,UAAU,EAAEL;AAAd,OAAxB,CADS,GAETL,kBAAkB,CAACW,IAAnB,CAAwB;AAAED,QAAAA,UAAU,EAAEL;AAAd,OAAxB,CAFN;AAGH,KAJyB,EAIvBN,gBAJuB,CAA1B;AAKH,GAVY,EAUV,CAACD,eAAD,EAAkBC,gBAAlB,EAAoCC,kBAApC,CAVU,CAAb;AAYA,QAAMY,KAAK,GAAGV,KAAK,CAACI,WAAN,CAAkB,MAAM;AAClCL,IAAAA,KAAK,CAACM,OAAN,IAAiBM,aAAa,CAACZ,KAAK,CAACM,OAAP,CAA9B;AACAH,IAAAA,OAAO,CAACG,OAAR,GAAkB,IAAlB;AACH,GAHa,EAGX,EAHW,CAAd;AAKA,QAAMO,KAAK,GAAGZ,KAAK,CAACI,WAAN,CAAkB,MAAM;AAClC,QAAI,CAACT,QAAL,EAAe;AACX;AACH;;AACDO,IAAAA,OAAO,CAACG,OAAR,GAAkB,KAAlB;AACAF,IAAAA,IAAI;AACP,GANa,EAMX,CAACA,IAAD,EAAOR,QAAP,CANW,CAAd;AAQAK,EAAAA,KAAK,CAACa,SAAN,CAAgB,MAAM;AAClB,QAAIlB,QAAJ,EAAc;AACViB,MAAAA,KAAK;AACR,KAFD,MAEO;AACHF,MAAAA,KAAK;AACR;;AACD,WAAOA,KAAP;AACH,GAPD,EAOG,CAACA,KAAD,EAAQE,KAAR,EAAejB,QAAf,CAPH;AASA,SAAO;AACHe,IAAAA,KADG;AAEHE,IAAAA;AAFG,GAAP;AAIH","sourcesContent":["import * as React from 'react';\nimport type { ICarouselController } from './useCarouselController';\n\nexport function useAutoPlay(opts: {\n autoPlay?: boolean;\n autoPlayInterval?: number;\n autoPlayReverse?: boolean;\n carouselController: ICarouselController;\n}) {\n const {\n autoPlay = false,\n autoPlayReverse = false,\n autoPlayInterval,\n carouselController,\n } = opts;\n\n const timer = React.useRef<NodeJS.Timer>();\n const stopped = React.useRef<boolean>(!autoPlay);\n\n const play = React.useCallback(() => {\n if (stopped.current) {\n return;\n }\n\n timer.current = setTimeout(() => {\n autoPlayReverse\n ? carouselController.prev({ onFinished: play })\n : carouselController.next({ onFinished: play });\n }, autoPlayInterval);\n }, [autoPlayReverse, autoPlayInterval, carouselController]);\n\n const pause = React.useCallback(() => {\n timer.current && clearInterval(timer.current);\n stopped.current = true;\n }, []);\n\n const start = React.useCallback(() => {\n if (!autoPlay) {\n return;\n }\n stopped.current = false;\n play();\n }, [play, autoPlay]);\n\n React.useEffect(() => {\n if (autoPlay) {\n start();\n } else {\n pause();\n }\n return pause;\n }, [pause, start, autoPlay]);\n\n return {\n pause,\n start,\n };\n}\n"]}
|
|
@@ -14,7 +14,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
14
14
|
function useInitProps(props) {
|
|
15
15
|
const {
|
|
16
16
|
defaultIndex = 0,
|
|
17
|
-
data:
|
|
17
|
+
data: rawData = [],
|
|
18
18
|
loop = true,
|
|
19
19
|
autoPlayInterval: _autoPlayInterval = 1000,
|
|
20
20
|
scrollAnimationDuration = 500,
|
|
@@ -30,18 +30,18 @@ function useInitProps(props) {
|
|
|
30
30
|
const autoPlayInterval = Math.max(_autoPlayInterval, 0);
|
|
31
31
|
|
|
32
32
|
const data = _react.default.useMemo(() => {
|
|
33
|
-
if (!loop) return
|
|
33
|
+
if (!loop) return rawData;
|
|
34
34
|
|
|
35
|
-
if (
|
|
36
|
-
return [
|
|
35
|
+
if (rawData.length === _constants.DATA_LENGTH.SINGLE_ITEM) {
|
|
36
|
+
return [rawData[0], rawData[0], rawData[0]];
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
if (
|
|
40
|
-
return [
|
|
39
|
+
if (rawData.length === _constants.DATA_LENGTH.DOUBLE_ITEM) {
|
|
40
|
+
return [rawData[0], rawData[1], rawData[0], rawData[1]];
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
return
|
|
44
|
-
}, [
|
|
43
|
+
return rawData;
|
|
44
|
+
}, [rawData, loop]);
|
|
45
45
|
|
|
46
46
|
if (props.mode === 'vertical-stack' || props.mode === 'horizontal-stack') {
|
|
47
47
|
var _props$modeConfig$sho, _props$modeConfig;
|
|
@@ -56,6 +56,7 @@ function useInitProps(props) {
|
|
|
56
56
|
return { ...props,
|
|
57
57
|
defaultIndex,
|
|
58
58
|
data,
|
|
59
|
+
rawData,
|
|
59
60
|
loop,
|
|
60
61
|
autoPlayInterval,
|
|
61
62
|
scrollAnimationDuration,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useInitProps.ts"],"names":["useInitProps","props","defaultIndex","data","
|
|
1
|
+
{"version":3,"sources":["useInitProps.ts"],"names":["useInitProps","props","defaultIndex","data","rawData","loop","autoPlayInterval","_autoPlayInterval","scrollAnimationDuration","style","panGestureHandlerProps","pagingEnabled","enableSnap","width","_width","height","_height","Math","round","max","React","useMemo","length","DATA_LENGTH","SINGLE_ITEM","DOUBLE_ITEM","mode","modeConfig","showLength"],"mappings":";;;;;;;AAAA;;AACA;;;;AAqBO,SAASA,YAAT,CACHC,KADG,EAEwB;AAC3B,QAAM;AACFC,IAAAA,YAAY,GAAG,CADb;AAEFC,IAAAA,IAAI,EAAEC,OAAO,GAAG,EAFd;AAGFC,IAAAA,IAAI,GAAG,IAHL;AAIFC,IAAAA,gBAAgB,EAAEC,iBAAiB,GAAG,IAJpC;AAKFC,IAAAA,uBAAuB,GAAG,GALxB;AAMFC,IAAAA,KAAK,GAAG,EANN;AAOFC,IAAAA,sBAAsB,GAAG,EAPvB;AAQFC,IAAAA,aAAa,GAAG,IARd;AASFC,IAAAA,UAAU,GAAG,IATX;AAUFC,IAAAA,KAAK,EAAEC,MAVL;AAWFC,IAAAA,MAAM,EAAEC;AAXN,MAYFf,KAZJ;AAcA,QAAMY,KAAK,GAAGI,IAAI,CAACC,KAAL,CAAWJ,MAAM,IAAI,CAArB,CAAd;AACA,QAAMC,MAAM,GAAGE,IAAI,CAACC,KAAL,CAAWF,OAAO,IAAI,CAAtB,CAAf;AACA,QAAMV,gBAAgB,GAAGW,IAAI,CAACE,GAAL,CAASZ,iBAAT,EAA4B,CAA5B,CAAzB;;AAEA,QAAMJ,IAAI,GAAGiB,eAAMC,OAAN,CAAmB,MAAM;AAClC,QAAI,CAAChB,IAAL,EAAW,OAAOD,OAAP;;AAEX,QAAIA,OAAO,CAACkB,MAAR,KAAmBC,uBAAYC,WAAnC,EAAgD;AAC5C,aAAO,CAACpB,OAAO,CAAC,CAAD,CAAR,EAAaA,OAAO,CAAC,CAAD,CAApB,EAAyBA,OAAO,CAAC,CAAD,CAAhC,CAAP;AACH;;AAED,QAAIA,OAAO,CAACkB,MAAR,KAAmBC,uBAAYE,WAAnC,EAAgD;AAC5C,aAAO,CAACrB,OAAO,CAAC,CAAD,CAAR,EAAaA,OAAO,CAAC,CAAD,CAApB,EAAyBA,OAAO,CAAC,CAAD,CAAhC,EAAqCA,OAAO,CAAC,CAAD,CAA5C,CAAP;AACH;;AAED,WAAOA,OAAP;AACH,GAZY,EAYV,CAACA,OAAD,EAAUC,IAAV,CAZU,CAAb;;AAcA,MAAIJ,KAAK,CAACyB,IAAN,KAAe,gBAAf,IAAmCzB,KAAK,CAACyB,IAAN,KAAe,kBAAtD,EAA0E;AAAA;;AACtE,QAAI,CAACzB,KAAK,CAAC0B,UAAX,EAAuB;AACnB1B,MAAAA,KAAK,CAAC0B,UAAN,GAAmB,EAAnB;AACH;;AACD1B,IAAAA,KAAK,CAAC0B,UAAN,CAAiBC,UAAjB,iDACI3B,KAAK,CAAC0B,UADV,sDACI,kBAAkBC,UADtB,yEACoCzB,IAAI,CAACmB,MAAL,GAAc,CADlD;AAEH;;AACD,SAAO,EACH,GAAGrB,KADA;AAEHC,IAAAA,YAFG;AAGHC,IAAAA,IAHG;AAIHC,IAAAA,OAJG;AAKHC,IAAAA,IALG;AAMHC,IAAAA,gBANG;AAOHE,IAAAA,uBAPG;AAQHC,IAAAA,KARG;AASHC,IAAAA,sBATG;AAUHC,IAAAA,aAVG;AAWHC,IAAAA,UAXG;AAYHC,IAAAA,KAZG;AAaHE,IAAAA;AAbG,GAAP;AAeH","sourcesContent":["import React from 'react';\nimport { DATA_LENGTH } from '../constants';\nimport type { TCarouselProps } from '../types';\n\ntype TGetRequiredProps<P extends keyof TCarouselProps> = Record<\n P,\n Required<TCarouselProps>[P]\n>;\n\nexport type TInitializeCarouselProps<T> = TCarouselProps<T> &\n TGetRequiredProps<\n | 'defaultIndex'\n | 'loop'\n | 'width'\n | 'height'\n | 'scrollAnimationDuration'\n | 'autoPlayInterval'\n > & {\n // Raw data that has not been processed\n rawData: T[];\n };\n\nexport function useInitProps<T>(\n props: TCarouselProps<T>\n): TInitializeCarouselProps<T> {\n const {\n defaultIndex = 0,\n data: rawData = [],\n loop = true,\n autoPlayInterval: _autoPlayInterval = 1000,\n scrollAnimationDuration = 500,\n style = {},\n panGestureHandlerProps = {},\n pagingEnabled = true,\n enableSnap = true,\n width: _width,\n height: _height,\n } = props;\n\n const width = Math.round(_width || 0);\n const height = Math.round(_height || 0);\n const autoPlayInterval = Math.max(_autoPlayInterval, 0);\n\n const data = React.useMemo<T[]>(() => {\n if (!loop) return rawData;\n\n if (rawData.length === DATA_LENGTH.SINGLE_ITEM) {\n return [rawData[0], rawData[0], rawData[0]];\n }\n\n if (rawData.length === DATA_LENGTH.DOUBLE_ITEM) {\n return [rawData[0], rawData[1], rawData[0], rawData[1]];\n }\n\n return rawData;\n }, [rawData, loop]);\n\n if (props.mode === 'vertical-stack' || props.mode === 'horizontal-stack') {\n if (!props.modeConfig) {\n props.modeConfig = {};\n }\n props.modeConfig.showLength =\n props.modeConfig?.showLength ?? data.length - 1;\n }\n return {\n ...props,\n defaultIndex,\n data,\n rawData,\n loop,\n autoPlayInterval,\n scrollAnimationDuration,\n style,\n panGestureHandlerProps,\n pagingEnabled,\n enableSnap,\n width,\n height,\n };\n}\n"]}
|
|
@@ -12,28 +12,28 @@ var _constants = require("../constants");
|
|
|
12
12
|
function useOnProgressChange(opts) {
|
|
13
13
|
const {
|
|
14
14
|
offsetX,
|
|
15
|
-
|
|
15
|
+
rawData,
|
|
16
16
|
size,
|
|
17
17
|
onProgressChange
|
|
18
18
|
} = opts;
|
|
19
19
|
(0, _reactNativeReanimated.useAnimatedReaction)(() => offsetX.value, _value => {
|
|
20
20
|
let value = _value;
|
|
21
21
|
|
|
22
|
-
if (
|
|
22
|
+
if (rawData.length === _constants.DATA_LENGTH.SINGLE_ITEM) {
|
|
23
23
|
value = value % size;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
if (
|
|
26
|
+
if (rawData.length === _constants.DATA_LENGTH.DOUBLE_ITEM) {
|
|
27
27
|
value = value % (size * 2);
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
let absoluteProgress = Math.abs(value / size);
|
|
31
31
|
|
|
32
32
|
if (value > 0) {
|
|
33
|
-
absoluteProgress =
|
|
33
|
+
absoluteProgress = rawData.length - absoluteProgress;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
!!onProgressChange && (0, _reactNativeReanimated.runOnJS)(onProgressChange)(value, absoluteProgress);
|
|
37
|
-
}, [onProgressChange,
|
|
37
|
+
}, [onProgressChange, rawData]);
|
|
38
38
|
}
|
|
39
39
|
//# sourceMappingURL=useOnProgressChange.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useOnProgressChange.ts"],"names":["useOnProgressChange","opts","offsetX","
|
|
1
|
+
{"version":3,"sources":["useOnProgressChange.ts"],"names":["useOnProgressChange","opts","offsetX","rawData","size","onProgressChange","value","_value","length","DATA_LENGTH","SINGLE_ITEM","DOUBLE_ITEM","absoluteProgress","Math","abs"],"mappings":";;;;;;;AAAA;;AAIA;;AAGO,SAASA,mBAAT,CACHC,IADG,EAML;AACE,QAAM;AAAEC,IAAAA,OAAF;AAAWC,IAAAA,OAAX;AAAoBC,IAAAA,IAApB;AAA0BC,IAAAA;AAA1B,MAA+CJ,IAArD;AACA,kDACI,MAAMC,OAAO,CAACI,KADlB,EAEKC,MAAD,IAAY;AACR,QAAID,KAAK,GAAGC,MAAZ;;AAEA,QAAIJ,OAAO,CAACK,MAAR,KAAmBC,uBAAYC,WAAnC,EAAgD;AAC5CJ,MAAAA,KAAK,GAAGA,KAAK,GAAGF,IAAhB;AACH;;AAED,QAAID,OAAO,CAACK,MAAR,KAAmBC,uBAAYE,WAAnC,EAAgD;AAC5CL,MAAAA,KAAK,GAAGA,KAAK,IAAIF,IAAI,GAAG,CAAX,CAAb;AACH;;AAED,QAAIQ,gBAAgB,GAAGC,IAAI,CAACC,GAAL,CAASR,KAAK,GAAGF,IAAjB,CAAvB;;AAEA,QAAIE,KAAK,GAAG,CAAZ,EAAe;AACXM,MAAAA,gBAAgB,GAAGT,OAAO,CAACK,MAAR,GAAiBI,gBAApC;AACH;;AAED,KAAC,CAACP,gBAAF,IACI,oCAAQA,gBAAR,EAA0BC,KAA1B,EAAiCM,gBAAjC,CADJ;AAEH,GArBL,EAsBI,CAACP,gBAAD,EAAmBF,OAAnB,CAtBJ;AAwBH","sourcesContent":["import Animated, {\n runOnJS,\n useAnimatedReaction,\n} from 'react-native-reanimated';\nimport { DATA_LENGTH } from '../constants';\nimport type { TCarouselProps } from '../types';\n\nexport function useOnProgressChange(\n opts: {\n size: number;\n offsetX: Animated.SharedValue<number>;\n rawData: TCarouselProps['data'];\n } & Pick<TCarouselProps, 'onProgressChange'>\n) {\n const { offsetX, rawData, size, onProgressChange } = opts;\n useAnimatedReaction(\n () => offsetX.value,\n (_value) => {\n let value = _value;\n\n if (rawData.length === DATA_LENGTH.SINGLE_ITEM) {\n value = value % size;\n }\n\n if (rawData.length === DATA_LENGTH.DOUBLE_ITEM) {\n value = value % (size * 2);\n }\n\n let absoluteProgress = Math.abs(value / size);\n\n if (value > 0) {\n absoluteProgress = rawData.length - absoluteProgress;\n }\n\n !!onProgressChange &&\n runOnJS(onProgressChange)(value, absoluteProgress);\n },\n [onProgressChange, rawData]\n );\n}\n"]}
|
package/lib/module/Carousel.js
CHANGED
|
@@ -18,6 +18,7 @@ function Carousel(_props, ref) {
|
|
|
18
18
|
const props = useInitProps(_props);
|
|
19
19
|
const {
|
|
20
20
|
data,
|
|
21
|
+
rawData,
|
|
21
22
|
loop,
|
|
22
23
|
mode,
|
|
23
24
|
style,
|
|
@@ -55,7 +56,7 @@ function Carousel(_props, ref) {
|
|
|
55
56
|
useOnProgressChange({
|
|
56
57
|
size,
|
|
57
58
|
offsetX,
|
|
58
|
-
|
|
59
|
+
rawData,
|
|
59
60
|
onProgressChange
|
|
60
61
|
});
|
|
61
62
|
const carouselController = useCarouselController({
|
|
@@ -124,11 +125,11 @@ function Carousel(_props, ref) {
|
|
|
124
125
|
const renderLayout = React.useCallback((item, i) => {
|
|
125
126
|
let realIndex = i;
|
|
126
127
|
|
|
127
|
-
if (
|
|
128
|
+
if (rawData.length === DATA_LENGTH.SINGLE_ITEM) {
|
|
128
129
|
realIndex = i % 1;
|
|
129
130
|
}
|
|
130
131
|
|
|
131
|
-
if (
|
|
132
|
+
if (rawData.length === DATA_LENGTH.DOUBLE_ITEM) {
|
|
132
133
|
realIndex = i % 2;
|
|
133
134
|
}
|
|
134
135
|
|
|
@@ -145,7 +146,7 @@ function Carousel(_props, ref) {
|
|
|
145
146
|
index: realIndex,
|
|
146
147
|
animationValue
|
|
147
148
|
}));
|
|
148
|
-
}, [
|
|
149
|
+
}, [rawData, offsetX, visibleRanges, renderItem, layoutConfig, customAnimation]);
|
|
149
150
|
return /*#__PURE__*/React.createElement(CTX.Provider, {
|
|
150
151
|
value: {
|
|
151
152
|
props,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Carousel.tsx"],"names":["React","Animated","runOnJS","useDerivedValue","useCarouselController","useAutoPlay","usePropsErrorBoundary","ScrollViewGesture","useVisibleRanges","StyleSheet","View","DATA_LENGTH","BaseLayout","useLayoutConfig","useInitProps","CTX","useCommonVariables","useOnProgressChange","Carousel","_props","ref","props","data","loop","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","commonVariables","size","handlerOffsetX","offsetX","totalSize","length","x","value","isNaN","carouselController","disable","originalLength","_onScrollEnd","onChange","i","duration","next","prev","sharedPreIndex","sharedIndex","computedIndex","getCurrentIndex","start","pause","scrollViewGestureOnScrollBegin","useCallback","current","scrollViewGestureOnScrollEnd","goToIndex","animated","to","useImperativeHandle","scrollTo","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","realIndex","SINGLE_ITEM","DOUBLE_ITEM","animationValue","index","common","styles","container","itemsVertical","itemsHorizontal","map","forwardRef","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren } from 'react';\nimport Animated, { runOnJS, useDerivedValue } from 'react-native-reanimated';\n\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\nimport { ScrollViewGesture } from './ScrollViewGesture';\nimport { useVisibleRanges } from './hooks/useVisibleRanges';\n\nimport type { ICarouselInstance, TCarouselProps } from './types';\nimport { StyleSheet, View } from 'react-native';\nimport { DATA_LENGTH } from './constants';\nimport { BaseLayout } from './layouts/BaseLayout';\nimport { useLayoutConfig } from './hooks/useLayoutConfig';\nimport { useInitProps } from './hooks/useInitProps';\nimport { CTX } from './store';\nimport { useCommonVariables } from './hooks/useCommonVariables';\nimport { useOnProgressChange } from './hooks/useOnProgressChange';\n\nfunction Carousel<T>(\n _props: PropsWithChildren<TCarouselProps<T>>,\n ref: React.Ref<ICarouselInstance>\n) {\n const props = useInitProps(_props);\n\n const {\n data,\n loop,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffsetX } = commonVariables;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * data.length;\n const x = handlerOffsetX.value % totalSize;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [loop, size, data]);\n\n usePropsErrorBoundary(props);\n useOnProgressChange({ size, offsetX, data, onProgressChange });\n\n const carouselController = useCarouselController({\n loop,\n size,\n handlerOffsetX,\n length: data.length,\n disable: !data.length,\n originalLength: data.length,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n onChange: (i) => !!onSnapToItem && runOnJS(onSnapToItem)(i),\n duration: scrollAnimationDuration,\n });\n\n const {\n next,\n prev,\n sharedPreIndex,\n sharedIndex,\n computedIndex,\n getCurrentIndex,\n } = carouselController;\n\n const { start, pause } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pause();\n onScrollBegin?.();\n }, [onScrollBegin, pause]);\n\n const _onScrollEnd = React.useCallback(() => {\n computedIndex();\n onScrollEnd?.(sharedPreIndex.current, sharedIndex.current);\n }, [sharedPreIndex, sharedIndex, computedIndex, onScrollEnd]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n start();\n _onScrollEnd();\n }, [_onScrollEnd, start]);\n\n const goToIndex = React.useCallback(\n (i: number, animated?: boolean) => {\n carouselController.to(i, animated);\n },\n [carouselController]\n );\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n goToIndex,\n scrollTo: carouselController.scrollTo,\n }),\n [getCurrentIndex, goToIndex, next, prev, carouselController.scrollTo]\n );\n\n const visibleRanges = useVisibleRanges({\n total: data.length,\n viewSize: size,\n translation: handlerOffsetX,\n windowSize,\n });\n\n const layoutConfig = useLayoutConfig<T>({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: T, i: number) => {\n let realIndex = i;\n if (data.length === DATA_LENGTH.SINGLE_ITEM) {\n realIndex = i % 1;\n }\n\n if (data.length === DATA_LENGTH.DOUBLE_ITEM) {\n realIndex = i % 2;\n }\n\n return (\n <BaseLayout\n key={i}\n index={i}\n handlerOffsetX={offsetX}\n visibleRanges={visibleRanges}\n animationStyle={customAnimation || layoutConfig}\n >\n {({ animationValue }) =>\n renderItem({\n item,\n index: realIndex,\n animationValue,\n })\n }\n </BaseLayout>\n );\n },\n [\n data,\n offsetX,\n visibleRanges,\n renderItem,\n layoutConfig,\n customAnimation,\n ]\n );\n\n return (\n <CTX.Provider value={{ props, common: commonVariables }}>\n <View\n style={[\n styles.container,\n { width: width || '100%', height: height || '100%' },\n style,\n ]}\n >\n <ScrollViewGesture\n size={size}\n translation={handlerOffsetX}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n >\n <Animated.View\n key={mode}\n style={[\n styles.container,\n {\n width: width || '100%',\n height: height || '100%',\n },\n style,\n vertical\n ? styles.itemsVertical\n : styles.itemsHorizontal,\n ]}\n >\n {data.map(renderLayout)}\n </Animated.View>\n </ScrollViewGesture>\n </View>\n </CTX.Provider>\n );\n}\n\nexport default React.forwardRef(Carousel) as typeof Carousel;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n itemsHorizontal: {\n flexDirection: 'row',\n },\n itemsVertical: {\n flexDirection: 'column',\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["Carousel.tsx"],"names":["React","Animated","runOnJS","useDerivedValue","useCarouselController","useAutoPlay","usePropsErrorBoundary","ScrollViewGesture","useVisibleRanges","StyleSheet","View","DATA_LENGTH","BaseLayout","useLayoutConfig","useInitProps","CTX","useCommonVariables","useOnProgressChange","Carousel","_props","ref","props","data","rawData","loop","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","commonVariables","size","handlerOffsetX","offsetX","totalSize","length","x","value","isNaN","carouselController","disable","originalLength","_onScrollEnd","onChange","i","duration","next","prev","sharedPreIndex","sharedIndex","computedIndex","getCurrentIndex","start","pause","scrollViewGestureOnScrollBegin","useCallback","current","scrollViewGestureOnScrollEnd","goToIndex","animated","to","useImperativeHandle","scrollTo","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","realIndex","SINGLE_ITEM","DOUBLE_ITEM","animationValue","index","common","styles","container","itemsVertical","itemsHorizontal","map","forwardRef","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren } from 'react';\nimport Animated, { runOnJS, useDerivedValue } from 'react-native-reanimated';\n\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\nimport { ScrollViewGesture } from './ScrollViewGesture';\nimport { useVisibleRanges } from './hooks/useVisibleRanges';\n\nimport type { ICarouselInstance, TCarouselProps } from './types';\nimport { StyleSheet, View } from 'react-native';\nimport { DATA_LENGTH } from './constants';\nimport { BaseLayout } from './layouts/BaseLayout';\nimport { useLayoutConfig } from './hooks/useLayoutConfig';\nimport { useInitProps } from './hooks/useInitProps';\nimport { CTX } from './store';\nimport { useCommonVariables } from './hooks/useCommonVariables';\nimport { useOnProgressChange } from './hooks/useOnProgressChange';\n\nfunction Carousel<T>(\n _props: PropsWithChildren<TCarouselProps<T>>,\n ref: React.Ref<ICarouselInstance>\n) {\n const props = useInitProps(_props);\n\n const {\n data,\n rawData,\n loop,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffsetX } = commonVariables;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * data.length;\n const x = handlerOffsetX.value % totalSize;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [loop, size, data]);\n\n usePropsErrorBoundary(props);\n useOnProgressChange({ size, offsetX, rawData, onProgressChange });\n\n const carouselController = useCarouselController({\n loop,\n size,\n handlerOffsetX,\n length: data.length,\n disable: !data.length,\n originalLength: data.length,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n onChange: (i) => !!onSnapToItem && runOnJS(onSnapToItem)(i),\n duration: scrollAnimationDuration,\n });\n\n const {\n next,\n prev,\n sharedPreIndex,\n sharedIndex,\n computedIndex,\n getCurrentIndex,\n } = carouselController;\n\n const { start, pause } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pause();\n onScrollBegin?.();\n }, [onScrollBegin, pause]);\n\n const _onScrollEnd = React.useCallback(() => {\n computedIndex();\n onScrollEnd?.(sharedPreIndex.current, sharedIndex.current);\n }, [sharedPreIndex, sharedIndex, computedIndex, onScrollEnd]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n start();\n _onScrollEnd();\n }, [_onScrollEnd, start]);\n\n const goToIndex = React.useCallback(\n (i: number, animated?: boolean) => {\n carouselController.to(i, animated);\n },\n [carouselController]\n );\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n goToIndex,\n scrollTo: carouselController.scrollTo,\n }),\n [getCurrentIndex, goToIndex, next, prev, carouselController.scrollTo]\n );\n\n const visibleRanges = useVisibleRanges({\n total: data.length,\n viewSize: size,\n translation: handlerOffsetX,\n windowSize,\n });\n\n const layoutConfig = useLayoutConfig<T>({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: T, i: number) => {\n let realIndex = i;\n if (rawData.length === DATA_LENGTH.SINGLE_ITEM) {\n realIndex = i % 1;\n }\n\n if (rawData.length === DATA_LENGTH.DOUBLE_ITEM) {\n realIndex = i % 2;\n }\n\n return (\n <BaseLayout\n key={i}\n index={i}\n handlerOffsetX={offsetX}\n visibleRanges={visibleRanges}\n animationStyle={customAnimation || layoutConfig}\n >\n {({ animationValue }) =>\n renderItem({\n item,\n index: realIndex,\n animationValue,\n })\n }\n </BaseLayout>\n );\n },\n [\n rawData,\n offsetX,\n visibleRanges,\n renderItem,\n layoutConfig,\n customAnimation,\n ]\n );\n\n return (\n <CTX.Provider value={{ props, common: commonVariables }}>\n <View\n style={[\n styles.container,\n { width: width || '100%', height: height || '100%' },\n style,\n ]}\n >\n <ScrollViewGesture\n size={size}\n translation={handlerOffsetX}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n >\n <Animated.View\n key={mode}\n style={[\n styles.container,\n {\n width: width || '100%',\n height: height || '100%',\n },\n style,\n vertical\n ? styles.itemsVertical\n : styles.itemsHorizontal,\n ]}\n >\n {data.map(renderLayout)}\n </Animated.View>\n </ScrollViewGesture>\n </View>\n </CTX.Provider>\n );\n}\n\nexport default React.forwardRef(Carousel) as typeof Carousel;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n itemsHorizontal: {\n flexDirection: 'row',\n },\n itemsVertical: {\n flexDirection: 'column',\n },\n});\n"]}
|
|
@@ -26,9 +26,13 @@ export function useAutoPlay(opts) {
|
|
|
26
26
|
stopped.current = true;
|
|
27
27
|
}, []);
|
|
28
28
|
const start = React.useCallback(() => {
|
|
29
|
+
if (!autoPlay) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
29
33
|
stopped.current = false;
|
|
30
34
|
play();
|
|
31
|
-
}, [play]);
|
|
35
|
+
}, [play, autoPlay]);
|
|
32
36
|
React.useEffect(() => {
|
|
33
37
|
if (autoPlay) {
|
|
34
38
|
start();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useAutoPlay.ts"],"names":["React","useAutoPlay","opts","autoPlay","autoPlayReverse","autoPlayInterval","carouselController","timer","useRef","stopped","play","useCallback","current","setTimeout","prev","onFinished","next","pause","clearInterval","start","useEffect"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAGA,OAAO,SAASC,WAAT,CAAqBC,IAArB,EAKJ;AACC,QAAM;AACFC,IAAAA,QAAQ,GAAG,KADT;AAEFC,IAAAA,eAAe,GAAG,KAFhB;AAGFC,IAAAA,gBAHE;AAIFC,IAAAA;AAJE,MAKFJ,IALJ;AAOA,QAAMK,KAAK,GAAGP,KAAK,CAACQ,MAAN,EAAd;AACA,QAAMC,OAAO,GAAGT,KAAK,CAACQ,MAAN,CAAsB,CAACL,QAAvB,CAAhB;AAEA,QAAMO,IAAI,GAAGV,KAAK,CAACW,WAAN,CAAkB,MAAM;AACjC,QAAIF,OAAO,CAACG,OAAZ,EAAqB;AACjB;AACH;;AAEDL,IAAAA,KAAK,CAACK,OAAN,GAAgBC,UAAU,CAAC,MAAM;AAC7BT,MAAAA,eAAe,GACTE,kBAAkB,CAACQ,IAAnB,CAAwB;AAAEC,QAAAA,UAAU,EAAEL;AAAd,OAAxB,CADS,GAETJ,kBAAkB,CAACU,IAAnB,CAAwB;AAAED,QAAAA,UAAU,EAAEL;AAAd,OAAxB,CAFN;AAGH,KAJyB,EAIvBL,gBAJuB,CAA1B;AAKH,GAVY,EAUV,CAACD,eAAD,EAAkBC,gBAAlB,EAAoCC,kBAApC,CAVU,CAAb;AAYA,QAAMW,KAAK,GAAGjB,KAAK,CAACW,WAAN,CAAkB,MAAM;AAClCJ,IAAAA,KAAK,CAACK,OAAN,IAAiBM,aAAa,CAACX,KAAK,CAACK,OAAP,CAA9B;AACAH,IAAAA,OAAO,CAACG,OAAR,GAAkB,IAAlB;AACH,GAHa,EAGX,EAHW,CAAd;AAKA,QAAMO,KAAK,GAAGnB,KAAK,CAACW,WAAN,CAAkB,MAAM;
|
|
1
|
+
{"version":3,"sources":["useAutoPlay.ts"],"names":["React","useAutoPlay","opts","autoPlay","autoPlayReverse","autoPlayInterval","carouselController","timer","useRef","stopped","play","useCallback","current","setTimeout","prev","onFinished","next","pause","clearInterval","start","useEffect"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAGA,OAAO,SAASC,WAAT,CAAqBC,IAArB,EAKJ;AACC,QAAM;AACFC,IAAAA,QAAQ,GAAG,KADT;AAEFC,IAAAA,eAAe,GAAG,KAFhB;AAGFC,IAAAA,gBAHE;AAIFC,IAAAA;AAJE,MAKFJ,IALJ;AAOA,QAAMK,KAAK,GAAGP,KAAK,CAACQ,MAAN,EAAd;AACA,QAAMC,OAAO,GAAGT,KAAK,CAACQ,MAAN,CAAsB,CAACL,QAAvB,CAAhB;AAEA,QAAMO,IAAI,GAAGV,KAAK,CAACW,WAAN,CAAkB,MAAM;AACjC,QAAIF,OAAO,CAACG,OAAZ,EAAqB;AACjB;AACH;;AAEDL,IAAAA,KAAK,CAACK,OAAN,GAAgBC,UAAU,CAAC,MAAM;AAC7BT,MAAAA,eAAe,GACTE,kBAAkB,CAACQ,IAAnB,CAAwB;AAAEC,QAAAA,UAAU,EAAEL;AAAd,OAAxB,CADS,GAETJ,kBAAkB,CAACU,IAAnB,CAAwB;AAAED,QAAAA,UAAU,EAAEL;AAAd,OAAxB,CAFN;AAGH,KAJyB,EAIvBL,gBAJuB,CAA1B;AAKH,GAVY,EAUV,CAACD,eAAD,EAAkBC,gBAAlB,EAAoCC,kBAApC,CAVU,CAAb;AAYA,QAAMW,KAAK,GAAGjB,KAAK,CAACW,WAAN,CAAkB,MAAM;AAClCJ,IAAAA,KAAK,CAACK,OAAN,IAAiBM,aAAa,CAACX,KAAK,CAACK,OAAP,CAA9B;AACAH,IAAAA,OAAO,CAACG,OAAR,GAAkB,IAAlB;AACH,GAHa,EAGX,EAHW,CAAd;AAKA,QAAMO,KAAK,GAAGnB,KAAK,CAACW,WAAN,CAAkB,MAAM;AAClC,QAAI,CAACR,QAAL,EAAe;AACX;AACH;;AACDM,IAAAA,OAAO,CAACG,OAAR,GAAkB,KAAlB;AACAF,IAAAA,IAAI;AACP,GANa,EAMX,CAACA,IAAD,EAAOP,QAAP,CANW,CAAd;AAQAH,EAAAA,KAAK,CAACoB,SAAN,CAAgB,MAAM;AAClB,QAAIjB,QAAJ,EAAc;AACVgB,MAAAA,KAAK;AACR,KAFD,MAEO;AACHF,MAAAA,KAAK;AACR;;AACD,WAAOA,KAAP;AACH,GAPD,EAOG,CAACA,KAAD,EAAQE,KAAR,EAAehB,QAAf,CAPH;AASA,SAAO;AACHc,IAAAA,KADG;AAEHE,IAAAA;AAFG,GAAP;AAIH","sourcesContent":["import * as React from 'react';\nimport type { ICarouselController } from './useCarouselController';\n\nexport function useAutoPlay(opts: {\n autoPlay?: boolean;\n autoPlayInterval?: number;\n autoPlayReverse?: boolean;\n carouselController: ICarouselController;\n}) {\n const {\n autoPlay = false,\n autoPlayReverse = false,\n autoPlayInterval,\n carouselController,\n } = opts;\n\n const timer = React.useRef<NodeJS.Timer>();\n const stopped = React.useRef<boolean>(!autoPlay);\n\n const play = React.useCallback(() => {\n if (stopped.current) {\n return;\n }\n\n timer.current = setTimeout(() => {\n autoPlayReverse\n ? carouselController.prev({ onFinished: play })\n : carouselController.next({ onFinished: play });\n }, autoPlayInterval);\n }, [autoPlayReverse, autoPlayInterval, carouselController]);\n\n const pause = React.useCallback(() => {\n timer.current && clearInterval(timer.current);\n stopped.current = true;\n }, []);\n\n const start = React.useCallback(() => {\n if (!autoPlay) {\n return;\n }\n stopped.current = false;\n play();\n }, [play, autoPlay]);\n\n React.useEffect(() => {\n if (autoPlay) {\n start();\n } else {\n pause();\n }\n return pause;\n }, [pause, start, autoPlay]);\n\n return {\n pause,\n start,\n };\n}\n"]}
|
|
@@ -3,7 +3,7 @@ import { DATA_LENGTH } from '../constants';
|
|
|
3
3
|
export function useInitProps(props) {
|
|
4
4
|
const {
|
|
5
5
|
defaultIndex = 0,
|
|
6
|
-
data:
|
|
6
|
+
data: rawData = [],
|
|
7
7
|
loop = true,
|
|
8
8
|
autoPlayInterval: _autoPlayInterval = 1000,
|
|
9
9
|
scrollAnimationDuration = 500,
|
|
@@ -18,18 +18,18 @@ export function useInitProps(props) {
|
|
|
18
18
|
const height = Math.round(_height || 0);
|
|
19
19
|
const autoPlayInterval = Math.max(_autoPlayInterval, 0);
|
|
20
20
|
const data = React.useMemo(() => {
|
|
21
|
-
if (!loop) return
|
|
21
|
+
if (!loop) return rawData;
|
|
22
22
|
|
|
23
|
-
if (
|
|
24
|
-
return [
|
|
23
|
+
if (rawData.length === DATA_LENGTH.SINGLE_ITEM) {
|
|
24
|
+
return [rawData[0], rawData[0], rawData[0]];
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
if (
|
|
28
|
-
return [
|
|
27
|
+
if (rawData.length === DATA_LENGTH.DOUBLE_ITEM) {
|
|
28
|
+
return [rawData[0], rawData[1], rawData[0], rawData[1]];
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
return
|
|
32
|
-
}, [
|
|
31
|
+
return rawData;
|
|
32
|
+
}, [rawData, loop]);
|
|
33
33
|
|
|
34
34
|
if (props.mode === 'vertical-stack' || props.mode === 'horizontal-stack') {
|
|
35
35
|
var _props$modeConfig$sho, _props$modeConfig;
|
|
@@ -44,6 +44,7 @@ export function useInitProps(props) {
|
|
|
44
44
|
return { ...props,
|
|
45
45
|
defaultIndex,
|
|
46
46
|
data,
|
|
47
|
+
rawData,
|
|
47
48
|
loop,
|
|
48
49
|
autoPlayInterval,
|
|
49
50
|
scrollAnimationDuration,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useInitProps.ts"],"names":["React","DATA_LENGTH","useInitProps","props","defaultIndex","data","
|
|
1
|
+
{"version":3,"sources":["useInitProps.ts"],"names":["React","DATA_LENGTH","useInitProps","props","defaultIndex","data","rawData","loop","autoPlayInterval","_autoPlayInterval","scrollAnimationDuration","style","panGestureHandlerProps","pagingEnabled","enableSnap","width","_width","height","_height","Math","round","max","useMemo","length","SINGLE_ITEM","DOUBLE_ITEM","mode","modeConfig","showLength"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,WAAT,QAA4B,cAA5B;AAqBA,OAAO,SAASC,YAAT,CACHC,KADG,EAEwB;AAC3B,QAAM;AACFC,IAAAA,YAAY,GAAG,CADb;AAEFC,IAAAA,IAAI,EAAEC,OAAO,GAAG,EAFd;AAGFC,IAAAA,IAAI,GAAG,IAHL;AAIFC,IAAAA,gBAAgB,EAAEC,iBAAiB,GAAG,IAJpC;AAKFC,IAAAA,uBAAuB,GAAG,GALxB;AAMFC,IAAAA,KAAK,GAAG,EANN;AAOFC,IAAAA,sBAAsB,GAAG,EAPvB;AAQFC,IAAAA,aAAa,GAAG,IARd;AASFC,IAAAA,UAAU,GAAG,IATX;AAUFC,IAAAA,KAAK,EAAEC,MAVL;AAWFC,IAAAA,MAAM,EAAEC;AAXN,MAYFf,KAZJ;AAcA,QAAMY,KAAK,GAAGI,IAAI,CAACC,KAAL,CAAWJ,MAAM,IAAI,CAArB,CAAd;AACA,QAAMC,MAAM,GAAGE,IAAI,CAACC,KAAL,CAAWF,OAAO,IAAI,CAAtB,CAAf;AACA,QAAMV,gBAAgB,GAAGW,IAAI,CAACE,GAAL,CAASZ,iBAAT,EAA4B,CAA5B,CAAzB;AAEA,QAAMJ,IAAI,GAAGL,KAAK,CAACsB,OAAN,CAAmB,MAAM;AAClC,QAAI,CAACf,IAAL,EAAW,OAAOD,OAAP;;AAEX,QAAIA,OAAO,CAACiB,MAAR,KAAmBtB,WAAW,CAACuB,WAAnC,EAAgD;AAC5C,aAAO,CAAClB,OAAO,CAAC,CAAD,CAAR,EAAaA,OAAO,CAAC,CAAD,CAApB,EAAyBA,OAAO,CAAC,CAAD,CAAhC,CAAP;AACH;;AAED,QAAIA,OAAO,CAACiB,MAAR,KAAmBtB,WAAW,CAACwB,WAAnC,EAAgD;AAC5C,aAAO,CAACnB,OAAO,CAAC,CAAD,CAAR,EAAaA,OAAO,CAAC,CAAD,CAApB,EAAyBA,OAAO,CAAC,CAAD,CAAhC,EAAqCA,OAAO,CAAC,CAAD,CAA5C,CAAP;AACH;;AAED,WAAOA,OAAP;AACH,GAZY,EAYV,CAACA,OAAD,EAAUC,IAAV,CAZU,CAAb;;AAcA,MAAIJ,KAAK,CAACuB,IAAN,KAAe,gBAAf,IAAmCvB,KAAK,CAACuB,IAAN,KAAe,kBAAtD,EAA0E;AAAA;;AACtE,QAAI,CAACvB,KAAK,CAACwB,UAAX,EAAuB;AACnBxB,MAAAA,KAAK,CAACwB,UAAN,GAAmB,EAAnB;AACH;;AACDxB,IAAAA,KAAK,CAACwB,UAAN,CAAiBC,UAAjB,iDACIzB,KAAK,CAACwB,UADV,sDACI,kBAAkBC,UADtB,yEACoCvB,IAAI,CAACkB,MAAL,GAAc,CADlD;AAEH;;AACD,SAAO,EACH,GAAGpB,KADA;AAEHC,IAAAA,YAFG;AAGHC,IAAAA,IAHG;AAIHC,IAAAA,OAJG;AAKHC,IAAAA,IALG;AAMHC,IAAAA,gBANG;AAOHE,IAAAA,uBAPG;AAQHC,IAAAA,KARG;AASHC,IAAAA,sBATG;AAUHC,IAAAA,aAVG;AAWHC,IAAAA,UAXG;AAYHC,IAAAA,KAZG;AAaHE,IAAAA;AAbG,GAAP;AAeH","sourcesContent":["import React from 'react';\nimport { DATA_LENGTH } from '../constants';\nimport type { TCarouselProps } from '../types';\n\ntype TGetRequiredProps<P extends keyof TCarouselProps> = Record<\n P,\n Required<TCarouselProps>[P]\n>;\n\nexport type TInitializeCarouselProps<T> = TCarouselProps<T> &\n TGetRequiredProps<\n | 'defaultIndex'\n | 'loop'\n | 'width'\n | 'height'\n | 'scrollAnimationDuration'\n | 'autoPlayInterval'\n > & {\n // Raw data that has not been processed\n rawData: T[];\n };\n\nexport function useInitProps<T>(\n props: TCarouselProps<T>\n): TInitializeCarouselProps<T> {\n const {\n defaultIndex = 0,\n data: rawData = [],\n loop = true,\n autoPlayInterval: _autoPlayInterval = 1000,\n scrollAnimationDuration = 500,\n style = {},\n panGestureHandlerProps = {},\n pagingEnabled = true,\n enableSnap = true,\n width: _width,\n height: _height,\n } = props;\n\n const width = Math.round(_width || 0);\n const height = Math.round(_height || 0);\n const autoPlayInterval = Math.max(_autoPlayInterval, 0);\n\n const data = React.useMemo<T[]>(() => {\n if (!loop) return rawData;\n\n if (rawData.length === DATA_LENGTH.SINGLE_ITEM) {\n return [rawData[0], rawData[0], rawData[0]];\n }\n\n if (rawData.length === DATA_LENGTH.DOUBLE_ITEM) {\n return [rawData[0], rawData[1], rawData[0], rawData[1]];\n }\n\n return rawData;\n }, [rawData, loop]);\n\n if (props.mode === 'vertical-stack' || props.mode === 'horizontal-stack') {\n if (!props.modeConfig) {\n props.modeConfig = {};\n }\n props.modeConfig.showLength =\n props.modeConfig?.showLength ?? data.length - 1;\n }\n return {\n ...props,\n defaultIndex,\n data,\n rawData,\n loop,\n autoPlayInterval,\n scrollAnimationDuration,\n style,\n panGestureHandlerProps,\n pagingEnabled,\n enableSnap,\n width,\n height,\n };\n}\n"]}
|
|
@@ -3,28 +3,28 @@ import { DATA_LENGTH } from '../constants';
|
|
|
3
3
|
export function useOnProgressChange(opts) {
|
|
4
4
|
const {
|
|
5
5
|
offsetX,
|
|
6
|
-
|
|
6
|
+
rawData,
|
|
7
7
|
size,
|
|
8
8
|
onProgressChange
|
|
9
9
|
} = opts;
|
|
10
10
|
useAnimatedReaction(() => offsetX.value, _value => {
|
|
11
11
|
let value = _value;
|
|
12
12
|
|
|
13
|
-
if (
|
|
13
|
+
if (rawData.length === DATA_LENGTH.SINGLE_ITEM) {
|
|
14
14
|
value = value % size;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
if (
|
|
17
|
+
if (rawData.length === DATA_LENGTH.DOUBLE_ITEM) {
|
|
18
18
|
value = value % (size * 2);
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
let absoluteProgress = Math.abs(value / size);
|
|
22
22
|
|
|
23
23
|
if (value > 0) {
|
|
24
|
-
absoluteProgress =
|
|
24
|
+
absoluteProgress = rawData.length - absoluteProgress;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
!!onProgressChange && runOnJS(onProgressChange)(value, absoluteProgress);
|
|
28
|
-
}, [onProgressChange,
|
|
28
|
+
}, [onProgressChange, rawData]);
|
|
29
29
|
}
|
|
30
30
|
//# sourceMappingURL=useOnProgressChange.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useOnProgressChange.ts"],"names":["runOnJS","useAnimatedReaction","DATA_LENGTH","useOnProgressChange","opts","offsetX","
|
|
1
|
+
{"version":3,"sources":["useOnProgressChange.ts"],"names":["runOnJS","useAnimatedReaction","DATA_LENGTH","useOnProgressChange","opts","offsetX","rawData","size","onProgressChange","value","_value","length","SINGLE_ITEM","DOUBLE_ITEM","absoluteProgress","Math","abs"],"mappings":"AAAA,SACIA,OADJ,EAEIC,mBAFJ,QAGO,yBAHP;AAIA,SAASC,WAAT,QAA4B,cAA5B;AAGA,OAAO,SAASC,mBAAT,CACHC,IADG,EAML;AACE,QAAM;AAAEC,IAAAA,OAAF;AAAWC,IAAAA,OAAX;AAAoBC,IAAAA,IAApB;AAA0BC,IAAAA;AAA1B,MAA+CJ,IAArD;AACAH,EAAAA,mBAAmB,CACf,MAAMI,OAAO,CAACI,KADC,EAEdC,MAAD,IAAY;AACR,QAAID,KAAK,GAAGC,MAAZ;;AAEA,QAAIJ,OAAO,CAACK,MAAR,KAAmBT,WAAW,CAACU,WAAnC,EAAgD;AAC5CH,MAAAA,KAAK,GAAGA,KAAK,GAAGF,IAAhB;AACH;;AAED,QAAID,OAAO,CAACK,MAAR,KAAmBT,WAAW,CAACW,WAAnC,EAAgD;AAC5CJ,MAAAA,KAAK,GAAGA,KAAK,IAAIF,IAAI,GAAG,CAAX,CAAb;AACH;;AAED,QAAIO,gBAAgB,GAAGC,IAAI,CAACC,GAAL,CAASP,KAAK,GAAGF,IAAjB,CAAvB;;AAEA,QAAIE,KAAK,GAAG,CAAZ,EAAe;AACXK,MAAAA,gBAAgB,GAAGR,OAAO,CAACK,MAAR,GAAiBG,gBAApC;AACH;;AAED,KAAC,CAACN,gBAAF,IACIR,OAAO,CAACQ,gBAAD,CAAP,CAA0BC,KAA1B,EAAiCK,gBAAjC,CADJ;AAEH,GArBc,EAsBf,CAACN,gBAAD,EAAmBF,OAAnB,CAtBe,CAAnB;AAwBH","sourcesContent":["import Animated, {\n runOnJS,\n useAnimatedReaction,\n} from 'react-native-reanimated';\nimport { DATA_LENGTH } from '../constants';\nimport type { TCarouselProps } from '../types';\n\nexport function useOnProgressChange(\n opts: {\n size: number;\n offsetX: Animated.SharedValue<number>;\n rawData: TCarouselProps['data'];\n } & Pick<TCarouselProps, 'onProgressChange'>\n) {\n const { offsetX, rawData, size, onProgressChange } = opts;\n useAnimatedReaction(\n () => offsetX.value,\n (_value) => {\n let value = _value;\n\n if (rawData.length === DATA_LENGTH.SINGLE_ITEM) {\n value = value % size;\n }\n\n if (rawData.length === DATA_LENGTH.DOUBLE_ITEM) {\n value = value % (size * 2);\n }\n\n let absoluteProgress = Math.abs(value / size);\n\n if (value > 0) {\n absoluteProgress = rawData.length - absoluteProgress;\n }\n\n !!onProgressChange &&\n runOnJS(onProgressChange)(value, absoluteProgress);\n },\n [onProgressChange, rawData]\n );\n}\n"]}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { TCarouselProps } from '../types';
|
|
2
2
|
declare type TGetRequiredProps<P extends keyof TCarouselProps> = Record<P, Required<TCarouselProps>[P]>;
|
|
3
|
-
export declare type TInitializeCarouselProps<T> = TCarouselProps<T> & TGetRequiredProps<'defaultIndex' | 'loop' | 'width' | 'height' | 'scrollAnimationDuration' | 'autoPlayInterval'
|
|
3
|
+
export declare type TInitializeCarouselProps<T> = TCarouselProps<T> & TGetRequiredProps<'defaultIndex' | 'loop' | 'width' | 'height' | 'scrollAnimationDuration' | 'autoPlayInterval'> & {
|
|
4
|
+
rawData: T[];
|
|
5
|
+
};
|
|
4
6
|
export declare function useInitProps<T>(props: TCarouselProps<T>): TInitializeCarouselProps<T>;
|
|
5
7
|
export {};
|
|
@@ -3,4 +3,5 @@ import type { TCarouselProps } from '../types';
|
|
|
3
3
|
export declare function useOnProgressChange(opts: {
|
|
4
4
|
size: number;
|
|
5
5
|
offsetX: Animated.SharedValue<number>;
|
|
6
|
-
|
|
6
|
+
rawData: TCarouselProps['data'];
|
|
7
|
+
} & Pick<TCarouselProps, 'onProgressChange'>): void;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-reanimated-carousel",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.2",
|
|
4
4
|
"description": "Simple carousel component.fully implemented using Reanimated 2.Infinitely scrolling, very smooth.",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"android": "yarn --cwd example android",
|
|
36
36
|
"android:pretty": "yarn --cwd example android:pretty",
|
|
37
37
|
"pods": "cd example && pod-install --quiet",
|
|
38
|
-
"bootstrap": "yarn
|
|
38
|
+
"bootstrap": "yarn && yarn pods",
|
|
39
39
|
"deploy": "cd example && yarn deploy"
|
|
40
40
|
},
|
|
41
41
|
"keywords": [
|
package/src/Carousel.tsx
CHANGED
|
@@ -25,6 +25,7 @@ function Carousel<T>(
|
|
|
25
25
|
|
|
26
26
|
const {
|
|
27
27
|
data,
|
|
28
|
+
rawData,
|
|
28
29
|
loop,
|
|
29
30
|
mode,
|
|
30
31
|
style,
|
|
@@ -58,7 +59,7 @@ function Carousel<T>(
|
|
|
58
59
|
}, [loop, size, data]);
|
|
59
60
|
|
|
60
61
|
usePropsErrorBoundary(props);
|
|
61
|
-
useOnProgressChange({ size, offsetX,
|
|
62
|
+
useOnProgressChange({ size, offsetX, rawData, onProgressChange });
|
|
62
63
|
|
|
63
64
|
const carouselController = useCarouselController({
|
|
64
65
|
loop,
|
|
@@ -135,11 +136,11 @@ function Carousel<T>(
|
|
|
135
136
|
const renderLayout = React.useCallback(
|
|
136
137
|
(item: T, i: number) => {
|
|
137
138
|
let realIndex = i;
|
|
138
|
-
if (
|
|
139
|
+
if (rawData.length === DATA_LENGTH.SINGLE_ITEM) {
|
|
139
140
|
realIndex = i % 1;
|
|
140
141
|
}
|
|
141
142
|
|
|
142
|
-
if (
|
|
143
|
+
if (rawData.length === DATA_LENGTH.DOUBLE_ITEM) {
|
|
143
144
|
realIndex = i % 2;
|
|
144
145
|
}
|
|
145
146
|
|
|
@@ -162,7 +163,7 @@ function Carousel<T>(
|
|
|
162
163
|
);
|
|
163
164
|
},
|
|
164
165
|
[
|
|
165
|
-
|
|
166
|
+
rawData,
|
|
166
167
|
offsetX,
|
|
167
168
|
visibleRanges,
|
|
168
169
|
renderItem,
|
package/src/hooks/useAutoPlay.ts
CHANGED
|
@@ -35,9 +35,12 @@ export function useAutoPlay(opts: {
|
|
|
35
35
|
}, []);
|
|
36
36
|
|
|
37
37
|
const start = React.useCallback(() => {
|
|
38
|
+
if (!autoPlay) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
38
41
|
stopped.current = false;
|
|
39
42
|
play();
|
|
40
|
-
}, [play]);
|
|
43
|
+
}, [play, autoPlay]);
|
|
41
44
|
|
|
42
45
|
React.useEffect(() => {
|
|
43
46
|
if (autoPlay) {
|
|
@@ -15,14 +15,17 @@ export type TInitializeCarouselProps<T> = TCarouselProps<T> &
|
|
|
15
15
|
| 'height'
|
|
16
16
|
| 'scrollAnimationDuration'
|
|
17
17
|
| 'autoPlayInterval'
|
|
18
|
-
|
|
18
|
+
> & {
|
|
19
|
+
// Raw data that has not been processed
|
|
20
|
+
rawData: T[];
|
|
21
|
+
};
|
|
19
22
|
|
|
20
23
|
export function useInitProps<T>(
|
|
21
24
|
props: TCarouselProps<T>
|
|
22
25
|
): TInitializeCarouselProps<T> {
|
|
23
26
|
const {
|
|
24
27
|
defaultIndex = 0,
|
|
25
|
-
data:
|
|
28
|
+
data: rawData = [],
|
|
26
29
|
loop = true,
|
|
27
30
|
autoPlayInterval: _autoPlayInterval = 1000,
|
|
28
31
|
scrollAnimationDuration = 500,
|
|
@@ -39,18 +42,18 @@ export function useInitProps<T>(
|
|
|
39
42
|
const autoPlayInterval = Math.max(_autoPlayInterval, 0);
|
|
40
43
|
|
|
41
44
|
const data = React.useMemo<T[]>(() => {
|
|
42
|
-
if (!loop) return
|
|
45
|
+
if (!loop) return rawData;
|
|
43
46
|
|
|
44
|
-
if (
|
|
45
|
-
return [
|
|
47
|
+
if (rawData.length === DATA_LENGTH.SINGLE_ITEM) {
|
|
48
|
+
return [rawData[0], rawData[0], rawData[0]];
|
|
46
49
|
}
|
|
47
50
|
|
|
48
|
-
if (
|
|
49
|
-
return [
|
|
51
|
+
if (rawData.length === DATA_LENGTH.DOUBLE_ITEM) {
|
|
52
|
+
return [rawData[0], rawData[1], rawData[0], rawData[1]];
|
|
50
53
|
}
|
|
51
54
|
|
|
52
|
-
return
|
|
53
|
-
}, [
|
|
55
|
+
return rawData;
|
|
56
|
+
}, [rawData, loop]);
|
|
54
57
|
|
|
55
58
|
if (props.mode === 'vertical-stack' || props.mode === 'horizontal-stack') {
|
|
56
59
|
if (!props.modeConfig) {
|
|
@@ -63,6 +66,7 @@ export function useInitProps<T>(
|
|
|
63
66
|
...props,
|
|
64
67
|
defaultIndex,
|
|
65
68
|
data,
|
|
69
|
+
rawData,
|
|
66
70
|
loop,
|
|
67
71
|
autoPlayInterval,
|
|
68
72
|
scrollAnimationDuration,
|
|
@@ -9,31 +9,32 @@ export function useOnProgressChange(
|
|
|
9
9
|
opts: {
|
|
10
10
|
size: number;
|
|
11
11
|
offsetX: Animated.SharedValue<number>;
|
|
12
|
-
|
|
12
|
+
rawData: TCarouselProps['data'];
|
|
13
|
+
} & Pick<TCarouselProps, 'onProgressChange'>
|
|
13
14
|
) {
|
|
14
|
-
const { offsetX,
|
|
15
|
+
const { offsetX, rawData, size, onProgressChange } = opts;
|
|
15
16
|
useAnimatedReaction(
|
|
16
17
|
() => offsetX.value,
|
|
17
18
|
(_value) => {
|
|
18
19
|
let value = _value;
|
|
19
20
|
|
|
20
|
-
if (
|
|
21
|
+
if (rawData.length === DATA_LENGTH.SINGLE_ITEM) {
|
|
21
22
|
value = value % size;
|
|
22
23
|
}
|
|
23
24
|
|
|
24
|
-
if (
|
|
25
|
+
if (rawData.length === DATA_LENGTH.DOUBLE_ITEM) {
|
|
25
26
|
value = value % (size * 2);
|
|
26
27
|
}
|
|
27
28
|
|
|
28
29
|
let absoluteProgress = Math.abs(value / size);
|
|
29
30
|
|
|
30
31
|
if (value > 0) {
|
|
31
|
-
absoluteProgress =
|
|
32
|
+
absoluteProgress = rawData.length - absoluteProgress;
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
!!onProgressChange &&
|
|
35
36
|
runOnJS(onProgressChange)(value, absoluteProgress);
|
|
36
37
|
},
|
|
37
|
-
[onProgressChange,
|
|
38
|
+
[onProgressChange, rawData]
|
|
38
39
|
);
|
|
39
40
|
}
|