@shopify/flash-list 2.0.0-alpha.10 → 2.0.0-alpha.12

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.
Files changed (121) hide show
  1. package/README.md +6 -2
  2. package/dist/AnimatedFlashList.d.ts.map +1 -1
  3. package/dist/AnimatedFlashList.js +3 -3
  4. package/dist/AnimatedFlashList.js.map +1 -1
  5. package/dist/FlashList.d.ts +9 -0
  6. package/dist/FlashList.d.ts.map +1 -1
  7. package/dist/FlashList.js +20 -0
  8. package/dist/FlashList.js.map +1 -1
  9. package/dist/FlashListProps.d.ts +13 -6
  10. package/dist/FlashListProps.d.ts.map +1 -1
  11. package/dist/FlashListProps.js.map +1 -1
  12. package/dist/FlashListRef.d.ts +305 -0
  13. package/dist/FlashListRef.d.ts.map +1 -0
  14. package/dist/FlashListRef.js +3 -0
  15. package/dist/FlashListRef.js.map +1 -0
  16. package/dist/__tests__/RecyclerView.test.js +62 -27
  17. package/dist/__tests__/RecyclerView.test.js.map +1 -1
  18. package/dist/__tests__/RenderStackManager.test.d.ts +2 -0
  19. package/dist/__tests__/RenderStackManager.test.d.ts.map +1 -0
  20. package/dist/__tests__/RenderStackManager.test.js +405 -0
  21. package/dist/__tests__/RenderStackManager.test.js.map +1 -0
  22. package/dist/__tests__/useUnmountAwareCallbacks.test.js +1 -1
  23. package/dist/__tests__/useUnmountAwareCallbacks.test.js.map +1 -1
  24. package/dist/benchmark/useFlatListBenchmark.js +8 -7
  25. package/dist/benchmark/useFlatListBenchmark.js.map +1 -1
  26. package/dist/index.d.ts +1 -0
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js.map +1 -1
  29. package/dist/recyclerview/RecyclerView.d.ts +2 -1
  30. package/dist/recyclerview/RecyclerView.d.ts.map +1 -1
  31. package/dist/recyclerview/RecyclerView.js +39 -21
  32. package/dist/recyclerview/RecyclerView.js.map +1 -1
  33. package/dist/recyclerview/RecyclerViewContextProvider.d.ts +6 -5
  34. package/dist/recyclerview/RecyclerViewContextProvider.d.ts.map +1 -1
  35. package/dist/recyclerview/RecyclerViewContextProvider.js.map +1 -1
  36. package/dist/recyclerview/RecyclerViewManager.d.ts +14 -7
  37. package/dist/recyclerview/RecyclerViewManager.d.ts.map +1 -1
  38. package/dist/recyclerview/RecyclerViewManager.js +71 -102
  39. package/dist/recyclerview/RecyclerViewManager.js.map +1 -1
  40. package/dist/recyclerview/RenderStackManager.d.ts +85 -0
  41. package/dist/recyclerview/RenderStackManager.d.ts.map +1 -0
  42. package/dist/recyclerview/RenderStackManager.js +261 -0
  43. package/dist/recyclerview/RenderStackManager.js.map +1 -0
  44. package/dist/recyclerview/ViewHolder.d.ts.map +1 -1
  45. package/dist/recyclerview/ViewHolder.js +5 -3
  46. package/dist/recyclerview/ViewHolder.js.map +1 -1
  47. package/dist/recyclerview/ViewHolderCollection.d.ts +3 -1
  48. package/dist/recyclerview/ViewHolderCollection.d.ts.map +1 -1
  49. package/dist/recyclerview/ViewHolderCollection.js +19 -3
  50. package/dist/recyclerview/ViewHolderCollection.js.map +1 -1
  51. package/dist/recyclerview/components/ScrollAnchor.d.ts +2 -1
  52. package/dist/recyclerview/components/ScrollAnchor.d.ts.map +1 -1
  53. package/dist/recyclerview/components/ScrollAnchor.js +9 -4
  54. package/dist/recyclerview/components/ScrollAnchor.js.map +1 -1
  55. package/dist/recyclerview/components/StickyHeaders.d.ts +1 -1
  56. package/dist/recyclerview/components/StickyHeaders.d.ts.map +1 -1
  57. package/dist/recyclerview/components/StickyHeaders.js +39 -32
  58. package/dist/recyclerview/components/StickyHeaders.js.map +1 -1
  59. package/dist/recyclerview/hooks/useBoundDetection.d.ts +1 -2
  60. package/dist/recyclerview/hooks/useBoundDetection.d.ts.map +1 -1
  61. package/dist/recyclerview/hooks/useBoundDetection.js +19 -16
  62. package/dist/recyclerview/hooks/useBoundDetection.js.map +1 -1
  63. package/dist/recyclerview/hooks/useOnLoad.d.ts.map +1 -1
  64. package/dist/recyclerview/hooks/useOnLoad.js +4 -6
  65. package/dist/recyclerview/hooks/useOnLoad.js.map +1 -1
  66. package/dist/recyclerview/hooks/useRecyclerViewController.d.ts +3 -48
  67. package/dist/recyclerview/hooks/useRecyclerViewController.d.ts.map +1 -1
  68. package/dist/recyclerview/hooks/useRecyclerViewController.js +111 -77
  69. package/dist/recyclerview/hooks/useRecyclerViewController.js.map +1 -1
  70. package/dist/recyclerview/hooks/useRecyclerViewManager.d.ts.map +1 -1
  71. package/dist/recyclerview/hooks/useRecyclerViewManager.js +6 -0
  72. package/dist/recyclerview/hooks/useRecyclerViewManager.js.map +1 -1
  73. package/dist/recyclerview/hooks/useSecondaryProps.js +1 -1
  74. package/dist/recyclerview/hooks/useUnmountAwareCallbacks.d.ts +10 -3
  75. package/dist/recyclerview/hooks/useUnmountAwareCallbacks.d.ts.map +1 -1
  76. package/dist/recyclerview/hooks/useUnmountAwareCallbacks.js +33 -4
  77. package/dist/recyclerview/hooks/useUnmountAwareCallbacks.js.map +1 -1
  78. package/dist/recyclerview/layout-managers/GridLayoutManager.d.ts +6 -0
  79. package/dist/recyclerview/layout-managers/GridLayoutManager.d.ts.map +1 -1
  80. package/dist/recyclerview/layout-managers/GridLayoutManager.js +27 -5
  81. package/dist/recyclerview/layout-managers/GridLayoutManager.js.map +1 -1
  82. package/dist/recyclerview/layout-managers/LayoutManager.d.ts +2 -2
  83. package/dist/recyclerview/layout-managers/LayoutManager.js +2 -2
  84. package/dist/tsconfig.tsbuildinfo +1 -1
  85. package/jestSetup.js +30 -11
  86. package/package.json +1 -1
  87. package/src/AnimatedFlashList.ts +3 -2
  88. package/src/FlashList.tsx +24 -0
  89. package/src/FlashListProps.ts +16 -7
  90. package/src/FlashListRef.ts +320 -0
  91. package/src/__tests__/RecyclerView.test.tsx +83 -29
  92. package/src/__tests__/RenderStackManager.test.ts +488 -0
  93. package/src/__tests__/useUnmountAwareCallbacks.test.tsx +12 -12
  94. package/src/benchmark/useFlatListBenchmark.ts +2 -2
  95. package/src/index.ts +1 -0
  96. package/src/recyclerview/RecyclerView.tsx +49 -29
  97. package/src/recyclerview/RecyclerViewContextProvider.ts +12 -6
  98. package/src/recyclerview/RecyclerViewManager.ts +90 -88
  99. package/src/recyclerview/RenderStackManager.ts +265 -0
  100. package/src/recyclerview/ViewHolder.tsx +5 -3
  101. package/src/recyclerview/ViewHolderCollection.tsx +29 -8
  102. package/src/recyclerview/components/ScrollAnchor.tsx +21 -8
  103. package/src/recyclerview/components/StickyHeaders.tsx +62 -44
  104. package/src/recyclerview/hooks/useBoundDetection.ts +25 -18
  105. package/src/recyclerview/hooks/useOnLoad.ts +4 -6
  106. package/src/recyclerview/hooks/useRecyclerViewController.tsx +121 -132
  107. package/src/recyclerview/hooks/useRecyclerViewManager.ts +6 -0
  108. package/src/recyclerview/hooks/useSecondaryProps.tsx +1 -1
  109. package/src/recyclerview/hooks/useUnmountAwareCallbacks.ts +39 -3
  110. package/src/recyclerview/layout-managers/GridLayoutManager.ts +30 -7
  111. package/src/recyclerview/layout-managers/LayoutManager.ts +2 -2
  112. package/dist/__tests__/RecycleKeyManager.test.d.ts +0 -2
  113. package/dist/__tests__/RecycleKeyManager.test.d.ts.map +0 -1
  114. package/dist/__tests__/RecycleKeyManager.test.js +0 -210
  115. package/dist/__tests__/RecycleKeyManager.test.js.map +0 -1
  116. package/dist/recyclerview/RecycleKeyManager.d.ts +0 -82
  117. package/dist/recyclerview/RecycleKeyManager.d.ts.map +0 -1
  118. package/dist/recyclerview/RecycleKeyManager.js +0 -135
  119. package/dist/recyclerview/RecycleKeyManager.js.map +0 -1
  120. package/src/__tests__/RecycleKeyManager.test.ts +0 -254
  121. package/src/recyclerview/RecycleKeyManager.ts +0 -185
