@shopify/flash-list 2.0.0-alpha.2 → 2.0.0-alpha.20

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 (318) hide show
  1. package/README.md +67 -96
  2. package/android/src/main/kotlin/com/shopify/reactnative/flash_list/BlankAreaEvent.kt +2 -2
  3. package/dist/AnimatedFlashList.d.ts +0 -1
  4. package/dist/AnimatedFlashList.d.ts.map +1 -1
  5. package/dist/AnimatedFlashList.js +3 -3
  6. package/dist/AnimatedFlashList.js.map +1 -1
  7. package/dist/FlashList.d.ts +9 -0
  8. package/dist/FlashList.d.ts.map +1 -1
  9. package/dist/FlashList.js +22 -3
  10. package/dist/FlashList.js.map +1 -1
  11. package/dist/FlashListProps.d.ts +33 -13
  12. package/dist/FlashListProps.d.ts.map +1 -1
  13. package/dist/FlashListProps.js.map +1 -1
  14. package/dist/FlashListRef.d.ts +305 -0
  15. package/dist/FlashListRef.d.ts.map +1 -0
  16. package/dist/FlashListRef.js +3 -0
  17. package/dist/FlashListRef.js.map +1 -0
  18. package/dist/GridLayoutProviderWithProps.js +1 -2
  19. package/dist/GridLayoutProviderWithProps.js.map +1 -1
  20. package/dist/MasonryFlashList.d.ts +2 -2
  21. package/dist/MasonryFlashList.d.ts.map +1 -1
  22. package/dist/MasonryFlashList.js.map +1 -1
  23. package/dist/PureComponentWrapper.js +1 -1
  24. package/dist/PureComponentWrapper.js.map +1 -1
  25. package/dist/__tests__/AverageWindow.test.js.map +1 -1
  26. package/dist/__tests__/ConsecutiveNumbers.test.d.ts +2 -0
  27. package/dist/__tests__/ConsecutiveNumbers.test.d.ts.map +1 -0
  28. package/dist/__tests__/ConsecutiveNumbers.test.js +224 -0
  29. package/dist/__tests__/ConsecutiveNumbers.test.js.map +1 -0
  30. package/dist/__tests__/FlashList.test.js.map +1 -1
  31. package/dist/__tests__/GridLayoutManager.test.d.ts +2 -0
  32. package/dist/__tests__/GridLayoutManager.test.d.ts.map +1 -0
  33. package/dist/__tests__/GridLayoutManager.test.js +69 -0
  34. package/dist/__tests__/GridLayoutManager.test.js.map +1 -0
  35. package/dist/__tests__/GridLayoutProviderWithProps.test.js.map +1 -1
  36. package/dist/__tests__/LinearLayoutManager.test.d.ts +2 -0
  37. package/dist/__tests__/LinearLayoutManager.test.d.ts.map +1 -0
  38. package/dist/__tests__/LinearLayoutManager.test.js +140 -0
  39. package/dist/__tests__/LinearLayoutManager.test.js.map +1 -0
  40. package/dist/__tests__/MasonryFlashList.test.js.map +1 -1
  41. package/dist/__tests__/MasonryLayoutManager.test.d.ts +2 -0
  42. package/dist/__tests__/MasonryLayoutManager.test.d.ts.map +1 -0
  43. package/dist/__tests__/MasonryLayoutManager.test.js +148 -0
  44. package/dist/__tests__/MasonryLayoutManager.test.js.map +1 -0
  45. package/dist/__tests__/RecyclerView.test.d.ts +2 -0
  46. package/dist/__tests__/RecyclerView.test.d.ts.map +1 -0
  47. package/dist/__tests__/RecyclerView.test.js +103 -0
  48. package/dist/__tests__/RecyclerView.test.js.map +1 -0
  49. package/dist/__tests__/RenderStackManager.test.d.ts +2 -0
  50. package/dist/__tests__/RenderStackManager.test.d.ts.map +1 -0
  51. package/dist/__tests__/RenderStackManager.test.js +485 -0
  52. package/dist/__tests__/RenderStackManager.test.js.map +1 -0
  53. package/dist/__tests__/ViewabilityHelper.test.js.map +1 -1
  54. package/dist/__tests__/findVisibleIndex.test.d.ts +2 -0
  55. package/dist/__tests__/findVisibleIndex.test.d.ts.map +1 -0
  56. package/dist/__tests__/findVisibleIndex.test.js +259 -0
  57. package/dist/__tests__/findVisibleIndex.test.js.map +1 -0
  58. package/dist/__tests__/helpers/createLayoutManager.d.ts +34 -0
  59. package/dist/__tests__/helpers/createLayoutManager.d.ts.map +1 -0
  60. package/dist/__tests__/helpers/createLayoutManager.js +110 -0
  61. package/dist/__tests__/helpers/createLayoutManager.js.map +1 -0
  62. package/dist/__tests__/helpers/mountFlashList.d.ts +2 -2
  63. package/dist/__tests__/helpers/mountFlashList.d.ts.map +1 -1
  64. package/dist/__tests__/helpers/mountFlashList.js +2 -2
  65. package/dist/__tests__/helpers/mountFlashList.js.map +1 -1
  66. package/dist/__tests__/helpers/mountMasonryFlashList.d.ts +2 -2
  67. package/dist/__tests__/helpers/mountMasonryFlashList.d.ts.map +1 -1
  68. package/dist/__tests__/helpers/mountMasonryFlashList.js +2 -2
  69. package/dist/__tests__/helpers/mountMasonryFlashList.js.map +1 -1
  70. package/dist/__tests__/useBlankAreaTracker.test.js.map +1 -1
  71. package/dist/__tests__/useUnmountAwareCallbacks.test.d.ts +2 -0
  72. package/dist/__tests__/useUnmountAwareCallbacks.test.d.ts.map +1 -0
  73. package/dist/__tests__/useUnmountAwareCallbacks.test.js +185 -0
  74. package/dist/__tests__/useUnmountAwareCallbacks.test.js.map +1 -0
  75. package/dist/benchmark/AutoScrollHelper.js +2 -2
  76. package/dist/benchmark/AutoScrollHelper.js.map +1 -1
  77. package/dist/benchmark/JSFPSMonitor.js.map +1 -1
  78. package/dist/benchmark/roundToDecimalPlaces.js +1 -2
  79. package/dist/benchmark/roundToDecimalPlaces.js.map +1 -1
  80. package/dist/benchmark/useBenchmark.js +2 -3
  81. package/dist/benchmark/useBenchmark.js.map +1 -1
  82. package/dist/benchmark/useBlankAreaTracker.js +1 -2
  83. package/dist/benchmark/useBlankAreaTracker.js.map +1 -1
  84. package/dist/benchmark/useDataMultiplier.js +1 -2
  85. package/dist/benchmark/useDataMultiplier.js.map +1 -1
  86. package/dist/benchmark/useFlatListBenchmark.d.ts +0 -1
  87. package/dist/benchmark/useFlatListBenchmark.d.ts.map +1 -1
  88. package/dist/benchmark/useFlatListBenchmark.js +9 -9
  89. package/dist/benchmark/useFlatListBenchmark.js.map +1 -1
  90. package/dist/enableNewCore.d.ts.map +1 -1
  91. package/dist/enableNewCore.js +4 -4
  92. package/dist/enableNewCore.js.map +1 -1
  93. package/dist/errors/CustomError.js.map +1 -1
  94. package/dist/index.d.ts +3 -1
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +9 -3
  97. package/dist/index.js.map +1 -1
  98. package/dist/native/auto-layout/AutoLayoutView.d.ts +1 -1
  99. package/dist/native/auto-layout/AutoLayoutView.d.ts.map +1 -1
  100. package/dist/native/auto-layout/AutoLayoutView.js +1 -1
  101. package/dist/native/auto-layout/AutoLayoutView.js.map +1 -1
  102. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.d.ts.map +1 -1
  103. package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.d.ts +1 -1
  104. package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.d.ts.map +1 -1
  105. package/dist/native/config/PlatformHelper.android.d.ts +2 -0
  106. package/dist/native/config/PlatformHelper.android.d.ts.map +1 -1
  107. package/dist/native/config/PlatformHelper.android.js +2 -0
  108. package/dist/native/config/PlatformHelper.android.js.map +1 -1
  109. package/dist/native/config/PlatformHelper.d.ts +2 -0
  110. package/dist/native/config/PlatformHelper.d.ts.map +1 -1
  111. package/dist/native/config/PlatformHelper.ios.d.ts +2 -0
  112. package/dist/native/config/PlatformHelper.ios.d.ts.map +1 -1
  113. package/dist/native/config/PlatformHelper.ios.js +2 -0
  114. package/dist/native/config/PlatformHelper.ios.js.map +1 -1
  115. package/dist/native/config/PlatformHelper.js +2 -0
  116. package/dist/native/config/PlatformHelper.js.map +1 -1
  117. package/dist/native/config/PlatformHelper.web.d.ts +2 -0
  118. package/dist/native/config/PlatformHelper.web.d.ts.map +1 -1
  119. package/dist/native/config/PlatformHelper.web.js +3 -1
  120. package/dist/native/config/PlatformHelper.web.js.map +1 -1
  121. package/dist/recyclerview/RecyclerView.d.ts +3 -2
  122. package/dist/recyclerview/RecyclerView.d.ts.map +1 -1
  123. package/dist/recyclerview/RecyclerView.js +133 -69
  124. package/dist/recyclerview/RecyclerView.js.map +1 -1
  125. package/dist/recyclerview/RecyclerViewContextProvider.d.ts +41 -7
  126. package/dist/recyclerview/RecyclerViewContextProvider.d.ts.map +1 -1
  127. package/dist/recyclerview/RecyclerViewContextProvider.js +6 -2
  128. package/dist/recyclerview/RecyclerViewContextProvider.js.map +1 -1
  129. package/dist/recyclerview/RecyclerViewManager.d.ts +27 -6
  130. package/dist/recyclerview/RecyclerViewManager.d.ts.map +1 -1
  131. package/dist/recyclerview/RecyclerViewManager.js +135 -106
  132. package/dist/recyclerview/RecyclerViewManager.js.map +1 -1
  133. package/dist/recyclerview/RecyclerViewProps.d.ts +1 -1
  134. package/dist/recyclerview/RecyclerViewProps.d.ts.map +1 -1
  135. package/dist/recyclerview/RenderStackManager.d.ts +86 -0
  136. package/dist/recyclerview/RenderStackManager.d.ts.map +1 -0
  137. package/dist/recyclerview/RenderStackManager.js +343 -0
  138. package/dist/recyclerview/RenderStackManager.js.map +1 -0
  139. package/dist/recyclerview/ViewHolder.d.ts.map +1 -1
  140. package/dist/recyclerview/ViewHolder.js +8 -6
  141. package/dist/recyclerview/ViewHolder.js.map +1 -1
  142. package/dist/recyclerview/ViewHolderCollection.d.ts +10 -4
  143. package/dist/recyclerview/ViewHolderCollection.d.ts.map +1 -1
  144. package/dist/recyclerview/ViewHolderCollection.js +26 -10
  145. package/dist/recyclerview/ViewHolderCollection.js.map +1 -1
  146. package/dist/recyclerview/components/ScrollAnchor.d.ts +2 -1
  147. package/dist/recyclerview/components/ScrollAnchor.d.ts.map +1 -1
  148. package/dist/recyclerview/components/ScrollAnchor.js +12 -9
  149. package/dist/recyclerview/components/ScrollAnchor.js.map +1 -1
  150. package/dist/recyclerview/components/StickyHeaders.d.ts +2 -2
  151. package/dist/recyclerview/components/StickyHeaders.d.ts.map +1 -1
  152. package/dist/recyclerview/components/StickyHeaders.js +44 -45
  153. package/dist/recyclerview/components/StickyHeaders.js.map +1 -1
  154. package/dist/recyclerview/helpers/ConsecutiveNumbers.d.ts +1 -1
  155. package/dist/recyclerview/helpers/ConsecutiveNumbers.d.ts.map +1 -1
  156. package/dist/recyclerview/helpers/ConsecutiveNumbers.js +2 -2
  157. package/dist/recyclerview/helpers/ConsecutiveNumbers.js.map +1 -1
  158. package/dist/recyclerview/helpers/EngagedIndicesTracker.d.ts +48 -2
  159. package/dist/recyclerview/helpers/EngagedIndicesTracker.d.ts.map +1 -1
  160. package/dist/recyclerview/helpers/EngagedIndicesTracker.js +89 -19
  161. package/dist/recyclerview/helpers/EngagedIndicesTracker.js.map +1 -1
  162. package/dist/recyclerview/helpers/RenderTimeTracker.d.ts +11 -0
  163. package/dist/recyclerview/helpers/RenderTimeTracker.d.ts.map +1 -0
  164. package/dist/recyclerview/helpers/RenderTimeTracker.js +42 -0
  165. package/dist/recyclerview/helpers/RenderTimeTracker.js.map +1 -0
  166. package/dist/recyclerview/helpers/VelocityTracker.d.ts +29 -0
  167. package/dist/recyclerview/helpers/VelocityTracker.d.ts.map +1 -0
  168. package/dist/recyclerview/helpers/VelocityTracker.js +70 -0
  169. package/dist/recyclerview/helpers/VelocityTracker.js.map +1 -0
  170. package/dist/recyclerview/hooks/useBoundDetection.d.ts +1 -3
  171. package/dist/recyclerview/hooks/useBoundDetection.d.ts.map +1 -1
  172. package/dist/recyclerview/hooks/useBoundDetection.js +60 -28
  173. package/dist/recyclerview/hooks/useBoundDetection.js.map +1 -1
  174. package/dist/recyclerview/hooks/useLayoutState.d.ts +3 -1
  175. package/dist/recyclerview/hooks/useLayoutState.d.ts.map +1 -1
  176. package/dist/recyclerview/hooks/useLayoutState.js +6 -5
  177. package/dist/recyclerview/hooks/useLayoutState.js.map +1 -1
  178. package/dist/recyclerview/hooks/useMappingHelper.d.ts +9 -0
  179. package/dist/recyclerview/hooks/useMappingHelper.d.ts.map +1 -0
  180. package/dist/recyclerview/hooks/useMappingHelper.js +19 -0
  181. package/dist/recyclerview/hooks/useMappingHelper.js.map +1 -0
  182. package/dist/recyclerview/hooks/useOnLoad.d.ts +2 -2
  183. package/dist/recyclerview/hooks/useOnLoad.d.ts.map +1 -1
  184. package/dist/recyclerview/hooks/useOnLoad.js +9 -10
  185. package/dist/recyclerview/hooks/useOnLoad.js.map +1 -1
  186. package/dist/recyclerview/hooks/useRecyclerViewController.d.ts +5 -49
  187. package/dist/recyclerview/hooks/useRecyclerViewController.d.ts.map +1 -1
  188. package/dist/recyclerview/hooks/useRecyclerViewController.js +340 -191
  189. package/dist/recyclerview/hooks/useRecyclerViewController.js.map +1 -1
  190. package/dist/recyclerview/hooks/useRecyclerViewManager.d.ts +2 -0
  191. package/dist/recyclerview/hooks/useRecyclerViewManager.d.ts.map +1 -1
  192. package/dist/recyclerview/hooks/useRecyclerViewManager.js +11 -1
  193. package/dist/recyclerview/hooks/useRecyclerViewManager.js.map +1 -1
  194. package/dist/recyclerview/hooks/useRecyclingState.d.ts +4 -2
  195. package/dist/recyclerview/hooks/useRecyclingState.d.ts.map +1 -1
  196. package/dist/recyclerview/hooks/useRecyclingState.js +3 -4
  197. package/dist/recyclerview/hooks/useRecyclingState.js.map +1 -1
  198. package/dist/recyclerview/hooks/useSecondaryProps.d.ts +1 -1
  199. package/dist/recyclerview/hooks/useSecondaryProps.d.ts.map +1 -1
  200. package/dist/recyclerview/hooks/useSecondaryProps.js +15 -12
  201. package/dist/recyclerview/hooks/useSecondaryProps.js.map +1 -1
  202. package/dist/recyclerview/hooks/useUnmountAwareCallbacks.d.ts +15 -0
  203. package/dist/recyclerview/hooks/useUnmountAwareCallbacks.d.ts.map +1 -0
  204. package/dist/recyclerview/hooks/useUnmountAwareCallbacks.js +63 -0
  205. package/dist/recyclerview/hooks/useUnmountAwareCallbacks.js.map +1 -0
  206. package/dist/recyclerview/hooks/useUnmountFlag.d.ts +0 -1
  207. package/dist/recyclerview/hooks/useUnmountFlag.d.ts.map +1 -1
  208. package/dist/recyclerview/hooks/useUnmountFlag.js +1 -0
  209. package/dist/recyclerview/hooks/useUnmountFlag.js.map +1 -1
  210. package/dist/recyclerview/layout-managers/GridLayoutManager.d.ts +18 -4
  211. package/dist/recyclerview/layout-managers/GridLayoutManager.d.ts.map +1 -1
  212. package/dist/recyclerview/layout-managers/GridLayoutManager.js +61 -25
  213. package/dist/recyclerview/layout-managers/GridLayoutManager.js.map +1 -1
  214. package/dist/recyclerview/layout-managers/LayoutManager.d.ts +36 -21
  215. package/dist/recyclerview/layout-managers/LayoutManager.d.ts.map +1 -1
  216. package/dist/recyclerview/layout-managers/LayoutManager.js +96 -28
  217. package/dist/recyclerview/layout-managers/LayoutManager.js.map +1 -1
  218. package/dist/recyclerview/layout-managers/LinearLayoutManager.d.ts +1 -2
  219. package/dist/recyclerview/layout-managers/LinearLayoutManager.d.ts.map +1 -1
  220. package/dist/recyclerview/layout-managers/LinearLayoutManager.js +3 -3
  221. package/dist/recyclerview/layout-managers/LinearLayoutManager.js.map +1 -1
  222. package/dist/recyclerview/layout-managers/MasonryLayoutManager.d.ts +9 -1
  223. package/dist/recyclerview/layout-managers/MasonryLayoutManager.d.ts.map +1 -1
  224. package/dist/recyclerview/layout-managers/MasonryLayoutManager.js +30 -16
  225. package/dist/recyclerview/layout-managers/MasonryLayoutManager.js.map +1 -1
  226. package/dist/recyclerview/utils/adjustOffsetForRTL.js +1 -2
  227. package/dist/recyclerview/utils/adjustOffsetForRTL.js.map +1 -1
  228. package/dist/recyclerview/utils/componentUtils.d.ts +1 -1
  229. package/dist/recyclerview/utils/componentUtils.d.ts.map +1 -1
  230. package/dist/recyclerview/utils/componentUtils.js.map +1 -1
  231. package/dist/recyclerview/utils/findVisibleIndex.d.ts.map +1 -1
  232. package/dist/recyclerview/utils/findVisibleIndex.js +3 -5
  233. package/dist/recyclerview/utils/findVisibleIndex.js.map +1 -1
  234. package/dist/recyclerview/utils/measureLayout.d.ts +24 -28
  235. package/dist/recyclerview/utils/measureLayout.d.ts.map +1 -1
  236. package/dist/recyclerview/utils/measureLayout.js +36 -6
  237. package/dist/recyclerview/utils/measureLayout.js.map +1 -1
  238. package/dist/recyclerview/utils/measureLayout.web.d.ts +29 -0
  239. package/dist/recyclerview/utils/measureLayout.web.d.ts.map +1 -0
  240. package/dist/recyclerview/utils/measureLayout.web.js +87 -0
  241. package/dist/recyclerview/utils/measureLayout.web.js.map +1 -0
  242. package/dist/specs/AutoLayoutNativeComponent.d.ts +1 -2
  243. package/dist/specs/AutoLayoutNativeComponent.d.ts.map +1 -1
  244. package/dist/specs/CellContainerNativeComponent.d.ts +0 -1
  245. package/dist/specs/CellContainerNativeComponent.d.ts.map +1 -1
  246. package/dist/tsconfig.tsbuildinfo +1 -1
  247. package/dist/utils/AverageWindow.js.map +1 -1
  248. package/dist/utils/ContentContainerUtils.d.ts.map +1 -1
  249. package/dist/utils/ContentContainerUtils.js.map +1 -1
  250. package/dist/viewability/ViewToken.d.ts +2 -2
  251. package/dist/viewability/ViewToken.d.ts.map +1 -1
  252. package/dist/viewability/ViewabilityHelper.js +1 -1
  253. package/dist/viewability/ViewabilityHelper.js.map +1 -1
  254. package/dist/viewability/ViewabilityManager.d.ts.map +1 -1
  255. package/dist/viewability/ViewabilityManager.js +11 -5
  256. package/dist/viewability/ViewabilityManager.js.map +1 -1
  257. package/jestSetup.js +30 -11
  258. package/package.json +4 -3
  259. package/src/AnimatedFlashList.ts +3 -2
  260. package/src/FlashList.tsx +25 -1
  261. package/src/FlashListProps.ts +42 -11
  262. package/src/FlashListRef.ts +320 -0
  263. package/src/MasonryFlashList.tsx +2 -2
  264. package/src/__tests__/ConsecutiveNumbers.test.ts +232 -0
  265. package/src/__tests__/GridLayoutManager.test.ts +113 -0
  266. package/src/__tests__/LinearLayoutManager.test.ts +227 -0
  267. package/src/__tests__/MasonryLayoutManager.test.ts +202 -0
  268. package/src/__tests__/RecyclerView.test.tsx +144 -0
  269. package/src/__tests__/RenderStackManager.test.ts +574 -0
  270. package/src/__tests__/findVisibleIndex.test.ts +369 -0
  271. package/src/__tests__/helpers/createLayoutManager.ts +141 -0
  272. package/src/__tests__/useUnmountAwareCallbacks.test.tsx +285 -0
  273. package/src/benchmark/useFlatListBenchmark.ts +2 -2
  274. package/src/enableNewCore.ts +3 -1
  275. package/src/index.ts +10 -3
  276. package/src/native/config/PlatformHelper.android.ts +2 -0
  277. package/src/native/config/PlatformHelper.ios.ts +2 -0
  278. package/src/native/config/PlatformHelper.ts +2 -0
  279. package/src/native/config/PlatformHelper.web.ts +3 -1
  280. package/src/recyclerview/RecyclerView.tsx +178 -89
  281. package/src/recyclerview/RecyclerViewContextProvider.ts +53 -7
  282. package/src/recyclerview/RecyclerViewManager.ts +157 -87
  283. package/src/recyclerview/RecyclerViewProps.ts +2 -1
  284. package/src/recyclerview/RenderStackManager.ts +317 -0
  285. package/src/recyclerview/ViewHolder.tsx +13 -6
  286. package/src/recyclerview/ViewHolderCollection.tsx +45 -16
  287. package/src/recyclerview/components/ScrollAnchor.tsx +24 -11
  288. package/src/recyclerview/components/StickyHeaders.tsx +70 -58
  289. package/src/recyclerview/helpers/ConsecutiveNumbers.ts +2 -2
  290. package/src/recyclerview/helpers/EngagedIndicesTracker.ts +135 -25
  291. package/src/recyclerview/helpers/RenderTimeTracker.ts +42 -0
  292. package/src/recyclerview/helpers/VelocityTracker.ts +77 -0
  293. package/src/recyclerview/hooks/useBoundDetection.ts +74 -25
  294. package/src/recyclerview/hooks/useLayoutState.ts +15 -6
  295. package/src/recyclerview/hooks/useMappingHelper.ts +20 -0
  296. package/src/recyclerview/hooks/useOnLoad.ts +11 -10
  297. package/src/recyclerview/hooks/useRecyclerViewController.tsx +375 -237
  298. package/src/recyclerview/hooks/useRecyclerViewManager.ts +13 -1
  299. package/src/recyclerview/hooks/useRecyclingState.ts +11 -7
  300. package/src/recyclerview/hooks/useSecondaryProps.tsx +12 -7
  301. package/src/recyclerview/hooks/useUnmountAwareCallbacks.ts +73 -0
  302. package/src/recyclerview/hooks/useUnmountFlag.ts +1 -0
  303. package/src/recyclerview/layout-managers/GridLayoutManager.ts +68 -27
  304. package/src/recyclerview/layout-managers/LayoutManager.ts +116 -42
  305. package/src/recyclerview/layout-managers/LinearLayoutManager.ts +12 -8
  306. package/src/recyclerview/layout-managers/MasonryLayoutManager.ts +34 -13
  307. package/src/recyclerview/utils/componentUtils.ts +1 -1
  308. package/src/recyclerview/utils/findVisibleIndex.ts +1 -2
  309. package/src/recyclerview/utils/measureLayout.ts +41 -2
  310. package/src/recyclerview/utils/measureLayout.web.ts +102 -0
  311. package/src/viewability/ViewToken.ts +2 -2
  312. package/src/viewability/ViewabilityHelper.ts +1 -1
  313. package/src/viewability/ViewabilityManager.ts +16 -9
  314. package/dist/recyclerview/RecycleKeyManager.d.ts +0 -82
  315. package/dist/recyclerview/RecycleKeyManager.d.ts.map +0 -1
  316. package/dist/recyclerview/RecycleKeyManager.js +0 -135
  317. package/dist/recyclerview/RecycleKeyManager.js.map +0 -1
  318. package/src/recyclerview/RecycleKeyManager.ts +0 -185
