@shopify/flash-list 2.0.3 → 2.1.0
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/dist/AnimatedFlashList.js +4 -6
- package/dist/AnimatedFlashList.js.map +1 -1
- package/dist/FlashList.js +1 -5
- package/dist/FlashList.js.map +1 -1
- package/dist/FlashListProps.d.ts +9 -1
- package/dist/FlashListProps.d.ts.map +1 -1
- package/dist/FlashListProps.js +1 -4
- package/dist/FlashListProps.js.map +1 -1
- package/dist/FlashListRef.js +1 -2
- package/dist/benchmark/AutoScrollHelper.js +22 -30
- package/dist/benchmark/AutoScrollHelper.js.map +1 -1
- package/dist/benchmark/JSFPSMonitor.js +27 -33
- package/dist/benchmark/JSFPSMonitor.js.map +1 -1
- package/dist/benchmark/roundToDecimalPlaces.js +2 -5
- package/dist/benchmark/roundToDecimalPlaces.js.map +1 -1
- package/dist/benchmark/useBenchmark.d.ts +9 -1
- package/dist/benchmark/useBenchmark.d.ts.map +1 -1
- package/dist/benchmark/useBenchmark.js +86 -95
- package/dist/benchmark/useBenchmark.js.map +1 -1
- package/dist/benchmark/useDataMultiplier.js +6 -10
- package/dist/benchmark/useDataMultiplier.js.map +1 -1
- package/dist/benchmark/useFlatListBenchmark.d.ts +4 -1
- package/dist/benchmark/useFlatListBenchmark.d.ts.map +1 -1
- package/dist/benchmark/useFlatListBenchmark.js +73 -81
- package/dist/benchmark/useFlatListBenchmark.js.map +1 -1
- package/dist/errors/ErrorMessages.js +1 -4
- package/dist/errors/ErrorMessages.js.map +1 -1
- package/dist/errors/WarningMessages.d.ts +1 -0
- package/dist/errors/WarningMessages.d.ts.map +1 -1
- package/dist/errors/WarningMessages.js +2 -4
- package/dist/errors/WarningMessages.js.map +1 -1
- package/dist/index.js +17 -35
- package/dist/index.js.map +1 -1
- package/dist/isNewArch.js +6 -9
- package/dist/isNewArch.js.map +1 -1
- package/dist/native/config/PlatformHelper.android.js +2 -5
- package/dist/native/config/PlatformHelper.android.js.map +1 -1
- package/dist/native/config/PlatformHelper.ios.js +2 -5
- package/dist/native/config/PlatformHelper.ios.js.map +1 -1
- package/dist/native/config/PlatformHelper.js +2 -5
- package/dist/native/config/PlatformHelper.js.map +1 -1
- package/dist/native/config/PlatformHelper.web.js +2 -5
- package/dist/native/config/PlatformHelper.web.js.map +1 -1
- package/dist/recyclerview/LayoutCommitObserver.js +20 -24
- package/dist/recyclerview/LayoutCommitObserver.js.map +1 -1
- package/dist/recyclerview/RecyclerView.d.ts.map +1 -1
- package/dist/recyclerview/RecyclerView.js +117 -107
- package/dist/recyclerview/RecyclerView.js.map +1 -1
- package/dist/recyclerview/RecyclerViewContextProvider.js +7 -12
- package/dist/recyclerview/RecyclerViewContextProvider.js.map +1 -1
- package/dist/recyclerview/RecyclerViewManager.d.ts +2 -0
- package/dist/recyclerview/RecyclerViewManager.d.ts.map +1 -1
- package/dist/recyclerview/RecyclerViewManager.js +146 -164
- package/dist/recyclerview/RecyclerViewManager.js.map +1 -1
- package/dist/recyclerview/RecyclerViewProps.js +1 -2
- package/dist/recyclerview/RenderStackManager.js +97 -188
- package/dist/recyclerview/RenderStackManager.js.map +1 -1
- package/dist/recyclerview/ViewHolder.js +16 -20
- package/dist/recyclerview/ViewHolder.js.map +1 -1
- package/dist/recyclerview/ViewHolderCollection.js +26 -30
- package/dist/recyclerview/ViewHolderCollection.js.map +1 -1
- package/dist/recyclerview/components/CompatScroller.js +6 -7
- package/dist/recyclerview/components/CompatScroller.js.map +1 -1
- package/dist/recyclerview/components/CompatView.js +6 -7
- package/dist/recyclerview/components/CompatView.js.map +1 -1
- package/dist/recyclerview/components/ScrollAnchor.js +10 -15
- package/dist/recyclerview/components/ScrollAnchor.js.map +1 -1
- package/dist/recyclerview/components/StickyHeaders.js +34 -40
- package/dist/recyclerview/components/StickyHeaders.js.map +1 -1
- package/dist/recyclerview/helpers/ConsecutiveNumbers.js +39 -66
- package/dist/recyclerview/helpers/ConsecutiveNumbers.js.map +1 -1
- package/dist/recyclerview/helpers/EngagedIndicesTracker.js +57 -63
- package/dist/recyclerview/helpers/EngagedIndicesTracker.js.map +1 -1
- package/dist/recyclerview/helpers/RenderTimeTracker.js +19 -24
- package/dist/recyclerview/helpers/RenderTimeTracker.js.map +1 -1
- package/dist/recyclerview/helpers/VelocityTracker.js +16 -22
- package/dist/recyclerview/helpers/VelocityTracker.js.map +1 -1
- package/dist/recyclerview/hooks/useBoundDetection.js +37 -40
- package/dist/recyclerview/hooks/useBoundDetection.js.map +1 -1
- package/dist/recyclerview/hooks/useLayoutState.js +9 -15
- package/dist/recyclerview/hooks/useLayoutState.js.map +1 -1
- package/dist/recyclerview/hooks/useMappingHelper.js +6 -10
- package/dist/recyclerview/hooks/useMappingHelper.js.map +1 -1
- package/dist/recyclerview/hooks/useOnLoad.d.ts.map +1 -1
- package/dist/recyclerview/hooks/useOnLoad.js +17 -22
- package/dist/recyclerview/hooks/useOnLoad.js.map +1 -1
- package/dist/recyclerview/hooks/useRecyclerViewController.d.ts.map +1 -1
- package/dist/recyclerview/hooks/useRecyclerViewController.js +169 -188
- package/dist/recyclerview/hooks/useRecyclerViewController.js.map +1 -1
- package/dist/recyclerview/hooks/useRecyclerViewManager.js +12 -17
- package/dist/recyclerview/hooks/useRecyclerViewManager.js.map +1 -1
- package/dist/recyclerview/hooks/useRecyclingState.js +10 -14
- package/dist/recyclerview/hooks/useRecyclingState.js.map +1 -1
- package/dist/recyclerview/hooks/useSecondaryProps.js +24 -30
- package/dist/recyclerview/hooks/useSecondaryProps.js.map +1 -1
- package/dist/recyclerview/hooks/useUnmountAwareCallbacks.js +17 -22
- package/dist/recyclerview/hooks/useUnmountAwareCallbacks.js.map +1 -1
- package/dist/recyclerview/hooks/useUnmountFlag.js +5 -9
- package/dist/recyclerview/hooks/useUnmountFlag.js.map +1 -1
- package/dist/recyclerview/layout-managers/GridLayoutManager.js +61 -80
- package/dist/recyclerview/layout-managers/GridLayoutManager.js.map +1 -1
- package/dist/recyclerview/layout-managers/LayoutManager.js +83 -123
- package/dist/recyclerview/layout-managers/LayoutManager.js.map +1 -1
- package/dist/recyclerview/layout-managers/LinearLayoutManager.js +51 -91
- package/dist/recyclerview/layout-managers/LinearLayoutManager.js.map +1 -1
- package/dist/recyclerview/layout-managers/MasonryLayoutManager.js +77 -96
- package/dist/recyclerview/layout-managers/MasonryLayoutManager.js.map +1 -1
- package/dist/recyclerview/utils/adjustOffsetForRTL.js +1 -4
- package/dist/recyclerview/utils/adjustOffsetForRTL.js.map +1 -1
- package/dist/recyclerview/utils/componentUtils.js +4 -9
- package/dist/recyclerview/utils/componentUtils.js.map +1 -1
- package/dist/recyclerview/utils/findVisibleIndex.js +9 -13
- package/dist/recyclerview/utils/findVisibleIndex.js.map +1 -1
- package/dist/recyclerview/utils/measureLayout.js +12 -20
- package/dist/recyclerview/utils/measureLayout.js.map +1 -1
- package/dist/recyclerview/utils/measureLayout.web.js +15 -23
- package/dist/recyclerview/utils/measureLayout.web.js.map +1 -1
- package/dist/recyclerview/viewability/ViewToken.js +1 -2
- package/dist/recyclerview/viewability/ViewabilityHelper.js +34 -41
- package/dist/recyclerview/viewability/ViewabilityHelper.js.map +1 -1
- package/dist/recyclerview/viewability/ViewabilityManager.js +48 -61
- package/dist/recyclerview/viewability/ViewabilityManager.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/AverageWindow.js +28 -39
- package/dist/utils/AverageWindow.js.map +1 -1
- package/package.json +4 -6
- package/src/FlashListProps.ts +8 -1
- package/src/benchmark/useBenchmark.ts +47 -4
- package/src/benchmark/useFlatListBenchmark.ts +38 -5
- package/src/errors/WarningMessages.ts +2 -0
- package/src/recyclerview/RecyclerView.tsx +18 -5
- package/src/recyclerview/RecyclerViewManager.ts +12 -0
- package/src/recyclerview/hooks/useOnLoad.ts +1 -0
- package/src/recyclerview/hooks/useRecyclerViewController.tsx +7 -4
- package/dist/__tests__/AverageWindow.test.d.ts +0 -2
- package/dist/__tests__/AverageWindow.test.d.ts.map +0 -1
- package/dist/__tests__/AverageWindow.test.js +0 -104
- package/dist/__tests__/AverageWindow.test.js.map +0 -1
- package/dist/__tests__/ConsecutiveNumbers.test.d.ts +0 -2
- package/dist/__tests__/ConsecutiveNumbers.test.d.ts.map +0 -1
- package/dist/__tests__/ConsecutiveNumbers.test.js +0 -224
- package/dist/__tests__/ConsecutiveNumbers.test.js.map +0 -1
- package/dist/__tests__/GridLayoutManager.test.d.ts +0 -2
- package/dist/__tests__/GridLayoutManager.test.d.ts.map +0 -1
- package/dist/__tests__/GridLayoutManager.test.js +0 -69
- package/dist/__tests__/GridLayoutManager.test.js.map +0 -1
- package/dist/__tests__/LayoutCommitObserver.test.d.ts +0 -2
- package/dist/__tests__/LayoutCommitObserver.test.d.ts.map +0 -1
- package/dist/__tests__/LayoutCommitObserver.test.js +0 -37
- package/dist/__tests__/LayoutCommitObserver.test.js.map +0 -1
- package/dist/__tests__/LinearLayoutManager.test.d.ts +0 -2
- package/dist/__tests__/LinearLayoutManager.test.d.ts.map +0 -1
- package/dist/__tests__/LinearLayoutManager.test.js +0 -140
- package/dist/__tests__/LinearLayoutManager.test.js.map +0 -1
- package/dist/__tests__/MasonryLayoutManager.test.d.ts +0 -2
- package/dist/__tests__/MasonryLayoutManager.test.d.ts.map +0 -1
- package/dist/__tests__/MasonryLayoutManager.test.js +0 -148
- package/dist/__tests__/MasonryLayoutManager.test.js.map +0 -1
- package/dist/__tests__/RecyclerView.test.d.ts +0 -2
- package/dist/__tests__/RecyclerView.test.d.ts.map +0 -1
- package/dist/__tests__/RecyclerView.test.js +0 -103
- package/dist/__tests__/RecyclerView.test.js.map +0 -1
- package/dist/__tests__/RenderStackManager.test.d.ts +0 -2
- package/dist/__tests__/RenderStackManager.test.d.ts.map +0 -1
- package/dist/__tests__/RenderStackManager.test.js +0 -485
- package/dist/__tests__/RenderStackManager.test.js.map +0 -1
- package/dist/__tests__/ViewabilityHelper.test.d.ts +0 -2
- package/dist/__tests__/ViewabilityHelper.test.d.ts.map +0 -1
- package/dist/__tests__/ViewabilityHelper.test.js +0 -186
- package/dist/__tests__/ViewabilityHelper.test.js.map +0 -1
- package/dist/__tests__/findVisibleIndex.test.d.ts +0 -2
- package/dist/__tests__/findVisibleIndex.test.d.ts.map +0 -1
- package/dist/__tests__/findVisibleIndex.test.js +0 -259
- package/dist/__tests__/findVisibleIndex.test.js.map +0 -1
- package/dist/__tests__/helpers/createLayoutManager.d.ts +0 -34
- package/dist/__tests__/helpers/createLayoutManager.d.ts.map +0 -1
- package/dist/__tests__/helpers/createLayoutManager.js +0 -110
- package/dist/__tests__/helpers/createLayoutManager.js.map +0 -1
- package/dist/__tests__/useUnmountAwareCallbacks.test.d.ts +0 -2
- package/dist/__tests__/useUnmountAwareCallbacks.test.d.ts.map +0 -1
- package/dist/__tests__/useUnmountAwareCallbacks.test.js +0 -185
- package/dist/__tests__/useUnmountAwareCallbacks.test.js.map +0 -1
- package/src/__tests__/AverageWindow.test.ts +0 -128
- package/src/__tests__/ConsecutiveNumbers.test.ts +0 -232
- package/src/__tests__/GridLayoutManager.test.ts +0 -113
- package/src/__tests__/LayoutCommitObserver.test.tsx +0 -63
- package/src/__tests__/LinearLayoutManager.test.ts +0 -227
- package/src/__tests__/MasonryLayoutManager.test.ts +0 -202
- package/src/__tests__/RecyclerView.test.tsx +0 -144
- package/src/__tests__/RenderStackManager.test.ts +0 -574
- package/src/__tests__/ViewabilityHelper.test.ts +0 -282
- package/src/__tests__/findVisibleIndex.test.ts +0 -369
- package/src/__tests__/helpers/createLayoutManager.ts +0 -141
- package/src/__tests__/useUnmountAwareCallbacks.test.tsx +0 -285
|
@@ -1,30 +1,26 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* ViewHolderCollection is a container component that manages multiple ViewHolder instances.
|
|
4
3
|
* It handles the rendering of a collection of list items, manages layout updates,
|
|
5
4
|
* and coordinates with the RecyclerView context for layout changes.
|
|
6
5
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
var ViewHolder_1 = require("./ViewHolder");
|
|
12
|
-
var CompatView_1 = require("./components/CompatView");
|
|
13
|
-
var RecyclerViewContextProvider_1 = require("./RecyclerViewContextProvider");
|
|
6
|
+
import React, { useEffect, useImperativeHandle, useLayoutEffect } from "react";
|
|
7
|
+
import { ViewHolder } from "./ViewHolder";
|
|
8
|
+
import { CompatView } from "./components/CompatView";
|
|
9
|
+
import { useRecyclerViewContext } from "./RecyclerViewContextProvider";
|
|
14
10
|
/**
|
|
15
11
|
* ViewHolderCollection component that manages the rendering of multiple ViewHolder instances
|
|
16
12
|
* and handles layout updates for the entire collection
|
|
17
13
|
* @template TItem - The type of items in the data array
|
|
18
14
|
*/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
15
|
+
export const ViewHolderCollection = (props) => {
|
|
16
|
+
const { data, renderStack, getLayout, refHolder, onSizeChanged, renderItem, extraData, viewHolderCollectionRef, getChildContainerLayout, onCommitLayoutEffect, CellRendererComponent, ItemSeparatorComponent, onCommitEffect, horizontal, getAdjustmentMargin, } = props;
|
|
17
|
+
const [renderId, setRenderId] = React.useState(0);
|
|
18
|
+
const containerLayout = getChildContainerLayout();
|
|
19
|
+
const fixedContainerSize = horizontal
|
|
24
20
|
? containerLayout === null || containerLayout === void 0 ? void 0 : containerLayout.height
|
|
25
21
|
: containerLayout === null || containerLayout === void 0 ? void 0 : containerLayout.width;
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
const recyclerViewContext = useRecyclerViewContext();
|
|
23
|
+
useLayoutEffect(() => {
|
|
28
24
|
if (renderId > 0) {
|
|
29
25
|
// console.log(
|
|
30
26
|
// "parent layout trigger due to child container size change",
|
|
@@ -35,14 +31,14 @@ var ViewHolderCollection = function (props) {
|
|
|
35
31
|
// we need to run this callback on when fixedContainerSize changes
|
|
36
32
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
37
33
|
}, [fixedContainerSize]);
|
|
38
|
-
|
|
34
|
+
useLayoutEffect(() => {
|
|
39
35
|
if (renderId > 0) {
|
|
40
36
|
onCommitLayoutEffect === null || onCommitLayoutEffect === void 0 ? void 0 : onCommitLayoutEffect();
|
|
41
37
|
}
|
|
42
38
|
// we need to run this callback on when renderId changes
|
|
43
39
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
44
40
|
}, [renderId]);
|
|
45
|
-
|
|
41
|
+
useEffect(() => {
|
|
46
42
|
if (renderId > 0) {
|
|
47
43
|
onCommitEffect === null || onCommitEffect === void 0 ? void 0 : onCommitEffect();
|
|
48
44
|
}
|
|
@@ -50,14 +46,14 @@ var ViewHolderCollection = function (props) {
|
|
|
50
46
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
51
47
|
}, [renderId]);
|
|
52
48
|
// Expose forceUpdate through ref
|
|
53
|
-
|
|
54
|
-
commitLayout:
|
|
49
|
+
useImperativeHandle(viewHolderCollectionRef, () => ({
|
|
50
|
+
commitLayout: () => {
|
|
55
51
|
// This will trigger a re-render of the component
|
|
56
|
-
setRenderId(
|
|
52
|
+
setRenderId((prev) => prev + 1);
|
|
57
53
|
},
|
|
58
|
-
})
|
|
59
|
-
|
|
60
|
-
|
|
54
|
+
}), [setRenderId]);
|
|
55
|
+
const hasData = data && data.length > 0;
|
|
56
|
+
const containerStyle = {
|
|
61
57
|
width: horizontal ? containerLayout === null || containerLayout === void 0 ? void 0 : containerLayout.width : undefined,
|
|
62
58
|
height: containerLayout === null || containerLayout === void 0 ? void 0 : containerLayout.height,
|
|
63
59
|
marginTop: horizontal ? undefined : getAdjustmentMargin(),
|
|
@@ -76,16 +72,16 @@ var ViewHolderCollection = function (props) {
|
|
|
76
72
|
// return `${index} => ${reactKey}`;
|
|
77
73
|
// })
|
|
78
74
|
// );
|
|
79
|
-
return (
|
|
75
|
+
return (React.createElement(CompatView, { style: hasData && containerStyle }, containerLayout &&
|
|
80
76
|
hasData &&
|
|
81
|
-
Array.from(renderStack.entries(),
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
var trailingItem = ItemSeparatorComponent
|
|
77
|
+
Array.from(renderStack.entries(), ([reactKey, { index }]) => {
|
|
78
|
+
const item = data[index];
|
|
79
|
+
const trailingItem = ItemSeparatorComponent
|
|
85
80
|
? data[index + 1]
|
|
86
81
|
: undefined;
|
|
87
|
-
return (
|
|
82
|
+
return (React.createElement(ViewHolder, { key: reactKey, index: index, item: item, trailingItem: trailingItem, layout: {
|
|
83
|
+
...getLayout(index),
|
|
84
|
+
}, refHolder: refHolder, onSizeChanged: onSizeChanged, target: "Cell", renderItem: renderItem, extraData: extraData, CellRendererComponent: CellRendererComponent, ItemSeparatorComponent: ItemSeparatorComponent, horizontal: horizontal }));
|
|
88
85
|
})));
|
|
89
86
|
};
|
|
90
|
-
exports.ViewHolderCollection = ViewHolderCollection;
|
|
91
87
|
//# sourceMappingURL=ViewHolderCollection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewHolderCollection.js","sourceRoot":"","sources":["../../src/recyclerview/ViewHolderCollection.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ViewHolderCollection.js","sourceRoot":"","sources":["../../src/recyclerview/ViewHolderCollection.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
exports.CompatAnimatedScroller = AnimatedScrollView;
|
|
1
|
+
import { ScrollView, Animated } from "react-native";
|
|
2
|
+
const AnimatedScrollView = Animated.ScrollView;
|
|
3
|
+
/** Regular scroll view component */
|
|
4
|
+
export { ScrollView as CompatScroller };
|
|
5
|
+
/** Animated scroll view component for smooth scrolling animations */
|
|
6
|
+
export { AnimatedScrollView as CompatAnimatedScroller };
|
|
8
7
|
//# sourceMappingURL=CompatScroller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompatScroller.js","sourceRoot":"","sources":["../../../src/recyclerview/components/CompatScroller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CompatScroller.js","sourceRoot":"","sources":["../../../src/recyclerview/components/CompatScroller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,UAAU,CAAC;AAE/C,oCAAoC;AACpC,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,CAAC;AAExC,qEAAqE;AACrE,OAAO,EAAE,kBAAkB,IAAI,sBAAsB,EAAE,CAAC"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
exports.CompatAnimatedView = AnimatedView;
|
|
1
|
+
import { View, Animated } from "react-native";
|
|
2
|
+
/** Regular view component */
|
|
3
|
+
export { View as CompatView };
|
|
4
|
+
const AnimatedView = Animated.View;
|
|
5
|
+
/** Animated view component for smooth animations */
|
|
6
|
+
export { AnimatedView as CompatAnimatedView };
|
|
8
7
|
//# sourceMappingURL=CompatView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompatView.js","sourceRoot":"","sources":["../../../src/recyclerview/components/CompatView.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CompatView.js","sourceRoot":"","sources":["../../../src/recyclerview/components/CompatView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE9C,6BAA6B;AAC7B,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,CAAC;AAE9B,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;AAEnC,oDAAoD;AACpD,OAAO,EAAE,YAAY,IAAI,kBAAkB,EAAE,CAAC"}
|
|
@@ -1,32 +1,27 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* ScrollAnchor component provides a mechanism to programmatically scroll
|
|
4
3
|
* the list by manipulating an invisible anchor element's position.
|
|
5
4
|
* This helps us use ScrollView's maintainVisibleContentPosition property
|
|
6
5
|
* to adjust the scroll position of the list as the size of content changes without any glitches.
|
|
7
6
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
var tslib_1 = require("tslib");
|
|
11
|
-
var react_1 = tslib_1.__importStar(require("react"));
|
|
12
|
-
var CompatView_1 = require("./CompatView");
|
|
7
|
+
import React, { useImperativeHandle, useMemo, useState } from "react";
|
|
8
|
+
import { CompatView } from "./CompatView";
|
|
13
9
|
/**
|
|
14
10
|
* ScrollAnchor component that provides programmatic scrolling capabilities using maintainVisibleContentPosition property
|
|
15
11
|
* @param props - Component props
|
|
16
12
|
* @returns An invisible anchor element used for scrolling
|
|
17
13
|
*/
|
|
18
|
-
function ScrollAnchor(
|
|
19
|
-
|
|
20
|
-
var _b = tslib_1.__read((0, react_1.useState)(1000000), 2), scrollOffset = _b[0], setScrollOffset = _b[1]; // TODO: Fix this value
|
|
14
|
+
export function ScrollAnchor({ scrollAnchorRef, horizontal, }) {
|
|
15
|
+
const [scrollOffset, setScrollOffset] = useState(1000000); // TODO: Fix this value
|
|
21
16
|
// Expose scrollBy method through ref
|
|
22
|
-
|
|
23
|
-
scrollBy:
|
|
24
|
-
setScrollOffset(
|
|
17
|
+
useImperativeHandle(scrollAnchorRef, () => ({
|
|
18
|
+
scrollBy: (offset) => {
|
|
19
|
+
setScrollOffset((prev) => prev + offset);
|
|
25
20
|
},
|
|
26
|
-
})
|
|
21
|
+
}), []);
|
|
27
22
|
// Create an invisible anchor element that can be positioned
|
|
28
|
-
|
|
29
|
-
return (
|
|
23
|
+
const anchor = useMemo(() => {
|
|
24
|
+
return (React.createElement(CompatView, { style: {
|
|
30
25
|
position: "absolute",
|
|
31
26
|
height: 0,
|
|
32
27
|
top: horizontal ? 0 : scrollOffset,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollAnchor.js","sourceRoot":"","sources":["../../../src/recyclerview/components/ScrollAnchor.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ScrollAnchor.js","sourceRoot":"","sources":["../../../src/recyclerview/components/ScrollAnchor.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,EAAE,mBAAmB,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEtE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAmB1C;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,eAAe,EACf,UAAU,GACQ;IAClB,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB;IAElF,qCAAqC;IACrC,mBAAmB,CACjB,eAAe,EACf,GAAG,EAAE,CAAC,CAAC;QACL,QAAQ,EAAE,CAAC,MAAc,EAAE,EAAE;YAC3B,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;QAC3C,CAAC;KACF,CAAC,EACF,EAAE,CACH,CAAC;IAEF,4DAA4D;IAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1B,OAAO,CACL,oBAAC,UAAU,IACT,KAAK,EAAE;gBACL,QAAQ,EAAE,UAAU;gBACpB,MAAM,EAAE,CAAC;gBACT,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY;gBAClC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;aACpC,GACD,CACH,CAAC;IACJ,CAAC,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;IAE/B,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,49 +1,44 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* StickyHeaders component manages the sticky header behavior in a FlashList.
|
|
4
3
|
* It handles the animation and positioning of headers that should remain fixed
|
|
5
4
|
* at the top of the list while scrolling.
|
|
6
5
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
var CompatView_1 = require("./CompatView");
|
|
13
|
-
var StickyHeaders = function (_a) {
|
|
14
|
-
var stickyHeaderIndices = _a.stickyHeaderIndices, renderItem = _a.renderItem, stickyHeaderRef = _a.stickyHeaderRef, recyclerViewManager = _a.recyclerViewManager, scrollY = _a.scrollY, data = _a.data, extraData = _a.extraData;
|
|
15
|
-
var _b = tslib_1.__read((0, react_1.useState)({
|
|
6
|
+
import React, { useRef, useState, useMemo, useImperativeHandle, useCallback, useEffect, } from "react";
|
|
7
|
+
import { ViewHolder } from "../ViewHolder";
|
|
8
|
+
import { CompatAnimatedView } from "./CompatView";
|
|
9
|
+
export const StickyHeaders = ({ stickyHeaderIndices, renderItem, stickyHeaderRef, recyclerViewManager, scrollY, data, extraData, }) => {
|
|
10
|
+
const [stickyHeaderState, setStickyHeaderState] = useState({
|
|
16
11
|
currentStickyIndex: -1,
|
|
17
12
|
pushStartsAt: Number.MAX_SAFE_INTEGER,
|
|
18
|
-
})
|
|
19
|
-
|
|
13
|
+
});
|
|
14
|
+
const { currentStickyIndex, pushStartsAt } = stickyHeaderState;
|
|
20
15
|
// sort indices and memoize compute
|
|
21
|
-
|
|
22
|
-
return
|
|
16
|
+
const sortedIndices = useMemo(() => {
|
|
17
|
+
return [...stickyHeaderIndices].sort((first, second) => first - second);
|
|
23
18
|
}, [stickyHeaderIndices]);
|
|
24
|
-
|
|
19
|
+
const legthInvalid = sortedIndices.length === 0 ||
|
|
25
20
|
recyclerViewManager.getDataLength() <=
|
|
26
21
|
sortedIndices[sortedIndices.length - 1];
|
|
27
|
-
|
|
22
|
+
const compute = useCallback(() => {
|
|
28
23
|
var _a, _b, _c, _d, _e, _f;
|
|
29
24
|
if (legthInvalid) {
|
|
30
25
|
return;
|
|
31
26
|
}
|
|
32
|
-
|
|
27
|
+
const adjustedScrollOffset = recyclerViewManager.getLastScrollOffset();
|
|
33
28
|
// Binary search for current sticky index
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
29
|
+
const currentIndexInArray = findCurrentStickyIndex(sortedIndices, adjustedScrollOffset, (index) => recyclerViewManager.getLayout(index).y);
|
|
30
|
+
const newStickyIndex = (_a = sortedIndices[currentIndexInArray]) !== null && _a !== void 0 ? _a : -1;
|
|
31
|
+
let newNextStickyIndex = (_b = sortedIndices[currentIndexInArray + 1]) !== null && _b !== void 0 ? _b : -1;
|
|
37
32
|
if (newNextStickyIndex > recyclerViewManager.getEngagedIndices().endIndex) {
|
|
38
33
|
newNextStickyIndex = -1;
|
|
39
34
|
}
|
|
40
35
|
// To make sure header offset is 0 in the interpolate compute
|
|
41
|
-
|
|
36
|
+
const newNextStickyY = newNextStickyIndex === -1
|
|
42
37
|
? Number.MAX_SAFE_INTEGER
|
|
43
38
|
: ((_d = (_c = recyclerViewManager.tryGetLayout(newNextStickyIndex)) === null || _c === void 0 ? void 0 : _c.y) !== null && _d !== void 0 ? _d : 0) +
|
|
44
39
|
recyclerViewManager.firstItemOffset;
|
|
45
|
-
|
|
46
|
-
|
|
40
|
+
const newCurrentStickyHeight = (_f = (_e = recyclerViewManager.tryGetLayout(newStickyIndex)) === null || _e === void 0 ? void 0 : _e.height) !== null && _f !== void 0 ? _f : 0;
|
|
41
|
+
const newPushStartsAt = newNextStickyY - newCurrentStickyHeight;
|
|
47
42
|
if (newStickyIndex !== currentStickyIndex ||
|
|
48
43
|
newPushStartsAt !== pushStartsAt) {
|
|
49
44
|
setStickyHeaderState({
|
|
@@ -58,19 +53,19 @@ var StickyHeaders = function (_a) {
|
|
|
58
53
|
currentStickyIndex,
|
|
59
54
|
pushStartsAt,
|
|
60
55
|
]);
|
|
61
|
-
|
|
56
|
+
useEffect(() => {
|
|
62
57
|
compute();
|
|
63
58
|
}, [compute]);
|
|
64
59
|
// Optimized scroll handler using binary search pattern
|
|
65
|
-
|
|
66
|
-
reportScrollEvent:
|
|
60
|
+
useImperativeHandle(stickyHeaderRef, () => ({
|
|
61
|
+
reportScrollEvent: () => {
|
|
67
62
|
compute();
|
|
68
63
|
},
|
|
69
|
-
})
|
|
70
|
-
|
|
71
|
-
|
|
64
|
+
}), [compute]);
|
|
65
|
+
const refHolder = useRef(new Map()).current;
|
|
66
|
+
const translateY = useMemo(() => {
|
|
72
67
|
var _a, _b;
|
|
73
|
-
|
|
68
|
+
const currentStickyHeight = (_b = (_a = recyclerViewManager.tryGetLayout(currentStickyIndex)) === null || _a === void 0 ? void 0 : _a.height) !== null && _b !== void 0 ? _b : 0;
|
|
74
69
|
return scrollY.interpolate({
|
|
75
70
|
inputRange: [pushStartsAt, pushStartsAt + currentStickyHeight],
|
|
76
71
|
outputRange: [0, -currentStickyHeight],
|
|
@@ -78,19 +73,18 @@ var StickyHeaders = function (_a) {
|
|
|
78
73
|
});
|
|
79
74
|
}, [recyclerViewManager, currentStickyIndex, scrollY, pushStartsAt]);
|
|
80
75
|
// Memoize header content
|
|
81
|
-
|
|
82
|
-
return (
|
|
76
|
+
const headerContent = useMemo(() => {
|
|
77
|
+
return (React.createElement(CompatAnimatedView, { style: {
|
|
83
78
|
position: "absolute",
|
|
84
79
|
top: 0,
|
|
85
80
|
left: 0,
|
|
86
81
|
right: 0,
|
|
87
82
|
zIndex: 1,
|
|
88
|
-
transform: [{ translateY
|
|
89
|
-
} }, currentStickyIndex !== -1 && currentStickyIndex < data.length ? (
|
|
83
|
+
transform: [{ translateY }],
|
|
84
|
+
} }, currentStickyIndex !== -1 && currentStickyIndex < data.length ? (React.createElement(ViewHolder, { index: currentStickyIndex, item: data[currentStickyIndex], renderItem: renderItem, layout: { x: 0, y: 0, width: 0, height: 0 }, refHolder: refHolder, extraData: extraData, trailingItem: null, target: "StickyHeader" })) : null));
|
|
90
85
|
}, [translateY, currentStickyIndex, data, renderItem, refHolder, extraData]);
|
|
91
86
|
return headerContent;
|
|
92
87
|
};
|
|
93
|
-
exports.StickyHeaders = StickyHeaders;
|
|
94
88
|
/**
|
|
95
89
|
* Binary search utility to find the current sticky header index based on scroll position
|
|
96
90
|
* @param sortedIndices - Array of indices sorted by Y position
|
|
@@ -99,12 +93,12 @@ exports.StickyHeaders = StickyHeaders;
|
|
|
99
93
|
* @returns Index of the current sticky header
|
|
100
94
|
*/
|
|
101
95
|
function findCurrentStickyIndex(sortedIndices, adjustedValue, getY) {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
96
|
+
let left = 0;
|
|
97
|
+
let right = sortedIndices.length - 1;
|
|
98
|
+
let result = -1;
|
|
105
99
|
while (left <= right) {
|
|
106
|
-
|
|
107
|
-
|
|
100
|
+
const mid = Math.floor((left + right) / 2);
|
|
101
|
+
const currentY = getY(sortedIndices[mid]);
|
|
108
102
|
if (currentY <= adjustedValue) {
|
|
109
103
|
result = mid;
|
|
110
104
|
left = mid + 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StickyHeaders.js","sourceRoot":"","sources":["../../../src/recyclerview/components/StickyHeaders.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StickyHeaders.js","sourceRoot":"","sources":["../../../src/recyclerview/components/StickyHeaders.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,122 +1,95 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ConsecutiveNumbers = void 0;
|
|
4
|
-
var tslib_1 = require("tslib");
|
|
5
1
|
/**
|
|
6
2
|
* A simple wrapper for consecutive postive integer arrays
|
|
7
3
|
* Only stores start and end indices for faster computation as numbers are consecutive.
|
|
8
4
|
*/
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
export class ConsecutiveNumbers {
|
|
6
|
+
constructor(startIndex, endIndex) {
|
|
11
7
|
this.startIndex = startIndex;
|
|
12
8
|
this.endIndex = endIndex;
|
|
13
9
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
},
|
|
21
|
-
enumerable: false,
|
|
22
|
-
configurable: true
|
|
23
|
-
});
|
|
10
|
+
/**
|
|
11
|
+
* Get the length of the array
|
|
12
|
+
*/
|
|
13
|
+
get length() {
|
|
14
|
+
return Math.max(0, this.endIndex - this.startIndex + 1);
|
|
15
|
+
}
|
|
24
16
|
/**
|
|
25
17
|
* Get element at specified index
|
|
26
18
|
*/
|
|
27
|
-
|
|
19
|
+
at(index) {
|
|
28
20
|
return this.startIndex + index;
|
|
29
|
-
}
|
|
21
|
+
}
|
|
30
22
|
/**
|
|
31
23
|
* Check if two consecutive numbers are equal
|
|
32
24
|
*/
|
|
33
|
-
|
|
25
|
+
equals(other) {
|
|
34
26
|
return (this.startIndex === other.startIndex && this.endIndex === other.endIndex);
|
|
35
|
-
}
|
|
27
|
+
}
|
|
36
28
|
/**
|
|
37
29
|
* Converts the consecutive range to an actual array
|
|
38
30
|
* @returns An array containing all consecutive numbers
|
|
39
31
|
*/
|
|
40
|
-
|
|
32
|
+
toArray() {
|
|
41
33
|
if (this.length === 0) {
|
|
42
34
|
return [];
|
|
43
35
|
}
|
|
44
|
-
|
|
45
|
-
for (
|
|
36
|
+
const array = new Array(this.length);
|
|
37
|
+
for (let i = 0; i < this.length; i++) {
|
|
46
38
|
array[i] = this.startIndex + i;
|
|
47
39
|
}
|
|
48
40
|
return array;
|
|
49
|
-
}
|
|
41
|
+
}
|
|
50
42
|
/**
|
|
51
43
|
* Check if array includes a value
|
|
52
44
|
*/
|
|
53
|
-
|
|
45
|
+
includes(value) {
|
|
54
46
|
return value >= this.startIndex && value <= this.endIndex;
|
|
55
|
-
}
|
|
47
|
+
}
|
|
56
48
|
/**
|
|
57
49
|
* Get index of a value in the consecutive range
|
|
58
50
|
*/
|
|
59
|
-
|
|
51
|
+
indexOf(value) {
|
|
60
52
|
return this.includes(value) ? value - this.startIndex : -1;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
for (
|
|
64
|
-
|
|
53
|
+
}
|
|
54
|
+
findValue(predicate) {
|
|
55
|
+
for (let i = 0; i < this.length; i++) {
|
|
56
|
+
const value = this.startIndex + i;
|
|
65
57
|
if (predicate(value, i, this)) {
|
|
66
58
|
return value;
|
|
67
59
|
}
|
|
68
60
|
}
|
|
69
61
|
return undefined;
|
|
70
|
-
}
|
|
62
|
+
}
|
|
71
63
|
/**
|
|
72
64
|
* Tests whether all elements in the consecutive range pass the provided test function
|
|
73
65
|
* @param predicate A function that tests each element
|
|
74
66
|
* @returns true if all elements pass the test; otherwise, false
|
|
75
67
|
*/
|
|
76
|
-
|
|
77
|
-
for (
|
|
78
|
-
|
|
68
|
+
every(predicate) {
|
|
69
|
+
for (let i = 0; i < this.length; i++) {
|
|
70
|
+
const value = this.startIndex + i;
|
|
79
71
|
if (!predicate(value, i, this)) {
|
|
80
72
|
return false;
|
|
81
73
|
}
|
|
82
74
|
}
|
|
83
75
|
return true;
|
|
84
|
-
}
|
|
76
|
+
}
|
|
85
77
|
/**
|
|
86
78
|
* Get a slice of the consecutive array
|
|
87
79
|
*/
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
var newStart = this.startIndex + start;
|
|
92
|
-
var newEnd = this.startIndex + Math.min(end, this.length) - 1;
|
|
80
|
+
slice(start = 0, end = this.length) {
|
|
81
|
+
const newStart = this.startIndex + start;
|
|
82
|
+
const newEnd = this.startIndex + Math.min(end, this.length) - 1;
|
|
93
83
|
return new ConsecutiveNumbers(newStart, Math.max(newStart - 1, newEnd));
|
|
94
|
-
}
|
|
84
|
+
}
|
|
95
85
|
/**
|
|
96
86
|
* Implement iterator to enable for...of
|
|
97
87
|
*/
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
case 1:
|
|
106
|
-
if (!(i <= this.endIndex)) return [3 /*break*/, 4];
|
|
107
|
-
return [4 /*yield*/, i];
|
|
108
|
-
case 2:
|
|
109
|
-
_a.sent();
|
|
110
|
-
_a.label = 3;
|
|
111
|
-
case 3:
|
|
112
|
-
i++;
|
|
113
|
-
return [3 /*break*/, 1];
|
|
114
|
-
case 4: return [2 /*return*/];
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
};
|
|
118
|
-
ConsecutiveNumbers.EMPTY = new ConsecutiveNumbers(-1, -2);
|
|
119
|
-
return ConsecutiveNumbers;
|
|
120
|
-
}());
|
|
121
|
-
exports.ConsecutiveNumbers = ConsecutiveNumbers;
|
|
88
|
+
*[Symbol.iterator]() {
|
|
89
|
+
for (let i = this.startIndex; i <= this.endIndex; i++) {
|
|
90
|
+
yield i;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
ConsecutiveNumbers.EMPTY = new ConsecutiveNumbers(-1, -2);
|
|
122
95
|
//# sourceMappingURL=ConsecutiveNumbers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsecutiveNumbers.js","sourceRoot":"","sources":["../../../src/recyclerview/helpers/ConsecutiveNumbers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ConsecutiveNumbers.js","sourceRoot":"","sources":["../../../src/recyclerview/helpers/ConsecutiveNumbers.ts"],"names":[],"mappings":"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"}
|