react-native-reanimated-carousel 4.0.0-alpha.2 → 4.0.0-alpha.3
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/components/rnr-demo.test.js +45 -0
- package/lib/commonjs/components/rnr-demo.test.js.map +1 -0
- package/lib/commonjs/hooks/useCommonVariables.js +34 -2
- 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/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/index.test.js +6 -6
- package/lib/commonjs/utils/index.test.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/useCommonVariables.js +33 -2
- 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/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/index.test.js +6 -6
- package/lib/module/utils/index.test.js.map +1 -1
- package/lib/typescript/components/rnr-demo.test.d.ts +1 -0
- package/lib/typescript/hooks/useCommonVariables.test.d.ts +1 -0
- 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/package.json +9 -48
- package/src/components/rnr-demo.test.tsx +43 -0
- package/src/hooks/useCommonVariables.test.tsx +41 -0
- package/src/hooks/useCommonVariables.ts +31 -3
- 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/index.test.ts +6 -6
- package/lib/commonjs/utils/computeNewIndexWhenDataChanges.js.map +0 -1
- package/lib/module/utils/computeNewIndexWhenDataChanges.js.map +0 -1
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _react = _interopRequireDefault(require("react"));
|
|
4
|
+
|
|
5
|
+
var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
|
|
6
|
+
|
|
7
|
+
var _reactTestRenderer = _interopRequireDefault(require("react-test-renderer"));
|
|
8
|
+
|
|
9
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
10
|
+
|
|
11
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
12
|
+
|
|
13
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
|
+
|
|
15
|
+
describe("useSharedValue", () => {
|
|
16
|
+
it("retains value on rerender", () => {
|
|
17
|
+
const initialValue = 0;
|
|
18
|
+
const updatedValue = 1;
|
|
19
|
+
|
|
20
|
+
const TestComponent = props => {
|
|
21
|
+
const opacity = (0, _reactNativeReanimated.useDerivedValue)(() => props.value, [props.value]);
|
|
22
|
+
const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => ({
|
|
23
|
+
opacity: opacity.value
|
|
24
|
+
}), [opacity]);
|
|
25
|
+
return /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.View, {
|
|
26
|
+
style: animatedStyle
|
|
27
|
+
});
|
|
28
|
+
}; // When rendering with initial value
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
const wrapper = _reactTestRenderer.default.create( /*#__PURE__*/_react.default.createElement(TestComponent, {
|
|
32
|
+
key: "box",
|
|
33
|
+
value: initialValue
|
|
34
|
+
}));
|
|
35
|
+
|
|
36
|
+
expect(typeof wrapper.root.children[0] !== "string" ? wrapper.root.children[0].props.style.animatedStyle.current.value.opacity : false).toBe(initialValue); // When rendering with updated value
|
|
37
|
+
|
|
38
|
+
wrapper.update( /*#__PURE__*/_react.default.createElement(TestComponent, {
|
|
39
|
+
key: "box",
|
|
40
|
+
value: updatedValue
|
|
41
|
+
}));
|
|
42
|
+
expect(typeof wrapper.root.children[0] !== "string" ? wrapper.root.children[0].props.style.animatedStyle.current.value.opacity : false).toBe(initialValue);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=rnr-demo.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["rnr-demo.test.tsx"],"names":["describe","it","initialValue","updatedValue","TestComponent","props","opacity","value","animatedStyle","wrapper","renderer","create","expect","root","children","style","current","toBe","update"],"mappings":";;AACA;;AACA;;AACA;;;;;;;;AAEAA,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,GAAG,4CAAgB,MAAMD,KAAK,CAACE,KAA5B,EAAmC,CAACF,KAAK,CAACE,KAAP,CAAnC,CAAhB;AACA,YAAMC,aAAa,GAAG,6CAAiB,OAAO;AAC5CF,QAAAA,OAAO,EAAEA,OAAO,CAACC;AAD2B,OAAP,CAAjB,EAElB,CAACD,OAAD,CAFkB,CAAtB;AAIA,0BAAO,6BAAC,8BAAD,CAAU,IAAV;AAAe,QAAA,KAAK,EAAEE;AAAtB,QAAP;AACD,KAPD,CAToC,CAkBpC;;;AACA,UAAMC,OAAO,GAAGC,2BAASC,MAAT,eAAgB,6BAAC,aAAD;AAAe,MAAA,GAAG,EAAC,KAAnB;AAAyB,MAAA,KAAK,EAAET;AAAhC,MAAhB,CAAhB;;AAEAU,IAAAA,MAAM,CACJ,OAAOH,OAAO,CAACI,IAAR,CAAaC,QAAb,CAAsB,CAAtB,CAAP,KAAoC,QAApC,GACIL,OAAO,CAACI,IAAR,CAAaC,QAAb,CAAsB,CAAtB,EAAyBT,KAAzB,CAA+BU,KAA/B,CAAqCP,aAArC,CAAmDQ,OAAnD,CAA2DT,KAA3D,CAAiED,OADrE,GAEI,KAHA,CAAN,CAIEW,IAJF,CAIOf,YAJP,EArBoC,CA2BpC;;AACAO,IAAAA,OAAO,CAACS,MAAR,eAAe,6BAAC,aAAD;AAAe,MAAA,GAAG,EAAC,KAAnB;AAAyB,MAAA,KAAK,EAAEf;AAAhC,MAAf;AAEAS,IAAAA,MAAM,CACJ,OAAOH,OAAO,CAACI,IAAR,CAAaC,QAAb,CAAsB,CAAtB,CAAP,KAAoC,QAApC,GACIL,OAAO,CAACI,IAAR,CAAaC,QAAb,CAAsB,CAAtB,EAAyBT,KAAzB,CAA+BU,KAA/B,CAAqCP,aAArC,CAAmDQ,OAAnD,CAA2DT,KAA3D,CAAiED,OADrE,GAEI,KAHA,CAAN,CAIEW,IAJF,CAIOf,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"]}
|
|
@@ -7,7 +7,9 @@ exports.useCommonVariables = useCommonVariables;
|
|
|
7
7
|
|
|
8
8
|
var _reactNativeReanimated = require("react-native-reanimated");
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _computeOffsetIfDataChanged = require("../utils/compute-offset-if-data-changed");
|
|
11
|
+
|
|
12
|
+
var _computeOffsetIfSizeChanged = require("../utils/compute-offset-if-size-changed");
|
|
11
13
|
|
|
12
14
|
var _handleroffsetDirection = require("../utils/handleroffset-direction");
|
|
13
15
|
|
|
@@ -28,6 +30,7 @@ function useCommonVariables(props) {
|
|
|
28
30
|
|
|
29
31
|
const handlerOffset = defaultScrollOffsetValue !== null && defaultScrollOffsetValue !== void 0 ? defaultScrollOffsetValue : _handlerOffset;
|
|
30
32
|
const prevDataLength = (0, _reactNativeReanimated.useSharedValue)(dataLength);
|
|
33
|
+
const prevSize = (0, _reactNativeReanimated.useSharedValue)(size);
|
|
31
34
|
/**
|
|
32
35
|
* When data changes, we need to compute new index for handlerOffset
|
|
33
36
|
*/
|
|
@@ -53,7 +56,7 @@ function useCommonVariables(props) {
|
|
|
53
56
|
if (shouldComputed) {
|
|
54
57
|
// direction -> 1 | -1
|
|
55
58
|
const direction = (0, _handleroffsetDirection.handlerOffsetDirection)(handlerOffset);
|
|
56
|
-
handlerOffset.value = (0,
|
|
59
|
+
handlerOffset.value = (0, _computeOffsetIfDataChanged.computeOffsetIfDataChanged)({
|
|
57
60
|
direction,
|
|
58
61
|
previousLength,
|
|
59
62
|
currentLength,
|
|
@@ -62,6 +65,35 @@ function useCommonVariables(props) {
|
|
|
62
65
|
});
|
|
63
66
|
}
|
|
64
67
|
}, [dataLength, loop]);
|
|
68
|
+
/**
|
|
69
|
+
* When size changes, we need to compute new index for handlerOffset
|
|
70
|
+
*/
|
|
71
|
+
|
|
72
|
+
(0, _reactNativeReanimated.useAnimatedReaction)(() => {
|
|
73
|
+
const previousSize = prevSize.value;
|
|
74
|
+
const isSizeChanged = previousSize !== size;
|
|
75
|
+
const shouldComputed = isSizeChanged;
|
|
76
|
+
if (shouldComputed) prevSize.value = size;
|
|
77
|
+
return {
|
|
78
|
+
shouldComputed,
|
|
79
|
+
previousSize,
|
|
80
|
+
size
|
|
81
|
+
};
|
|
82
|
+
}, _ref2 => {
|
|
83
|
+
let {
|
|
84
|
+
shouldComputed,
|
|
85
|
+
previousSize,
|
|
86
|
+
size
|
|
87
|
+
} = _ref2;
|
|
88
|
+
|
|
89
|
+
if (shouldComputed) {
|
|
90
|
+
handlerOffset.value = (0, _computeOffsetIfSizeChanged.computeOffsetIfSizeChanged)({
|
|
91
|
+
handlerOffset: handlerOffset.value,
|
|
92
|
+
prevSize: previousSize,
|
|
93
|
+
size
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}, [size]);
|
|
65
97
|
return {
|
|
66
98
|
size,
|
|
67
99
|
validLength: dataLength - 1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useCommonVariables.ts"],"names":["useCommonVariables","props","vertical","height","width","dataLength","defaultIndex","defaultScrollOffsetValue","loop","size","defaultHandlerOffsetValue","Math","abs","_handlerOffset","handlerOffset","prevDataLength","previousLength","value","currentLength","isLengthChanged","shouldComputed","direction","validLength"],"mappings":";;;;;;;AACA;;AAIA;;AACA;;AAQO,SAASA,kBAAT,CACLC,KADK,EAEa;AAClB,QAAM;AACJC,IAAAA,QADI;AAEJC,IAAAA,MAFI;AAGJC,IAAAA,KAHI;AAIJC,IAAAA,UAJI;AAKJC,IAAAA,YALI;AAMJC,IAAAA,wBANI;AAOJC,IAAAA;AAPI,MAQFP,KARJ;AASA,QAAMQ,IAAI,GAAGP,QAAQ,GAAGC,MAAH,GAAYC,KAAjC;AACA,QAAMM,yBAAyB,GAAG,CAACC,IAAI,CAACC,GAAL,CAASN,YAAY,GAAGG,IAAxB,CAAnC;;AACA,QAAMI,cAAc,GAAG,2CAAuBH,yBAAvB,CAAvB;;AACA,QAAMI,aAAa,GAAGP,wBAAH,aAAGA,wBAAH,cAAGA,wBAAH,GAA+BM,cAAlD;AACA,QAAME,cAAc,GAAG,2CAAeV,UAAf,CAAvB;AAEA;AACF;AACA;;AACE,kDAAoB,MAAM;AACxB,
|
|
1
|
+
{"version":3,"sources":["useCommonVariables.ts"],"names":["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":";;;;;;;AACA;;AAIA;;AACA;;AACA;;AAQO,SAASA,kBAAT,CACLC,KADK,EAEa;AAClB,QAAM;AACJC,IAAAA,QADI;AAEJC,IAAAA,MAFI;AAGJC,IAAAA,KAHI;AAIJC,IAAAA,UAJI;AAKJC,IAAAA,YALI;AAMJC,IAAAA,wBANI;AAOJC,IAAAA;AAPI,MAQFP,KARJ;AASA,QAAMQ,IAAI,GAAGP,QAAQ,GAAGC,MAAH,GAAYC,KAAjC;AACA,QAAMM,yBAAyB,GAAG,CAACC,IAAI,CAACC,GAAL,CAASN,YAAY,GAAGG,IAAxB,CAAnC;;AACA,QAAMI,cAAc,GAAG,2CAAuBH,yBAAvB,CAAvB;;AACA,QAAMI,aAAa,GAAGP,wBAAH,aAAGA,wBAAH,cAAGA,wBAAH,GAA+BM,cAAlD;AACA,QAAME,cAAc,GAAG,2CAAeV,UAAf,CAAvB;AACA,QAAMW,QAAQ,GAAG,2CAAeP,IAAf,CAAjB;AAEA;AACF;AACA;;AACE,kDAAoB,MAAM;AACxB,UAAMQ,cAAc,GAAGF,cAAc,CAACG,KAAtC;AACA,UAAMC,aAAa,GAAGd,UAAtB;AACA,UAAMe,eAAe,GAAGH,cAAc,KAAKE,aAA3C;AACA,UAAME,cAAc,GAAID,eAAe,IAAIZ,IAA3C;AAEA,QAAIa,cAAJ,EACEN,cAAc,CAACG,KAAf,GAAuBb,UAAvB;AAEF,WAAO;AACLgB,MAAAA,cADK;AAELJ,MAAAA,cAFK;AAGLE,MAAAA;AAHK,KAAP;AAKD,GAdD,EAcG,QAAuD;AAAA,QAAtD;AAAEE,MAAAA,cAAF;AAAkBJ,MAAAA,cAAlB;AAAkCE,MAAAA;AAAlC,KAAsD;;AACxD,QAAIE,cAAJ,EAAoB;AAClB;AACA,YAAMC,SAAS,GAAG,oDAAuBR,aAAvB,CAAlB;AAEAA,MAAAA,aAAa,CAACI,KAAd,GAAsB,4DAA2B;AAC/CI,QAAAA,SAD+C;AAE/CL,QAAAA,cAF+C;AAG/CE,QAAAA,aAH+C;AAI/CV,QAAAA,IAJ+C;AAK/CK,QAAAA,aAAa,EAAEA,aAAa,CAACI;AALkB,OAA3B,CAAtB;AAOD;AACF,GA3BD,EA2BG,CAACb,UAAD,EAAaG,IAAb,CA3BH;AA6BA;AACF;AACA;;AACE,kDAAoB,MAAM;AACxB,UAAMe,YAAY,GAAGP,QAAQ,CAACE,KAA9B;AACA,UAAMM,aAAa,GAAGD,YAAY,KAAKd,IAAvC;AACA,UAAMY,cAAc,GAAGG,aAAvB;AAEA,QAAIH,cAAJ,EACEL,QAAQ,CAACE,KAAT,GAAiBT,IAAjB;AAEF,WAAO;AACLY,MAAAA,cADK;AAELE,MAAAA,YAFK;AAGLd,MAAAA;AAHK,KAAP;AAKD,GAbD,EAaG,SAA4C;AAAA,QAA3C;AAAEY,MAAAA,cAAF;AAAkBE,MAAAA,YAAlB;AAAgCd,MAAAA;AAAhC,KAA2C;;AAC7C,QAAIY,cAAJ,EAAoB;AAClBP,MAAAA,aAAa,CAACI,KAAd,GAAsB,4DAA2B;AAC/CJ,QAAAA,aAAa,EAAEA,aAAa,CAACI,KADkB;AAE/CF,QAAAA,QAAQ,EAAEO,YAFqC;AAG/Cd,QAAAA;AAH+C,OAA3B,CAAtB;AAKD;AACF,GArBD,EAqBG,CAACA,IAAD,CArBH;AAuBA,SAAO;AACLA,IAAAA,IADK;AAELgB,IAAAA,WAAW,EAAEpB,UAAU,GAAG,CAFrB;AAGLS,IAAAA;AAHK,GAAP;AAKD","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,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _reactHooks = require("@testing-library/react-hooks");
|
|
4
|
+
|
|
5
|
+
var _useCommonVariables = require("./useCommonVariables");
|
|
6
|
+
|
|
7
|
+
const input = {
|
|
8
|
+
vertical: false,
|
|
9
|
+
width: 700,
|
|
10
|
+
height: 350,
|
|
11
|
+
loop: true,
|
|
12
|
+
enabled: true,
|
|
13
|
+
testID: "xxx",
|
|
14
|
+
style: {
|
|
15
|
+
width: "100%"
|
|
16
|
+
},
|
|
17
|
+
autoPlay: false,
|
|
18
|
+
autoPlayInterval: 2000,
|
|
19
|
+
data: [0, 1, 2, 3],
|
|
20
|
+
pagingEnabled: true,
|
|
21
|
+
defaultIndex: 0,
|
|
22
|
+
autoFillData: true,
|
|
23
|
+
dataLength: 4,
|
|
24
|
+
rawData: [0, 1, 2, 3],
|
|
25
|
+
rawDataLength: 4,
|
|
26
|
+
scrollAnimationDuration: 500,
|
|
27
|
+
snapEnabled: true,
|
|
28
|
+
overscrollEnabled: true
|
|
29
|
+
};
|
|
30
|
+
describe("useCommonVariables", () => {
|
|
31
|
+
it("should return the correct values", async () => {
|
|
32
|
+
const hook = (0, _reactHooks.renderHook)(() => (0, _useCommonVariables.useCommonVariables)(input));
|
|
33
|
+
expect(hook.result.current.size).toMatchInlineSnapshot("700");
|
|
34
|
+
expect(hook.result.current.validLength).toMatchInlineSnapshot("3");
|
|
35
|
+
expect(hook.result.current.handlerOffset.value).toMatchInlineSnapshot("-0");
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=useCommonVariables.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["useCommonVariables.test.tsx"],"names":["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;;AAEA;;AAIA,MAAMA,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,GAAG,4BAAW,MAAM,4CAAmBtB,KAAnB,CAAjB,CAAb;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"]}
|
package/lib/commonjs/utils/{computeNewIndexWhenDataChanges.js → compute-offset-if-data-changed.js}
RENAMED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.computeOffsetIfDataChanged = computeOffsetIfDataChanged;
|
|
7
7
|
exports.omitZero = omitZero;
|
|
8
8
|
|
|
9
9
|
function omitZero(a, b) {
|
|
@@ -13,7 +13,7 @@ function omitZero(a, b) {
|
|
|
13
13
|
return b;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
function
|
|
16
|
+
function computeOffsetIfDataChanged(params) {
|
|
17
17
|
"worklet";
|
|
18
18
|
|
|
19
19
|
const {
|
|
@@ -49,4 +49,4 @@ function computeNewIndexWhenDataChanges(params) {
|
|
|
49
49
|
|
|
50
50
|
return handlerOffset;
|
|
51
51
|
}
|
|
52
|
-
//# sourceMappingURL=
|
|
52
|
+
//# sourceMappingURL=compute-offset-if-data-changed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["compute-offset-if-data-changed.ts"],"names":["omitZero","a","b","computeOffsetIfDataChanged","params","direction","handlerOffset","_handlerOffset","size","previousLength","currentLength","positionIndex","round","isPositive","Math","abs","parseInt","String","prevOffset","prevIndex","changedLength","changedOffset"],"mappings":";;;;;;;;AAAO,SAASA,QAAT,CAAkBC,CAAlB,EAA6BC,CAA7B,EAAwC;AAC7C;;AACA,MAAID,CAAC,KAAK,CAAV,EACE,OAAO,CAAP;AAEF,SAAOC,CAAP;AACD;;AAEM,SAASC,0BAAT,CAAoCC,MAApC,EAMJ;AACD;;AACA,QAAM;AAAEC,IAAAA,SAAF;AAAaC,IAAAA,aAAa,EAAEC,cAA5B;AAA4CC,IAAAA,IAA5C;AAAkDC,IAAAA,cAAlD;AAAkEC,IAAAA;AAAlE,MAAoFN,MAA1F;AAEA,MAAIE,aAAa,GAAGC,cAApB;AACA,MAAII,aAAJ;AACA,MAAIC,KAAJ;AAEA,QAAMC,UAAU,GAAGR,SAAS,GAAG,CAA/B;;AAEA,MAAIQ,UAAJ,EAAgB;AACdF,IAAAA,aAAa,GAAIG,IAAI,CAACC,GAAL,CAAST,aAAT,CAAD,GAA4BE,IAA5C;AACAI,IAAAA,KAAK,GAAGI,QAAQ,CAACC,MAAM,CAACjB,QAAQ,CAACS,cAAD,EAAiBE,aAAa,GAAGF,cAAjC,CAAT,CAAP,CAAhB;AACD,GAHD,MAIK;AACHE,IAAAA,aAAa,GAAG,CAACG,IAAI,CAACC,GAAL,CAAST,aAAT,IAA0BE,IAA3B,IAAmCA,IAAnD;AACAI,IAAAA,KAAK,GAAGI,QAAQ,CAACC,MAAM,CAACjB,QAAQ,CAACS,cAAD,EAAiBE,aAAa,GAAGF,cAAjC,CAAT,CAAP,CAAR,GAA6E,CAArF;AACD;;AAED,QAAMS,UAAU,GAAGlB,QAAQ,CAACS,cAAD,EAAiBE,aAAa,GAAGF,cAAjC,CAA3B;AACA,QAAMU,SAAS,GAAGN,UAAU,GAAGK,UAAH,GAAgBT,cAAc,GAAGS,UAAjB,GAA8B,CAA1E;AACA,QAAME,aAAa,GAAGR,KAAK,IAAIF,aAAa,GAAGD,cAApB,CAA3B;AACA,QAAMY,aAAa,GAAGD,aAAa,GAAGZ,IAAtC;;AACA,MAAIW,SAAS,GAAGT,aAAa,GAAG,CAA5B,IAAiCA,aAAa,GAAGD,cAArD,EAAqE;AACnE,QAAII,UAAJ,EACEP,aAAa,GAAG,CAACI,aAAa,GAAG,CAAjB,IAAsBF,IAAtB,GAA6BH,SAA7C,CADF,KAIEC,aAAa,GAAG,CAACI,aAAa,GAAG,CAAjB,IAAsBF,IAAtB,GAA6B,CAAC,CAA9C;AACH,GAND,MAOK;AACHF,IAAAA,aAAa,IAAIe,aAAa,GAAGhB,SAAjC;AACD;;AAED,SAAOC,aAAP;AACD","sourcesContent":["export function omitZero(a: number, b: number) {\n \"worklet\";\n if (a === 0)\n return 0;\n\n return b;\n}\n\nexport function computeOffsetIfDataChanged(params: {\n direction: number\n handlerOffset: number\n size: number\n previousLength: number\n currentLength: number\n}) {\n \"worklet\";\n const { direction, handlerOffset: _handlerOffset, size, previousLength, currentLength } = params;\n\n let handlerOffset = _handlerOffset;\n let positionIndex;\n let round;\n\n const isPositive = direction < 0;\n\n if (isPositive) {\n positionIndex = (Math.abs(handlerOffset)) / size;\n round = parseInt(String(omitZero(previousLength, positionIndex / previousLength)));\n }\n else {\n positionIndex = (Math.abs(handlerOffset) - size) / size;\n round = parseInt(String(omitZero(previousLength, positionIndex / previousLength))) + 1;\n }\n\n const prevOffset = omitZero(previousLength, positionIndex % previousLength);\n const prevIndex = isPositive ? prevOffset : previousLength - prevOffset - 1;\n const changedLength = round * (currentLength - previousLength);\n const changedOffset = changedLength * size;\n if (prevIndex > currentLength - 1 && currentLength < previousLength) {\n if (isPositive)\n handlerOffset = (currentLength - 1) * size * direction;\n\n else\n handlerOffset = (currentLength - 1) * size * -1;\n }\n else {\n handlerOffset += changedOffset * direction;\n }\n\n return handlerOffset;\n}\n\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _computeOffsetIfDataChanged = require("./compute-offset-if-data-changed");
|
|
4
|
+
|
|
5
|
+
describe("computeOffsetIfDataChanged", () => {
|
|
6
|
+
const size = 634;
|
|
7
|
+
it("should return the correct values, if index is 0", () => {
|
|
8
|
+
const index = 0;
|
|
9
|
+
const result = (0, _computeOffsetIfDataChanged.computeOffsetIfDataChanged)({
|
|
10
|
+
direction: -1,
|
|
11
|
+
previousLength: 4,
|
|
12
|
+
currentLength: 6,
|
|
13
|
+
size,
|
|
14
|
+
handlerOffset: index * size
|
|
15
|
+
});
|
|
16
|
+
expect(result).toMatchInlineSnapshot("0");
|
|
17
|
+
});
|
|
18
|
+
it("should return the correct values, if index is 1", () => {
|
|
19
|
+
const index = 1;
|
|
20
|
+
const result = (0, _computeOffsetIfDataChanged.computeOffsetIfDataChanged)({
|
|
21
|
+
direction: -1,
|
|
22
|
+
previousLength: 4,
|
|
23
|
+
currentLength: 6,
|
|
24
|
+
size,
|
|
25
|
+
handlerOffset: index * size
|
|
26
|
+
});
|
|
27
|
+
expect(result).toMatchInlineSnapshot("634");
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=compute-offset-if-data-changed.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["compute-offset-if-data-changed.test.ts"],"names":["describe","size","it","index","result","direction","previousLength","currentLength","handlerOffset","expect","toMatchInlineSnapshot"],"mappings":";;AAAA;;AAEAA,QAAQ,CAAC,4BAAD,EAA+B,MAAM;AAC3C,QAAMC,IAAI,GAAG,GAAb;AACAC,EAAAA,EAAE,CAAC,iDAAD,EAAoD,MAAM;AAC1D,UAAMC,KAAK,GAAG,CAAd;AACA,UAAMC,MAAM,GAAG,4DAA2B;AACxCC,MAAAA,SAAS,EAAE,CAAC,CAD4B;AAExCC,MAAAA,cAAc,EAAE,CAFwB;AAGxCC,MAAAA,aAAa,EAAE,CAHyB;AAIxCN,MAAAA,IAJwC;AAKxCO,MAAAA,aAAa,EAAEL,KAAK,GAAGF;AALiB,KAA3B,CAAf;AAQAQ,IAAAA,MAAM,CAACL,MAAD,CAAN,CAAeM,qBAAf,CAAqC,GAArC;AACD,GAXC,CAAF;AAaAR,EAAAA,EAAE,CAAC,iDAAD,EAAoD,MAAM;AAC1D,UAAMC,KAAK,GAAG,CAAd;AACA,UAAMC,MAAM,GAAG,4DAA2B;AACxCC,MAAAA,SAAS,EAAE,CAAC,CAD4B;AAExCC,MAAAA,cAAc,EAAE,CAFwB;AAGxCC,MAAAA,aAAa,EAAE,CAHyB;AAIxCN,MAAAA,IAJwC;AAKxCO,MAAAA,aAAa,EAAEL,KAAK,GAAGF;AALiB,KAA3B,CAAf;AAQAQ,IAAAA,MAAM,CAACL,MAAD,CAAN,CAAeM,qBAAf,CAAqC,KAArC;AACD,GAXC,CAAF;AAYD,CA3BO,CAAR","sourcesContent":["import { computeOffsetIfDataChanged } from \"./compute-offset-if-data-changed\";\n\ndescribe(\"computeOffsetIfDataChanged\", () => {\n const size = 634;\n it(\"should return the correct values, if index is 0\", () => {\n const index = 0;\n const result = computeOffsetIfDataChanged({\n direction: -1,\n previousLength: 4,\n currentLength: 6,\n size,\n handlerOffset: index * size,\n });\n\n expect(result).toMatchInlineSnapshot(\"0\");\n });\n\n it(\"should return the correct values, if index is 1\", () => {\n const index = 1;\n const result = computeOffsetIfDataChanged({\n direction: -1,\n previousLength: 4,\n currentLength: 6,\n size,\n handlerOffset: index * size,\n });\n\n expect(result).toMatchInlineSnapshot(\"634\");\n });\n});\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.computeOffsetIfSizeChanged = computeOffsetIfSizeChanged;
|
|
7
|
+
|
|
8
|
+
function computeOffsetIfSizeChanged(params) {
|
|
9
|
+
"worklet";
|
|
10
|
+
|
|
11
|
+
const {
|
|
12
|
+
handlerOffset,
|
|
13
|
+
prevSize,
|
|
14
|
+
size
|
|
15
|
+
} = params;
|
|
16
|
+
return handlerOffset / prevSize * size;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=compute-offset-if-size-changed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["compute-offset-if-size-changed.ts"],"names":["computeOffsetIfSizeChanged","params","handlerOffset","prevSize","size"],"mappings":";;;;;;;AAAO,SAASA,0BAAT,CAAoCC,MAApC,EAIJ;AACD;;AACA,QAAM;AAAEC,IAAAA,aAAF;AAAiBC,IAAAA,QAAjB;AAA2BC,IAAAA;AAA3B,MAAoCH,MAA1C;AAEA,SAAOC,aAAa,GAAGC,QAAhB,GAA2BC,IAAlC;AACD","sourcesContent":["export function computeOffsetIfSizeChanged(params: {\n handlerOffset: number\n prevSize: number\n size: number\n}) {\n \"worklet\";\n const { handlerOffset, prevSize, size } = params;\n\n return handlerOffset / prevSize * size;\n}\n\n"]}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _computeOffsetIfSizeChanged = require("./compute-offset-if-size-changed");
|
|
4
|
+
|
|
5
|
+
describe("computeOffsetIfSizeChanged", () => {
|
|
6
|
+
it("[CASE 1] should return the correct values when size does not change", () => {
|
|
7
|
+
const prevIndex = 1;
|
|
8
|
+
const prevSize = 500;
|
|
9
|
+
const size = 500;
|
|
10
|
+
const handlerOffset = prevIndex * size;
|
|
11
|
+
const result = (0, _computeOffsetIfSizeChanged.computeOffsetIfSizeChanged)({
|
|
12
|
+
prevSize,
|
|
13
|
+
size,
|
|
14
|
+
handlerOffset
|
|
15
|
+
});
|
|
16
|
+
const finallyIndex = result / size;
|
|
17
|
+
expect(finallyIndex).toEqual(prevIndex);
|
|
18
|
+
});
|
|
19
|
+
it("[CASE 2] should return the correct values when size changes from 500 to 400", () => {
|
|
20
|
+
const prevIndex = 1;
|
|
21
|
+
const prevSize = 500;
|
|
22
|
+
const size = 400;
|
|
23
|
+
const handlerOffset = prevIndex * prevSize;
|
|
24
|
+
const result = (0, _computeOffsetIfSizeChanged.computeOffsetIfSizeChanged)({
|
|
25
|
+
prevSize,
|
|
26
|
+
size,
|
|
27
|
+
handlerOffset
|
|
28
|
+
});
|
|
29
|
+
const finallyIndex = result / size;
|
|
30
|
+
expect(finallyIndex).toEqual(prevIndex);
|
|
31
|
+
});
|
|
32
|
+
it("[CASE 3] should return the correct values when size changes from 500 to 499", () => {
|
|
33
|
+
const prevIndex = 1;
|
|
34
|
+
const prevSize = 500;
|
|
35
|
+
const size = 499;
|
|
36
|
+
const handlerOffset = prevIndex * prevSize;
|
|
37
|
+
const result = (0, _computeOffsetIfSizeChanged.computeOffsetIfSizeChanged)({
|
|
38
|
+
prevSize,
|
|
39
|
+
size,
|
|
40
|
+
handlerOffset
|
|
41
|
+
});
|
|
42
|
+
const finallyIndex = result / size;
|
|
43
|
+
expect(finallyIndex).toEqual(prevIndex);
|
|
44
|
+
});
|
|
45
|
+
it("[CASE 4] should return the correct values when size changes from 500 to 501", () => {
|
|
46
|
+
const prevIndex = 1;
|
|
47
|
+
const prevSize = 500;
|
|
48
|
+
const size = 501;
|
|
49
|
+
const handlerOffset = prevIndex * prevSize;
|
|
50
|
+
const result = (0, _computeOffsetIfSizeChanged.computeOffsetIfSizeChanged)({
|
|
51
|
+
prevSize,
|
|
52
|
+
size,
|
|
53
|
+
handlerOffset
|
|
54
|
+
});
|
|
55
|
+
const finallyIndex = result / size;
|
|
56
|
+
expect(finallyIndex).toEqual(prevIndex);
|
|
57
|
+
});
|
|
58
|
+
it("[CASE 5] should return the correct values when size changes from 224 to 524", () => {
|
|
59
|
+
const prevIndex = 1;
|
|
60
|
+
const prevSize = 224;
|
|
61
|
+
const size = 524;
|
|
62
|
+
const handlerOffset = prevIndex * prevSize;
|
|
63
|
+
const result = (0, _computeOffsetIfSizeChanged.computeOffsetIfSizeChanged)({
|
|
64
|
+
prevSize,
|
|
65
|
+
size,
|
|
66
|
+
handlerOffset
|
|
67
|
+
});
|
|
68
|
+
const finallyIndex = result / size;
|
|
69
|
+
expect(finallyIndex).toEqual(prevIndex);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
//# sourceMappingURL=compute-offset-if-size-changed.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["compute-offset-if-size-changed.test.ts"],"names":["describe","it","prevIndex","prevSize","size","handlerOffset","result","finallyIndex","expect","toEqual"],"mappings":";;AAAA;;AAEAA,QAAQ,CAAC,4BAAD,EAA+B,MAAM;AAC3CC,EAAAA,EAAE,CAAC,qEAAD,EAAwE,MAAM;AAC9E,UAAMC,SAAS,GAAG,CAAlB;AACA,UAAMC,QAAQ,GAAG,GAAjB;AACA,UAAMC,IAAI,GAAG,GAAb;AACA,UAAMC,aAAa,GAAGH,SAAS,GAAGE,IAAlC;AACA,UAAME,MAAM,GAAG,4DAA2B;AACxCH,MAAAA,QADwC;AAExCC,MAAAA,IAFwC;AAGxCC,MAAAA;AAHwC,KAA3B,CAAf;AAMA,UAAME,YAAY,GAAGD,MAAM,GAAGF,IAA9B;AACAI,IAAAA,MAAM,CAACD,YAAD,CAAN,CAAqBE,OAArB,CAA6BP,SAA7B;AACD,GAbC,CAAF;AAeAD,EAAAA,EAAE,CAAC,6EAAD,EAAgF,MAAM;AACtF,UAAMC,SAAS,GAAG,CAAlB;AACA,UAAMC,QAAQ,GAAG,GAAjB;AACA,UAAMC,IAAI,GAAG,GAAb;AACA,UAAMC,aAAa,GAAGH,SAAS,GAAGC,QAAlC;AACA,UAAMG,MAAM,GAAG,4DAA2B;AACxCH,MAAAA,QADwC;AAExCC,MAAAA,IAFwC;AAGxCC,MAAAA;AAHwC,KAA3B,CAAf;AAMA,UAAME,YAAY,GAAGD,MAAM,GAAGF,IAA9B;AACAI,IAAAA,MAAM,CAACD,YAAD,CAAN,CAAqBE,OAArB,CAA6BP,SAA7B;AACD,GAbC,CAAF;AAeAD,EAAAA,EAAE,CAAC,6EAAD,EAAgF,MAAM;AACtF,UAAMC,SAAS,GAAG,CAAlB;AACA,UAAMC,QAAQ,GAAG,GAAjB;AACA,UAAMC,IAAI,GAAG,GAAb;AACA,UAAMC,aAAa,GAAGH,SAAS,GAAGC,QAAlC;AACA,UAAMG,MAAM,GAAG,4DAA2B;AACxCH,MAAAA,QADwC;AAExCC,MAAAA,IAFwC;AAGxCC,MAAAA;AAHwC,KAA3B,CAAf;AAMA,UAAME,YAAY,GAAGD,MAAM,GAAGF,IAA9B;AACAI,IAAAA,MAAM,CAACD,YAAD,CAAN,CAAqBE,OAArB,CAA6BP,SAA7B;AACD,GAbC,CAAF;AAeAD,EAAAA,EAAE,CAAC,6EAAD,EAAgF,MAAM;AACtF,UAAMC,SAAS,GAAG,CAAlB;AACA,UAAMC,QAAQ,GAAG,GAAjB;AACA,UAAMC,IAAI,GAAG,GAAb;AACA,UAAMC,aAAa,GAAGH,SAAS,GAAGC,QAAlC;AACA,UAAMG,MAAM,GAAG,4DAA2B;AACxCH,MAAAA,QADwC;AAExCC,MAAAA,IAFwC;AAGxCC,MAAAA;AAHwC,KAA3B,CAAf;AAMA,UAAME,YAAY,GAAGD,MAAM,GAAGF,IAA9B;AACAI,IAAAA,MAAM,CAACD,YAAD,CAAN,CAAqBE,OAArB,CAA6BP,SAA7B;AACD,GAbC,CAAF;AAeAD,EAAAA,EAAE,CAAC,6EAAD,EAAgF,MAAM;AACtF,UAAMC,SAAS,GAAG,CAAlB;AACA,UAAMC,QAAQ,GAAG,GAAjB;AACA,UAAMC,IAAI,GAAG,GAAb;AACA,UAAMC,aAAa,GAAGH,SAAS,GAAGC,QAAlC;AACA,UAAMG,MAAM,GAAG,4DAA2B;AACxCH,MAAAA,QADwC;AAExCC,MAAAA,IAFwC;AAGxCC,MAAAA;AAHwC,KAA3B,CAAf;AAMA,UAAME,YAAY,GAAGD,MAAM,GAAGF,IAA9B;AACAI,IAAAA,MAAM,CAACD,YAAD,CAAN,CAAqBE,OAArB,CAA6BP,SAA7B;AACD,GAbC,CAAF;AAcD,CA3EO,CAAR","sourcesContent":["import { computeOffsetIfSizeChanged } from \"./compute-offset-if-size-changed\";\n\ndescribe(\"computeOffsetIfSizeChanged\", () => {\n it(\"[CASE 1] should return the correct values when size does not change\", () => {\n const prevIndex = 1;\n const prevSize = 500;\n const size = 500;\n const handlerOffset = prevIndex * size;\n const result = computeOffsetIfSizeChanged({\n prevSize,\n size,\n handlerOffset,\n });\n\n const finallyIndex = result / size;\n expect(finallyIndex).toEqual(prevIndex);\n });\n\n it(\"[CASE 2] should return the correct values when size changes from 500 to 400\", () => {\n const prevIndex = 1;\n const prevSize = 500;\n const size = 400;\n const handlerOffset = prevIndex * prevSize;\n const result = computeOffsetIfSizeChanged({\n prevSize,\n size,\n handlerOffset,\n });\n\n const finallyIndex = result / size;\n expect(finallyIndex).toEqual(prevIndex);\n });\n\n it(\"[CASE 3] should return the correct values when size changes from 500 to 499\", () => {\n const prevIndex = 1;\n const prevSize = 500;\n const size = 499;\n const handlerOffset = prevIndex * prevSize;\n const result = computeOffsetIfSizeChanged({\n prevSize,\n size,\n handlerOffset,\n });\n\n const finallyIndex = result / size;\n expect(finallyIndex).toEqual(prevIndex);\n });\n\n it(\"[CASE 4] should return the correct values when size changes from 500 to 501\", () => {\n const prevIndex = 1;\n const prevSize = 500;\n const size = 501;\n const handlerOffset = prevIndex * prevSize;\n const result = computeOffsetIfSizeChanged({\n prevSize,\n size,\n handlerOffset,\n });\n\n const finallyIndex = result / size;\n expect(finallyIndex).toEqual(prevIndex);\n });\n\n it(\"[CASE 5] should return the correct values when size changes from 224 to 524\", () => {\n const prevIndex = 1;\n const prevSize = 224;\n const size = 524;\n const handlerOffset = prevIndex * prevSize;\n const result = computeOffsetIfSizeChanged({\n prevSize,\n size,\n handlerOffset,\n });\n\n const finallyIndex = result / size;\n expect(finallyIndex).toEqual(prevIndex);\n });\n});\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _computeOffsetIfDataChanged = require("./compute-offset-if-data-changed");
|
|
4
4
|
|
|
5
5
|
describe("should work as expected", () => {
|
|
6
6
|
const size = 375;
|
|
@@ -26,7 +26,7 @@ describe("should work as expected", () => {
|
|
|
26
26
|
|
|
27
27
|
it("The direction is negative, And changing length of data set from 4 to 3, the new index will to be 2.", async () => {
|
|
28
28
|
const currentIndex = 1;
|
|
29
|
-
const handlerOffset = (0,
|
|
29
|
+
const handlerOffset = (0, _computeOffsetIfDataChanged.computeOffsetIfDataChanged)(params({
|
|
30
30
|
currentIndex,
|
|
31
31
|
direction: "negative",
|
|
32
32
|
previousLength: 4,
|
|
@@ -35,7 +35,7 @@ describe("should work as expected", () => {
|
|
|
35
35
|
expect(handlerOffset / size).toBe(2 * positive);
|
|
36
36
|
});
|
|
37
37
|
it("The direction is negative, Changing length of data set from 4 to 3, the index remains original.", async () => {
|
|
38
|
-
const handlerOffset = (0,
|
|
38
|
+
const handlerOffset = (0, _computeOffsetIfDataChanged.computeOffsetIfDataChanged)(params({
|
|
39
39
|
currentIndex: 2,
|
|
40
40
|
direction: "negative",
|
|
41
41
|
previousLength: 4,
|
|
@@ -44,7 +44,7 @@ describe("should work as expected", () => {
|
|
|
44
44
|
expect(handlerOffset / size).toBe(1 * negative);
|
|
45
45
|
});
|
|
46
46
|
it("The direction is positive, Changing length of data set from 4 to 5, the index remains original.", async () => {
|
|
47
|
-
const handlerOffset = (0,
|
|
47
|
+
const handlerOffset = (0, _computeOffsetIfDataChanged.computeOffsetIfDataChanged)(params({
|
|
48
48
|
currentIndex: 3,
|
|
49
49
|
direction: "positive",
|
|
50
50
|
previousLength: 4,
|
|
@@ -53,7 +53,7 @@ describe("should work as expected", () => {
|
|
|
53
53
|
expect(handlerOffset / size).toBe(3 * positive);
|
|
54
54
|
});
|
|
55
55
|
it("The direction is negative, Changing length of data set from 4 to 5, the index remains original.", async () => {
|
|
56
|
-
const handlerOffset = (0,
|
|
56
|
+
const handlerOffset = (0, _computeOffsetIfDataChanged.computeOffsetIfDataChanged)(params({
|
|
57
57
|
currentIndex: 3,
|
|
58
58
|
direction: "negative",
|
|
59
59
|
previousLength: 4,
|
|
@@ -62,7 +62,7 @@ describe("should work as expected", () => {
|
|
|
62
62
|
expect(handlerOffset / size).toBe(4 * negative);
|
|
63
63
|
});
|
|
64
64
|
it("Changing length of data set from 0 to 3, the index remains original.", async () => {
|
|
65
|
-
const handlerOffset = (0,
|
|
65
|
+
const handlerOffset = (0, _computeOffsetIfDataChanged.computeOffsetIfDataChanged)(params({
|
|
66
66
|
currentIndex: 0,
|
|
67
67
|
direction: "positive",
|
|
68
68
|
previousLength: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.test.ts"],"names":["describe","size","positive","negative","params","currentIndex","direction","_direction","previousLength","currentLength","handlerOffset","it","expect","toBe"],"mappings":";;AAAA;;AAEAA,QAAQ,CAAC,yBAAD,EAA4B,MAAM;AACxC,QAAMC,IAAI,GAAG,GAAb;AACA,QAAMC,QAAQ,GAAG,CAAC,CAAlB;AACA,QAAMC,QAAQ,GAAG,CAAjB;;AAEA,QAAMC,MAAM,GAAIA,MAAD,IAKT;AACJ,UAAM;AAAEC,MAAAA,YAAF;AAAgBC,MAAAA,SAAS,EAAEC,UAA3B;AAAuCC,MAAAA,cAAvC;AAAuDC,MAAAA;AAAvD,QAAyEL,MAA/E;AACA,UAAME,SAAS,GAAGC,UAAU,KAAK,UAAf,GAA4BJ,QAA5B,GAAuCD,QAAzD;AACA,WAAO;AACLI,MAAAA,SADK;AAELI,MAAAA,aAAa,EAAET,IAAI,GAAGI,YAAP,GAAsBC,SAFhC;AAGLL,MAAAA,IAHK;AAILO,MAAAA,cAJK;AAKLC,MAAAA;AALK,KAAP;AAOD,GAfD;;AAiBAE,EAAAA,EAAE,CAAC,qGAAD,EAAwG,YAAY;AACpH,UAAMN,YAAY,GAAG,CAArB;AACA,UAAMK,aAAa,GAAG,
|
|
1
|
+
{"version":3,"sources":["index.test.ts"],"names":["describe","size","positive","negative","params","currentIndex","direction","_direction","previousLength","currentLength","handlerOffset","it","expect","toBe"],"mappings":"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","sourcesContent":["import { computeOffsetIfDataChanged } from \"./compute-offset-if-data-changed\";\n\ndescribe(\"should work as expected\", () => {\n const size = 375;\n const positive = -1;\n const negative = 1;\n\n const params = (params: {\n direction: \"positive\" | \"negative\"\n currentIndex: number\n previousLength: number\n currentLength: number\n }) => {\n const { currentIndex, direction: _direction, previousLength, currentLength } = params;\n const direction = _direction === \"negative\" ? negative : positive;\n return {\n direction,\n handlerOffset: size * currentIndex * direction,\n size,\n previousLength,\n currentLength,\n };\n };\n\n it(\"The direction is negative, And changing length of data set from 4 to 3, the new index will to be 2.\", async () => {\n const currentIndex = 1;\n const handlerOffset = computeOffsetIfDataChanged(params({\n currentIndex,\n direction: \"negative\",\n previousLength: 4,\n currentLength: 3,\n }));\n\n expect(handlerOffset / size).toBe(2 * positive);\n });\n\n it(\"The direction is negative, Changing length of data set from 4 to 3, the index remains original.\", async () => {\n const handlerOffset = computeOffsetIfDataChanged(params({\n currentIndex: 2,\n direction: \"negative\",\n previousLength: 4,\n currentLength: 3,\n }));\n\n expect(handlerOffset / size).toBe(1 * negative);\n });\n\n it(\"The direction is positive, Changing length of data set from 4 to 5, the index remains original.\", async () => {\n const handlerOffset = computeOffsetIfDataChanged(params({\n currentIndex: 3,\n direction: \"positive\",\n previousLength: 4,\n currentLength: 5,\n }));\n\n expect(handlerOffset / size).toBe(3 * positive);\n });\n\n it(\"The direction is negative, Changing length of data set from 4 to 5, the index remains original.\", async () => {\n const handlerOffset = computeOffsetIfDataChanged(params({\n currentIndex: 3,\n direction: \"negative\",\n previousLength: 4,\n currentLength: 5,\n }));\n\n expect(handlerOffset / size).toBe(4 * negative);\n });\n\n it(\"Changing length of data set from 0 to 3, the index remains original.\", async () => {\n const handlerOffset = computeOffsetIfDataChanged(params({\n currentIndex: 0,\n direction: \"positive\",\n previousLength: 0,\n currentLength: 3,\n }));\n\n expect(handlerOffset / size).toBe(0 * positive);\n });\n});\n"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import Animated, { useAnimatedStyle, useDerivedValue } from "react-native-reanimated";
|
|
3
|
+
import renderer from "react-test-renderer";
|
|
4
|
+
describe("useSharedValue", () => {
|
|
5
|
+
it("retains value on rerender", () => {
|
|
6
|
+
const initialValue = 0;
|
|
7
|
+
const updatedValue = 1;
|
|
8
|
+
|
|
9
|
+
const TestComponent = props => {
|
|
10
|
+
const opacity = useDerivedValue(() => props.value, [props.value]);
|
|
11
|
+
const animatedStyle = useAnimatedStyle(() => ({
|
|
12
|
+
opacity: opacity.value
|
|
13
|
+
}), [opacity]);
|
|
14
|
+
return /*#__PURE__*/React.createElement(Animated.View, {
|
|
15
|
+
style: animatedStyle
|
|
16
|
+
});
|
|
17
|
+
}; // When rendering with initial value
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
const wrapper = renderer.create( /*#__PURE__*/React.createElement(TestComponent, {
|
|
21
|
+
key: "box",
|
|
22
|
+
value: initialValue
|
|
23
|
+
}));
|
|
24
|
+
expect(typeof wrapper.root.children[0] !== "string" ? wrapper.root.children[0].props.style.animatedStyle.current.value.opacity : false).toBe(initialValue); // When rendering with updated value
|
|
25
|
+
|
|
26
|
+
wrapper.update( /*#__PURE__*/React.createElement(TestComponent, {
|
|
27
|
+
key: "box",
|
|
28
|
+
value: updatedValue
|
|
29
|
+
}));
|
|
30
|
+
expect(typeof wrapper.root.children[0] !== "string" ? wrapper.root.children[0].props.style.animatedStyle.current.value.opacity : false).toBe(initialValue);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=rnr-demo.test.js.map
|
|
@@ -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"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useSharedValue, useAnimatedReaction } from "react-native-reanimated";
|
|
2
|
-
import {
|
|
2
|
+
import { computeOffsetIfDataChanged } from "../utils/compute-offset-if-data-changed";
|
|
3
|
+
import { computeOffsetIfSizeChanged } from "../utils/compute-offset-if-size-changed";
|
|
3
4
|
import { handlerOffsetDirection } from "../utils/handleroffset-direction";
|
|
4
5
|
export function useCommonVariables(props) {
|
|
5
6
|
const {
|
|
@@ -18,6 +19,7 @@ export function useCommonVariables(props) {
|
|
|
18
19
|
|
|
19
20
|
const handlerOffset = defaultScrollOffsetValue !== null && defaultScrollOffsetValue !== void 0 ? defaultScrollOffsetValue : _handlerOffset;
|
|
20
21
|
const prevDataLength = useSharedValue(dataLength);
|
|
22
|
+
const prevSize = useSharedValue(size);
|
|
21
23
|
/**
|
|
22
24
|
* When data changes, we need to compute new index for handlerOffset
|
|
23
25
|
*/
|
|
@@ -43,7 +45,7 @@ export function useCommonVariables(props) {
|
|
|
43
45
|
if (shouldComputed) {
|
|
44
46
|
// direction -> 1 | -1
|
|
45
47
|
const direction = handlerOffsetDirection(handlerOffset);
|
|
46
|
-
handlerOffset.value =
|
|
48
|
+
handlerOffset.value = computeOffsetIfDataChanged({
|
|
47
49
|
direction,
|
|
48
50
|
previousLength,
|
|
49
51
|
currentLength,
|
|
@@ -52,6 +54,35 @@ export function useCommonVariables(props) {
|
|
|
52
54
|
});
|
|
53
55
|
}
|
|
54
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]);
|
|
55
86
|
return {
|
|
56
87
|
size,
|
|
57
88
|
validLength: dataLength - 1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useCommonVariables.ts"],"names":["useSharedValue","useAnimatedReaction","
|
|
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":"AACA,SAASA,cAAT,EAAyBC,mBAAzB,QAAoD,yBAApD;AAIA,SAASC,0BAAT,QAA2C,yCAA3C;AACA,SAASC,0BAAT,QAA2C,yCAA3C;AACA,SAASC,sBAAT,QAAuC,kCAAvC;AAQA,OAAO,SAASC,kBAAT,CACLC,KADK,EAEa;AAClB,QAAM;AACJC,IAAAA,QADI;AAEJC,IAAAA,MAFI;AAGJC,IAAAA,KAHI;AAIJC,IAAAA,UAJI;AAKJC,IAAAA,YALI;AAMJC,IAAAA,wBANI;AAOJC,IAAAA;AAPI,MAQFP,KARJ;AASA,QAAMQ,IAAI,GAAGP,QAAQ,GAAGC,MAAH,GAAYC,KAAjC;AACA,QAAMM,yBAAyB,GAAG,CAACC,IAAI,CAACC,GAAL,CAASN,YAAY,GAAGG,IAAxB,CAAnC;;AACA,QAAMI,cAAc,GAAGlB,cAAc,CAASe,yBAAT,CAArC;;AACA,QAAMI,aAAa,GAAGP,wBAAH,aAAGA,wBAAH,cAAGA,wBAAH,GAA+BM,cAAlD;AACA,QAAME,cAAc,GAAGpB,cAAc,CAACU,UAAD,CAArC;AACA,QAAMW,QAAQ,GAAGrB,cAAc,CAACc,IAAD,CAA/B;AAEA;AACF;AACA;;AACEb,EAAAA,mBAAmB,CAAC,MAAM;AACxB,UAAMqB,cAAc,GAAGF,cAAc,CAACG,KAAtC;AACA,UAAMC,aAAa,GAAGd,UAAtB;AACA,UAAMe,eAAe,GAAGH,cAAc,KAAKE,aAA3C;AACA,UAAME,cAAc,GAAID,eAAe,IAAIZ,IAA3C;AAEA,QAAIa,cAAJ,EACEN,cAAc,CAACG,KAAf,GAAuBb,UAAvB;AAEF,WAAO;AACLgB,MAAAA,cADK;AAELJ,MAAAA,cAFK;AAGLE,MAAAA;AAHK,KAAP;AAKD,GAdkB,EAchB,QAAuD;AAAA,QAAtD;AAAEE,MAAAA,cAAF;AAAkBJ,MAAAA,cAAlB;AAAkCE,MAAAA;AAAlC,KAAsD;;AACxD,QAAIE,cAAJ,EAAoB;AAClB;AACA,YAAMC,SAAS,GAAGvB,sBAAsB,CAACe,aAAD,CAAxC;AAEAA,MAAAA,aAAa,CAACI,KAAd,GAAsBrB,0BAA0B,CAAC;AAC/CyB,QAAAA,SAD+C;AAE/CL,QAAAA,cAF+C;AAG/CE,QAAAA,aAH+C;AAI/CV,QAAAA,IAJ+C;AAK/CK,QAAAA,aAAa,EAAEA,aAAa,CAACI;AALkB,OAAD,CAAhD;AAOD;AACF,GA3BkB,EA2BhB,CAACb,UAAD,EAAaG,IAAb,CA3BgB,CAAnB;AA6BA;AACF;AACA;;AACEZ,EAAAA,mBAAmB,CAAC,MAAM;AACxB,UAAM2B,YAAY,GAAGP,QAAQ,CAACE,KAA9B;AACA,UAAMM,aAAa,GAAGD,YAAY,KAAKd,IAAvC;AACA,UAAMY,cAAc,GAAGG,aAAvB;AAEA,QAAIH,cAAJ,EACEL,QAAQ,CAACE,KAAT,GAAiBT,IAAjB;AAEF,WAAO;AACLY,MAAAA,cADK;AAELE,MAAAA,YAFK;AAGLd,MAAAA;AAHK,KAAP;AAKD,GAbkB,EAahB,SAA4C;AAAA,QAA3C;AAAEY,MAAAA,cAAF;AAAkBE,MAAAA,YAAlB;AAAgCd,MAAAA;AAAhC,KAA2C;;AAC7C,QAAIY,cAAJ,EAAoB;AAClBP,MAAAA,aAAa,CAACI,KAAd,GAAsBpB,0BAA0B,CAAC;AAC/CgB,QAAAA,aAAa,EAAEA,aAAa,CAACI,KADkB;AAE/CF,QAAAA,QAAQ,EAAEO,YAFqC;AAG/Cd,QAAAA;AAH+C,OAAD,CAAhD;AAKD;AACF,GArBkB,EAqBhB,CAACA,IAAD,CArBgB,CAAnB;AAuBA,SAAO;AACLA,IAAAA,IADK;AAELgB,IAAAA,WAAW,EAAEpB,UAAU,GAAG,CAFrB;AAGLS,IAAAA;AAHK,GAAP;AAKD","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"]}
|