@@ -0,0 +1,86 @@
1
+ import { ConsecutiveNumbers } from "./helpers/ConsecutiveNumbers";
2
+ /**
3
+ * Manages the recycling of rendered items in a virtualized list.
4
+ * This class handles tracking, recycling, and reusing item keys to optimize
5
+ * rendering performance by minimizing creation/destruction of components.
6
+ */
7
+ export declare class RenderStackManager {
8
+ disableRecycling: boolean;
9
+ private maxItemsInRecyclePool;
10
+ private recycleKeyPools;
11
+ private keyMap;
12
+ private stableIdMap;
13
+ private keyCounter;
14
+ private unProcessedIndices;
15
+ /**
16
+ * @param maxItemsInRecyclePool - Maximum number of items that can be in the recycle pool
17
+ */
18
+ constructor(maxItemsInRecyclePool?: number);
19
+ /**
20
+ * Synchronizes the render stack with the current state of data.
21
+ * This method is the core orchestrator that:
22
+ * 1. Recycles keys for items that are no longer valid
23
+ * 2. Updates existing keys for items that remain visible
24
+ * 3. Assigns new keys for newly visible items
25
+ * 4. Cleans up excess items to maintain the recycling pool size
26
+ *
27
+ * @param getStableId - Function to get a stable identifier for an item at a specific index
28
+ * @param getItemType - Function to get the type of an item at a specific index
29
+ * @param engagedIndices - Collection of indices that are currently visible or engaged
30
+ * @param dataLength - Total length of the data set
31
+ */
32
+ sync(getStableId: (index: number) => string, getItemType: (index: number) => string, engagedIndices: ConsecutiveNumbers, dataLength: number): void;
33
+ /**
34
+ * Checks if a stable ID already has an assigned key
35
+ */
36
+ private hasOptimizedKey;
37
+ /**
38
+ * Cleans up stale keys and manages the recycle pool size.
39
+ * This ensures we don't maintain references to items that are no longer in the dataset,
40
+ * and limits the number of recycled items to avoid excessive memory usage.
41
+ */
42
+ private cleanup;
43
+ /**
44
+ * Places a key back into its type-specific recycle pool for future reuse
45
+ */
46
+ private recycleKey;
47
+ /**
48
+ * Returns the current render stack containing all active keys and their metadata
49
+ */
50
+ getRenderStack(): Map<string, {
51
+ itemType: string;
52
+ index: number;
53
+ stableId: string;
54
+ }>;
55
+ /**
56
+ * Syncs an individual item by assigning it an appropriate key.
57
+ * Will use an existing key if available, or generate a new one.
58
+ *
59
+ * @returns The key assigned to the item
60
+ */
61
+ private syncItem;
62
+ /**
63
+ * Clears all recycled keys from the pool, effectively resetting the recycling system.
64
+ * This operation does not affect currently active keys.
65
+ */
66
+ private clearRecyclePool;
67
+ /**
68
+ * Generates a unique sequential key using an internal counter.
69
+ * @returns A unique key as a string
70
+ */
71
+ private generateKey;
72
+ /**
73
+ * Removes a specific key from its type's recycle pool
74
+ */
75
+ private deleteKeyFromRecyclePool;
76
+ /**
77
+ * Gets or creates a recycle pool for a specific item type
78
+ */
79
+ private getRecyclePoolForType;
80
+ /**
81
+ * Retrieves and removes a key from the type's recycle pool
82
+ * @returns A recycled key or undefined if none available
83
+ */
84
+ private getKeyFromRecyclePool;
85
+ }
86
+ //# sourceMappingURL=RenderStackManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenderStackManager.d.ts","sourceRoot":"","sources":["../../src/recyclerview/RenderStackManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE;;;;GAIG;AACH,qBAAa,kBAAkB;IACtB,gBAAgB,UAAS;IAGhC,OAAO,CAAC,qBAAqB,CAAS;IAGtC,OAAO,CAAC,eAAe,CAA2B;IAGlD,OAAO,CAAC,MAAM,CAGZ;IAGF,OAAO,CAAC,WAAW,CAAsB;IAGzC,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,kBAAkB,CAAc;IAExC;;OAEG;gBACS,qBAAqB,GAAE,MAAgC;IASnE;;;;;;;;;;;;OAYG;IACI,IAAI,CACT,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,EACtC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,EACtC,cAAc,EAAE,kBAAkB,EAClC,UAAU,EAAE,MAAM;IAmEpB;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;;;OAIG;IACH,OAAO,CAAC,OAAO;IA8Df;;OAEG;IACH,OAAO,CAAC,UAAU;IAkBlB;;OAEG;IACI,cAAc;kBA7MP,MAAM;eAAS,MAAM;kBAAY,MAAM;;IAiNrD;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;IA+BhB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAIhC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAS7B;;;OAGG;IACH,OAAO,CAAC,qBAAqB;CAS9B"}
@@ -0,0 +1,343 @@
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
+ this.unProcessedIndices = new Set();
23
+ }
24
+ /**
25
+ * Synchronizes the render stack with the current state of data.
26
+ * This method is the core orchestrator that:
27
+ * 1. Recycles keys for items that are no longer valid
28
+ * 2. Updates existing keys for items that remain visible
29
+ * 3. Assigns new keys for newly visible items
30
+ * 4. Cleans up excess items to maintain the recycling pool size
31
+ *
32
+ * @param getStableId - Function to get a stable identifier for an item at a specific index
33
+ * @param getItemType - Function to get the type of an item at a specific index
34
+ * @param engagedIndices - Collection of indices that are currently visible or engaged
35
+ * @param dataLength - Total length of the data set
36
+ */
37
+ RenderStackManager.prototype.sync = function (getStableId, getItemType, engagedIndices, dataLength) {
38
+ var e_1, _a, e_2, _b, e_3, _c, e_4, _d, e_5, _e;
39
+ var _this = this;
40
+ this.clearRecyclePool();
41
+ this.unProcessedIndices.clear();
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
+ if (!_this.disableRecycling) {
50
+ _this.unProcessedIndices.add(index);
51
+ }
52
+ if (!engagedIndices.includes(index)) {
53
+ _this.recycleKey(key);
54
+ return;
55
+ }
56
+ var newStableId = getStableId(index);
57
+ var newItemType = getItemType(index);
58
+ if (stableId !== newStableId || itemType !== newItemType) {
59
+ _this.recycleKey(key);
60
+ }
61
+ });
62
+ try {
63
+ // First pass: process items that already have optimized keys
64
+ for (var engagedIndices_1 = tslib_1.__values(engagedIndices), engagedIndices_1_1 = engagedIndices_1.next(); !engagedIndices_1_1.done; engagedIndices_1_1 = engagedIndices_1.next()) {
65
+ var index = engagedIndices_1_1.value;
66
+ if (this.hasOptimizedKey(getStableId(index))) {
67
+ this.syncItem(index, getItemType(index), getStableId(index));
68
+ }
69
+ }
70
+ }
71
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
72
+ finally {
73
+ try {
74
+ if (engagedIndices_1_1 && !engagedIndices_1_1.done && (_a = engagedIndices_1.return)) _a.call(engagedIndices_1);
75
+ }
76
+ finally { if (e_1) throw e_1.error; }
77
+ }
78
+ try {
79
+ // Second pass: process remaining items that need new keys
80
+ for (var engagedIndices_2 = tslib_1.__values(engagedIndices), engagedIndices_2_1 = engagedIndices_2.next(); !engagedIndices_2_1.done; engagedIndices_2_1 = engagedIndices_2.next()) {
81
+ var index = engagedIndices_2_1.value;
82
+ if (!this.hasOptimizedKey(getStableId(index))) {
83
+ this.syncItem(index, getItemType(index), getStableId(index));
84
+ }
85
+ }
86
+ }
87
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
88
+ finally {
89
+ try {
90
+ if (engagedIndices_2_1 && !engagedIndices_2_1.done && (_b = engagedIndices_2.return)) _b.call(engagedIndices_2);
91
+ }
92
+ finally { if (e_2) throw e_2.error; }
93
+ }
94
+ // create indices that are not in the engagedIndices and less than dataLength
95
+ // select only indices that are not in the engagedIndices
96
+ var validIndicesInPool = [];
97
+ try {
98
+ for (var _f = tslib_1.__values(this.keyMap.values()), _g = _f.next(); !_g.done; _g = _f.next()) {
99
+ var keyInfo = _g.value;
100
+ var index = keyInfo.index;
101
+ if (index < dataLength && !engagedIndices.includes(index)) {
102
+ validIndicesInPool.push(index);
103
+ }
104
+ }
105
+ }
106
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
107
+ finally {
108
+ try {
109
+ if (_g && !_g.done && (_c = _f.return)) _c.call(_f);
110
+ }
111
+ finally { if (e_3) throw e_3.error; }
112
+ }
113
+ try {
114
+ // First pass: process items that already have optimized keys
115
+ for (var validIndicesInPool_1 = tslib_1.__values(validIndicesInPool), validIndicesInPool_1_1 = validIndicesInPool_1.next(); !validIndicesInPool_1_1.done; validIndicesInPool_1_1 = validIndicesInPool_1.next()) {
116
+ var index = validIndicesInPool_1_1.value;
117
+ if (this.hasOptimizedKey(getStableId(index))) {
118
+ this.syncItem(index, getItemType(index), getStableId(index));
119
+ }
120
+ }
121
+ }
122
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
123
+ finally {
124
+ try {
125
+ if (validIndicesInPool_1_1 && !validIndicesInPool_1_1.done && (_d = validIndicesInPool_1.return)) _d.call(validIndicesInPool_1);
126
+ }
127
+ finally { if (e_4) throw e_4.error; }
128
+ }
129
+ try {
130
+ for (var validIndicesInPool_2 = tslib_1.__values(validIndicesInPool), validIndicesInPool_2_1 = validIndicesInPool_2.next(); !validIndicesInPool_2_1.done; validIndicesInPool_2_1 = validIndicesInPool_2.next()) {
131
+ var index = validIndicesInPool_2_1.value;
132
+ if (!this.hasOptimizedKey(getStableId(index))) {
133
+ this.syncItem(index, getItemType(index), getStableId(index));
134
+ }
135
+ }
136
+ }
137
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
138
+ finally {
139
+ try {
140
+ if (validIndicesInPool_2_1 && !validIndicesInPool_2_1.done && (_e = validIndicesInPool_2.return)) _e.call(validIndicesInPool_2);
141
+ }
142
+ finally { if (e_5) throw e_5.error; }
143
+ }
144
+ // Clean up stale items and manage the recycle pool size
145
+ this.cleanup(getStableId, getItemType, engagedIndices, dataLength);
146
+ };
147
+ /**
148
+ * Checks if a stable ID already has an assigned key
149
+ */
150
+ RenderStackManager.prototype.hasOptimizedKey = function (stableId) {
151
+ return this.stableIdMap.has(stableId);
152
+ };
153
+ /**
154
+ * Cleans up stale keys and manages the recycle pool size.
155
+ * This ensures we don't maintain references to items that are no longer in the dataset,
156
+ * and limits the number of recycled items to avoid excessive memory usage.
157
+ */
158
+ RenderStackManager.prototype.cleanup = function (getStableId, getItemType, engagedIndices, dataLength) {
159
+ var e_6, _a, e_7, _b;
160
+ var itemsToDelete = new Array();
161
+ try {
162
+ // Remove items that are no longer in the dataset
163
+ for (var _c = tslib_1.__values(this.keyMap.entries()), _d = _c.next(); !_d.done; _d = _c.next()) {
164
+ var _e = tslib_1.__read(_d.value, 2), key = _e[0], keyInfo = _e[1];
165
+ var index = keyInfo.index, itemType = keyInfo.itemType, stableId = keyInfo.stableId;
166
+ var indexOutOfBounds = index >= dataLength;
167
+ var hasStableIdChanged = !indexOutOfBounds && getStableId(index) !== stableId;
168
+ if (indexOutOfBounds || hasStableIdChanged) {
169
+ var nextIndex = this.unProcessedIndices.values().next().value;
170
+ var shouldDeleteKey = true;
171
+ if (nextIndex !== undefined) {
172
+ var nextItemType = getItemType(nextIndex);
173
+ var nextStableId = getStableId(nextIndex);
174
+ if (itemType === nextItemType) {
175
+ this.syncItem(nextIndex, nextItemType, nextStableId);
176
+ shouldDeleteKey = false;
177
+ }
178
+ }
179
+ if (shouldDeleteKey) {
180
+ this.deleteKeyFromRecyclePool(itemType, key);
181
+ this.stableIdMap.delete(stableId);
182
+ itemsToDelete.push(key);
183
+ }
184
+ }
185
+ }
186
+ }
187
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
188
+ finally {
189
+ try {
190
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
191
+ }
192
+ finally { if (e_6) throw e_6.error; }
193
+ }
194
+ try {
195
+ for (var itemsToDelete_1 = tslib_1.__values(itemsToDelete), itemsToDelete_1_1 = itemsToDelete_1.next(); !itemsToDelete_1_1.done; itemsToDelete_1_1 = itemsToDelete_1.next()) {
196
+ var key = itemsToDelete_1_1.value;
197
+ this.keyMap.delete(key);
198
+ }
199
+ }
200
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
201
+ finally {
202
+ try {
203
+ if (itemsToDelete_1_1 && !itemsToDelete_1_1.done && (_b = itemsToDelete_1.return)) _b.call(itemsToDelete_1);
204
+ }
205
+ finally { if (e_7) throw e_7.error; }
206
+ }
207
+ // Limit the size of the recycle pool
208
+ var itemsRenderedForRecycling = this.keyMap.size - engagedIndices.length;
209
+ if (itemsRenderedForRecycling > this.maxItemsInRecyclePool) {
210
+ var deleteCount = itemsRenderedForRecycling - this.maxItemsInRecyclePool;
211
+ var deleted = 0;
212
+ // Use a for loop so we can break early once we've deleted enough items
213
+ var entries = Array.from(this.keyMap.entries()).reverse();
214
+ for (var i = 0; i < entries.length && deleted < deleteCount; i++) {
215
+ var _f = tslib_1.__read(entries[i], 2), key = _f[0], keyInfo = _f[1];
216
+ var index = keyInfo.index, itemType = keyInfo.itemType, stableId = keyInfo.stableId;
217
+ if (!engagedIndices.includes(index)) {
218
+ this.deleteKeyFromRecyclePool(itemType, key);
219
+ this.stableIdMap.delete(stableId);
220
+ this.keyMap.delete(key);
221
+ deleted++;
222
+ }
223
+ }
224
+ }
225
+ };
226
+ /**
227
+ * Places a key back into its type-specific recycle pool for future reuse
228
+ */
229
+ RenderStackManager.prototype.recycleKey = function (key) {
230
+ if (this.disableRecycling) {
231
+ return;
232
+ }
233
+ var keyInfo = this.keyMap.get(key);
234
+ if (!keyInfo) {
235
+ return;
236
+ }
237
+ var itemType = keyInfo.itemType;
238
+ // Add key back to its type's pool
239
+ var pool = this.getRecyclePoolForType(itemType);
240
+ pool.add(key);
241
+ };
242
+ /**
243
+ * Returns the current render stack containing all active keys and their metadata
244
+ */
245
+ RenderStackManager.prototype.getRenderStack = function () {
246
+ return this.keyMap;
247
+ };
248
+ /**
249
+ * Syncs an individual item by assigning it an appropriate key.
250
+ * Will use an existing key if available, or generate a new one.
251
+ *
252
+ * @returns The key assigned to the item
253
+ */
254
+ RenderStackManager.prototype.syncItem = function (index, itemType, stableId) {
255
+ // Try to reuse an existing key, or get one from the recycle pool, or generate a new one
256
+ var newKey = this.stableIdMap.get(stableId) ||
257
+ this.getKeyFromRecyclePool(itemType) ||
258
+ this.generateKey();
259
+ this.unProcessedIndices.delete(index);
260
+ var keyInfo = this.keyMap.get(newKey);
261
+ if (keyInfo) {
262
+ // Update an existing key's metadata
263
+ this.deleteKeyFromRecyclePool(itemType, newKey);
264
+ this.deleteKeyFromRecyclePool(keyInfo.itemType, newKey);
265
+ this.stableIdMap.delete(keyInfo.stableId);
266
+ keyInfo.index = index;
267
+ keyInfo.itemType = itemType;
268
+ keyInfo.stableId = stableId;
269
+ }
270
+ else {
271
+ // Create a new entry in the key map
272
+ this.keyMap.set(newKey, {
273
+ itemType: itemType,
274
+ index: index,
275
+ stableId: stableId,
276
+ });
277
+ }
278
+ this.stableIdMap.set(stableId, newKey);
279
+ return newKey;
280
+ };
281
+ /**
282
+ * Clears all recycled keys from the pool, effectively resetting the recycling system.
283
+ * This operation does not affect currently active keys.
284
+ */
285
+ RenderStackManager.prototype.clearRecyclePool = function () {
286
+ var e_8, _a;
287
+ try {
288
+ // iterate over all pools and clear them
289
+ for (var _b = tslib_1.__values(this.recycleKeyPools.values()), _c = _b.next(); !_c.done; _c = _b.next()) {
290
+ var pool = _c.value;
291
+ pool.clear();
292
+ }
293
+ }
294
+ catch (e_8_1) { e_8 = { error: e_8_1 }; }
295
+ finally {
296
+ try {
297
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
298
+ }
299
+ finally { if (e_8) throw e_8.error; }
300
+ }
301
+ };
302
+ /**
303
+ * Generates a unique sequential key using an internal counter.
304
+ * @returns A unique key as a string
305
+ */
306
+ RenderStackManager.prototype.generateKey = function () {
307
+ return (this.keyCounter++).toString();
308
+ };
309
+ /**
310
+ * Removes a specific key from its type's recycle pool
311
+ */
312
+ RenderStackManager.prototype.deleteKeyFromRecyclePool = function (itemType, key) {
313
+ var _a;
314
+ (_a = this.recycleKeyPools.get(itemType)) === null || _a === void 0 ? void 0 : _a.delete(key);
315
+ };
316
+ /**
317
+ * Gets or creates a recycle pool for a specific item type
318
+ */
319
+ RenderStackManager.prototype.getRecyclePoolForType = function (itemType) {
320
+ var pool = this.recycleKeyPools.get(itemType);
321
+ if (!pool) {
322
+ pool = new Set();
323
+ this.recycleKeyPools.set(itemType, pool);
324
+ }
325
+ return pool;
326
+ };
327
+ /**
328
+ * Retrieves and removes a key from the type's recycle pool
329
+ * @returns A recycled key or undefined if none available
330
+ */
331
+ RenderStackManager.prototype.getKeyFromRecyclePool = function (itemType) {
332
+ var pool = this.getRecyclePoolForType(itemType);
333
+ if (pool.size > 0) {
334
+ var key = pool.values().next().value;
335
+ pool.delete(key);
336
+ return key;
337
+ }
338
+ return undefined;
339
+ };
340
+ return RenderStackManager;
341
+ }());
342
+ exports.RenderStackManager = RenderStackManager;
343
+ //# 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;AA8ED;;;GAGG;AACH,eAAO,MAAM,UAAU,0FAmBtB,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
- //console.log("ViewHolder re-render", index);
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,11 +50,10 @@ 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
- //TODO: Fix this type issue
54
+ // TODO: Fix this type issue
53
55
  var CompatContainer = (CellRendererComponent !== null && CellRendererComponent !== void 0 ? CellRendererComponent : CompatView_1.CompatView);