@@ -0,0 +1,261 @@
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;
38
+ var _this = this;
39
+ if (this.disableRecycling) {
40
+ this.clearRecyclePool();
41
+ }
42
+ // Recycle keys for items that are no longer valid or visible
43
+ this.keyMap.forEach(function (keyInfo, key) {
44
+ var index = keyInfo.index, stableId = keyInfo.stableId, itemType = keyInfo.itemType;
45
+ if (index >= dataLength) {
46
+ _this.recycleKey(key);
47
+ return;
48
+ }
49
+ var newStableId = getStableId(index);
50
+ var newItemType = getItemType(index);
51
+ if (stableId !== newStableId || itemType !== newItemType) {
52
+ _this.recycleKey(key);
53
+ return;
54
+ }
55
+ if (!engagedIndices.includes(index)) {
56
+ _this.recycleKey(key);
57
+ }
58
+ });
59
+ try {
60
+ // First pass: process items that already have optimized keys
61
+ for (var engagedIndices_1 = tslib_1.__values(engagedIndices), engagedIndices_1_1 = engagedIndices_1.next(); !engagedIndices_1_1.done; engagedIndices_1_1 = engagedIndices_1.next()) {
62
+ var index = engagedIndices_1_1.value;
63
+ if (this.hasOptimizedKey(getStableId(index))) {
64
+ this.syncItem(index, getItemType(index), getStableId(index));
65
+ }
66
+ }
67
+ }
68
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
69
+ finally {
70
+ try {
71
+ if (engagedIndices_1_1 && !engagedIndices_1_1.done && (_a = engagedIndices_1.return)) _a.call(engagedIndices_1);
72
+ }
73
+ finally { if (e_1) throw e_1.error; }
74
+ }
75
+ try {
76
+ // Second pass: process remaining items that need new keys
77
+ for (var engagedIndices_2 = tslib_1.__values(engagedIndices), engagedIndices_2_1 = engagedIndices_2.next(); !engagedIndices_2_1.done; engagedIndices_2_1 = engagedIndices_2.next()) {
78
+ var index = engagedIndices_2_1.value;
79
+ if (!this.hasOptimizedKey(getStableId(index))) {
80
+ this.syncItem(index, getItemType(index), getStableId(index));
81
+ }
82
+ }
83
+ }
84
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
85
+ finally {
86
+ try {
87
+ if (engagedIndices_2_1 && !engagedIndices_2_1.done && (_b = engagedIndices_2.return)) _b.call(engagedIndices_2);
88
+ }
89
+ finally { if (e_2) throw e_2.error; }
90
+ }
91
+ // Clean up stale items and manage the recycle pool size
92
+ this.cleanup(getStableId, engagedIndices, dataLength);
93
+ };
94
+ /**
95
+ * Checks if a stable ID already has an assigned key
96
+ */
97
+ RenderStackManager.prototype.hasOptimizedKey = function (stableId) {
98
+ return this.stableIdMap.has(stableId);
99
+ };
100
+ /**
101
+ * Cleans up stale keys and manages the recycle pool size.
102
+ * This ensures we don't maintain references to items that are no longer in the dataset,
103
+ * and limits the number of recycled items to avoid excessive memory usage.
104
+ */
105
+ RenderStackManager.prototype.cleanup = function (getStableId, engagedIndices, dataLength) {
106
+ var e_3, _a, e_4, _b;
107
+ var itemsToDelete = new Array();
108
+ try {
109
+ // Remove items that are no longer in the dataset
110
+ for (var _c = tslib_1.__values(this.keyMap.entries()), _d = _c.next(); !_d.done; _d = _c.next()) {
111
+ var _e = tslib_1.__read(_d.value, 2), key = _e[0], keyInfo = _e[1];
112
+ var index = keyInfo.index, itemType = keyInfo.itemType, stableId = keyInfo.stableId;
113
+ if (index >= dataLength || getStableId(index) !== stableId) {
114
+ this.deleteKeyFromRecyclePool(itemType, key);
115
+ this.stableIdMap.delete(stableId);
116
+ itemsToDelete.push(key);
117
+ }
118
+ }
119
+ }
120
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
121
+ finally {
122
+ try {
123
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
124
+ }
125
+ finally { if (e_3) throw e_3.error; }
126
+ }
127
+ try {
128
+ for (var itemsToDelete_1 = tslib_1.__values(itemsToDelete), itemsToDelete_1_1 = itemsToDelete_1.next(); !itemsToDelete_1_1.done; itemsToDelete_1_1 = itemsToDelete_1.next()) {
129
+ var key = itemsToDelete_1_1.value;
130
+ this.keyMap.delete(key);
131
+ }
132
+ }
133
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
134
+ finally {
135
+ try {
136
+ if (itemsToDelete_1_1 && !itemsToDelete_1_1.done && (_b = itemsToDelete_1.return)) _b.call(itemsToDelete_1);
137
+ }
138
+ finally { if (e_4) throw e_4.error; }
139
+ }
140
+ // Limit the size of the recycle pool
141
+ var itemsRenderedForRecycling = this.keyMap.size - engagedIndices.length;
142
+ if (itemsRenderedForRecycling > this.maxItemsInRecyclePool) {
143
+ var deleteCount = itemsRenderedForRecycling - this.maxItemsInRecyclePool;
144
+ var deleted = 0;
145
+ // Use a for loop so we can break early once we've deleted enough items
146
+ var entries = Array.from(this.keyMap.entries()).reverse();
147
+ for (var i = 0; i < entries.length && deleted < deleteCount; i++) {
148
+ var _f = tslib_1.__read(entries[i], 2), key = _f[0], keyInfo = _f[1];
149
+ var index = keyInfo.index, itemType = keyInfo.itemType, stableId = keyInfo.stableId;
150
+ if (!engagedIndices.includes(index)) {
151
+ this.deleteKeyFromRecyclePool(itemType, key);
152
+ this.stableIdMap.delete(stableId);
153
+ this.keyMap.delete(key);
154
+ deleted++;
155
+ }
156
+ }
157
+ }
158
+ };
159
+ /**
160
+ * Places a key back into its type-specific recycle pool for future reuse
161
+ */
162
+ RenderStackManager.prototype.recycleKey = function (key) {
163
+ if (this.disableRecycling) {
164
+ return;
165
+ }
166
+ var keyInfo = this.keyMap.get(key);
167
+ if (!keyInfo) {
168
+ return;
169
+ }
170
+ var itemType = keyInfo.itemType;
171
+ // Add key back to its type's pool
172
+ var pool = this.getRecyclePoolForType(itemType);
173
+ pool.add(key);
174
+ };
175
+ /**
176
+ * Returns the current render stack containing all active keys and their metadata
177
+ */
178
+ RenderStackManager.prototype.getRenderStack = function () {
179
+ return this.keyMap;
180
+ };
181
+ /**
182
+ * Syncs an individual item by assigning it an appropriate key.
183
+ * Will use an existing key if available, or generate a new one.
184
+ *
185
+ * @returns The key assigned to the item
186
+ */
187
+ RenderStackManager.prototype.syncItem = function (index, itemType, stableId) {
188
+ // Try to reuse an existing key, or get one from the recycle pool, or generate a new one
189
+ var newKey = this.stableIdMap.get(stableId) ||
190
+ this.getKeyFromRecyclePool(itemType) ||
191
+ this.generateKey();
192
+ var keyInfo = this.keyMap.get(newKey);
193
+ if (keyInfo) {
194
+ // Update an existing key's metadata
195
+ this.deleteKeyFromRecyclePool(itemType, newKey);
196
+ this.deleteKeyFromRecyclePool(keyInfo.itemType, newKey);
197
+ this.stableIdMap.delete(keyInfo.stableId);
198
+ keyInfo.index = index;
199
+ keyInfo.itemType = itemType;
200
+ keyInfo.stableId = stableId;
201
+ }
202
+ else {
203
+ // Create a new entry in the key map
204
+ this.keyMap.set(newKey, {
205
+ itemType: itemType,
206
+ index: index,
207
+ stableId: stableId,
208
+ });
209
+ }
210
+ this.stableIdMap.set(stableId, newKey);
211
+ return newKey;
212
+ };
213
+ /**
214
+ * Clears all recycled keys from the pool, effectively resetting the recycling system.
215
+ * This operation does not affect currently active keys.
216
+ */
217
+ RenderStackManager.prototype.clearRecyclePool = function () {
218
+ this.recycleKeyPools.clear();
219
+ };
220
+ /**
221
+ * Generates a unique sequential key using an internal counter.
222
+ * @returns A unique key as a string
223
+ */
224
+ RenderStackManager.prototype.generateKey = function () {
225
+ return (this.keyCounter++).toString();
226
+ };
227
+ /**
228
+ * Removes a specific key from its type's recycle pool
229
+ */
230
+ RenderStackManager.prototype.deleteKeyFromRecyclePool = function (itemType, key) {
231
+ var _a;
232
+ (_a = this.recycleKeyPools.get(itemType)) === null || _a === void 0 ? void 0 : _a.delete(key);
233
+ };
234
+ /**
235
+ * Gets or creates a recycle pool for a specific item type
236
+ */
237
+ RenderStackManager.prototype.getRecyclePoolForType = function (itemType) {
238
+ var pool = this.recycleKeyPools.get(itemType);
239
+ if (!pool) {
240
+ pool = new Set();
241
+ this.recycleKeyPools.set(itemType, pool);
242
+ }
243
+ return pool;
244
+ };
245
+ /**
246
+ * Retrieves and removes a key from the type's recycle pool
247
+ * @returns A recycled key or undefined if none available
248
+ */
249
+ RenderStackManager.prototype.getKeyFromRecyclePool = function (itemType) {
250
+ var pool = this.getRecyclePoolForType(itemType);
251
+ if (pool.size > 0) {
252
+ var key = pool.values().next().value;
253
+ pool.delete(key);
254
+ return key;
255
+ }
256
+ return undefined;
257
+ };
258
+ return RenderStackManager;
259
+ }());
260
+ exports.RenderStackManager = RenderStackManager;
261
+ //# sourceMappingURL=RenderStackManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenderStackManager.js","sourceRoot":"","sources":["../../src/recyclerview/RenderStackManager.ts"],"names":[],"mappings":"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"}
@@ -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;AAmFD;;;GAGG;AACH,eAAO,MAAM,UAAU,8BAjFK,KAAK,SAAU,eAAe,CAAC,KAAK,CAAC,wBAoGhE,CAAC"}
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
- }, [item, index, extraData, target, renderItem]);
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":"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"}
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<number, string>;
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;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,GAAI,KAAK,EACxC,OAAO,yBAAyB,CAAC,KAAK,CAAC,sBAoGxC,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,30 @@ 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,
57
63
  };
