react-native-reanimated-carousel 4.0.0-alpha.1 → 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 +2 -3
- package/lib/commonjs/{layouts → components}/BaseLayout.js +5 -21
- package/lib/commonjs/components/BaseLayout.js.map +1 -0
- package/lib/commonjs/components/Carousel.js +25 -46
- package/lib/commonjs/components/Carousel.js.map +1 -1
- package/lib/commonjs/components/ItemRenderer.js +80 -0
- package/lib/commonjs/components/ItemRenderer.js.map +1 -0
- package/lib/commonjs/components/ScrollViewGesture.js +51 -33
- package/lib/commonjs/components/ScrollViewGesture.js.map +1 -1
- package/lib/commonjs/components/rnr-demo.test.js +45 -0
- package/lib/commonjs/components/rnr-demo.test.js.map +1 -0
- package/lib/commonjs/hooks/useCarouselController.js +12 -11
- package/lib/commonjs/hooks/useCarouselController.js.map +1 -1
- package/lib/commonjs/hooks/useCommonVariables.js +38 -12
- 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/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 +48 -19
- 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.map +1 -1
- package/lib/commonjs/utils/{computeNewIndexWhenDataChanges.js → compute-offset-if-data-changed.js} +3 -3
- 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/handleroffset-direction.js +5 -5
- package/lib/commonjs/utils/handleroffset-direction.js.map +1 -1
- 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 +6 -6
- package/lib/commonjs/utils/index.test.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/components/Carousel.js +24 -42
- package/lib/module/components/Carousel.js.map +1 -1
- package/lib/module/components/ItemRenderer.js +62 -0
- package/lib/module/components/ItemRenderer.js.map +1 -0
- package/lib/module/components/ScrollViewGesture.js +53 -34
- package/lib/module/components/ScrollViewGesture.js.map +1 -1
- 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 +12 -11
- package/lib/module/hooks/useCarouselController.js.map +1 -1
- package/lib/module/hooks/useCommonVariables.js +38 -8
- 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/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 +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.map +1 -1
- package/lib/module/utils/{computeNewIndexWhenDataChanges.js → 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/handleroffset-direction.js +5 -5
- package/lib/module/utils/handleroffset-direction.js.map +1 -1
- package/lib/module/utils/handleroffset-direction.test.js +41 -0
- package/lib/module/utils/handleroffset-direction.test.js.map +1 -0
- package/lib/module/utils/index.test.js +6 -6
- package/lib/module/utils/index.test.js.map +1 -1
- package/lib/typescript/components/ItemRenderer.d.ts +22 -0
- package/lib/typescript/components/ScrollViewGesture.d.ts +1 -1
- package/lib/typescript/components/rnr-demo.test.d.ts +1 -0
- 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 +3 -2
- 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 +1 -0
- package/lib/typescript/types.d.ts +13 -4
- package/lib/typescript/utils/{computeNewIndexWhenDataChanges.d.ts → 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 +2 -1
- package/lib/typescript/utils/handleroffset-direction.test.d.ts +1 -0
- package/package.json +16 -59
- package/src/{layouts → components}/BaseLayout.tsx +7 -35
- package/src/components/Carousel.tsx +24 -58
- package/src/components/ItemRenderer.tsx +105 -0
- package/src/components/ScrollViewGesture.tsx +74 -49
- package/src/components/rnr-demo.test.tsx +43 -0
- package/src/hooks/useCarouselController.tsx +24 -21
- package/src/hooks/useCommonVariables.test.tsx +41 -0
- package/src/hooks/useCommonVariables.ts +35 -10
- 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 +376 -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 +72 -24
- package/src/index.tsx +2 -0
- package/src/types.ts +13 -4
- package/src/utils/compute-offset-if-data-changed.test.ts +30 -0
- package/src/utils/{computeNewIndexWhenDataChanges.ts → 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 +12 -9
- package/src/utils/index.test.ts +6 -6
- 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/commonjs/utils/computeNewIndexWhenDataChanges.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/computeNewIndexWhenDataChanges.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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["rnr-demo.test.tsx"],"names":["React","Animated","useAnimatedStyle","useDerivedValue","renderer","describe","it","initialValue","updatedValue","TestComponent","props","opacity","value","animatedStyle","wrapper","create","expect","root","children","style","current","toBe","update"],"mappings":"AACA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,QAAP,IAAmBC,gBAAnB,EAAqCC,eAArC,QAA4D,yBAA5D;AACA,OAAOC,QAAP,MAAqB,qBAArB;AAEAC,QAAQ,CAAC,gBAAD,EAAmB,MAAM;AAC/BC,EAAAA,EAAE,CAAC,2BAAD,EAA8B,MAAM;AACpC,UAAMC,YAAY,GAAG,CAArB;AACA,UAAMC,YAAY,GAAG,CAArB;;AAOA,UAAMC,aAAwB,GAAIC,KAAD,IAAW;AAC1C,YAAMC,OAAO,GAAGR,eAAe,CAAC,MAAMO,KAAK,CAACE,KAAb,EAAoB,CAACF,KAAK,CAACE,KAAP,CAApB,CAA/B;AACA,YAAMC,aAAa,GAAGX,gBAAgB,CAAC,OAAO;AAC5CS,QAAAA,OAAO,EAAEA,OAAO,CAACC;AAD2B,OAAP,CAAD,EAElC,CAACD,OAAD,CAFkC,CAAtC;AAIA,0BAAO,oBAAC,QAAD,CAAU,IAAV;AAAe,QAAA,KAAK,EAAEE;AAAtB,QAAP;AACD,KAPD,CAToC,CAkBpC;;;AACA,UAAMC,OAAO,GAAGV,QAAQ,CAACW,MAAT,eAAgB,oBAAC,aAAD;AAAe,MAAA,GAAG,EAAC,KAAnB;AAAyB,MAAA,KAAK,EAAER;AAAhC,MAAhB,CAAhB;AAEAS,IAAAA,MAAM,CACJ,OAAOF,OAAO,CAACG,IAAR,CAAaC,QAAb,CAAsB,CAAtB,CAAP,KAAoC,QAApC,GACIJ,OAAO,CAACG,IAAR,CAAaC,QAAb,CAAsB,CAAtB,EAAyBR,KAAzB,CAA+BS,KAA/B,CAAqCN,aAArC,CAAmDO,OAAnD,CAA2DR,KAA3D,CAAiED,OADrE,GAEI,KAHA,CAAN,CAIEU,IAJF,CAIOd,YAJP,EArBoC,CA2BpC;;AACAO,IAAAA,OAAO,CAACQ,MAAR,eAAe,oBAAC,aAAD;AAAe,MAAA,GAAG,EAAC,KAAnB;AAAyB,MAAA,KAAK,EAAEd;AAAhC,MAAf;AAEAQ,IAAAA,MAAM,CACJ,OAAOF,OAAO,CAACG,IAAR,CAAaC,QAAb,CAAsB,CAAtB,CAAP,KAAoC,QAApC,GACIJ,OAAO,CAACG,IAAR,CAAaC,QAAb,CAAsB,CAAtB,EAAyBR,KAAzB,CAA+BS,KAA/B,CAAqCN,aAArC,CAAmDO,OAAnD,CAA2DR,KAA3D,CAAiED,OADrE,GAEI,KAHA,CAAN,CAIEU,IAJF,CAIOd,YAJP;AAKD,GAnCC,CAAF;AAoCD,CArCO,CAAR","sourcesContent":["import type { FC } from \"react\";\nimport React from \"react\";\nimport Animated, { useAnimatedStyle, useDerivedValue } from \"react-native-reanimated\";\nimport renderer from \"react-test-renderer\";\n\ndescribe(\"useSharedValue\", () => {\n it(\"retains value on rerender\", () => {\n const initialValue = 0;\n const updatedValue = 1;\n\n interface Props {\n key: string\n value: number\n }\n\n const TestComponent: FC<Props> = (props) => {\n const opacity = useDerivedValue(() => props.value, [props.value]);\n const animatedStyle = useAnimatedStyle(() => ({\n opacity: opacity.value,\n }), [opacity]);\n\n return <Animated.View style={animatedStyle} />;\n };\n\n // When rendering with initial value\n const wrapper = renderer.create(<TestComponent key=\"box\" value={initialValue} />);\n\n expect(\n typeof wrapper.root.children[0] !== \"string\"\n ? wrapper.root.children[0].props.style.animatedStyle.current.value.opacity\n : false,\n ).toBe(initialValue);\n\n // When rendering with updated value\n wrapper.update(<TestComponent key=\"box\" value={updatedValue} />);\n\n expect(\n typeof wrapper.root.children[0] !== \"string\"\n ? wrapper.root.children[0].props.style.animatedStyle.current.value.opacity\n : false,\n ).toBe(initialValue);\n });\n});\n"]}
|
|
@@ -14,7 +14,8 @@ export function useCarouselController(options) {
|
|
|
14
14
|
withAnimation,
|
|
15
15
|
defaultIndex = 0,
|
|
16
16
|
duration,
|
|
17
|
-
autoFillData
|
|
17
|
+
autoFillData,
|
|
18
|
+
fixedDirection
|
|
18
19
|
} = options;
|
|
19
20
|
const dataInfo = React.useMemo(() => ({
|
|
20
21
|
length: dataLength,
|
|
@@ -75,10 +76,10 @@ export function useCarouselController(options) {
|
|
|
75
76
|
|
|
76
77
|
(_options$onScrollEnd = options.onScrollEnd) === null || _options$onScrollEnd === void 0 ? void 0 : _options$onScrollEnd.call(options);
|
|
77
78
|
}, [options]);
|
|
78
|
-
const
|
|
79
|
-
var _options$
|
|
79
|
+
const onScrollStart = React.useCallback(() => {
|
|
80
|
+
var _options$onScrollStar;
|
|
80
81
|
|
|
81
|
-
(_options$
|
|
82
|
+
(_options$onScrollStar = options.onScrollStart) === null || _options$onScrollStar === void 0 ? void 0 : _options$onScrollStar.call(options);
|
|
82
83
|
}, [options]);
|
|
83
84
|
const scrollWithTiming = React.useCallback((toValue, onFinished) => {
|
|
84
85
|
"worklet";
|
|
@@ -111,7 +112,7 @@ export function useCarouselController(options) {
|
|
|
111
112
|
onFinished
|
|
112
113
|
} = opts;
|
|
113
114
|
if (!canSliding() || !loop && index.value >= dataInfo.length - 1) return;
|
|
114
|
-
|
|
115
|
+
onScrollStart === null || onScrollStart === void 0 ? void 0 : onScrollStart();
|
|
115
116
|
const nextPage = currentFixedPage() + count;
|
|
116
117
|
index.value = nextPage;
|
|
117
118
|
|
|
@@ -121,7 +122,7 @@ export function useCarouselController(options) {
|
|
|
121
122
|
handlerOffset.value = -nextPage * size;
|
|
122
123
|
onFinished === null || onFinished === void 0 ? void 0 : onFinished();
|
|
123
124
|
}
|
|
124
|
-
}, [canSliding, loop, index, dataInfo,
|
|
125
|
+
}, [canSliding, loop, index, dataInfo, onScrollStart, handlerOffset, size, scrollWithTiming, currentFixedPage]);
|
|
125
126
|
const prev = React.useCallback(function () {
|
|
126
127
|
let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
127
128
|
const {
|
|
@@ -130,7 +131,7 @@ export function useCarouselController(options) {
|
|
|
130
131
|
onFinished
|
|
131
132
|
} = opts;
|
|
132
133
|
if (!canSliding() || !loop && index.value <= 0) return;
|
|
133
|
-
|
|
134
|
+
onScrollStart === null || onScrollStart === void 0 ? void 0 : onScrollStart();
|
|
134
135
|
const prevPage = currentFixedPage() - count;
|
|
135
136
|
index.value = prevPage;
|
|
136
137
|
|
|
@@ -140,7 +141,7 @@ export function useCarouselController(options) {
|
|
|
140
141
|
handlerOffset.value = -prevPage * size;
|
|
141
142
|
onFinished === null || onFinished === void 0 ? void 0 : onFinished();
|
|
142
143
|
}
|
|
143
|
-
}, [canSliding, loop, index,
|
|
144
|
+
}, [canSliding, loop, index, onScrollStart, handlerOffset, size, scrollWithTiming, currentFixedPage]);
|
|
144
145
|
const to = React.useCallback(opts => {
|
|
145
146
|
const {
|
|
146
147
|
i,
|
|
@@ -149,9 +150,9 @@ export function useCarouselController(options) {
|
|
|
149
150
|
} = opts;
|
|
150
151
|
if (i === index.value) return;
|
|
151
152
|
if (!canSliding()) return;
|
|
152
|
-
|
|
153
|
+
onScrollStart === null || onScrollStart === void 0 ? void 0 : onScrollStart(); // direction -> 1 | -1
|
|
153
154
|
|
|
154
|
-
const direction = handlerOffsetDirection(handlerOffset); // target offset
|
|
155
|
+
const direction = handlerOffsetDirection(handlerOffset, fixedDirection); // target offset
|
|
155
156
|
|
|
156
157
|
const offset = i * size * direction; // page width size * page count
|
|
157
158
|
|
|
@@ -172,7 +173,7 @@ export function useCarouselController(options) {
|
|
|
172
173
|
index.value = i;
|
|
173
174
|
onFinished === null || onFinished === void 0 ? void 0 : onFinished();
|
|
174
175
|
}
|
|
175
|
-
}, [
|
|
176
|
+
}, [size, loop, index, fixedDirection, handlerOffset, dataInfo.length, canSliding, onScrollStart, scrollWithTiming]);
|
|
176
177
|
const scrollTo = React.useCallback(function () {
|
|
177
178
|
let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
178
179
|
const {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useCarouselController.tsx"],"names":["React","useRef","runOnJS","useAnimatedReaction","useSharedValue","Easing","computedRealIndexWithAutoFillData","convertToSharedIndex","dealWithAnimation","handlerOffsetDirection","round","useCarouselController","options","size","loop","dataLength","handlerOffset","withAnimation","defaultIndex","duration","autoFillData","dataInfo","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","value","fixed","abs","setSharedIndex","newSharedIndex","current","handlerOffsetValue","toInt","isPositive","i","newSharedIndexValue","rawDataLength","getCurrentIndex","realIndex","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","easeOutQuart","next","opts","count","animated","nextPage","prev","prevPage","to","direction","offset","totalSize","isCloseToNextLoop","finalOffset","floor","scrollTo","n","getSharedIndex"],"mappings":"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","sourcesContent":["import React, { useRef } from \"react\";\nimport type Animated from \"react-native-reanimated\";\nimport {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from \"react-native-reanimated\";\n\nimport { Easing } from \"../constants\";\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from \"../types\";\nimport { computedRealIndexWithAutoFillData, convertToSharedIndex } from \"../utils/computed-with-auto-fill-data\";\nimport { dealWithAnimation } from \"../utils/deal-with-animation\";\nimport { handlerOffsetDirection } from \"../utils/handleroffset-direction\";\nimport { round } from \"../utils/log\";\n\ninterface IOpts {\n loop: boolean\n size: number\n dataLength: number\n autoFillData: TCarouselProps[\"autoFillData\"]\n handlerOffset: Animated.SharedValue<number>\n withAnimation?: TCarouselProps[\"withAnimation\"]\n duration?: number\n defaultIndex?: number\n onScrollBegin?: () => void\n onScrollEnd?: () => void\n}\n\nexport interface ICarouselController {\n getSharedIndex: () => number\n prev: (opts?: TCarouselActionOptions) => void\n next: (opts?: TCarouselActionOptions) => void\n getCurrentIndex: () => number\n scrollTo: (opts?: TCarouselActionOptions) => void\n}\n\nexport function useCarouselController(options: IOpts): ICarouselController {\n const {\n size,\n loop,\n dataLength,\n handlerOffset,\n withAnimation,\n defaultIndex = 0,\n duration,\n autoFillData,\n } = options;\n\n const dataInfo = React.useMemo(\n () => ({\n length: dataLength,\n disable: !dataLength,\n originalLength: dataLength,\n }),\n [dataLength],\n );\n\n const index = useSharedValue<number>(defaultIndex);\n // The Index displayed to the user\n const sharedIndex = useRef<number>(defaultIndex);\n const sharedPreIndex = useRef<number>(defaultIndex);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop)\n return -Math.round(handlerOffset.value / size);\n\n const fixed = (handlerOffset.value / size) % dataInfo.length;\n return Math.round(\n handlerOffset.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0),\n );\n }, [handlerOffset, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetValue = handlerOffset.value;\n const toInt = round(handlerOffsetValue / size) % dataInfo.length;\n const isPositive = handlerOffsetValue <= 0;\n const i = isPositive\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);\n\n const newSharedIndexValue = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n\n return {\n i,\n newSharedIndexValue,\n };\n },\n ({ i, newSharedIndexValue }) => {\n index.value = i;\n runOnJS(setSharedIndex)(newSharedIndexValue);\n },\n [\n sharedPreIndex,\n sharedIndex,\n size,\n dataInfo,\n index,\n loop,\n autoFillData,\n handlerOffset,\n ],\n );\n\n const getCurrentIndex = React.useCallback(() => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: index.value,\n dataLength: dataInfo.originalLength,\n loop,\n autoFillData: autoFillData!,\n });\n\n return realIndex;\n }, [index, autoFillData, dataInfo, loop]);\n\n const canSliding = React.useCallback(() => {\n return !dataInfo.disable;\n }, [dataInfo]);\n\n const onScrollEnd = React.useCallback(() => {\n options.onScrollEnd?.();\n }, [options]);\n\n const onScrollBegin = React.useCallback(() => {\n options.onScrollBegin?.();\n }, [options]);\n\n const scrollWithTiming = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n \"worklet\";\n const callback = (isFinished: boolean) => {\n \"worklet\";\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n };\n\n const defaultWithAnimation: WithTimingAnimation = {\n type: \"timing\",\n config: { duration, easing: Easing.easeOutQuart },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n callback,\n );\n },\n [duration, withAnimation, onScrollEnd],\n );\n\n const next = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n \"worklet\";\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value >= dataInfo.length - 1))\n return;\n\n onScrollBegin?.();\n\n const nextPage = currentFixedPage() + count;\n index.value = nextPage;\n\n if (animated) {\n handlerOffset.value = scrollWithTiming(\n -nextPage * size,\n onFinished,\n ) as any;\n }\n else {\n handlerOffset.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollBegin,\n handlerOffset,\n size,\n scrollWithTiming,\n currentFixedPage,\n ],\n );\n\n const prev = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value <= 0)) return;\n\n onScrollBegin?.();\n\n const prevPage = currentFixedPage() - count;\n index.value = prevPage;\n\n if (animated) {\n handlerOffset.value = scrollWithTiming(\n -prevPage * size,\n onFinished,\n );\n }\n else {\n handlerOffset.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffset,\n size,\n scrollWithTiming,\n currentFixedPage,\n ],\n );\n\n const to = React.useCallback(\n (opts: { i: number; animated: boolean; onFinished?: () => void }) => {\n const { i, animated = false, onFinished } = opts;\n if (i === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n // direction -> 1 | -1\n const direction = handlerOffsetDirection(handlerOffset);\n\n // target offset\n const offset = i * size * direction;\n // page width size * page count\n const totalSize = dataInfo.length * size;\n\n let isCloseToNextLoop = false;\n\n if (loop) {\n isCloseToNextLoop\n = Math.abs(handlerOffset.value % totalSize) / totalSize\n >= 0.5;\n }\n\n const finalOffset\n = (Math.floor(Math.abs(handlerOffset.value / totalSize))\n + (isCloseToNextLoop ? 1 : 0))\n * totalSize\n * direction\n + offset;\n\n if (animated) {\n index.value = i;\n handlerOffset.value = scrollWithTiming(finalOffset, onFinished);\n }\n else {\n handlerOffset.value = finalOffset;\n index.value = i;\n onFinished?.();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffset,\n size,\n dataInfo.length,\n loop,\n scrollWithTiming,\n ],\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { index: i, count, animated = false, onFinished } = opts;\n if (typeof i === \"number\" && i > -1) {\n to({ i, animated, onFinished });\n return;\n }\n\n if (!count)\n return;\n\n const n = Math.round(count);\n\n if (n < 0)\n prev({ count: Math.abs(n), animated, onFinished });\n\n else\n next({ count: n, animated, onFinished });\n },\n [prev, next, to],\n );\n\n return {\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n getSharedIndex: () => sharedIndex.current,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["useCarouselController.tsx"],"names":["React","useRef","runOnJS","useAnimatedReaction","useSharedValue","Easing","computedRealIndexWithAutoFillData","convertToSharedIndex","dealWithAnimation","handlerOffsetDirection","round","useCarouselController","options","size","loop","dataLength","handlerOffset","withAnimation","defaultIndex","duration","autoFillData","fixedDirection","dataInfo","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","value","fixed","abs","setSharedIndex","newSharedIndex","current","handlerOffsetValue","toInt","isPositive","i","newSharedIndexValue","rawDataLength","getCurrentIndex","realIndex","canSliding","onScrollEnd","onScrollStart","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","easeOutQuart","next","opts","count","animated","nextPage","prev","prevPage","to","direction","offset","totalSize","isCloseToNextLoop","finalOffset","floor","scrollTo","n","getSharedIndex"],"mappings":"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","sourcesContent":["import React, { useRef } from \"react\";\nimport type Animated from \"react-native-reanimated\";\nimport {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from \"react-native-reanimated\";\n\nimport { Easing } from \"../constants\";\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from \"../types\";\nimport { computedRealIndexWithAutoFillData, convertToSharedIndex } from \"../utils/computed-with-auto-fill-data\";\nimport { dealWithAnimation } from \"../utils/deal-with-animation\";\nimport { handlerOffsetDirection } from \"../utils/handleroffset-direction\";\nimport { round } from \"../utils/log\";\n\ninterface IOpts {\n loop: boolean\n size: number\n dataLength: number\n handlerOffset: Animated.SharedValue<number>\n autoFillData: TCarouselProps[\"autoFillData\"]\n withAnimation?: TCarouselProps[\"withAnimation\"]\n fixedDirection?: TCarouselProps[\"fixedDirection\"]\n duration?: number\n defaultIndex?: number\n onScrollStart?: () => void\n onScrollEnd?: () => void\n}\n\nexport interface ICarouselController {\n getSharedIndex: () => number\n prev: (opts?: TCarouselActionOptions) => void\n next: (opts?: TCarouselActionOptions) => void\n getCurrentIndex: () => number\n scrollTo: (opts?: TCarouselActionOptions) => void\n}\n\nexport function useCarouselController(options: IOpts): ICarouselController {\n const {\n size,\n loop,\n dataLength,\n handlerOffset,\n withAnimation,\n defaultIndex = 0,\n duration,\n autoFillData,\n fixedDirection,\n } = options;\n\n const dataInfo = React.useMemo(\n () => ({\n length: dataLength,\n disable: !dataLength,\n originalLength: dataLength,\n }),\n [dataLength],\n );\n\n const index = useSharedValue<number>(defaultIndex);\n // The Index displayed to the user\n const sharedIndex = useRef<number>(defaultIndex);\n const sharedPreIndex = useRef<number>(defaultIndex);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop)\n return -Math.round(handlerOffset.value / size);\n\n const fixed = (handlerOffset.value / size) % dataInfo.length;\n return Math.round(\n handlerOffset.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0),\n );\n }, [handlerOffset, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetValue = handlerOffset.value;\n const toInt = round(handlerOffsetValue / size) % dataInfo.length;\n const isPositive = handlerOffsetValue <= 0;\n const i = isPositive\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);\n\n const newSharedIndexValue = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n\n return {\n i,\n newSharedIndexValue,\n };\n },\n ({ i, newSharedIndexValue }) => {\n index.value = i;\n runOnJS(setSharedIndex)(newSharedIndexValue);\n },\n [\n sharedPreIndex,\n sharedIndex,\n size,\n dataInfo,\n index,\n loop,\n autoFillData,\n handlerOffset,\n ],\n );\n\n const getCurrentIndex = React.useCallback(() => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: index.value,\n dataLength: dataInfo.originalLength,\n loop,\n autoFillData: autoFillData!,\n });\n\n return realIndex;\n }, [index, autoFillData, dataInfo, loop]);\n\n const canSliding = React.useCallback(() => {\n return !dataInfo.disable;\n }, [dataInfo]);\n\n const onScrollEnd = React.useCallback(() => {\n options.onScrollEnd?.();\n }, [options]);\n\n const onScrollStart = React.useCallback(() => {\n options.onScrollStart?.();\n }, [options]);\n\n const scrollWithTiming = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n \"worklet\";\n const callback = (isFinished: boolean) => {\n \"worklet\";\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n };\n\n const defaultWithAnimation: WithTimingAnimation = {\n type: \"timing\",\n config: { duration, easing: Easing.easeOutQuart },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n callback,\n );\n },\n [duration, withAnimation, onScrollEnd],\n );\n\n const next = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n \"worklet\";\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value >= dataInfo.length - 1))\n return;\n\n onScrollStart?.();\n\n const nextPage = currentFixedPage() + count;\n index.value = nextPage;\n\n if (animated) {\n handlerOffset.value = scrollWithTiming(\n -nextPage * size,\n onFinished,\n ) as any;\n }\n else {\n handlerOffset.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollStart,\n handlerOffset,\n size,\n scrollWithTiming,\n currentFixedPage,\n ],\n );\n\n const prev = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value <= 0)) return;\n\n onScrollStart?.();\n\n const prevPage = currentFixedPage() - count;\n index.value = prevPage;\n\n if (animated) {\n handlerOffset.value = scrollWithTiming(\n -prevPage * size,\n onFinished,\n );\n }\n else {\n handlerOffset.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollStart,\n handlerOffset,\n size,\n scrollWithTiming,\n currentFixedPage,\n ],\n );\n\n const to = React.useCallback(\n (opts: { i: number; animated: boolean; onFinished?: () => void }) => {\n const { i, animated = false, onFinished } = opts;\n if (i === index.value) return;\n if (!canSliding()) return;\n\n onScrollStart?.();\n // direction -> 1 | -1\n const direction = handlerOffsetDirection(handlerOffset, fixedDirection);\n\n // target offset\n const offset = i * size * direction;\n // page width size * page count\n const totalSize = dataInfo.length * size;\n\n let isCloseToNextLoop = false;\n\n if (loop) {\n isCloseToNextLoop\n = Math.abs(handlerOffset.value % totalSize) / totalSize\n >= 0.5;\n }\n\n const finalOffset\n = (Math.floor(Math.abs(handlerOffset.value / totalSize))\n + (isCloseToNextLoop ? 1 : 0))\n * totalSize\n * direction\n + offset;\n\n if (animated) {\n index.value = i;\n handlerOffset.value = scrollWithTiming(finalOffset, onFinished);\n }\n else {\n handlerOffset.value = finalOffset;\n index.value = i;\n onFinished?.();\n }\n },\n [\n size,\n loop,\n index,\n fixedDirection,\n handlerOffset,\n dataInfo.length,\n canSliding,\n onScrollStart,\n scrollWithTiming,\n ],\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { index: i, count, animated = false, onFinished } = opts;\n if (typeof i === \"number\" && i > -1) {\n to({ i, animated, onFinished });\n return;\n }\n\n if (!count)\n return;\n\n const n = Math.round(count);\n\n if (n < 0)\n prev({ count: Math.abs(n), animated, onFinished });\n\n else\n next({ count: n, animated, onFinished });\n },\n [prev, next, to],\n );\n\n return {\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n getSharedIndex: () => sharedIndex.current,\n };\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import React from "react";
|
|
2
1
|
import { useSharedValue, useAnimatedReaction } from "react-native-reanimated";
|
|
3
|
-
import {
|
|
2
|
+
import { computeOffsetIfDataChanged } from "../utils/compute-offset-if-data-changed";
|
|
3
|
+
import { computeOffsetIfSizeChanged } from "../utils/compute-offset-if-size-changed";
|
|
4
4
|
import { handlerOffsetDirection } from "../utils/handleroffset-direction";
|
|
5
5
|
export function useCommonVariables(props) {
|
|
6
6
|
const {
|
|
@@ -13,16 +13,17 @@ export function useCommonVariables(props) {
|
|
|
13
13
|
loop
|
|
14
14
|
} = props;
|
|
15
15
|
const size = vertical ? height : width;
|
|
16
|
-
const validLength = dataLength - 1;
|
|
17
16
|
const defaultHandlerOffsetValue = -Math.abs(defaultIndex * size);
|
|
18
17
|
|
|
19
18
|
const _handlerOffset = useSharedValue(defaultHandlerOffsetValue);
|
|
20
19
|
|
|
21
20
|
const handlerOffset = defaultScrollOffsetValue !== null && defaultScrollOffsetValue !== void 0 ? defaultScrollOffsetValue : _handlerOffset;
|
|
22
21
|
const prevDataLength = useSharedValue(dataLength);
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
const prevSize = useSharedValue(size);
|
|
23
|
+
/**
|
|
24
|
+
* When data changes, we need to compute new index for handlerOffset
|
|
25
|
+
*/
|
|
26
|
+
|
|
26
27
|
useAnimatedReaction(() => {
|
|
27
28
|
const previousLength = prevDataLength.value;
|
|
28
29
|
const currentLength = dataLength;
|
|
@@ -44,7 +45,7 @@ export function useCommonVariables(props) {
|
|
|
44
45
|
if (shouldComputed) {
|
|
45
46
|
// direction -> 1 | -1
|
|
46
47
|
const direction = handlerOffsetDirection(handlerOffset);
|
|
47
|
-
handlerOffset.value =
|
|
48
|
+
handlerOffset.value = computeOffsetIfDataChanged({
|
|
48
49
|
direction,
|
|
49
50
|
previousLength,
|
|
50
51
|
currentLength,
|
|
@@ -53,9 +54,38 @@ export function useCommonVariables(props) {
|
|
|
53
54
|
});
|
|
54
55
|
}
|
|
55
56
|
}, [dataLength, loop]);
|
|
57
|
+
/**
|
|
58
|
+
* When size changes, we need to compute new index for handlerOffset
|
|
59
|
+
*/
|
|
60
|
+
|
|
61
|
+
useAnimatedReaction(() => {
|
|
62
|
+
const previousSize = prevSize.value;
|
|
63
|
+
const isSizeChanged = previousSize !== size;
|
|
64
|
+
const shouldComputed = isSizeChanged;
|
|
65
|
+
if (shouldComputed) prevSize.value = size;
|
|
66
|
+
return {
|
|
67
|
+
shouldComputed,
|
|
68
|
+
previousSize,
|
|
69
|
+
size
|
|
70
|
+
};
|
|
71
|
+
}, _ref2 => {
|
|
72
|
+
let {
|
|
73
|
+
shouldComputed,
|
|
74
|
+
previousSize,
|
|
75
|
+
size
|
|
76
|
+
} = _ref2;
|
|
77
|
+
|
|
78
|
+
if (shouldComputed) {
|
|
79
|
+
handlerOffset.value = computeOffsetIfSizeChanged({
|
|
80
|
+
handlerOffset: handlerOffset.value,
|
|
81
|
+
prevSize: previousSize,
|
|
82
|
+
size
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}, [size]);
|
|
56
86
|
return {
|
|
57
87
|
size,
|
|
58
|
-
validLength,
|
|
88
|
+
validLength: dataLength - 1,
|
|
59
89
|
handlerOffset
|
|
60
90
|
};
|
|
61
91
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useCommonVariables.ts"],"names":["
|
|
1
|
+
{"version":3,"sources":["useCommonVariables.ts"],"names":["useSharedValue","useAnimatedReaction","computeOffsetIfDataChanged","computeOffsetIfSizeChanged","handlerOffsetDirection","useCommonVariables","props","vertical","height","width","dataLength","defaultIndex","defaultScrollOffsetValue","loop","size","defaultHandlerOffsetValue","Math","abs","_handlerOffset","handlerOffset","prevDataLength","prevSize","previousLength","value","currentLength","isLengthChanged","shouldComputed","direction","previousSize","isSizeChanged","validLength"],"mappings":"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","sourcesContent":["import type Animated from \"react-native-reanimated\";\nimport { useSharedValue, useAnimatedReaction } from \"react-native-reanimated\";\n\nimport type { TInitializeCarouselProps } from \"./useInitProps\";\n\nimport { computeOffsetIfDataChanged } from \"../utils/compute-offset-if-data-changed\";\nimport { computeOffsetIfSizeChanged } from \"../utils/compute-offset-if-size-changed\";\nimport { handlerOffsetDirection } from \"../utils/handleroffset-direction\";\n\ninterface ICommonVariables {\n size: number\n validLength: number\n handlerOffset: Animated.SharedValue<number>\n}\n\nexport function useCommonVariables(\n props: TInitializeCarouselProps<any>,\n): ICommonVariables {\n const {\n vertical,\n height,\n width,\n dataLength,\n defaultIndex,\n defaultScrollOffsetValue,\n loop,\n } = props;\n const size = vertical ? height : width;\n const defaultHandlerOffsetValue = -Math.abs(defaultIndex * size);\n const _handlerOffset = useSharedValue<number>(defaultHandlerOffsetValue);\n const handlerOffset = defaultScrollOffsetValue ?? _handlerOffset;\n const prevDataLength = useSharedValue(dataLength);\n const prevSize = useSharedValue(size);\n\n /**\n * When data changes, we need to compute new index for handlerOffset\n */\n useAnimatedReaction(() => {\n const previousLength = prevDataLength.value;\n const currentLength = dataLength;\n const isLengthChanged = previousLength !== currentLength;\n const shouldComputed = (isLengthChanged && loop);\n\n if (shouldComputed)\n prevDataLength.value = dataLength;\n\n return {\n shouldComputed,\n previousLength,\n currentLength,\n };\n }, ({ shouldComputed, previousLength, currentLength }) => {\n if (shouldComputed) {\n // direction -> 1 | -1\n const direction = handlerOffsetDirection(handlerOffset);\n\n handlerOffset.value = computeOffsetIfDataChanged({\n direction,\n previousLength,\n currentLength,\n size,\n handlerOffset: handlerOffset.value,\n });\n }\n }, [dataLength, loop]);\n\n /**\n * When size changes, we need to compute new index for handlerOffset\n */\n useAnimatedReaction(() => {\n const previousSize = prevSize.value;\n const isSizeChanged = previousSize !== size;\n const shouldComputed = isSizeChanged;\n\n if (shouldComputed)\n prevSize.value = size;\n\n return {\n shouldComputed,\n previousSize,\n size,\n };\n }, ({ shouldComputed, previousSize, size }) => {\n if (shouldComputed) {\n handlerOffset.value = computeOffsetIfSizeChanged({\n handlerOffset: handlerOffset.value,\n prevSize: previousSize,\n size,\n });\n }\n }, [size]);\n\n return {\n size,\n validLength: dataLength - 1,\n handlerOffset,\n };\n}\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { renderHook } from "@testing-library/react-hooks";
|
|
2
|
+
import { useCommonVariables } from "./useCommonVariables";
|
|
3
|
+
const input = {
|
|
4
|
+
vertical: false,
|
|
5
|
+
width: 700,
|
|
6
|
+
height: 350,
|
|
7
|
+
loop: true,
|
|
8
|
+
enabled: true,
|
|
9
|
+
testID: "xxx",
|
|
10
|
+
style: {
|
|
11
|
+
width: "100%"
|
|
12
|
+
},
|
|
13
|
+
autoPlay: false,
|
|
14
|
+
autoPlayInterval: 2000,
|
|
15
|
+
data: [0, 1, 2, 3],
|
|
16
|
+
pagingEnabled: true,
|
|
17
|
+
defaultIndex: 0,
|
|
18
|
+
autoFillData: true,
|
|
19
|
+
dataLength: 4,
|
|
20
|
+
rawData: [0, 1, 2, 3],
|
|
21
|
+
rawDataLength: 4,
|
|
22
|
+
scrollAnimationDuration: 500,
|
|
23
|
+
snapEnabled: true,
|
|
24
|
+
overscrollEnabled: true
|
|
25
|
+
};
|
|
26
|
+
describe("useCommonVariables", () => {
|
|
27
|
+
it("should return the correct values", async () => {
|
|
28
|
+
const hook = renderHook(() => useCommonVariables(input));
|
|
29
|
+
expect(hook.result.current.size).toMatchInlineSnapshot("700");
|
|
30
|
+
expect(hook.result.current.validLength).toMatchInlineSnapshot("3");
|
|
31
|
+
expect(hook.result.current.handlerOffset.value).toMatchInlineSnapshot("-0");
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=useCommonVariables.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["useCommonVariables.test.tsx"],"names":["renderHook","useCommonVariables","input","vertical","width","height","loop","enabled","testID","style","autoPlay","autoPlayInterval","data","pagingEnabled","defaultIndex","autoFillData","dataLength","rawData","rawDataLength","scrollAnimationDuration","snapEnabled","overscrollEnabled","describe","it","hook","expect","result","current","size","toMatchInlineSnapshot","validLength","handlerOffset","value"],"mappings":"AAAA,SAASA,UAAT,QAA2B,8BAA3B;AAEA,SAASC,kBAAT,QAAmC,sBAAnC;AAIA,MAAMC,KAAK,GAAG;AACZC,EAAAA,QAAQ,EAAE,KADE;AAEZC,EAAAA,KAAK,EAAE,GAFK;AAGZC,EAAAA,MAAM,EAAE,GAHI;AAIZC,EAAAA,IAAI,EAAE,IAJM;AAKZC,EAAAA,OAAO,EAAE,IALG;AAMZC,EAAAA,MAAM,EAAE,KANI;AAOZC,EAAAA,KAAK,EAAE;AACLL,IAAAA,KAAK,EAAE;AADF,GAPK;AAUZM,EAAAA,QAAQ,EAAE,KAVE;AAWZC,EAAAA,gBAAgB,EAAE,IAXN;AAYZC,EAAAA,IAAI,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,CAZM;AAaZC,EAAAA,aAAa,EAAE,IAbH;AAcZC,EAAAA,YAAY,EAAE,CAdF;AAeZC,EAAAA,YAAY,EAAE,IAfF;AAgBZC,EAAAA,UAAU,EAAE,CAhBA;AAiBZC,EAAAA,OAAO,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,CAjBG;AAkBZC,EAAAA,aAAa,EAAE,CAlBH;AAmBZC,EAAAA,uBAAuB,EAAE,GAnBb;AAoBZC,EAAAA,WAAW,EAAE,IApBD;AAqBZC,EAAAA,iBAAiB,EAAE;AArBP,CAAd;AAwBAC,QAAQ,CAAC,oBAAD,EAAuB,MAAM;AACnCC,EAAAA,EAAE,CAAC,kCAAD,EAAqC,YAAY;AACjD,UAAMC,IAAI,GAAGxB,UAAU,CAAC,MAAMC,kBAAkB,CAACC,KAAD,CAAzB,CAAvB;AAEAuB,IAAAA,MAAM,CAACD,IAAI,CAACE,MAAL,CAAYC,OAAZ,CAAoBC,IAArB,CAAN,CAAiCC,qBAAjC,CAAuD,KAAvD;AACAJ,IAAAA,MAAM,CAACD,IAAI,CAACE,MAAL,CAAYC,OAAZ,CAAoBG,WAArB,CAAN,CAAwCD,qBAAxC,CAA8D,GAA9D;AACAJ,IAAAA,MAAM,CAACD,IAAI,CAACE,MAAL,CAAYC,OAAZ,CAAoBI,aAApB,CAAkCC,KAAnC,CAAN,CAAgDH,qBAAhD,CACE,IADF;AAGD,GARC,CAAF;AASD,CAVO,CAAR","sourcesContent":["import { renderHook } from \"@testing-library/react-hooks\";\n\nimport { useCommonVariables } from \"./useCommonVariables\";\n\ntype UseCommonVariablesInput = Parameters<typeof useCommonVariables>[0];\n\nconst input = {\n vertical: false,\n width: 700,\n height: 350,\n loop: true,\n enabled: true,\n testID: \"xxx\",\n style: {\n width: \"100%\",\n },\n autoPlay: false,\n autoPlayInterval: 2000,\n data: [0, 1, 2, 3],\n pagingEnabled: true,\n defaultIndex: 0,\n autoFillData: true,\n dataLength: 4,\n rawData: [0, 1, 2, 3],\n rawDataLength: 4,\n scrollAnimationDuration: 500,\n snapEnabled: true,\n overscrollEnabled: true,\n} as unknown as UseCommonVariablesInput;\n\ndescribe(\"useCommonVariables\", () => {\n it(\"should return the correct values\", async () => {\n const hook = renderHook(() => useCommonVariables(input));\n\n expect(hook.result.current.size).toMatchInlineSnapshot(\"700\");\n expect(hook.result.current.validLength).toMatchInlineSnapshot(\"3\");\n expect(hook.result.current.handlerOffset.value).toMatchInlineSnapshot(\n \"-0\",\n );\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useLayoutConfig.ts"],"names":["React","Layouts","useLayoutConfig","opts","size","vertical","useMemo","baseConfig","mode","parallax","modeConfig","horizontalStack","verticalStack","normal"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;
|
|
1
|
+
{"version":3,"sources":["useLayoutConfig.ts"],"names":["React","Layouts","useLayoutConfig","opts","size","vertical","useMemo","baseConfig","mode","parallax","modeConfig","horizontalStack","verticalStack","normal"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AAKA,SAASC,OAAT,QAAwB,YAAxB;AAIA,OAAO,SAASC,eAAT,CACLC,IADK,EAEY;AACjB,QAAM;AAAEC,IAAAA,IAAF;AAAQC,IAAAA;AAAR,MAAqBF,IAA3B;AAEA,SAAOH,KAAK,CAACM,OAAN,CAAc,MAAM;AACzB,UAAMC,UAAU,GAAG;AAAEH,MAAAA,IAAF;AAAQC,MAAAA;AAAR,KAAnB;;AACA,YAAQF,IAAI,CAACK,IAAb;AACE,WAAK,UAAL;AACE,eAAOP,OAAO,CAACQ,QAAR,CAAiBF,UAAjB,EAA6BJ,IAAI,CAACO,UAAlC,CAAP;;AACF,WAAK,kBAAL;AACE,eAAOT,OAAO,CAACU,eAAR,CAAwBR,IAAI,CAACO,UAA7B,CAAP;;AACF,WAAK,gBAAL;AACE,eAAOT,OAAO,CAACW,aAAR,CAAsBT,IAAI,CAACO,UAA3B,CAAP;;AACF;AACE,eAAOT,OAAO,CAACY,MAAR,CAAeN,UAAf,CAAP;AARJ;AAUD,GAZM,EAYJ,CAACJ,IAAI,CAACK,IAAN,EAAYL,IAAI,CAACO,UAAjB,EAA6BN,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"]}
|
|
@@ -24,15 +24,18 @@ export const useOffsetX = (opts, visibleRanges) => {
|
|
|
24
24
|
negativeRange,
|
|
25
25
|
positiveRange
|
|
26
26
|
} = visibleRanges.value;
|
|
27
|
-
if ((index < negativeRange[0] || index > negativeRange[1]) && (index < positiveRange[0] || index > positiveRange[1])) return Number.MAX_SAFE_INTEGER;
|
|
28
27
|
|
|
29
|
-
if (
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
if (index >= negativeRange[0] && index <= negativeRange[1] || index >= positiveRange[0] && index <= positiveRange[1]) {
|
|
29
|
+
if (loop) {
|
|
30
|
+
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];
|
|
31
|
+
const outputRange = [startPos, MAX + HALF_WIDTH - Number.MIN_VALUE, MIN - HALF_WIDTH, startPos, MAX + HALF_WIDTH, MIN - HALF_WIDTH + Number.MIN_VALUE, startPos];
|
|
32
|
+
return interpolate(handlerOffset.value, inputRange, outputRange, Extrapolate.CLAMP);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return handlerOffset.value + size * index;
|
|
33
36
|
}
|
|
34
37
|
|
|
35
|
-
return
|
|
38
|
+
return Number.MAX_SAFE_INTEGER;
|
|
36
39
|
}, [loop, dataLength, viewCount, type, size, visibleRanges]);
|
|
37
40
|
return x;
|
|
38
41
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useOffsetX.ts"],"names":["Extrapolate","interpolate","useDerivedValue","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":["Extrapolate","interpolate","useDerivedValue","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","CLAMP","MAX_SAFE_INTEGER"],"mappings":"AACA,SACEA,WADF,EAEEC,WAFF,EAGEC,eAHF,QAIO,yBAJP;AAkBA,OAAO,MAAMC,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,GAAGtB,eAAe,CAAC,MAAM;AAC9B,UAAM;AAAEuB,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,eAAOpB,WAAW,CAChBK,aAAa,CAACqB,KADE,EAEhBC,UAFgB,EAGhBG,WAHgB,EAIhB/B,WAAW,CAACgC,KAJI,CAAlB;AAMD;;AAED,aAAO1B,aAAa,CAACqB,KAAd,GAAsBnB,IAAI,GAAGD,KAApC;AACD;;AAED,WAAOsB,MAAM,CAACI,gBAAd;AACD,GAxCwB,EAwCtB,CAACxB,IAAD,EAAOC,UAAP,EAAmBE,SAAnB,EAA8BD,IAA9B,EAAoCH,IAApC,EAA0CH,aAA1C,CAxCsB,CAAzB;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,48 @@
|
|
|
1
|
+
import { useSharedValue } from "react-native-reanimated";
|
|
2
|
+
import { renderHook } from "@testing-library/react-hooks";
|
|
3
|
+
import { useOffsetX } from "./useOffsetX";
|
|
4
|
+
describe("useSharedValue", () => {
|
|
5
|
+
it("should return the correct values", async () => {
|
|
6
|
+
const hook = renderHook(() => {
|
|
7
|
+
const range = useSharedValue({
|
|
8
|
+
negativeRange: [7, 9],
|
|
9
|
+
positiveRange: [0, 3]
|
|
10
|
+
});
|
|
11
|
+
const inputs = Array.from({
|
|
12
|
+
length: 10
|
|
13
|
+
}).map((_, index) => ({
|
|
14
|
+
config: {
|
|
15
|
+
dataLength: 10,
|
|
16
|
+
handlerOffset: useSharedValue(-0),
|
|
17
|
+
index,
|
|
18
|
+
loop: false,
|
|
19
|
+
size: 393
|
|
20
|
+
},
|
|
21
|
+
range
|
|
22
|
+
}));
|
|
23
|
+
return inputs.map(input => {
|
|
24
|
+
const {
|
|
25
|
+
config,
|
|
26
|
+
range
|
|
27
|
+
} = input;
|
|
28
|
+
return useOffsetX(config, range);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
const expected = hook.result.current.map(v => v.value).slice();
|
|
32
|
+
expect(expected).toMatchInlineSnapshot(`
|
|
33
|
+
[
|
|
34
|
+
0,
|
|
35
|
+
393,
|
|
36
|
+
786,
|
|
37
|
+
1179,
|
|
38
|
+
9007199254740991,
|
|
39
|
+
9007199254740991,
|
|
40
|
+
9007199254740991,
|
|
41
|
+
2751,
|
|
42
|
+
3144,
|
|
43
|
+
3537,
|
|
44
|
+
]
|
|
45
|
+
`);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=useOffsetX.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["useOffsetX.test.ts"],"names":["useSharedValue","renderHook","useOffsetX","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,SAASA,cAAT,QAA+B,yBAA/B;AAEA,SAASC,UAAT,QAA2B,8BAA3B;AAGA,SAASC,UAAT,QAA2B,cAA3B;AAGAC,QAAQ,CAAC,gBAAD,EAAmB,MAAM;AAC/BC,EAAAA,EAAE,CAAC,kCAAD,EAAqC,YAAY;AACjD,UAAMC,IAAI,GAAGJ,UAAU,CAAC,MAAM;AAC5B,YAAMK,KAAK,GAAGN,cAAc,CAAC;AAC3BO,QAAAA,aAAa,EAAE,CAAC,CAAD,EAAI,CAAJ,CADY;AAE3BC,QAAAA,aAAa,EAAE,CAAC,CAAD,EAAI,CAAJ;AAFY,OAAD,CAA5B;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,EAAElB,cAAc,CAAC,CAAC,CAAF,CAFvB;AAGNe,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,eAAOnB,UAAU,CAACc,MAAD,EAASV,KAAT,CAAjB;AACD,OAJM,CAAP;AAKD,KAxBsB,CAAvB;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 }) as IVisibleRanges;\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"]}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
import { Gesture } from "react-native-gesture-handler";
|
|
3
|
+
import { useUpdateGestureConfig } from "./useUpdateGestureConfig";
|
|
4
|
+
export const usePanGestureProxy = customization => {
|
|
5
|
+
const {
|
|
6
|
+
onConfigurePanGesture,
|
|
7
|
+
onGestureStart,
|
|
8
|
+
onGestureUpdate,
|
|
9
|
+
onGestureEnd,
|
|
10
|
+
options = {}
|
|
11
|
+
} = customization;
|
|
12
|
+
const gesture = useMemo(() => {
|
|
13
|
+
const gesture = Gesture.Pan(); // Save the original gesture callbacks
|
|
14
|
+
|
|
15
|
+
const originalGestures = {
|
|
16
|
+
onStart: gesture.onStart,
|
|
17
|
+
onUpdate: gesture.onUpdate,
|
|
18
|
+
onEnd: gesture.onEnd
|
|
19
|
+
}; // Save the user defined gesture callbacks
|
|
20
|
+
|
|
21
|
+
const userDefinedConflictGestures = {
|
|
22
|
+
onStart: undefined,
|
|
23
|
+
onUpdate: undefined,
|
|
24
|
+
onEnd: undefined
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const fakeOnStart = cb => {
|
|
28
|
+
// Using fakeOnStart to save the user defined callback
|
|
29
|
+
userDefinedConflictGestures.onStart = cb;
|
|
30
|
+
return gesture;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const fakeOnUpdate = cb => {
|
|
34
|
+
// Using fakeOnUpdate to save the user defined callback
|
|
35
|
+
userDefinedConflictGestures.onUpdate = cb;
|
|
36
|
+
return gesture;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const fakeOnEnd = cb => {
|
|
40
|
+
// Using fakeOnEnd to save the user defined callback
|
|
41
|
+
userDefinedConflictGestures.onEnd = cb;
|
|
42
|
+
return gesture;
|
|
43
|
+
}; // Setup the fake callbacks
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
gesture.onStart = fakeOnStart;
|
|
47
|
+
gesture.onUpdate = fakeOnUpdate;
|
|
48
|
+
gesture.onEnd = fakeOnEnd;
|
|
49
|
+
if (onConfigurePanGesture) // Get the gesture with the user defined configuration
|
|
50
|
+
onConfigurePanGesture(gesture); // Restore the original callbacks
|
|
51
|
+
|
|
52
|
+
gesture.onStart = originalGestures.onStart;
|
|
53
|
+
gesture.onUpdate = originalGestures.onUpdate;
|
|
54
|
+
gesture.onEnd = originalGestures.onEnd; // Setup the original callbacks with the user defined callbacks
|
|
55
|
+
|
|
56
|
+
gesture.onStart(e => {
|
|
57
|
+
onGestureStart(e);
|
|
58
|
+
if (userDefinedConflictGestures.onStart) userDefinedConflictGestures.onStart(e);
|
|
59
|
+
}).onUpdate(e => {
|
|
60
|
+
onGestureUpdate(e);
|
|
61
|
+
if (userDefinedConflictGestures.onUpdate) userDefinedConflictGestures.onUpdate(e);
|
|
62
|
+
}).onEnd((e, success) => {
|
|
63
|
+
onGestureEnd(e, success);
|
|
64
|
+
if (userDefinedConflictGestures.onEnd) userDefinedConflictGestures.onEnd(e, success);
|
|
65
|
+
});
|
|
66
|
+
return gesture;
|
|
67
|
+
}, [onGestureStart, onGestureUpdate, onGestureEnd, onConfigurePanGesture]);
|
|
68
|
+
useUpdateGestureConfig(gesture, options);
|
|
69
|
+
return gesture;
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=usePanGestureProxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["usePanGestureProxy.ts"],"names":["useMemo","Gesture","useUpdateGestureConfig","usePanGestureProxy","customization","onConfigurePanGesture","onGestureStart","onGestureUpdate","onGestureEnd","options","gesture","Pan","originalGestures","onStart","onUpdate","onEnd","userDefinedConflictGestures","undefined","fakeOnStart","cb","fakeOnUpdate","fakeOnEnd","e","success"],"mappings":"AAAA,SAASA,OAAT,QAAwB,OAAxB;AAEA,SAASC,OAAT,QAAwB,8BAAxB;AAGA,SAASC,sBAAT,QAAuC,0BAAvC;AAEA,OAAO,MAAMC,kBAAkB,GAC7BC,aADgC,IAQ7B;AACH,QAAM;AACJC,IAAAA,qBADI;AAEJC,IAAAA,cAFI;AAGJC,IAAAA,eAHI;AAIJC,IAAAA,YAJI;AAKJC,IAAAA,OAAO,GAAG;AALN,MAMFL,aANJ;AAQA,QAAMM,OAAO,GAAGV,OAAO,CAAC,MAAM;AAC5B,UAAMU,OAAO,GAAGT,OAAO,CAACU,GAAR,EAAhB,CAD4B,CAG5B;;AACA,UAAMC,gBAAgB,GAAG;AACvBC,MAAAA,OAAO,EAAEH,OAAO,CAACG,OADM;AAEvBC,MAAAA,QAAQ,EAAEJ,OAAO,CAACI,QAFK;AAGvBC,MAAAA,KAAK,EAAEL,OAAO,CAACK;AAHQ,KAAzB,CAJ4B,CAU5B;;AACA,UAAMC,2BAIL,GAAG;AACFH,MAAAA,OAAO,EAAEI,SADP;AAEFH,MAAAA,QAAQ,EAAEG,SAFR;AAGFF,MAAAA,KAAK,EAAEE;AAHL,KAJJ;;AAUA,UAAMC,WAAmC,GAAIC,EAAD,IAAQ;AAClD;AACAH,MAAAA,2BAA2B,CAACH,OAA5B,GAAsCM,EAAtC;AACA,aAAOT,OAAP;AACD,KAJD;;AAMA,UAAMU,YAAqC,GAAID,EAAD,IAAQ;AACpD;AACAH,MAAAA,2BAA2B,CAACF,QAA5B,GAAuCK,EAAvC;AACA,aAAOT,OAAP;AACD,KAJD;;AAMA,UAAMW,SAA+B,GAAIF,EAAD,IAAQ;AAC9C;AACAH,MAAAA,2BAA2B,CAACD,KAA5B,GAAoCI,EAApC;AACA,aAAOT,OAAP;AACD,KAJD,CAjC4B,CAuC5B;;;AACAA,IAAAA,OAAO,CAACG,OAAR,GAAkBK,WAAlB;AACAR,IAAAA,OAAO,CAACI,QAAR,GAAmBM,YAAnB;AACAV,IAAAA,OAAO,CAACK,KAAR,GAAgBM,SAAhB;AAEA,QAAIhB,qBAAJ,EACE;AACAA,MAAAA,qBAAqB,CAACK,OAAD,CAArB,CA9C0B,CAgD5B;;AACAA,IAAAA,OAAO,CAACG,OAAR,GAAkBD,gBAAgB,CAACC,OAAnC;AACAH,IAAAA,OAAO,CAACI,QAAR,GAAmBF,gBAAgB,CAACE,QAApC;AACAJ,IAAAA,OAAO,CAACK,KAAR,GAAgBH,gBAAgB,CAACG,KAAjC,CAnD4B,CAqD5B;;AACAL,IAAAA,OAAO,CACJG,OADH,CACYS,CAAD,IAAO;AACdhB,MAAAA,cAAc,CAACgB,CAAD,CAAd;AAEA,UAAIN,2BAA2B,CAACH,OAAhC,EACEG,2BAA2B,CAACH,OAA5B,CAAoCS,CAApC;AACH,KANH,EAOGR,QAPH,CAOaQ,CAAD,IAAO;AACff,MAAAA,eAAe,CAACe,CAAD,CAAf;AAEA,UAAIN,2BAA2B,CAACF,QAAhC,EACEE,2BAA2B,CAACF,QAA5B,CAAqCQ,CAArC;AACH,KAZH,EAaGP,KAbH,CAaS,CAACO,CAAD,EAAIC,OAAJ,KAAgB;AACrBf,MAAAA,YAAY,CAACc,CAAD,EAAIC,OAAJ,CAAZ;AAEA,UAAIP,2BAA2B,CAACD,KAAhC,EACEC,2BAA2B,CAACD,KAA5B,CAAkCO,CAAlC,EAAqCC,OAArC;AACH,KAlBH;AAoBA,WAAOb,OAAP;AACD,GA3EsB,EA2EpB,CACDJ,cADC,EAEDC,eAFC,EAGDC,YAHC,EAIDH,qBAJC,CA3EoB,CAAvB;AAkFAH,EAAAA,sBAAsB,CAACQ,OAAD,EAAUD,OAAV,CAAtB;AAEA,SAAOC,OAAP;AACD,CAtGM","sourcesContent":["import { useMemo } from \"react\";\nimport type { GestureStateChangeEvent, GestureUpdateEvent, PanGesture, PanGestureHandlerEventPayload } from \"react-native-gesture-handler\";\nimport { Gesture } from \"react-native-gesture-handler\";\n\nimport type { GestureConfig } from \"./useUpdateGestureConfig\";\nimport { useUpdateGestureConfig } from \"./useUpdateGestureConfig\";\n\nexport const usePanGestureProxy = (\n customization: {\n onConfigurePanGesture?: (gesture: PanGesture) => void\n onGestureStart: (event: GestureStateChangeEvent<PanGestureHandlerEventPayload>) => void\n onGestureUpdate: (event: GestureUpdateEvent<PanGestureHandlerEventPayload>) => void\n onGestureEnd: (event: GestureStateChangeEvent<PanGestureHandlerEventPayload>, success: boolean) => void\n options?: GestureConfig\n },\n) => {\n const {\n onConfigurePanGesture,\n onGestureStart,\n onGestureUpdate,\n onGestureEnd,\n options = {},\n } = customization;\n\n const gesture = useMemo(() => {\n const gesture = Gesture.Pan();\n\n // Save the original gesture callbacks\n const originalGestures = {\n onStart: gesture.onStart,\n onUpdate: gesture.onUpdate,\n onEnd: gesture.onEnd,\n };\n\n // Save the user defined gesture callbacks\n const userDefinedConflictGestures: {\n onStart?: Parameters<(typeof gesture)[\"onStart\"]>[0]\n onUpdate?: Parameters<(typeof gesture)[\"onUpdate\"]>[0]\n onEnd?: Parameters<(typeof gesture)[\"onEnd\"]>[0]\n } = {\n onStart: undefined,\n onUpdate: undefined,\n onEnd: undefined,\n };\n\n const fakeOnStart: typeof gesture.onStart = (cb) => {\n // Using fakeOnStart to save the user defined callback\n userDefinedConflictGestures.onStart = cb;\n return gesture;\n };\n\n const fakeOnUpdate: typeof gesture.onUpdate = (cb) => {\n // Using fakeOnUpdate to save the user defined callback\n userDefinedConflictGestures.onUpdate = cb;\n return gesture;\n };\n\n const fakeOnEnd: typeof gesture.onEnd = (cb) => {\n // Using fakeOnEnd to save the user defined callback\n userDefinedConflictGestures.onEnd = cb;\n return gesture;\n };\n\n // Setup the fake callbacks\n gesture.onStart = fakeOnStart;\n gesture.onUpdate = fakeOnUpdate;\n gesture.onEnd = fakeOnEnd;\n\n if (onConfigurePanGesture)\n // Get the gesture with the user defined configuration\n onConfigurePanGesture(gesture);\n\n // Restore the original callbacks\n gesture.onStart = originalGestures.onStart;\n gesture.onUpdate = originalGestures.onUpdate;\n gesture.onEnd = originalGestures.onEnd;\n\n // Setup the original callbacks with the user defined callbacks\n gesture\n .onStart((e) => {\n onGestureStart(e);\n\n if (userDefinedConflictGestures.onStart)\n userDefinedConflictGestures.onStart(e);\n })\n .onUpdate((e) => {\n onGestureUpdate(e);\n\n if (userDefinedConflictGestures.onUpdate)\n userDefinedConflictGestures.onUpdate(e);\n })\n .onEnd((e, success) => {\n onGestureEnd(e, success);\n\n if (userDefinedConflictGestures.onEnd)\n userDefinedConflictGestures.onEnd(e, success);\n });\n\n return gesture;\n }, [\n onGestureStart,\n onGestureUpdate,\n onGestureEnd,\n onConfigurePanGesture,\n ]);\n\n useUpdateGestureConfig(gesture, options);\n\n return gesture;\n};\n"]}
|