54
- return (react_1.default.createElement(CompatContainer, { ref: viewRef, onLayout: onLayout, style: style },
56
+ return (react_1.default.createElement(CompatContainer, { ref: viewRef, onLayout: onLayout, style: style, index: index },
55
57
  children,
56
58
  separator));
57
59
  };
@@ -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":";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,IAAI,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,CAC5D,8BAAC,sBAAsB,IAAC,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,GAAI,CAC1E,CAAC,CAAC,CAAC,IAAI,CAAC;IACX,CAAC,EAAE,CAAC,sBAAsB,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;IAEjD,8CAA8C;IAE9C,IAAM,QAAQ,GAAG,IAAA,eAAO,EAAC;;QACvB,OAAO,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,EAAE,IAAI,MAAA,EAAE,KAAK,OAAA,EAAE,SAAS,WAAA,EAAE,MAAM,QAAA,EAAE,CAAC,mCAAI,IAAI,CAAC;QAChE,6BAA6B;QAC7B,oEAAoE;QACpE,uDAAuD;IACzD,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAE1C,IAAM,KAAK,GAAG;QACZ,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;QAC5C,QAAQ,EAAE,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;QAC7D,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QACtD,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACzD,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,MAAM,CAAC,CAAC;QACd,GAAG,EAAE,MAAM,CAAC,CAAC;KACL,CAAC;IAEX,4BAA4B;IAC5B,IAAM,eAAe,GAAG,CAAC,qBAAqB,aAArB,qBAAqB,cAArB,qBAAqB,GAC5C,uBAAU,CAAmB,CAAC;IAEhC,OAAO,CACL,8BAAC,eAAe,IACd,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK;QAEX,QAAQ;QACR,SAAS,CACM,CACnB,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACU,QAAA,UAAU,GAAG,eAAK,CAAC,IAAI,CAClC,kBAAkB,EAClB,UAAC,SAAS,EAAE,SAAS;IACnB,sCAAsC;IACtC,OAAO,CACL,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK;QACnC,eAAe,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC;QACnD,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS;QAC3C,SAAS,CAAC,aAAa,KAAK,SAAS,CAAC,aAAa;QACnD,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS;QAC3C,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;QACrC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI;QACjC,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU;QAC7C,SAAS,CAAC,qBAAqB,KAAK,SAAS,CAAC,qBAAqB;QACnE,SAAS,CAAC,sBAAsB,KAAK,SAAS,CAAC,sBAAsB;QACrE,SAAS,CAAC,YAAY,KAAK,SAAS,CAAC,YAAY;QACjD,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU,CAC9C,CAAC;AACJ,CAAC,CACF,CAAC;AAEF;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,UAAoB,EAAE,UAAoB;IACjE,OAAO,CACL,UAAU,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC;QAC7B,UAAU,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC;QAC7B,UAAU,CAAC,KAAK,KAAK,UAAU,CAAC,KAAK;QACrC,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM;QACvC,UAAU,CAAC,aAAa,KAAK,UAAU,CAAC,aAAa;QACrD,UAAU,CAAC,cAAc,KAAK,UAAU,CAAC,cAAc;QACvD,UAAU,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ;QAC3C,UAAU,CAAC,SAAS,KAAK,UAAU,CAAC,SAAS;QAC7C,UAAU,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ;QAC3C,UAAU,CAAC,SAAS,KAAK,UAAU,CAAC,SAAS,CAC9C,CAAC;AACJ,CAAC"}
@@ -4,9 +4,9 @@
4
4
  * and coordinates with the RecyclerView context for layout changes.
5
5
  */
6
6
  import React from "react";
7
+ import { FlashListProps } from "../FlashListProps";
7
8
  import { ViewHolderProps } from "./ViewHolder";
8
9
  import { RVDimension, RVLayout } from "./layout-managers/LayoutManager";
9
- import { FlashListProps } from "../FlashListProps";
10
10
  /**
11
11
  * Props interface for the ViewHolderCollection component
12
12
  * @template TItem - The type of items in the data array
@@ -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 */
@@ -31,15 +33,19 @@ export interface ViewHolderCollectionProps<TItem> {
31
33
  /** Function to get the container's layout dimensions */
32
34
  getChildContainerLayout: () => RVDimension | undefined;
33
35
  /** Callback after layout effects are committed */
34
- onCommitLayoutEffect?: () => void;
36
+ onCommitLayoutEffect: () => void;
35
37
  /** Callback after effects are committed */
36
- onCommitEffect?: () => void;
38
+ onCommitEffect: () => void;
37
39
  /** Optional custom component to wrap each item */
38
40
  CellRendererComponent?: FlashListProps<TItem>["CellRendererComponent"];
39
41
  /** Optional component to render between items */
40
42
  ItemSeparatorComponent?: FlashListProps<TItem>["ItemSeparatorComponent"];
41
43
  /** Whether the list is horizontal or vertical */
42
44
  horizontal: FlashListProps<TItem>["horizontal"];
45
+ /** Function to get the adjustment margin for the container.
46
+ * For startRenderingFromBottom, we need to adjust the height of the container
47
+ */
48
+ getAdjustmentMargin: () => number;
43
49
  }
44
50
  /**
45
51
  * Ref interface for ViewHolderCollection that exposes methods to control layout updates
@@ -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;AAC/E,OAAO,EAAc,eAAe,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAInD;;;GAGG;AACH,MAAM,WAAW,yBAAyB,CAAC,KAAK;IAC9C,oCAAoC;IACpC,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;IACpC,0DAA0D;IAC1D,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,8DAA8D;IAC9D,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,QAAQ,CAAC;IACvC,2DAA2D;IAC3D,uBAAuB,EAAE,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAC5D,qDAAqD;IACrD,SAAS,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC;IAC/C,4CAA4C;IAC5C,aAAa,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC;IACvD,mCAAmC;IACnC,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;IAChD,uEAAuE;IACvE,SAAS,EAAE,GAAG,CAAC;IACf,wDAAwD;IACxD,uBAAuB,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IACvD,kDAAkD;IAClD,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,2CAA2C;IAC3C,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,kDAAkD;IAClD,qBAAqB,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,uBAAuB,CAAC,CAAC;IACvE,iDAAiD;IACjD,sBAAsB,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,wBAAwB,CAAC,CAAC;IACzE,iDAAiD;IACjD,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,uDAAuD;IACvD,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,uEAsGhC,CAAC"}
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,EAAE,MAAM,IAAI,CAAC;IACjC,2CAA2C;IAC3C,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,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;IAChD;;OAEG;IACH,mBAAmB,EAAE,MAAM,MAAM,CAAC;CACnC;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,sBA4HxC,CAAC"}
@@ -17,10 +17,9 @@ var RecyclerViewContextProvider_1 = require("./RecyclerViewContextProvider");
17
17
  * @template TItem - The type of items in the data array
18
18
  */
19
19
  var ViewHolderCollection = function (props) {
20
- var data = props.data, renderStack = props.renderStack, getLayout = props.getLayout, refHolder = props.refHolder, onSizeChanged = props.onSizeChanged, renderItem = props.renderItem, extraData = props.extraData, viewHolderCollectionRef = props.viewHolderCollectionRef, getChildContainerLayout = props.getChildContainerLayout, onCommitLayoutEffect = props.onCommitLayoutEffect, CellRendererComponent = props.CellRendererComponent, ItemSeparatorComponent = props.ItemSeparatorComponent, onCommitEffect = props.onCommitEffect, horizontal = props.horizontal;
20
+ var data = props.data, renderStack = props.renderStack, getLayout = props.getLayout, refHolder = props.refHolder, onSizeChanged = props.onSizeChanged, renderItem = props.renderItem, extraData = props.extraData, viewHolderCollectionRef = props.viewHolderCollectionRef, getChildContainerLayout = props.getChildContainerLayout, onCommitLayoutEffect = props.onCommitLayoutEffect, CellRendererComponent = props.CellRendererComponent, ItemSeparatorComponent = props.ItemSeparatorComponent, onCommitEffect = props.onCommitEffect, horizontal = props.horizontal, getAdjustmentMargin = props.getAdjustmentMargin;
21
21
  var _a = tslib_1.__read(react_1.default.useState(0), 2), renderId = _a[0], setRenderId = _a[1];
22
22
  var containerLayout = getChildContainerLayout();
23
- // TODO: guard againt precision issues
24
23
  var fixedContainerSize = horizontal
25
24
  ? containerLayout === null || containerLayout === void 0 ? void 0 : containerLayout.height
26
25
  : containerLayout === null || containerLayout === void 0 ? void 0 : containerLayout.width;
@@ -33,16 +32,22 @@ var ViewHolderCollection = function (props) {
33
32
  // );
34
33
  recyclerViewContext === null || recyclerViewContext === void 0 ? void 0 : recyclerViewContext.layout();
35
34
  }
35
+ // we need to run this callback on when fixedContainerSize changes
36
+ // eslint-disable-next-line react-hooks/exhaustive-deps
36
37
  }, [fixedContainerSize]);
