@react-native-ohos/flash-list 1.8.3-rc.5 → 2.1.1-rc.1

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 (495) hide show
  1. package/LICENSE +1 -1
  2. package/README.OpenSource +1 -1
  3. package/dist/AnimatedFlashList.d.ts +4 -28
  4. package/dist/AnimatedFlashList.d.ts.map +1 -1
  5. package/dist/AnimatedFlashList.js +5 -30
  6. package/dist/AnimatedFlashList.js.map +1 -1
  7. package/dist/FlashList.d.ts +1 -179
  8. package/dist/FlashList.d.ts.map +1 -1
  9. package/dist/FlashList.js +1 -599
  10. package/dist/FlashList.js.map +1 -1
  11. package/dist/FlashListProps.d.ts +285 -278
  12. package/dist/FlashListProps.d.ts.map +1 -1
  13. package/dist/FlashListProps.js +5 -31
  14. package/dist/FlashListProps.js.map +1 -1
  15. package/dist/FlashListRef.d.ts +305 -0
  16. package/dist/FlashListRef.d.ts.map +1 -0
  17. package/dist/FlashListRef.js +2 -0
  18. package/dist/FlashListRef.js.map +1 -0
  19. package/dist/benchmark/AutoScrollHelper.d.ts +17 -40
  20. package/dist/benchmark/AutoScrollHelper.d.ts.map +1 -1
  21. package/dist/benchmark/AutoScrollHelper.js +59 -90
  22. package/dist/benchmark/AutoScrollHelper.js.map +1 -1
  23. package/dist/benchmark/JSFPSMonitor.d.ts +22 -45
  24. package/dist/benchmark/JSFPSMonitor.d.ts.map +1 -1
  25. package/dist/benchmark/JSFPSMonitor.js +59 -87
  26. package/dist/benchmark/JSFPSMonitor.js.map +1 -1
  27. package/dist/benchmark/roundToDecimalPlaces.d.ts +1 -24
  28. package/dist/benchmark/roundToDecimalPlaces.d.ts.map +1 -1
  29. package/dist/benchmark/roundToDecimalPlaces.js +4 -31
  30. package/dist/benchmark/roundToDecimalPlaces.js.map +1 -1
  31. package/dist/benchmark/useBenchmark.d.ts +40 -57
  32. package/dist/benchmark/useBenchmark.d.ts.map +1 -1
  33. package/dist/benchmark/useBenchmark.js +119 -189
  34. package/dist/benchmark/useBenchmark.js.map +1 -1
  35. package/dist/benchmark/useDataMultiplier.d.ts +8 -31
  36. package/dist/benchmark/useDataMultiplier.d.ts.map +1 -1
  37. package/dist/benchmark/useDataMultiplier.js +19 -47
  38. package/dist/benchmark/useDataMultiplier.js.map +1 -1
  39. package/dist/benchmark/useFlatListBenchmark.d.ts +14 -35
  40. package/dist/benchmark/useFlatListBenchmark.d.ts.map +1 -1
  41. package/dist/benchmark/useFlatListBenchmark.js +92 -122
  42. package/dist/benchmark/useFlatListBenchmark.js.map +1 -1
  43. package/dist/errors/ErrorMessages.d.ts +16 -0
  44. package/dist/errors/ErrorMessages.d.ts.map +1 -0
  45. package/dist/errors/ErrorMessages.js +16 -0
  46. package/dist/errors/ErrorMessages.js.map +1 -0
  47. package/dist/errors/WarningMessages.d.ts +6 -0
  48. package/dist/errors/WarningMessages.d.ts.map +1 -0
  49. package/dist/errors/WarningMessages.js +7 -0
  50. package/dist/errors/WarningMessages.js.map +1 -0
  51. package/dist/index.d.ts +15 -36
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +19 -54
  54. package/dist/index.js.map +1 -1
  55. package/dist/isNewArch.d.ts +2 -0
  56. package/dist/isNewArch.d.ts.map +1 -0
  57. package/dist/isNewArch.js +22 -0
  58. package/dist/isNewArch.js.map +1 -0
  59. package/dist/native/config/PlatformHelper.android.d.ts +6 -48
  60. package/dist/native/config/PlatformHelper.android.d.ts.map +1 -1
  61. package/dist/native/config/PlatformHelper.android.js +6 -45
  62. package/dist/native/config/PlatformHelper.android.js.map +1 -1
  63. package/dist/native/config/PlatformHelper.d.ts +6 -48
  64. package/dist/native/config/PlatformHelper.d.ts.map +1 -1
  65. package/dist/native/config/PlatformHelper.harmony.d.ts +29 -48
  66. package/dist/native/config/PlatformHelper.harmony.d.ts.map +1 -1
  67. package/dist/native/config/PlatformHelper.harmony.js +29 -44
  68. package/dist/native/config/PlatformHelper.harmony.js.map +1 -1
  69. package/dist/native/config/PlatformHelper.ios.d.ts +6 -48
  70. package/dist/native/config/PlatformHelper.ios.d.ts.map +1 -1
  71. package/dist/native/config/PlatformHelper.ios.js +6 -44
  72. package/dist/native/config/PlatformHelper.ios.js.map +1 -1
  73. package/dist/native/config/PlatformHelper.js +6 -45
  74. package/dist/native/config/PlatformHelper.js.map +1 -1
  75. package/dist/native/config/PlatformHelper.web.d.ts +6 -49
  76. package/dist/native/config/PlatformHelper.web.d.ts.map +1 -1
  77. package/dist/native/config/PlatformHelper.web.js +6 -47
  78. package/dist/native/config/PlatformHelper.web.js.map +1 -1
  79. package/dist/recyclerview/LayoutCommitObserver.d.ts +12 -0
  80. package/dist/recyclerview/LayoutCommitObserver.d.ts.map +1 -0
  81. package/dist/recyclerview/LayoutCommitObserver.js +58 -0
  82. package/dist/recyclerview/LayoutCommitObserver.js.map +1 -0
  83. package/dist/recyclerview/RecyclerView.d.ts +13 -0
  84. package/dist/recyclerview/RecyclerView.d.ts.map +1 -0
  85. package/dist/recyclerview/RecyclerView.js +368 -0
  86. package/dist/recyclerview/RecyclerView.js.map +1 -0
  87. package/dist/recyclerview/RecyclerViewContextProvider.d.ts +46 -0
  88. package/dist/recyclerview/RecyclerViewContextProvider.d.ts.map +1 -0
  89. package/dist/recyclerview/RecyclerViewContextProvider.js +10 -0
  90. package/dist/recyclerview/RecyclerViewContextProvider.js.map +1 -0
  91. package/dist/recyclerview/RecyclerViewManager.d.ts +78 -0
  92. package/dist/recyclerview/RecyclerViewManager.d.ts.map +1 -0
  93. package/dist/recyclerview/RecyclerViewManager.js +343 -0
  94. package/dist/recyclerview/RecyclerViewManager.js.map +1 -0
  95. package/dist/recyclerview/RecyclerViewProps.d.ts +2 -0
  96. package/dist/recyclerview/RecyclerViewProps.d.ts.map +1 -0
  97. package/dist/recyclerview/RecyclerViewProps.js +2 -0
  98. package/dist/recyclerview/RecyclerViewProps.js.map +1 -0
  99. package/dist/recyclerview/RenderStackManager.d.ts +86 -0
  100. package/dist/recyclerview/RenderStackManager.d.ts.map +1 -0
  101. package/dist/recyclerview/RenderStackManager.js +252 -0
  102. package/dist/recyclerview/RenderStackManager.js.map +1 -0
  103. package/dist/recyclerview/ViewHolder.d.ts +45 -0
  104. package/dist/recyclerview/ViewHolder.d.ts.map +1 -0
  105. package/dist/recyclerview/ViewHolder.js +94 -0
  106. package/dist/recyclerview/ViewHolder.js.map +1 -0
  107. package/dist/recyclerview/ViewHolderCollection.d.ts +63 -0
  108. package/dist/recyclerview/ViewHolderCollection.d.ts.map +1 -0
  109. package/dist/recyclerview/ViewHolderCollection.js +87 -0
  110. package/dist/recyclerview/ViewHolderCollection.js.map +1 -0
  111. package/dist/recyclerview/components/CompatScroller.d.ts +7 -0
  112. package/dist/recyclerview/components/CompatScroller.d.ts.map +1 -0
  113. package/dist/recyclerview/components/CompatScroller.js +7 -0
  114. package/dist/recyclerview/components/CompatScroller.js.map +1 -0
  115. package/dist/recyclerview/components/CompatView.d.ts +7 -0
  116. package/dist/recyclerview/components/CompatView.d.ts.map +1 -0
  117. package/dist/recyclerview/components/CompatView.js +7 -0
  118. package/dist/recyclerview/components/CompatView.js.map +1 -0
  119. package/dist/recyclerview/components/ScrollAnchor.d.ts +29 -0
  120. package/dist/recyclerview/components/ScrollAnchor.d.ts.map +1 -0
  121. package/dist/recyclerview/components/ScrollAnchor.js +33 -0
  122. package/dist/recyclerview/components/ScrollAnchor.js.map +1 -0
  123. package/dist/recyclerview/components/StickyHeaders.d.ts +38 -0
  124. package/dist/recyclerview/components/StickyHeaders.d.ts.map +1 -0
  125. package/dist/recyclerview/components/StickyHeaders.js +112 -0
  126. package/dist/recyclerview/components/StickyHeaders.js.map +1 -0
  127. package/dist/recyclerview/helpers/ConsecutiveNumbers.d.ts +51 -0
  128. package/dist/recyclerview/helpers/ConsecutiveNumbers.d.ts.map +1 -0
  129. package/dist/recyclerview/helpers/ConsecutiveNumbers.js +95 -0
  130. package/dist/recyclerview/helpers/ConsecutiveNumbers.js.map +1 -0
  131. package/dist/recyclerview/helpers/EngagedIndicesTracker.d.ts +105 -0
  132. package/dist/recyclerview/helpers/EngagedIndicesTracker.d.ts.map +1 -0
  133. package/dist/recyclerview/helpers/EngagedIndicesTracker.js +202 -0
  134. package/dist/recyclerview/helpers/EngagedIndicesTracker.js.map +1 -0
  135. package/dist/recyclerview/helpers/RenderTimeTracker.d.ts +14 -0
  136. package/dist/recyclerview/helpers/RenderTimeTracker.d.ts.map +1 -0
  137. package/dist/recyclerview/helpers/RenderTimeTracker.js +44 -0
  138. package/dist/recyclerview/helpers/RenderTimeTracker.js.map +1 -0
  139. package/dist/recyclerview/helpers/VelocityTracker.d.ts +29 -0
  140. package/dist/recyclerview/helpers/VelocityTracker.d.ts.map +1 -0
  141. package/dist/recyclerview/helpers/VelocityTracker.js +64 -0
  142. package/dist/recyclerview/helpers/VelocityTracker.js.map +1 -0
  143. package/dist/recyclerview/hooks/useBoundDetection.d.ts +17 -0
  144. package/dist/recyclerview/hooks/useBoundDetection.d.ts.map +1 -0
  145. package/dist/recyclerview/hooks/useBoundDetection.js +132 -0
  146. package/dist/recyclerview/hooks/useBoundDetection.js.map +1 -0
  147. package/dist/recyclerview/hooks/useLayoutState.d.ts +14 -0
  148. package/dist/recyclerview/hooks/useLayoutState.d.ts.map +1 -0
  149. package/dist/recyclerview/hooks/useLayoutState.js +38 -0
  150. package/dist/recyclerview/hooks/useLayoutState.js.map +1 -0
  151. package/dist/recyclerview/hooks/useMappingHelper.d.ts +9 -0
  152. package/dist/recyclerview/hooks/useMappingHelper.d.ts.map +1 -0
  153. package/dist/recyclerview/hooks/useMappingHelper.js +15 -0
  154. package/dist/recyclerview/hooks/useMappingHelper.js.map +1 -0
  155. package/dist/recyclerview/hooks/useOnLoad.d.ts +25 -0
  156. package/dist/recyclerview/hooks/useOnLoad.d.ts.map +1 -0
  157. package/dist/recyclerview/hooks/useOnLoad.js +67 -0
  158. package/dist/recyclerview/hooks/useOnLoad.js.map +1 -0
  159. package/dist/recyclerview/hooks/useRecyclerViewController.d.ts +28 -0
  160. package/dist/recyclerview/hooks/useRecyclerViewController.d.ts.map +1 -0
  161. package/dist/recyclerview/hooks/useRecyclerViewController.js +507 -0
  162. package/dist/recyclerview/hooks/useRecyclerViewController.js.map +1 -0
  163. package/dist/recyclerview/hooks/useRecyclerViewManager.d.ts +8 -0
  164. package/dist/recyclerview/hooks/useRecyclerViewManager.d.ts.map +1 -0
  165. package/dist/recyclerview/hooks/useRecyclerViewManager.js +32 -0
  166. package/dist/recyclerview/hooks/useRecyclerViewManager.js.map +1 -0
  167. package/dist/recyclerview/hooks/useRecyclingState.d.ts +18 -0
  168. package/dist/recyclerview/hooks/useRecyclingState.d.ts.map +1 -0
  169. package/dist/recyclerview/hooks/useRecyclingState.js +49 -0
  170. package/dist/recyclerview/hooks/useRecyclingState.js.map +1 -0
  171. package/dist/recyclerview/hooks/useSecondaryProps.d.ts +27 -0
  172. package/dist/recyclerview/hooks/useSecondaryProps.d.ts.map +1 -0
  173. package/dist/recyclerview/hooks/useSecondaryProps.js +90 -0
  174. package/dist/recyclerview/hooks/useSecondaryProps.js.map +1 -0
  175. package/dist/recyclerview/hooks/useUnmountAwareCallbacks.d.ts +15 -0
  176. package/dist/recyclerview/hooks/useUnmountAwareCallbacks.d.ts.map +1 -0
  177. package/dist/recyclerview/hooks/useUnmountAwareCallbacks.js +58 -0
  178. package/dist/recyclerview/hooks/useUnmountAwareCallbacks.js.map +1 -0
  179. package/dist/recyclerview/hooks/useUnmountFlag.d.ts +10 -0
  180. package/dist/recyclerview/hooks/useUnmountFlag.d.ts.map +1 -0
  181. package/dist/recyclerview/hooks/useUnmountFlag.js +25 -0
  182. package/dist/recyclerview/hooks/useUnmountFlag.js.map +1 -0
  183. package/dist/recyclerview/layout-managers/GridLayoutManager.d.ts +79 -0
  184. package/dist/recyclerview/layout-managers/GridLayoutManager.d.ts.map +1 -0
  185. package/dist/recyclerview/layout-managers/GridLayoutManager.js +221 -0
  186. package/dist/recyclerview/layout-managers/GridLayoutManager.js.map +1 -0
  187. package/dist/recyclerview/layout-managers/LayoutManager.d.ts +296 -0
  188. package/dist/recyclerview/layout-managers/LayoutManager.d.ts.map +1 -0
  189. package/dist/recyclerview/layout-managers/LayoutManager.js +279 -0
  190. package/dist/recyclerview/layout-managers/LayoutManager.js.map +1 -0
  191. package/dist/recyclerview/layout-managers/LinearLayoutManager.d.ts +51 -0
  192. package/dist/recyclerview/layout-managers/LinearLayoutManager.d.ts.map +1 -0
  193. package/dist/recyclerview/layout-managers/LinearLayoutManager.js +151 -0
  194. package/dist/recyclerview/layout-managers/LinearLayoutManager.js.map +1 -0
  195. package/dist/recyclerview/layout-managers/MasonryLayoutManager.d.ts +81 -0
  196. package/dist/recyclerview/layout-managers/MasonryLayoutManager.d.ts.map +1 -0
  197. package/dist/recyclerview/layout-managers/MasonryLayoutManager.js +269 -0
  198. package/dist/recyclerview/layout-managers/MasonryLayoutManager.js.map +1 -0
  199. package/dist/recyclerview/utils/adjustOffsetForRTL.d.ts +12 -0
  200. package/dist/recyclerview/utils/adjustOffsetForRTL.d.ts.map +1 -0
  201. package/dist/recyclerview/utils/adjustOffsetForRTL.js +14 -0
  202. package/dist/recyclerview/utils/adjustOffsetForRTL.js.map +1 -0
  203. package/dist/recyclerview/utils/componentUtils.d.ts +19 -0
  204. package/dist/recyclerview/utils/componentUtils.d.ts.map +1 -0
  205. package/dist/recyclerview/utils/componentUtils.js +27 -0
  206. package/dist/recyclerview/utils/componentUtils.js.map +1 -0
  207. package/dist/recyclerview/utils/findVisibleIndex.d.ts +24 -0
  208. package/dist/recyclerview/utils/findVisibleIndex.d.ts.map +1 -0
  209. package/dist/recyclerview/utils/findVisibleIndex.js +76 -0
  210. package/dist/recyclerview/utils/findVisibleIndex.js.map +1 -0
  211. package/dist/recyclerview/utils/measureLayout.d.ts +52 -0
  212. package/dist/recyclerview/utils/measureLayout.d.ts.map +1 -0
  213. package/dist/recyclerview/utils/measureLayout.js +99 -0
  214. package/dist/recyclerview/utils/measureLayout.js.map +1 -0
  215. package/dist/recyclerview/utils/measureLayout.web.d.ts +29 -0
  216. package/dist/recyclerview/utils/measureLayout.web.d.ts.map +1 -0
  217. package/dist/recyclerview/utils/measureLayout.web.js +79 -0
  218. package/dist/recyclerview/utils/measureLayout.web.js.map +1 -0
  219. package/dist/recyclerview/viewability/ViewToken.d.ts +8 -0
  220. package/dist/recyclerview/viewability/ViewToken.d.ts.map +1 -0
  221. package/dist/recyclerview/viewability/ViewToken.js +2 -0
  222. package/dist/recyclerview/viewability/ViewToken.js.map +1 -0
  223. package/dist/recyclerview/viewability/ViewabilityHelper.d.ts +26 -0
  224. package/dist/recyclerview/viewability/ViewabilityHelper.d.ts.map +1 -0
  225. package/dist/recyclerview/viewability/ViewabilityHelper.js +98 -0
  226. package/dist/recyclerview/viewability/ViewabilityHelper.js.map +1 -0
  227. package/dist/recyclerview/viewability/ViewabilityManager.d.ts +25 -0
  228. package/dist/recyclerview/viewability/ViewabilityManager.d.ts.map +1 -0
  229. package/dist/recyclerview/viewability/ViewabilityManager.js +94 -0
  230. package/dist/recyclerview/viewability/ViewabilityManager.js.map +1 -0
  231. package/dist/tsconfig.tsbuildinfo +1 -1
  232. package/dist/utils/AverageWindow.d.ts +33 -43
  233. package/dist/utils/AverageWindow.d.ts.map +1 -1
  234. package/dist/utils/AverageWindow.js +66 -71
  235. package/dist/utils/AverageWindow.js.map +1 -1
  236. package/jestSetup.js +23 -37
  237. package/package.json +15 -24
  238. package/src/AnimatedFlashList.ts +2 -25
  239. package/src/FlashList.ts +1 -0
  240. package/src/FlashListProps.ts +109 -100
  241. package/src/FlashListRef.ts +320 -0
  242. package/src/benchmark/AutoScrollHelper.ts +0 -24
  243. package/src/benchmark/JSFPSMonitor.ts +2 -26
  244. package/src/benchmark/roundToDecimalPlaces.ts +0 -24
  245. package/src/benchmark/useBenchmark.ts +59 -105
  246. package/src/benchmark/useDataMultiplier.ts +0 -24
  247. package/src/benchmark/useFlatListBenchmark.ts +43 -32
  248. package/src/errors/ErrorMessages.ts +26 -0
  249. package/src/errors/WarningMessages.ts +9 -0
  250. package/src/index.ts +18 -46
  251. package/src/isNewArch.ts +25 -0
  252. package/src/native/config/PlatformHelper.android.ts +3 -49
  253. package/src/native/config/PlatformHelper.harmony.ts +3 -24
  254. package/src/native/config/PlatformHelper.ios.ts +3 -48
  255. package/src/native/config/PlatformHelper.ts +3 -49
  256. package/src/native/config/PlatformHelper.web.ts +4 -55
  257. package/src/recyclerview/LayoutCommitObserver.tsx +74 -0
  258. package/src/recyclerview/RecyclerView.tsx +616 -0
  259. package/src/recyclerview/RecyclerViewContextProvider.ts +65 -0
  260. package/src/recyclerview/RecyclerViewManager.ts +461 -0
  261. package/src/recyclerview/RecyclerViewProps.ts +1 -0
  262. package/src/recyclerview/RenderStackManager.ts +317 -0
  263. package/src/recyclerview/ViewHolder.tsx +180 -0
  264. package/src/recyclerview/ViewHolderCollection.tsx +193 -0
  265. package/src/recyclerview/components/CompatScroller.ts +9 -0
  266. package/src/recyclerview/components/CompatView.ts +9 -0
  267. package/src/recyclerview/components/ScrollAnchor.tsx +66 -0
  268. package/src/recyclerview/components/StickyHeaders.tsx +222 -0
  269. package/src/recyclerview/helpers/ConsecutiveNumbers.ts +120 -0
  270. package/src/recyclerview/helpers/EngagedIndicesTracker.ts +301 -0
  271. package/src/recyclerview/helpers/RenderTimeTracker.ts +50 -0
  272. package/src/recyclerview/helpers/VelocityTracker.ts +77 -0
  273. package/src/recyclerview/hooks/useBoundDetection.ts +176 -0
  274. package/src/recyclerview/hooks/useLayoutState.ts +55 -0
  275. package/src/recyclerview/hooks/useMappingHelper.ts +20 -0
  276. package/src/recyclerview/hooks/useOnLoad.ts +80 -0
  277. package/src/recyclerview/hooks/useRecyclerViewController.tsx +633 -0
  278. package/src/recyclerview/hooks/useRecyclerViewManager.ts +42 -0
  279. package/src/recyclerview/hooks/useRecyclingState.ts +67 -0
  280. package/src/recyclerview/hooks/useSecondaryProps.tsx +124 -0
  281. package/src/recyclerview/hooks/useUnmountAwareCallbacks.ts +73 -0
  282. package/src/recyclerview/hooks/useUnmountFlag.ts +27 -0
  283. package/src/recyclerview/layout-managers/GridLayoutManager.ts +256 -0
  284. package/src/recyclerview/layout-managers/LayoutManager.ts +568 -0
  285. package/src/recyclerview/layout-managers/LinearLayoutManager.ts +171 -0
  286. package/src/recyclerview/layout-managers/MasonryLayoutManager.ts +323 -0
  287. package/src/recyclerview/utils/adjustOffsetForRTL.ts +17 -0
  288. package/src/recyclerview/utils/componentUtils.ts +28 -0
  289. package/src/recyclerview/utils/findVisibleIndex.ts +93 -0
  290. package/src/recyclerview/utils/measureLayout.ts +128 -0
  291. package/src/recyclerview/utils/measureLayout.web.ts +102 -0
  292. package/src/recyclerview/viewability/ViewToken.ts +7 -0
  293. package/src/{viewability → recyclerview/viewability}/ViewabilityHelper.ts +8 -33
  294. package/src/{viewability → recyclerview/viewability}/ViewabilityManager.ts +23 -46
  295. package/src/utils/AverageWindow.ts +33 -24
  296. package/dist/GridLayoutProviderWithProps.d.ts +0 -65
  297. package/dist/GridLayoutProviderWithProps.d.ts.map +0 -1
  298. package/dist/GridLayoutProviderWithProps.js +0 -138
  299. package/dist/GridLayoutProviderWithProps.js.map +0 -1
  300. package/dist/MasonryFlashList.d.ts +0 -74
  301. package/dist/MasonryFlashList.d.ts.map +0 -1
  302. package/dist/MasonryFlashList.js +0 -275
  303. package/dist/MasonryFlashList.js.map +0 -1
  304. package/dist/PureComponentWrapper.d.ts +0 -45
  305. package/dist/PureComponentWrapper.d.ts.map +0 -1
  306. package/dist/PureComponentWrapper.js +0 -60
  307. package/dist/PureComponentWrapper.js.map +0 -1
  308. package/dist/__tests__/AverageWindow.test.d.ts +0 -2
  309. package/dist/__tests__/AverageWindow.test.d.ts.map +0 -1
  310. package/dist/__tests__/AverageWindow.test.js +0 -69
  311. package/dist/__tests__/AverageWindow.test.js.map +0 -1
  312. package/dist/__tests__/ContentContainerUtils.test.d.ts +0 -2
  313. package/dist/__tests__/ContentContainerUtils.test.d.ts.map +0 -1
  314. package/dist/__tests__/ContentContainerUtils.test.js +0 -85
  315. package/dist/__tests__/ContentContainerUtils.test.js.map +0 -1
  316. package/dist/__tests__/FlashList.test.d.ts +0 -2
  317. package/dist/__tests__/FlashList.test.d.ts.map +0 -1
  318. package/dist/__tests__/FlashList.test.js +0 -792
  319. package/dist/__tests__/FlashList.test.js.map +0 -1
  320. package/dist/__tests__/GridLayoutProviderWithProps.test.d.ts +0 -2
  321. package/dist/__tests__/GridLayoutProviderWithProps.test.d.ts.map +0 -1
  322. package/dist/__tests__/GridLayoutProviderWithProps.test.js +0 -143
  323. package/dist/__tests__/GridLayoutProviderWithProps.test.js.map +0 -1
  324. package/dist/__tests__/MasonryFlashList.test.d.ts +0 -2
  325. package/dist/__tests__/MasonryFlashList.test.d.ts.map +0 -1
  326. package/dist/__tests__/MasonryFlashList.test.js +0 -254
  327. package/dist/__tests__/MasonryFlashList.test.js.map +0 -1
  328. package/dist/__tests__/PlatformHelper.web.test.d.ts +0 -2
  329. package/dist/__tests__/PlatformHelper.web.test.d.ts.map +0 -1
  330. package/dist/__tests__/PlatformHelper.web.test.js +0 -33
  331. package/dist/__tests__/PlatformHelper.web.test.js.map +0 -1
  332. package/dist/__tests__/ViewabilityHelper.test.d.ts +0 -2
  333. package/dist/__tests__/ViewabilityHelper.test.d.ts.map +0 -1
  334. package/dist/__tests__/ViewabilityHelper.test.js +0 -187
  335. package/dist/__tests__/ViewabilityHelper.test.js.map +0 -1
  336. package/dist/__tests__/helpers/mountFlashList.d.ts +0 -19
  337. package/dist/__tests__/helpers/mountFlashList.d.ts.map +0 -1
  338. package/dist/__tests__/helpers/mountFlashList.js +0 -44
  339. package/dist/__tests__/helpers/mountFlashList.js.map +0 -1
  340. package/dist/__tests__/helpers/mountMasonryFlashList.d.ts +0 -18
  341. package/dist/__tests__/helpers/mountMasonryFlashList.d.ts.map +0 -1
  342. package/dist/__tests__/helpers/mountMasonryFlashList.js +0 -49
  343. package/dist/__tests__/helpers/mountMasonryFlashList.js.map +0 -1
  344. package/dist/__tests__/useBlankAreaTracker.test.d.ts +0 -2
  345. package/dist/__tests__/useBlankAreaTracker.test.d.ts.map +0 -1
  346. package/dist/__tests__/useBlankAreaTracker.test.js +0 -177
  347. package/dist/__tests__/useBlankAreaTracker.test.js.map +0 -1
  348. package/dist/benchmark/useBlankAreaTracker.d.ts +0 -57
  349. package/dist/benchmark/useBlankAreaTracker.d.ts.map +0 -1
  350. package/dist/benchmark/useBlankAreaTracker.js +0 -90
  351. package/dist/benchmark/useBlankAreaTracker.js.map +0 -1
  352. package/dist/errors/CustomError.d.ts +0 -31
  353. package/dist/errors/CustomError.d.ts.map +0 -1
  354. package/dist/errors/CustomError.js +0 -37
  355. package/dist/errors/CustomError.js.map +0 -1
  356. package/dist/errors/ExceptionList.d.ts +0 -47
  357. package/dist/errors/ExceptionList.d.ts.map +0 -1
  358. package/dist/errors/ExceptionList.js +0 -49
  359. package/dist/errors/ExceptionList.js.map +0 -1
  360. package/dist/errors/Warnings.d.ts +0 -32
  361. package/dist/errors/Warnings.d.ts.map +0 -1
  362. package/dist/errors/Warnings.js +0 -36
  363. package/dist/errors/Warnings.js.map +0 -1
  364. package/dist/fabric/AutoLayoutNativeComponent.d.ts +0 -42
  365. package/dist/fabric/AutoLayoutNativeComponent.d.ts.map +0 -1
  366. package/dist/fabric/AutoLayoutNativeComponent.js +0 -29
  367. package/dist/fabric/AutoLayoutNativeComponent.js.map +0 -1
  368. package/dist/fabric/CellContainerNativeComponent.d.ts +0 -31
  369. package/dist/fabric/CellContainerNativeComponent.d.ts.map +0 -1
  370. package/dist/fabric/CellContainerNativeComponent.js +0 -29
  371. package/dist/fabric/CellContainerNativeComponent.js.map +0 -1
  372. package/dist/native/auto-layout/AutoLayoutView.d.ts +0 -45
  373. package/dist/native/auto-layout/AutoLayoutView.d.ts.map +0 -1
  374. package/dist/native/auto-layout/AutoLayoutView.js +0 -71
  375. package/dist/native/auto-layout/AutoLayoutView.js.map +0 -1
  376. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.android.d.ts +0 -27
  377. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.android.d.ts.map +0 -1
  378. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.android.js +0 -29
  379. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.android.js.map +0 -1
  380. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.d.ts +0 -28
  381. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.d.ts.map +0 -1
  382. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.harmony.d.ts +0 -27
  383. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.harmony.d.ts.map +0 -1
  384. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.harmony.js +0 -29
  385. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.harmony.js.map +0 -1
  386. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.ios.d.ts +0 -27
  387. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.ios.d.ts.map +0 -1
  388. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.ios.js +0 -29
  389. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.ios.js.map +0 -1
  390. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.js +0 -29
  391. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.js.map +0 -1
  392. package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.d.ts +0 -39
  393. package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.d.ts.map +0 -1
  394. package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.js +0 -26
  395. package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.js.map +0 -1
  396. package/dist/native/cell-container/CellContainer.android.d.ts +0 -29
  397. package/dist/native/cell-container/CellContainer.android.d.ts.map +0 -1
  398. package/dist/native/cell-container/CellContainer.android.js +0 -32
  399. package/dist/native/cell-container/CellContainer.android.js.map +0 -1
  400. package/dist/native/cell-container/CellContainer.d.ts +0 -31
  401. package/dist/native/cell-container/CellContainer.d.ts.map +0 -1
  402. package/dist/native/cell-container/CellContainer.harmony.d.ts +0 -29
  403. package/dist/native/cell-container/CellContainer.harmony.d.ts.map +0 -1
  404. package/dist/native/cell-container/CellContainer.harmony.js +0 -32
  405. package/dist/native/cell-container/CellContainer.harmony.js.map +0 -1
  406. package/dist/native/cell-container/CellContainer.ios.d.ts +0 -29
  407. package/dist/native/cell-container/CellContainer.ios.d.ts.map +0 -1
  408. package/dist/native/cell-container/CellContainer.ios.js +0 -32
  409. package/dist/native/cell-container/CellContainer.ios.js.map +0 -1
  410. package/dist/native/cell-container/CellContainer.js +0 -34
  411. package/dist/native/cell-container/CellContainer.js.map +0 -1
  412. package/dist/native/cell-container/CellContainer.web.d.ts +0 -30
  413. package/dist/native/cell-container/CellContainer.web.d.ts.map +0 -1
  414. package/dist/native/cell-container/CellContainer.web.js +0 -36
  415. package/dist/native/cell-container/CellContainer.web.js.map +0 -1
  416. package/dist/utils/ContentContainerUtils.d.ts +0 -50
  417. package/dist/utils/ContentContainerUtils.d.ts.map +0 -1
  418. package/dist/utils/ContentContainerUtils.js +0 -71
  419. package/dist/utils/ContentContainerUtils.js.map +0 -1
  420. package/dist/viewability/ViewToken.d.ts +0 -31
  421. package/dist/viewability/ViewToken.d.ts.map +0 -1
  422. package/dist/viewability/ViewToken.js +0 -26
  423. package/dist/viewability/ViewToken.js.map +0 -1
  424. package/dist/viewability/ViewabilityHelper.d.ts +0 -49
  425. package/dist/viewability/ViewabilityHelper.d.ts.map +0 -1
  426. package/dist/viewability/ViewabilityHelper.js +0 -130
  427. package/dist/viewability/ViewabilityHelper.js.map +0 -1
  428. package/dist/viewability/ViewabilityManager.d.ts +0 -48
  429. package/dist/viewability/ViewabilityManager.d.ts.map +0 -1
  430. package/dist/viewability/ViewabilityManager.js +0 -131
  431. package/dist/viewability/ViewabilityManager.js.map +0 -1
  432. package/harmony/flash_list/BuildProfile.ets +0 -17
  433. package/harmony/flash_list/LICENSE +0 -7
  434. package/harmony/flash_list/build-profile.json5 +0 -8
  435. package/harmony/flash_list/hvigorfile.ts +0 -1
  436. package/harmony/flash_list/index.ets +0 -27
  437. package/harmony/flash_list/obfuscation-rules.txt +0 -18
  438. package/harmony/flash_list/oh-package.json5 +0 -24
  439. package/harmony/flash_list/src/main/cpp/AutoLayoutNode.cpp +0 -63
  440. package/harmony/flash_list/src/main/cpp/AutoLayoutNode.h +0 -54
  441. package/harmony/flash_list/src/main/cpp/AutoLayoutShadow.cpp +0 -140
  442. package/harmony/flash_list/src/main/cpp/AutoLayoutShadow.h +0 -66
  443. package/harmony/flash_list/src/main/cpp/AutoLayoutViewComponentInstance.cpp +0 -208
  444. package/harmony/flash_list/src/main/cpp/AutoLayoutViewComponentInstance.h +0 -78
  445. package/harmony/flash_list/src/main/cpp/AutoLayoutViewEventEmitRequestHandler.h +0 -53
  446. package/harmony/flash_list/src/main/cpp/AutoLayoutViewJSIBinder.h +0 -50
  447. package/harmony/flash_list/src/main/cpp/CMakeLists.txt +0 -12
  448. package/harmony/flash_list/src/main/cpp/CellContainerComponentInstance.cpp +0 -80
  449. package/harmony/flash_list/src/main/cpp/CellContainerComponentInstance.h +0 -64
  450. package/harmony/flash_list/src/main/cpp/CellContainerJSIBinder.h +0 -39
  451. package/harmony/flash_list/src/main/cpp/ComponentDescriptors.h +0 -40
  452. package/harmony/flash_list/src/main/cpp/EventEmitters.cpp +0 -40
  453. package/harmony/flash_list/src/main/cpp/EventEmitters.h +0 -48
  454. package/harmony/flash_list/src/main/cpp/FlashListPackage.h +0 -85
  455. package/harmony/flash_list/src/main/cpp/FlashListStackNode.cpp +0 -87
  456. package/harmony/flash_list/src/main/cpp/FlashListStackNode.h +0 -57
  457. package/harmony/flash_list/src/main/cpp/Props.cpp +0 -52
  458. package/harmony/flash_list/src/main/cpp/Props.h +0 -64
  459. package/harmony/flash_list/src/main/cpp/ShadowNodes.cpp +0 -34
  460. package/harmony/flash_list/src/main/cpp/ShadowNodes.h +0 -48
  461. package/harmony/flash_list/src/main/ets/Logger.ets +0 -64
  462. package/harmony/flash_list/src/main/ets/RNAutoLayoutShadow.ets +0 -154
  463. package/harmony/flash_list/src/main/ets/RNAutoLayoutView.ets +0 -277
  464. package/harmony/flash_list/src/main/ets/RNCellContainer.ets +0 -113
  465. package/harmony/flash_list/src/main/module.json5 +0 -9
  466. package/harmony/flash_list/src/main/resources/base/element/color.json +0 -8
  467. package/harmony/flash_list/src/main/resources/base/element/string.json +0 -16
  468. package/harmony/flash_list/src/main/resources/base/media/icon.png +0 -0
  469. package/harmony/flash_list/src/main/resources/base/profile/main_pages.json +0 -5
  470. package/harmony/flash_list/src/main/resources/en_US/element/string.json +0 -16
  471. package/harmony/flash_list/src/main/resources/zh_CN/element/string.json +0 -16
  472. package/harmony/flash_list.har +0 -0
  473. package/src/FlashList.tsx +0 -949
  474. package/src/GridLayoutProviderWithProps.ts +0 -204
  475. package/src/MasonryFlashList.tsx +0 -499
  476. package/src/PureComponentWrapper.tsx +0 -65
  477. package/src/benchmark/useBlankAreaTracker.ts +0 -141
  478. package/src/errors/CustomError.ts +0 -34
  479. package/src/errors/ExceptionList.ts +0 -52
  480. package/src/errors/Warnings.ts +0 -39
  481. package/src/fabric/AutoLayoutNativeComponent.ts +0 -52
  482. package/src/fabric/CellContainerNativeComponent.ts +0 -35
  483. package/src/native/auto-layout/AutoLayoutView.tsx +0 -97
  484. package/src/native/auto-layout/AutoLayoutViewNativeComponent.android.ts +0 -31
  485. package/src/native/auto-layout/AutoLayoutViewNativeComponent.harmony.ts +0 -31
  486. package/src/native/auto-layout/AutoLayoutViewNativeComponent.ios.ts +0 -31
  487. package/src/native/auto-layout/AutoLayoutViewNativeComponent.ts +0 -31
  488. package/src/native/auto-layout/AutoLayoutViewNativeComponentProps.ts +0 -41
  489. package/src/native/cell-container/CellContainer.android.ts +0 -31
  490. package/src/native/cell-container/CellContainer.harmony.ts +0 -31
  491. package/src/native/cell-container/CellContainer.ios.ts +0 -31
  492. package/src/native/cell-container/CellContainer.tsx +0 -38
  493. package/src/native/cell-container/CellContainer.web.tsx +0 -33
  494. package/src/utils/ContentContainerUtils.ts +0 -116
  495. package/src/viewability/ViewToken.ts +0 -31