64
+ // sort by index and log
65
+ // const sortedRenderStack = Array.from(renderStack.entries()).sort(
66
+ // ([, a], [, b]) => a.index - b.index
67
+ // );
68
+ // console.log(
69
+ // "sortedRenderStack",
70
+ // sortedRenderStack.map(([reactKey, { index }]) => {
71
+ // return `${index} => ${reactKey}`;
72
+ // })
73
+ // );
58
74
  return (react_1.default.createElement(CompatView_1.CompatView
59
75
  // TODO: Take care of web scroll bar here
60
76
  , {
61
77
  // TODO: Take care of web scroll bar here
62
78
  style: hasData && containerStyle }, containerLayout &&
63
79
  hasData &&
64
- Array.from(renderStack, function (_a) {
65
- var _b = tslib_1.__read(_a, 2), index = _b[0], reactKey = _b[1];
80
+ Array.from(renderStack.entries(), function (_a) {
81
+ var _b = tslib_1.__read(_a, 2), reactKey = _b[0], index = _b[1].index;
66
82
  var item = data[index];
67
83
  var trailingItem = ItemSeparatorComponent
68
84
  ? data[index + 1]
@@ -1 +1 @@
1
- {"version":3,"file":"ViewHolderCollection.js","sourceRoot":"","sources":["../../src/recyclerview/ViewHolderCollection.tsx"],"names":[],"mappings":"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"}
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
@@ -25,5 +26,5 @@ export interface ScrollAnchorRef {
25
26
  * @param props - Component props
26
27
  * @returns An invisible anchor element used for scrolling
27
28
  */
28
- export declare function ScrollAnchor({ scrollAnchorRef }: ScrollAnchorProps): React.JSX.Element;
29
+ export declare function ScrollAnchor({ scrollAnchorRef, horizontal, }: ScrollAnchorProps): React.JSX.Element;
29
30
  //# 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;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAAE,eAAe,EAAE,EAAE,iBAAiB,qBAoBlE"}
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;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAC3B,eAAe,EACf,UAAU,GACX,EAAE,iBAAiB,qBA6BnB"}
@@ -17,18 +17,23 @@ var CompatView_1 = require("./CompatView");
17
17
  * @returns An invisible anchor element used for scrolling
18
18
  */
19
19
  function ScrollAnchor(_a) {
20
- var scrollAnchorRef = _a.scrollAnchorRef;
20
+ var scrollAnchorRef = _a.scrollAnchorRef, horizontal = _a.horizontal;
21
21
  var _b = tslib_1.__read((0, react_1.useState)(1000000), 2), scrollOffset = _b[0], setScrollOffset = _b[1]; // TODO: Fix this value
22
22
  // Expose scrollBy method through ref
23
23
  (0, react_1.useImperativeHandle)(scrollAnchorRef, function () { return ({
24
24
  scrollBy: function (offset) {
25
25
  setScrollOffset(function (prev) { return prev + offset; });
26
26
  },
27
- }); });
27
+ }); }, []);
28
28
  // Create an invisible anchor element that can be positioned
29
29
  var anchor = (0, react_1.useMemo)(function () {
30
- return (react_1.default.createElement(CompatView_1.CompatView, { style: { position: "absolute", height: 0, top: scrollOffset } }));
31
- }, [scrollOffset]);
30
+ return (react_1.default.createElement(CompatView_1.CompatView, { style: {
31
+ position: "absolute",
32
+ height: 0,
33
+ top: horizontal ? 0 : scrollOffset,
34
+ left: horizontal ? scrollOffset : 0,
35
+ } }));
36
+ }, [scrollOffset, horizontal]);
32
37
  return anchor;
33
38
  }
34
39
  //# sourceMappingURL=ScrollAnchor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScrollAnchor.js","sourceRoot":"","sources":["../../../src/recyclerview/components/ScrollAnchor.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;;AA4BH,oCAoBC;;AA9CD,qDAAsE;AAEtE,2CAA0C;AAkB1C;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,EAAsC;QAApC,eAAe,qBAAA;IACtC,IAAA,KAAA,eAAkC,IAAA,gBAAQ,EAAC,OAAO,CAAC,IAAA,EAAlD,YAAY,QAAA,EAAE,eAAe,QAAqB,CAAC,CAAC,uBAAuB;IAElF,qCAAqC;IACrC,IAAA,2BAAmB,EAAC,eAAe,EAAE,cAAM,OAAA,CAAC;QAC1C,QAAQ,EAAE,UAAC,MAAc;YACvB,eAAe,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,GAAG,MAAM,EAAb,CAAa,CAAC,CAAC;QAC3C,CAAC;KACF,CAAC,EAJyC,CAIzC,CAAC,CAAC;IAEJ,4DAA4D;IAC5D,IAAM,MAAM,GAAG,IAAA,eAAO,EAAC;QACrB,OAAO,CACL,8BAAC,uBAAU,IACT,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,GAC7D,CACH,CAAC;IACJ,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"ScrollAnchor.js","sourceRoot":"","sources":["../../../src/recyclerview/components/ScrollAnchor.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;;AA6BH,oCAgCC;;AA3DD,qDAAsE;AAEtE,2CAA0C;AAmB1C;;;;;GAKG;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 | null;
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;AAED,eAAO,MAAM,aAAa,GAAI,KAAK,EAAG,sGAQnC,iBAAiB,CAAC,KAAK,CAAC,6BAiH1B,CAAC"}
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"}
@@ -12,30 +12,52 @@ var ViewHolder_1 = require("../ViewHolder");
12
12
  var CompatView_1 = require("./CompatView");
13
13
  var StickyHeaders = function (_a) {
14
14
  var stickyHeaderIndices = _a.stickyHeaderIndices, renderItem = _a.renderItem, stickyHeaderRef = _a.stickyHeaderRef, recyclerViewManager = _a.recyclerViewManager, scrollY = _a.scrollY, data = _a.data, extraData = _a.extraData;
15
- var _b = tslib_1.__read((0, react_1.useState)({ currentStickyIndex: -1, nextStickyIndex: -1 }), 2), stickyIndices = _b[0], setStickyIndices = _b[1];
16
- var currentStickyIndex = stickyIndices.currentStickyIndex, nextStickyIndex = stickyIndices.nextStickyIndex;
17
- // Memoize sorted indices based on their Y positions
15
+ var _b = tslib_1.__read((0, react_1.useState)({
16
+ currentStickyIndex: -1,
17
+ pushStartsAt: Number.MAX_SAFE_INTEGER,
18
+ }), 2), stickyHeaderState = _b[0], setStickyHeaderState = _b[1];
19
+ var currentStickyIndex = stickyHeaderState.currentStickyIndex, pushStartsAt = stickyHeaderState.pushStartsAt;
20
+ // sort indices and memoize compute
18
21
  var sortedIndices = (0, react_1.useMemo)(function () {
19
22
  return stickyHeaderIndices.sort(function (first, second) { return first - second; });
20
23
  }, [stickyHeaderIndices]);
24
+ var legthInvalid = sortedIndices.length === 0 ||
25
+ recyclerViewManager.getDataLength() <=
26
+ sortedIndices[sortedIndices.length - 1];
21
27
  var compute = (0, react_1.useCallback)(function () {
22
- var _a, _b;
23
- var adjustedValue = recyclerViewManager.getLastScrollOffset();
28
+ var _a, _b, _c, _d, _e, _f;
29
+ if (legthInvalid) {
30
+ return;
31
+ }
32
+ var adjustedScrollOffset = recyclerViewManager.getLastScrollOffset();
24
33
  // Binary search for current sticky index
25
- var currentIndexInArray = findCurrentStickyIndex(sortedIndices, adjustedValue, function (index) { return recyclerViewManager.getLayout(index).y; });
34
+ var currentIndexInArray = findCurrentStickyIndex(sortedIndices, adjustedScrollOffset, function (index) { return recyclerViewManager.getLayout(index).y; });
26
35
  var newStickyIndex = (_a = sortedIndices[currentIndexInArray]) !== null && _a !== void 0 ? _a : -1;
27
36
  var newNextStickyIndex = (_b = sortedIndices[currentIndexInArray + 1]) !== null && _b !== void 0 ? _b : -1;
28
37
  if (newNextStickyIndex > recyclerViewManager.getEngagedIndices().endIndex) {
29
38
  newNextStickyIndex = -1;
30
39
  }
40
+ // To make sure header offset is 0 in the interpolate compute
41
+ var newNextStickyY = newNextStickyIndex === -1
42
+ ? Number.MAX_SAFE_INTEGER
43
+ : ((_d = (_c = recyclerViewManager.tryGetLayout(newNextStickyIndex)) === null || _c === void 0 ? void 0 : _c.y) !== null && _d !== void 0 ? _d : 0) +
44
+ recyclerViewManager.firstItemOffset;
45
+ var newCurrentStickyHeight = (_f = (_e = recyclerViewManager.tryGetLayout(newStickyIndex)) === null || _e === void 0 ? void 0 : _e.height) !== null && _f !== void 0 ? _f : 0;
46
+ var newPushStartsAt = newNextStickyY - newCurrentStickyHeight;
31
47
  if (newStickyIndex !== currentStickyIndex ||
32
- newNextStickyIndex !== nextStickyIndex) {
33
- setStickyIndices({
48
+ newPushStartsAt !== pushStartsAt) {
49
+ setStickyHeaderState({
34
50
  currentStickyIndex: newStickyIndex,
35
- nextStickyIndex: newNextStickyIndex,
51
+ pushStartsAt: newPushStartsAt,
36
52
  });
37
53
  }
38
- }, [currentStickyIndex, nextStickyIndex, recyclerViewManager, sortedIndices]);
54
+ }, [
55
+ legthInvalid,
56
+ recyclerViewManager,
57
+ sortedIndices,
58
+ currentStickyIndex,
59
+ pushStartsAt,
60
+ ]);
39
61
  (0, react_1.useEffect)(function () {
40
62
  compute();
41
63
  }, [compute]);
@@ -46,31 +68,17 @@ var StickyHeaders = function (_a) {
46
68
  },
47
69
  }); }, [compute]);