37
38
  (0, react_1.useLayoutEffect)(function () {
38
39
  if (renderId > 0) {
39
40
  onCommitLayoutEffect === null || onCommitLayoutEffect === void 0 ? void 0 : onCommitLayoutEffect();
40
41
  }
42
+ // we need to run this callback on when renderId changes
43
+ // eslint-disable-next-line react-hooks/exhaustive-deps
41
44
  }, [renderId]);
42
45
  (0, react_1.useEffect)(function () {
43
46
  if (renderId > 0) {
44
47
  onCommitEffect === null || onCommitEffect === void 0 ? void 0 : onCommitEffect();
45
48
  }
49
+ // we need to run this callback on when renderId changes
50
+ // eslint-disable-next-line react-hooks/exhaustive-deps
46
51
  }, [renderId]);
47
52
  // Expose forceUpdate through ref
48
53
  (0, react_1.useImperativeHandle)(viewHolderCollectionRef, function () { return ({
@@ -50,20 +55,31 @@ var ViewHolderCollection = function (props) {
50
55
  // This will trigger a re-render of the component
51
56
  setRenderId(function (prev) { return prev + 1; });
52
57
  },
53
- }); });
58
+ }); }, [setRenderId]);
54
59
  var hasData = data && data.length > 0;
55
60
  var containerStyle = {
56
61
  width: horizontal ? containerLayout === null || containerLayout === void 0 ? void 0 : containerLayout.width : undefined,
57
62
  height: containerLayout === null || containerLayout === void 0 ? void 0 : containerLayout.height,
63
+ marginTop: horizontal ? undefined : getAdjustmentMargin(),
64
+ marginLeft: horizontal ? getAdjustmentMargin() : undefined,
65
+ // TODO: Temp workaround, useLayoutEffect doesn't block paint in some cases
66
+ // We need to investigate why this is happening
67
+ opacity: renderId > 0 ? 1 : 0,
58
68
  };
59
- return (react_1.default.createElement(CompatView_1.CompatView
60
- // TODO: Take care of web scroll bar here
61
- , {
62
- // TODO: Take care of web scroll bar here
63
- style: hasData && containerStyle }, containerLayout &&
69
+ // sort by index and log
70
+ // const sortedRenderStack = Array.from(renderStack.entries()).sort(
71
+ // ([, a], [, b]) => a.index - b.index
72
+ // );
73
+ // console.log(
74
+ // "sortedRenderStack",
75
+ // sortedRenderStack.map(([reactKey, { index }]) => {
76
+ // return `${index} => ${reactKey}`;
77
+ // })
78
+ // );
79
+ return (react_1.default.createElement(CompatView_1.CompatView, { style: hasData && containerStyle }, containerLayout &&
64
80
  hasData &&
65
- Array.from(renderStack, function (_a) {
66
- var _b = tslib_1.__read(_a, 2), index = _b[0], reactKey = _b[1];
81
+ Array.from(renderStack.entries(), function (_a) {
82
+ var _b = tslib_1.__read(_a, 2), reactKey = _b[0], index = _b[1].index;
67
83
  var item = data[index];
68
84
  var trailingItem = ItemSeparatorComponent
69
85
  ? data[index + 1]