package/src/FlashList.tsx DELETED
@@ -1,949 +0,0 @@
1
- /**
2
- * MIT License
3
- *
4
- * Copyright (C) 2024 Huawei Device Co., Ltd.
5
- *
6
- * Permission is hereby granted, free of charge, to any person obtaining a copy
7
- * of this software and associated documentation files (the "Software"), to deal
8
- * in the Software without restriction, including without limitation the rights
9
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- * copies of the Software, and to permit persons to whom the Software is
11
- * furnished to do so, subject to the following conditions:
12
- *
13
- * The above copyright notice and this permission notice shall be included in all
14
- * copies or substantial portions of the Software.
15
- *
16
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
- * SOFTWARE.
23
- */
24
-
25
- import React, { JSX } from "react";
26
- import {
27
- View,
28
- RefreshControl,
29
- LayoutChangeEvent,
30
- NativeSyntheticEvent,
31
- StyleSheet,
32
- NativeScrollEvent,
33
- } from "react-native";
34
- import {
35
- BaseItemAnimator,
36
- DataProvider,
37
- Dimension,
38
- Layout,
39
- ProgressiveListView,
40
- RecyclerListView,
41
- RecyclerListViewProps,
42
- WindowCorrectionConfig,
43
- } from "recyclerlistview";
44
- import StickyContainer, { StickyContainerProps } from "recyclerlistview/sticky";
45
-
46
- import AutoLayoutView from "./native/auto-layout/AutoLayoutView";
47
- import CellContainer from "./native/cell-container/CellContainer";
48
- import { PureComponentWrapper } from "./PureComponentWrapper";
49
- import GridLayoutProviderWithProps from "./GridLayoutProviderWithProps";
50
- import CustomError from "./errors/CustomError";
51
- import ExceptionList from "./errors/ExceptionList";
52
- import WarningList from "./errors/Warnings";
53
- import ViewabilityManager from "./viewability/ViewabilityManager";
54
- import {
55
- FlashListProps,
56
- RenderTarget,
57
- RenderTargetOptions,
58
- } from "./FlashListProps";
59
- import {
60
- getCellContainerPlatformStyles,
61
- getFooterContainer,
62
- getItemAnimator,
63
- PlatformConfig,
64
- } from "./native/config/PlatformHelper";
65
- import {
66
- ContentStyleExplicit,
67
- getContentContainerPadding,
68
- hasUnsupportedKeysInContentContainerStyle,
69
- updateContentStyle,
70
- } from "./utils/ContentContainerUtils";
71
-
72
- interface StickyProps extends StickyContainerProps {
73
- children: any;
74
- }
75
- const StickyHeaderContainer =
76
- StickyContainer as React.ComponentClass<StickyProps>;
77
-
78
- export interface FlashListState<T> {
79
- dataProvider: DataProvider;
80
- numColumns: number;
81
- layoutProvider: GridLayoutProviderWithProps<T>;
82
- data?: ReadonlyArray<T> | null;
83
- extraData?: ExtraData<unknown>;
84
- renderItem?: FlashListProps<T>["renderItem"];
85
- lastInverted?: boolean;
86
- }
87
-
88
- interface ExtraData<T> {
89
- value?: T;
90
- }
91
-
92
- class FlashList<T> extends React.PureComponent<
93
- FlashListProps<T>,
94
- FlashListState<T>
95
- > {
96
- private rlvRef?: RecyclerListView<RecyclerListViewProps, any>;
97
- private stickyContentContainerRef?: PureComponentWrapper;
98
- private listFixedDimensionSize = 0;
99
- private distanceFromWindow = 0;
100
- private contentStyle: ContentStyleExplicit = {
101
- paddingBottom: 0,
102
- paddingTop: 0,
103
- paddingLeft: 0,
104
- paddingRight: 0,
105
- };
106
-
107
- private loadStartTime = 0;
108
- private isListLoaded = false;
109
- private windowCorrectionConfig: WindowCorrectionConfig = {
110
- value: {
111
- windowShift: 0,
112
- startCorrection: 0,
113
- endCorrection: 0,
114
- },
115
- applyToItemScroll: true,
116
- applyToInitialOffset: true,
117
- };
118
-
119
- private postLoadTimeoutId?: ReturnType<typeof setTimeout>;
120
- private itemSizeWarningTimeoutId?: ReturnType<typeof setTimeout>;
121
- private renderedSizeWarningTimeoutId?: ReturnType<typeof setTimeout>;
122
-
123
- private isEmptyList = false;
124
- private viewabilityManager: ViewabilityManager<T>;
125
-
126
- private itemAnimator?: BaseItemAnimator;
127
-
128
- static defaultProps = {
129
- data: [],
130
- numColumns: 1,
131
- };
132
-
133
- constructor(props: FlashListProps<T>) {
134
- super(props);
135
- this.loadStartTime = Date.now();
136
- this.validateProps();
137
- if (props.estimatedListSize) {
138
- if (props.horizontal) {
139
- this.listFixedDimensionSize = props.estimatedListSize.height;
140
- } else {
141
- this.listFixedDimensionSize = props.estimatedListSize.width;
142
- }
143
- }
144
- this.distanceFromWindow =
145
- props.estimatedFirstItemOffset ?? ((props.ListHeaderComponent && 1) || 0);
146
- // eslint-disable-next-line react/state-in-constructor
147
- this.state = FlashList.getInitialMutableState(this);
148
- this.viewabilityManager = new ViewabilityManager(this);
149
- this.itemAnimator = getItemAnimator();
150
- }
151
-
152
- private validateProps() {
153
- if (this.props.onRefresh && typeof this.props.refreshing !== "boolean") {
154
- throw new CustomError(ExceptionList.refreshBooleanMissing);
155
- }
156
- if (
157
- Number(this.props.stickyHeaderIndices?.length) > 0 &&
158
- this.props.horizontal
159
- ) {
160
- throw new CustomError(ExceptionList.stickyWhileHorizontalNotSupported);
161
- }
162
- if (Number(this.props.numColumns) > 1 && this.props.horizontal) {
163
- throw new CustomError(ExceptionList.columnsWhileHorizontalNotSupported);
164
- }
165
-
166
- // `createAnimatedComponent` always passes a blank style object. To avoid warning while using AnimatedFlashList we've modified the check
167
- // `style` prop can be an array. So we need to validate every object in array. Check: https://github.com/Shopify/flash-list/issues/651
168
- if (
169
- __DEV__ &&
170
- Object.keys(StyleSheet.flatten(this.props.style ?? {})).length > 0
171
- ) {
172
- console.warn(WarningList.styleUnsupported);
173
- }
174
- if (
175
- hasUnsupportedKeysInContentContainerStyle(
176
- this.props.contentContainerStyle
177
- )
178
- ) {
179
- console.warn(WarningList.styleContentContainerUnsupported);
180
- }
181
- }
182
-
183
- // Some of the state variables need to update when props change
184
- static getDerivedStateFromProps<T>(
185
- nextProps: Readonly<FlashListProps<T>>,
186
- prevState: FlashListState<T>
187
- ): FlashListState<T> {
188
- const newState = { ...prevState };
189
- if (prevState.numColumns !== nextProps.numColumns) {
190
- newState.numColumns = nextProps.numColumns || 1;
191
- newState.layoutProvider = FlashList.getLayoutProvider<T>(
192
- newState.numColumns,
193
- nextProps
194
- );
195
- } else if (prevState.layoutProvider.updateProps(nextProps).hasExpired) {
196
- newState.layoutProvider = FlashList.getLayoutProvider<T>(
197
- newState.numColumns,
198
- nextProps
199
- );
200
- }
201
-
202
- // RLV retries to reposition the first visible item on layout provider change.
203
- // It's not required in our case so we're disabling it
204
- newState.layoutProvider.shouldRefreshWithAnchoring = Boolean(
205
- !prevState.layoutProvider?.hasExpired
206
- );
207
- if (nextProps.data !== prevState.data || prevState.lastInverted !== nextProps.inverted) {
208
- const processedData = nextProps.inverted
209
- ? (nextProps.data ? [...nextProps.data].reverse() : nextProps.data)
210
- : nextProps.data;
211
- newState.data = processedData;
212
- newState.dataProvider = prevState.dataProvider.cloneWithRows(
213
- processedData as any[]
214
- );
215
- if (nextProps.renderItem !== prevState.renderItem) {
216
- newState.extraData = { ...prevState.extraData };
217
- }
218
- }
219
- if (nextProps.extraData !== prevState.extraData?.value) {
220
- newState.extraData = { value: nextProps.extraData };
221
- }
222
- newState.renderItem = nextProps.renderItem;
223
- newState.lastInverted = nextProps.inverted ?? undefined;
224
- return newState;
225
- }
226
-
227
- private static getInitialMutableState<T>(
228
- flashList: FlashList<T>
229
- ): FlashListState<T> {
230
- let getStableId: ((index: number) => string) | undefined;
231
- if (
232
- flashList.props.keyExtractor !== null &&
233
- flashList.props.keyExtractor !== undefined
234
- ) {
235
- getStableId = (index) =>
236
- // We assume `keyExtractor` function will never change from being `null | undefined` to defined and vice versa.
237
- // Similarly, data should never be `null | undefined` when `getStableId` is called.
238
- flashList.props.keyExtractor!(
239
- flashList.props.data![index],
240
- index
241
- ).toString();
242
- }
243
- return {
244
- data: null,
245
- layoutProvider: null!!,
246
- dataProvider: new DataProvider((r1, r2) => {
247
- return r1 !== r2;
248
- }, getStableId),
249
- numColumns: 0,
250
- };
251
- }
252
-
253
- // Using only grid layout provider as it can also act as a listview, sizeProvider is a function to support future overrides
254
- private static getLayoutProvider<T>(
255
- numColumns: number,
256
- flashListProps: FlashListProps<T>
257
- ) {
258
- return new GridLayoutProviderWithProps<T>(
259
- // max span or, total columns
260
- numColumns,
261
- (index, props) => {
262
- // type of the item for given index
263
- const type = props.getItemType?.(
264
- props.data!![index],
265
- index,
266
- props.extraData
267
- );
268
- return type || 0;
269
- },
270
- (index, props, mutableLayout) => {
271
- // span of the item at given index, item can choose to span more than one column
272
- props.overrideItemLayout?.(
273
- mutableLayout,
274
- props.data!![index],
275
- index,
276
- numColumns,
277
- props.extraData
278
- );
279
- return mutableLayout?.span ?? 1;
280
- },
281
- (index, props, mutableLayout) => {
282
- // estimated size of the item an given index
283
- props.overrideItemLayout?.(
284
- mutableLayout,
285
- props.data!![index],
286
- index,
287
- numColumns,
288
- props.extraData
289
- );
290
- console.log('mutableLayout:', mutableLayout);
291
-
292
- return mutableLayout?.size;
293
- },
294
- flashListProps
295
- );
296
- }
297
-
298
- private onEndReached = () => {
299
- this.props.onEndReached?.();
300
- };
301
-
302
- private getRefreshControl = () => {
303
- if (this.props.onRefresh) {
304
- return (
305
- <RefreshControl
306
- refreshing={Boolean(this.props.refreshing)}
307
- progressViewOffset={this.props.progressViewOffset}
308
- onRefresh={this.props.onRefresh}
309
- />
310
- );
311
- }
312
- };
313
-
314
- componentDidMount() {
315
- if (this.props.data?.length === 0) {
316
- this.raiseOnLoadEventIfNeeded();
317
- }
318
- }
319
-
320
- componentWillUnmount() {
321
- this.viewabilityManager.dispose();
322
- this.clearPostLoadTimeout();
323
- this.clearRenderSizeWarningTimeout();
324
- if (this.itemSizeWarningTimeoutId !== undefined) {
325
- clearTimeout(this.itemSizeWarningTimeoutId);
326
- }
327
- }
328
-
329
- render() {
330
- this.isEmptyList = this.state.dataProvider.getSize() === 0;
331
- updateContentStyle(this.contentStyle, this.props.contentContainerStyle);
332
-
333
- const {
334
- drawDistance,
335
- removeClippedSubviews,
336
- stickyHeaderIndices,
337
- horizontal,
338
- onEndReachedThreshold,
339
- estimatedListSize,
340
- initialScrollIndex,
341
- style,
342
- contentContainerStyle,
343
- renderScrollComponent,
344
- ...restProps
345
- } = this.props;
346
-
347
- // RecyclerListView simply ignores if initialScrollIndex is set to 0 because it doesn't understand headers
348
- // Using initialOffset to force RLV to scroll to the right place
349
- const initialOffset =
350
- (this.isInitialScrollIndexInFirstRow() && this.distanceFromWindow) ||
351
- undefined;
352
- const finalDrawDistance =
353
- drawDistance === undefined
354
- ? PlatformConfig.defaultDrawDistance
355
- : drawDistance;
356
-
357
- return (
358
- <StickyHeaderContainer
359
- overrideRowRenderer={this.stickyOverrideRowRenderer}
360
- applyWindowCorrection={this.applyWindowCorrection}
361
- stickyHeaderIndices={stickyHeaderIndices}
362
- style={
363
- this.props.horizontal
364
- ? { }
365
- : { flex: 1, overflow: "hidden" }
366
- }
367
- >
368
- <ProgressiveListView
369
- {...restProps}
370
- ref={this.recyclerRef}
371
- layoutProvider={this.state.layoutProvider}
372
- dataProvider={this.state.dataProvider}
373
- rowRenderer={this.emptyRowRenderer}
374
- canChangeSize
375
- isHorizontal={Boolean(horizontal)}
376
- scrollViewProps={{
377
- onScrollBeginDrag: this.onScrollBeginDrag,
378
- onLayout: this.handleSizeChange,
379
- refreshControl:
380
- this.props.refreshControl || this.getRefreshControl(),
381
-
382
- // Min values are being used to suppress RLV's bounded exception
383
- style: { minHeight: 1, minWidth: 1 },
384
- contentContainerStyle: {
385
- backgroundColor: this.contentStyle.backgroundColor,
386
-
387
- // Required to handle a scrollview bug. Check: https://github.com/Shopify/flash-list/pull/187
388
- minHeight: 1,
389
- minWidth: 1,
390
-
391
- ...getContentContainerPadding(this.contentStyle, horizontal),
392
- },
393
- ...this.props.overrideProps,
394
- }}
395
- forceNonDeterministicRendering
396
- renderItemContainer={this.itemContainer}
397
- renderContentContainer={this.container}
398
- onEndReached={this.onEndReached}
399
- onEndReachedThresholdRelative={onEndReachedThreshold || undefined}
400
- extendedState={this.state.extraData}
401
- layoutSize={estimatedListSize}
402
- maxRenderAhead={3 * finalDrawDistance}
403
- finalRenderAheadOffset={finalDrawDistance}
404
- renderAheadStep={finalDrawDistance}
405
- initialRenderIndex={
406
- (!this.isInitialScrollIndexInFirstRow() && initialScrollIndex) ||
407
- undefined
408
- }
409
- initialOffset={initialOffset}
410
- onItemLayout={this.onItemLayout}
411
- onScroll={this.onScroll}
412
- onVisibleIndicesChanged={
413
- this.viewabilityManager.shouldListenToVisibleIndices
414
- ? this.viewabilityManager.onVisibleIndicesChanged
415
- : undefined
416
- }
417
- windowCorrectionConfig={this.getUpdatedWindowCorrectionConfig()}
418
- itemAnimator={this.itemAnimator}
419
- suppressBoundedSizeException
420
- externalScrollView={
421
- renderScrollComponent as RecyclerListViewProps["externalScrollView"]
422
- }
423
- />
424
- </StickyHeaderContainer>
425
- );
426
- }
427
-
428
- private onScrollBeginDrag = (
429
- event: NativeSyntheticEvent<NativeScrollEvent>
430
- ) => {
431
- this.recordInteraction();
432
- this.props.onScrollBeginDrag?.(event);
433
- };
434
-
435
- private onScroll = (event: NativeSyntheticEvent<NativeScrollEvent>) => {
436
- this.recordInteraction();
437
- this.viewabilityManager.updateViewableItems();
438
- this.props.onScroll?.(event);
439
- };
440
-
441
- private getUpdatedWindowCorrectionConfig() {
442
- // If the initial scroll index is in the first row then we're forcing RLV to use initialOffset and thus we need to disable window correction
443
- // This isn't clean but it's the only way to get RLV to scroll to the right place
444
- // TODO: Remove this when RLV fixes this. Current implementation will also fail if column span is overridden in the first row.
445
- if (this.isInitialScrollIndexInFirstRow()) {
446
- this.windowCorrectionConfig.applyToInitialOffset = false;
447
- } else {
448
- this.windowCorrectionConfig.applyToInitialOffset = true;
449
- }
450
- this.windowCorrectionConfig.value.windowShift = -this.distanceFromWindow;
451
- return this.windowCorrectionConfig;
452
- }
453
-
454
- private isInitialScrollIndexInFirstRow() {
455
- return (
456
- (this.props.initialScrollIndex ?? this.state.numColumns) <
457
- this.state.numColumns
458
- );
459
- }
460
-
461
- private validateListSize(event: LayoutChangeEvent) {
462
- const { height, width } = event.nativeEvent.layout;
463
- this.clearRenderSizeWarningTimeout();
464
- if (Math.floor(height) <= 1 || Math.floor(width) <= 1) {
465
- this.renderedSizeWarningTimeoutId = setTimeout(() => {
466
- console.warn(WarningList.unusableRenderedSize);
467
- }, 1000);
468
- }
469
- }
470
-
471
- private handleSizeChange = (event: LayoutChangeEvent) => {
472
- this.validateListSize(event);
473
- const newSize = this.props.horizontal
474
- ? event.nativeEvent.layout.height
475
- : event.nativeEvent.layout.width;
476
- const oldSize = this.listFixedDimensionSize;
477
- this.listFixedDimensionSize = newSize;
478
-
479
- // >0 check is to avoid rerender on mount where it would be redundant
480
- if (oldSize > 0 && oldSize !== newSize) {
481
- this.rlvRef?.forceRerender();
482
- }
483
- if (this.props.onLayout) {
484
- this.props.onLayout(event);
485
- }
486
- };
487
-
488
- private container = (props: object, children: React.ReactNode[]) => {
489
- this.clearPostLoadTimeout();
490
- return (
491
- <>
492
- <PureComponentWrapper
493
- enabled={this.isListLoaded || children.length > 0 || this.isEmptyList}
494
- contentStyle={this.props.contentContainerStyle}
495
- horizontal={this.props.horizontal}
496
- header={this.props.ListHeaderComponent}
497
- extraData={this.state.extraData}
498
- headerStyle={this.props.ListHeaderComponentStyle}
499
- inverted={this.props.inverted}
500
- renderer={this.header}
501
- />
502
- <AutoLayoutView
503
- {...props}
504
- onBlankAreaEvent={this.props.onBlankArea}
505
- onLayout={this.updateDistanceFromWindow}
506
- disableAutoLayout={this.props.disableAutoLayout}
507
- >
508
- {children}
509
- </AutoLayoutView>
510
- {this.isEmptyList
511
- ? this.getValidComponent(this.props.ListEmptyComponent)
512
- : null}
513
- <PureComponentWrapper
514
- enabled={this.isListLoaded || children.length > 0 || this.isEmptyList}
515
- contentStyle={this.props.contentContainerStyle}
516
- horizontal={this.props.horizontal}
517
- header={this.props.ListFooterComponent}
518
- extraData={this.state.extraData}
519
- headerStyle={this.props.ListFooterComponentStyle}
520
- inverted={this.props.inverted}
521
- renderer={this.footer}
522
- />
523
- {this.getComponentForHeightMeasurement()}
524
- </>
525
- );
526
- };
527
-
528
- private itemContainer = (props: any, parentProps: any) => {
529
- const CellRendererComponent =
530
- this.props.CellRendererComponent ?? CellContainer;
531
- return (
532
- <CellRendererComponent
533
- {...props}
534
- style={{
535
- ...props.style,
536
- flexDirection: this.props.horizontal ? "row" : "column",
537
- alignItems: "stretch",
538
- ...getCellContainerPlatformStyles(this.props.inverted!!, parentProps),
539
- }}
540
- index={parentProps.index}
541
- >
542
- <PureComponentWrapper
543
- extendedState={parentProps.extendedState}
544
- internalSnapshot={parentProps.internalSnapshot}
545
- data={parentProps.data}
546
- arg={parentProps.index}
547
- renderer={this.getCellContainerChild}
548
- />
549
- </CellRendererComponent>
550
- );
551
- };
552
-
553
- private updateDistanceFromWindow = (event: LayoutChangeEvent) => {
554
- const newDistanceFromWindow = this.props.horizontal
555
- ? event.nativeEvent.layout.x
556
- : event.nativeEvent.layout.y;
557
-
558
- if (this.distanceFromWindow !== newDistanceFromWindow) {
559
- this.distanceFromWindow = newDistanceFromWindow;
560
- this.windowCorrectionConfig.value.windowShift = -this.distanceFromWindow;
561
- this.viewabilityManager.updateViewableItems();
562
- }
563
- };
564
-
565
- private separator = (index: number) => {
566
- // Make sure we have data and don't read out of bounds
567
- if (
568
- this.props.data === null ||
569
- this.props.data === undefined ||
570
- index + 1 >= this.props.data.length
571
- ) {
572
- return null;
573
- }
574
-
575
- const leadingItem = this.props.data[index];
576
- const trailingItem = this.props.data[index + 1];
577
-
578
- const props = {
579
- leadingItem,
580
- trailingItem,
581
- // TODO: Missing sections as we don't have this feature implemented yet. Implement section, leadingSection and trailingSection.
582
- // https://github.com/facebook/react-native/blob/8bd3edec88148d0ab1f225d2119435681fbbba33/Libraries/Lists/VirtualizedSectionList.js#L285-L294
583
- };
584
- const Separator = this.props.ItemSeparatorComponent;
585
- return Separator && <Separator {...props} />;
586
- };
587
-
588
- private header = () => {
589
- return (
590
- <>
591
- <View
592
- style={{
593
- paddingTop: this.contentStyle.paddingTop,
594
- paddingLeft: this.contentStyle.paddingLeft,
595
- }}
596
- />
597
-
598
- <View
599
- style={[this.props.ListHeaderComponentStyle]}
600
- >
601
- {this.getValidComponent(this.props.ListHeaderComponent)}
602
- </View>
603
- </>
604
- );
605
- };
606
-
607
- private footer = () => {
608
- /** The web version of CellContainer uses a div directly which doesn't compose styles the way a View does.
609
- * We will skip using CellContainer on web to avoid this issue. `getFooterContainer` on web will
610
- * return a View. */
611
- const FooterContainer = getFooterContainer() ?? CellContainer;
612
- return (
613
- <>
614
- <FooterContainer
615
- index={-1}
616
- style={[this.props.ListFooterComponentStyle]}
617
- >
618
- {this.getValidComponent(this.props.ListFooterComponent)}
619
- </FooterContainer>
620
- <View
621
- style={{
622
- paddingBottom: this.contentStyle.paddingBottom,
623
- paddingRight: this.contentStyle.paddingRight,
624
- }}
625
- />
626
- </>
627
- );
628
- };
629
-
630
- private getComponentForHeightMeasurement = () => {
631
- return this.props.horizontal &&
632
- !this.props.disableHorizontalListHeightMeasurement &&
633
- !this.isListLoaded &&
634
- this.state.dataProvider.getSize() > 0 ? (
635
- <View style={{ opacity: 0 }} pointerEvents="none">
636
- {this.rowRendererWithIndex(
637
- Math.min(this.state.dataProvider.getSize() - 1, 1),
638
- RenderTargetOptions.Measurement
639
- )}
640
- </View>
641
- ) : null;
642
- };
643
-
644
- private getValidComponent(
645
- component: React.ComponentType | React.ReactElement | null | undefined
646
- ) {
647
- const PassedComponent = component;
648
- return (
649
- (React.isValidElement(PassedComponent) && PassedComponent) ||
650
- (PassedComponent && <PassedComponent />) ||
651
- null
652
- );
653
- }
654
-
655
- private applyWindowCorrection = (
656
- _: any,
657
- __: any,
658
- correctionObject: { windowShift: number }
659
- ) => {
660
- correctionObject.windowShift = -this.distanceFromWindow;
661
- this.stickyContentContainerRef?.setEnabled(this.isStickyEnabled);
662
- };
663
-
664
- private rowRendererSticky = (index: number) => {
665
- return this.rowRendererWithIndex(index, RenderTargetOptions.StickyHeader);
666
- };
667
-
668
- private rowRendererWithIndex = (index: number, target: RenderTarget) => {
669
- // known issue: expected to pass separators which isn't available in RLV
670
- return this.props.renderItem?.({
671
- item: this.state.data![index],
672
- index,
673
- target,
674
- extraData: this.state.extraData?.value,
675
- }) as JSX.Element;
676
- };
677
-
678
- /**
679
- * This will prevent render item calls unless data changes.
680
- * Output of this method is received as children object so returning null here is no issue as long as we handle it inside our child container.
681
- * @module getCellContainerChild acts as the new rowRenderer and is called directly from our child container.
682
- */
683
- private emptyRowRenderer = () => {
684
- return null;
685
- };
686
-
687
- private getCellContainerChild = (index: number) => {
688
- return (
689
- <>
690
- <View
691
- style={{
692
- flexDirection:
693
- this.props.horizontal || this.props.numColumns === 1
694
- ? "column"
695
- : "row",
696
- }}
697
- >
698
- {this.rowRendererWithIndex(index, RenderTargetOptions.Cell)}
699
- </View>
700
- {this.separator(index)}
701
- </>
702
- );
703
- };
704
-
705
- private recyclerRef = (ref: any) => {
706
- this.rlvRef = ref;
707
- };
708
-
709
- private stickyContentRef = (ref: any) => {
710
- this.stickyContentContainerRef = ref;
711
- };
712
-
713
- private stickyOverrideRowRenderer = (
714
- _: any,
715
- rowData: any,
716
- index: number,
717
- ___: any
718
- ) => {
719
- return (
720
- <PureComponentWrapper
721
- ref={this.stickyContentRef}
722
- enabled={this.isStickyEnabled}
723
- // We're passing rowData to ensure that sticky headers are updated when data changes
724
- rowData={rowData}
725
- arg={index}
726
- renderer={this.rowRendererSticky}
727
- />
728
- );
729
- };
730
-
731
- private get isStickyEnabled() {
732
- const currentOffset = this.rlvRef?.getCurrentScrollOffset() || 0;
733
- return currentOffset >= this.distanceFromWindow;
734
- }
735
-
736
- private onItemLayout = (index: number) => {
737
- // Informing the layout provider about change to an item's layout. It already knows the dimensions so there's not need to pass them.
738
- this.state.layoutProvider.reportItemLayout(index);
739
- this.raiseOnLoadEventIfNeeded();
740
- };
741
-
742
- private raiseOnLoadEventIfNeeded = () => {
743
- if (!this.isListLoaded) {
744
- this.isListLoaded = true;
745
- this.props.onLoad?.({
746
- elapsedTimeInMs: Date.now() - this.loadStartTime,
747
- });
748
- this.runAfterOnLoad();
749
- }
750
- };
751
-
752
- private runAfterOnLoad = () => {
753
- if (this.props.estimatedItemSize === undefined) {
754
- this.itemSizeWarningTimeoutId = setTimeout(() => {
755
- const averageItemSize = Math.floor(
756
- this.state.layoutProvider.averageItemSize
757
- );
758
- console.warn(
759
- WarningList.estimatedItemSizeMissingWarning.replace(
760
- "@size",
761
- averageItemSize.toString()
762
- )
763
- );
764
- }, 1000);
765
- }
766
- this.postLoadTimeoutId = setTimeout(() => {
767
- // This force update is required to remove dummy element rendered to measure horizontal list height when the list doesn't update on its own.
768
- // In most cases this timeout will never be triggered because list usually updates atleast once and this timeout is cleared on update.
769
- if (this.props.horizontal) {
770
- this.forceUpdate();
771
- }
772
- }, 500);
773
- };
774
-
775
- private clearPostLoadTimeout = () => {
776
- if (this.postLoadTimeoutId !== undefined) {
777
- clearTimeout(this.postLoadTimeoutId);
778
- this.postLoadTimeoutId = undefined;
779
- }
780
- };
781
-
782
- private clearRenderSizeWarningTimeout = () => {
783
- if (this.renderedSizeWarningTimeoutId !== undefined) {
784
- clearTimeout(this.renderedSizeWarningTimeoutId);
785
- this.renderedSizeWarningTimeoutId = undefined;
786
- }
787
- };
788
-
789
- /**
790
- * Disables recycling for the next frame so that layout animations run well.
791
- * Warning: Avoid this when making large changes to the data as the list might draw too much to run animations. Single item insertions/deletions
792
- * should be good. With recycling paused the list cannot do much optimization.
793
- * The next render will run as normal and reuse items.
794
- */
795
- public prepareForLayoutAnimationRender(): void {
796
- if (
797
- this.props.keyExtractor === null ||
798
- this.props.keyExtractor === undefined
799
- ) {
800
- console.warn(WarningList.missingKeyExtractor);
801
- } else {
802
- this.rlvRef?.prepareForLayoutAnimationRender();
803
- }
804
- }
805
-
806
- public scrollToEnd(params?: { animated?: boolean | null | undefined }) {
807
- this.rlvRef?.scrollToEnd(Boolean(params?.animated));
808
- }
809
-
810
- public scrollToIndex(params: {
811
- animated?: boolean | null | undefined;
812
- index: number;
813
- viewOffset?: number | undefined;
814
- viewPosition?: number | undefined;
815
- }) {
816
- const layout = this.rlvRef?.getLayout(params.index);
817
- const listSize = this.rlvRef?.getRenderedSize();
818
-
819
- if (layout && listSize) {
820
- const itemOffset = this.props.horizontal ? layout.x : layout.y;
821
- const fixedDimension = this.props.horizontal
822
- ? listSize.width
823
- : listSize.height;
824
- const itemSize = this.props.horizontal ? layout.width : layout.height;
825
- const scrollOffset =
826
- Math.max(
827
- 0,
828
- itemOffset - (params.viewPosition ?? 0) * (fixedDimension - itemSize)
829
- ) - (params.viewOffset ?? 0);
830
- this.rlvRef?.scrollToOffset(
831
- scrollOffset,
832
- scrollOffset,
833
- Boolean(params.animated),
834
- true
835
- );
836
- }
837
- }
838
-
839
- public scrollToItem(params: {
840
- animated?: boolean | null | undefined;
841
- item: any;
842
- viewPosition?: number | undefined;
843
- viewOffset?: number | undefined;
844
- }) {
845
- const index = this.props.data?.indexOf(params.item) ?? -1;
846
- if (index >= 0) {
847
- this.scrollToIndex({ ...params, index });
848
- }
849
- }
850
-
851
- public scrollToOffset(params: {
852
- animated?: boolean | null | undefined;
853
- offset: number;
854
- }) {
855
- const x = this.props.horizontal ? params.offset : 0;
856
- const y = this.props.horizontal ? 0 : params.offset;
857
- this.rlvRef?.scrollToOffset(x, y, Boolean(params.animated));
858
- }
859
-
860
- public getScrollableNode(): number | null {
861
- return this.rlvRef?.getScrollableNode?.() || null;
862
- }
863
-
864
- /**
865
- * Allows access to internal recyclerlistview. This is useful for enabling access to its public APIs.
866
- * Warning: We may swap recyclerlistview for something else in the future. Use with caution.
867
- */
868
- /* eslint-disable @typescript-eslint/naming-convention */
869
- public get recyclerlistview_unsafe(): RecyclerListView<RecyclerListViewProps, any> | undefined {
870
- return this.rlvRef;
871
- }
872
-
873
- /**
874
- * Specifies how far the first item is from top of the list. This would normally be a sum of header size and top/left padding applied to the list.
875
- */
876
- public get firstItemOffset(): number {
877
- return this.distanceFromWindow;
878
- }
879
-
880
- /**
881
- * FlashList will skip using layout cache on next update. Can be useful when you know the layout will change drastically for example, orientation change when used as a carousel.
882
- */
883
- public clearLayoutCacheOnUpdate(): void {
884
- this.state.layoutProvider.markExpired();
885
- }
886
-
887
- /**
888
- * Tells the list an interaction has occurred, which should trigger viewability calculations, e.g. if waitForInteractions is true and the user has not scrolled.
889
- * This is typically called by taps on items or by navigation actions.
890
- */
891
- public recordInteraction = (): void => {
892
- this.viewabilityManager.recordInteraction();
893
- };
894
-
895
- /**
896
- * Retriggers viewability calculations. Useful to imperatively trigger viewability calculations.
897
- */
898
- public recomputeViewableItems = (): void => {
899
- this.viewabilityManager.recomputeViewableItems();
900
- };
901
-
902
- /**
903
- * Returns the dimensions of the child container.
904
- * @returns {Object} The dimensions of the child container.
905
- */
906
- public getChildContainerDimensions(): Dimension | undefined {
907
- return this.rlvRef?.getContentDimension();
908
- }
909
-
910
- /**
911
- * Returns the layout of the item at the given index.
912
- * @param index - The index of the item to get the layout for.
913
- * @returns {Object} The layout of the item at the given index.
914
- */
915
- public getLayout(index: number) : Layout | undefined {
916
- const l = this.rlvRef?.getLayout(index);
917
- return l;
918
- }
919
-
920
- /**
921
- * Returns the size of the list.
922
- * @returns {Object} The size of the list.
923
- */
924
- public getWindowSize(): Dimension | undefined {
925
- return this.rlvRef?.getRenderedSize();
926
- }
927
-
928
- /**
929
- * Returns the absolute last scroll offset of the list.
930
- * @returns {number} The absolute last scroll offset of the list.
931
- */
932
- public getAbsoluteLastScrollOffset(): number {
933
- return this.rlvRef?.getCurrentScrollOffset() ?? 0;
934
- }
935
-
936
- /**
937
- * Returns the first item offset of the list.
938
- * @returns {number} The first item offset of the list.
939
- */
940
- public getFirstItemOffset(): number {
941
- return this.firstItemOffset;
942
- }
943
-
944
- public getFirstVisibleIndex(): number {
945
- return this.rlvRef?.findApproxFirstVisibleIndex() ?? -1;
946
- }
947
- }
948
-
949
- export default FlashList;