48
70
  var refHolder = (0, react_1.useRef)(new Map()).current;
49
- // Memoize translateY calculation
50
71
  var translateY = (0, react_1.useMemo)(function () {
51
- if (currentStickyIndex === -1 || nextStickyIndex === -1) {
52
- return scrollY.interpolate({
53
- inputRange: [0, Infinity],
54
- outputRange: [0, 0],
55
- extrapolate: "clamp",
56
- });
57
- }
58
- var currentLayout = recyclerViewManager.getLayout(currentStickyIndex);
59
- var nextLayout = recyclerViewManager.getLayout(nextStickyIndex);
60
- var pushStartsAt = nextLayout.y - currentLayout.height;
72
+ var _a, _b;
73
+ var currentStickyHeight = (_b = (_a = recyclerViewManager.tryGetLayout(currentStickyIndex)) === null || _a === void 0 ? void 0 : _a.height) !== null && _b !== void 0 ? _b : 0;
61
74
  return scrollY.interpolate({
62
- inputRange: [
63
- pushStartsAt + recyclerViewManager.firstItemOffset,
64
- nextLayout.y + recyclerViewManager.firstItemOffset,
65
- ],
66
- outputRange: [0, -currentLayout.height],
75
+ inputRange: [pushStartsAt, pushStartsAt + currentStickyHeight],
76
+ outputRange: [0, -currentStickyHeight],
67
77
  extrapolate: "clamp",
68
78
  });
69
- }, [currentStickyIndex, nextStickyIndex, recyclerViewManager, scrollY]);
79
+ }, [recyclerViewManager, currentStickyIndex, scrollY, pushStartsAt]);
70
80
  // Memoize header content
