react-native-reanimated-carousel 4.0.0-alpha.0 → 4.0.0-alpha.10
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 +22 -162
- package/lib/commonjs/components/BaseLayout.js +95 -0
- package/lib/commonjs/components/BaseLayout.js.map +1 -0
- package/lib/commonjs/components/Carousel.js +210 -0
- package/lib/commonjs/components/Carousel.js.map +1 -0
- package/lib/commonjs/components/ItemRenderer.js +80 -0
- package/lib/commonjs/components/ItemRenderer.js.map +1 -0
- package/lib/commonjs/components/LazyView.js +22 -0
- package/lib/commonjs/components/LazyView.js.map +1 -0
- package/lib/commonjs/components/ScrollViewGesture.js +315 -0
- package/lib/commonjs/components/ScrollViewGesture.js.map +1 -0
- package/lib/commonjs/components/rnr-demo.test.js +45 -0
- package/lib/commonjs/components/rnr-demo.test.js.map +1 -0
- package/lib/commonjs/constants/index.js +21 -1
- package/lib/commonjs/constants/index.js.map +1 -1
- package/lib/commonjs/hooks/useAutoPlay.js +56 -1
- package/lib/commonjs/hooks/useAutoPlay.js.map +1 -1
- package/lib/commonjs/hooks/useCarouselController.js +245 -1
- package/lib/commonjs/hooks/useCarouselController.js.map +1 -1
- package/lib/commonjs/hooks/useCheckMounted.js +23 -1
- package/lib/commonjs/hooks/useCheckMounted.js.map +1 -1
- package/lib/commonjs/hooks/useCommonVariables.js +102 -1
- package/lib/commonjs/hooks/useCommonVariables.js.map +1 -1
- package/lib/commonjs/hooks/useCommonVariables.test.js +38 -0
- package/lib/commonjs/hooks/useCommonVariables.test.js.map +1 -0
- package/lib/commonjs/hooks/useInitProps.js +78 -1
- package/lib/commonjs/hooks/useInitProps.js.map +1 -1
- package/lib/commonjs/hooks/useLayoutConfig.js +39 -1
- package/lib/commonjs/hooks/useLayoutConfig.js.map +1 -1
- package/lib/commonjs/hooks/useOffsetX.js +51 -1
- package/lib/commonjs/hooks/useOffsetX.js.map +1 -1
- package/lib/commonjs/hooks/useOffsetX.test.js +53 -0
- package/lib/commonjs/hooks/useOffsetX.test.js.map +1 -0
- package/lib/commonjs/hooks/useOnProgressChange.js +38 -1
- package/lib/commonjs/hooks/useOnProgressChange.js.map +1 -1
- package/lib/commonjs/hooks/usePanGestureProxy.js +84 -0
- package/lib/commonjs/hooks/usePanGestureProxy.js.map +1 -0
- package/lib/commonjs/hooks/usePanGestureProxy.test.js +397 -0
- package/lib/commonjs/hooks/usePanGestureProxy.test.js.map +1 -0
- package/lib/commonjs/hooks/usePropsErrorBoundary.js +36 -1
- package/lib/commonjs/hooks/usePropsErrorBoundary.js.map +1 -1
- package/lib/commonjs/hooks/useUpdateGestureConfig.js +20 -0
- package/lib/commonjs/hooks/useUpdateGestureConfig.js.map +1 -0
- package/lib/commonjs/hooks/useVisibleRanges.js +71 -1
- package/lib/commonjs/hooks/useVisibleRanges.js.map +1 -1
- package/lib/commonjs/hooks/useVisibleRanges.test.js +162 -0
- package/lib/commonjs/hooks/useVisibleRanges.test.js.map +1 -0
- package/lib/commonjs/index.js +13 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/layouts/index.js +20 -1
- package/lib/commonjs/layouts/index.js.map +1 -1
- package/lib/commonjs/layouts/normal.js +27 -1
- package/lib/commonjs/layouts/normal.js.map +1 -1
- package/lib/commonjs/layouts/parallax.js +38 -1
- package/lib/commonjs/layouts/parallax.js.map +1 -1
- package/lib/commonjs/layouts/stack.js +215 -1
- package/lib/commonjs/layouts/stack.js.map +1 -1
- package/lib/commonjs/store/index.js +14 -1
- package/lib/commonjs/store/index.js.map +1 -1
- package/lib/commonjs/types.js +5 -1
- package/lib/commonjs/utils/compute-offset-if-data-changed.js +52 -0
- package/lib/commonjs/utils/compute-offset-if-data-changed.js.map +1 -0
- package/lib/commonjs/utils/compute-offset-if-data-changed.test.js +30 -0
- package/lib/commonjs/utils/compute-offset-if-data-changed.test.js.map +1 -0
- package/lib/commonjs/utils/compute-offset-if-size-changed.js +18 -0
- package/lib/commonjs/utils/compute-offset-if-size-changed.js.map +1 -0
- package/lib/commonjs/utils/compute-offset-if-size-changed.test.js +72 -0
- package/lib/commonjs/utils/compute-offset-if-size-changed.test.js.map +1 -0
- package/lib/commonjs/utils/computed-with-auto-fill-data.js +124 -0
- package/lib/commonjs/utils/computed-with-auto-fill-data.js.map +1 -0
- package/lib/commonjs/utils/deal-with-animation.js +21 -0
- package/lib/commonjs/utils/deal-with-animation.js.map +1 -0
- package/lib/commonjs/utils/handleroffset-direction.js +16 -0
- package/lib/commonjs/utils/handleroffset-direction.js.map +1 -0
- package/lib/commonjs/utils/handleroffset-direction.test.js +46 -0
- package/lib/commonjs/utils/handleroffset-direction.test.js.map +1 -0
- package/lib/commonjs/utils/index.test.js +74 -0
- package/lib/commonjs/utils/index.test.js.map +1 -0
- package/lib/commonjs/utils/log.js +22 -1
- package/lib/commonjs/utils/log.js.map +1 -1
- package/lib/module/{layouts → components}/BaseLayout.js +6 -16
- package/lib/module/components/BaseLayout.js.map +1 -0
- package/lib/module/{Carousel.js → components/Carousel.js} +33 -52
- package/lib/module/components/Carousel.js.map +1 -0
- package/lib/module/components/ItemRenderer.js +62 -0
- package/lib/module/components/ItemRenderer.js.map +1 -0
- package/lib/module/{ScrollViewGesture.js → components/ScrollViewGesture.js} +59 -32
- package/lib/module/components/ScrollViewGesture.js.map +1 -0
- package/lib/module/components/rnr-demo.test.js +33 -0
- package/lib/module/components/rnr-demo.test.js.map +1 -0
- package/lib/module/hooks/useCarouselController.js +15 -14
- package/lib/module/hooks/useCarouselController.js.map +1 -1
- package/lib/module/hooks/useCommonVariables.js +39 -9
- package/lib/module/hooks/useCommonVariables.js.map +1 -1
- package/lib/module/hooks/useCommonVariables.test.js +34 -0
- package/lib/module/hooks/useCommonVariables.test.js.map +1 -0
- package/lib/module/hooks/useInitProps.js +1 -3
- package/lib/module/hooks/useInitProps.js.map +1 -1
- package/lib/module/hooks/useLayoutConfig.js.map +1 -1
- package/lib/module/hooks/useOffsetX.js +9 -6
- package/lib/module/hooks/useOffsetX.js.map +1 -1
- package/lib/module/hooks/useOffsetX.test.js +48 -0
- package/lib/module/hooks/useOffsetX.test.js.map +1 -0
- package/lib/module/hooks/useOnProgressChange.js +1 -1
- package/lib/module/hooks/useOnProgressChange.js.map +1 -1
- package/lib/module/hooks/usePanGestureProxy.js +71 -0
- package/lib/module/hooks/usePanGestureProxy.js.map +1 -0
- package/lib/module/hooks/usePanGestureProxy.test.js +383 -0
- package/lib/module/hooks/usePanGestureProxy.test.js.map +1 -0
- package/lib/module/hooks/useUpdateGestureConfig.js +10 -0
- package/lib/module/hooks/useUpdateGestureConfig.js.map +1 -0
- package/lib/module/hooks/useVisibleRanges.js +47 -19
- package/lib/module/hooks/useVisibleRanges.js.map +1 -1
- package/lib/module/hooks/useVisibleRanges.test.js +157 -0
- package/lib/module/hooks/useVisibleRanges.test.js.map +1 -0
- package/lib/module/index.js +1 -2
- package/lib/module/index.js.map +1 -1
- package/lib/module/{hooks/computeNewIndexWhenDataChanges.js → utils/compute-offset-if-data-changed.js} +2 -2
- package/lib/module/utils/compute-offset-if-data-changed.js.map +1 -0
- package/lib/module/utils/compute-offset-if-data-changed.test.js +27 -0
- package/lib/module/utils/compute-offset-if-data-changed.test.js.map +1 -0
- package/lib/module/utils/compute-offset-if-size-changed.js +11 -0
- package/lib/module/utils/compute-offset-if-size-changed.js.map +1 -0
- package/lib/module/utils/compute-offset-if-size-changed.test.js +69 -0
- package/lib/module/utils/compute-offset-if-size-changed.test.js.map +1 -0
- package/lib/module/utils/{computedWithAutoFillData.js → computed-with-auto-fill-data.js} +1 -1
- package/lib/module/utils/computed-with-auto-fill-data.js.map +1 -0
- package/lib/module/utils/{dealWithAnimation.js → deal-with-animation.js} +1 -1
- package/lib/module/utils/deal-with-animation.js.map +1 -0
- package/lib/module/utils/handleroffset-direction.js +9 -0
- package/lib/module/utils/handleroffset-direction.js.map +1 -0
- package/lib/module/utils/handleroffset-direction.test.js +41 -0
- package/lib/module/utils/handleroffset-direction.test.js.map +1 -0
- package/lib/module/{hooks → utils}/index.test.js +6 -6
- package/lib/module/utils/index.test.js.map +1 -0
- package/lib/typescript/{Carousel.d.ts → components/Carousel.d.ts} +1 -1
- package/lib/typescript/components/ItemRenderer.d.ts +22 -0
- package/lib/typescript/{ScrollViewGesture.d.ts → components/ScrollViewGesture.d.ts} +1 -1
- package/lib/typescript/hooks/useCarouselController.d.ts +3 -2
- package/lib/typescript/hooks/useCommonVariables.test.d.ts +1 -0
- package/lib/typescript/hooks/useLayoutConfig.d.ts +1 -1
- package/lib/typescript/hooks/useOffsetX.test.d.ts +1 -0
- package/lib/typescript/hooks/usePanGestureProxy.d.ts +9 -0
- package/lib/typescript/hooks/usePanGestureProxy.test.d.ts +1 -0
- package/lib/typescript/hooks/useUpdateGestureConfig.d.ts +5 -0
- package/lib/typescript/hooks/useVisibleRanges.d.ts +8 -4
- package/lib/typescript/hooks/useVisibleRanges.test.d.ts +1 -0
- package/lib/typescript/index.d.ts +3 -2
- package/lib/typescript/types.d.ts +113 -104
- package/lib/typescript/{hooks/computeNewIndexWhenDataChanges.d.ts → utils/compute-offset-if-data-changed.d.ts} +1 -1
- package/lib/typescript/utils/compute-offset-if-data-changed.test.d.ts +1 -0
- package/lib/typescript/utils/compute-offset-if-size-changed.d.ts +5 -0
- package/lib/typescript/utils/compute-offset-if-size-changed.test.d.ts +1 -0
- package/lib/typescript/utils/handleroffset-direction.d.ts +3 -0
- package/lib/typescript/utils/handleroffset-direction.test.d.ts +1 -0
- package/lib/typescript/utils/index.test.d.ts +1 -0
- package/package.json +32 -73
- package/src/{layouts → components}/BaseLayout.tsx +7 -35
- package/src/{Carousel.tsx → components/Carousel.tsx} +35 -69
- package/src/components/ItemRenderer.tsx +105 -0
- package/src/{ScrollViewGesture.tsx → components/ScrollViewGesture.tsx} +88 -48
- package/src/components/rnr-demo.test.tsx +43 -0
- package/src/hooks/useCarouselController.tsx +27 -24
- package/src/hooks/useCommonVariables.test.tsx +41 -0
- package/src/hooks/useCommonVariables.ts +36 -11
- package/src/hooks/useInitProps.ts +1 -3
- package/src/hooks/useLayoutConfig.ts +1 -1
- package/src/hooks/useOffsetX.test.ts +54 -0
- package/src/hooks/useOffsetX.ts +33 -31
- package/src/hooks/useOnProgressChange.ts +1 -1
- package/src/hooks/usePanGestureProxy.test.tsx +376 -0
- package/src/hooks/usePanGestureProxy.ts +110 -0
- package/src/hooks/useUpdateGestureConfig.ts +15 -0
- package/src/hooks/useVisibleRanges.test.tsx +179 -0
- package/src/hooks/useVisibleRanges.tsx +72 -24
- package/src/index.tsx +4 -2
- package/src/types.ts +132 -125
- package/src/utils/compute-offset-if-data-changed.test.ts +30 -0
- package/src/{hooks/computeNewIndexWhenDataChanges.ts → utils/compute-offset-if-data-changed.ts} +1 -1
- package/src/utils/compute-offset-if-size-changed.test.ts +78 -0
- package/src/utils/compute-offset-if-size-changed.ts +11 -0
- package/src/utils/handleroffset-direction.test.ts +52 -0
- package/src/utils/handleroffset-direction.ts +18 -0
- package/src/{hooks → utils}/index.test.ts +6 -6
- package/README.zh-CN.md +0 -202
- package/lib/commonjs/Carousel.js +0 -2
- package/lib/commonjs/Carousel.js.map +0 -1
- package/lib/commonjs/LazyView.js +0 -2
- package/lib/commonjs/LazyView.js.map +0 -1
- package/lib/commonjs/ScrollViewGesture.js +0 -2
- package/lib/commonjs/ScrollViewGesture.js.map +0 -1
- package/lib/commonjs/hooks/computeNewIndexWhenDataChanges.js +0 -2
- package/lib/commonjs/hooks/computeNewIndexWhenDataChanges.js.map +0 -1
- package/lib/commonjs/hooks/index.test.js +0 -2
- package/lib/commonjs/hooks/index.test.js.map +0 -1
- package/lib/commonjs/layouts/BaseLayout.js +0 -2
- package/lib/commonjs/layouts/BaseLayout.js.map +0 -1
- package/lib/commonjs/layouts/ParallaxLayout.js +0 -2
- package/lib/commonjs/layouts/ParallaxLayout.js.map +0 -1
- package/lib/commonjs/utils/computedWithAutoFillData.js +0 -2
- package/lib/commonjs/utils/computedWithAutoFillData.js.map +0 -1
- package/lib/commonjs/utils/dealWithAnimation.js +0 -2
- package/lib/commonjs/utils/dealWithAnimation.js.map +0 -1
- package/lib/commonjs/utils/handlerOffsetDirection.js +0 -2
- package/lib/commonjs/utils/handlerOffsetDirection.js.map +0 -1
- package/lib/module/Carousel.js.map +0 -1
- package/lib/module/ScrollViewGesture.js.map +0 -1
- package/lib/module/hooks/computeNewIndexWhenDataChanges.js.map +0 -1
- package/lib/module/hooks/index.test.js.map +0 -1
- package/lib/module/layouts/BaseLayout.js.map +0 -1
- package/lib/module/layouts/ParallaxLayout.js +0 -61
- package/lib/module/layouts/ParallaxLayout.js.map +0 -1
- package/lib/module/utils/computedWithAutoFillData.js.map +0 -1
- package/lib/module/utils/dealWithAnimation.js.map +0 -1
- package/lib/module/utils/handlerOffsetDirection.js +0 -9
- package/lib/module/utils/handlerOffsetDirection.js.map +0 -1
- package/lib/typescript/layouts/ParallaxLayout.d.ts +0 -13
- package/lib/typescript/utils/handlerOffsetDirection.d.ts +0 -2
- package/src/layouts/ParallaxLayout.tsx +0 -141
- package/src/utils/handlerOffsetDirection.ts +0 -15
- /package/lib/module/{LazyView.js → components/LazyView.js} +0 -0
- /package/lib/module/{LazyView.js.map → components/LazyView.js.map} +0 -0
- /package/lib/typescript/{layouts → components}/BaseLayout.d.ts +0 -0
- /package/lib/typescript/{LazyView.d.ts → components/LazyView.d.ts} +0 -0
- /package/lib/typescript/{hooks/index.test.d.ts → components/rnr-demo.test.d.ts} +0 -0
- /package/lib/typescript/utils/{computedWithAutoFillData.d.ts → computed-with-auto-fill-data.d.ts} +0 -0
- /package/lib/typescript/utils/{dealWithAnimation.d.ts → deal-with-animation.d.ts} +0 -0
- /package/src/{LazyView.tsx → components/LazyView.tsx} +0 -0
- /package/src/utils/{computedWithAutoFillData.ts → computed-with-auto-fill-data.ts} +0 -0
- /package/src/utils/{dealWithAnimation.ts → deal-with-animation.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["index.test.ts"],"names":["describe","size","positive","negative","params","currentIndex","direction","_direction","previousLength","currentLength","handlerOffset","it","expect","toBe"],"mappings":"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","sourcesContent":["import { computeOffsetIfDataChanged } from \"./compute-offset-if-data-changed\";\n\ndescribe(\"should work as expected\", () => {\n const size = 375;\n const positive = -1;\n const negative = 1;\n\n const params = (params: {\n direction: \"positive\" | \"negative\"\n currentIndex: number\n previousLength: number\n currentLength: number\n }) => {\n const { currentIndex, direction: _direction, previousLength, currentLength } = params;\n const direction = _direction === \"negative\" ? negative : positive;\n return {\n direction,\n handlerOffset: size * currentIndex * direction,\n size,\n previousLength,\n currentLength,\n };\n };\n\n it(\"The direction is negative, And changing length of data set from 4 to 3, the new index will to be 2.\", async () => {\n const currentIndex = 1;\n const handlerOffset = computeOffsetIfDataChanged(params({\n currentIndex,\n direction: \"negative\",\n previousLength: 4,\n currentLength: 3,\n }));\n\n expect(handlerOffset / size).toBe(2 * positive);\n });\n\n it(\"The direction is negative, Changing length of data set from 4 to 3, the index remains original.\", async () => {\n const handlerOffset = computeOffsetIfDataChanged(params({\n currentIndex: 2,\n direction: \"negative\",\n previousLength: 4,\n currentLength: 3,\n }));\n\n expect(handlerOffset / size).toBe(1 * negative);\n });\n\n it(\"The direction is positive, Changing length of data set from 4 to 5, the index remains original.\", async () => {\n const handlerOffset = computeOffsetIfDataChanged(params({\n currentIndex: 3,\n direction: \"positive\",\n previousLength: 4,\n currentLength: 5,\n }));\n\n expect(handlerOffset / size).toBe(3 * positive);\n });\n\n it(\"The direction is negative, Changing length of data set from 4 to 5, the index remains original.\", async () => {\n const handlerOffset = computeOffsetIfDataChanged(params({\n currentIndex: 3,\n direction: \"negative\",\n previousLength: 4,\n currentLength: 5,\n }));\n\n expect(handlerOffset / size).toBe(4 * negative);\n });\n\n it(\"Changing length of data set from 0 to 3, the index remains original.\", async () => {\n const handlerOffset = computeOffsetIfDataChanged(params({\n currentIndex: 0,\n direction: \"positive\",\n previousLength: 0,\n currentLength: 3,\n }));\n\n expect(handlerOffset / size).toBe(0 * positive);\n });\n});\n"]}
|
|
@@ -1,2 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.log = log;
|
|
7
|
+
exports.round = round;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* In worklet
|
|
11
|
+
* e.g. runOnJS(lop)(...);
|
|
12
|
+
*/
|
|
13
|
+
function log() {
|
|
14
|
+
// eslint-disable-next-line no-console
|
|
15
|
+
console.log(...arguments);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function round(number) {
|
|
19
|
+
"worklet";
|
|
20
|
+
|
|
21
|
+
return Math.round(number);
|
|
22
|
+
}
|
|
2
23
|
//# sourceMappingURL=log.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["log.ts"],"names":["log","console","round","number","Math"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["log.ts"],"names":["log","console","round","number","Math"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACO,SAASA,GAAT,GAA0B;AAC/B;AACAC,EAAAA,OAAO,CAACD,GAAR,CAAY,YAAZ;AACD;;AAEM,SAASE,KAAT,CAAeC,MAAf,EAA+B;AACpC;;AACA,SAAOC,IAAI,CAACF,KAAL,CAAWC,MAAX,CAAP;AACD","sourcesContent":["/**\n * In worklet\n * e.g. runOnJS(lop)(...);\n */\nexport function log(...msg: any) {\n // eslint-disable-next-line no-console\n console.log(...msg);\n}\n\nexport function round(number: number) {\n \"worklet\";\n return Math.round(number);\n}\n"]}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import Animated, {
|
|
3
|
-
import { useCheckMounted } from "../hooks/useCheckMounted";
|
|
2
|
+
import Animated, { useAnimatedStyle, useDerivedValue } from "react-native-reanimated";
|
|
4
3
|
import { useOffsetX } from "../hooks/useOffsetX";
|
|
5
|
-
import { LazyView } from "../LazyView";
|
|
6
4
|
import { CTX } from "../store";
|
|
7
5
|
export const BaseLayout = props => {
|
|
8
|
-
const mounted = useCheckMounted();
|
|
9
6
|
const {
|
|
10
7
|
handlerOffset,
|
|
11
8
|
index,
|
|
@@ -27,7 +24,6 @@ export const BaseLayout = props => {
|
|
|
27
24
|
}
|
|
28
25
|
} = context;
|
|
29
26
|
const size = vertical ? height : width;
|
|
30
|
-
const [shouldUpdate, setShouldUpdate] = React.useState(false);
|
|
31
27
|
let offsetXConfig = {
|
|
32
28
|
handlerOffset,
|
|
33
29
|
index,
|
|
@@ -55,13 +51,9 @@ export const BaseLayout = props => {
|
|
|
55
51
|
|
|
56
52
|
const x = useOffsetX(offsetXConfig, visibleRanges);
|
|
57
53
|
const animationValue = useDerivedValue(() => x.value / size, [x, size]);
|
|
58
|
-
const animatedStyle = useAnimatedStyle(() =>
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}, [index, mounted]);
|
|
62
|
-
useAnimatedReaction(() => visibleRanges.value, () => {
|
|
63
|
-
runOnJS(updateView)(visibleRanges.value.negativeRange, visibleRanges.value.positiveRange);
|
|
64
|
-
}, [visibleRanges.value]);
|
|
54
|
+
const animatedStyle = useAnimatedStyle(() => {
|
|
55
|
+
return animationStyle(x.value / size);
|
|
56
|
+
}, [animationStyle]);
|
|
65
57
|
return /*#__PURE__*/React.createElement(Animated.View, {
|
|
66
58
|
style: [{
|
|
67
59
|
width: width || "100%",
|
|
@@ -74,11 +66,9 @@ export const BaseLayout = props => {
|
|
|
74
66
|
* The testID of first item will be changed to __CAROUSEL_ITEM_0_READY__ from __CAROUSEL_ITEM_0_NOT_READY__ when the item is ready.
|
|
75
67
|
* */
|
|
76
68
|
,
|
|
77
|
-
testID: `__CAROUSEL_ITEM_${index}
|
|
78
|
-
}, /*#__PURE__*/React.createElement(LazyView, {
|
|
79
|
-
shouldUpdate: shouldUpdate
|
|
69
|
+
testID: `__CAROUSEL_ITEM_${index}__`
|
|
80
70
|
}, children({
|
|
81
71
|
animationValue
|
|
82
|
-
}))
|
|
72
|
+
}));
|
|
83
73
|
};
|
|
84
74
|
//# sourceMappingURL=BaseLayout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["BaseLayout.tsx"],"names":["React","Animated","useAnimatedStyle","useDerivedValue","useOffsetX","CTX","BaseLayout","props","handlerOffset","index","children","visibleRanges","animationStyle","context","useContext","loop","dataLength","width","height","vertical","customConfig","mode","modeConfig","size","offsetXConfig","snapDirection","showLength","type","viewCount","x","animationValue","value","animatedStyle","position"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AAGA,OAAOC,QAAP,IACEC,gBADF,EAEEC,eAFF,QAGO,yBAHP;AAMA,SAASC,UAAT,QAA2B,qBAA3B;AAGA,SAASC,GAAT,QAAoB,UAApB;AAIA,OAAO,MAAMC,UAQX,GAAIC,KAAD,IAAW;AACd,QAAM;AAAEC,IAAAA,aAAF;AAAiBC,IAAAA,KAAjB;AAAwBC,IAAAA,QAAxB;AAAkCC,IAAAA,aAAlC;AAAiDC,IAAAA;AAAjD,MACFL,KADJ;AAGA,QAAMM,OAAO,GAAGb,KAAK,CAACc,UAAN,CAAiBT,GAAjB,CAAhB;AACA,QAAM;AACJE,IAAAA,KAAK,EAAE;AACLQ,MAAAA,IADK;AAELC,MAAAA,UAFK;AAGLC,MAAAA,KAHK;AAILC,MAAAA,MAJK;AAKLC,MAAAA,QALK;AAMLC,MAAAA,YANK;AAOLC,MAAAA,IAPK;AAQLC,MAAAA;AARK;AADH,MAWFT,OAXJ;AAYA,QAAMU,IAAI,GAAGJ,QAAQ,GAAGD,MAAH,GAAYD,KAAjC;AAEA,MAAIO,aAAoB,GAAG;AACzBhB,IAAAA,aADyB;AAEzBC,IAAAA,KAFyB;AAGzBc,IAAAA,IAHyB;AAIzBP,IAAAA,UAJyB;AAKzBD,IAAAA,IALyB;AAMzB,QAAI,OAAOK,YAAP,KAAwB,UAAxB,GAAqCA,YAAY,EAAjD,GAAsD,EAA1D;AANyB,GAA3B;;AASA,MAAIC,IAAI,KAAK,kBAAb,EAAiC;AAC/B,UAAM;AAAEI,MAAAA,aAAF;AAAiBC,MAAAA;AAAjB,QAAgCJ,UAAtC;AAEAE,IAAAA,aAAa,GAAG;AACdhB,MAAAA,aADc;AAEdC,MAAAA,KAFc;AAGdc,MAAAA,IAHc;AAIdP,MAAAA,UAJc;AAKdD,MAAAA,IALc;AAMdY,MAAAA,IAAI,EAAEF,aAAa,KAAK,OAAlB,GAA4B,UAA5B,GAAyC,UANjC;AAOdG,MAAAA,SAAS,EAAEF;AAPG,KAAhB;AASD;;AAED,QAAMG,CAAC,GAAGzB,UAAU,CAACoB,aAAD,EAAgBb,aAAhB,CAApB;AACA,QAAMmB,cAAc,GAAG3B,eAAe,CAAC,MAAM0B,CAAC,CAACE,KAAF,GAAUR,IAAjB,EAAuB,CAACM,CAAD,EAAIN,IAAJ,CAAvB,CAAtC;AACA,QAAMS,aAAa,GAAG9B,gBAAgB,CACpC,MAAM;AACJ,WAAOU,cAAc,CAACiB,CAAC,CAACE,KAAF,GAAUR,IAAX,CAArB;AACD,GAHmC,EAIpC,CAACX,cAAD,CAJoC,CAAtC;AAOA,sBACE,oBAAC,QAAD,CAAU,IAAV;AACE,IAAA,KAAK,EAAE,CACL;AACEK,MAAAA,KAAK,EAAEA,KAAK,IAAI,MADlB;AAEEC,MAAAA,MAAM,EAAEA,MAAM,IAAI,MAFpB;AAGEe,MAAAA,QAAQ,EAAE;AAHZ,KADK,EAMLD,aANK;AAQP;AACN;AACA;AACA;AACA;AAbI;AAcE,IAAA,MAAM,EAAG,mBAAkBvB,KAAM;AAdnC,KAgBGC,QAAQ,CAAC;AAAEoB,IAAAA;AAAF,GAAD,CAhBX,CADF;AAoBD,CA/EM","sourcesContent":["import React from \"react\";\nimport type { ViewStyle } from \"react-native\";\nimport type { AnimatedStyleProp } from \"react-native-reanimated\";\nimport Animated, {\n useAnimatedStyle,\n useDerivedValue,\n} from \"react-native-reanimated\";\n\nimport type { IOpts } from \"../hooks/useOffsetX\";\nimport { useOffsetX } from \"../hooks/useOffsetX\";\nimport type { IVisibleRanges } from \"../hooks/useVisibleRanges\";\nimport type { ILayoutConfig } from \"../layouts/stack\";\nimport { CTX } from \"../store\";\n\nexport type TAnimationStyle = (value: number) => AnimatedStyleProp<ViewStyle>;\n\nexport const BaseLayout: React.FC<{\n index: number\n handlerOffset: Animated.SharedValue<number>\n visibleRanges: IVisibleRanges\n animationStyle: TAnimationStyle\n children: (ctx: {\n animationValue: Animated.SharedValue<number>\n }) => React.ReactElement\n}> = (props) => {\n const { handlerOffset, index, children, visibleRanges, animationStyle }\n = props;\n\n const context = React.useContext(CTX);\n const {\n props: {\n loop,\n dataLength,\n width,\n height,\n vertical,\n customConfig,\n mode,\n modeConfig,\n },\n } = context;\n const size = vertical ? height : width;\n\n let offsetXConfig: IOpts = {\n handlerOffset,\n index,\n size,\n dataLength,\n loop,\n ...(typeof customConfig === \"function\" ? customConfig() : {}),\n };\n\n if (mode === \"horizontal-stack\") {\n const { snapDirection, showLength } = modeConfig as ILayoutConfig;\n\n offsetXConfig = {\n handlerOffset,\n index,\n size,\n dataLength,\n loop,\n type: snapDirection === \"right\" ? \"negative\" : \"positive\",\n viewCount: showLength,\n };\n }\n\n const x = useOffsetX(offsetXConfig, visibleRanges);\n const animationValue = useDerivedValue(() => x.value / size, [x, size]);\n const animatedStyle = useAnimatedStyle(\n () => {\n return animationStyle(x.value / size);\n },\n [animationStyle],\n );\n\n return (\n <Animated.View\n style={[\n {\n width: width || \"100%\",\n height: height || \"100%\",\n position: \"absolute\",\n },\n animatedStyle,\n ]}\n /**\n * We use this testID to know when the carousel item is ready to be tested in test.\n * e.g.\n * The testID of first item will be changed to __CAROUSEL_ITEM_0_READY__ from __CAROUSEL_ITEM_0_NOT_READY__ when the item is ready.\n * */\n testID={`__CAROUSEL_ITEM_${index}__`}\n >\n {children({ animationValue })}\n </Animated.View>\n );\n};\n"]}
|
|
@@ -1,20 +1,18 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-use-before-define */
|
|
2
1
|
import React from "react";
|
|
3
2
|
import { StyleSheet } from "react-native";
|
|
4
3
|
import { GestureHandlerRootView } from "react-native-gesture-handler";
|
|
5
4
|
import { runOnJS, useDerivedValue } from "react-native-reanimated";
|
|
6
|
-
import {
|
|
7
|
-
import { useCarouselController } from "./hooks/useCarouselController";
|
|
8
|
-
import { useCommonVariables } from "./hooks/useCommonVariables";
|
|
9
|
-
import { useInitProps } from "./hooks/useInitProps";
|
|
10
|
-
import { useLayoutConfig } from "./hooks/useLayoutConfig";
|
|
11
|
-
import { useOnProgressChange } from "./hooks/useOnProgressChange";
|
|
12
|
-
import { usePropsErrorBoundary } from "./hooks/usePropsErrorBoundary";
|
|
13
|
-
import { useVisibleRanges } from "./hooks/useVisibleRanges";
|
|
14
|
-
import { BaseLayout } from "./layouts/BaseLayout";
|
|
5
|
+
import { ItemRenderer } from "./ItemRenderer";
|
|
15
6
|
import { ScrollViewGesture } from "./ScrollViewGesture";
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
7
|
+
import { useAutoPlay } from "../hooks/useAutoPlay";
|
|
8
|
+
import { useCarouselController } from "../hooks/useCarouselController";
|
|
9
|
+
import { useCommonVariables } from "../hooks/useCommonVariables";
|
|
10
|
+
import { useInitProps } from "../hooks/useInitProps";
|
|
11
|
+
import { useLayoutConfig } from "../hooks/useLayoutConfig";
|
|
12
|
+
import { useOnProgressChange } from "../hooks/useOnProgressChange";
|
|
13
|
+
import { usePropsErrorBoundary } from "../hooks/usePropsErrorBoundary";
|
|
14
|
+
import { CTX } from "../store";
|
|
15
|
+
import { computedRealIndexWithAutoFillData } from "../utils/computed-with-auto-fill-data";
|
|
18
16
|
const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
|
|
19
17
|
const props = useInitProps(_props);
|
|
20
18
|
const {
|
|
@@ -25,8 +23,6 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
|
|
|
25
23
|
data,
|
|
26
24
|
// Length of fill data
|
|
27
25
|
dataLength,
|
|
28
|
-
// Raw data that has not been processed
|
|
29
|
-
rawData,
|
|
30
26
|
// Length of raw data
|
|
31
27
|
rawDataLength,
|
|
32
28
|
mode,
|
|
@@ -40,10 +36,11 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
|
|
|
40
36
|
autoPlayInterval,
|
|
41
37
|
scrollAnimationDuration,
|
|
42
38
|
withAnimation,
|
|
39
|
+
fixedDirection,
|
|
43
40
|
renderItem,
|
|
44
41
|
onScrollEnd,
|
|
45
42
|
onSnapToItem,
|
|
46
|
-
|
|
43
|
+
onScrollStart,
|
|
47
44
|
onProgressChange,
|
|
48
45
|
customAnimation,
|
|
49
46
|
defaultIndex
|
|
@@ -78,9 +75,10 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
|
|
|
78
75
|
handlerOffset,
|
|
79
76
|
withAnimation,
|
|
80
77
|
defaultIndex,
|
|
78
|
+
fixedDirection,
|
|
79
|
+
duration: scrollAnimationDuration,
|
|
81
80
|
onScrollEnd: () => runOnJS(_onScrollEnd)(),
|
|
82
|
-
|
|
83
|
-
duration: scrollAnimationDuration
|
|
81
|
+
onScrollStart: () => !!onScrollStart && runOnJS(onScrollStart)()
|
|
84
82
|
});
|
|
85
83
|
const {
|
|
86
84
|
next,
|
|
@@ -112,10 +110,10 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
|
|
|
112
110
|
if (onScrollEnd) onScrollEnd(realIndex);
|
|
113
111
|
}, [loop, autoFillData, rawDataLength, getSharedIndex, onSnapToItem, onScrollEnd]);
|
|
114
112
|
|
|
115
|
-
const
|
|
113
|
+
const scrollViewGestureOnScrollStart = React.useCallback(() => {
|
|
116
114
|
pauseAutoPlay();
|
|
117
|
-
|
|
118
|
-
}, [
|
|
115
|
+
onScrollStart === null || onScrollStart === void 0 ? void 0 : onScrollStart();
|
|
116
|
+
}, [onScrollStart, pauseAutoPlay]);
|
|
119
117
|
const scrollViewGestureOnScrollEnd = React.useCallback(() => {
|
|
120
118
|
startAutoPlay();
|
|
121
119
|
|
|
@@ -129,39 +127,9 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
|
|
|
129
127
|
getCurrentIndex,
|
|
130
128
|
scrollTo
|
|
131
129
|
}), [getCurrentIndex, next, prev, scrollTo]);
|
|
132
|
-
const visibleRanges = useVisibleRanges({
|
|
133
|
-
total: dataLength,
|
|
134
|
-
viewSize: size,
|
|
135
|
-
translation: handlerOffset,
|
|
136
|
-
windowSize
|
|
137
|
-
});
|
|
138
130
|
const layoutConfig = useLayoutConfig({ ...props,
|
|
139
131
|
size
|
|
140
132
|
});
|
|
141
|
-
const renderLayout = React.useCallback((item, i) => {
|
|
142
|
-
const realIndex = computedRealIndexWithAutoFillData({
|
|
143
|
-
index: i,
|
|
144
|
-
dataLength: rawDataLength,
|
|
145
|
-
loop,
|
|
146
|
-
autoFillData
|
|
147
|
-
});
|
|
148
|
-
return /*#__PURE__*/React.createElement(BaseLayout, {
|
|
149
|
-
key: i,
|
|
150
|
-
index: i,
|
|
151
|
-
handlerOffset: offsetX,
|
|
152
|
-
visibleRanges: visibleRanges,
|
|
153
|
-
animationStyle: customAnimation || layoutConfig
|
|
154
|
-
}, _ref => {
|
|
155
|
-
let {
|
|
156
|
-
animationValue
|
|
157
|
-
} = _ref;
|
|
158
|
-
return renderItem({
|
|
159
|
-
item,
|
|
160
|
-
index: realIndex,
|
|
161
|
-
animationValue
|
|
162
|
-
});
|
|
163
|
-
});
|
|
164
|
-
}, [loop, rawData, offsetX, visibleRanges, autoFillData, renderItem, layoutConfig, customAnimation]);
|
|
165
133
|
return /*#__PURE__*/React.createElement(GestureHandlerRootView, null, /*#__PURE__*/React.createElement(CTX.Provider, {
|
|
166
134
|
value: {
|
|
167
135
|
props,
|
|
@@ -176,11 +144,24 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
|
|
|
176
144
|
height: height || "100%"
|
|
177
145
|
}, style, vertical ? styles.itemsVertical : styles.itemsHorizontal],
|
|
178
146
|
testID: testID,
|
|
179
|
-
|
|
147
|
+
onScrollStart: scrollViewGestureOnScrollStart,
|
|
180
148
|
onScrollEnd: scrollViewGestureOnScrollEnd,
|
|
181
149
|
onTouchBegin: scrollViewGestureOnTouchBegin,
|
|
182
150
|
onTouchEnd: scrollViewGestureOnTouchEnd
|
|
183
|
-
},
|
|
151
|
+
}, /*#__PURE__*/React.createElement(ItemRenderer, {
|
|
152
|
+
data: data,
|
|
153
|
+
dataLength: dataLength,
|
|
154
|
+
rawDataLength: rawDataLength,
|
|
155
|
+
loop: loop,
|
|
156
|
+
size: size,
|
|
157
|
+
windowSize: windowSize,
|
|
158
|
+
autoFillData: autoFillData,
|
|
159
|
+
offsetX: offsetX,
|
|
160
|
+
handlerOffset: handlerOffset,
|
|
161
|
+
layoutConfig: layoutConfig,
|
|
162
|
+
renderItem: renderItem,
|
|
163
|
+
customAnimation: customAnimation
|
|
164
|
+
}))));
|
|
184
165
|
});
|
|
185
166
|
export default Carousel;
|
|
186
167
|
const styles = StyleSheet.create({
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["Carousel.tsx"],"names":["React","StyleSheet","GestureHandlerRootView","runOnJS","useDerivedValue","ItemRenderer","ScrollViewGesture","useAutoPlay","useCarouselController","useCommonVariables","useInitProps","useLayoutConfig","useOnProgressChange","usePropsErrorBoundary","CTX","computedRealIndexWithAutoFillData","Carousel","forwardRef","_props","ref","props","testID","loop","autoFillData","data","dataLength","rawDataLength","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","fixedDirection","renderItem","onScrollEnd","onSnapToItem","onScrollStart","onProgressChange","customAnimation","defaultIndex","commonVariables","size","handlerOffset","offsetX","totalSize","x","value","isNaN","carouselController","duration","_onScrollEnd","next","prev","scrollTo","getSharedIndex","getCurrentIndex","start","startAutoPlay","pause","pauseAutoPlay","useCallback","_sharedIndex","Math","round","realIndex","index","scrollViewGestureOnScrollStart","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","useImperativeHandle","layoutConfig","common","styles","container","itemsVertical","itemsHorizontal","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React from \"react\";\nimport { StyleSheet } from \"react-native\";\nimport { GestureHandlerRootView } from \"react-native-gesture-handler\";\nimport { runOnJS, useDerivedValue } from \"react-native-reanimated\";\n\nimport { ItemRenderer } from \"./ItemRenderer\";\nimport { ScrollViewGesture } from \"./ScrollViewGesture\";\n\nimport { useAutoPlay } from \"../hooks/useAutoPlay\";\nimport { useCarouselController } from \"../hooks/useCarouselController\";\nimport { useCommonVariables } from \"../hooks/useCommonVariables\";\nimport { useInitProps } from \"../hooks/useInitProps\";\nimport { useLayoutConfig } from \"../hooks/useLayoutConfig\";\nimport { useOnProgressChange } from \"../hooks/useOnProgressChange\";\nimport { usePropsErrorBoundary } from \"../hooks/usePropsErrorBoundary\";\nimport { CTX } from \"../store\";\nimport type { ICarouselInstance, TCarouselProps } from \"../types\";\nimport { computedRealIndexWithAutoFillData } from \"../utils/computed-with-auto-fill-data\";\n\nconst Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(\n (_props, ref) => {\n const props = useInitProps(_props);\n\n const {\n testID,\n loop,\n autoFillData,\n // Fill data with autoFillData\n data,\n // Length of fill data\n dataLength,\n // Length of raw data\n rawDataLength,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n withAnimation,\n fixedDirection,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollStart,\n onProgressChange,\n customAnimation,\n defaultIndex,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffset } = commonVariables;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * dataLength;\n const x = handlerOffset.value % totalSize;\n\n if (!loop)\n return handlerOffset.value;\n\n return isNaN(x) ? 0 : x;\n }, [loop, size, dataLength]);\n\n usePropsErrorBoundary({ ...props, dataLength });\n useOnProgressChange({\n autoFillData,\n loop,\n size,\n offsetX,\n rawDataLength,\n onProgressChange,\n });\n\n const carouselController = useCarouselController({\n loop,\n size,\n dataLength,\n autoFillData,\n handlerOffset,\n withAnimation,\n defaultIndex,\n fixedDirection,\n duration: scrollAnimationDuration,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollStart: () => !!onScrollStart && runOnJS(onScrollStart)(),\n });\n\n const { next, prev, scrollTo, getSharedIndex, getCurrentIndex }\n = carouselController;\n\n const { start: startAutoPlay, pause: pauseAutoPlay } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const _onScrollEnd = React.useCallback(() => {\n const _sharedIndex = Math.round(getSharedIndex());\n\n const realIndex = computedRealIndexWithAutoFillData({\n index: _sharedIndex,\n dataLength: rawDataLength,\n loop,\n autoFillData,\n });\n\n if (onSnapToItem)\n onSnapToItem(realIndex);\n\n if (onScrollEnd)\n onScrollEnd(realIndex);\n }, [\n loop,\n autoFillData,\n rawDataLength,\n getSharedIndex,\n onSnapToItem,\n onScrollEnd,\n ]);\n\n const scrollViewGestureOnScrollStart = React.useCallback(() => {\n pauseAutoPlay();\n onScrollStart?.();\n }, [onScrollStart, pauseAutoPlay]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n startAutoPlay();\n _onScrollEnd();\n }, [_onScrollEnd, startAutoPlay]);\n\n const scrollViewGestureOnTouchBegin = React.useCallback(pauseAutoPlay, [\n pauseAutoPlay,\n ]);\n\n const scrollViewGestureOnTouchEnd = React.useCallback(startAutoPlay, [\n startAutoPlay,\n ]);\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n scrollTo,\n }),\n [getCurrentIndex, next, prev, scrollTo],\n );\n\n const layoutConfig = useLayoutConfig({ ...props, size });\n\n return (\n <GestureHandlerRootView>\n <CTX.Provider value={{ props, common: commonVariables }}>\n <ScrollViewGesture\n key={mode}\n size={size}\n translation={handlerOffset}\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 testID={testID}\n onScrollStart={scrollViewGestureOnScrollStart}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n onTouchBegin={scrollViewGestureOnTouchBegin}\n onTouchEnd={scrollViewGestureOnTouchEnd}\n >\n <ItemRenderer\n data={data}\n dataLength={dataLength}\n rawDataLength={rawDataLength}\n loop={loop}\n size={size}\n windowSize={windowSize}\n autoFillData={autoFillData}\n offsetX={offsetX}\n handlerOffset={handlerOffset}\n layoutConfig={layoutConfig}\n renderItem={renderItem}\n customAnimation={customAnimation}\n />\n </ScrollViewGesture>\n </CTX.Provider>\n </GestureHandlerRootView>\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"]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { useAnimatedReaction, runOnJS } from "react-native-reanimated";
|
|
3
|
+
import { BaseLayout } from "./BaseLayout";
|
|
4
|
+
import { useVisibleRanges } from "../hooks/useVisibleRanges";
|
|
5
|
+
import { computedRealIndexWithAutoFillData } from "../utils/computed-with-auto-fill-data";
|
|
6
|
+
export const ItemRenderer = props => {
|
|
7
|
+
const {
|
|
8
|
+
data,
|
|
9
|
+
size,
|
|
10
|
+
windowSize,
|
|
11
|
+
handlerOffset,
|
|
12
|
+
offsetX,
|
|
13
|
+
dataLength,
|
|
14
|
+
rawDataLength,
|
|
15
|
+
loop,
|
|
16
|
+
autoFillData,
|
|
17
|
+
layoutConfig,
|
|
18
|
+
renderItem,
|
|
19
|
+
customAnimation
|
|
20
|
+
} = props;
|
|
21
|
+
const visibleRanges = useVisibleRanges({
|
|
22
|
+
total: dataLength,
|
|
23
|
+
viewSize: size,
|
|
24
|
+
translation: handlerOffset,
|
|
25
|
+
windowSize,
|
|
26
|
+
loop
|
|
27
|
+
});
|
|
28
|
+
const [displayedItems, setDisplayedItems] = React.useState(null);
|
|
29
|
+
useAnimatedReaction(() => visibleRanges.value, ranges => runOnJS(setDisplayedItems)(ranges), [visibleRanges]);
|
|
30
|
+
if (!displayedItems) return null;
|
|
31
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, data.map((item, index) => {
|
|
32
|
+
const realIndex = computedRealIndexWithAutoFillData({
|
|
33
|
+
index,
|
|
34
|
+
dataLength: rawDataLength,
|
|
35
|
+
loop,
|
|
36
|
+
autoFillData
|
|
37
|
+
});
|
|
38
|
+
const {
|
|
39
|
+
negativeRange,
|
|
40
|
+
positiveRange
|
|
41
|
+
} = displayedItems;
|
|
42
|
+
const shouldRender = index >= negativeRange[0] && index <= negativeRange[1] || index >= positiveRange[0] && index <= positiveRange[1];
|
|
43
|
+
if (!shouldRender) return null;
|
|
44
|
+
return /*#__PURE__*/React.createElement(BaseLayout, {
|
|
45
|
+
key: index,
|
|
46
|
+
index: index,
|
|
47
|
+
handlerOffset: offsetX,
|
|
48
|
+
visibleRanges: visibleRanges,
|
|
49
|
+
animationStyle: customAnimation || layoutConfig
|
|
50
|
+
}, _ref => {
|
|
51
|
+
let {
|
|
52
|
+
animationValue
|
|
53
|
+
} = _ref;
|
|
54
|
+
return renderItem({
|
|
55
|
+
item,
|
|
56
|
+
index: realIndex,
|
|
57
|
+
animationValue
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
}));
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=ItemRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["ItemRenderer.tsx"],"names":["React","useAnimatedReaction","runOnJS","BaseLayout","useVisibleRanges","computedRealIndexWithAutoFillData","ItemRenderer","props","data","size","windowSize","handlerOffset","offsetX","dataLength","rawDataLength","loop","autoFillData","layoutConfig","renderItem","customAnimation","visibleRanges","total","viewSize","translation","displayedItems","setDisplayedItems","useState","value","ranges","map","item","index","realIndex","negativeRange","positiveRange","shouldRender","animationValue"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AAIA,SAASC,mBAAT,EAAsDC,OAAtD,QAAqE,yBAArE;AAGA,SAASC,UAAT,QAA2B,cAA3B;AAGA,SAASC,gBAAT,QAAiC,2BAAjC;AAEA,SAASC,iCAAT,QAAkD,uCAAlD;AAiBA,OAAO,MAAMC,YAAuB,GAAIC,KAAD,IAAW;AAChD,QAAM;AACJC,IAAAA,IADI;AAEJC,IAAAA,IAFI;AAGJC,IAAAA,UAHI;AAIJC,IAAAA,aAJI;AAKJC,IAAAA,OALI;AAMJC,IAAAA,UANI;AAOJC,IAAAA,aAPI;AAQJC,IAAAA,IARI;AASJC,IAAAA,YATI;AAUJC,IAAAA,YAVI;AAWJC,IAAAA,UAXI;AAYJC,IAAAA;AAZI,MAaFZ,KAbJ;AAeA,QAAMa,aAAa,GAAGhB,gBAAgB,CAAC;AACrCiB,IAAAA,KAAK,EAAER,UAD8B;AAErCS,IAAAA,QAAQ,EAAEb,IAF2B;AAGrCc,IAAAA,WAAW,EAAEZ,aAHwB;AAIrCD,IAAAA,UAJqC;AAKrCK,IAAAA;AALqC,GAAD,CAAtC;AAQA,QAAM,CAACS,cAAD,EAAiBC,iBAAjB,IAAsCzB,KAAK,CAAC0B,QAAN,CAA8B,IAA9B,CAA5C;AAEAzB,EAAAA,mBAAmB,CACjB,MAAMmB,aAAa,CAACO,KADH,EAEjBC,MAAM,IAAI1B,OAAO,CAACuB,iBAAD,CAAP,CAA2BG,MAA3B,CAFO,EAGjB,CAACR,aAAD,CAHiB,CAAnB;AAMA,MAAI,CAACI,cAAL,EACE,OAAO,IAAP;AAEF,sBACE,0CAEIhB,IAAI,CAACqB,GAAL,CAAS,CAACC,IAAD,EAAOC,KAAP,KAAiB;AACxB,UAAMC,SAAS,GAAG3B,iCAAiC,CAAC;AAClD0B,MAAAA,KADkD;AAElDlB,MAAAA,UAAU,EAAEC,aAFsC;AAGlDC,MAAAA,IAHkD;AAIlDC,MAAAA;AAJkD,KAAD,CAAnD;AAOA,UAAM;AAAEiB,MAAAA,aAAF;AAAiBC,MAAAA;AAAjB,QAAmCV,cAAzC;AAEA,UAAMW,YAAY,GAAIJ,KAAK,IAAIE,aAAa,CAAC,CAAD,CAAtB,IAA6BF,KAAK,IAAIE,aAAa,CAAC,CAAD,CAApD,IACjBF,KAAK,IAAIG,aAAa,CAAC,CAAD,CAAtB,IAA6BH,KAAK,IAAIG,aAAa,CAAC,CAAD,CADvD;AAGA,QAAI,CAACC,YAAL,EACE,OAAO,IAAP;AAEF,wBACE,oBAAC,UAAD;AACE,MAAA,GAAG,EAAEJ,KADP;AAEE,MAAA,KAAK,EAAEA,KAFT;AAGE,MAAA,aAAa,EAAEnB,OAHjB;AAIE,MAAA,aAAa,EAAEQ,aAJjB;AAKE,MAAA,cAAc,EAAED,eAAe,IAAIF;AALrC,OAOG;AAAA,UAAC;AAAEmB,QAAAA;AAAF,OAAD;AAAA,aACClB,UAAU,CAAC;AACTY,QAAAA,IADS;AAETC,QAAAA,KAAK,EAAEC,SAFE;AAGTI,QAAAA;AAHS,OAAD,CADX;AAAA,KAPH,CADF;AAiBD,GAjCD,CAFJ,CADF;AAwCD,CA3EM","sourcesContent":["import React from \"react\";\nimport type { FC } from \"react\";\nimport type { ViewStyle } from \"react-native\";\nimport type Animated from \"react-native-reanimated\";\nimport { useAnimatedReaction, type AnimatedStyleProp, runOnJS } from \"react-native-reanimated\";\n\nimport type { TAnimationStyle } from \"./BaseLayout\";\nimport { BaseLayout } from \"./BaseLayout\";\n\nimport type { VisibleRanges } from \"../hooks/useVisibleRanges\";\nimport { useVisibleRanges } from \"../hooks/useVisibleRanges\";\nimport type { CarouselRenderItem } from \"../types\";\nimport { computedRealIndexWithAutoFillData } from \"../utils/computed-with-auto-fill-data\";\n\ninterface Props {\n data: any[]\n dataLength: number\n rawDataLength: number\n loop: boolean\n size: number\n windowSize?: number\n autoFillData: boolean\n offsetX: Animated.SharedValue<number>\n handlerOffset: Animated.SharedValue<number>\n layoutConfig: TAnimationStyle\n renderItem: CarouselRenderItem<any>\n customAnimation?: ((value: number) => AnimatedStyleProp<ViewStyle>)\n}\n\nexport const ItemRenderer: FC<Props> = (props) => {\n const {\n data,\n size,\n windowSize,\n handlerOffset,\n offsetX,\n dataLength,\n rawDataLength,\n loop,\n autoFillData,\n layoutConfig,\n renderItem,\n customAnimation,\n } = props;\n\n const visibleRanges = useVisibleRanges({\n total: dataLength,\n viewSize: size,\n translation: handlerOffset,\n windowSize,\n loop,\n });\n\n const [displayedItems, setDisplayedItems] = React.useState<VisibleRanges>(null!);\n\n useAnimatedReaction(\n () => visibleRanges.value,\n ranges => runOnJS(setDisplayedItems)(ranges),\n [visibleRanges],\n );\n\n if (!displayedItems)\n return null;\n\n return (\n <>\n {\n data.map((item, index) => {\n const realIndex = computedRealIndexWithAutoFillData({\n index,\n dataLength: rawDataLength,\n loop,\n autoFillData,\n });\n\n const { negativeRange, positiveRange } = displayedItems;\n\n const shouldRender = (index >= negativeRange[0] && index <= negativeRange[1])\n || (index >= positiveRange[0] && index <= positiveRange[1]);\n\n if (!shouldRender)\n return null;\n\n return (\n <BaseLayout\n key={index}\n index={index}\n handlerOffset={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 </>\n );\n};\n"]}
|
|
@@ -1,23 +1,27 @@
|
|
|
1
|
-
import React, { useCallback
|
|
2
|
-
import {
|
|
1
|
+
import React, { useCallback } from "react";
|
|
2
|
+
import { GestureDetector } from "react-native-gesture-handler";
|
|
3
3
|
import Animated, { cancelAnimation, measure, runOnJS, useAnimatedReaction, useAnimatedRef, useDerivedValue, useSharedValue, withDecay } from "react-native-reanimated";
|
|
4
|
-
import { Easing } from "
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { Easing } from "../constants";
|
|
5
|
+
import { usePanGestureProxy } from "../hooks/usePanGestureProxy";
|
|
6
|
+
import { CTX } from "../store";
|
|
7
|
+
import { dealWithAnimation } from "../utils/deal-with-animation";
|
|
7
8
|
|
|
8
9
|
const IScrollViewGesture = props => {
|
|
9
10
|
const {
|
|
10
11
|
props: {
|
|
12
|
+
onConfigurePanGesture,
|
|
11
13
|
vertical,
|
|
12
14
|
pagingEnabled,
|
|
13
15
|
snapEnabled,
|
|
14
|
-
loop
|
|
16
|
+
loop,
|
|
15
17
|
scrollAnimationDuration,
|
|
16
18
|
withAnimation,
|
|
17
19
|
enabled,
|
|
18
20
|
dataLength,
|
|
19
21
|
overscrollEnabled,
|
|
20
|
-
maxScrollDistancePerSwipe
|
|
22
|
+
maxScrollDistancePerSwipe,
|
|
23
|
+
minScrollDistancePerSwipe,
|
|
24
|
+
fixedDirection
|
|
21
25
|
}
|
|
22
26
|
} = React.useContext(CTX);
|
|
23
27
|
const {
|
|
@@ -25,7 +29,7 @@ const IScrollViewGesture = props => {
|
|
|
25
29
|
translation,
|
|
26
30
|
testID,
|
|
27
31
|
style = {},
|
|
28
|
-
|
|
32
|
+
onScrollStart,
|
|
29
33
|
onScrollEnd,
|
|
30
34
|
onTouchBegin,
|
|
31
35
|
onTouchEnd
|
|
@@ -39,12 +43,13 @@ const IScrollViewGesture = props => {
|
|
|
39
43
|
const scrollEndTranslation = useSharedValue(0);
|
|
40
44
|
const scrollEndVelocity = useSharedValue(0);
|
|
41
45
|
const containerRef = useAnimatedRef();
|
|
42
|
-
const maxScrollDistancePerSwipeIsSet = typeof maxScrollDistancePerSwipe === "number";
|
|
46
|
+
const maxScrollDistancePerSwipeIsSet = typeof maxScrollDistancePerSwipe === "number";
|
|
47
|
+
const minScrollDistancePerSwipeIsSet = typeof minScrollDistancePerSwipe === "number"; // Get the limit of the scroll.
|
|
43
48
|
|
|
44
49
|
const getLimit = React.useCallback(() => {
|
|
45
50
|
"worklet";
|
|
46
51
|
|
|
47
|
-
if (!
|
|
52
|
+
if (!loop && !overscrollEnabled) {
|
|
48
53
|
const {
|
|
49
54
|
width: containerWidth = 0
|
|
50
55
|
} = measure(containerRef); // If the item's total width is less than the container's width, then there is no need to scroll.
|
|
@@ -55,7 +60,7 @@ const IScrollViewGesture = props => {
|
|
|
55
60
|
}
|
|
56
61
|
|
|
57
62
|
return dataLength * size;
|
|
58
|
-
}, [
|
|
63
|
+
}, [loop, size, dataLength, overscrollEnabled]);
|
|
59
64
|
const withSpring = React.useCallback((toValue, onFinished) => {
|
|
60
65
|
"worklet";
|
|
61
66
|
|
|
@@ -100,7 +105,7 @@ const IScrollViewGesture = props => {
|
|
|
100
105
|
const computed = offset < 0 ? Math.ceil : Math.floor;
|
|
101
106
|
const page = computed(-translation.value / size);
|
|
102
107
|
|
|
103
|
-
if (
|
|
108
|
+
if (loop) {
|
|
104
109
|
const finalPage = page + offset;
|
|
105
110
|
finalTranslation = withSpring(withProcessTranslation(-finalPage * size), onFinished);
|
|
106
111
|
} else {
|
|
@@ -119,7 +124,7 @@ const IScrollViewGesture = props => {
|
|
|
119
124
|
translation.value = finalTranslation;
|
|
120
125
|
|
|
121
126
|
function withProcessTranslation(translation) {
|
|
122
|
-
if (!
|
|
127
|
+
if (!loop && !overscrollEnabled) {
|
|
123
128
|
const limit = getLimit();
|
|
124
129
|
const sign = Math.sign(translation);
|
|
125
130
|
return sign * Math.max(0, Math.min(limit, Math.abs(translation)));
|
|
@@ -127,7 +132,7 @@ const IScrollViewGesture = props => {
|
|
|
127
132
|
|
|
128
133
|
return translation;
|
|
129
134
|
}
|
|
130
|
-
}, [withSpring, size, maxPage,
|
|
135
|
+
}, [withSpring, size, maxPage, loop, snapEnabled, translation, pagingEnabled, scrollEndVelocity.value, maxScrollDistancePerSwipe, scrollEndTranslation.value, maxScrollDistancePerSwipeIsSet]);
|
|
131
136
|
const onFinish = React.useCallback(isFinished => {
|
|
132
137
|
"worklet";
|
|
133
138
|
|
|
@@ -155,7 +160,7 @@ const IScrollViewGesture = props => {
|
|
|
155
160
|
return;
|
|
156
161
|
}
|
|
157
162
|
|
|
158
|
-
if (!
|
|
163
|
+
if (!loop) {
|
|
159
164
|
translation.value = withSpring(0);
|
|
160
165
|
return;
|
|
161
166
|
}
|
|
@@ -167,9 +172,9 @@ const IScrollViewGesture = props => {
|
|
|
167
172
|
return;
|
|
168
173
|
}
|
|
169
174
|
|
|
170
|
-
if (!
|
|
175
|
+
if (!loop) translation.value = withSpring(-((maxPage - 1) * size));
|
|
171
176
|
}
|
|
172
|
-
}, [touching.value, translation, maxPage, size, scrollEndTranslation.value,
|
|
177
|
+
}, [touching.value, translation, maxPage, size, scrollEndTranslation.value, loop, activeDecay, withSpring]);
|
|
173
178
|
useAnimatedReaction(() => translation.value, () => {
|
|
174
179
|
if (!pagingEnabled) resetBoundary();
|
|
175
180
|
}, [pagingEnabled, resetBoundary]);
|
|
@@ -177,7 +182,7 @@ const IScrollViewGesture = props => {
|
|
|
177
182
|
function withProcessTranslation(translation) {
|
|
178
183
|
"worklet";
|
|
179
184
|
|
|
180
|
-
if (!
|
|
185
|
+
if (!loop && !overscrollEnabled) {
|
|
181
186
|
const limit = getLimit();
|
|
182
187
|
const sign = Math.sign(translation);
|
|
183
188
|
return sign * Math.max(0, Math.min(limit, Math.abs(translation)));
|
|
@@ -186,16 +191,16 @@ const IScrollViewGesture = props => {
|
|
|
186
191
|
return translation;
|
|
187
192
|
}
|
|
188
193
|
|
|
189
|
-
const
|
|
194
|
+
const onGestureStart = useCallback(_ => {
|
|
190
195
|
"worklet";
|
|
191
196
|
|
|
192
197
|
touching.value = true;
|
|
193
198
|
validStart.value = true;
|
|
194
|
-
|
|
199
|
+
onScrollStart && runOnJS(onScrollStart)();
|
|
195
200
|
max.value = (maxPage - 1) * size;
|
|
196
|
-
if (!
|
|
201
|
+
if (!loop && !overscrollEnabled) max.value = getLimit();
|
|
197
202
|
panOffset.value = translation.value;
|
|
198
|
-
}, [max, size, maxPage,
|
|
203
|
+
}, [max, size, maxPage, loop, touching, panOffset, validStart, translation, overscrollEnabled, getLimit, onScrollStart]);
|
|
199
204
|
const onGestureUpdate = useCallback(e => {
|
|
200
205
|
"worklet";
|
|
201
206
|
|
|
@@ -209,9 +214,10 @@ const IScrollViewGesture = props => {
|
|
|
209
214
|
translationX,
|
|
210
215
|
translationY
|
|
211
216
|
} = e;
|
|
212
|
-
|
|
217
|
+
let panTranslation = isHorizontal.value ? translationX : translationY;
|
|
218
|
+
if (fixedDirection === "negative") panTranslation = -Math.abs(panTranslation);else if (fixedDirection === "positive") panTranslation = +Math.abs(panTranslation);
|
|
213
219
|
|
|
214
|
-
if (!
|
|
220
|
+
if (!loop) {
|
|
215
221
|
if (translation.value > 0 || translation.value < -max.value) {
|
|
216
222
|
const boundary = translation.value > 0 ? 0 : -max.value;
|
|
217
223
|
const fixed = boundary - panOffset.value;
|
|
@@ -223,8 +229,8 @@ const IScrollViewGesture = props => {
|
|
|
223
229
|
|
|
224
230
|
const translationValue = panOffset.value + panTranslation;
|
|
225
231
|
translation.value = translationValue;
|
|
226
|
-
}, [isHorizontal, max, panOffset,
|
|
227
|
-
const
|
|
232
|
+
}, [isHorizontal, max, panOffset, loop, overscrollEnabled, fixedDirection, translation, validStart, touching]);
|
|
233
|
+
const onGestureEnd = useCallback((e, _success) => {
|
|
228
234
|
"worklet";
|
|
229
235
|
|
|
230
236
|
const {
|
|
@@ -234,21 +240,42 @@ const IScrollViewGesture = props => {
|
|
|
234
240
|
translationY
|
|
235
241
|
} = e;
|
|
236
242
|
scrollEndVelocity.value = isHorizontal.value ? velocityX : velocityY;
|
|
237
|
-
|
|
243
|
+
let panTranslation = isHorizontal.value ? translationX : translationY;
|
|
244
|
+
if (fixedDirection === "negative") panTranslation = -Math.abs(panTranslation);else if (fixedDirection === "positive") panTranslation = +Math.abs(panTranslation);
|
|
245
|
+
scrollEndTranslation.value = panTranslation;
|
|
238
246
|
const totalTranslation = scrollEndVelocity.value + scrollEndTranslation.value;
|
|
247
|
+
/**
|
|
248
|
+
* If the maximum scroll distance is set and the translation `exceeds the maximum scroll distance`,
|
|
249
|
+
* the carousel will keep the view at the current position.
|
|
250
|
+
*/
|
|
239
251
|
|
|
240
252
|
if (maxScrollDistancePerSwipeIsSet && Math.abs(totalTranslation) > maxScrollDistancePerSwipe) {
|
|
241
253
|
const nextPage = Math.round((panOffset.value + maxScrollDistancePerSwipe * Math.sign(totalTranslation)) / size) * size;
|
|
242
254
|
translation.value = withSpring(withProcessTranslation(nextPage), onScrollEnd);
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* If the minimum scroll distance is set and the translation `didn't exceeds the minimum scroll distance`,
|
|
258
|
+
* the carousel will keep the view at the current position.
|
|
259
|
+
*/
|
|
260
|
+
else if (minScrollDistancePerSwipeIsSet && Math.abs(totalTranslation) < minScrollDistancePerSwipe) {
|
|
261
|
+
const nextPage = Math.round((panOffset.value + minScrollDistancePerSwipe * Math.sign(totalTranslation)) / size) * size;
|
|
262
|
+
translation.value = withSpring(withProcessTranslation(nextPage), onScrollEnd);
|
|
243
263
|
} else {
|
|
244
264
|
endWithSpring(onScrollEnd);
|
|
245
265
|
}
|
|
246
266
|
|
|
247
|
-
if (!
|
|
248
|
-
}, [size,
|
|
249
|
-
const gesture =
|
|
250
|
-
|
|
251
|
-
|
|
267
|
+
if (!loop) touching.value = false;
|
|
268
|
+
}, [size, loop, touching, panOffset, translation, isHorizontal, scrollEndVelocity, scrollEndTranslation, fixedDirection, maxScrollDistancePerSwipeIsSet, maxScrollDistancePerSwipe, maxScrollDistancePerSwipeIsSet, minScrollDistancePerSwipe, endWithSpring, withSpring, onScrollEnd]);
|
|
269
|
+
const gesture = usePanGestureProxy({
|
|
270
|
+
onConfigurePanGesture,
|
|
271
|
+
onGestureStart,
|
|
272
|
+
onGestureUpdate,
|
|
273
|
+
onGestureEnd,
|
|
274
|
+
options: {
|
|
275
|
+
enabled
|
|
276
|
+
}
|
|
277
|
+
});
|
|
278
|
+
return /*#__PURE__*/React.createElement(GestureDetector, {
|
|
252
279
|
gesture: gesture
|
|
253
280
|
}, /*#__PURE__*/React.createElement(Animated.View, {
|
|
254
281
|
ref: containerRef,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["ScrollViewGesture.tsx"],"names":["React","useCallback","GestureDetector","Animated","cancelAnimation","measure","runOnJS","useAnimatedReaction","useAnimatedRef","useDerivedValue","useSharedValue","withDecay","Easing","usePanGestureProxy","CTX","dealWithAnimation","IScrollViewGesture","props","onConfigurePanGesture","vertical","pagingEnabled","snapEnabled","loop","scrollAnimationDuration","withAnimation","enabled","dataLength","overscrollEnabled","maxScrollDistancePerSwipe","minScrollDistancePerSwipe","fixedDirection","useContext","size","translation","testID","style","onScrollStart","onScrollEnd","onTouchBegin","onTouchEnd","maxPage","isHorizontal","max","panOffset","touching","validStart","scrollEndTranslation","scrollEndVelocity","containerRef","maxScrollDistancePerSwipeIsSet","minScrollDistancePerSwipeIsSet","getLimit","width","containerWidth","withSpring","toValue","onFinished","defaultWithAnimation","type","config","duration","easing","easeOutQuart","isFinished","endWithSpring","origin","value","velocity","finalTranslation","deceleration","Math","abs","offset","computed","ceil","floor","page","finalPage","withProcessTranslation","min","nextPage","round","limit","sign","onFinish","activeDecay","resetBoundary","onGestureStart","_","onGestureUpdate","e","translationX","translationY","panTranslation","boundary","fixed","dynamic","translationValue","onGestureEnd","_success","velocityX","velocityY","totalTranslation","gesture","options","children","ScrollViewGesture"],"mappings":"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","sourcesContent":["import type { PropsWithChildren } from \"react\";\nimport React, { useCallback } from \"react\";\nimport type { StyleProp, ViewStyle } from \"react-native\";\nimport type { GestureStateChangeEvent, PanGestureHandlerEventPayload } from \"react-native-gesture-handler\";\nimport { GestureDetector } from \"react-native-gesture-handler\";\nimport Animated, {\n cancelAnimation,\n measure,\n runOnJS,\n useAnimatedReaction,\n useAnimatedRef,\n useDerivedValue,\n useSharedValue,\n withDecay,\n} from \"react-native-reanimated\";\n\nimport { Easing } from \"../constants\";\nimport { usePanGestureProxy } from \"../hooks/usePanGestureProxy\";\nimport { CTX } from \"../store\";\nimport type { WithTimingAnimation } from \"../types\";\nimport { dealWithAnimation } from \"../utils/deal-with-animation\";\n\ninterface Props {\n size: number\n infinite?: boolean\n testID?: string\n style?: StyleProp<ViewStyle>\n onScrollStart?: () => void\n onScrollEnd?: () => void\n onTouchBegin?: () => void\n onTouchEnd?: () => void\n translation: Animated.SharedValue<number>\n}\n\nconst IScrollViewGesture: React.FC<PropsWithChildren<Props>> = (props) => {\n const {\n props: {\n onConfigurePanGesture,\n vertical,\n pagingEnabled,\n snapEnabled,\n loop,\n scrollAnimationDuration,\n withAnimation,\n enabled,\n dataLength,\n overscrollEnabled,\n maxScrollDistancePerSwipe,\n minScrollDistancePerSwipe,\n fixedDirection,\n },\n } = React.useContext(CTX);\n\n const {\n size,\n translation,\n testID,\n style = {},\n onScrollStart,\n onScrollEnd,\n onTouchBegin,\n onTouchEnd,\n } = props;\n\n const maxPage = dataLength;\n const isHorizontal = useDerivedValue(() => !vertical, [vertical]);\n const max = useSharedValue(0);\n const panOffset = useSharedValue(0);\n const touching = useSharedValue(false);\n const validStart = useSharedValue(false);\n const scrollEndTranslation = useSharedValue(0);\n const scrollEndVelocity = useSharedValue(0);\n const containerRef = useAnimatedRef<Animated.View>();\n const maxScrollDistancePerSwipeIsSet = typeof maxScrollDistancePerSwipe === \"number\";\n const minScrollDistancePerSwipeIsSet = typeof minScrollDistancePerSwipe === \"number\";\n\n // Get the limit of the scroll.\n const getLimit = React.useCallback(() => {\n \"worklet\";\n\n if (!loop && !overscrollEnabled) {\n const { width: containerWidth = 0 } = measure(containerRef);\n\n // If the item's total width is less than the container's width, then there is no need to scroll.\n if (dataLength * size < containerWidth)\n return 0;\n\n // Disable the \"overscroll\" effect\n return dataLength * size - containerWidth;\n }\n\n return dataLength * size;\n }, [loop, size, dataLength, overscrollEnabled]);\n\n const withSpring = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n \"worklet\";\n const defaultWithAnimation: WithTimingAnimation = {\n type: \"timing\",\n config: {\n duration: scrollAnimationDuration + 100,\n easing: Easing.easeOutQuart,\n },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n (isFinished: boolean) => {\n \"worklet\";\n if (isFinished)\n onFinished && runOnJS(onFinished)();\n },\n );\n },\n [scrollAnimationDuration, withAnimation],\n );\n\n const endWithSpring = React.useCallback(\n (onFinished?: () => void) => {\n \"worklet\";\n const origin = translation.value;\n const velocity = scrollEndVelocity.value;\n // Default to scroll in the direction of the slide (with deceleration)\n let finalTranslation: number = withDecay({ velocity, deceleration: 0.999 });\n\n // If the distance of the swipe exceeds the max scroll distance, keep the view at the current position\n if (maxScrollDistancePerSwipeIsSet && Math.abs(scrollEndTranslation.value) > maxScrollDistancePerSwipe) {\n finalTranslation = origin;\n }\n else {\n /**\n * The page size is the same as the item size.\n * If direction is vertical, the page size is the height of the item.\n * If direction is horizontal, the page size is the width of the item.\n *\n * `page size` equals to `size` variable.\n * */\n if (pagingEnabled) {\n // distance with direction\n const offset = -(scrollEndTranslation.value >= 0 ? 1 : -1); // 1 or -1\n const computed = offset < 0 ? Math.ceil : Math.floor;\n const page = computed(-translation.value / size);\n\n if (loop) {\n const finalPage = page + offset;\n finalTranslation = withSpring(withProcessTranslation(-finalPage * size), onFinished);\n }\n else {\n const finalPage = Math.min(maxPage - 1, Math.max(0, page + offset));\n finalTranslation = withSpring(withProcessTranslation(-finalPage * size), onFinished);\n }\n }\n\n if (!pagingEnabled && snapEnabled) {\n // scroll to the nearest item\n const nextPage = Math.round((origin + velocity * 0.4) / size) * size;\n finalTranslation = withSpring(withProcessTranslation(nextPage), onFinished);\n }\n }\n\n translation.value = finalTranslation;\n\n function withProcessTranslation(translation: number) {\n if (!loop && !overscrollEnabled) {\n const limit = getLimit();\n const sign = Math.sign(translation);\n return sign * Math.max(0, Math.min(limit, Math.abs(translation)));\n }\n\n return translation;\n }\n },\n [\n withSpring,\n size,\n maxPage,\n loop,\n snapEnabled,\n translation,\n pagingEnabled,\n scrollEndVelocity.value,\n maxScrollDistancePerSwipe,\n scrollEndTranslation.value,\n maxScrollDistancePerSwipeIsSet,\n ],\n );\n\n const onFinish = React.useCallback(\n (isFinished: boolean) => {\n \"worklet\";\n if (isFinished) {\n touching.value = false;\n onScrollEnd && runOnJS(onScrollEnd)();\n }\n },\n [onScrollEnd, touching],\n );\n\n const activeDecay = React.useCallback(() => {\n \"worklet\";\n touching.value = true;\n translation.value = withDecay(\n { velocity: scrollEndVelocity.value },\n isFinished => onFinish(isFinished as boolean),\n );\n }, [onFinish, scrollEndVelocity.value, touching, translation]);\n\n const resetBoundary = React.useCallback(() => {\n \"worklet\";\n if (touching.value)\n return;\n\n if (translation.value > 0) {\n if (scrollEndTranslation.value < 0) {\n activeDecay();\n return;\n }\n if (!loop) {\n translation.value = withSpring(0);\n return;\n }\n }\n\n if (translation.value < -((maxPage - 1) * size)) {\n if (scrollEndTranslation.value > 0) {\n activeDecay();\n return;\n }\n if (!loop)\n translation.value = withSpring(-((maxPage - 1) * size));\n }\n }, [\n touching.value,\n translation,\n maxPage,\n size,\n scrollEndTranslation.value,\n loop,\n activeDecay,\n withSpring,\n ]);\n\n useAnimatedReaction(\n () => translation.value,\n () => {\n if (!pagingEnabled)\n resetBoundary();\n },\n [pagingEnabled, resetBoundary],\n );\n\n function withProcessTranslation(translation: number) {\n \"worklet\";\n\n if (!loop && !overscrollEnabled) {\n const limit = getLimit();\n const sign = Math.sign(translation);\n return sign * Math.max(0, Math.min(limit, Math.abs(translation)));\n }\n\n return translation;\n }\n\n const onGestureStart = useCallback((_: PanGestureHandlerEventPayload) => {\n \"worklet\";\n\n touching.value = true;\n validStart.value = true;\n onScrollStart && runOnJS(onScrollStart)();\n\n max.value = (maxPage - 1) * size;\n if (!loop && !overscrollEnabled)\n max.value = getLimit();\n\n panOffset.value = translation.value;\n }, [\n max,\n size,\n maxPage,\n loop,\n touching,\n panOffset,\n validStart,\n translation,\n overscrollEnabled,\n getLimit,\n onScrollStart,\n ]);\n\n const onGestureUpdate = useCallback((e: PanGestureHandlerEventPayload) => {\n \"worklet\";\n\n if (validStart.value) {\n validStart.value = false;\n cancelAnimation(translation);\n }\n touching.value = true;\n const { translationX, translationY } = e;\n\n let panTranslation = isHorizontal.value\n ? translationX\n : translationY;\n\n if (fixedDirection === \"negative\")\n panTranslation = -Math.abs(panTranslation);\n\n else if (fixedDirection === \"positive\")\n panTranslation = +Math.abs(panTranslation);\n\n if (!loop) {\n if ((translation.value > 0 || translation.value < -max.value)) {\n const boundary = translation.value > 0 ? 0 : -max.value;\n const fixed = boundary - panOffset.value;\n const dynamic = panTranslation - fixed;\n translation.value = boundary + dynamic * 0.5;\n return;\n }\n }\n\n const translationValue = panOffset.value + panTranslation;\n translation.value = translationValue;\n }, [\n isHorizontal,\n max,\n panOffset,\n loop,\n overscrollEnabled,\n fixedDirection,\n translation,\n validStart,\n touching,\n ]);\n\n const onGestureEnd = useCallback((e: GestureStateChangeEvent<PanGestureHandlerEventPayload>, _success: boolean) => {\n \"worklet\";\n\n const { velocityX, velocityY, translationX, translationY } = e;\n scrollEndVelocity.value = isHorizontal.value\n ? velocityX\n : velocityY;\n\n let panTranslation = isHorizontal.value\n ? translationX\n : translationY;\n\n if (fixedDirection === \"negative\")\n panTranslation = -Math.abs(panTranslation);\n\n else if (fixedDirection === \"positive\")\n panTranslation = +Math.abs(panTranslation);\n\n scrollEndTranslation.value = panTranslation;\n\n const totalTranslation = scrollEndVelocity.value + scrollEndTranslation.value;\n\n /**\n * If the maximum scroll distance is set and the translation `exceeds the maximum scroll distance`,\n * the carousel will keep the view at the current position.\n */\n if (\n maxScrollDistancePerSwipeIsSet && Math.abs(totalTranslation) > maxScrollDistancePerSwipe\n ) {\n const nextPage = Math.round((panOffset.value + maxScrollDistancePerSwipe * Math.sign(totalTranslation)) / size) * size;\n translation.value = withSpring(withProcessTranslation(nextPage), onScrollEnd);\n }\n /**\n * If the minimum scroll distance is set and the translation `didn't exceeds the minimum scroll distance`,\n * the carousel will keep the view at the current position.\n */\n else if (\n minScrollDistancePerSwipeIsSet && Math.abs(totalTranslation) < minScrollDistancePerSwipe\n ) {\n const nextPage = Math.round((panOffset.value + minScrollDistancePerSwipe * Math.sign(totalTranslation)) / size) * size;\n translation.value = withSpring(withProcessTranslation(nextPage), onScrollEnd);\n }\n else {\n endWithSpring(onScrollEnd);\n }\n\n if (!loop)\n touching.value = false;\n }, [\n size,\n loop,\n touching,\n panOffset,\n translation,\n isHorizontal,\n scrollEndVelocity,\n scrollEndTranslation,\n fixedDirection,\n maxScrollDistancePerSwipeIsSet,\n maxScrollDistancePerSwipe,\n maxScrollDistancePerSwipeIsSet,\n minScrollDistancePerSwipe,\n endWithSpring,\n withSpring,\n onScrollEnd,\n ]);\n\n const gesture = usePanGestureProxy({\n onConfigurePanGesture,\n onGestureStart,\n onGestureUpdate,\n onGestureEnd,\n options: { enabled },\n });\n\n return (\n <GestureDetector gesture={gesture}>\n <Animated.View\n ref={containerRef}\n testID={testID}\n style={style}\n onTouchStart={onTouchBegin}\n onTouchEnd={onTouchEnd}\n >\n {props.children}\n </Animated.View>\n </GestureDetector>\n );\n};\n\nexport const ScrollViewGesture = IScrollViewGesture;\n"]}
|