@shopify/flash-list 1.8.0 → 2.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +147 -26
- package/dist/FlashListProps.d.ts +65 -2
- package/dist/FlashListProps.d.ts.map +1 -1
- package/dist/__tests__/AverageWindow.test.js +35 -0
- package/dist/__tests__/AverageWindow.test.js.map +1 -1
- package/dist/enableNewCore.d.ts +3 -0
- package/dist/enableNewCore.d.ts.map +1 -0
- package/dist/enableNewCore.js +25 -0
- package/dist/enableNewCore.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -8
- package/dist/index.js.map +1 -1
- package/dist/recyclerview/RecycleKeyManager.d.ts +82 -0
- package/dist/recyclerview/RecycleKeyManager.d.ts.map +1 -0
- package/dist/recyclerview/RecycleKeyManager.js +135 -0
- package/dist/recyclerview/RecycleKeyManager.js.map +1 -0
- package/dist/recyclerview/RecyclerView.d.ts +12 -0
- package/dist/recyclerview/RecyclerView.d.ts.map +1 -0
- package/dist/recyclerview/RecyclerView.js +283 -0
- package/dist/recyclerview/RecyclerView.js.map +1 -0
- package/dist/recyclerview/RecyclerViewContextProvider.d.ts +12 -0
- package/dist/recyclerview/RecyclerViewContextProvider.d.ts.map +1 -0
- package/dist/recyclerview/RecyclerViewContextProvider.js +11 -0
- package/dist/recyclerview/RecyclerViewContextProvider.js.map +1 -0
- package/dist/recyclerview/RecyclerViewManager.d.ts +52 -0
- package/dist/recyclerview/RecyclerViewManager.d.ts.map +1 -0
- package/dist/recyclerview/RecyclerViewManager.js +323 -0
- package/dist/recyclerview/RecyclerViewManager.js.map +1 -0
- package/dist/recyclerview/RecyclerViewProps.d.ts +9 -0
- package/dist/recyclerview/RecyclerViewProps.d.ts.map +1 -0
- package/dist/recyclerview/RecyclerViewProps.js +3 -0
- package/dist/recyclerview/RecyclerViewProps.js.map +1 -0
- package/dist/recyclerview/ViewHolder.d.ts +45 -0
- package/dist/recyclerview/ViewHolder.d.ts.map +1 -0
- package/dist/recyclerview/ViewHolder.js +96 -0
- package/dist/recyclerview/ViewHolder.js.map +1 -0
- package/dist/recyclerview/ViewHolderCollection.d.ts +57 -0
- package/dist/recyclerview/ViewHolderCollection.d.ts.map +1 -0
- package/dist/recyclerview/ViewHolderCollection.js +75 -0
- package/dist/recyclerview/ViewHolderCollection.js.map +1 -0
- package/dist/recyclerview/components/CompatScroller.d.ts +7 -0
- package/dist/recyclerview/components/CompatScroller.d.ts.map +1 -0
- package/dist/recyclerview/components/CompatScroller.js +8 -0
- package/dist/recyclerview/components/CompatScroller.js.map +1 -0
- package/dist/recyclerview/components/CompatView.d.ts +7 -0
- package/dist/recyclerview/components/CompatView.d.ts.map +1 -0
- package/dist/recyclerview/components/CompatView.js +8 -0
- package/dist/recyclerview/components/CompatView.js.map +1 -0
- package/dist/recyclerview/components/ScrollAnchor.d.ts +28 -0
- package/dist/recyclerview/components/ScrollAnchor.d.ts.map +1 -0
- package/dist/recyclerview/components/ScrollAnchor.js +35 -0
- package/dist/recyclerview/components/ScrollAnchor.js.map +1 -0
- package/dist/recyclerview/components/StickyHeaders.d.ts +38 -0
- package/dist/recyclerview/components/StickyHeaders.d.ts.map +1 -0
- package/dist/recyclerview/components/StickyHeaders.js +119 -0
- package/dist/recyclerview/components/StickyHeaders.js.map +1 -0
- package/dist/recyclerview/helpers/ConsecutiveNumbers.d.ts +51 -0
- package/dist/recyclerview/helpers/ConsecutiveNumbers.d.ts.map +1 -0
- package/dist/recyclerview/helpers/ConsecutiveNumbers.js +122 -0
- package/dist/recyclerview/helpers/ConsecutiveNumbers.js.map +1 -0
- package/dist/recyclerview/helpers/EngagedIndicesTracker.d.ts +59 -0
- package/dist/recyclerview/helpers/EngagedIndicesTracker.d.ts.map +1 -0
- package/dist/recyclerview/helpers/EngagedIndicesTracker.js +138 -0
- package/dist/recyclerview/helpers/EngagedIndicesTracker.js.map +1 -0
- package/dist/recyclerview/hooks/useBoundDetection.d.ts +19 -0
- package/dist/recyclerview/hooks/useBoundDetection.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useBoundDetection.js +103 -0
- package/dist/recyclerview/hooks/useBoundDetection.js.map +1 -0
- package/dist/recyclerview/hooks/useLayoutState.d.ts +12 -0
- package/dist/recyclerview/hooks/useLayoutState.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useLayoutState.js +43 -0
- package/dist/recyclerview/hooks/useLayoutState.js.map +1 -0
- package/dist/recyclerview/hooks/useOnLoad.d.ts +25 -0
- package/dist/recyclerview/hooks/useOnLoad.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useOnLoad.js +73 -0
- package/dist/recyclerview/hooks/useOnLoad.js.map +1 -0
- package/dist/recyclerview/hooks/useRecyclerViewController.d.ts +72 -0
- package/dist/recyclerview/hooks/useRecyclerViewController.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useRecyclerViewController.js +370 -0
- package/dist/recyclerview/hooks/useRecyclerViewController.js.map +1 -0
- package/dist/recyclerview/hooks/useRecyclerViewManager.d.ts +6 -0
- package/dist/recyclerview/hooks/useRecyclerViewManager.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useRecyclerViewManager.js +27 -0
- package/dist/recyclerview/hooks/useRecyclerViewManager.js.map +1 -0
- package/dist/recyclerview/hooks/useRecyclingState.d.ts +16 -0
- package/dist/recyclerview/hooks/useRecyclingState.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useRecyclingState.js +54 -0
- package/dist/recyclerview/hooks/useRecyclingState.js.map +1 -0
- package/dist/recyclerview/hooks/useSecondaryProps.d.ts +27 -0
- package/dist/recyclerview/hooks/useSecondaryProps.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useSecondaryProps.js +93 -0
- package/dist/recyclerview/hooks/useSecondaryProps.js.map +1 -0
- package/dist/recyclerview/hooks/useUnmountFlag.d.ts +11 -0
- package/dist/recyclerview/hooks/useUnmountFlag.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useUnmountFlag.js +28 -0
- package/dist/recyclerview/hooks/useUnmountFlag.js.map +1 -0
- package/dist/recyclerview/layout-managers/GridLayoutManager.d.ts +65 -0
- package/dist/recyclerview/layout-managers/GridLayoutManager.d.ts.map +1 -0
- package/dist/recyclerview/layout-managers/GridLayoutManager.js +204 -0
- package/dist/recyclerview/layout-managers/GridLayoutManager.js.map +1 -0
- package/dist/recyclerview/layout-managers/LayoutManager.d.ts +281 -0
- package/dist/recyclerview/layout-managers/LayoutManager.d.ts.map +1 -0
- package/dist/recyclerview/layout-managers/LayoutManager.js +250 -0
- package/dist/recyclerview/layout-managers/LayoutManager.js.map +1 -0
- package/dist/recyclerview/layout-managers/LinearLayoutManager.d.ts +52 -0
- package/dist/recyclerview/layout-managers/LinearLayoutManager.d.ts.map +1 -0
- package/dist/recyclerview/layout-managers/LinearLayoutManager.js +191 -0
- package/dist/recyclerview/layout-managers/LinearLayoutManager.js.map +1 -0
- package/dist/recyclerview/layout-managers/MasonryLayoutManager.d.ts +73 -0
- package/dist/recyclerview/layout-managers/MasonryLayoutManager.d.ts.map +1 -0
- package/dist/recyclerview/layout-managers/MasonryLayoutManager.js +274 -0
- package/dist/recyclerview/layout-managers/MasonryLayoutManager.js.map +1 -0
- package/dist/recyclerview/utils/adjustOffsetForRTL.d.ts +12 -0
- package/dist/recyclerview/utils/adjustOffsetForRTL.d.ts.map +1 -0
- package/dist/recyclerview/utils/adjustOffsetForRTL.js +18 -0
- package/dist/recyclerview/utils/adjustOffsetForRTL.js.map +1 -0
- package/dist/recyclerview/utils/componentUtils.d.ts +19 -0
- package/dist/recyclerview/utils/componentUtils.d.ts.map +1 -0
- package/dist/recyclerview/utils/componentUtils.js +32 -0
- package/dist/recyclerview/utils/componentUtils.js.map +1 -0
- package/dist/recyclerview/utils/findVisibleIndex.d.ts +24 -0
- package/dist/recyclerview/utils/findVisibleIndex.d.ts.map +1 -0
- package/dist/recyclerview/utils/findVisibleIndex.js +82 -0
- package/dist/recyclerview/utils/findVisibleIndex.js.map +1 -0
- package/dist/recyclerview/utils/measureLayout.d.ts +56 -0
- package/dist/recyclerview/utils/measureLayout.d.ts.map +1 -0
- package/dist/recyclerview/utils/measureLayout.js +77 -0
- package/dist/recyclerview/utils/measureLayout.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/AverageWindow.d.ts +13 -0
- package/dist/utils/AverageWindow.d.ts.map +1 -1
- package/dist/utils/AverageWindow.js +30 -1
- package/dist/utils/AverageWindow.js.map +1 -1
- package/package.json +1 -1
- package/src/FlashListProps.ts +73 -2
- package/src/__tests__/AverageWindow.test.ts +49 -1
- package/src/enableNewCore.ts +22 -0
- package/src/index.ts +21 -0
- package/src/recyclerview/RecycleKeyManager.ts +185 -0
- package/src/recyclerview/RecyclerView.tsx +500 -0
- package/src/recyclerview/RecyclerViewContextProvider.ts +19 -0
- package/src/recyclerview/RecyclerViewManager.ts +379 -0
- package/src/recyclerview/RecyclerViewProps.ts +10 -0
- package/src/recyclerview/ViewHolder.tsx +173 -0
- package/src/recyclerview/ViewHolderCollection.tsx +164 -0
- package/src/recyclerview/components/CompatScroller.ts +9 -0
- package/src/recyclerview/components/CompatView.ts +9 -0
- package/src/recyclerview/components/ScrollAnchor.tsx +53 -0
- package/src/recyclerview/components/StickyHeaders.tsx +210 -0
- package/src/recyclerview/helpers/ConsecutiveNumbers.ts +120 -0
- package/src/recyclerview/helpers/EngagedIndicesTracker.ts +191 -0
- package/src/recyclerview/hooks/useBoundDetection.ts +127 -0
- package/src/recyclerview/hooks/useLayoutState.ts +46 -0
- package/src/recyclerview/hooks/useOnLoad.ts +78 -0
- package/src/recyclerview/hooks/useRecyclerViewController.tsx +487 -0
- package/src/recyclerview/hooks/useRecyclerViewManager.ts +30 -0
- package/src/recyclerview/hooks/useRecyclingState.ts +63 -0
- package/src/recyclerview/hooks/useSecondaryProps.tsx +119 -0
- package/src/recyclerview/hooks/useUnmountFlag.ts +26 -0
- package/src/recyclerview/layout-managers/GridLayoutManager.ts +215 -0
- package/src/recyclerview/layout-managers/LayoutManager.ts +493 -0
- package/src/recyclerview/layout-managers/LinearLayoutManager.ts +167 -0
- package/src/recyclerview/layout-managers/MasonryLayoutManager.ts +302 -0
- package/src/recyclerview/utils/adjustOffsetForRTL.ts +17 -0
- package/src/recyclerview/utils/componentUtils.ts +28 -0
- package/src/recyclerview/utils/findVisibleIndex.ts +94 -0
- package/src/recyclerview/utils/measureLayout.ts +89 -0
- package/src/utils/AverageWindow.ts +33 -0
- package/src/viewability/ViewToken.ts +1 -1
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RecyclerViewManager = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var GridLayoutManager_1 = require("./layout-managers/GridLayoutManager");
|
|
6
|
+
var LinearLayoutManager_1 = require("./layout-managers/LinearLayoutManager");
|
|
7
|
+
var MasonryLayoutManager_1 = require("./layout-managers/MasonryLayoutManager");
|
|
8
|
+
var RecycleKeyManager_1 = require("./RecycleKeyManager");
|
|
9
|
+
var EngagedIndicesTracker_1 = require("./helpers/EngagedIndicesTracker");
|
|
10
|
+
var ViewabilityManager_1 = tslib_1.__importDefault(require("../viewability/ViewabilityManager"));
|
|
11
|
+
// Abstracts layout manager, key manager and viewability manager and generates render stack (progressively on load)
|
|
12
|
+
var RecyclerViewManager = /** @class */ (function () {
|
|
13
|
+
function RecyclerViewManager(props) {
|
|
14
|
+
var _this = this;
|
|
15
|
+
this.initialDrawBatchSize = 1;
|
|
16
|
+
// Map of index to key
|
|
17
|
+
this.renderStack = new Map();
|
|
18
|
+
this.isFirstLayoutComplete = false;
|
|
19
|
+
this.hasRenderedProgressively = false;
|
|
20
|
+
this.disableRecycling = false;
|
|
21
|
+
this.firstItemOffset = 0;
|
|
22
|
+
// updates render stack based on the engaged indices which are sorted. Recycles unused keys.
|
|
23
|
+
// TODO: Call getKey anyway if stableIds are present
|
|
24
|
+
this.updateRenderStack = function (engagedIndices) {
|
|
25
|
+
var e_1, _a, e_2, _b, e_3, _c;
|
|
26
|
+
var _d, _e;
|
|
27
|
+
//console.log("updateRenderStack", engagedIndices);
|
|
28
|
+
var newRenderStack = new Map();
|
|
29
|
+
try {
|
|
30
|
+
for (var _f = tslib_1.__values(_this.renderStack), _g = _f.next(); !_g.done; _g = _f.next()) {
|
|
31
|
+
var _h = tslib_1.__read(_g.value, 2), index = _h[0], key = _h[1];
|
|
32
|
+
if (!engagedIndices.includes(index)) {
|
|
33
|
+
_this.recycleKeyManager.recycleKey(key);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
38
|
+
finally {
|
|
39
|
+
try {
|
|
40
|
+
if (_g && !_g.done && (_a = _f.return)) _a.call(_f);
|
|
41
|
+
}
|
|
42
|
+
finally { if (e_1) throw e_1.error; }
|
|
43
|
+
}
|
|
44
|
+
if (_this.disableRecycling) {
|
|
45
|
+
_this.recycleKeyManager.clearPool();
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
for (var engagedIndices_1 = tslib_1.__values(engagedIndices), engagedIndices_1_1 = engagedIndices_1.next(); !engagedIndices_1_1.done; engagedIndices_1_1 = engagedIndices_1.next()) {
|
|
49
|
+
var index = engagedIndices_1_1.value;
|
|
50
|
+
var newKey = _this.recycleKeyManager.getKey(_this.getItemType(index), _this.getStableId(index), _this.renderStack.get(index));
|
|
51
|
+
newRenderStack.set(index, newKey);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
55
|
+
finally {
|
|
56
|
+
try {
|
|
57
|
+
if (engagedIndices_1_1 && !engagedIndices_1_1.done && (_b = engagedIndices_1.return)) _b.call(engagedIndices_1);
|
|
58
|
+
}
|
|
59
|
+
finally { if (e_2) throw e_2.error; }
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
// DANGER
|
|
63
|
+
for (var _j = tslib_1.__values(_this.renderStack), _k = _j.next(); !_k.done; _k = _j.next()) {
|
|
64
|
+
var _l = tslib_1.__read(_k.value, 2), index = _l[0], key = _l[1];
|
|
65
|
+
if (_this.recycleKeyManager.hasKeyInPool(key) &&
|
|
66
|
+
!newRenderStack.has(index) &&
|
|
67
|
+
index < ((_e = (_d = _this.props.data) === null || _d === void 0 ? void 0 : _d.length) !== null && _e !== void 0 ? _e : 0)) {
|
|
68
|
+
newRenderStack.set(index, key);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
73
|
+
finally {
|
|
74
|
+
try {
|
|
75
|
+
if (_k && !_k.done && (_c = _j.return)) _c.call(_j);
|
|
76
|
+
}
|
|
77
|
+
finally { if (e_3) throw e_3.error; }
|
|
78
|
+
}
|
|
79
|
+
_this.renderStack = newRenderStack;
|
|
80
|
+
};
|
|
81
|
+
this.props = props;
|
|
82
|
+
this.engagedIndicesTracker = new EngagedIndicesTracker_1.RVEngagedIndicesTrackerImpl();
|
|
83
|
+
this.recycleKeyManager = new RecycleKeyManager_1.RecycleKeyManagerImpl();
|
|
84
|
+
this.itemViewabilityManager = new ViewabilityManager_1.default(this);
|
|
85
|
+
}
|
|
86
|
+
RecyclerViewManager.prototype.updateProps = function (props) {
|
|
87
|
+
var _a, _b;
|
|
88
|
+
this.props = props;
|
|
89
|
+
this.engagedIndicesTracker.drawDistance =
|
|
90
|
+
(_a = props.drawDistance) !== null && _a !== void 0 ? _a : this.engagedIndicesTracker.drawDistance;
|
|
91
|
+
if (this.props.drawDistance === 0) {
|
|
92
|
+
this.initialDrawBatchSize = 1;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
this.initialDrawBatchSize = ((_b = props.numColumns) !== null && _b !== void 0 ? _b : 1) * 2;
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Updates the scroll offset and returns the engaged indices if any
|
|
100
|
+
* @param offset
|
|
101
|
+
* @param velocity
|
|
102
|
+
*/
|
|
103
|
+
RecyclerViewManager.prototype.updateScrollOffset = function (offset, velocity) {
|
|
104
|
+
if (this.layoutManager) {
|
|
105
|
+
var engagedIndices = this.engagedIndicesTracker.updateScrollOffset(offset - this.firstItemOffset, velocity, this.layoutManager);
|
|
106
|
+
if (engagedIndices) {
|
|
107
|
+
this.updateRenderStack(engagedIndices);
|
|
108
|
+
return engagedIndices;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return undefined;
|
|
112
|
+
};
|
|
113
|
+
RecyclerViewManager.prototype.getIsFirstLayoutComplete = function () {
|
|
114
|
+
return this.isFirstLayoutComplete;
|
|
115
|
+
};
|
|
116
|
+
RecyclerViewManager.prototype.getLayout = function (index) {
|
|
117
|
+
if (!this.layoutManager) {
|
|
118
|
+
throw new Error("LayoutManager is not initialized, layout info is unavailable");
|
|
119
|
+
}
|
|
120
|
+
return this.layoutManager.getLayout(index);
|
|
121
|
+
};
|
|
122
|
+
// Doesn't include header / foot etc
|
|
123
|
+
RecyclerViewManager.prototype.getChildContainerDimensions = function () {
|
|
124
|
+
if (!this.layoutManager) {
|
|
125
|
+
throw new Error("LayoutManager is not initialized, child container layout is unavailable");
|
|
126
|
+
}
|
|
127
|
+
return this.layoutManager.getLayoutSize();
|
|
128
|
+
};
|
|
129
|
+
RecyclerViewManager.prototype.getRenderStack = function () {
|
|
130
|
+
return this.renderStack;
|
|
131
|
+
};
|
|
132
|
+
RecyclerViewManager.prototype.getWindowSize = function () {
|
|
133
|
+
if (!this.layoutManager) {
|
|
134
|
+
throw new Error("LayoutManager is not initialized, window size is unavailable");
|
|
135
|
+
}
|
|
136
|
+
return this.layoutManager.getWindowsSize();
|
|
137
|
+
};
|
|
138
|
+
// Includes first item offset correction
|
|
139
|
+
RecyclerViewManager.prototype.getLastScrollOffset = function () {
|
|
140
|
+
return this.engagedIndicesTracker.scrollOffset;
|
|
141
|
+
};
|
|
142
|
+
// Doesn't include first item offset correction
|
|
143
|
+
RecyclerViewManager.prototype.getAbsoluteLastScrollOffset = function () {
|
|
144
|
+
return this.engagedIndicesTracker.scrollOffset + this.firstItemOffset;
|
|
145
|
+
};
|
|
146
|
+
RecyclerViewManager.prototype.updateLayoutParams = function (windowSize, firstItemOffset) {
|
|
147
|
+
var _this = this;
|
|
148
|
+
var _a, _b, _c, _d, _e;
|
|
149
|
+
this.firstItemOffset = firstItemOffset;
|
|
150
|
+
var LayoutManagerClass = this.getLayoutManagerClass();
|
|
151
|
+
if (this.layoutManager &&
|
|
152
|
+
Boolean((_a = this.layoutManager) === null || _a === void 0 ? void 0 : _a.isHorizontal()) !==
|
|
153
|
+
Boolean(this.props.horizontal)) {
|
|
154
|
+
throw new Error("Horizontal prop cannot be toggled, you can use a key on FlashList to recreate it.");
|
|
155
|
+
}
|
|
156
|
+
if (!(this.layoutManager instanceof LayoutManagerClass)) {
|
|
157
|
+
//console.log("-----> new LayoutManagerClass");
|
|
158
|
+
this.layoutManager = new LayoutManagerClass({
|
|
159
|
+
windowSize: windowSize,
|
|
160
|
+
maxColumns: (_b = this.props.numColumns) !== null && _b !== void 0 ? _b : 1,
|
|
161
|
+
horizontal: !!this.props.horizontal,
|
|
162
|
+
optimizeItemArrangement: (_c = this.props.optimizeItemArrangement) !== null && _c !== void 0 ? _c : true,
|
|
163
|
+
overrideItemLayout: function (index, layout) {
|
|
164
|
+
var _a, _b, _c;
|
|
165
|
+
(_b = (_a = _this.props) === null || _a === void 0 ? void 0 : _a.overrideItemLayout) === null || _b === void 0 ? void 0 : _b.call(_a, layout, _this.props.data[index], index, (_c = _this.props.numColumns) !== null && _c !== void 0 ? _c : 1, _this.props.extraData);
|
|
166
|
+
},
|
|
167
|
+
}, this.layoutManager);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
this.layoutManager.updateLayoutParams({
|
|
171
|
+
windowSize: windowSize,
|
|
172
|
+
maxColumns: (_d = this.props.numColumns) !== null && _d !== void 0 ? _d : 1,
|
|
173
|
+
horizontal: !!this.props.horizontal,
|
|
174
|
+
optimizeItemArrangement: (_e = this.props.optimizeItemArrangement) !== null && _e !== void 0 ? _e : true,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
RecyclerViewManager.prototype.hasLayout = function () {
|
|
179
|
+
return this.layoutManager !== undefined;
|
|
180
|
+
};
|
|
181
|
+
RecyclerViewManager.prototype.getVisibleIndices = function () {
|
|
182
|
+
if (!this.layoutManager) {
|
|
183
|
+
throw new Error("LayoutManager is not initialized, visible indices are not unavailable");
|
|
184
|
+
}
|
|
185
|
+
return this.engagedIndicesTracker.computeVisibleIndices(this.layoutManager);
|
|
186
|
+
};
|
|
187
|
+
RecyclerViewManager.prototype.getEngagedIndices = function () {
|
|
188
|
+
return this.engagedIndicesTracker.getEngagedIndices();
|
|
189
|
+
};
|
|
190
|
+
RecyclerViewManager.prototype.modifyChildrenLayout = function (layoutInfo, dataLength) {
|
|
191
|
+
var _a, _b;
|
|
192
|
+
(_a = this.layoutManager) === null || _a === void 0 ? void 0 : _a.modifyLayout(layoutInfo, dataLength);
|
|
193
|
+
if (dataLength === 0) {
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
if ((_b = this.layoutManager) === null || _b === void 0 ? void 0 : _b.requiresRepaint) {
|
|
197
|
+
// console.log("requiresRepaint triggered");
|
|
198
|
+
this.layoutManager.requiresRepaint = false;
|
|
199
|
+
return true;
|
|
200
|
+
}
|
|
201
|
+
if (this.hasRenderedProgressively) {
|
|
202
|
+
return this.recomputeEngagedIndices() !== undefined; //TODO: Move to an effect as this can block paint for more than necessary
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
this.renderProgressively();
|
|
206
|
+
}
|
|
207
|
+
return !this.hasRenderedProgressively;
|
|
208
|
+
};
|
|
209
|
+
RecyclerViewManager.prototype.computeItemViewability = function () {
|
|
210
|
+
// Using higher buffer for masonry to avoid missing items
|
|
211
|
+
this.itemViewabilityManager.shouldListenToVisibleIndices &&
|
|
212
|
+
this.itemViewabilityManager.updateViewableItems(this.props.masonry
|
|
213
|
+
? this.engagedIndicesTracker.getEngagedIndices().toArray()
|
|
214
|
+
: this.getVisibleIndices().toArray());
|
|
215
|
+
};
|
|
216
|
+
RecyclerViewManager.prototype.recordInteraction = function () {
|
|
217
|
+
this.itemViewabilityManager.recordInteraction();
|
|
218
|
+
};
|
|
219
|
+
RecyclerViewManager.prototype.recomputeViewableItems = function () {
|
|
220
|
+
this.itemViewabilityManager.recomputeViewableItems();
|
|
221
|
+
};
|
|
222
|
+
RecyclerViewManager.prototype.processDataUpdate = function () {
|
|
223
|
+
var _a, _b;
|
|
224
|
+
if (this.hasLayout()) {
|
|
225
|
+
this.modifyChildrenLayout([], (_b = (_a = this.props.data) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0);
|
|
226
|
+
if (!this.recomputeEngagedIndices()) {
|
|
227
|
+
// recomputeEngagedIndices will update the render stack if there are any changes in the engaged indices.
|
|
228
|
+
// It's important to update render stack so that elements are assgined right keys incase items were deleted.
|
|
229
|
+
this.updateRenderStack(this.engagedIndicesTracker.getEngagedIndices());
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
RecyclerViewManager.prototype.recomputeEngagedIndices = function () {
|
|
234
|
+
return this.updateScrollOffset(this.getAbsoluteLastScrollOffset());
|
|
235
|
+
};
|
|
236
|
+
RecyclerViewManager.prototype.dispose = function () {
|
|
237
|
+
this.itemViewabilityManager.dispose();
|
|
238
|
+
};
|
|
239
|
+
RecyclerViewManager.prototype.getInitialScrollIndex = function () {
|
|
240
|
+
var _a, _b;
|
|
241
|
+
return ((_a = this.props.initialScrollIndex) !== null && _a !== void 0 ? _a : (((_b = this.props.maintainVisibleContentPosition) === null || _b === void 0 ? void 0 : _b.startRenderingFromBottom)
|
|
242
|
+
? this.getDataLength() - 1
|
|
243
|
+
: undefined));
|
|
244
|
+
};
|
|
245
|
+
RecyclerViewManager.prototype.getDataLength = function () {
|
|
246
|
+
var _a, _b;
|
|
247
|
+
return (_b = (_a = this.props.data) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
|
|
248
|
+
};
|
|
249
|
+
RecyclerViewManager.prototype.getLayoutManagerClass = function () {
|
|
250
|
+
var _a, _b;
|
|
251
|
+
// throw errors for incompatible props
|
|
252
|
+
if (this.props.masonry && this.props.horizontal) {
|
|
253
|
+
throw new Error("Masonry and horizontal props are incompatible");
|
|
254
|
+
}
|
|
255
|
+
if (((_a = this.props.numColumns) !== null && _a !== void 0 ? _a : 1) > 1 && this.props.horizontal) {
|
|
256
|
+
throw new Error("numColumns and horizontal props are incompatible");
|
|
257
|
+
}
|
|
258
|
+
return this.props.masonry
|
|
259
|
+
? MasonryLayoutManager_1.RVMasonryLayoutManagerImpl
|
|
260
|
+
: ((_b = this.props.numColumns) !== null && _b !== void 0 ? _b : 1) > 1 && !this.props.horizontal
|
|
261
|
+
? GridLayoutManager_1.RVGridLayoutManagerImpl
|
|
262
|
+
: LinearLayoutManager_1.RVLinearLayoutManagerImpl;
|
|
263
|
+
};
|
|
264
|
+
RecyclerViewManager.prototype.applyInitialScrollAdjustment = function () {
|
|
265
|
+
var _a;
|
|
266
|
+
if (!this.layoutManager || this.getDataLength() === 0) {
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
var initialScrollIndex = this.getInitialScrollIndex();
|
|
270
|
+
var initialItemLayout = (_a = this.layoutManager) === null || _a === void 0 ? void 0 : _a.getLayout(initialScrollIndex !== null && initialScrollIndex !== void 0 ? initialScrollIndex : 0);
|
|
271
|
+
var initialItemOffset = this.props.horizontal
|
|
272
|
+
? initialItemLayout === null || initialItemLayout === void 0 ? void 0 : initialItemLayout.x
|
|
273
|
+
: initialItemLayout === null || initialItemLayout === void 0 ? void 0 : initialItemLayout.y;
|
|
274
|
+
if (initialScrollIndex !== undefined) {
|
|
275
|
+
// console.log(
|
|
276
|
+
// "initialItemOffset",
|
|
277
|
+
// initialScrollIndex,
|
|
278
|
+
// initialItemOffset,
|
|
279
|
+
// this.firstItemOffset
|
|
280
|
+
// );
|
|
281
|
+
this.layoutManager.recomputeLayouts(0, initialScrollIndex);
|
|
282
|
+
this.engagedIndicesTracker.scrollOffset =
|
|
283
|
+
initialItemOffset !== null && initialItemOffset !== void 0 ? initialItemOffset : 0 + this.firstItemOffset;
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
//console.log("initialItemOffset", initialItemOffset, this.firstItemOffset);
|
|
287
|
+
this.engagedIndicesTracker.scrollOffset =
|
|
288
|
+
(initialItemOffset !== null && initialItemOffset !== void 0 ? initialItemOffset : 0) - this.firstItemOffset;
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
RecyclerViewManager.prototype.renderProgressively = function () {
|
|
292
|
+
var layoutManager = this.layoutManager;
|
|
293
|
+
if (layoutManager) {
|
|
294
|
+
this.applyInitialScrollAdjustment();
|
|
295
|
+
var visibleIndices = this.getVisibleIndices();
|
|
296
|
+
//console.log("---------> visibleIndices", visibleIndices);
|
|
297
|
+
this.hasRenderedProgressively = visibleIndices.every(function (index) {
|
|
298
|
+
return layoutManager.getLayout(index).isHeightMeasured &&
|
|
299
|
+
layoutManager.getLayout(index).isWidthMeasured;
|
|
300
|
+
});
|
|
301
|
+
if (this.hasRenderedProgressively) {
|
|
302
|
+
this.isFirstLayoutComplete = true;
|
|
303
|
+
}
|
|
304
|
+
// If everything is measured then render stack will be in sync. The buffer items will get rendered in the next update
|
|
305
|
+
// triggered by the useOnLoad hook.
|
|
306
|
+
!this.hasRenderedProgressively &&
|
|
307
|
+
this.updateRenderStack(
|
|
308
|
+
// pick first n indices from visible ones and n is size of renderStack
|
|
309
|
+
visibleIndices.slice(0, Math.min(visibleIndices.length, this.renderStack.size + this.initialDrawBatchSize)));
|
|
310
|
+
}
|
|
311
|
+
};
|
|
312
|
+
RecyclerViewManager.prototype.getItemType = function (index) {
|
|
313
|
+
var _a, _b, _c;
|
|
314
|
+
return ((_c = (_b = (_a = this.props).getItemType) === null || _b === void 0 ? void 0 : _b.call(_a, this.props.data[index], index)) !== null && _c !== void 0 ? _c : "default").toString();
|
|
315
|
+
};
|
|
316
|
+
RecyclerViewManager.prototype.getStableId = function (index) {
|
|
317
|
+
var _a, _b, _c;
|
|
318
|
+
return ((_c = (_b = (_a = this.props).keyExtractor) === null || _b === void 0 ? void 0 : _b.call(_a, this.props.data[index], index)) !== null && _c !== void 0 ? _c : index.toString());
|
|
319
|
+
};
|
|
320
|
+
return RecyclerViewManager;
|
|
321
|
+
}());
|
|
322
|
+
exports.RecyclerViewManager = RecyclerViewManager;
|
|
323
|
+
//# sourceMappingURL=RecyclerViewManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecyclerViewManager.js","sourceRoot":"","sources":["../../src/recyclerview/RecyclerViewManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FlashListProps } from "../FlashListProps";
|
|
2
|
+
import { ScrollViewProps } from "react-native";
|
|
3
|
+
export interface RecyclerViewProps<TItem> extends Omit<FlashListProps<TItem>, "contentContainerStyle"> {
|
|
4
|
+
/**
|
|
5
|
+
* Style for the RecyclerView's parent container.
|
|
6
|
+
*/
|
|
7
|
+
contentContainerStyle?: ScrollViewProps["contentContainerStyle"];
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=RecyclerViewProps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecyclerViewProps.d.ts","sourceRoot":"","sources":["../../src/recyclerview/RecyclerViewProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,iBAAiB,CAAC,KAAK,CACtC,SAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,uBAAuB,CAAC;IAC5D;;OAEG;IACH,qBAAqB,CAAC,EAAE,eAAe,CAAC,uBAAuB,CAAC,CAAC;CAClE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecyclerViewProps.js","sourceRoot":"","sources":["../../src/recyclerview/RecyclerViewProps.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ViewHolder is a core component in FlashList that manages individual item rendering and layout.
|
|
3
|
+
* It handles the rendering of list items, separators, and manages layout updates for each item.
|
|
4
|
+
* The component is memoized to prevent unnecessary re-renders and includes layout comparison logic.
|
|
5
|
+
*/
|
|
6
|
+
import React, { RefObject } from "react";
|
|
7
|
+
import { FlashListProps, RenderTarget } from "../FlashListProps";
|
|
8
|
+
import { RVDimension, RVLayout } from "./layout-managers/LayoutManager";
|
|
9
|
+
import { CompatView } from "./components/CompatView";
|
|
10
|
+
/**
|
|
11
|
+
* Props interface for the ViewHolder component
|
|
12
|
+
* @template TItem - The type of item being rendered in the list
|
|
13
|
+
*/
|
|
14
|
+
export interface ViewHolderProps<TItem> {
|
|
15
|
+
/** Index of the item in the data array */
|
|
16
|
+
index: number;
|
|
17
|
+
/** Layout information for positioning and sizing the item */
|
|
18
|
+
layout: RVLayout;
|
|
19
|
+
/** Map to store refs for each ViewHolder instance, keyed by index */
|
|
20
|
+
refHolder: Map<number, RefObject<CompatView | null>>;
|
|
21
|
+
/** Additional data passed to renderItem that can trigger re-renders */
|
|
22
|
+
extraData: any;
|
|
23
|
+
/** Specifies the rendering target (e.g., "Cell", "StickyHeader") */
|
|
24
|
+
target: RenderTarget;
|
|
25
|
+
/** The actual item data to be rendered */
|
|
26
|
+
item: TItem;
|
|
27
|
+
/** The next item in the list, used for rendering separators */
|
|
28
|
+
trailingItem: TItem | undefined;
|
|
29
|
+
/** Function to render the item content */
|
|
30
|
+
renderItem: FlashListProps<TItem>["renderItem"];
|
|
31
|
+
/** Optional custom component to wrap each item */
|
|
32
|
+
CellRendererComponent?: FlashListProps<TItem>["CellRendererComponent"];
|
|
33
|
+
/** Optional component to render between items */
|
|
34
|
+
ItemSeparatorComponent?: FlashListProps<TItem>["ItemSeparatorComponent"];
|
|
35
|
+
/** Whether the list is horizontal or vertical */
|
|
36
|
+
horizontal?: FlashListProps<TItem>["horizontal"];
|
|
37
|
+
/** Callback when the item's size changes */
|
|
38
|
+
onSizeChanged?: (index: number, size: RVDimension) => void;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Memoized ViewHolder component that prevents unnecessary re-renders by comparing props
|
|
42
|
+
* @template TItem - The type of item being rendered in the list
|
|
43
|
+
*/
|
|
44
|
+
export declare const ViewHolder: React.MemoExoticComponent<(<TItem>(props: ViewHolderProps<TItem>) => React.JSX.Element)>;
|
|
45
|
+
//# sourceMappingURL=ViewHolder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ViewHolder.d.ts","sourceRoot":"","sources":["../../src/recyclerview/ViewHolder.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,EACZ,SAAS,EAKV,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,eAAe,CAAC,KAAK;IACpC,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,MAAM,EAAE,QAAQ,CAAC;IACjB,qEAAqE;IACrE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC;IACrD,uEAAuE;IACvE,SAAS,EAAE,GAAG,CAAC;IACf,oEAAoE;IACpE,MAAM,EAAE,YAAY,CAAC;IACrB,0CAA0C;IAC1C,IAAI,EAAE,KAAK,CAAC;IACZ,+DAA+D;IAC/D,YAAY,EAAE,KAAK,GAAG,SAAS,CAAC;IAChC,0CAA0C;IAC1C,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;IAChD,kDAAkD;IAClD,qBAAqB,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,uBAAuB,CAAC,CAAC;IACvE,iDAAiD;IACjD,sBAAsB,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,wBAAwB,CAAC,CAAC;IACzE,iDAAiD;IACjD,UAAU,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;IACjD,4CAA4C;IAC5C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;CAC5D;AA8ED;;;GAGG;AACH,eAAO,MAAM,UAAU,0FAmBtB,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ViewHolder is a core component in FlashList that manages individual item rendering and layout.
|
|
4
|
+
* It handles the rendering of list items, separators, and manages layout updates for each item.
|
|
5
|
+
* The component is memoized to prevent unnecessary re-renders and includes layout comparison logic.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.ViewHolder = void 0;
|
|
9
|
+
var tslib_1 = require("tslib");
|
|
10
|
+
var react_1 = tslib_1.__importStar(require("react"));
|
|
11
|
+
var CompatView_1 = require("./components/CompatView");
|
|
12
|
+
/**
|
|
13
|
+
* Internal ViewHolder component that handles the actual rendering of list items
|
|
14
|
+
* @template TItem - The type of item being rendered in the list
|
|
15
|
+
*/
|
|
16
|
+
var ViewHolderInternal = function (props) {
|
|
17
|
+
// create ref for View
|
|
18
|
+
var viewRef = (0, react_1.useRef)(null);
|
|
19
|
+
var index = props.index, refHolder = props.refHolder, layout = props.layout, onSizeChanged = props.onSizeChanged, renderItem = props.renderItem, extraData = props.extraData, item = props.item, target = props.target, CellRendererComponent = props.CellRendererComponent, ItemSeparatorComponent = props.ItemSeparatorComponent, trailingItem = props.trailingItem, horizontal = props.horizontal;
|
|
20
|
+
(0, react_1.useLayoutEffect)(function () {
|
|
21
|
+
refHolder.set(index, viewRef);
|
|
22
|
+
return function () {
|
|
23
|
+
if (refHolder.get(index) === viewRef) {
|
|
24
|
+
refHolder.delete(index);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}, [index, refHolder]);
|
|
28
|
+
var onLayout = (0, react_1.useCallback)(function (event) {
|
|
29
|
+
onSizeChanged === null || onSizeChanged === void 0 ? void 0 : onSizeChanged(index, event.nativeEvent.layout);
|
|
30
|
+
}, [index, onSizeChanged]);
|
|
31
|
+
var separator = (0, react_1.useMemo)(function () {
|
|
32
|
+
return ItemSeparatorComponent ? (react_1.default.createElement(ItemSeparatorComponent, { leadingItem: item, trailingItem: trailingItem })) : null;
|
|
33
|
+
}, [ItemSeparatorComponent, item, trailingItem]);
|
|
34
|
+
//console.log("ViewHolder re-render", index);
|
|
35
|
+
var children = (0, react_1.useMemo)(function () {
|
|
36
|
+
var _a;
|
|
37
|
+
return (_a = renderItem === null || renderItem === void 0 ? void 0 : renderItem({ item: item, index: index, extraData: extraData, target: target })) !== null && _a !== void 0 ? _a : null;
|
|
38
|
+
}, [item, index, extraData, target, renderItem]);
|
|
39
|
+
var style = {
|
|
40
|
+
flexDirection: horizontal ? "row" : "column",
|
|
41
|
+
position: target === "StickyHeader" ? "relative" : "absolute",
|
|
42
|
+
width: layout.enforcedWidth ? layout.width : undefined,
|
|
43
|
+
height: layout.enforcedHeight ? layout.height : undefined,
|
|
44
|
+
minHeight: layout.minHeight,
|
|
45
|
+
minWidth: layout.minWidth,
|
|
46
|
+
maxHeight: layout.maxHeight,
|
|
47
|
+
maxWidth: layout.maxWidth,
|
|
48
|
+
left: layout.x,
|
|
49
|
+
top: layout.y,
|
|
50
|
+
zIndex: 0,
|
|
51
|
+
};
|
|
52
|
+
//TODO: Fix this type issue
|
|
53
|
+
var CompatContainer = (CellRendererComponent !== null && CellRendererComponent !== void 0 ? CellRendererComponent : CompatView_1.CompatView);
|
|
54
|
+
return (react_1.default.createElement(CompatContainer, { ref: viewRef, onLayout: onLayout, style: style },
|
|
55
|
+
children,
|
|
56
|
+
separator));
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Memoized ViewHolder component that prevents unnecessary re-renders by comparing props
|
|
60
|
+
* @template TItem - The type of item being rendered in the list
|
|
61
|
+
*/
|
|
62
|
+
exports.ViewHolder = react_1.default.memo(ViewHolderInternal, function (prevProps, nextProps) {
|
|
63
|
+
// compare all props and spread layout
|
|
64
|
+
return (prevProps.index === nextProps.index &&
|
|
65
|
+
areLayoutsEqual(prevProps.layout, nextProps.layout) &&
|
|
66
|
+
prevProps.refHolder === nextProps.refHolder &&
|
|
67
|
+
prevProps.onSizeChanged === nextProps.onSizeChanged &&
|
|
68
|
+
prevProps.extraData === nextProps.extraData &&
|
|
69
|
+
prevProps.target === nextProps.target &&
|
|
70
|
+
prevProps.item === nextProps.item &&
|
|
71
|
+
prevProps.renderItem === nextProps.renderItem &&
|
|
72
|
+
prevProps.CellRendererComponent === nextProps.CellRendererComponent &&
|
|
73
|
+
prevProps.ItemSeparatorComponent === nextProps.ItemSeparatorComponent &&
|
|
74
|
+
prevProps.trailingItem === nextProps.trailingItem &&
|
|
75
|
+
prevProps.horizontal === nextProps.horizontal);
|
|
76
|
+
});
|
|
77
|
+
/**
|
|
78
|
+
* Compares two RVLayout objects to determine if they are equal
|
|
79
|
+
* Used in the memo comparison function to prevent unnecessary re-renders
|
|
80
|
+
* @param prevLayout - Previous layout object
|
|
81
|
+
* @param nextLayout - Next layout object
|
|
82
|
+
* @returns boolean indicating if layouts are equal
|
|
83
|
+
*/
|
|
84
|
+
function areLayoutsEqual(prevLayout, nextLayout) {
|
|
85
|
+
return (prevLayout.x === nextLayout.x &&
|
|
86
|
+
prevLayout.y === nextLayout.y &&
|
|
87
|
+
prevLayout.width === nextLayout.width &&
|
|
88
|
+
prevLayout.height === nextLayout.height &&
|
|
89
|
+
prevLayout.enforcedWidth === nextLayout.enforcedWidth &&
|
|
90
|
+
prevLayout.enforcedHeight === nextLayout.enforcedHeight &&
|
|
91
|
+
prevLayout.minWidth === nextLayout.minWidth &&
|
|
92
|
+
prevLayout.minHeight === nextLayout.minHeight &&
|
|
93
|
+
prevLayout.maxWidth === nextLayout.maxWidth &&
|
|
94
|
+
prevLayout.maxHeight === nextLayout.maxHeight);
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=ViewHolder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ViewHolder.js","sourceRoot":"","sources":["../../src/recyclerview/ViewHolder.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;;;;AAGH,qDAMe;AAKf,sDAAqD;AAiCrD;;;GAGG;AACH,IAAM,kBAAkB,GAAG,UAAS,KAA6B;IAC/D,sBAAsB;IACtB,IAAM,OAAO,GAAG,IAAA,cAAM,EAAa,IAAI,CAAC,CAAC;IAEvC,IAAA,KAAK,GAYH,KAAK,MAZF,EACL,SAAS,GAWP,KAAK,UAXE,EACT,MAAM,GAUJ,KAAK,OAVD,EACN,aAAa,GASX,KAAK,cATM,EACb,UAAU,GAQR,KAAK,WARG,EACV,SAAS,GAOP,KAAK,UAPE,EACT,IAAI,GAMF,KAAK,KANH,EACJ,MAAM,GAKJ,KAAK,OALD,EACN,qBAAqB,GAInB,KAAK,sBAJc,EACrB,sBAAsB,GAGpB,KAAK,uBAHe,EACtB,YAAY,GAEV,KAAK,aAFK,EACZ,UAAU,GACR,KAAK,WADG,CACF;IAEV,IAAA,uBAAe,EAAC;QACd,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9B,OAAO;YACL,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE;gBACpC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACzB;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IAEvB,IAAM,QAAQ,GAAG,IAAA,mBAAW,EAC1B,UAAC,KAAwB;QACvB,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAG,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC,EACD,CAAC,KAAK,EAAE,aAAa,CAAC,CACvB,CAAC;IAEF,IAAM,SAAS,GAAG,IAAA,eAAO,EAAC;QACxB,OAAO,sBAAsB,CAAC,CAAC,CAAC,CAC9B,8BAAC,sBAAsB,IAAC,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,GAAI,CAC1E,CAAC,CAAC,CAAC,IAAI,CAAC;IACX,CAAC,EAAE,CAAC,sBAAsB,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;IAEjD,6CAA6C;IAE7C,IAAM,QAAQ,GAAG,IAAA,eAAO,EAAC;;QACvB,OAAO,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,EAAE,IAAI,MAAA,EAAE,KAAK,OAAA,EAAE,SAAS,WAAA,EAAE,MAAM,QAAA,EAAE,CAAC,mCAAI,IAAI,CAAC;IAClE,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAEjD,IAAM,KAAK,GAAG;QACZ,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;QAC5C,QAAQ,EAAE,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;QAC7D,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QACtD,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACzD,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,MAAM,CAAC,CAAC;QACd,GAAG,EAAE,MAAM,CAAC,CAAC;QACb,MAAM,EAAE,CAAC;KACD,CAAC;IAEX,2BAA2B;IAC3B,IAAM,eAAe,GAAG,CAAC,qBAAqB,aAArB,qBAAqB,cAArB,qBAAqB,GAC5C,uBAAU,CAAmB,CAAC;IAEhC,OAAO,CACL,8BAAC,eAAe,IAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK;QAC5D,QAAQ;QACR,SAAS,CACM,CACnB,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACU,QAAA,UAAU,GAAG,eAAK,CAAC,IAAI,CAClC,kBAAkB,EAClB,UAAC,SAAS,EAAE,SAAS;IACnB,sCAAsC;IACtC,OAAO,CACL,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK;QACnC,eAAe,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC;QACnD,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS;QAC3C,SAAS,CAAC,aAAa,KAAK,SAAS,CAAC,aAAa;QACnD,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS;QAC3C,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;QACrC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI;QACjC,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU;QAC7C,SAAS,CAAC,qBAAqB,KAAK,SAAS,CAAC,qBAAqB;QACnE,SAAS,CAAC,sBAAsB,KAAK,SAAS,CAAC,sBAAsB;QACrE,SAAS,CAAC,YAAY,KAAK,SAAS,CAAC,YAAY;QACjD,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU,CAC9C,CAAC;AACJ,CAAC,CACF,CAAC;AAEF;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,UAAoB,EAAE,UAAoB;IACjE,OAAO,CACL,UAAU,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC;QAC7B,UAAU,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC;QAC7B,UAAU,CAAC,KAAK,KAAK,UAAU,CAAC,KAAK;QACrC,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM;QACvC,UAAU,CAAC,aAAa,KAAK,UAAU,CAAC,aAAa;QACrD,UAAU,CAAC,cAAc,KAAK,UAAU,CAAC,cAAc;QACvD,UAAU,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ;QAC3C,UAAU,CAAC,SAAS,KAAK,UAAU,CAAC,SAAS;QAC7C,UAAU,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ;QAC3C,UAAU,CAAC,SAAS,KAAK,UAAU,CAAC,SAAS,CAC9C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ViewHolderCollection is a container component that manages multiple ViewHolder instances.
|
|
3
|
+
* It handles the rendering of a collection of list items, manages layout updates,
|
|
4
|
+
* and coordinates with the RecyclerView context for layout changes.
|
|
5
|
+
*/
|
|
6
|
+
import React from "react";
|
|
7
|
+
import { ViewHolderProps } from "./ViewHolder";
|
|
8
|
+
import { RVDimension, RVLayout } from "./layout-managers/LayoutManager";
|
|
9
|
+
import { FlashListProps } from "../FlashListProps";
|
|
10
|
+
/**
|
|
11
|
+
* Props interface for the ViewHolderCollection component
|
|
12
|
+
* @template TItem - The type of items in the data array
|
|
13
|
+
*/
|
|
14
|
+
export interface ViewHolderCollectionProps<TItem> {
|
|
15
|
+
/** The data array to be rendered */
|
|
16
|
+
data: FlashListProps<TItem>["data"];
|
|
17
|
+
/** Map of indices to React keys for each rendered item */
|
|
18
|
+
renderStack: Map<number, string>;
|
|
19
|
+
/** Function to get layout information for a specific index */
|
|
20
|
+
getLayout: (index: number) => RVLayout;
|
|
21
|
+
/** Ref to control layout updates from parent components */
|
|
22
|
+
viewHolderCollectionRef: React.Ref<ViewHolderCollectionRef>;
|
|
23
|
+
/** Map to store refs for each ViewHolder instance */
|
|
24
|
+
refHolder: ViewHolderProps<TItem>["refHolder"];
|
|
25
|
+
/** Callback when any item's size changes */
|
|
26
|
+
onSizeChanged: ViewHolderProps<TItem>["onSizeChanged"];
|
|
27
|
+
/** Function to render each item */
|
|
28
|
+
renderItem: FlashListProps<TItem>["renderItem"];
|
|
29
|
+
/** Additional data passed to renderItem that can trigger re-renders */
|
|
30
|
+
extraData: any;
|
|
31
|
+
/** Function to get the container's layout dimensions */
|
|
32
|
+
getChildContainerLayout: () => RVDimension | undefined;
|
|
33
|
+
/** Callback after layout effects are committed */
|
|
34
|
+
onCommitLayoutEffect?: () => void;
|
|
35
|
+
/** Callback after effects are committed */
|
|
36
|
+
onCommitEffect?: () => void;
|
|
37
|
+
/** Optional custom component to wrap each item */
|
|
38
|
+
CellRendererComponent?: FlashListProps<TItem>["CellRendererComponent"];
|
|
39
|
+
/** Optional component to render between items */
|
|
40
|
+
ItemSeparatorComponent?: FlashListProps<TItem>["ItemSeparatorComponent"];
|
|
41
|
+
/** Whether the list is horizontal or vertical */
|
|
42
|
+
horizontal: FlashListProps<TItem>["horizontal"];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Ref interface for ViewHolderCollection that exposes methods to control layout updates
|
|
46
|
+
*/
|
|
47
|
+
export interface ViewHolderCollectionRef {
|
|
48
|
+
/** Forces a layout update by triggering a re-render */
|
|
49
|
+
commitLayout: () => void;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* ViewHolderCollection component that manages the rendering of multiple ViewHolder instances
|
|
53
|
+
* and handles layout updates for the entire collection
|
|
54
|
+
* @template TItem - The type of items in the data array
|
|
55
|
+
*/
|
|
56
|
+
export declare const ViewHolderCollection: <TItem>(props: ViewHolderCollectionProps<TItem>) => React.JSX.Element;
|
|
57
|
+
//# sourceMappingURL=ViewHolderCollection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ViewHolderCollection.d.ts","sourceRoot":"","sources":["../../src/recyclerview/ViewHolderCollection.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAA0D,MAAM,OAAO,CAAC;AAC/E,OAAO,EAAc,eAAe,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAInD;;;GAGG;AACH,MAAM,WAAW,yBAAyB,CAAC,KAAK;IAC9C,oCAAoC;IACpC,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;IACpC,0DAA0D;IAC1D,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,8DAA8D;IAC9D,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,QAAQ,CAAC;IACvC,2DAA2D;IAC3D,uBAAuB,EAAE,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAC5D,qDAAqD;IACrD,SAAS,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC;IAC/C,4CAA4C;IAC5C,aAAa,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC;IACvD,mCAAmC;IACnC,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;IAChD,uEAAuE;IACvE,SAAS,EAAE,GAAG,CAAC;IACf,wDAAwD;IACxD,uBAAuB,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IACvD,kDAAkD;IAClD,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,2CAA2C;IAC3C,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,kDAAkD;IAClD,qBAAqB,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,uBAAuB,CAAC,CAAC;IACvE,iDAAiD;IACjD,sBAAsB,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,wBAAwB,CAAC,CAAC;IACzE,iDAAiD;IACjD,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,uDAAuD;IACvD,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,uEAsGhC,CAAC"}
|