71
81
  var headerContent = (0, react_1.useMemo)(function () {
72
- if (currentStickyIndex === -1)
73
- return null;
74
82
  return (react_1.default.createElement(CompatView_1.CompatAnimatedView, { style: {
75
83
  position: "absolute",
76
84
  top: 0,
@@ -78,9 +86,8 @@ var StickyHeaders = function (_a) {
78
86
  right: 0,
79
87
  zIndex: 1,
80
88
  transform: [{ translateY: translateY }],
81
- } },
82
- react_1.default.createElement(ViewHolder_1.ViewHolder, { index: currentStickyIndex, item: data[currentStickyIndex], renderItem: renderItem, layout: { x: 0, y: 0, width: 0, height: 0 }, refHolder: refHolder, extraData: extraData, trailingItem: null, target: "StickyHeader" })));
83
- }, [currentStickyIndex, data, renderItem, extraData, refHolder, translateY]);
89
+ } }, currentStickyIndex !== -1 ? (react_1.default.createElement(ViewHolder_1.ViewHolder, { index: currentStickyIndex, item: data[currentStickyIndex], renderItem: renderItem, layout: { x: 0, y: 0, width: 0, height: 0 }, refHolder: refHolder, extraData: extraData, trailingItem: null, target: "StickyHeader" })) : null));
90
+ }, [translateY, currentStickyIndex, data, renderItem, refHolder, extraData]);
84
91
  return headerContent;
85
92
  };
86
93
  exports.StickyHeaders = StickyHeaders;