react-native-reanimated-carousel 4.0.0-alpha.5 → 4.0.0-alpha.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/lib/commonjs/{layouts → components}/BaseLayout.js +4 -2
- package/lib/commonjs/components/BaseLayout.js.map +1 -0
- package/lib/commonjs/components/Carousel.js +4 -3
- package/lib/commonjs/components/Carousel.js.map +1 -1
- package/lib/commonjs/components/ScrollViewGesture.js +34 -30
- package/lib/commonjs/components/ScrollViewGesture.js.map +1 -1
- package/lib/commonjs/hooks/useLayoutConfig.js.map +1 -1
- package/lib/commonjs/hooks/useOffsetX.js +9 -6
- 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/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/useUpdateGestureConfig.js.map +1 -1
- package/lib/commonjs/hooks/useVisibleRanges.js +17 -6
- 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/module/{layouts → components}/BaseLayout.js +4 -2
- package/lib/module/components/BaseLayout.js.map +1 -0
- package/lib/module/components/Carousel.js +3 -2
- package/lib/module/components/Carousel.js.map +1 -1
- package/lib/module/components/ScrollViewGesture.js +36 -31
- package/lib/module/components/ScrollViewGesture.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/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.map +1 -1
- package/lib/module/hooks/useVisibleRanges.js +17 -6
- 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/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 +3 -2
- package/lib/typescript/hooks/useVisibleRanges.d.ts +1 -0
- package/lib/typescript/hooks/useVisibleRanges.test.d.ts +1 -0
- package/lib/typescript/types.d.ts +5 -0
- package/package.json +2 -1
- package/src/{layouts → components}/BaseLayout.tsx +10 -8
- package/src/components/Carousel.tsx +2 -1
- package/src/components/ScrollViewGesture.tsx +48 -43
- 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/usePanGestureProxy.test.tsx +377 -0
- package/src/hooks/usePanGestureProxy.ts +110 -0
- package/src/hooks/useUpdateGestureConfig.ts +4 -2
- package/src/hooks/useVisibleRanges.test.tsx +179 -0
- package/src/hooks/useVisibleRanges.tsx +23 -7
- package/src/types.ts +5 -0
- package/lib/commonjs/layouts/BaseLayout.js.map +0 -1
- package/lib/commonjs/layouts/ParallaxLayout.js +0 -84
- package/lib/commonjs/layouts/ParallaxLayout.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/typescript/layouts/ParallaxLayout.d.ts +0 -13
- package/src/layouts/ParallaxLayout.tsx +0 -141
- /package/lib/typescript/{layouts → components}/BaseLayout.d.ts +0 -0
|
@@ -9,7 +9,7 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
9
9
|
|
|
10
10
|
var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
|
|
11
11
|
|
|
12
|
-
var _LazyView = require("
|
|
12
|
+
var _LazyView = require("./LazyView");
|
|
13
13
|
|
|
14
14
|
var _useCheckMounted = require("../hooks/useCheckMounted");
|
|
15
15
|
|
|
@@ -78,7 +78,9 @@ const BaseLayout = props => {
|
|
|
78
78
|
|
|
79
79
|
const x = (0, _useOffsetX.useOffsetX)(offsetXConfig, visibleRanges);
|
|
80
80
|
const animationValue = (0, _reactNativeReanimated.useDerivedValue)(() => x.value / size, [x, size]);
|
|
81
|
-
const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() =>
|
|
81
|
+
const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
|
|
82
|
+
return animationStyle(x.value / size);
|
|
83
|
+
}, [animationStyle]);
|
|
82
84
|
|
|
83
85
|
const updateView = _react.default.useCallback((negativeRange, positiveRange) => {
|
|
84
86
|
mounted.current && setShouldUpdate(index >= negativeRange[0] && index <= negativeRange[1] || index >= positiveRange[0] && index <= positiveRange[1]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["BaseLayout.tsx"],"names":["BaseLayout","props","mounted","handlerOffset","index","children","visibleRanges","animationStyle","context","React","useContext","CTX","loop","dataLength","width","height","vertical","customConfig","mode","modeConfig","size","shouldUpdate","setShouldUpdate","useState","offsetXConfig","snapDirection","showLength","type","viewCount","x","animationValue","value","animatedStyle","updateView","useCallback","negativeRange","positiveRange","current","position"],"mappings":"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","sourcesContent":["import React from \"react\";\nimport type { ViewStyle } from \"react-native\";\nimport type { AnimatedStyleProp } from \"react-native-reanimated\";\nimport Animated, {\n runOnJS,\n useAnimatedReaction,\n useAnimatedStyle,\n useDerivedValue,\n} from \"react-native-reanimated\";\n\nimport { LazyView } from \"./LazyView\";\n\nimport { useCheckMounted } from \"../hooks/useCheckMounted\";\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 mounted = useCheckMounted();\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 const [shouldUpdate, setShouldUpdate] = React.useState(false);\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 const updateView = React.useCallback(\n (negativeRange: number[], positiveRange: number[]) => {\n mounted.current\n && setShouldUpdate(\n (index >= negativeRange[0] && index <= negativeRange[1])\n || (index >= positiveRange[0] && index <= positiveRange[1]),\n );\n },\n [index, mounted],\n );\n\n useAnimatedReaction(\n () => visibleRanges.value,\n () => {\n runOnJS(updateView)(\n visibleRanges.value.negativeRange,\n visibleRanges.value.positiveRange,\n );\n },\n [visibleRanges.value],\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}_${shouldUpdate ? \"READY\" : \"NOT_READY\"}__`}\n >\n <LazyView shouldUpdate={shouldUpdate}>\n {children({ animationValue })}\n </LazyView>\n </Animated.View>\n );\n};\n"]}
|
|
@@ -13,6 +13,8 @@ var _reactNativeGestureHandler = require("react-native-gesture-handler");
|
|
|
13
13
|
|
|
14
14
|
var _reactNativeReanimated = require("react-native-reanimated");
|
|
15
15
|
|
|
16
|
+
var _BaseLayout = require("./BaseLayout");
|
|
17
|
+
|
|
16
18
|
var _ScrollViewGesture = require("./ScrollViewGesture");
|
|
17
19
|
|
|
18
20
|
var _useAutoPlay = require("../hooks/useAutoPlay");
|
|
@@ -31,8 +33,6 @@ var _usePropsErrorBoundary = require("../hooks/usePropsErrorBoundary");
|
|
|
31
33
|
|
|
32
34
|
var _useVisibleRanges = require("../hooks/useVisibleRanges");
|
|
33
35
|
|
|
34
|
-
var _BaseLayout = require("../layouts/BaseLayout");
|
|
35
|
-
|
|
36
36
|
var _store = require("../store");
|
|
37
37
|
|
|
38
38
|
var _computedWithAutoFillData = require("../utils/computed-with-auto-fill-data");
|
|
@@ -162,7 +162,8 @@ const Carousel = /*#__PURE__*/_react.default.forwardRef((_props, ref) => {
|
|
|
162
162
|
total: dataLength,
|
|
163
163
|
viewSize: size,
|
|
164
164
|
translation: handlerOffset,
|
|
165
|
-
windowSize
|
|
165
|
+
windowSize,
|
|
166
|
+
loop
|
|
166
167
|
});
|
|
167
168
|
const layoutConfig = (0, _useLayoutConfig.useLayoutConfig)({ ...props,
|
|
168
169
|
size
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Carousel.tsx"],"names":["Carousel","React","forwardRef","_props","ref","props","testID","loop","autoFillData","data","dataLength","rawData","rawDataLength","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","defaultIndex","commonVariables","size","handlerOffset","offsetX","totalSize","x","value","isNaN","carouselController","_onScrollEnd","duration","next","prev","scrollTo","getSharedIndex","getCurrentIndex","start","startAutoPlay","pause","pauseAutoPlay","useCallback","_sharedIndex","Math","round","realIndex","index","scrollViewGestureOnScrollBegin","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","useImperativeHandle","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","i","animationValue","common","styles","container","itemsVertical","itemsHorizontal","map","StyleSheet","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 { 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 { useVisibleRanges } from \"../hooks/useVisibleRanges\";\nimport { BaseLayout } from \"../layouts/BaseLayout\";\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 // Raw data that has not been processed\n rawData,\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 renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\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 onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n duration: scrollAnimationDuration,\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 scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pauseAutoPlay();\n onScrollBegin?.();\n }, [onScrollBegin, 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 visibleRanges = useVisibleRanges({\n total: dataLength,\n viewSize: size,\n translation: handlerOffset,\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: rawDataLength,\n loop,\n autoFillData,\n });\n\n return (\n <BaseLayout\n key={i}\n index={i}\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 loop,\n rawData,\n offsetX,\n visibleRanges,\n autoFillData,\n renderItem,\n layoutConfig,\n customAnimation,\n ],\n );\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 onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n onTouchBegin={scrollViewGestureOnTouchBegin}\n onTouchEnd={scrollViewGestureOnTouchEnd}\n >\n {data.map(renderLayout)}\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"]}
|
|
1
|
+
{"version":3,"sources":["Carousel.tsx"],"names":["Carousel","React","forwardRef","_props","ref","props","testID","loop","autoFillData","data","dataLength","rawData","rawDataLength","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","defaultIndex","commonVariables","size","handlerOffset","offsetX","totalSize","x","value","isNaN","carouselController","_onScrollEnd","duration","next","prev","scrollTo","getSharedIndex","getCurrentIndex","start","startAutoPlay","pause","pauseAutoPlay","useCallback","_sharedIndex","Math","round","realIndex","index","scrollViewGestureOnScrollBegin","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","useImperativeHandle","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","i","animationValue","common","styles","container","itemsVertical","itemsHorizontal","map","StyleSheet","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 { BaseLayout } from \"./BaseLayout\";\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 { useVisibleRanges } from \"../hooks/useVisibleRanges\";\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 // Raw data that has not been processed\n rawData,\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 renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\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 onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n duration: scrollAnimationDuration,\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 scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pauseAutoPlay();\n onScrollBegin?.();\n }, [onScrollBegin, 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 visibleRanges = useVisibleRanges({\n total: dataLength,\n viewSize: size,\n translation: handlerOffset,\n windowSize,\n loop,\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: rawDataLength,\n loop,\n autoFillData,\n });\n\n return (\n <BaseLayout\n key={i}\n index={i}\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 loop,\n rawData,\n offsetX,\n visibleRanges,\n autoFillData,\n renderItem,\n layoutConfig,\n customAnimation,\n ],\n );\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 onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n onTouchBegin={scrollViewGestureOnTouchBegin}\n onTouchEnd={scrollViewGestureOnTouchEnd}\n >\n {data.map(renderLayout)}\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"]}
|
|
@@ -13,7 +13,7 @@ var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reani
|
|
|
13
13
|
|
|
14
14
|
var _constants = require("../constants");
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var _usePanGestureProxy = require("../hooks/usePanGestureProxy");
|
|
17
17
|
|
|
18
18
|
var _store = require("../store");
|
|
19
19
|
|
|
@@ -30,13 +30,14 @@ const IScrollViewGesture = props => {
|
|
|
30
30
|
vertical,
|
|
31
31
|
pagingEnabled,
|
|
32
32
|
snapEnabled,
|
|
33
|
-
loop
|
|
33
|
+
loop,
|
|
34
34
|
scrollAnimationDuration,
|
|
35
35
|
withAnimation,
|
|
36
36
|
enabled,
|
|
37
37
|
dataLength,
|
|
38
38
|
overscrollEnabled,
|
|
39
|
-
maxScrollDistancePerSwipe
|
|
39
|
+
maxScrollDistancePerSwipe,
|
|
40
|
+
fixedDirection
|
|
40
41
|
}
|
|
41
42
|
} = _react.default.useContext(_store.CTX);
|
|
42
43
|
|
|
@@ -64,7 +65,7 @@ const IScrollViewGesture = props => {
|
|
|
64
65
|
const getLimit = _react.default.useCallback(() => {
|
|
65
66
|
"worklet";
|
|
66
67
|
|
|
67
|
-
if (!
|
|
68
|
+
if (!loop && !overscrollEnabled) {
|
|
68
69
|
const {
|
|
69
70
|
width: containerWidth = 0
|
|
70
71
|
} = (0, _reactNativeReanimated.measure)(containerRef); // If the item's total width is less than the container's width, then there is no need to scroll.
|
|
@@ -75,7 +76,7 @@ const IScrollViewGesture = props => {
|
|
|
75
76
|
}
|
|
76
77
|
|
|
77
78
|
return dataLength * size;
|
|
78
|
-
}, [
|
|
79
|
+
}, [loop, size, dataLength, overscrollEnabled]);
|
|
79
80
|
|
|
80
81
|
const withSpring = _react.default.useCallback((toValue, onFinished) => {
|
|
81
82
|
"worklet";
|
|
@@ -122,7 +123,7 @@ const IScrollViewGesture = props => {
|
|
|
122
123
|
const computed = offset < 0 ? Math.ceil : Math.floor;
|
|
123
124
|
const page = computed(-translation.value / size);
|
|
124
125
|
|
|
125
|
-
if (
|
|
126
|
+
if (loop) {
|
|
126
127
|
const finalPage = page + offset;
|
|
127
128
|
finalTranslation = withSpring(withProcessTranslation(-finalPage * size), onFinished);
|
|
128
129
|
} else {
|
|
@@ -141,7 +142,7 @@ const IScrollViewGesture = props => {
|
|
|
141
142
|
translation.value = finalTranslation;
|
|
142
143
|
|
|
143
144
|
function withProcessTranslation(translation) {
|
|
144
|
-
if (!
|
|
145
|
+
if (!loop && !overscrollEnabled) {
|
|
145
146
|
const limit = getLimit();
|
|
146
147
|
const sign = Math.sign(translation);
|
|
147
148
|
return sign * Math.max(0, Math.min(limit, Math.abs(translation)));
|
|
@@ -149,7 +150,7 @@ const IScrollViewGesture = props => {
|
|
|
149
150
|
|
|
150
151
|
return translation;
|
|
151
152
|
}
|
|
152
|
-
}, [withSpring, size, maxPage,
|
|
153
|
+
}, [withSpring, size, maxPage, loop, snapEnabled, translation, pagingEnabled, scrollEndVelocity.value, maxScrollDistancePerSwipe, scrollEndTranslation.value, maxScrollDistancePerSwipeIsSet]);
|
|
153
154
|
|
|
154
155
|
const onFinish = _react.default.useCallback(isFinished => {
|
|
155
156
|
"worklet";
|
|
@@ -180,7 +181,7 @@ const IScrollViewGesture = props => {
|
|
|
180
181
|
return;
|
|
181
182
|
}
|
|
182
183
|
|
|
183
|
-
if (!
|
|
184
|
+
if (!loop) {
|
|
184
185
|
translation.value = withSpring(0);
|
|
185
186
|
return;
|
|
186
187
|
}
|
|
@@ -192,9 +193,9 @@ const IScrollViewGesture = props => {
|
|
|
192
193
|
return;
|
|
193
194
|
}
|
|
194
195
|
|
|
195
|
-
if (!
|
|
196
|
+
if (!loop) translation.value = withSpring(-((maxPage - 1) * size));
|
|
196
197
|
}
|
|
197
|
-
}, [touching.value, translation, maxPage, size, scrollEndTranslation.value,
|
|
198
|
+
}, [touching.value, translation, maxPage, size, scrollEndTranslation.value, loop, activeDecay, withSpring]);
|
|
198
199
|
|
|
199
200
|
(0, _reactNativeReanimated.useAnimatedReaction)(() => translation.value, () => {
|
|
200
201
|
if (!pagingEnabled) resetBoundary();
|
|
@@ -203,7 +204,7 @@ const IScrollViewGesture = props => {
|
|
|
203
204
|
function withProcessTranslation(translation) {
|
|
204
205
|
"worklet";
|
|
205
206
|
|
|
206
|
-
if (!
|
|
207
|
+
if (!loop && !overscrollEnabled) {
|
|
207
208
|
const limit = getLimit();
|
|
208
209
|
const sign = Math.sign(translation);
|
|
209
210
|
return sign * Math.max(0, Math.min(limit, Math.abs(translation)));
|
|
@@ -212,16 +213,16 @@ const IScrollViewGesture = props => {
|
|
|
212
213
|
return translation;
|
|
213
214
|
}
|
|
214
215
|
|
|
215
|
-
const onGestureBegin = (0, _react.useCallback)(
|
|
216
|
+
const onGestureBegin = (0, _react.useCallback)(_ => {
|
|
216
217
|
"worklet";
|
|
217
218
|
|
|
218
219
|
touching.value = true;
|
|
219
220
|
validStart.value = true;
|
|
220
221
|
onScrollBegin && (0, _reactNativeReanimated.runOnJS)(onScrollBegin)();
|
|
221
222
|
max.value = (maxPage - 1) * size;
|
|
222
|
-
if (!
|
|
223
|
+
if (!loop && !overscrollEnabled) max.value = getLimit();
|
|
223
224
|
panOffset.value = translation.value;
|
|
224
|
-
}, [max, size, maxPage,
|
|
225
|
+
}, [max, size, maxPage, loop, touching, panOffset, validStart, translation, overscrollEnabled, getLimit, onScrollBegin]);
|
|
225
226
|
const onGestureUpdate = (0, _react.useCallback)(e => {
|
|
226
227
|
"worklet";
|
|
227
228
|
|
|
@@ -235,9 +236,10 @@ const IScrollViewGesture = props => {
|
|
|
235
236
|
translationX,
|
|
236
237
|
translationY
|
|
237
238
|
} = e;
|
|
238
|
-
|
|
239
|
+
let panTranslation = isHorizontal.value ? translationX : translationY;
|
|
240
|
+
if (fixedDirection === "negative") panTranslation = -Math.abs(panTranslation);else if (fixedDirection === "positive") panTranslation = +Math.abs(panTranslation);
|
|
239
241
|
|
|
240
|
-
if (!
|
|
242
|
+
if (!loop) {
|
|
241
243
|
if (translation.value > 0 || translation.value < -max.value) {
|
|
242
244
|
const boundary = translation.value > 0 ? 0 : -max.value;
|
|
243
245
|
const fixed = boundary - panOffset.value;
|
|
@@ -249,8 +251,8 @@ const IScrollViewGesture = props => {
|
|
|
249
251
|
|
|
250
252
|
const translationValue = panOffset.value + panTranslation;
|
|
251
253
|
translation.value = translationValue;
|
|
252
|
-
}, [isHorizontal, max, panOffset,
|
|
253
|
-
const
|
|
254
|
+
}, [isHorizontal, max, panOffset, loop, overscrollEnabled, fixedDirection, translation, validStart, touching]);
|
|
255
|
+
const onGestureEnd = (0, _react.useCallback)((e, _success) => {
|
|
254
256
|
"worklet";
|
|
255
257
|
|
|
256
258
|
const {
|
|
@@ -260,7 +262,9 @@ const IScrollViewGesture = props => {
|
|
|
260
262
|
translationY
|
|
261
263
|
} = e;
|
|
262
264
|
scrollEndVelocity.value = isHorizontal.value ? velocityX : velocityY;
|
|
263
|
-
|
|
265
|
+
let panTranslation = isHorizontal.value ? translationX : translationY;
|
|
266
|
+
if (fixedDirection === "negative") panTranslation = -Math.abs(panTranslation);else if (fixedDirection === "positive") panTranslation = +Math.abs(panTranslation);
|
|
267
|
+
scrollEndTranslation.value = panTranslation;
|
|
264
268
|
const totalTranslation = scrollEndVelocity.value + scrollEndTranslation.value;
|
|
265
269
|
|
|
266
270
|
if (maxScrollDistancePerSwipeIsSet && Math.abs(totalTranslation) > maxScrollDistancePerSwipe) {
|
|
@@ -270,16 +274,16 @@ const IScrollViewGesture = props => {
|
|
|
270
274
|
endWithSpring(onScrollEnd);
|
|
271
275
|
}
|
|
272
276
|
|
|
273
|
-
if (!
|
|
274
|
-
}, [size,
|
|
275
|
-
const gesture = (0,
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
277
|
+
if (!loop) touching.value = false;
|
|
278
|
+
}, [size, loop, touching, panOffset, translation, isHorizontal, scrollEndVelocity, scrollEndTranslation, fixedDirection, maxScrollDistancePerSwipeIsSet, maxScrollDistancePerSwipe, endWithSpring, withSpring, onScrollEnd]);
|
|
279
|
+
const gesture = (0, _usePanGestureProxy.usePanGestureProxy)({
|
|
280
|
+
onConfigurePanGesture,
|
|
281
|
+
onGestureBegin,
|
|
282
|
+
onGestureUpdate,
|
|
283
|
+
onGestureEnd,
|
|
284
|
+
options: {
|
|
285
|
+
enabled
|
|
286
|
+
}
|
|
283
287
|
});
|
|
284
288
|
return /*#__PURE__*/_react.default.createElement(_reactNativeGestureHandler.GestureDetector, {
|
|
285
289
|
gesture: gesture
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ScrollViewGesture.tsx"],"names":["IScrollViewGesture","props","onConfigurePanGesture","vertical","pagingEnabled","snapEnabled","loop","infinite","scrollAnimationDuration","withAnimation","enabled","dataLength","overscrollEnabled","maxScrollDistancePerSwipe","React","useContext","CTX","size","translation","testID","style","onScrollBegin","onScrollEnd","onTouchBegin","onTouchEnd","maxPage","isHorizontal","max","panOffset","touching","validStart","scrollEndTranslation","scrollEndVelocity","containerRef","maxScrollDistancePerSwipeIsSet","getLimit","useCallback","width","containerWidth","withSpring","toValue","onFinished","defaultWithAnimation","type","config","duration","easing","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","onGestureBegin","onGestureUpdate","e","translationX","translationY","panTranslation","boundary","fixed","dynamic","translationValue","onGestureFinish","velocityX","velocityY","totalTranslation","gesture","Gesture","Pan","onBegin","onUpdate","onEnd","children","ScrollViewGesture"],"mappings":"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","sourcesContent":["import type { PropsWithChildren } from \"react\";\nimport React, { useCallback, useMemo } from \"react\";\nimport type { StyleProp, ViewStyle } from \"react-native\";\nimport type { GestureStateChangeEvent, PanGestureHandlerEventPayload } from \"react-native-gesture-handler\";\nimport {\n Gesture,\n GestureDetector,\n} 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 { useUpdateGestureConfig } from \"../hooks/useUpdateGestureConfig\";\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 onScrollBegin?: () => 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: infinite,\n scrollAnimationDuration,\n withAnimation,\n enabled,\n dataLength,\n overscrollEnabled,\n maxScrollDistancePerSwipe,\n },\n } = React.useContext(CTX);\n\n const {\n size,\n translation,\n testID,\n style = {},\n onScrollBegin,\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\n // Get the limit of the scroll.\n const getLimit = React.useCallback(() => {\n \"worklet\";\n\n if (!infinite && !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 }, [infinite, 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 (infinite) {\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 (!infinite && !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 infinite,\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 (!infinite) {\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 (!infinite)\n translation.value = withSpring(-((maxPage - 1) * size));\n }\n }, [\n touching.value,\n translation,\n maxPage,\n size,\n scrollEndTranslation.value,\n infinite,\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 (!infinite && !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 onGestureBegin = useCallback(() => {\n \"worklet\";\n\n touching.value = true;\n validStart.value = true;\n onScrollBegin && runOnJS(onScrollBegin)();\n\n max.value = (maxPage - 1) * size;\n if (!infinite && !overscrollEnabled)\n max.value = getLimit();\n\n panOffset.value = translation.value;\n }, [\n max,\n size,\n maxPage,\n infinite,\n touching,\n panOffset,\n validStart,\n translation,\n overscrollEnabled,\n getLimit,\n onScrollBegin,\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 const panTranslation = isHorizontal.value\n ? translationX\n : translationY;\n if (!infinite) {\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 infinite,\n overscrollEnabled,\n translation,\n validStart,\n touching,\n ]);\n\n const onGestureFinish = useCallback((e: GestureStateChangeEvent<PanGestureHandlerEventPayload>) => {\n \"worklet\";\n\n const { velocityX, velocityY, translationX, translationY } = e;\n scrollEndVelocity.value = isHorizontal.value\n ? velocityX\n : velocityY;\n scrollEndTranslation.value = isHorizontal.value\n ? translationX\n : translationY;\n\n const totalTranslation = scrollEndVelocity.value + scrollEndTranslation.value;\n\n if (maxScrollDistancePerSwipeIsSet && Math.abs(totalTranslation) > maxScrollDistancePerSwipe) {\n const nextPage = Math.round((panOffset.value + maxScrollDistancePerSwipe * Math.sign(totalTranslation)) / size) * size;\n translation.value = withSpring(withProcessTranslation(nextPage), onScrollEnd);\n }\n else {\n endWithSpring(onScrollEnd);\n }\n\n if (!infinite)\n touching.value = false;\n }, [\n size,\n infinite,\n touching,\n panOffset,\n translation,\n isHorizontal,\n scrollEndVelocity,\n scrollEndTranslation,\n maxScrollDistancePerSwipeIsSet,\n maxScrollDistancePerSwipe,\n endWithSpring,\n withSpring,\n onScrollEnd,\n ]);\n\n const gesture = useMemo(() => {\n const gesture = Gesture.Pan()\n .onBegin(onGestureBegin)\n .onUpdate(onGestureUpdate)\n .onEnd(onGestureFinish);\n\n if (onConfigurePanGesture)\n onConfigurePanGesture(gesture);\n\n return gesture;\n },\n [\n onGestureBegin,\n onGestureUpdate,\n onGestureFinish,\n onConfigurePanGesture,\n ]);\n\n useUpdateGestureConfig(gesture, { enabled });\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"]}
|
|
1
|
+
{"version":3,"sources":["ScrollViewGesture.tsx"],"names":["IScrollViewGesture","props","onConfigurePanGesture","vertical","pagingEnabled","snapEnabled","loop","scrollAnimationDuration","withAnimation","enabled","dataLength","overscrollEnabled","maxScrollDistancePerSwipe","fixedDirection","React","useContext","CTX","size","translation","testID","style","onScrollBegin","onScrollEnd","onTouchBegin","onTouchEnd","maxPage","isHorizontal","max","panOffset","touching","validStart","scrollEndTranslation","scrollEndVelocity","containerRef","maxScrollDistancePerSwipeIsSet","getLimit","useCallback","width","containerWidth","withSpring","toValue","onFinished","defaultWithAnimation","type","config","duration","easing","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","onGestureBegin","_","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 onScrollBegin?: () => 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 fixedDirection,\n },\n } = React.useContext(CTX);\n\n const {\n size,\n translation,\n testID,\n style = {},\n onScrollBegin,\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\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 onGestureBegin = useCallback((_: PanGestureHandlerEventPayload) => {\n \"worklet\";\n\n touching.value = true;\n validStart.value = true;\n onScrollBegin && runOnJS(onScrollBegin)();\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 onScrollBegin,\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 if (maxScrollDistancePerSwipeIsSet && Math.abs(totalTranslation) > maxScrollDistancePerSwipe) {\n const nextPage = Math.round((panOffset.value + maxScrollDistancePerSwipe * 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 endWithSpring,\n withSpring,\n onScrollEnd,\n ]);\n\n const gesture = usePanGestureProxy({\n onConfigurePanGesture,\n onGestureBegin,\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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useLayoutConfig.ts"],"names":["useLayoutConfig","opts","size","vertical","React","useMemo","baseConfig","mode","Layouts","parallax","modeConfig","horizontalStack","verticalStack","normal"],"mappings":";;;;;;;AAAA;;
|
|
1
|
+
{"version":3,"sources":["useLayoutConfig.ts"],"names":["useLayoutConfig","opts","size","vertical","React","useMemo","baseConfig","mode","Layouts","parallax","modeConfig","horizontalStack","verticalStack","normal"],"mappings":";;;;;;;AAAA;;AAKA;;;;AAIO,SAASA,eAAT,CACLC,IADK,EAEY;AACjB,QAAM;AAAEC,IAAAA,IAAF;AAAQC,IAAAA;AAAR,MAAqBF,IAA3B;AAEA,SAAOG,eAAMC,OAAN,CAAc,MAAM;AACzB,UAAMC,UAAU,GAAG;AAAEJ,MAAAA,IAAF;AAAQC,MAAAA;AAAR,KAAnB;;AACA,YAAQF,IAAI,CAACM,IAAb;AACE,WAAK,UAAL;AACE,eAAOC,iBAAQC,QAAR,CAAiBH,UAAjB,EAA6BL,IAAI,CAACS,UAAlC,CAAP;;AACF,WAAK,kBAAL;AACE,eAAOF,iBAAQG,eAAR,CAAwBV,IAAI,CAACS,UAA7B,CAAP;;AACF,WAAK,gBAAL;AACE,eAAOF,iBAAQI,aAAR,CAAsBX,IAAI,CAACS,UAA3B,CAAP;;AACF;AACE,eAAOF,iBAAQK,MAAR,CAAeP,UAAf,CAAP;AARJ;AAUD,GAZM,EAYJ,CAACL,IAAI,CAACM,IAAN,EAAYN,IAAI,CAACS,UAAjB,EAA6BR,IAA7B,EAAmCC,QAAnC,CAZI,CAAP;AAaD","sourcesContent":["import React from \"react\";\n\nimport type { TInitializeCarouselProps } from \"./useInitProps\";\n\nimport type { TAnimationStyle } from \"../components/BaseLayout\";\nimport { Layouts } from \"../layouts\";\n\ntype TLayoutConfigOpts<T> = TInitializeCarouselProps<T> & { size: number };\n\nexport function useLayoutConfig<T>(\n opts: TLayoutConfigOpts<T>,\n): TAnimationStyle {\n const { size, vertical } = opts as Required<TLayoutConfigOpts<T>>;\n\n return React.useMemo(() => {\n const baseConfig = { size, vertical };\n switch (opts.mode) {\n case \"parallax\":\n return Layouts.parallax(baseConfig, opts.modeConfig);\n case \"horizontal-stack\":\n return Layouts.horizontalStack(opts.modeConfig);\n case \"vertical-stack\":\n return Layouts.verticalStack(opts.modeConfig);\n default:\n return Layouts.normal(baseConfig);\n }\n }, [opts.mode, opts.modeConfig, size, vertical]);\n}\n"]}
|
|
@@ -32,15 +32,18 @@ const useOffsetX = (opts, visibleRanges) => {
|
|
|
32
32
|
negativeRange,
|
|
33
33
|
positiveRange
|
|
34
34
|
} = visibleRanges.value;
|
|
35
|
-
if ((index < negativeRange[0] || index > negativeRange[1]) && (index < positiveRange[0] || index > positiveRange[1])) return Number.MAX_SAFE_INTEGER;
|
|
36
35
|
|
|
37
|
-
if (
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
if (index >= negativeRange[0] && index <= negativeRange[1] || index >= positiveRange[0] && index <= positiveRange[1]) {
|
|
37
|
+
if (loop) {
|
|
38
|
+
const inputRange = [-TOTAL_WIDTH, MIN - HALF_WIDTH - startPos - Number.MIN_VALUE, MIN - HALF_WIDTH - startPos, 0, MAX + HALF_WIDTH - startPos, MAX + HALF_WIDTH - startPos + Number.MIN_VALUE, TOTAL_WIDTH];
|
|
39
|
+
const outputRange = [startPos, MAX + HALF_WIDTH - Number.MIN_VALUE, MIN - HALF_WIDTH, startPos, MAX + HALF_WIDTH, MIN - HALF_WIDTH + Number.MIN_VALUE, startPos];
|
|
40
|
+
return (0, _reactNativeReanimated.interpolate)(handlerOffset.value, inputRange, outputRange, _reactNativeReanimated.Extrapolate.CLAMP);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return handlerOffset.value + size * index;
|
|
41
44
|
}
|
|
42
45
|
|
|
43
|
-
return
|
|
46
|
+
return Number.MAX_SAFE_INTEGER;
|
|
44
47
|
}, [loop, dataLength, viewCount, type, size, visibleRanges]);
|
|
45
48
|
return x;
|
|
46
49
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useOffsetX.ts"],"names":["useOffsetX","opts","visibleRanges","handlerOffset","index","size","loop","dataLength","type","viewCount","_viewCount","ITEM_LENGTH","VALID_LENGTH","TOTAL_WIDTH","HALF_WIDTH","Math","round","positiveCount","startPos","MAX","MIN","x","negativeRange","positiveRange","value","
|
|
1
|
+
{"version":3,"sources":["useOffsetX.ts"],"names":["useOffsetX","opts","visibleRanges","handlerOffset","index","size","loop","dataLength","type","viewCount","_viewCount","ITEM_LENGTH","VALID_LENGTH","TOTAL_WIDTH","HALF_WIDTH","Math","round","positiveCount","startPos","MAX","MIN","x","negativeRange","positiveRange","value","inputRange","Number","MIN_VALUE","outputRange","Extrapolate","CLAMP","MAX_SAFE_INTEGER"],"mappings":";;;;;;;AACA;;AAkBO,MAAMA,UAAU,GAAG,CAACC,IAAD,EAAcC,aAAd,KAAgD;AACxE,QAAM;AACJC,IAAAA,aADI;AAEJC,IAAAA,KAFI;AAGJC,IAAAA,IAHI;AAIJC,IAAAA,IAJI;AAKJC,IAAAA,UALI;AAMJC,IAAAA,IAAI,GAAG,UANH;AAOJC,IAAAA,SAAS,EAAEC;AAPP,MAQFT,IARJ;AAUA,QAAMU,WAAW,GAAGJ,UAApB;AACA,QAAMK,YAAY,GAAGD,WAAW,GAAG,CAAnC;AACA,QAAME,WAAW,GAAGR,IAAI,GAAGM,WAA3B;AACA,QAAMG,UAAU,GAAG,MAAMT,IAAzB;AAEA,QAAMI,SAAS,GAAGC,UAAH,aAAGA,UAAH,cAAGA,UAAH,GAAiBK,IAAI,CAACC,KAAL,CAAW,CAACL,WAAW,GAAG,CAAf,IAAoB,CAA/B,CAAhC;AACA,QAAMM,aAAa,GACfT,IAAI,KAAK,UAAT,GAAsBC,SAAtB,GAAkCG,YAAY,GAAGH,SADrD;AAGA,MAAIS,QAAQ,GAAGb,IAAI,GAAGD,KAAtB;AACA,MAAIA,KAAK,GAAGa,aAAZ,EACEC,QAAQ,GAAG,CAACd,KAAK,GAAGO,WAAT,IAAwBN,IAAnC;AAEF,QAAMc,GAAG,GAAGF,aAAa,GAAGZ,IAA5B;AACA,QAAMe,GAAG,GAAG,EAAE,CAACR,YAAY,GAAGK,aAAhB,IAAiCZ,IAAnC,CAAZ;AAEA,QAAMgB,CAAC,GAAG,4CAAgB,MAAM;AAC9B,UAAM;AAAEC,MAAAA,aAAF;AAAiBC,MAAAA;AAAjB,QAAmCrB,aAAa,CAACsB,KAAvD;;AAEA,QACGpB,KAAK,IAAIkB,aAAa,CAAC,CAAD,CAAtB,IAA6BlB,KAAK,IAAIkB,aAAa,CAAC,CAAD,CAApD,IACIlB,KAAK,IAAImB,aAAa,CAAC,CAAD,CAAtB,IAA6BnB,KAAK,IAAImB,aAAa,CAAC,CAAD,CAFzD,EAGE;AACA,UAAIjB,IAAJ,EAAU;AACR,cAAMmB,UAAU,GAAG,CACjB,CAACZ,WADgB,EAEjBO,GAAG,GAAGN,UAAN,GAAmBI,QAAnB,GAA8BQ,MAAM,CAACC,SAFpB,EAGjBP,GAAG,GAAGN,UAAN,GAAmBI,QAHF,EAIjB,CAJiB,EAKjBC,GAAG,GAAGL,UAAN,GAAmBI,QALF,EAMjBC,GAAG,GAAGL,UAAN,GAAmBI,QAAnB,GAA8BQ,MAAM,CAACC,SANpB,EAOjBd,WAPiB,CAAnB;AAUA,cAAMe,WAAW,GAAG,CAClBV,QADkB,EAElBC,GAAG,GAAGL,UAAN,GAAmBY,MAAM,CAACC,SAFR,EAGlBP,GAAG,GAAGN,UAHY,EAIlBI,QAJkB,EAKlBC,GAAG,GAAGL,UALY,EAMlBM,GAAG,GAAGN,UAAN,GAAmBY,MAAM,CAACC,SANR,EAOlBT,QAPkB,CAApB;AAUA,eAAO,wCACLf,aAAa,CAACqB,KADT,EAELC,UAFK,EAGLG,WAHK,EAILC,mCAAYC,KAJP,CAAP;AAMD;;AAED,aAAO3B,aAAa,CAACqB,KAAd,GAAsBnB,IAAI,GAAGD,KAApC;AACD;;AAED,WAAOsB,MAAM,CAACK,gBAAd;AACD,GAxCS,EAwCP,CAACzB,IAAD,EAAOC,UAAP,EAAmBE,SAAnB,EAA8BD,IAA9B,EAAoCH,IAApC,EAA0CH,aAA1C,CAxCO,CAAV;AA0CA,SAAOmB,CAAP;AACD,CAtEM","sourcesContent":["import type Animated from \"react-native-reanimated\";\nimport {\n Extrapolate,\n interpolate,\n useDerivedValue,\n} from \"react-native-reanimated\";\n\nimport type { IVisibleRanges } from \"./useVisibleRanges\";\n\nexport interface IOpts {\n index: number\n size: number\n handlerOffset: Animated.SharedValue<number>\n dataLength: number\n type?: \"positive\" | \"negative\"\n viewCount?: number\n loop?: boolean\n}\n\nexport const useOffsetX = (opts: IOpts, visibleRanges: IVisibleRanges) => {\n const {\n handlerOffset,\n index,\n size,\n loop,\n dataLength,\n type = \"positive\",\n viewCount: _viewCount,\n } = opts;\n\n const ITEM_LENGTH = dataLength;\n const VALID_LENGTH = ITEM_LENGTH - 1;\n const TOTAL_WIDTH = size * ITEM_LENGTH;\n const HALF_WIDTH = 0.5 * size;\n\n const viewCount = _viewCount ?? Math.round((ITEM_LENGTH - 1) / 2);\n const positiveCount\n = type === \"positive\" ? viewCount : VALID_LENGTH - viewCount;\n\n let startPos = size * index;\n if (index > positiveCount)\n startPos = (index - ITEM_LENGTH) * size;\n\n const MAX = positiveCount * size;\n const MIN = -((VALID_LENGTH - positiveCount) * size);\n\n const x = useDerivedValue(() => {\n const { negativeRange, positiveRange } = visibleRanges.value;\n\n if (\n (index >= negativeRange[0] && index <= negativeRange[1])\n || (index >= positiveRange[0] && index <= positiveRange[1])\n ) {\n if (loop) {\n const inputRange = [\n -TOTAL_WIDTH,\n MIN - HALF_WIDTH - startPos - Number.MIN_VALUE,\n MIN - HALF_WIDTH - startPos,\n 0,\n MAX + HALF_WIDTH - startPos,\n MAX + HALF_WIDTH - startPos + Number.MIN_VALUE,\n TOTAL_WIDTH,\n ];\n\n const outputRange = [\n startPos,\n MAX + HALF_WIDTH - Number.MIN_VALUE,\n MIN - HALF_WIDTH,\n startPos,\n MAX + HALF_WIDTH,\n MIN - HALF_WIDTH + Number.MIN_VALUE,\n startPos,\n ];\n\n return interpolate(\n handlerOffset.value,\n inputRange,\n outputRange,\n Extrapolate.CLAMP,\n );\n }\n\n return handlerOffset.value + size * index;\n }\n\n return Number.MAX_SAFE_INTEGER;\n }, [loop, dataLength, viewCount, type, size, visibleRanges]);\n\n return x;\n};\n"]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _reactNativeReanimated = require("react-native-reanimated");
|
|
4
|
+
|
|
5
|
+
var _reactHooks = require("@testing-library/react-hooks");
|
|
6
|
+
|
|
7
|
+
var _useOffsetX = require("./useOffsetX");
|
|
8
|
+
|
|
9
|
+
describe("useSharedValue", () => {
|
|
10
|
+
it("should return the correct values", async () => {
|
|
11
|
+
const hook = (0, _reactHooks.renderHook)(() => {
|
|
12
|
+
const range = (0, _reactNativeReanimated.useSharedValue)({
|
|
13
|
+
negativeRange: [7, 9],
|
|
14
|
+
positiveRange: [0, 3]
|
|
15
|
+
});
|
|
16
|
+
const inputs = Array.from({
|
|
17
|
+
length: 10
|
|
18
|
+
}).map((_, index) => ({
|
|
19
|
+
config: {
|
|
20
|
+
dataLength: 10,
|
|
21
|
+
handlerOffset: (0, _reactNativeReanimated.useSharedValue)(-0),
|
|
22
|
+
index,
|
|
23
|
+
loop: false,
|
|
24
|
+
size: 393
|
|
25
|
+
},
|
|
26
|
+
range
|
|
27
|
+
}));
|
|
28
|
+
return inputs.map(input => {
|
|
29
|
+
const {
|
|
30
|
+
config,
|
|
31
|
+
range
|
|
32
|
+
} = input;
|
|
33
|
+
return (0, _useOffsetX.useOffsetX)(config, range);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
const expected = hook.result.current.map(v => v.value).slice();
|
|
37
|
+
expect(expected).toMatchInlineSnapshot(`
|
|
38
|
+
[
|
|
39
|
+
0,
|
|
40
|
+
393,
|
|
41
|
+
786,
|
|
42
|
+
1179,
|
|
43
|
+
9007199254740991,
|
|
44
|
+
9007199254740991,
|
|
45
|
+
9007199254740991,
|
|
46
|
+
2751,
|
|
47
|
+
3144,
|
|
48
|
+
3537,
|
|
49
|
+
]
|
|
50
|
+
`);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=useOffsetX.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["useOffsetX.test.ts"],"names":["describe","it","hook","range","negativeRange","positiveRange","inputs","Array","from","length","map","_","index","config","dataLength","handlerOffset","loop","size","input","expected","result","current","v","value","slice","expect","toMatchInlineSnapshot"],"mappings":";;AAAA;;AAEA;;AAGA;;AAGAA,QAAQ,CAAC,gBAAD,EAAmB,MAAM;AAC/BC,EAAAA,EAAE,CAAC,kCAAD,EAAqC,YAAY;AACjD,UAAMC,IAAI,GAAG,4BAAW,MAAM;AAC5B,YAAMC,KAAK,GAAG,2CAAe;AAC3BC,QAAAA,aAAa,EAAE,CAAC,CAAD,EAAI,CAAJ,CADY;AAE3BC,QAAAA,aAAa,EAAE,CAAC,CAAD,EAAI,CAAJ;AAFY,OAAf,CAAd;AAIA,YAAMC,MAGJ,GAAGC,KAAK,CAACC,IAAN,CAAW;AAAEC,QAAAA,MAAM,EAAE;AAAV,OAAX,EAA2BC,GAA3B,CAA+B,CAACC,CAAD,EAAIC,KAAJ,MAAe;AACjDC,QAAAA,MAAM,EAAE;AACNC,UAAAA,UAAU,EAAE,EADN;AAENC,UAAAA,aAAa,EAAE,2CAAe,CAAC,CAAhB,CAFT;AAGNH,UAAAA,KAHM;AAINI,UAAAA,IAAI,EAAE,KAJA;AAKNC,UAAAA,IAAI,EAAE;AALA,SADyC;AAQjDd,QAAAA;AARiD,OAAf,CAA/B,CAHL;AAcA,aAAOG,MAAM,CAACI,GAAP,CAAYQ,KAAD,IAAW;AAC3B,cAAM;AAAEL,UAAAA,MAAF;AAAUV,UAAAA;AAAV,YAAoBe,KAA1B;AAEA,eAAO,4BAAWL,MAAX,EAAmBV,KAAnB,CAAP;AACD,OAJM,CAAP;AAKD,KAxBY,CAAb;AA0BA,UAAMgB,QAAQ,GAAGjB,IAAI,CAACkB,MAAL,CAAYC,OAAZ,CAAoBX,GAApB,CAAwBY,CAAC,IAAIA,CAAC,CAACC,KAA/B,EAAsCC,KAAtC,EAAjB;AAEAC,IAAAA,MAAM,CAACN,QAAD,CAAN,CAAiBO,qBAAjB,CAAwC;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAbI;AAcD,GA3CC,CAAF;AA4CD,CA7CO,CAAR","sourcesContent":["import { useSharedValue } from \"react-native-reanimated\";\n\nimport { renderHook } from \"@testing-library/react-hooks\";\n\nimport type { IOpts } from \"./useOffsetX\";\nimport { useOffsetX } from \"./useOffsetX\";\nimport type { IVisibleRanges } from \"./useVisibleRanges\";\n\ndescribe(\"useSharedValue\", () => {\n it(\"should return the correct values\", async () => {\n const hook = renderHook(() => {\n const range = useSharedValue({\n negativeRange: [7, 9],\n positiveRange: [0, 3],\n });\n const inputs: Array<{\n config: IOpts\n range: IVisibleRanges\n }> = Array.from({ length: 10 }).map((_, index) => ({\n config: {\n dataLength: 10,\n handlerOffset: useSharedValue(-0),\n index,\n loop: false,\n size: 393,\n },\n range,\n }));\n\n return inputs.map((input) => {\n const { config, range } = input;\n\n return useOffsetX(config, range);\n });\n });\n\n const expected = hook.result.current.map(v => v.value).slice();\n\n expect(expected).toMatchInlineSnapshot(`\n [\n 0,\n 393,\n 786,\n 1179,\n 9007199254740991,\n 9007199254740991,\n 9007199254740991,\n 2751,\n 3144,\n 3537,\n ]\n `);\n });\n});\n"]}
|