@shopify/flash-list 2.0.0-alpha.9 → 2.0.0-rc.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 +37 -97
- package/dist/AnimatedFlashList.d.ts.map +1 -1
- package/dist/AnimatedFlashList.js +3 -3
- package/dist/AnimatedFlashList.js.map +1 -1
- package/dist/FlashList.d.ts +9 -0
- package/dist/FlashList.d.ts.map +1 -1
- package/dist/FlashList.js +20 -0
- package/dist/FlashList.js.map +1 -1
- package/dist/FlashListProps.d.ts +15 -8
- package/dist/FlashListProps.d.ts.map +1 -1
- package/dist/FlashListProps.js.map +1 -1
- package/dist/FlashListRef.d.ts +305 -0
- package/dist/FlashListRef.d.ts.map +1 -0
- package/dist/FlashListRef.js +3 -0
- package/dist/FlashListRef.js.map +1 -0
- package/dist/MasonryFlashList.js.map +1 -1
- package/dist/__tests__/RecyclerView.test.js +62 -27
- package/dist/__tests__/RecyclerView.test.js.map +1 -1
- package/dist/__tests__/RenderStackManager.test.d.ts +2 -0
- package/dist/__tests__/RenderStackManager.test.d.ts.map +1 -0
- package/dist/__tests__/RenderStackManager.test.js +486 -0
- package/dist/__tests__/RenderStackManager.test.js.map +1 -0
- package/dist/__tests__/helpers/createLayoutManager.d.ts.map +1 -1
- package/dist/__tests__/helpers/createLayoutManager.js +3 -4
- package/dist/__tests__/helpers/createLayoutManager.js.map +1 -1
- package/dist/__tests__/useUnmountAwareCallbacks.test.js +1 -1
- package/dist/__tests__/useUnmountAwareCallbacks.test.js.map +1 -1
- package/dist/benchmark/useFlatListBenchmark.js +8 -7
- package/dist/benchmark/useFlatListBenchmark.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/native/config/PlatformHelper.android.d.ts +1 -0
- package/dist/native/config/PlatformHelper.android.d.ts.map +1 -1
- package/dist/native/config/PlatformHelper.android.js +1 -0
- package/dist/native/config/PlatformHelper.android.js.map +1 -1
- package/dist/native/config/PlatformHelper.d.ts +1 -0
- package/dist/native/config/PlatformHelper.d.ts.map +1 -1
- package/dist/native/config/PlatformHelper.ios.d.ts +1 -0
- package/dist/native/config/PlatformHelper.ios.d.ts.map +1 -1
- package/dist/native/config/PlatformHelper.ios.js +1 -0
- package/dist/native/config/PlatformHelper.ios.js.map +1 -1
- package/dist/native/config/PlatformHelper.js +1 -0
- package/dist/native/config/PlatformHelper.js.map +1 -1
- package/dist/native/config/PlatformHelper.web.d.ts +1 -0
- package/dist/native/config/PlatformHelper.web.d.ts.map +1 -1
- package/dist/native/config/PlatformHelper.web.js +1 -0
- package/dist/native/config/PlatformHelper.web.js.map +1 -1
- package/dist/recyclerview/RecyclerView.d.ts +2 -1
- package/dist/recyclerview/RecyclerView.d.ts.map +1 -1
- package/dist/recyclerview/RecyclerView.js +63 -45
- package/dist/recyclerview/RecyclerView.js.map +1 -1
- package/dist/recyclerview/RecyclerViewContextProvider.d.ts +6 -5
- package/dist/recyclerview/RecyclerViewContextProvider.d.ts.map +1 -1
- package/dist/recyclerview/RecyclerViewContextProvider.js.map +1 -1
- package/dist/recyclerview/RecyclerViewManager.d.ts +21 -7
- package/dist/recyclerview/RecyclerViewManager.d.ts.map +1 -1
- package/dist/recyclerview/RecyclerViewManager.js +105 -113
- package/dist/recyclerview/RecyclerViewManager.js.map +1 -1
- package/dist/recyclerview/RenderStackManager.d.ts +85 -0
- package/dist/recyclerview/RenderStackManager.d.ts.map +1 -0
- package/dist/recyclerview/RenderStackManager.js +324 -0
- package/dist/recyclerview/RenderStackManager.js.map +1 -0
- package/dist/recyclerview/ViewHolder.d.ts.map +1 -1
- package/dist/recyclerview/ViewHolder.js +5 -3
- package/dist/recyclerview/ViewHolder.js.map +1 -1
- package/dist/recyclerview/ViewHolderCollection.d.ts +3 -1
- package/dist/recyclerview/ViewHolderCollection.d.ts.map +1 -1
- package/dist/recyclerview/ViewHolderCollection.js +23 -8
- package/dist/recyclerview/ViewHolderCollection.js.map +1 -1
- package/dist/recyclerview/components/ScrollAnchor.d.ts +2 -2
- package/dist/recyclerview/components/ScrollAnchor.d.ts.map +1 -1
- package/dist/recyclerview/components/ScrollAnchor.js +9 -5
- package/dist/recyclerview/components/ScrollAnchor.js.map +1 -1
- package/dist/recyclerview/components/StickyHeaders.d.ts +1 -1
- package/dist/recyclerview/components/StickyHeaders.d.ts.map +1 -1
- package/dist/recyclerview/components/StickyHeaders.js +40 -33
- package/dist/recyclerview/components/StickyHeaders.js.map +1 -1
- package/dist/recyclerview/helpers/EngagedIndicesTracker.d.ts +45 -1
- package/dist/recyclerview/helpers/EngagedIndicesTracker.d.ts.map +1 -1
- package/dist/recyclerview/helpers/EngagedIndicesTracker.js +77 -20
- package/dist/recyclerview/helpers/EngagedIndicesTracker.js.map +1 -1
- package/dist/recyclerview/helpers/RenderTimeTracker.d.ts +10 -0
- package/dist/recyclerview/helpers/RenderTimeTracker.d.ts.map +1 -0
- package/dist/recyclerview/helpers/RenderTimeTracker.js +39 -0
- package/dist/recyclerview/helpers/RenderTimeTracker.js.map +1 -0
- package/dist/recyclerview/helpers/VelocityTracker.d.ts +29 -0
- package/dist/recyclerview/helpers/VelocityTracker.d.ts.map +1 -0
- package/dist/recyclerview/helpers/VelocityTracker.js +70 -0
- package/dist/recyclerview/helpers/VelocityTracker.js.map +1 -0
- package/dist/recyclerview/hooks/useBoundDetection.d.ts +1 -2
- package/dist/recyclerview/hooks/useBoundDetection.d.ts.map +1 -1
- package/dist/recyclerview/hooks/useBoundDetection.js +19 -16
- package/dist/recyclerview/hooks/useBoundDetection.js.map +1 -1
- package/dist/recyclerview/hooks/useMappingHelper.d.ts +1 -1
- package/dist/recyclerview/hooks/useMappingHelper.d.ts.map +1 -1
- package/dist/recyclerview/hooks/useMappingHelper.js +1 -1
- 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 +4 -6
- package/dist/recyclerview/hooks/useOnLoad.js.map +1 -1
- package/dist/recyclerview/hooks/useRecyclerViewController.d.ts +3 -48
- package/dist/recyclerview/hooks/useRecyclerViewController.d.ts.map +1 -1
- package/dist/recyclerview/hooks/useRecyclerViewController.js +174 -123
- package/dist/recyclerview/hooks/useRecyclerViewController.js.map +1 -1
- package/dist/recyclerview/hooks/useRecyclerViewManager.d.ts +2 -0
- package/dist/recyclerview/hooks/useRecyclerViewManager.d.ts.map +1 -1
- package/dist/recyclerview/hooks/useRecyclerViewManager.js +10 -1
- package/dist/recyclerview/hooks/useRecyclerViewManager.js.map +1 -1
- package/dist/recyclerview/hooks/useSecondaryProps.js +1 -1
- package/dist/recyclerview/hooks/useUnmountAwareCallbacks.d.ts +10 -3
- package/dist/recyclerview/hooks/useUnmountAwareCallbacks.d.ts.map +1 -1
- package/dist/recyclerview/hooks/useUnmountAwareCallbacks.js +33 -4
- package/dist/recyclerview/hooks/useUnmountAwareCallbacks.js.map +1 -1
- package/dist/recyclerview/layout-managers/GridLayoutManager.d.ts +6 -0
- package/dist/recyclerview/layout-managers/GridLayoutManager.d.ts.map +1 -1
- package/dist/recyclerview/layout-managers/GridLayoutManager.js +27 -5
- package/dist/recyclerview/layout-managers/GridLayoutManager.js.map +1 -1
- package/dist/recyclerview/layout-managers/LayoutManager.d.ts +10 -16
- package/dist/recyclerview/layout-managers/LayoutManager.d.ts.map +1 -1
- package/dist/recyclerview/layout-managers/LayoutManager.js +4 -14
- package/dist/recyclerview/layout-managers/LayoutManager.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/viewability/ViewToken.d.ts +2 -2
- package/dist/viewability/ViewToken.d.ts.map +1 -1
- package/dist/viewability/ViewabilityHelper.js +1 -1
- package/dist/viewability/ViewabilityHelper.js.map +1 -1
- package/dist/viewability/ViewabilityManager.d.ts.map +1 -1
- package/dist/viewability/ViewabilityManager.js +1 -2
- package/dist/viewability/ViewabilityManager.js.map +1 -1
- package/jestSetup.js +30 -11
- package/package.json +2 -1
- package/src/AnimatedFlashList.ts +3 -2
- package/src/FlashList.tsx +24 -0
- package/src/FlashListProps.ts +20 -8
- package/src/FlashListRef.ts +320 -0
- package/src/MasonryFlashList.tsx +2 -2
- package/src/__tests__/RecyclerView.test.tsx +83 -29
- package/src/__tests__/RenderStackManager.test.ts +575 -0
- package/src/__tests__/helpers/createLayoutManager.ts +2 -3
- package/src/__tests__/useUnmountAwareCallbacks.test.tsx +12 -12
- package/src/benchmark/useFlatListBenchmark.ts +2 -2
- package/src/index.ts +1 -0
- package/src/native/config/PlatformHelper.android.ts +1 -0
- package/src/native/config/PlatformHelper.ios.ts +1 -0
- package/src/native/config/PlatformHelper.ts +1 -0
- package/src/native/config/PlatformHelper.web.ts +1 -0
- package/src/recyclerview/RecyclerView.tsx +82 -52
- package/src/recyclerview/RecyclerViewContextProvider.ts +12 -6
- package/src/recyclerview/RecyclerViewManager.ts +123 -98
- package/src/recyclerview/RenderStackManager.ts +291 -0
- package/src/recyclerview/ViewHolder.tsx +5 -3
- package/src/recyclerview/ViewHolderCollection.tsx +33 -12
- package/src/recyclerview/components/ScrollAnchor.tsx +21 -9
- package/src/recyclerview/components/StickyHeaders.tsx +63 -45
- package/src/recyclerview/helpers/EngagedIndicesTracker.ts +118 -23
- package/src/recyclerview/helpers/RenderTimeTracker.ts +38 -0
- package/src/recyclerview/helpers/VelocityTracker.ts +77 -0
- package/src/recyclerview/hooks/useBoundDetection.ts +25 -18
- package/src/recyclerview/hooks/useMappingHelper.ts +1 -1
- package/src/recyclerview/hooks/useOnLoad.ts +4 -6
- package/src/recyclerview/hooks/useRecyclerViewController.tsx +199 -176
- package/src/recyclerview/hooks/useRecyclerViewManager.ts +11 -1
- package/src/recyclerview/hooks/useSecondaryProps.tsx +1 -1
- package/src/recyclerview/hooks/useUnmountAwareCallbacks.ts +39 -3
- package/src/recyclerview/layout-managers/GridLayoutManager.ts +30 -7
- package/src/recyclerview/layout-managers/LayoutManager.ts +12 -21
- package/src/viewability/ViewToken.ts +2 -2
- package/src/viewability/ViewabilityHelper.ts +1 -1
- package/src/viewability/ViewabilityManager.ts +6 -3
- package/dist/__tests__/RecycleKeyManager.test.d.ts +0 -2
- package/dist/__tests__/RecycleKeyManager.test.d.ts.map +0 -1
- package/dist/__tests__/RecycleKeyManager.test.js +0 -210
- package/dist/__tests__/RecycleKeyManager.test.js.map +0 -1
- package/dist/recyclerview/RecycleKeyManager.d.ts +0 -82
- package/dist/recyclerview/RecycleKeyManager.d.ts.map +0 -1
- package/dist/recyclerview/RecycleKeyManager.js +0 -135
- package/dist/recyclerview/RecycleKeyManager.js.map +0 -1
- package/src/__tests__/RecycleKeyManager.test.ts +0 -254
- package/src/recyclerview/RecycleKeyManager.ts +0 -185
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RenderStackManager = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
/**
|
|
6
|
+
* Manages the recycling of rendered items in a virtualized list.
|
|
7
|
+
* This class handles tracking, recycling, and reusing item keys to optimize
|
|
8
|
+
* rendering performance by minimizing creation/destruction of components.
|
|
9
|
+
*/
|
|
10
|
+
var RenderStackManager = /** @class */ (function () {
|
|
11
|
+
/**
|
|
12
|
+
* @param maxItemsInRecyclePool - Maximum number of items that can be in the recycle pool
|
|
13
|
+
*/
|
|
14
|
+
function RenderStackManager(maxItemsInRecyclePool) {
|
|
15
|
+
if (maxItemsInRecyclePool === void 0) { maxItemsInRecyclePool = Number.MAX_SAFE_INTEGER; }
|
|
16
|
+
this.disableRecycling = false;
|
|
17
|
+
this.maxItemsInRecyclePool = maxItemsInRecyclePool;
|
|
18
|
+
this.recycleKeyPools = new Map();
|
|
19
|
+
this.keyMap = new Map();
|
|
20
|
+
this.stableIdMap = new Map();
|
|
21
|
+
this.keyCounter = 0;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Synchronizes the render stack with the current state of data.
|
|
25
|
+
* This method is the core orchestrator that:
|
|
26
|
+
* 1. Recycles keys for items that are no longer valid
|
|
27
|
+
* 2. Updates existing keys for items that remain visible
|
|
28
|
+
* 3. Assigns new keys for newly visible items
|
|
29
|
+
* 4. Cleans up excess items to maintain the recycling pool size
|
|
30
|
+
*
|
|
31
|
+
* @param getStableId - Function to get a stable identifier for an item at a specific index
|
|
32
|
+
* @param getItemType - Function to get the type of an item at a specific index
|
|
33
|
+
* @param engagedIndices - Collection of indices that are currently visible or engaged
|
|
34
|
+
* @param dataLength - Total length of the data set
|
|
35
|
+
*/
|
|
36
|
+
RenderStackManager.prototype.sync = function (getStableId, getItemType, engagedIndices, dataLength) {
|
|
37
|
+
var e_1, _a, e_2, _b, e_3, _c, e_4, _d, e_5, _e;
|
|
38
|
+
var _this = this;
|
|
39
|
+
this.clearRecyclePool();
|
|
40
|
+
// Recycle keys for items that are no longer valid or visible
|
|
41
|
+
this.keyMap.forEach(function (keyInfo, key) {
|
|
42
|
+
var index = keyInfo.index, stableId = keyInfo.stableId, itemType = keyInfo.itemType;
|
|
43
|
+
if (index >= dataLength) {
|
|
44
|
+
_this.recycleKey(key);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (!engagedIndices.includes(index)) {
|
|
48
|
+
_this.recycleKey(key);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
var newStableId = getStableId(index);
|
|
52
|
+
var newItemType = getItemType(index);
|
|
53
|
+
if (stableId !== newStableId || itemType !== newItemType) {
|
|
54
|
+
_this.recycleKey(key);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
try {
|
|
58
|
+
// First pass: process items that already have optimized keys
|
|
59
|
+
for (var engagedIndices_1 = tslib_1.__values(engagedIndices), engagedIndices_1_1 = engagedIndices_1.next(); !engagedIndices_1_1.done; engagedIndices_1_1 = engagedIndices_1.next()) {
|
|
60
|
+
var index = engagedIndices_1_1.value;
|
|
61
|
+
if (this.hasOptimizedKey(getStableId(index))) {
|
|
62
|
+
this.syncItem(index, getItemType(index), getStableId(index));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
67
|
+
finally {
|
|
68
|
+
try {
|
|
69
|
+
if (engagedIndices_1_1 && !engagedIndices_1_1.done && (_a = engagedIndices_1.return)) _a.call(engagedIndices_1);
|
|
70
|
+
}
|
|
71
|
+
finally { if (e_1) throw e_1.error; }
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
// Second pass: process remaining items that need new keys
|
|
75
|
+
for (var engagedIndices_2 = tslib_1.__values(engagedIndices), engagedIndices_2_1 = engagedIndices_2.next(); !engagedIndices_2_1.done; engagedIndices_2_1 = engagedIndices_2.next()) {
|
|
76
|
+
var index = engagedIndices_2_1.value;
|
|
77
|
+
if (!this.hasOptimizedKey(getStableId(index))) {
|
|
78
|
+
this.syncItem(index, getItemType(index), getStableId(index));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
83
|
+
finally {
|
|
84
|
+
try {
|
|
85
|
+
if (engagedIndices_2_1 && !engagedIndices_2_1.done && (_b = engagedIndices_2.return)) _b.call(engagedIndices_2);
|
|
86
|
+
}
|
|
87
|
+
finally { if (e_2) throw e_2.error; }
|
|
88
|
+
}
|
|
89
|
+
// create indices that are not in the engagedIndices and less than dataLength
|
|
90
|
+
// select only indices that are not in the engagedIndices
|
|
91
|
+
var validIndicesInPool = [];
|
|
92
|
+
try {
|
|
93
|
+
for (var _f = tslib_1.__values(this.keyMap.values()), _g = _f.next(); !_g.done; _g = _f.next()) {
|
|
94
|
+
var keyInfo = _g.value;
|
|
95
|
+
var index = keyInfo.index;
|
|
96
|
+
if (index < dataLength && !engagedIndices.includes(index)) {
|
|
97
|
+
validIndicesInPool.push(index);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
102
|
+
finally {
|
|
103
|
+
try {
|
|
104
|
+
if (_g && !_g.done && (_c = _f.return)) _c.call(_f);
|
|
105
|
+
}
|
|
106
|
+
finally { if (e_3) throw e_3.error; }
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
// First pass: process items that already have optimized keys
|
|
110
|
+
for (var validIndicesInPool_1 = tslib_1.__values(validIndicesInPool), validIndicesInPool_1_1 = validIndicesInPool_1.next(); !validIndicesInPool_1_1.done; validIndicesInPool_1_1 = validIndicesInPool_1.next()) {
|
|
111
|
+
var index = validIndicesInPool_1_1.value;
|
|
112
|
+
if (this.hasOptimizedKey(getStableId(index))) {
|
|
113
|
+
this.syncItem(index, getItemType(index), getStableId(index));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
118
|
+
finally {
|
|
119
|
+
try {
|
|
120
|
+
if (validIndicesInPool_1_1 && !validIndicesInPool_1_1.done && (_d = validIndicesInPool_1.return)) _d.call(validIndicesInPool_1);
|
|
121
|
+
}
|
|
122
|
+
finally { if (e_4) throw e_4.error; }
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
for (var validIndicesInPool_2 = tslib_1.__values(validIndicesInPool), validIndicesInPool_2_1 = validIndicesInPool_2.next(); !validIndicesInPool_2_1.done; validIndicesInPool_2_1 = validIndicesInPool_2.next()) {
|
|
126
|
+
var index = validIndicesInPool_2_1.value;
|
|
127
|
+
if (!this.hasOptimizedKey(getStableId(index))) {
|
|
128
|
+
this.syncItem(index, getItemType(index), getStableId(index));
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
133
|
+
finally {
|
|
134
|
+
try {
|
|
135
|
+
if (validIndicesInPool_2_1 && !validIndicesInPool_2_1.done && (_e = validIndicesInPool_2.return)) _e.call(validIndicesInPool_2);
|
|
136
|
+
}
|
|
137
|
+
finally { if (e_5) throw e_5.error; }
|
|
138
|
+
}
|
|
139
|
+
// Clean up stale items and manage the recycle pool size
|
|
140
|
+
this.cleanup(getStableId, engagedIndices, dataLength);
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* Checks if a stable ID already has an assigned key
|
|
144
|
+
*/
|
|
145
|
+
RenderStackManager.prototype.hasOptimizedKey = function (stableId) {
|
|
146
|
+
return this.stableIdMap.has(stableId);
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* Cleans up stale keys and manages the recycle pool size.
|
|
150
|
+
* This ensures we don't maintain references to items that are no longer in the dataset,
|
|
151
|
+
* and limits the number of recycled items to avoid excessive memory usage.
|
|
152
|
+
*/
|
|
153
|
+
RenderStackManager.prototype.cleanup = function (getStableId, engagedIndices, dataLength) {
|
|
154
|
+
var e_6, _a, e_7, _b;
|
|
155
|
+
var itemsToDelete = new Array();
|
|
156
|
+
try {
|
|
157
|
+
// Remove items that are no longer in the dataset
|
|
158
|
+
for (var _c = tslib_1.__values(this.keyMap.entries()), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
159
|
+
var _e = tslib_1.__read(_d.value, 2), key = _e[0], keyInfo = _e[1];
|
|
160
|
+
var index = keyInfo.index, itemType = keyInfo.itemType, stableId = keyInfo.stableId;
|
|
161
|
+
if (index >= dataLength || getStableId(index) !== stableId) {
|
|
162
|
+
// TODO: Find a way to reusue the key, instead of deleting it
|
|
163
|
+
this.deleteKeyFromRecyclePool(itemType, key);
|
|
164
|
+
this.stableIdMap.delete(stableId);
|
|
165
|
+
itemsToDelete.push(key);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
170
|
+
finally {
|
|
171
|
+
try {
|
|
172
|
+
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
173
|
+
}
|
|
174
|
+
finally { if (e_6) throw e_6.error; }
|
|
175
|
+
}
|
|
176
|
+
try {
|
|
177
|
+
for (var itemsToDelete_1 = tslib_1.__values(itemsToDelete), itemsToDelete_1_1 = itemsToDelete_1.next(); !itemsToDelete_1_1.done; itemsToDelete_1_1 = itemsToDelete_1.next()) {
|
|
178
|
+
var key = itemsToDelete_1_1.value;
|
|
179
|
+
this.keyMap.delete(key);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
183
|
+
finally {
|
|
184
|
+
try {
|
|
185
|
+
if (itemsToDelete_1_1 && !itemsToDelete_1_1.done && (_b = itemsToDelete_1.return)) _b.call(itemsToDelete_1);
|
|
186
|
+
}
|
|
187
|
+
finally { if (e_7) throw e_7.error; }
|
|
188
|
+
}
|
|
189
|
+
// Limit the size of the recycle pool
|
|
190
|
+
var itemsRenderedForRecycling = this.keyMap.size - engagedIndices.length;
|
|
191
|
+
if (itemsRenderedForRecycling > this.maxItemsInRecyclePool) {
|
|
192
|
+
var deleteCount = itemsRenderedForRecycling - this.maxItemsInRecyclePool;
|
|
193
|
+
var deleted = 0;
|
|
194
|
+
// Use a for loop so we can break early once we've deleted enough items
|
|
195
|
+
var entries = Array.from(this.keyMap.entries()).reverse();
|
|
196
|
+
for (var i = 0; i < entries.length && deleted < deleteCount; i++) {
|
|
197
|
+
var _f = tslib_1.__read(entries[i], 2), key = _f[0], keyInfo = _f[1];
|
|
198
|
+
var index = keyInfo.index, itemType = keyInfo.itemType, stableId = keyInfo.stableId;
|
|
199
|
+
if (!engagedIndices.includes(index)) {
|
|
200
|
+
this.deleteKeyFromRecyclePool(itemType, key);
|
|
201
|
+
this.stableIdMap.delete(stableId);
|
|
202
|
+
this.keyMap.delete(key);
|
|
203
|
+
deleted++;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
/**
|
|
209
|
+
* Places a key back into its type-specific recycle pool for future reuse
|
|
210
|
+
*/
|
|
211
|
+
RenderStackManager.prototype.recycleKey = function (key) {
|
|
212
|
+
if (this.disableRecycling) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
var keyInfo = this.keyMap.get(key);
|
|
216
|
+
if (!keyInfo) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
var itemType = keyInfo.itemType;
|
|
220
|
+
// Add key back to its type's pool
|
|
221
|
+
var pool = this.getRecyclePoolForType(itemType);
|
|
222
|
+
pool.add(key);
|
|
223
|
+
};
|
|
224
|
+
/**
|
|
225
|
+
* Returns the current render stack containing all active keys and their metadata
|
|
226
|
+
*/
|
|
227
|
+
RenderStackManager.prototype.getRenderStack = function () {
|
|
228
|
+
return this.keyMap;
|
|
229
|
+
};
|
|
230
|
+
/**
|
|
231
|
+
* Syncs an individual item by assigning it an appropriate key.
|
|
232
|
+
* Will use an existing key if available, or generate a new one.
|
|
233
|
+
*
|
|
234
|
+
* @returns The key assigned to the item
|
|
235
|
+
*/
|
|
236
|
+
RenderStackManager.prototype.syncItem = function (index, itemType, stableId) {
|
|
237
|
+
// Try to reuse an existing key, or get one from the recycle pool, or generate a new one
|
|
238
|
+
var newKey = this.stableIdMap.get(stableId) ||
|
|
239
|
+
this.getKeyFromRecyclePool(itemType) ||
|
|
240
|
+
this.generateKey();
|
|
241
|
+
var keyInfo = this.keyMap.get(newKey);
|
|
242
|
+
if (keyInfo) {
|
|
243
|
+
// Update an existing key's metadata
|
|
244
|
+
this.deleteKeyFromRecyclePool(itemType, newKey);
|
|
245
|
+
this.deleteKeyFromRecyclePool(keyInfo.itemType, newKey);
|
|
246
|
+
this.stableIdMap.delete(keyInfo.stableId);
|
|
247
|
+
keyInfo.index = index;
|
|
248
|
+
keyInfo.itemType = itemType;
|
|
249
|
+
keyInfo.stableId = stableId;
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
// Create a new entry in the key map
|
|
253
|
+
this.keyMap.set(newKey, {
|
|
254
|
+
itemType: itemType,
|
|
255
|
+
index: index,
|
|
256
|
+
stableId: stableId,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
this.stableIdMap.set(stableId, newKey);
|
|
260
|
+
return newKey;
|
|
261
|
+
};
|
|
262
|
+
/**
|
|
263
|
+
* Clears all recycled keys from the pool, effectively resetting the recycling system.
|
|
264
|
+
* This operation does not affect currently active keys.
|
|
265
|
+
*/
|
|
266
|
+
RenderStackManager.prototype.clearRecyclePool = function () {
|
|
267
|
+
var e_8, _a;
|
|
268
|
+
try {
|
|
269
|
+
// iterate over all pools and clear them
|
|
270
|
+
for (var _b = tslib_1.__values(this.recycleKeyPools.values()), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
271
|
+
var pool = _c.value;
|
|
272
|
+
pool.clear();
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
276
|
+
finally {
|
|
277
|
+
try {
|
|
278
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
279
|
+
}
|
|
280
|
+
finally { if (e_8) throw e_8.error; }
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
/**
|
|
284
|
+
* Generates a unique sequential key using an internal counter.
|
|
285
|
+
* @returns A unique key as a string
|
|
286
|
+
*/
|
|
287
|
+
RenderStackManager.prototype.generateKey = function () {
|
|
288
|
+
return (this.keyCounter++).toString();
|
|
289
|
+
};
|
|
290
|
+
/**
|
|
291
|
+
* Removes a specific key from its type's recycle pool
|
|
292
|
+
*/
|
|
293
|
+
RenderStackManager.prototype.deleteKeyFromRecyclePool = function (itemType, key) {
|
|
294
|
+
var _a;
|
|
295
|
+
(_a = this.recycleKeyPools.get(itemType)) === null || _a === void 0 ? void 0 : _a.delete(key);
|
|
296
|
+
};
|
|
297
|
+
/**
|
|
298
|
+
* Gets or creates a recycle pool for a specific item type
|
|
299
|
+
*/
|
|
300
|
+
RenderStackManager.prototype.getRecyclePoolForType = function (itemType) {
|
|
301
|
+
var pool = this.recycleKeyPools.get(itemType);
|
|
302
|
+
if (!pool) {
|
|
303
|
+
pool = new Set();
|
|
304
|
+
this.recycleKeyPools.set(itemType, pool);
|
|
305
|
+
}
|
|
306
|
+
return pool;
|
|
307
|
+
};
|
|
308
|
+
/**
|
|
309
|
+
* Retrieves and removes a key from the type's recycle pool
|
|
310
|
+
* @returns A recycled key or undefined if none available
|
|
311
|
+
*/
|
|
312
|
+
RenderStackManager.prototype.getKeyFromRecyclePool = function (itemType) {
|
|
313
|
+
var pool = this.getRecyclePoolForType(itemType);
|
|
314
|
+
if (pool.size > 0) {
|
|
315
|
+
var key = pool.values().next().value;
|
|
316
|
+
pool.delete(key);
|
|
317
|
+
return key;
|
|
318
|
+
}
|
|
319
|
+
return undefined;
|
|
320
|
+
};
|
|
321
|
+
return RenderStackManager;
|
|
322
|
+
}());
|
|
323
|
+
exports.RenderStackManager = RenderStackManager;
|
|
324
|
+
//# sourceMappingURL=RenderStackManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderStackManager.js","sourceRoot":"","sources":["../../src/recyclerview/RenderStackManager.ts"],"names":[],"mappings":";;;;AAEA;;;;GAIG;AACH;IAqBE;;OAEG;IACH,4BAAY,qBAAuD;QAAvD,sCAAA,EAAA,wBAAgC,MAAM,CAAC,gBAAgB;QAvB5D,qBAAgB,GAAG,KAAK,CAAC;QAwB9B,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;QACnD,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IACtB,CAAC;IAED;;;;;;;;;;;;OAYG;IACI,iCAAI,GAAX,UACE,WAAsC,EACtC,WAAsC,EACtC,cAAkC,EAClC,UAAkB;;QAJpB,iBAiEC;QA3DC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,6DAA6D;QAC7D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAC,OAAO,EAAE,GAAG;YACvB,IAAA,KAAK,GAAyB,OAAO,MAAhC,EAAE,QAAQ,GAAe,OAAO,SAAtB,EAAE,QAAQ,GAAK,OAAO,SAAZ,CAAa;YAC9C,IAAI,KAAK,IAAI,UAAU,EAAE,CAAC;gBACxB,KAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YACD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpC,KAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YACD,IAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YACvC,IAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;gBACzD,KAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,CAAC;;YAEH,6DAA6D;YAC7D,KAAoB,IAAA,mBAAA,iBAAA,cAAc,CAAA,8CAAA,0EAAE,CAAC;gBAAhC,IAAM,KAAK,2BAAA;gBACd,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC7C,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;;;;;;;;;;YAED,0DAA0D;YAC1D,KAAoB,IAAA,mBAAA,iBAAA,cAAc,CAAA,8CAAA,0EAAE,CAAC;gBAAhC,IAAM,KAAK,2BAAA;gBACd,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC9C,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;;;;;;;;;QAED,6EAA6E;QAC7E,yDAAyD;QACzD,IAAM,kBAAkB,GAAa,EAAE,CAAC;;YACxC,KAAsB,IAAA,KAAA,iBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA,gBAAA,4BAAE,CAAC;gBAAxC,IAAM,OAAO,WAAA;gBAChB,IAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;gBAC5B,IAAI,KAAK,GAAG,UAAU,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1D,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;;;;;;;;;;YAED,6DAA6D;YAC7D,KAAoB,IAAA,uBAAA,iBAAA,kBAAkB,CAAA,sDAAA,sFAAE,CAAC;gBAApC,IAAM,KAAK,+BAAA;gBACd,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC7C,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;;;;;;;;;;YAED,KAAoB,IAAA,uBAAA,iBAAA,kBAAkB,CAAA,sDAAA,sFAAE,CAAC;gBAApC,IAAM,KAAK,+BAAA;gBACd,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC9C,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;;;;;;;;;QAED,wDAAwD;QACxD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACK,4CAAe,GAAvB,UAAwB,QAAgB;QACtC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACK,oCAAO,GAAf,UACE,WAAsC,EACtC,cAAkC,EAClC,UAAkB;;QAElB,IAAM,aAAa,GAAG,IAAI,KAAK,EAAU,CAAC;;YAE1C,iDAAiD;YACjD,KAA6B,IAAA,KAAA,iBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA,gBAAA,4BAAE,CAAC;gBAA1C,IAAA,KAAA,2BAAc,EAAb,GAAG,QAAA,EAAE,OAAO,QAAA;gBACd,IAAA,KAAK,GAAyB,OAAO,MAAhC,EAAE,QAAQ,GAAe,OAAO,SAAtB,EAAE,QAAQ,GAAK,OAAO,SAAZ,CAAa;gBAC9C,IAAI,KAAK,IAAI,UAAU,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAC3D,6DAA6D;oBAC7D,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;oBAC7C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAClC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;;;;;;;;;;YAED,KAAkB,IAAA,kBAAA,iBAAA,aAAa,CAAA,4CAAA,uEAAE,CAAC;gBAA7B,IAAM,GAAG,0BAAA;gBACZ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;;;;;;;;;QAED,qCAAqC;QACrC,IAAM,yBAAyB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC;QAC3E,IAAI,yBAAyB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3D,IAAM,WAAW,GACf,yBAAyB,GAAG,IAAI,CAAC,qBAAqB,CAAC;YACzD,IAAI,OAAO,GAAG,CAAC,CAAC;YAEhB,uEAAuE;YACvE,IAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3D,IAAA,KAAA,eAAiB,OAAO,CAAC,CAAC,CAAC,IAAA,EAA1B,GAAG,QAAA,EAAE,OAAO,QAAc,CAAC;gBAC1B,IAAA,KAAK,GAAyB,OAAO,MAAhC,EAAE,QAAQ,GAAe,OAAO,SAAtB,EAAE,QAAQ,GAAK,OAAO,SAAZ,CAAa;gBAE9C,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBACpC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;oBAC7C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAClC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACxB,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,uCAAU,GAAlB,UAAmB,GAAW;QAC5B,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,IAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAErC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAEO,IAAA,QAAQ,GAAK,OAAO,SAAZ,CAAa;QAE7B,kCAAkC;QAClC,IAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAElD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,2CAAc,GAArB;QACE,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACK,qCAAQ,GAAhB,UAAiB,KAAa,EAAE,QAAgB,EAAE,QAAgB;QAChE,wFAAwF;QACxF,IAAM,MAAM,GACV,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC9B,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;YACpC,IAAI,CAAC,WAAW,EAAE,CAAC;QAErB,IAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,OAAO,EAAE,CAAC;YACZ,oCAAoC;YACpC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAChD,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACxD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC1C,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;YACtB,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC5B,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,oCAAoC;YACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE;gBACtB,QAAQ,UAAA;gBACR,KAAK,OAAA;gBACL,QAAQ,UAAA;aACT,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEvC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACK,6CAAgB,GAAxB;;;YACE,wCAAwC;YACxC,KAAmB,IAAA,KAAA,iBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAA,gBAAA,4BAAE,CAAC;gBAA9C,IAAM,IAAI,WAAA;gBACb,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC;;;;;;;;;IACH,CAAC;IAED;;;OAGG;IACK,wCAAW,GAAnB;QACE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IACxC,CAAC;IAED;;OAEG;IACK,qDAAwB,GAAhC,UAAiC,QAAgB,EAAE,GAAW;;QAC5D,MAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,0CAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACK,kDAAqB,GAA7B,UAA8B,QAAgB;QAC5C,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACK,kDAAqB,GAA7B,UAA8B,QAAgB;QAC5C,IAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAClB,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjB,OAAO,GAAG,CAAC;QACb,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACH,yBAAC;AAAD,CAAC,AA3RD,IA2RC;AA3RY,gDAAkB"}
|
|
@@ -1 +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;
|
|
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;AAqFD;;;GAGG;AACH,eAAO,MAAM,UAAU,8BAnFK,KAAK,SAAU,eAAe,CAAC,KAAK,CAAC,wBAsGhE,CAAC"}
|
|
@@ -29,13 +29,16 @@ var ViewHolderInternal = function (props) {
|
|
|
29
29
|
onSizeChanged === null || onSizeChanged === void 0 ? void 0 : onSizeChanged(index, event.nativeEvent.layout);
|
|
30
30
|
}, [index, onSizeChanged]);
|
|
31
31
|
var separator = (0, react_1.useMemo)(function () {
|
|
32
|
-
return ItemSeparatorComponent ? (react_1.default.createElement(ItemSeparatorComponent, { leadingItem: item, trailingItem: trailingItem })) : null;
|
|
32
|
+
return ItemSeparatorComponent && trailingItem !== undefined ? (react_1.default.createElement(ItemSeparatorComponent, { leadingItem: item, trailingItem: trailingItem })) : null;
|
|
33
33
|
}, [ItemSeparatorComponent, item, trailingItem]);
|
|
34
34
|
// console.log("ViewHolder re-render", index);
|
|
35
35
|
var children = (0, react_1.useMemo)(function () {
|
|
36
36
|
var _a;
|
|
37
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
|
-
|
|
38
|
+
// TODO: Test more thoroughly
|
|
39
|
+
// We don't really to re-render the children when the index changes
|
|
40
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
41
|
+
}, [item, extraData, target, renderItem]);
|
|
39
42
|
var style = {
|
|
40
43
|
flexDirection: horizontal ? "row" : "column",
|
|
41
44
|
position: target === "StickyHeader" ? "relative" : "absolute",
|
|
@@ -47,7 +50,6 @@ var ViewHolderInternal = function (props) {
|
|
|
47
50
|
maxWidth: layout.maxWidth,
|
|
48
51
|
left: layout.x,
|
|
49
52
|
top: layout.y,
|
|
50
|
-
zIndex: 0,
|
|
51
53
|
};
|
|
52
54
|
// TODO: Fix this type issue
|
|
53
55
|
var CompatContainer = (CellRendererComponent !== null && CellRendererComponent !== void 0 ? CellRendererComponent : CompatView_1.CompatView);
|
|
@@ -1 +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,CAAC;gBACrC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;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,
|
|
1
|
+
{"version":3,"file":"ViewHolder.js","sourceRoot":"","sources":["../../src/recyclerview/ViewHolder.tsx"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,9 @@ export interface ViewHolderCollectionProps<TItem> {
|
|
|
15
15
|
/** The data array to be rendered */
|
|
16
16
|
data: FlashListProps<TItem>["data"];
|
|
17
17
|
/** Map of indices to React keys for each rendered item */
|
|
18
|
-
renderStack: Map<
|
|
18
|
+
renderStack: Map<string, {
|
|
19
|
+
index: number;
|
|
20
|
+
}>;
|
|
19
21
|
/** Function to get layout information for a specific index */
|
|
20
22
|
getLayout: (index: number) => RVLayout;
|
|
21
23
|
/** Ref to control layout updates from parent components */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewHolderCollection.d.ts","sourceRoot":"","sources":["../../src/recyclerview/ViewHolderCollection.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAA0D,MAAM,OAAO,CAAC;AAE/E,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAc,eAAe,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAIxE;;;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;
|
|
1
|
+
{"version":3,"file":"ViewHolderCollection.d.ts","sourceRoot":"","sources":["../../src/recyclerview/ViewHolderCollection.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAA0D,MAAM,OAAO,CAAC;AAE/E,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAc,eAAe,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAIxE;;;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;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5C,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,GAAI,KAAK,EACxC,OAAO,yBAAyB,CAAC,KAAK,CAAC,sBAyHxC,CAAC"}
|
|
@@ -32,16 +32,22 @@ var ViewHolderCollection = function (props) {
|
|
|
32
32
|
// );
|
|
33
33
|
recyclerViewContext === null || recyclerViewContext === void 0 ? void 0 : recyclerViewContext.layout();
|
|
34
34
|
}
|
|
35
|
+
// we need to run this callback on when fixedContainerSize changes
|
|
36
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
35
37
|
}, [fixedContainerSize]);
|
|
36
38
|
(0, react_1.useLayoutEffect)(function () {
|
|
37
39
|
if (renderId > 0) {
|
|
38
40
|
onCommitLayoutEffect === null || onCommitLayoutEffect === void 0 ? void 0 : onCommitLayoutEffect();
|
|
39
41
|
}
|
|
42
|
+
// we need to run this callback on when renderId changes
|
|
43
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
40
44
|
}, [renderId]);
|
|
41
45
|
(0, react_1.useEffect)(function () {
|
|
42
46
|
if (renderId > 0) {
|
|
43
47
|
onCommitEffect === null || onCommitEffect === void 0 ? void 0 : onCommitEffect();
|
|
44
48
|
}
|
|
49
|
+
// we need to run this callback on when renderId changes
|
|
50
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
45
51
|
}, [renderId]);
|
|
46
52
|
// Expose forceUpdate through ref
|
|
47
53
|
(0, react_1.useImperativeHandle)(viewHolderCollectionRef, function () { return ({
|
|
@@ -49,20 +55,29 @@ var ViewHolderCollection = function (props) {
|
|
|
49
55
|
// This will trigger a re-render of the component
|
|
50
56
|
setRenderId(function (prev) { return prev + 1; });
|
|
51
57
|
},
|
|
52
|
-
}); });
|
|
58
|
+
}); }, [setRenderId]);
|
|
53
59
|
var hasData = data && data.length > 0;
|
|
54
60
|
var containerStyle = {
|
|
55
61
|
width: horizontal ? containerLayout === null || containerLayout === void 0 ? void 0 : containerLayout.width : undefined,
|
|
56
62
|
height: containerLayout === null || containerLayout === void 0 ? void 0 : containerLayout.height,
|
|
63
|
+
// TODO: Temp workaround, useLayoutEffect doesn't block paint in some cases
|
|
64
|
+
// We need to investigate why this is happening
|
|
65
|
+
opacity: renderId > 0 ? 1 : 0,
|
|
57
66
|
};
|
|
58
|
-
|
|
59
|
-
//
|
|
60
|
-
,
|
|
61
|
-
|
|
62
|
-
|
|
67
|
+
// sort by index and log
|
|
68
|
+
// const sortedRenderStack = Array.from(renderStack.entries()).sort(
|
|
69
|
+
// ([, a], [, b]) => a.index - b.index
|
|
70
|
+
// );
|
|
71
|
+
// console.log(
|
|
72
|
+
// "sortedRenderStack",
|
|
73
|
+
// sortedRenderStack.map(([reactKey, { index }]) => {
|
|
74
|
+
// return `${index} => ${reactKey}`;
|
|
75
|
+
// })
|
|
76
|
+
// );
|
|
77
|
+
return (react_1.default.createElement(CompatView_1.CompatView, { style: hasData && containerStyle }, containerLayout &&
|
|
63
78
|
hasData &&
|
|
64
|
-
Array.from(renderStack, function (_a) {
|
|
65
|
-
var _b = tslib_1.__read(_a, 2),
|
|
79
|
+
Array.from(renderStack.entries(), function (_a) {
|
|
80
|
+
var _b = tslib_1.__read(_a, 2), reactKey = _b[0], index = _b[1].index;
|
|
66
81
|
var item = data[index];
|
|
67
82
|
var trailingItem = ItemSeparatorComponent
|
|
68
83
|
? data[index + 1]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewHolderCollection.js","sourceRoot":"","sources":["../../src/recyclerview/ViewHolderCollection.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;;;;AAEH,qDAA+E;AAI/E,2CAA2D;AAE3D,sDAAqD;AACrD,6EAAuE;AA6CvE;;;;GAIG;AACI,IAAM,oBAAoB,GAAG,UAClC,KAAuC;IAGrC,IAAA,IAAI,GAcF,KAAK,KAdH,EACJ,WAAW,GAaT,KAAK,YAbI,EACX,SAAS,GAYP,KAAK,UAZE,EACT,SAAS,GAWP,KAAK,UAXE,EACT,aAAa,GAUX,KAAK,cAVM,EACb,UAAU,GASR,KAAK,WATG,EACV,SAAS,GAQP,KAAK,UARE,EACT,uBAAuB,GAOrB,KAAK,wBAPgB,EACvB,uBAAuB,GAMrB,KAAK,wBANgB,EACvB,oBAAoB,GAKlB,KAAK,qBALa,EACpB,qBAAqB,GAInB,KAAK,sBAJc,EACrB,sBAAsB,GAGpB,KAAK,uBAHe,EACtB,cAAc,GAEZ,KAAK,eAFO,EACd,UAAU,GACR,KAAK,WADG,CACF;IAEJ,IAAA,KAAA,eAA0B,eAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAA,EAA1C,QAAQ,QAAA,EAAE,WAAW,QAAqB,CAAC;IAElD,IAAM,eAAe,GAAG,uBAAuB,EAAE,CAAC;IAElD,IAAM,kBAAkB,GAAG,UAAU;QACnC,CAAC,CAAC,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,MAAM;QACzB,CAAC,CAAC,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,KAAK,CAAC;IAE3B,IAAM,mBAAmB,GAAG,IAAA,oDAAsB,GAAE,CAAC;IAErD,IAAA,uBAAe,EAAC;QACd,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,eAAe;YACf,gEAAgE;YAChE,uBAAuB;YACvB,KAAK;YACL,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,MAAM,EAAE,CAAC;QAChC,CAAC;
|
|
1
|
+
{"version":3,"file":"ViewHolderCollection.js","sourceRoot":"","sources":["../../src/recyclerview/ViewHolderCollection.tsx"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@ import React from "react";
|
|
|
11
11
|
export interface ScrollAnchorProps {
|
|
12
12
|
/** Ref to access scroll anchor methods */
|
|
13
13
|
scrollAnchorRef: React.Ref<ScrollAnchorRef>;
|
|
14
|
+
horizontal: boolean;
|
|
14
15
|
}
|
|
15
16
|
/**
|
|
16
17
|
* Ref interface for ScrollAnchor component
|
|
@@ -21,9 +22,8 @@ export interface ScrollAnchorRef {
|
|
|
21
22
|
}
|
|
22
23
|
/**
|
|
23
24
|
* ScrollAnchor component that provides programmatic scrolling capabilities using maintainVisibleContentPosition property
|
|
24
|
-
* TODO: Implement this for web
|
|
25
25
|
* @param props - Component props
|
|
26
26
|
* @returns An invisible anchor element used for scrolling
|
|
27
27
|
*/
|
|
28
|
-
export declare function ScrollAnchor({ scrollAnchorRef }: ScrollAnchorProps): React.JSX.Element;
|
|
28
|
+
export declare function ScrollAnchor({ scrollAnchorRef, horizontal, }: ScrollAnchorProps): React.JSX.Element;
|
|
29
29
|
//# sourceMappingURL=ScrollAnchor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollAnchor.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/components/ScrollAnchor.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAiD,MAAM,OAAO,CAAC;AAItE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,eAAe,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"ScrollAnchor.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/components/ScrollAnchor.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAiD,MAAM,OAAO,CAAC;AAItE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,eAAe,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC5C,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAC3B,eAAe,EACf,UAAU,GACX,EAAE,iBAAiB,qBA6BnB"}
|
|
@@ -12,23 +12,27 @@ var react_1 = tslib_1.__importStar(require("react"));
|
|
|
12
12
|
var CompatView_1 = require("./CompatView");
|
|
13
13
|
/**
|
|
14
14
|
* ScrollAnchor component that provides programmatic scrolling capabilities using maintainVisibleContentPosition property
|
|
15
|
-
* TODO: Implement this for web
|
|
16
15
|
* @param props - Component props
|
|
17
16
|
* @returns An invisible anchor element used for scrolling
|
|
18
17
|
*/
|
|
19
18
|
function ScrollAnchor(_a) {
|
|
20
|
-
var scrollAnchorRef = _a.scrollAnchorRef;
|
|
19
|
+
var scrollAnchorRef = _a.scrollAnchorRef, horizontal = _a.horizontal;
|
|
21
20
|
var _b = tslib_1.__read((0, react_1.useState)(1000000), 2), scrollOffset = _b[0], setScrollOffset = _b[1]; // TODO: Fix this value
|
|
22
21
|
// Expose scrollBy method through ref
|
|
23
22
|
(0, react_1.useImperativeHandle)(scrollAnchorRef, function () { return ({
|
|
24
23
|
scrollBy: function (offset) {
|
|
25
24
|
setScrollOffset(function (prev) { return prev + offset; });
|
|
26
25
|
},
|
|
27
|
-
}); });
|
|
26
|
+
}); }, []);
|
|
28
27
|
// Create an invisible anchor element that can be positioned
|
|
29
28
|
var anchor = (0, react_1.useMemo)(function () {
|
|
30
|
-
return (react_1.default.createElement(CompatView_1.CompatView, { style: {
|
|
31
|
-
|
|
29
|
+
return (react_1.default.createElement(CompatView_1.CompatView, { style: {
|
|
30
|
+
position: "absolute",
|
|
31
|
+
height: 0,
|
|
32
|
+
top: horizontal ? 0 : scrollOffset,
|
|
33
|
+
left: horizontal ? scrollOffset : 0,
|
|
34
|
+
} }));
|
|
35
|
+
}, [scrollOffset, horizontal]);
|
|
32
36
|
return anchor;
|
|
33
37
|
}
|
|
34
38
|
//# sourceMappingURL=ScrollAnchor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollAnchor.js","sourceRoot":"","sources":["../../../src/recyclerview/components/ScrollAnchor.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;;AA4BH,
|
|
1
|
+
{"version":3,"file":"ScrollAnchor.js","sourceRoot":"","sources":["../../../src/recyclerview/components/ScrollAnchor.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;;AA4BH,oCAgCC;;AA1DD,qDAAsE;AAEtE,2CAA0C;AAmB1C;;;;GAIG;AACH,SAAgB,YAAY,CAAC,EAGT;QAFlB,eAAe,qBAAA,EACf,UAAU,gBAAA;IAEJ,IAAA,KAAA,eAAkC,IAAA,gBAAQ,EAAC,OAAO,CAAC,IAAA,EAAlD,YAAY,QAAA,EAAE,eAAe,QAAqB,CAAC,CAAC,uBAAuB;IAElF,qCAAqC;IACrC,IAAA,2BAAmB,EACjB,eAAe,EACf,cAAM,OAAA,CAAC;QACL,QAAQ,EAAE,UAAC,MAAc;YACvB,eAAe,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,GAAG,MAAM,EAAb,CAAa,CAAC,CAAC;QAC3C,CAAC;KACF,CAAC,EAJI,CAIJ,EACF,EAAE,CACH,CAAC;IAEF,4DAA4D;IAC5D,IAAM,MAAM,GAAG,IAAA,eAAO,EAAC;QACrB,OAAO,CACL,8BAAC,uBAAU,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"}
|
|
@@ -34,5 +34,5 @@ export interface StickyHeaderRef {
|
|
|
34
34
|
/** Reports scroll events to update sticky header positions */
|
|
35
35
|
reportScrollEvent: (event: NativeScrollEvent) => void;
|
|
36
36
|
}
|
|
37
|
-
export declare const StickyHeaders: <TItem>({ stickyHeaderIndices, renderItem, stickyHeaderRef, recyclerViewManager, scrollY, data, extraData, }: StickyHeaderProps<TItem>) => React.JSX.Element
|
|
37
|
+
export declare const StickyHeaders: <TItem>({ stickyHeaderIndices, renderItem, stickyHeaderRef, recyclerViewManager, scrollY, data, extraData, }: StickyHeaderProps<TItem>) => React.JSX.Element;
|
|
38
38
|
//# sourceMappingURL=StickyHeaders.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StickyHeaders.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/components/StickyHeaders.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAON,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAK7D;;;GAGG;AACH,MAAM,WAAW,iBAAiB,CAAC,KAAK;IACtC,uDAAuD;IACvD,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,oCAAoC;IACpC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3B,8CAA8C;IAC9C,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC;IACxB,mCAAmC;IACnC,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;IAChD,0CAA0C;IAC1C,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAClD,2CAA2C;IAC3C,mBAAmB,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAChD,4CAA4C;IAC5C,SAAS,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,iBAAiB,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACvD;
|
|
1
|
+
{"version":3,"file":"StickyHeaders.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/components/StickyHeaders.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAON,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAK7D;;;GAGG;AACH,MAAM,WAAW,iBAAiB,CAAC,KAAK;IACtC,uDAAuD;IACvD,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,oCAAoC;IACpC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3B,8CAA8C;IAC9C,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC;IACxB,mCAAmC;IACnC,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;IAChD,0CAA0C;IAC1C,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAClD,2CAA2C;IAC3C,mBAAmB,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAChD,4CAA4C;IAC5C,SAAS,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,iBAAiB,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACvD;AAOD,eAAO,MAAM,aAAa,GAAI,KAAK,EAAG,sGAQnC,iBAAiB,CAAC,KAAK,CAAC,sBA8H1B,CAAC"}
|