react-native-reanimated-carousel 2.3.3 → 2.3.6
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/README.md +11 -3
- package/README.zh-CN.md +11 -3
- package/lib/commonjs/Carousel.js +1 -1
- package/lib/commonjs/Carousel.js.map +1 -1
- package/lib/commonjs/hooks/useAutoPlay.js +1 -1
- package/lib/commonjs/hooks/useAutoPlay.js.map +1 -1
- package/lib/commonjs/hooks/useCarouselController.js +1 -1
- package/lib/commonjs/hooks/useCarouselController.js.map +1 -1
- package/lib/commonjs/hooks/useCommonVariables.js +1 -1
- package/lib/commonjs/hooks/useCommonVariables.js.map +1 -1
- package/lib/commonjs/hooks/useInitProps.js +1 -1
- package/lib/commonjs/hooks/useInitProps.js.map +1 -1
- package/lib/commonjs/hooks/useOnProgressChange.js +1 -1
- package/lib/commonjs/hooks/useOnProgressChange.js.map +1 -1
- package/lib/commonjs/utils/computedWithAutoFillData.js +2 -0
- package/lib/commonjs/utils/computedWithAutoFillData.js.map +1 -0
- package/lib/module/Carousel.js +15 -14
- package/lib/module/Carousel.js.map +1 -1
- package/lib/module/hooks/useAutoPlay.js +2 -1
- package/lib/module/hooks/useAutoPlay.js.map +1 -1
- package/lib/module/hooks/useCarouselController.js +5 -4
- package/lib/module/hooks/useCarouselController.js.map +1 -1
- package/lib/module/hooks/useCommonVariables.js +3 -2
- package/lib/module/hooks/useCommonVariables.js.map +1 -1
- package/lib/module/hooks/useInitProps.js +9 -14
- package/lib/module/hooks/useInitProps.js.map +1 -1
- package/lib/module/hooks/useOnProgressChange.js +13 -9
- package/lib/module/hooks/useOnProgressChange.js.map +1 -1
- package/lib/module/utils/computedWithAutoFillData.js +85 -0
- package/lib/module/utils/computedWithAutoFillData.js.map +1 -0
- package/lib/typescript/exampleBare/App.d.ts +2 -0
- package/lib/typescript/{Carousel.d.ts → src/Carousel.d.ts} +0 -0
- package/lib/typescript/{LazyView.d.ts → src/LazyView.d.ts} +0 -0
- package/lib/typescript/{ScrollViewGesture.d.ts → src/ScrollViewGesture.d.ts} +0 -0
- package/lib/typescript/{constants → src/constants}/index.d.ts +0 -0
- package/lib/typescript/{hooks → src/hooks}/useAutoPlay.d.ts +0 -0
- package/lib/typescript/{hooks → src/hooks}/useCarouselController.d.ts +1 -0
- package/lib/typescript/{hooks → src/hooks}/useCheckMounted.d.ts +0 -0
- package/lib/typescript/{hooks → src/hooks}/useCommonVariables.d.ts +0 -0
- package/lib/typescript/{hooks → src/hooks}/useInitProps.d.ts +1 -1
- package/lib/typescript/{hooks → src/hooks}/useLayoutConfig.d.ts +0 -0
- package/lib/typescript/{hooks → src/hooks}/useOffsetX.d.ts +0 -0
- package/lib/typescript/{hooks → src/hooks}/useOnProgressChange.d.ts +2 -0
- package/lib/typescript/{hooks → src/hooks}/usePropsErrorBoundary.d.ts +0 -0
- package/lib/typescript/{hooks → src/hooks}/useVisibleRanges.d.ts +0 -0
- package/lib/typescript/{index.d.ts → src/index.d.ts} +0 -0
- package/lib/typescript/{layouts → src/layouts}/BaseLayout.d.ts +0 -0
- package/lib/typescript/{layouts → src/layouts}/ParallaxLayout.d.ts +0 -0
- package/lib/typescript/{layouts → src/layouts}/index.d.ts +0 -0
- package/lib/typescript/{layouts → src/layouts}/normal.d.ts +0 -0
- package/lib/typescript/{layouts → src/layouts}/parallax.d.ts +0 -0
- package/lib/typescript/{layouts → src/layouts}/stack.d.ts +0 -0
- package/lib/typescript/{store → src/store}/index.d.ts +0 -0
- package/lib/typescript/{types.d.ts → src/types.d.ts} +8 -1
- package/lib/typescript/src/utils/computedWithAutoFillData.d.ts +18 -0
- package/lib/typescript/{utils → src/utils}/dealWithAnimation.d.ts +0 -0
- package/lib/typescript/{utils → src/utils}/log.d.ts +0 -0
- package/package.json +1 -1
- package/src/Carousel.tsx +20 -11
- package/src/hooks/useAutoPlay.ts +2 -1
- package/src/hooks/useCarouselController.tsx +5 -3
- package/src/hooks/useCommonVariables.ts +2 -2
- package/src/hooks/useInitProps.ts +14 -14
- package/src/hooks/useOnProgressChange.ts +20 -10
- package/src/types.ts +8 -0
- package/src/utils/computedWithAutoFillData.ts +76 -0
package/lib/module/Carousel.js
CHANGED
|
@@ -6,19 +6,20 @@ import { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';
|
|
|
6
6
|
import { ScrollViewGesture } from './ScrollViewGesture';
|
|
7
7
|
import { useVisibleRanges } from './hooks/useVisibleRanges';
|
|
8
8
|
import { StyleSheet, View } from 'react-native';
|
|
9
|
-
import { DATA_LENGTH } from './constants';
|
|
10
9
|
import { BaseLayout } from './layouts/BaseLayout';
|
|
11
10
|
import { useLayoutConfig } from './hooks/useLayoutConfig';
|
|
12
11
|
import { useInitProps } from './hooks/useInitProps';
|
|
13
12
|
import { CTX } from './store';
|
|
14
13
|
import { useCommonVariables } from './hooks/useCommonVariables';
|
|
15
14
|
import { useOnProgressChange } from './hooks/useOnProgressChange';
|
|
15
|
+
import { computedRealIndexWithAutoFillData } from './utils/computedWithAutoFillData';
|
|
16
16
|
const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
|
|
17
17
|
const props = useInitProps(_props);
|
|
18
18
|
const {
|
|
19
19
|
data,
|
|
20
20
|
rawData,
|
|
21
21
|
loop,
|
|
22
|
+
autoFillData,
|
|
22
23
|
mode,
|
|
23
24
|
style,
|
|
24
25
|
width,
|
|
@@ -35,7 +36,8 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
|
|
|
35
36
|
onSnapToItem,
|
|
36
37
|
onScrollBegin,
|
|
37
38
|
onProgressChange,
|
|
38
|
-
customAnimation
|
|
39
|
+
customAnimation,
|
|
40
|
+
defaultIndex
|
|
39
41
|
} = props;
|
|
40
42
|
const commonVariables = useCommonVariables(props);
|
|
41
43
|
const {
|
|
@@ -55,6 +57,8 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
|
|
|
55
57
|
}, [loop, size, dataLength]);
|
|
56
58
|
usePropsErrorBoundary(props);
|
|
57
59
|
useOnProgressChange({
|
|
60
|
+
autoFillData,
|
|
61
|
+
loop,
|
|
58
62
|
size,
|
|
59
63
|
offsetX,
|
|
60
64
|
rawData,
|
|
@@ -68,6 +72,7 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
|
|
|
68
72
|
disable: !data.length,
|
|
69
73
|
withAnimation,
|
|
70
74
|
originalLength: data.length,
|
|
75
|
+
defaultIndex,
|
|
71
76
|
onScrollEnd: () => runOnJS(_onScrollEnd)(),
|
|
72
77
|
onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),
|
|
73
78
|
onChange: i => !!onSnapToItem && runOnJS(onSnapToItem)(i),
|
|
@@ -127,16 +132,12 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
|
|
|
127
132
|
size
|
|
128
133
|
});
|
|
129
134
|
const renderLayout = React.useCallback((item, i) => {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
if (rawData.length === DATA_LENGTH.DOUBLE_ITEM) {
|
|
137
|
-
realIndex = i % 2;
|
|
138
|
-
}
|
|
139
|
-
|
|
135
|
+
const realIndex = computedRealIndexWithAutoFillData({
|
|
136
|
+
index: i,
|
|
137
|
+
dataLength: rawData.length,
|
|
138
|
+
loop,
|
|
139
|
+
autoFillData
|
|
140
|
+
});
|
|
140
141
|
return /*#__PURE__*/React.createElement(BaseLayout, {
|
|
141
142
|
key: i,
|
|
142
143
|
index: i,
|
|
@@ -153,7 +154,7 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
|
|
|
153
154
|
animationValue
|
|
154
155
|
});
|
|
155
156
|
});
|
|
156
|
-
}, [rawData, offsetX, visibleRanges, renderItem, layoutConfig, customAnimation]);
|
|
157
|
+
}, [loop, rawData, offsetX, visibleRanges, autoFillData, renderItem, layoutConfig, customAnimation]);
|
|
157
158
|
return /*#__PURE__*/React.createElement(CTX.Provider, {
|
|
158
159
|
value: {
|
|
159
160
|
props,
|
|
@@ -163,7 +164,7 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
|
|
|
163
164
|
style: [styles.container, {
|
|
164
165
|
width: width || '100%',
|
|
165
166
|
height: height || '100%'
|
|
166
|
-
}
|
|
167
|
+
}]
|
|
167
168
|
}, /*#__PURE__*/React.createElement(ScrollViewGesture, {
|
|
168
169
|
size: size,
|
|
169
170
|
translation: handlerOffsetX,
|
|
@@ -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","forwardRef","_props","ref","props","data","rawData","loop","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","commonVariables","size","handlerOffsetX","dataLength","length","offsetX","totalSize","x","value","isNaN","carouselController","disable","originalLength","_onScrollEnd","onChange","i","duration","next","prev","sharedPreIndex","sharedIndex","computedIndex","getCurrentIndex","start","pause","useCallback","current","scrollViewGestureOnScrollBegin","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","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","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React 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\nconst Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(\n (_props, ref) => {\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 withAnimation,\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 const dataLength = data.length;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * dataLength;\n const x = handlerOffsetX.value % totalSize;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [loop, size, dataLength]);\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 withAnimation,\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 _onScrollEnd = React.useCallback(() => {\n computedIndex();\n onScrollEnd?.(sharedPreIndex.current, sharedIndex.current);\n }, [sharedPreIndex, sharedIndex, computedIndex, onScrollEnd]);\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pause();\n onScrollBegin?.();\n }, [onScrollBegin, pause]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n start();\n _onScrollEnd();\n }, [_onScrollEnd, start]);\n\n const scrollViewGestureOnTouchBegin = React.useCallback(pause, [pause]);\n\n const scrollViewGestureOnTouchEnd = React.useCallback(start, [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 [\n getCurrentIndex,\n goToIndex,\n next,\n prev,\n carouselController.scrollTo,\n ]\n );\n\n const visibleRanges = useVisibleRanges({\n total: data.length,\n viewSize: size,\n translation: handlerOffsetX,\n windowSize,\n });\n\n const layoutConfig = useLayoutConfig({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: any, 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 onTouchBegin={scrollViewGestureOnTouchBegin}\n onTouchEnd={scrollViewGestureOnTouchEnd}\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);\n\nexport default Carousel as <T extends any>(\n props: React.PropsWithChildren<TCarouselProps<T>>\n) => React.ReactElement;\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","BaseLayout","useLayoutConfig","useInitProps","CTX","useCommonVariables","useOnProgressChange","computedRealIndexWithAutoFillData","Carousel","forwardRef","_props","ref","props","data","rawData","loop","autoFillData","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","defaultIndex","commonVariables","size","handlerOffsetX","dataLength","length","offsetX","totalSize","x","value","isNaN","carouselController","disable","originalLength","_onScrollEnd","onChange","i","duration","next","prev","sharedPreIndex","sharedIndex","computedIndex","getCurrentIndex","start","pause","useCallback","current","scrollViewGestureOnScrollBegin","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","goToIndex","animated","to","useImperativeHandle","scrollTo","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","realIndex","index","animationValue","common","styles","container","itemsVertical","itemsHorizontal","map","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React 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 { 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';\nimport { computedRealIndexWithAutoFillData } from './utils/computedWithAutoFillData';\n\nconst Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(\n (_props, ref) => {\n const props = useInitProps(_props);\n\n const {\n data,\n rawData,\n loop,\n autoFillData,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n withAnimation,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n defaultIndex,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffsetX } = commonVariables;\n const dataLength = data.length;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * dataLength;\n const x = handlerOffsetX.value % totalSize;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [loop, size, dataLength]);\n\n usePropsErrorBoundary(props);\n useOnProgressChange({\n autoFillData,\n loop,\n size,\n offsetX,\n rawData,\n onProgressChange,\n });\n\n const carouselController = useCarouselController({\n loop,\n size,\n handlerOffsetX,\n length: data.length,\n disable: !data.length,\n withAnimation,\n originalLength: data.length,\n defaultIndex,\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 _onScrollEnd = React.useCallback(() => {\n computedIndex();\n onScrollEnd?.(sharedPreIndex.current, sharedIndex.current);\n }, [sharedPreIndex, sharedIndex, computedIndex, onScrollEnd]);\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pause();\n onScrollBegin?.();\n }, [onScrollBegin, pause]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n start();\n _onScrollEnd();\n }, [_onScrollEnd, start]);\n\n const scrollViewGestureOnTouchBegin = React.useCallback(pause, [pause]);\n\n const scrollViewGestureOnTouchEnd = React.useCallback(start, [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 [\n getCurrentIndex,\n goToIndex,\n next,\n prev,\n carouselController.scrollTo,\n ]\n );\n\n const visibleRanges = useVisibleRanges({\n total: data.length,\n viewSize: size,\n translation: handlerOffsetX,\n windowSize,\n });\n\n const layoutConfig = useLayoutConfig({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: any, i: number) => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: i,\n dataLength: rawData.length,\n loop,\n autoFillData,\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 loop,\n rawData,\n offsetX,\n visibleRanges,\n autoFillData,\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 ]}\n >\n <ScrollViewGesture\n size={size}\n translation={handlerOffsetX}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n onTouchBegin={scrollViewGestureOnTouchBegin}\n onTouchEnd={scrollViewGestureOnTouchEnd}\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);\n\nexport default Carousel as <T extends any>(\n props: React.PropsWithChildren<TCarouselProps<T>>\n) => React.ReactElement;\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"]}
|
|
@@ -13,6 +13,7 @@ export function useAutoPlay(opts) {
|
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
timer.current && clearTimeout(timer.current);
|
|
16
17
|
timer.current = setTimeout(() => {
|
|
17
18
|
autoPlayReverse ? carouselController.prev({
|
|
18
19
|
onFinished: play
|
|
@@ -26,7 +27,7 @@ export function useAutoPlay(opts) {
|
|
|
26
27
|
return;
|
|
27
28
|
}
|
|
28
29
|
|
|
29
|
-
timer.current &&
|
|
30
|
+
timer.current && clearTimeout(timer.current);
|
|
30
31
|
stopped.current = true;
|
|
31
32
|
}, [autoPlay]);
|
|
32
33
|
const start = React.useCallback(() => {
|
|
@@ -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","
|
|
1
|
+
{"version":3,"sources":["useAutoPlay.ts"],"names":["React","useAutoPlay","opts","autoPlay","autoPlayReverse","autoPlayInterval","carouselController","timer","useRef","stopped","play","useCallback","current","clearTimeout","setTimeout","prev","onFinished","next","pause","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,IAAiBC,YAAY,CAACN,KAAK,CAACK,OAAP,CAA7B;AACAL,IAAAA,KAAK,CAACK,OAAN,GAAgBE,UAAU,CAAC,MAAM;AAC7BV,MAAAA,eAAe,GACTE,kBAAkB,CAACS,IAAnB,CAAwB;AAAEC,QAAAA,UAAU,EAAEN;AAAd,OAAxB,CADS,GAETJ,kBAAkB,CAACW,IAAnB,CAAwB;AAAED,QAAAA,UAAU,EAAEN;AAAd,OAAxB,CAFN;AAGH,KAJyB,EAIvBL,gBAJuB,CAA1B;AAKH,GAXY,EAWV,CAACD,eAAD,EAAkBC,gBAAlB,EAAoCC,kBAApC,CAXU,CAAb;AAaA,QAAMY,KAAK,GAAGlB,KAAK,CAACW,WAAN,CAAkB,MAAM;AAClC,QAAI,CAACR,QAAL,EAAe;AACX;AACH;;AACDI,IAAAA,KAAK,CAACK,OAAN,IAAiBC,YAAY,CAACN,KAAK,CAACK,OAAP,CAA7B;AACAH,IAAAA,OAAO,CAACG,OAAR,GAAkB,IAAlB;AACH,GANa,EAMX,CAACT,QAAD,CANW,CAAd;AAQA,QAAMgB,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;AACHD,MAAAA,KAAK;AACR;;AACD,WAAOA,KAAP;AACH,GAPD,EAOG,CAACA,KAAD,EAAQC,KAAR,EAAehB,QAAf,CAPH;AASA,SAAO;AACHe,IAAAA,KADG;AAEHC,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 && clearTimeout(timer.current);\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 if (!autoPlay) {\n return;\n }\n timer.current && clearTimeout(timer.current);\n stopped.current = true;\n }, [autoPlay]);\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"]}
|
|
@@ -12,12 +12,13 @@ export function useCarouselController(options) {
|
|
|
12
12
|
originalLength,
|
|
13
13
|
length,
|
|
14
14
|
onChange,
|
|
15
|
-
duration
|
|
15
|
+
duration,
|
|
16
|
+
defaultIndex = 0
|
|
16
17
|
} = options;
|
|
17
|
-
const index = useSharedValue(
|
|
18
|
+
const index = useSharedValue(defaultIndex); // The Index displayed to the user
|
|
18
19
|
|
|
19
|
-
const sharedIndex = React.useRef(
|
|
20
|
-
const sharedPreIndex = React.useRef(
|
|
20
|
+
const sharedIndex = React.useRef(defaultIndex);
|
|
21
|
+
const sharedPreIndex = React.useRef(defaultIndex);
|
|
21
22
|
const currentFixedPage = React.useCallback(() => {
|
|
22
23
|
if (loop) {
|
|
23
24
|
return -Math.round(handlerOffsetX.value / size);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useCarouselController.tsx"],"names":["React","Easing","runOnJS","useSharedValue","dealWithAnimation","useCarouselController","options","size","loop","handlerOffsetX","withAnimation","disable","originalLength","length","onChange","duration","index","sharedIndex","useRef","sharedPreIndex","currentFixedPage","useCallback","Math","round","value","fixed","abs","convertToSharedIndex","i","computedIndex","current","toInt","_sharedIndex","getCurrentIndex","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","easeOutQuart","next","opts","count","animated","nextPage","prev","prevPage","to","idx","offset","scrollTo","n"],"mappings":"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","sourcesContent":["import React from 'react';\nimport type Animated from 'react-native-reanimated';\nimport { Easing } from '../constants';\nimport { runOnJS, useSharedValue } from 'react-native-reanimated';\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from '../types';\nimport { dealWithAnimation } from '@/utils/dealWithAnimation';\n\ninterface IOpts {\n loop: boolean;\n size: number;\n handlerOffsetX: Animated.SharedValue<number>;\n withAnimation?: TCarouselProps['withAnimation'];\n disable?: boolean;\n duration?: number;\n originalLength: number;\n length: number;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n // the length before fill data\n onChange: (index: number) => void;\n}\n\nexport interface ICarouselController {\n length: number;\n index: Animated.SharedValue<number>;\n sharedIndex: React.MutableRefObject<number>;\n sharedPreIndex: React.MutableRefObject<number>;\n prev: (opts?: TCarouselActionOptions) => void;\n next: (opts?: TCarouselActionOptions) => void;\n computedIndex: () => void;\n getCurrentIndex: () => number;\n to: (index: number, animated?: boolean) => void;\n scrollTo: (opts?: TCarouselActionOptions) => void;\n}\n\nexport function useCarouselController(options: IOpts): ICarouselController {\n const {\n size,\n loop,\n handlerOffsetX,\n withAnimation,\n disable = false,\n originalLength,\n length,\n onChange,\n duration,\n } = options;\n\n const index = useSharedValue<number>(0);\n // The Index displayed to the user\n const sharedIndex = React.useRef<number>(0);\n const sharedPreIndex = React.useRef<number>(0);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop) {\n return -Math.round(handlerOffsetX.value / size);\n }\n\n const fixed = (handlerOffsetX.value / size) % length;\n return Math.round(\n handlerOffsetX.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? length - fixed : 0)\n );\n }, [handlerOffsetX, length, size, loop]);\n\n const convertToSharedIndex = React.useCallback(\n (i: number) => {\n if (loop) {\n switch (originalLength) {\n case 1:\n return 0;\n case 2:\n return i % 2;\n }\n }\n return i;\n },\n [originalLength, loop]\n );\n\n const computedIndex = React.useCallback(() => {\n sharedPreIndex.current = sharedIndex.current;\n const toInt = (handlerOffsetX.value / size) % length;\n const i =\n handlerOffsetX.value <= 0\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? length - toInt : 0);\n index.value = i;\n const _sharedIndex = convertToSharedIndex(i);\n sharedIndex.current = _sharedIndex;\n onChange(_sharedIndex);\n }, [\n length,\n handlerOffsetX,\n sharedPreIndex,\n index,\n size,\n sharedIndex,\n convertToSharedIndex,\n onChange,\n ]);\n\n const getCurrentIndex = React.useCallback(() => {\n return index.value;\n }, [index]);\n\n const canSliding = React.useCallback(() => {\n return !disable;\n }, [disable]);\n\n const onScrollEnd = React.useCallback(() => {\n options.onScrollEnd?.();\n }, [options]);\n\n const onScrollBegin = React.useCallback(() => {\n options.onScrollBegin?.();\n }, [options]);\n\n const scrollWithTiming = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n 'worklet';\n const callback = (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n };\n\n const defaultWithAnimation: WithTimingAnimation = {\n type: 'timing',\n config: { duration, easing: Easing.easeOutQuart },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n callback\n );\n },\n [duration, withAnimation, onScrollEnd]\n );\n\n const next = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n 'worklet';\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value >= length - 1)) return;\n\n onScrollBegin?.();\n\n const nextPage = currentFixedPage() + count;\n index.value = nextPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -nextPage * size,\n onFinished\n ) as any;\n } else {\n handlerOffsetX.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n length,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const prev = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value <= 0)) return;\n\n onScrollBegin?.();\n\n const prevPage = currentFixedPage() - count;\n index.value = prevPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -prevPage * size,\n onFinished\n );\n } else {\n handlerOffsetX.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const to = React.useCallback(\n (idx: number, animated: boolean = false) => {\n if (idx === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n\n const offset = handlerOffsetX.value + (index.value - idx) * size;\n\n if (animated) {\n index.value = idx;\n handlerOffsetX.value = scrollWithTiming(offset);\n } else {\n handlerOffsetX.value = offset;\n index.value = idx;\n runOnJS(onScrollEnd)();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n onScrollEnd,\n ]\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count, animated = false, onFinished } = opts;\n if (!count) {\n return;\n }\n const n = Math.round(count);\n if (n < 0) {\n prev({ count: Math.abs(n), animated, onFinished });\n } else {\n next({ count: n, animated, onFinished });\n }\n },\n [prev, next]\n );\n\n return {\n next,\n prev,\n to,\n scrollTo,\n index,\n length,\n sharedIndex,\n sharedPreIndex,\n computedIndex,\n getCurrentIndex,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["useCarouselController.tsx"],"names":["React","Easing","runOnJS","useSharedValue","dealWithAnimation","useCarouselController","options","size","loop","handlerOffsetX","withAnimation","disable","originalLength","length","onChange","duration","defaultIndex","index","sharedIndex","useRef","sharedPreIndex","currentFixedPage","useCallback","Math","round","value","fixed","abs","convertToSharedIndex","i","computedIndex","current","toInt","_sharedIndex","getCurrentIndex","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","easeOutQuart","next","opts","count","animated","nextPage","prev","prevPage","to","idx","offset","scrollTo","n"],"mappings":"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","sourcesContent":["import React from 'react';\nimport type Animated from 'react-native-reanimated';\nimport { Easing } from '../constants';\nimport { runOnJS, useSharedValue } from 'react-native-reanimated';\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from '../types';\nimport { dealWithAnimation } from '@/utils/dealWithAnimation';\n\ninterface IOpts {\n loop: boolean;\n size: number;\n handlerOffsetX: Animated.SharedValue<number>;\n withAnimation?: TCarouselProps['withAnimation'];\n disable?: boolean;\n duration?: number;\n originalLength: number;\n length: number;\n defaultIndex?: number;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n // the length before fill data\n onChange: (index: number) => void;\n}\n\nexport interface ICarouselController {\n length: number;\n index: Animated.SharedValue<number>;\n sharedIndex: React.MutableRefObject<number>;\n sharedPreIndex: React.MutableRefObject<number>;\n prev: (opts?: TCarouselActionOptions) => void;\n next: (opts?: TCarouselActionOptions) => void;\n computedIndex: () => void;\n getCurrentIndex: () => number;\n to: (index: number, animated?: boolean) => void;\n scrollTo: (opts?: TCarouselActionOptions) => void;\n}\n\nexport function useCarouselController(options: IOpts): ICarouselController {\n const {\n size,\n loop,\n handlerOffsetX,\n withAnimation,\n disable = false,\n originalLength,\n length,\n onChange,\n duration,\n defaultIndex = 0,\n } = options;\n\n const index = useSharedValue<number>(defaultIndex);\n // The Index displayed to the user\n const sharedIndex = React.useRef<number>(defaultIndex);\n const sharedPreIndex = React.useRef<number>(defaultIndex);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop) {\n return -Math.round(handlerOffsetX.value / size);\n }\n\n const fixed = (handlerOffsetX.value / size) % length;\n return Math.round(\n handlerOffsetX.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? length - fixed : 0)\n );\n }, [handlerOffsetX, length, size, loop]);\n\n const convertToSharedIndex = React.useCallback(\n (i: number) => {\n if (loop) {\n switch (originalLength) {\n case 1:\n return 0;\n case 2:\n return i % 2;\n }\n }\n return i;\n },\n [originalLength, loop]\n );\n\n const computedIndex = React.useCallback(() => {\n sharedPreIndex.current = sharedIndex.current;\n const toInt = (handlerOffsetX.value / size) % length;\n const i =\n handlerOffsetX.value <= 0\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? length - toInt : 0);\n index.value = i;\n const _sharedIndex = convertToSharedIndex(i);\n sharedIndex.current = _sharedIndex;\n onChange(_sharedIndex);\n }, [\n length,\n handlerOffsetX,\n sharedPreIndex,\n index,\n size,\n sharedIndex,\n convertToSharedIndex,\n onChange,\n ]);\n\n const getCurrentIndex = React.useCallback(() => {\n return index.value;\n }, [index]);\n\n const canSliding = React.useCallback(() => {\n return !disable;\n }, [disable]);\n\n const onScrollEnd = React.useCallback(() => {\n options.onScrollEnd?.();\n }, [options]);\n\n const onScrollBegin = React.useCallback(() => {\n options.onScrollBegin?.();\n }, [options]);\n\n const scrollWithTiming = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n 'worklet';\n const callback = (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n };\n\n const defaultWithAnimation: WithTimingAnimation = {\n type: 'timing',\n config: { duration, easing: Easing.easeOutQuart },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n callback\n );\n },\n [duration, withAnimation, onScrollEnd]\n );\n\n const next = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n 'worklet';\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value >= length - 1)) return;\n\n onScrollBegin?.();\n\n const nextPage = currentFixedPage() + count;\n index.value = nextPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -nextPage * size,\n onFinished\n ) as any;\n } else {\n handlerOffsetX.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n length,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const prev = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value <= 0)) return;\n\n onScrollBegin?.();\n\n const prevPage = currentFixedPage() - count;\n index.value = prevPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -prevPage * size,\n onFinished\n );\n } else {\n handlerOffsetX.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const to = React.useCallback(\n (idx: number, animated: boolean = false) => {\n if (idx === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n\n const offset = handlerOffsetX.value + (index.value - idx) * size;\n\n if (animated) {\n index.value = idx;\n handlerOffsetX.value = scrollWithTiming(offset);\n } else {\n handlerOffsetX.value = offset;\n index.value = idx;\n runOnJS(onScrollEnd)();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n onScrollEnd,\n ]\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count, animated = false, onFinished } = opts;\n if (!count) {\n return;\n }\n const n = Math.round(count);\n if (n < 0) {\n prev({ count: Math.abs(n), animated, onFinished });\n } else {\n next({ count: n, animated, onFinished });\n }\n },\n [prev, next]\n );\n\n return {\n next,\n prev,\n to,\n scrollTo,\n index,\n length,\n sharedIndex,\n sharedPreIndex,\n computedIndex,\n getCurrentIndex,\n };\n}\n"]}
|
|
@@ -6,7 +6,8 @@ export function useCommonVariables(props) {
|
|
|
6
6
|
height,
|
|
7
7
|
width,
|
|
8
8
|
data,
|
|
9
|
-
defaultIndex
|
|
9
|
+
defaultIndex,
|
|
10
|
+
rawData
|
|
10
11
|
} = props;
|
|
11
12
|
const size = vertical ? height : width;
|
|
12
13
|
const validLength = data.length - 1;
|
|
@@ -14,7 +15,7 @@ export function useCommonVariables(props) {
|
|
|
14
15
|
const handlerOffsetX = useSharedValue(defaultHandlerOffsetX);
|
|
15
16
|
React.useEffect(() => {
|
|
16
17
|
handlerOffsetX.value = defaultHandlerOffsetX;
|
|
17
|
-
}, [vertical, handlerOffsetX, defaultHandlerOffsetX]);
|
|
18
|
+
}, [vertical, handlerOffsetX, defaultHandlerOffsetX, rawData]);
|
|
18
19
|
return {
|
|
19
20
|
size,
|
|
20
21
|
validLength,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useCommonVariables.ts"],"names":["React","useSharedValue","useCommonVariables","props","vertical","height","width","data","defaultIndex","size","validLength","length","defaultHandlerOffsetX","Math","abs","handlerOffsetX","useEffect","value"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAAmBC,cAAnB,QAAyC,yBAAzC;AASA,OAAO,SAASC,kBAAT,CACHC,KADG,EAEa;AAChB,QAAM;AAAEC,IAAAA,QAAF;AAAYC,IAAAA,MAAZ;AAAoBC,IAAAA,KAApB;AAA2BC,IAAAA,IAA3B;AAAiCC,IAAAA;
|
|
1
|
+
{"version":3,"sources":["useCommonVariables.ts"],"names":["React","useSharedValue","useCommonVariables","props","vertical","height","width","data","defaultIndex","rawData","size","validLength","length","defaultHandlerOffsetX","Math","abs","handlerOffsetX","useEffect","value"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAAmBC,cAAnB,QAAyC,yBAAzC;AASA,OAAO,SAASC,kBAAT,CACHC,KADG,EAEa;AAChB,QAAM;AAAEC,IAAAA,QAAF;AAAYC,IAAAA,MAAZ;AAAoBC,IAAAA,KAApB;AAA2BC,IAAAA,IAA3B;AAAiCC,IAAAA,YAAjC;AAA+CC,IAAAA;AAA/C,MAA2DN,KAAjE;AACA,QAAMO,IAAI,GAAGN,QAAQ,GAAGC,MAAH,GAAYC,KAAjC;AACA,QAAMK,WAAW,GAAGJ,IAAI,CAACK,MAAL,GAAc,CAAlC;AACA,QAAMC,qBAAqB,GAAG,CAACC,IAAI,CAACC,GAAL,CAASP,YAAY,GAAGE,IAAxB,CAA/B;AACA,QAAMM,cAAc,GAAGf,cAAc,CAASY,qBAAT,CAArC;AAEAb,EAAAA,KAAK,CAACiB,SAAN,CAAgB,MAAM;AAClBD,IAAAA,cAAc,CAACE,KAAf,GAAuBL,qBAAvB;AACH,GAFD,EAEG,CAACT,QAAD,EAAWY,cAAX,EAA2BH,qBAA3B,EAAkDJ,OAAlD,CAFH;AAIA,SAAO;AACHC,IAAAA,IADG;AAEHC,IAAAA,WAFG;AAGHK,IAAAA;AAHG,GAAP;AAKH","sourcesContent":["import React from 'react';\nimport Animated, { useSharedValue } from 'react-native-reanimated';\nimport type { TInitializeCarouselProps } from './useInitProps';\n\ninterface ICommonVariables {\n size: number;\n validLength: number;\n handlerOffsetX: Animated.SharedValue<number>;\n}\n\nexport function useCommonVariables(\n props: TInitializeCarouselProps<any>\n): ICommonVariables {\n const { vertical, height, width, data, defaultIndex, rawData } = props;\n const size = vertical ? height : width;\n const validLength = data.length - 1;\n const defaultHandlerOffsetX = -Math.abs(defaultIndex * size);\n const handlerOffsetX = useSharedValue<number>(defaultHandlerOffsetX);\n\n React.useEffect(() => {\n handlerOffsetX.value = defaultHandlerOffsetX;\n }, [vertical, handlerOffsetX, defaultHandlerOffsetX, rawData]);\n\n return {\n size,\n validLength,\n handlerOffsetX,\n };\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { computedFillDataWithAutoFillData } from '@/utils/computedWithAutoFillData';
|
|
1
2
|
import React from 'react';
|
|
2
|
-
import { DATA_LENGTH } from '../constants';
|
|
3
3
|
export function useInitProps(props) {
|
|
4
4
|
var _props$enableSnap;
|
|
5
5
|
|
|
@@ -13,6 +13,7 @@ export function useInitProps(props) {
|
|
|
13
13
|
style = {},
|
|
14
14
|
panGestureHandlerProps = {},
|
|
15
15
|
pagingEnabled = true,
|
|
16
|
+
autoFillData = true,
|
|
16
17
|
snapEnabled = (_props$enableSnap = props.enableSnap) !== null && _props$enableSnap !== void 0 ? _props$enableSnap : true,
|
|
17
18
|
width: _width,
|
|
18
19
|
height: _height
|
|
@@ -20,19 +21,12 @@ export function useInitProps(props) {
|
|
|
20
21
|
const width = Math.round(_width || 0);
|
|
21
22
|
const height = Math.round(_height || 0);
|
|
22
23
|
const autoPlayInterval = Math.max(_autoPlayInterval, 0);
|
|
23
|
-
const data = React.useMemo(() => {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
if (rawData.length === DATA_LENGTH.DOUBLE_ITEM) {
|
|
31
|
-
return [rawData[0], rawData[1], rawData[0], rawData[1]];
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
return rawData;
|
|
35
|
-
}, [rawData, loop]);
|
|
24
|
+
const data = React.useMemo(() => computedFillDataWithAutoFillData({
|
|
25
|
+
loop,
|
|
26
|
+
autoFillData,
|
|
27
|
+
data: rawData,
|
|
28
|
+
dataLength: rawData.length
|
|
29
|
+
}), [rawData, loop, autoFillData]);
|
|
36
30
|
|
|
37
31
|
if (props.mode === 'vertical-stack' || props.mode === 'horizontal-stack') {
|
|
38
32
|
var _props$modeConfig$sho, _props$modeConfig;
|
|
@@ -46,6 +40,7 @@ export function useInitProps(props) {
|
|
|
46
40
|
|
|
47
41
|
return { ...props,
|
|
48
42
|
defaultIndex,
|
|
43
|
+
autoFillData,
|
|
49
44
|
data,
|
|
50
45
|
rawData,
|
|
51
46
|
loop,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useInitProps.ts"],"names":["
|
|
1
|
+
{"version":3,"sources":["useInitProps.ts"],"names":["computedFillDataWithAutoFillData","React","useInitProps","props","defaultIndex","data","rawData","loop","enabled","autoPlayInterval","_autoPlayInterval","scrollAnimationDuration","style","panGestureHandlerProps","pagingEnabled","autoFillData","snapEnabled","enableSnap","width","_width","height","_height","Math","round","max","useMemo","dataLength","length","mode","modeConfig","showLength"],"mappings":"AAAA,SAASA,gCAAT,QAAiD,kCAAjD;AACA,OAAOC,KAAP,MAAkB,OAAlB;AAsBA,OAAO,SAASC,YAAT,CACHC,KADG,EAEwB;AAAA;;AAC3B,QAAM;AACFC,IAAAA,YAAY,GAAG,CADb;AAEFC,IAAAA,IAAI,EAAEC,OAAO,GAAG,EAFd;AAGFC,IAAAA,IAAI,GAAG,IAHL;AAIFC,IAAAA,OAAO,GAAG,IAJR;AAKFC,IAAAA,gBAAgB,EAAEC,iBAAiB,GAAG,IALpC;AAMFC,IAAAA,uBAAuB,GAAG,GANxB;AAOFC,IAAAA,KAAK,GAAG,EAPN;AAQFC,IAAAA,sBAAsB,GAAG,EARvB;AASFC,IAAAA,aAAa,GAAG,IATd;AAUFC,IAAAA,YAAY,GAAG,IAVb;AAWFC,IAAAA,WAAW,wBAAGb,KAAK,CAACc,UAAT,iEAAuB,IAXhC;AAYFC,IAAAA,KAAK,EAAEC,MAZL;AAaFC,IAAAA,MAAM,EAAEC;AAbN,MAcFlB,KAdJ;AAgBA,QAAMe,KAAK,GAAGI,IAAI,CAACC,KAAL,CAAWJ,MAAM,IAAI,CAArB,CAAd;AACA,QAAMC,MAAM,GAAGE,IAAI,CAACC,KAAL,CAAWF,OAAO,IAAI,CAAtB,CAAf;AACA,QAAMZ,gBAAgB,GAAGa,IAAI,CAACE,GAAL,CAASd,iBAAT,EAA4B,CAA5B,CAAzB;AAEA,QAAML,IAAI,GAAGJ,KAAK,CAACwB,OAAN,CACT,MACIzB,gCAAgC,CAAI;AAChCO,IAAAA,IADgC;AAEhCQ,IAAAA,YAFgC;AAGhCV,IAAAA,IAAI,EAAEC,OAH0B;AAIhCoB,IAAAA,UAAU,EAAEpB,OAAO,CAACqB;AAJY,GAAJ,CAF3B,EAQT,CAACrB,OAAD,EAAUC,IAAV,EAAgBQ,YAAhB,CARS,CAAb;;AAWA,MAAIZ,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,CAACsB,MAAL,GAAc,CADlD;AAEH;;AACD,SAAO,EACH,GAAGxB,KADA;AAEHC,IAAAA,YAFG;AAGHW,IAAAA,YAHG;AAIHV,IAAAA,IAJG;AAKHC,IAAAA,OALG;AAMHC,IAAAA,IANG;AAOHC,IAAAA,OAPG;AAQHC,IAAAA,gBARG;AASHE,IAAAA,uBATG;AAUHC,IAAAA,KAVG;AAWHC,IAAAA,sBAXG;AAYHC,IAAAA,aAZG;AAaHE,IAAAA,WAbG;AAcHE,IAAAA,KAdG;AAeHE,IAAAA;AAfG,GAAP;AAiBH","sourcesContent":["import { computedFillDataWithAutoFillData } from '@/utils/computedWithAutoFillData';\nimport React from 'react';\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 | 'autoFillData'\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 enabled = true,\n autoPlayInterval: _autoPlayInterval = 1000,\n scrollAnimationDuration = 500,\n style = {},\n panGestureHandlerProps = {},\n pagingEnabled = true,\n autoFillData = true,\n snapEnabled = props.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 () =>\n computedFillDataWithAutoFillData<T>({\n loop,\n autoFillData,\n data: rawData,\n dataLength: rawData.length,\n }),\n [rawData, loop, autoFillData]\n );\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 autoFillData,\n data,\n rawData,\n loop,\n enabled,\n autoPlayInterval,\n scrollAnimationDuration,\n style,\n panGestureHandlerProps,\n pagingEnabled,\n snapEnabled,\n width,\n height,\n };\n}\n"]}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { runOnJS, useAnimatedReaction } from 'react-native-reanimated';
|
|
2
|
-
import {
|
|
2
|
+
import { computedOffsetXValueWithAutoFillData } from '@/utils/computedWithAutoFillData';
|
|
3
3
|
export function useOnProgressChange(opts) {
|
|
4
4
|
const {
|
|
5
|
+
autoFillData,
|
|
6
|
+
loop,
|
|
5
7
|
offsetX,
|
|
6
8
|
rawData,
|
|
7
9
|
size,
|
|
@@ -9,14 +11,16 @@ export function useOnProgressChange(opts) {
|
|
|
9
11
|
} = opts;
|
|
10
12
|
const rawDataLength = rawData.length;
|
|
11
13
|
useAnimatedReaction(() => offsetX.value, _value => {
|
|
12
|
-
let value =
|
|
14
|
+
let value = computedOffsetXValueWithAutoFillData({
|
|
15
|
+
value: _value,
|
|
16
|
+
rawDataLength,
|
|
17
|
+
size,
|
|
18
|
+
autoFillData,
|
|
19
|
+
loop
|
|
20
|
+
});
|
|
13
21
|
|
|
14
|
-
if (
|
|
15
|
-
value =
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
if (rawDataLength === DATA_LENGTH.DOUBLE_ITEM) {
|
|
19
|
-
value = value % (size * 2);
|
|
22
|
+
if (!loop) {
|
|
23
|
+
value = Math.max(-((rawDataLength - 1) * size), Math.min(value, 0));
|
|
20
24
|
}
|
|
21
25
|
|
|
22
26
|
let absoluteProgress = Math.abs(value / size);
|
|
@@ -26,6 +30,6 @@ export function useOnProgressChange(opts) {
|
|
|
26
30
|
}
|
|
27
31
|
|
|
28
32
|
!!onProgressChange && runOnJS(onProgressChange)(value, absoluteProgress);
|
|
29
|
-
}, [
|
|
33
|
+
}, [loop, autoFillData, rawDataLength, onProgressChange]);
|
|
30
34
|
}
|
|
31
35
|
//# sourceMappingURL=useOnProgressChange.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useOnProgressChange.ts"],"names":["runOnJS","useAnimatedReaction","
|
|
1
|
+
{"version":3,"sources":["useOnProgressChange.ts"],"names":["runOnJS","useAnimatedReaction","computedOffsetXValueWithAutoFillData","useOnProgressChange","opts","autoFillData","loop","offsetX","rawData","size","onProgressChange","rawDataLength","length","value","_value","Math","max","min","absoluteProgress","abs"],"mappings":"AAAA,SACIA,OADJ,EAEIC,mBAFJ,QAGO,yBAHP;AAIA,SAASC,oCAAT,QAAqD,kCAArD;AAGA,OAAO,SAASC,mBAAT,CACHC,IADG,EAQL;AACE,QAAM;AAAEC,IAAAA,YAAF;AAAgBC,IAAAA,IAAhB;AAAsBC,IAAAA,OAAtB;AAA+BC,IAAAA,OAA/B;AAAwCC,IAAAA,IAAxC;AAA8CC,IAAAA;AAA9C,MACFN,IADJ;AAGA,QAAMO,aAAa,GAAGH,OAAO,CAACI,MAA9B;AAEAX,EAAAA,mBAAmB,CACf,MAAMM,OAAO,CAACM,KADC,EAEdC,MAAD,IAAY;AACR,QAAID,KAAK,GAAGX,oCAAoC,CAAC;AAC7CW,MAAAA,KAAK,EAAEC,MADsC;AAE7CH,MAAAA,aAF6C;AAG7CF,MAAAA,IAH6C;AAI7CJ,MAAAA,YAJ6C;AAK7CC,MAAAA;AAL6C,KAAD,CAAhD;;AAQA,QAAI,CAACA,IAAL,EAAW;AACPO,MAAAA,KAAK,GAAGE,IAAI,CAACC,GAAL,CACJ,EAAE,CAACL,aAAa,GAAG,CAAjB,IAAsBF,IAAxB,CADI,EAEJM,IAAI,CAACE,GAAL,CAASJ,KAAT,EAAgB,CAAhB,CAFI,CAAR;AAIH;;AAED,QAAIK,gBAAgB,GAAGH,IAAI,CAACI,GAAL,CAASN,KAAK,GAAGJ,IAAjB,CAAvB;;AAEA,QAAII,KAAK,GAAG,CAAZ,EAAe;AACXK,MAAAA,gBAAgB,GAAGP,aAAa,GAAGO,gBAAnC;AACH;;AAED,KAAC,CAACR,gBAAF,IACIV,OAAO,CAACU,gBAAD,CAAP,CAA0BG,KAA1B,EAAiCK,gBAAjC,CADJ;AAEH,GA1Bc,EA2Bf,CAACZ,IAAD,EAAOD,YAAP,EAAqBM,aAArB,EAAoCD,gBAApC,CA3Be,CAAnB;AA6BH","sourcesContent":["import Animated, {\n runOnJS,\n useAnimatedReaction,\n} from 'react-native-reanimated';\nimport { computedOffsetXValueWithAutoFillData } from '@/utils/computedWithAutoFillData';\nimport type { TCarouselProps } from '../types';\n\nexport function useOnProgressChange(\n opts: {\n size: number;\n autoFillData: boolean;\n loop: boolean;\n offsetX: Animated.SharedValue<number>;\n rawData: TCarouselProps['data'];\n } & Pick<TCarouselProps, 'onProgressChange'>\n) {\n const { autoFillData, loop, offsetX, rawData, size, onProgressChange } =\n opts;\n\n const rawDataLength = rawData.length;\n\n useAnimatedReaction(\n () => offsetX.value,\n (_value) => {\n let value = computedOffsetXValueWithAutoFillData({\n value: _value,\n rawDataLength,\n size,\n autoFillData,\n loop,\n });\n\n if (!loop) {\n value = Math.max(\n -((rawDataLength - 1) * size),\n Math.min(value, 0)\n );\n }\n\n let absoluteProgress = Math.abs(value / size);\n\n if (value > 0) {\n absoluteProgress = rawDataLength - absoluteProgress;\n }\n\n !!onProgressChange &&\n runOnJS(onProgressChange)(value, absoluteProgress);\n },\n [loop, autoFillData, rawDataLength, onProgressChange]\n );\n}\n"]}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { DATA_LENGTH } from 'src/constants';
|
|
2
|
+
const {
|
|
3
|
+
SINGLE_ITEM,
|
|
4
|
+
DOUBLE_ITEM
|
|
5
|
+
} = DATA_LENGTH;
|
|
6
|
+
|
|
7
|
+
function isAutoFillData(params) {
|
|
8
|
+
'worklet';
|
|
9
|
+
|
|
10
|
+
return !!params.loop && !!params.autoFillData;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function computedOffsetXValueWithAutoFillData(params) {
|
|
14
|
+
'worklet';
|
|
15
|
+
|
|
16
|
+
const {
|
|
17
|
+
rawDataLength,
|
|
18
|
+
value,
|
|
19
|
+
size,
|
|
20
|
+
loop,
|
|
21
|
+
autoFillData
|
|
22
|
+
} = params;
|
|
23
|
+
|
|
24
|
+
if (isAutoFillData({
|
|
25
|
+
loop,
|
|
26
|
+
autoFillData
|
|
27
|
+
})) {
|
|
28
|
+
switch (rawDataLength) {
|
|
29
|
+
case SINGLE_ITEM:
|
|
30
|
+
return value % size;
|
|
31
|
+
|
|
32
|
+
case DOUBLE_ITEM:
|
|
33
|
+
return value % (size * 2);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
export function computedRealIndexWithAutoFillData(params) {
|
|
40
|
+
const {
|
|
41
|
+
index,
|
|
42
|
+
dataLength,
|
|
43
|
+
loop,
|
|
44
|
+
autoFillData
|
|
45
|
+
} = params;
|
|
46
|
+
|
|
47
|
+
if (isAutoFillData({
|
|
48
|
+
loop,
|
|
49
|
+
autoFillData
|
|
50
|
+
})) {
|
|
51
|
+
switch (dataLength) {
|
|
52
|
+
case SINGLE_ITEM:
|
|
53
|
+
return index % 1;
|
|
54
|
+
|
|
55
|
+
case DOUBLE_ITEM:
|
|
56
|
+
return index % 2;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return index;
|
|
61
|
+
}
|
|
62
|
+
export function computedFillDataWithAutoFillData(params) {
|
|
63
|
+
const {
|
|
64
|
+
data,
|
|
65
|
+
loop,
|
|
66
|
+
autoFillData,
|
|
67
|
+
dataLength
|
|
68
|
+
} = params;
|
|
69
|
+
|
|
70
|
+
if (isAutoFillData({
|
|
71
|
+
loop,
|
|
72
|
+
autoFillData
|
|
73
|
+
})) {
|
|
74
|
+
switch (dataLength) {
|
|
75
|
+
case SINGLE_ITEM:
|
|
76
|
+
return [data[0], data[0], data[0]];
|
|
77
|
+
|
|
78
|
+
case DOUBLE_ITEM:
|
|
79
|
+
return [data[0], data[1], data[0], data[1]];
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return data;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=computedWithAutoFillData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["computedWithAutoFillData.ts"],"names":["DATA_LENGTH","SINGLE_ITEM","DOUBLE_ITEM","isAutoFillData","params","loop","autoFillData","computedOffsetXValueWithAutoFillData","rawDataLength","value","size","computedRealIndexWithAutoFillData","index","dataLength","computedFillDataWithAutoFillData","data"],"mappings":"AAAA,SAASA,WAAT,QAA4B,eAA5B;AAEA,MAAM;AAAEC,EAAAA,WAAF;AAAeC,EAAAA;AAAf,IAA+BF,WAArC;;AAEA,SAASG,cAAT,CAAwBC,MAAxB,EAA0E;AACtE;;AACA,SAAO,CAAC,CAACA,MAAM,CAACC,IAAT,IAAiB,CAAC,CAACD,MAAM,CAACE,YAAjC;AACH;;AAOD,OAAO,SAASC,oCAAT,CACHH,MADG,EAML;AACE;;AAEA,QAAM;AAAEI,IAAAA,aAAF;AAAiBC,IAAAA,KAAjB;AAAwBC,IAAAA,IAAxB;AAA8BL,IAAAA,IAA9B;AAAoCC,IAAAA;AAApC,MAAqDF,MAA3D;;AAEA,MAAID,cAAc,CAAC;AAAEE,IAAAA,IAAF;AAAQC,IAAAA;AAAR,GAAD,CAAlB,EAA4C;AACxC,YAAQE,aAAR;AACI,WAAKP,WAAL;AACI,eAAOQ,KAAK,GAAGC,IAAf;;AACJ,WAAKR,WAAL;AACI,eAAOO,KAAK,IAAIC,IAAI,GAAG,CAAX,CAAZ;AAJR;AAMH;;AAED,SAAOD,KAAP;AACH;AAED,OAAO,SAASE,iCAAT,CACHP,MADG,EAKL;AACE,QAAM;AAAEQ,IAAAA,KAAF;AAASC,IAAAA,UAAT;AAAqBR,IAAAA,IAArB;AAA2BC,IAAAA;AAA3B,MAA4CF,MAAlD;;AAEA,MAAID,cAAc,CAAC;AAAEE,IAAAA,IAAF;AAAQC,IAAAA;AAAR,GAAD,CAAlB,EAA4C;AACxC,YAAQO,UAAR;AACI,WAAKZ,WAAL;AACI,eAAOW,KAAK,GAAG,CAAf;;AACJ,WAAKV,WAAL;AACI,eAAOU,KAAK,GAAG,CAAf;AAJR;AAMH;;AAED,SAAOA,KAAP;AACH;AAED,OAAO,SAASE,gCAAT,CACHV,MADG,EAKA;AACH,QAAM;AAAEW,IAAAA,IAAF;AAAQV,IAAAA,IAAR;AAAcC,IAAAA,YAAd;AAA4BO,IAAAA;AAA5B,MAA2CT,MAAjD;;AAEA,MAAID,cAAc,CAAC;AAAEE,IAAAA,IAAF;AAAQC,IAAAA;AAAR,GAAD,CAAlB,EAA4C;AACxC,YAAQO,UAAR;AACI,WAAKZ,WAAL;AACI,eAAO,CAACc,IAAI,CAAC,CAAD,CAAL,EAAUA,IAAI,CAAC,CAAD,CAAd,EAAmBA,IAAI,CAAC,CAAD,CAAvB,CAAP;;AACJ,WAAKb,WAAL;AACI,eAAO,CAACa,IAAI,CAAC,CAAD,CAAL,EAAUA,IAAI,CAAC,CAAD,CAAd,EAAmBA,IAAI,CAAC,CAAD,CAAvB,EAA4BA,IAAI,CAAC,CAAD,CAAhC,CAAP;AAJR;AAMH;;AAED,SAAOA,IAAP;AACH","sourcesContent":["import { DATA_LENGTH } from 'src/constants';\n\nconst { SINGLE_ITEM, DOUBLE_ITEM } = DATA_LENGTH;\n\nfunction isAutoFillData(params: { autoFillData: boolean; loop: boolean }) {\n 'worklet';\n return !!params.loop && !!params.autoFillData;\n}\n\ntype BaseParams<T extends object = {}> = {\n autoFillData: boolean;\n loop: boolean;\n} & T;\n\nexport function computedOffsetXValueWithAutoFillData(\n params: BaseParams<{\n rawDataLength: number;\n value: number;\n size: number;\n }>\n) {\n 'worklet';\n\n const { rawDataLength, value, size, loop, autoFillData } = params;\n\n if (isAutoFillData({ loop, autoFillData })) {\n switch (rawDataLength) {\n case SINGLE_ITEM:\n return value % size;\n case DOUBLE_ITEM:\n return value % (size * 2);\n }\n }\n\n return value;\n}\n\nexport function computedRealIndexWithAutoFillData(\n params: BaseParams<{\n index: number;\n dataLength: number;\n }>\n) {\n const { index, dataLength, loop, autoFillData } = params;\n\n if (isAutoFillData({ loop, autoFillData })) {\n switch (dataLength) {\n case SINGLE_ITEM:\n return index % 1;\n case DOUBLE_ITEM:\n return index % 2;\n }\n }\n\n return index;\n}\n\nexport function computedFillDataWithAutoFillData<T>(\n params: BaseParams<{\n data: T[];\n dataLength: number;\n }>\n): T[] {\n const { data, loop, autoFillData, dataLength } = params;\n\n if (isAutoFillData({ loop, autoFillData })) {\n switch (dataLength) {\n case SINGLE_ITEM:\n return [data[0], data[0], data[0]];\n case DOUBLE_ITEM:\n return [data[0], data[1], data[0], data[1]];\n }\n }\n\n return data;\n}\n"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
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' | 'autoFillData'> & {
|
|
4
4
|
rawData: T[];
|
|
5
5
|
};
|
|
6
6
|
export declare function useInitProps<T>(props: TCarouselProps<T>): TInitializeCarouselProps<T>;
|
|
File without changes
|
|
File without changes
|
|
@@ -2,6 +2,8 @@ import Animated from 'react-native-reanimated';
|
|
|
2
2
|
import type { TCarouselProps } from '../types';
|
|
3
3
|
export declare function useOnProgressChange(opts: {
|
|
4
4
|
size: number;
|
|
5
|
+
autoFillData: boolean;
|
|
6
|
+
loop: boolean;
|
|
5
7
|
offsetX: Animated.SharedValue<number>;
|
|
6
8
|
rawData: TCarouselProps['data'];
|
|
7
9
|
} & Pick<TCarouselProps, 'onProgressChange'>): void;
|
|
File without changes
|