@shopify/flash-list 2.0.0-rc.9 → 2.0.0

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 (304) hide show
  1. package/README.md +27 -97
  2. package/dist/AnimatedFlashList.js +2 -2
  3. package/dist/AnimatedFlashList.js.map +1 -1
  4. package/dist/FlashList.d.ts +1 -167
  5. package/dist/FlashList.d.ts.map +1 -1
  6. package/dist/FlashList.js +3 -595
  7. package/dist/FlashList.js.map +1 -1
  8. package/dist/FlashListProps.d.ts +7 -63
  9. package/dist/FlashListProps.d.ts.map +1 -1
  10. package/dist/FlashListProps.js.map +1 -1
  11. package/dist/__tests__/LayoutCommitObserver.test.d.ts +2 -0
  12. package/dist/__tests__/LayoutCommitObserver.test.d.ts.map +1 -0
  13. package/dist/__tests__/LayoutCommitObserver.test.js +35 -0
  14. package/dist/__tests__/LayoutCommitObserver.test.js.map +1 -0
  15. package/dist/__tests__/ViewabilityHelper.test.js +3 -4
  16. package/dist/__tests__/ViewabilityHelper.test.js.map +1 -1
  17. package/dist/benchmark/JSFPSMonitor.d.ts.map +1 -1
  18. package/dist/benchmark/JSFPSMonitor.js +2 -1
  19. package/dist/benchmark/JSFPSMonitor.js.map +1 -1
  20. package/dist/benchmark/useBenchmark.d.ts +2 -4
  21. package/dist/benchmark/useBenchmark.d.ts.map +1 -1
  22. package/dist/benchmark/useBenchmark.js +12 -49
  23. package/dist/benchmark/useBenchmark.js.map +1 -1
  24. package/dist/benchmark/useFlatListBenchmark.d.ts.map +1 -1
  25. package/dist/benchmark/useFlatListBenchmark.js +2 -1
  26. package/dist/benchmark/useFlatListBenchmark.js.map +1 -1
  27. package/dist/errors/ErrorMessages.d.ts +16 -0
  28. package/dist/errors/ErrorMessages.d.ts.map +1 -0
  29. package/dist/errors/ErrorMessages.js +19 -0
  30. package/dist/errors/ErrorMessages.js.map +1 -0
  31. package/dist/errors/WarningMessages.d.ts +4 -0
  32. package/dist/errors/WarningMessages.d.ts.map +1 -0
  33. package/dist/errors/WarningMessages.js +7 -0
  34. package/dist/errors/WarningMessages.js.map +1 -0
  35. package/dist/index.d.ts +4 -9
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +9 -29
  38. package/dist/index.js.map +1 -1
  39. package/dist/isNewArch.d.ts +2 -0
  40. package/dist/isNewArch.d.ts.map +1 -0
  41. package/dist/isNewArch.js +25 -0
  42. package/dist/isNewArch.js.map +1 -0
  43. package/dist/native/config/PlatformHelper.android.d.ts +1 -22
  44. package/dist/native/config/PlatformHelper.android.d.ts.map +1 -1
  45. package/dist/native/config/PlatformHelper.android.js +1 -16
  46. package/dist/native/config/PlatformHelper.android.js.map +1 -1
  47. package/dist/native/config/PlatformHelper.d.ts +1 -22
  48. package/dist/native/config/PlatformHelper.d.ts.map +1 -1
  49. package/dist/native/config/PlatformHelper.ios.d.ts +1 -22
  50. package/dist/native/config/PlatformHelper.ios.d.ts.map +1 -1
  51. package/dist/native/config/PlatformHelper.ios.js +1 -15
  52. package/dist/native/config/PlatformHelper.ios.js.map +1 -1
  53. package/dist/native/config/PlatformHelper.js +1 -16
  54. package/dist/native/config/PlatformHelper.js.map +1 -1
  55. package/dist/native/config/PlatformHelper.web.d.ts +1 -23
  56. package/dist/native/config/PlatformHelper.web.d.ts.map +1 -1
  57. package/dist/native/config/PlatformHelper.web.js +1 -18
  58. package/dist/native/config/PlatformHelper.web.js.map +1 -1
  59. package/dist/recyclerview/LayoutCommitObserver.d.ts +12 -0
  60. package/dist/recyclerview/LayoutCommitObserver.d.ts.map +1 -0
  61. package/dist/recyclerview/LayoutCommitObserver.js +62 -0
  62. package/dist/recyclerview/LayoutCommitObserver.js.map +1 -0
  63. package/dist/recyclerview/RecyclerView.d.ts.map +1 -1
  64. package/dist/recyclerview/RecyclerView.js +20 -9
  65. package/dist/recyclerview/RecyclerView.js.map +1 -1
  66. package/dist/recyclerview/RecyclerViewManager.d.ts +4 -1
  67. package/dist/recyclerview/RecyclerViewManager.d.ts.map +1 -1
  68. package/dist/recyclerview/RecyclerViewManager.js +43 -34
  69. package/dist/recyclerview/RecyclerViewManager.js.map +1 -1
  70. package/dist/recyclerview/RecyclerViewProps.d.ts +1 -8
  71. package/dist/recyclerview/RecyclerViewProps.d.ts.map +1 -1
  72. package/dist/recyclerview/ViewHolderCollection.d.ts +6 -2
  73. package/dist/recyclerview/ViewHolderCollection.d.ts.map +1 -1
  74. package/dist/recyclerview/ViewHolderCollection.js +3 -1
  75. package/dist/recyclerview/ViewHolderCollection.js.map +1 -1
  76. package/dist/recyclerview/hooks/useBoundDetection.d.ts.map +1 -1
  77. package/dist/recyclerview/hooks/useBoundDetection.js +38 -7
  78. package/dist/recyclerview/hooks/useBoundDetection.js.map +1 -1
  79. package/dist/recyclerview/hooks/useRecyclerViewController.d.ts.map +1 -1
  80. package/dist/recyclerview/hooks/useRecyclerViewController.js +16 -9
  81. package/dist/recyclerview/hooks/useRecyclerViewController.js.map +1 -1
  82. package/dist/recyclerview/layout-managers/LayoutManager.d.ts.map +1 -1
  83. package/dist/recyclerview/layout-managers/LayoutManager.js +2 -1
  84. package/dist/recyclerview/layout-managers/LayoutManager.js.map +1 -1
  85. package/dist/recyclerview/viewability/ViewToken.d.ts.map +1 -0
  86. package/dist/recyclerview/viewability/ViewToken.js.map +1 -0
  87. package/dist/{viewability → recyclerview/viewability}/ViewabilityHelper.d.ts +2 -2
  88. package/dist/recyclerview/viewability/ViewabilityHelper.d.ts.map +1 -0
  89. package/dist/{viewability → recyclerview/viewability}/ViewabilityHelper.js +2 -4
  90. package/dist/{viewability → recyclerview/viewability}/ViewabilityHelper.js.map +1 -1
  91. package/dist/{viewability → recyclerview/viewability}/ViewabilityManager.d.ts +3 -3
  92. package/dist/recyclerview/viewability/ViewabilityManager.d.ts.map +1 -0
  93. package/dist/{viewability → recyclerview/viewability}/ViewabilityManager.js +16 -16
  94. package/dist/recyclerview/viewability/ViewabilityManager.js.map +1 -0
  95. package/dist/tsconfig.tsbuildinfo +1 -1
  96. package/package.json +3 -14
  97. package/src/AnimatedFlashList.ts +2 -2
  98. package/src/FlashList.ts +1 -0
  99. package/src/FlashListProps.ts +8 -79
  100. package/src/__tests__/LayoutCommitObserver.test.tsx +60 -0
  101. package/src/__tests__/ViewabilityHelper.test.ts +13 -14
  102. package/src/benchmark/JSFPSMonitor.ts +3 -3
  103. package/src/benchmark/useBenchmark.ts +12 -77
  104. package/src/benchmark/useFlatListBenchmark.ts +3 -1
  105. package/src/errors/ErrorMessages.ts +26 -0
  106. package/src/errors/WarningMessages.ts +4 -0
  107. package/src/index.ts +11 -43
  108. package/src/isNewArch.ts +25 -0
  109. package/src/native/config/PlatformHelper.android.ts +1 -25
  110. package/src/native/config/PlatformHelper.ios.ts +1 -24
  111. package/src/native/config/PlatformHelper.ts +1 -25
  112. package/src/native/config/PlatformHelper.web.ts +1 -30
  113. package/src/recyclerview/LayoutCommitObserver.tsx +74 -0
  114. package/src/recyclerview/RecyclerView.tsx +25 -12
  115. package/src/recyclerview/RecyclerViewManager.ts +40 -40
  116. package/src/recyclerview/RecyclerViewProps.ts +1 -11
  117. package/src/recyclerview/ViewHolderCollection.tsx +9 -2
  118. package/src/recyclerview/hooks/useBoundDetection.ts +48 -6
  119. package/src/recyclerview/hooks/useRecyclerViewController.tsx +19 -14
  120. package/src/recyclerview/layout-managers/LayoutManager.ts +2 -1
  121. package/src/{viewability → recyclerview/viewability}/ViewabilityHelper.ts +8 -9
  122. package/src/{viewability → recyclerview/viewability}/ViewabilityManager.ts +18 -20
  123. package/RNFlashList.podspec +0 -37
  124. package/android/build.gradle +0 -89
  125. package/android/src/main/AndroidManifest.xml +0 -3
  126. package/android/src/main/kotlin/com/shopify/reactnative/flash_list/AutoLayoutShadow.kt +0 -105
  127. package/android/src/main/kotlin/com/shopify/reactnative/flash_list/AutoLayoutView.kt +0 -158
  128. package/android/src/main/kotlin/com/shopify/reactnative/flash_list/AutoLayoutViewManager.kt +0 -70
  129. package/android/src/main/kotlin/com/shopify/reactnative/flash_list/BlankAreaEvent.kt +0 -29
  130. package/android/src/main/kotlin/com/shopify/reactnative/flash_list/CellContainer.java +0 -16
  131. package/android/src/main/kotlin/com/shopify/reactnative/flash_list/CellContainerImpl.kt +0 -16
  132. package/android/src/main/kotlin/com/shopify/reactnative/flash_list/CellContainerManager.kt +0 -34
  133. package/android/src/main/kotlin/com/shopify/reactnative/flash_list/FlashListPackage.kt +0 -19
  134. package/android/src/paper/java/com/facebook/react/viewmanagers/AutoLayoutViewManagerDelegate.java +0 -47
  135. package/android/src/paper/java/com/facebook/react/viewmanagers/AutoLayoutViewManagerInterface.java +0 -21
  136. package/android/src/paper/java/com/facebook/react/viewmanagers/CellContainerManagerDelegate.java +0 -32
  137. package/android/src/paper/java/com/facebook/react/viewmanagers/CellContainerManagerInterface.java +0 -16
  138. package/android/src/test/java/com/shopify/reactnative/flash_list/AutoLayoutShadowTest.kt +0 -147
  139. package/android/src/test/java/com/shopify/reactnative/flash_list/models/Rect.kt +0 -61
  140. package/android/src/test/java/com/shopify/reactnative/flash_list/models/TestCollection.kt +0 -6
  141. package/android/src/test/java/com/shopify/reactnative/flash_list/models/TestDataModel.kt +0 -8
  142. package/android/src/test/resources/LayoutTestData.json +0 -788
  143. package/dist/GridLayoutProviderWithProps.d.ts +0 -42
  144. package/dist/GridLayoutProviderWithProps.d.ts.map +0 -1
  145. package/dist/GridLayoutProviderWithProps.js +0 -114
  146. package/dist/GridLayoutProviderWithProps.js.map +0 -1
  147. package/dist/MasonryFlashList.d.ts +0 -51
  148. package/dist/MasonryFlashList.d.ts.map +0 -1
  149. package/dist/MasonryFlashList.js +0 -252
  150. package/dist/MasonryFlashList.js.map +0 -1
  151. package/dist/PureComponentWrapper.d.ts +0 -22
  152. package/dist/PureComponentWrapper.d.ts.map +0 -1
  153. package/dist/PureComponentWrapper.js +0 -37
  154. package/dist/PureComponentWrapper.js.map +0 -1
  155. package/dist/__tests__/ContentContainerUtils.test.d.ts +0 -2
  156. package/dist/__tests__/ContentContainerUtils.test.d.ts.map +0 -1
  157. package/dist/__tests__/ContentContainerUtils.test.js +0 -85
  158. package/dist/__tests__/ContentContainerUtils.test.js.map +0 -1
  159. package/dist/__tests__/FlashList.test.d.ts +0 -2
  160. package/dist/__tests__/FlashList.test.d.ts.map +0 -1
  161. package/dist/__tests__/FlashList.test.js +0 -902
  162. package/dist/__tests__/FlashList.test.js.map +0 -1
  163. package/dist/__tests__/GridLayoutProviderWithProps.test.d.ts +0 -2
  164. package/dist/__tests__/GridLayoutProviderWithProps.test.d.ts.map +0 -1
  165. package/dist/__tests__/GridLayoutProviderWithProps.test.js +0 -143
  166. package/dist/__tests__/GridLayoutProviderWithProps.test.js.map +0 -1
  167. package/dist/__tests__/MasonryFlashList.test.d.ts +0 -2
  168. package/dist/__tests__/MasonryFlashList.test.d.ts.map +0 -1
  169. package/dist/__tests__/MasonryFlashList.test.js +0 -254
  170. package/dist/__tests__/MasonryFlashList.test.js.map +0 -1
  171. package/dist/__tests__/PlatformHelper.web.test.d.ts +0 -2
  172. package/dist/__tests__/PlatformHelper.web.test.d.ts.map +0 -1
  173. package/dist/__tests__/PlatformHelper.web.test.js +0 -33
  174. package/dist/__tests__/PlatformHelper.web.test.js.map +0 -1
  175. package/dist/__tests__/helpers/mountFlashList.d.ts +0 -19
  176. package/dist/__tests__/helpers/mountFlashList.d.ts.map +0 -1
  177. package/dist/__tests__/helpers/mountFlashList.js +0 -44
  178. package/dist/__tests__/helpers/mountFlashList.js.map +0 -1
  179. package/dist/__tests__/helpers/mountMasonryFlashList.d.ts +0 -18
  180. package/dist/__tests__/helpers/mountMasonryFlashList.d.ts.map +0 -1
  181. package/dist/__tests__/helpers/mountMasonryFlashList.js +0 -49
  182. package/dist/__tests__/helpers/mountMasonryFlashList.js.map +0 -1
  183. package/dist/__tests__/useBlankAreaTracker.test.d.ts +0 -2
  184. package/dist/__tests__/useBlankAreaTracker.test.d.ts.map +0 -1
  185. package/dist/__tests__/useBlankAreaTracker.test.js +0 -179
  186. package/dist/__tests__/useBlankAreaTracker.test.js.map +0 -1
  187. package/dist/benchmark/useBlankAreaTracker.d.ts +0 -34
  188. package/dist/benchmark/useBlankAreaTracker.d.ts.map +0 -1
  189. package/dist/benchmark/useBlankAreaTracker.js +0 -66
  190. package/dist/benchmark/useBlankAreaTracker.js.map +0 -1
  191. package/dist/enableNewCore.d.ts +0 -3
  192. package/dist/enableNewCore.d.ts.map +0 -1
  193. package/dist/enableNewCore.js +0 -25
  194. package/dist/enableNewCore.js.map +0 -1
  195. package/dist/errors/CustomError.d.ts +0 -8
  196. package/dist/errors/CustomError.d.ts.map +0 -1
  197. package/dist/errors/CustomError.js +0 -14
  198. package/dist/errors/CustomError.js.map +0 -1
  199. package/dist/errors/ExceptionList.d.ts +0 -24
  200. package/dist/errors/ExceptionList.d.ts.map +0 -1
  201. package/dist/errors/ExceptionList.js +0 -26
  202. package/dist/errors/ExceptionList.js.map +0 -1
  203. package/dist/errors/Warnings.d.ts +0 -9
  204. package/dist/errors/Warnings.d.ts.map +0 -1
  205. package/dist/errors/Warnings.js +0 -13
  206. package/dist/errors/Warnings.js.map +0 -1
  207. package/dist/native/auto-layout/AutoLayoutView.d.ts +0 -22
  208. package/dist/native/auto-layout/AutoLayoutView.d.ts.map +0 -1
  209. package/dist/native/auto-layout/AutoLayoutView.js +0 -48
  210. package/dist/native/auto-layout/AutoLayoutView.js.map +0 -1
  211. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.android.d.ts +0 -4
  212. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.android.d.ts.map +0 -1
  213. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.android.js +0 -6
  214. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.android.js.map +0 -1
  215. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.d.ts +0 -5
  216. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.d.ts.map +0 -1
  217. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.ios.d.ts +0 -4
  218. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.ios.d.ts.map +0 -1
  219. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.ios.js +0 -6
  220. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.ios.js.map +0 -1
  221. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.js +0 -6
  222. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.js.map +0 -1
  223. package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.d.ts +0 -16
  224. package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.d.ts.map +0 -1
  225. package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.js +0 -3
  226. package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.js.map +0 -1
  227. package/dist/native/cell-container/CellContainer.android.d.ts +0 -6
  228. package/dist/native/cell-container/CellContainer.android.d.ts.map +0 -1
  229. package/dist/native/cell-container/CellContainer.android.js +0 -9
  230. package/dist/native/cell-container/CellContainer.android.js.map +0 -1
  231. package/dist/native/cell-container/CellContainer.d.ts +0 -8
  232. package/dist/native/cell-container/CellContainer.d.ts.map +0 -1
  233. package/dist/native/cell-container/CellContainer.ios.d.ts +0 -6
  234. package/dist/native/cell-container/CellContainer.ios.d.ts.map +0 -1
  235. package/dist/native/cell-container/CellContainer.ios.js +0 -9
  236. package/dist/native/cell-container/CellContainer.ios.js.map +0 -1
  237. package/dist/native/cell-container/CellContainer.js +0 -11
  238. package/dist/native/cell-container/CellContainer.js.map +0 -1
  239. package/dist/native/cell-container/CellContainer.web.d.ts +0 -7
  240. package/dist/native/cell-container/CellContainer.web.d.ts.map +0 -1
  241. package/dist/native/cell-container/CellContainer.web.js +0 -13
  242. package/dist/native/cell-container/CellContainer.web.js.map +0 -1
  243. package/dist/specs/AutoLayoutNativeComponent.d.ts +0 -18
  244. package/dist/specs/AutoLayoutNativeComponent.d.ts.map +0 -1
  245. package/dist/specs/AutoLayoutNativeComponent.js +0 -6
  246. package/dist/specs/AutoLayoutNativeComponent.js.map +0 -1
  247. package/dist/specs/CellContainerNativeComponent.d.ts +0 -8
  248. package/dist/specs/CellContainerNativeComponent.d.ts.map +0 -1
  249. package/dist/specs/CellContainerNativeComponent.js +0 -6
  250. package/dist/specs/CellContainerNativeComponent.js.map +0 -1
  251. package/dist/utils/ContentContainerUtils.d.ts +0 -27
  252. package/dist/utils/ContentContainerUtils.d.ts.map +0 -1
  253. package/dist/utils/ContentContainerUtils.js +0 -48
  254. package/dist/utils/ContentContainerUtils.js.map +0 -1
  255. package/dist/viewability/ViewToken.d.ts.map +0 -1
  256. package/dist/viewability/ViewToken.js.map +0 -1
  257. package/dist/viewability/ViewabilityHelper.d.ts.map +0 -1
  258. package/dist/viewability/ViewabilityManager.d.ts.map +0 -1
  259. package/dist/viewability/ViewabilityManager.js.map +0 -1
  260. package/ios/RNFlashList.xcodeproj/project.pbxproj +0 -3
  261. package/ios/RNFlashList.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -4
  262. package/ios/Sources/AutoLayoutView.swift +0 -294
  263. package/ios/Sources/AutoLayoutViewComponentView.h +0 -16
  264. package/ios/Sources/AutoLayoutViewComponentView.mm +0 -90
  265. package/ios/Sources/AutoLayoutViewManager.mm +0 -14
  266. package/ios/Sources/AutoLayoutViewManager.swift +0 -12
  267. package/ios/Sources/CellContainerComponentView.h +0 -18
  268. package/ios/Sources/CellContainerComponentView.mm +0 -62
  269. package/ios/Sources/CellContainerManager.mm +0 -8
  270. package/ios/Sources/CellContainerManager.swift +0 -12
  271. package/ios/Sources/FlatListPro-Bridging-Header.h +0 -11
  272. package/ios/Tests/AutoLayoutViewTests.swift +0 -113
  273. package/src/FlashList.tsx +0 -953
  274. package/src/GridLayoutProviderWithProps.ts +0 -180
  275. package/src/MasonryFlashList.tsx +0 -476
  276. package/src/PureComponentWrapper.tsx +0 -42
  277. package/src/__tests__/ContentContainerUtils.test.ts +0 -130
  278. package/src/__tests__/FlashList.test.tsx +0 -1001
  279. package/src/__tests__/GridLayoutProviderWithProps.test.ts +0 -179
  280. package/src/__tests__/MasonryFlashList.test.ts +0 -292
  281. package/src/__tests__/PlatformHelper.web.test.ts +0 -45
  282. package/src/__tests__/helpers/mountFlashList.tsx +0 -62
  283. package/src/__tests__/helpers/mountMasonryFlashList.tsx +0 -70
  284. package/src/__tests__/useBlankAreaTracker.test.tsx +0 -206
  285. package/src/benchmark/useBlankAreaTracker.ts +0 -117
  286. package/src/enableNewCore.ts +0 -24
  287. package/src/errors/CustomError.ts +0 -10
  288. package/src/errors/ExceptionList.ts +0 -28
  289. package/src/errors/Warnings.ts +0 -15
  290. package/src/native/auto-layout/AutoLayoutView.tsx +0 -73
  291. package/src/native/auto-layout/AutoLayoutViewNativeComponent.android.ts +0 -7
  292. package/src/native/auto-layout/AutoLayoutViewNativeComponent.ios.ts +0 -7
  293. package/src/native/auto-layout/AutoLayoutViewNativeComponent.ts +0 -7
  294. package/src/native/auto-layout/AutoLayoutViewNativeComponentProps.ts +0 -17
  295. package/src/native/cell-container/CellContainer.android.ts +0 -7
  296. package/src/native/cell-container/CellContainer.ios.ts +0 -7
  297. package/src/native/cell-container/CellContainer.tsx +0 -14
  298. package/src/native/cell-container/CellContainer.web.tsx +0 -9
  299. package/src/specs/AutoLayoutNativeComponent.ts +0 -24
  300. package/src/specs/CellContainerNativeComponent.ts +0 -9
  301. package/src/utils/ContentContainerUtils.ts +0 -92
  302. /package/dist/{viewability → recyclerview/viewability}/ViewToken.d.ts +0 -0
  303. /package/dist/{viewability → recyclerview/viewability}/ViewToken.js +0 -0
  304. /package/src/{viewability → recyclerview/viewability}/ViewToken.ts +0 -0
@@ -1,70 +0,0 @@
1
- package com.shopify.reactnative.flash_list
2
-
3
- import com.facebook.react.module.annotations.ReactModule
4
- import com.facebook.react.uimanager.ThemedReactContext
5
- import com.facebook.react.uimanager.annotations.ReactProp
6
- import com.facebook.react.uimanager.ViewGroupManager
7
- import com.facebook.react.uimanager.ViewManagerDelegate
8
- import com.facebook.react.viewmanagers.AutoLayoutViewManagerDelegate
9
- import com.facebook.react.viewmanagers.AutoLayoutViewManagerInterface
10
- import kotlin.math.roundToInt
11
-
12
- /** ViewManager for AutoLayoutView - Container for all RecyclerListView children. Automatically removes all gaps and overlaps for GridLayouts with flexible spans.
13
- * Note: This cannot work for masonry layouts i.e, pinterest like layout */
14
- @ReactModule(name = AutoLayoutViewManager.REACT_CLASS)
15
- class AutoLayoutViewManager: ViewGroupManager<AutoLayoutView>(), AutoLayoutViewManagerInterface<AutoLayoutView> {
16
- private val mDelegate: AutoLayoutViewManagerDelegate<AutoLayoutView, AutoLayoutViewManager> =
17
- AutoLayoutViewManagerDelegate(this)
18
-
19
- companion object {
20
- const val REACT_CLASS = "AutoLayoutView"
21
- }
22
-
23
- override fun getName(): String {
24
- return REACT_CLASS
25
- }
26
-
27
- override fun getDelegate(): ViewManagerDelegate<AutoLayoutView> = mDelegate
28
-
29
- override fun createViewInstance(context: ThemedReactContext): AutoLayoutView {
30
- return AutoLayoutView(context).also { it.pixelDensity = context.resources.displayMetrics.density.toDouble() }
31
- }
32
-
33
- override fun getExportedCustomDirectEventTypeConstants() = mutableMapOf(
34
- "onBlankAreaEvent" to mutableMapOf("registrationName" to "onBlankAreaEvent"),
35
- )
36
-
37
- @ReactProp(name = "horizontal")
38
- override fun setHorizontal(view: AutoLayoutView, isHorizontal: Boolean) {
39
- view.alShadow.horizontal = isHorizontal
40
- }
41
-
42
- @ReactProp(name = "disableAutoLayout")
43
- override fun setDisableAutoLayout(view: AutoLayoutView, disableAutoLayout: Boolean) {
44
- view.disableAutoLayout = disableAutoLayout
45
- }
46
-
47
- @ReactProp(name = "scrollOffset")
48
- override fun setScrollOffset(view: AutoLayoutView, scrollOffset: Double) {
49
- view.alShadow.scrollOffset = convertToPixelLayout(scrollOffset, view.pixelDensity)
50
- }
51
-
52
- @ReactProp(name = "windowSize")
53
- override fun setWindowSize(view: AutoLayoutView, windowSize: Double) {
54
- view.alShadow.windowSize = convertToPixelLayout(windowSize, view.pixelDensity)
55
- }
56
-
57
- @ReactProp(name = "renderAheadOffset")
58
- override fun setRenderAheadOffset(view: AutoLayoutView, renderOffset: Double) {
59
- view.alShadow.renderOffset = convertToPixelLayout(renderOffset, view.pixelDensity)
60
- }
61
-
62
- @ReactProp(name = "enableInstrumentation")
63
- override fun setEnableInstrumentation(view: AutoLayoutView, enableInstrumentation: Boolean) {
64
- view.enableInstrumentation = enableInstrumentation
65
- }
66
-
67
- private fun convertToPixelLayout(dp: Double, density: Double): Int {
68
- return (dp * density).roundToInt()
69
- }
70
- }
@@ -1,29 +0,0 @@
1
- @file:Suppress("DEPRECATION") // We want to use RCTEventEmitter for interop purposes
2
- package com.shopify.reactnative.flash_list
3
-
4
- import com.facebook.react.bridge.Arguments
5
- import com.facebook.react.bridge.WritableMap
6
- import com.facebook.react.uimanager.events.Event
7
- import com.facebook.react.uimanager.events.RCTEventEmitter
8
-
9
- class BlankAreaEvent(
10
- surfaceId: Int,
11
- viewTag: Int,
12
- private val offsetStart: Double,
13
- private val offsetEnd: Double
14
- ): Event<BlankAreaEvent>(surfaceId, viewTag) {
15
- override fun getEventName() = EVENT_NAME
16
-
17
- override fun getEventData(): WritableMap = Arguments.createMap().apply {
18
- putDouble("offsetStart", offsetStart)
19
- putDouble("offsetEnd", offsetEnd)
20
- }
21
-
22
- override fun dispatch(rctEventEmitter: RCTEventEmitter) {
23
- rctEventEmitter.receiveEvent(viewTag, eventName, getEventData())
24
- }
25
-
26
- companion object {
27
- const val EVENT_NAME: String = "onBlankAreaEvent"
28
- }
29
- }
@@ -1,16 +0,0 @@
1
- package com.shopify.reactnative.flash_list;
2
-
3
- public interface CellContainer {
4
- void setIndex(int value);
5
- int getIndex();
6
- void setLeft(int value);
7
- int getLeft();
8
- void setTop(int value);
9
- int getTop();
10
- void setRight(int value);
11
- int getRight();
12
- void setBottom(int value);
13
- int getBottom();
14
- int getHeight();
15
- int getWidth();
16
- }
@@ -1,16 +0,0 @@
1
- package com.shopify.reactnative.flash_list
2
-
3
- import android.content.Context
4
- import com.facebook.react.views.view.ReactViewGroup
5
-
6
- class CellContainerImpl(context: Context) : ReactViewGroup(context), CellContainer {
7
- private var index = -1
8
- override fun setIndex(value: Int) {
9
- index = value
10
- }
11
-
12
- override fun getIndex(): Int {
13
- return index
14
- }
15
-
16
- }
@@ -1,34 +0,0 @@
1
- package com.shopify.reactnative.flash_list
2
-
3
- import com.facebook.react.module.annotations.ReactModule
4
- import com.facebook.react.uimanager.ThemedReactContext
5
- import com.facebook.react.uimanager.ViewGroupManager
6
- import com.facebook.react.uimanager.ViewManagerDelegate
7
- import com.facebook.react.uimanager.annotations.ReactProp
8
- import com.facebook.react.viewmanagers.CellContainerManagerDelegate
9
- import com.facebook.react.viewmanagers.CellContainerManagerInterface
10
-
11
- @ReactModule(name = AutoLayoutViewManager.REACT_CLASS)
12
- class CellContainerManager: ViewGroupManager<CellContainerImpl>(), CellContainerManagerInterface<CellContainerImpl> {
13
- private val mDelegate: CellContainerManagerDelegate<CellContainerImpl, CellContainerManager>
14
- = CellContainerManagerDelegate(this)
15
-
16
- companion object {
17
- const val REACT_CLASS = "CellContainer"
18
- }
19
-
20
- override fun getName(): String {
21
- return REACT_CLASS
22
- }
23
-
24
- override fun getDelegate(): ViewManagerDelegate<CellContainerImpl> = mDelegate
25
-
26
- override fun createViewInstance(context: ThemedReactContext): CellContainerImpl {
27
- return CellContainerImpl(context)
28
- }
29
-
30
- @ReactProp(name = "index")
31
- override fun setIndex(view: CellContainerImpl, index: Int) {
32
- view.index = index
33
- }
34
- }
@@ -1,19 +0,0 @@
1
- package com.shopify.reactnative.flash_list
2
-
3
- import com.facebook.react.ReactPackage
4
- import com.facebook.react.bridge.NativeModule
5
- import com.facebook.react.bridge.ReactApplicationContext
6
- import com.facebook.react.uimanager.ViewManager
7
-
8
- class ReactNativeFlashListPackage : ReactPackage {
9
- override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
10
- return listOf()
11
- }
12
-
13
- override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
14
- return listOf(
15
- AutoLayoutViewManager(),
16
- CellContainerManager()
17
- )
18
- }
19
- }
@@ -1,47 +0,0 @@
1
- /**
2
- * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
- *
4
- * Do not edit this file as changes may cause incorrect behavior and will be lost
5
- * once the code is regenerated.
6
- *
7
- * @generated by codegen project: GeneratePropsJavaDelegate.js
8
- */
9
-
10
- package com.facebook.react.viewmanagers;
11
-
12
- import android.view.View;
13
- import androidx.annotation.Nullable;
14
- import com.facebook.react.uimanager.BaseViewManager;
15
- import com.facebook.react.uimanager.BaseViewManagerDelegate;
16
- import com.facebook.react.uimanager.LayoutShadowNode;
17
-
18
- public class AutoLayoutViewManagerDelegate<T extends View, U extends BaseViewManager<T, ? extends LayoutShadowNode> & AutoLayoutViewManagerInterface<T>> extends BaseViewManagerDelegate<T, U> {
19
- public AutoLayoutViewManagerDelegate(U viewManager) {
20
- super(viewManager);
21
- }
22
- @Override
23
- public void setProperty(T view, String propName, @Nullable Object value) {
24
- switch (propName) {
25
- case "horizontal":
26
- mViewManager.setHorizontal(view, value == null ? false : (boolean) value);
27
- break;
28
- case "scrollOffset":
29
- mViewManager.setScrollOffset(view, value == null ? 0f : ((Double) value).doubleValue());
30
- break;
31
- case "windowSize":
32
- mViewManager.setWindowSize(view, value == null ? 0f : ((Double) value).doubleValue());
33
- break;
34
- case "renderAheadOffset":
35
- mViewManager.setRenderAheadOffset(view, value == null ? 0f : ((Double) value).doubleValue());
36
- break;
37
- case "enableInstrumentation":
38
- mViewManager.setEnableInstrumentation(view, value == null ? false : (boolean) value);
39
- break;
40
- case "disableAutoLayout":
41
- mViewManager.setDisableAutoLayout(view, value == null ? false : (boolean) value);
42
- break;
43
- default:
44
- super.setProperty(view, propName, value);
45
- }
46
- }
47
- }
@@ -1,21 +0,0 @@
1
- /**
2
- * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
- *
4
- * Do not edit this file as changes may cause incorrect behavior and will be lost
5
- * once the code is regenerated.
6
- *
7
- * @generated by codegen project: GeneratePropsJavaInterface.js
8
- */
9
-
10
- package com.facebook.react.viewmanagers;
11
-
12
- import android.view.View;
13
-
14
- public interface AutoLayoutViewManagerInterface<T extends View> {
15
- void setHorizontal(T view, boolean value);
16
- void setScrollOffset(T view, double value);
17
- void setWindowSize(T view, double value);
18
- void setRenderAheadOffset(T view, double value);
19
- void setEnableInstrumentation(T view, boolean value);
20
- void setDisableAutoLayout(T view, boolean value);
21
- }
@@ -1,32 +0,0 @@
1
- /**
2
- * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
- *
4
- * Do not edit this file as changes may cause incorrect behavior and will be lost
5
- * once the code is regenerated.
6
- *
7
- * @generated by codegen project: GeneratePropsJavaDelegate.js
8
- */
9
-
10
- package com.facebook.react.viewmanagers;
11
-
12
- import android.view.View;
13
- import androidx.annotation.Nullable;
14
- import com.facebook.react.uimanager.BaseViewManager;
15
- import com.facebook.react.uimanager.BaseViewManagerDelegate;
16
- import com.facebook.react.uimanager.LayoutShadowNode;
17
-
18
- public class CellContainerManagerDelegate<T extends View, U extends BaseViewManager<T, ? extends LayoutShadowNode> & CellContainerManagerInterface<T>> extends BaseViewManagerDelegate<T, U> {
19
- public CellContainerManagerDelegate(U viewManager) {
20
- super(viewManager);
21
- }
22
- @Override
23
- public void setProperty(T view, String propName, @Nullable Object value) {
24
- switch (propName) {
25
- case "index":
26
- mViewManager.setIndex(view, value == null ? 0 : ((Double) value).intValue());
27
- break;
28
- default:
29
- super.setProperty(view, propName, value);
30
- }
31
- }
32
- }
@@ -1,16 +0,0 @@
1
- /**
2
- * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
- *
4
- * Do not edit this file as changes may cause incorrect behavior and will be lost
5
- * once the code is regenerated.
6
- *
7
- * @generated by codegen project: GeneratePropsJavaInterface.js
8
- */
9
-
10
- package com.facebook.react.viewmanagers;
11
-
12
- import android.view.View;
13
-
14
- public interface CellContainerManagerInterface<T extends View> {
15
- void setIndex(T view, int value);
16
- }
@@ -1,147 +0,0 @@
1
- package com.shopify.reactnative.flash_list
2
-
3
- import com.google.gson.Gson
4
- import com.shopify.reactnative.flash_list.models.Rect
5
- import com.shopify.reactnative.flash_list.models.TestDataModel
6
- import org.junit.Assert.assertEquals
7
- import org.junit.Test
8
-
9
- internal class AutoLayoutShadowTest {
10
- private val gson = Gson()
11
-
12
- /**
13
- * Test against expected output from stored JSON */
14
- @Test
15
- fun clearGapsAndOverlapsVerticalList() {
16
- val alShadow = getAutolayoutShadow(0)
17
- val testModel = getTestModel()
18
- testModel.vertical.forEachIndexed { index, it ->
19
- alShadow.clearGapsAndOverlaps(it.input as Array<CellContainer>)
20
- assertEquals("Index: $index", gson.toJson(it.expectedOutput), gson.toJson(it.input))
21
- }
22
- }
23
-
24
- /**
25
- * Test against expected output from stored JSON */
26
- @Test
27
- fun clearGapsAndOverlapsHorizontalList() {
28
- val alShadow = getAutolayoutShadow(0)
29
- alShadow.horizontal = true
30
- val testModel = getTestModel()
31
- testModel.horizontal.forEachIndexed { index, it ->
32
- alShadow.clearGapsAndOverlaps(it.input as Array<CellContainer>)
33
- assertEquals("Index: $index", gson.toJson(it.expectedOutput), gson.toJson(it.input))
34
- }
35
- }
36
-
37
- /**
38
- * Test against expected output from stored JSON */
39
- @Test
40
- fun clearGapsAndOverlapsWindowSize() {
41
- val alShadow = getAutolayoutShadow(0)
42
- alShadow.horizontal = true
43
- alShadow.windowSize = 90
44
- val testModel = getTestModel()
45
- testModel.window.forEachIndexed { index, it ->
46
- alShadow.clearGapsAndOverlaps(it.input as Array<CellContainer>)
47
- assertEquals("Index: $index", gson.toJson(it.expectedOutput), gson.toJson(it.input))
48
- }
49
- }
50
-
51
- /**
52
- * Should only correct items in the visible window*/
53
- @Test
54
- fun clearGapsAndOverlapsBoundaryTest() {
55
- val alShadow = getAutolayoutShadow(300)
56
- alShadow.renderOffset = 100
57
-
58
- //--------- Vertical -----------
59
- //Item above visible window
60
- arrayOf<CellContainer>(getRect(0, 0, 100, 100, 0), getRect(120, 0, 100, 100, 1)).let {
61
- alShadow.clearGapsAndOverlaps(it)
62
- assertEquals(120, it[1].left)
63
- }
64
-
65
- //Item below visible window
66
- arrayOf<CellContainer>(getRect(0, 0, 100, 100, 0), getRect(120, 850, 100, 950, 1)).let {
67
- alShadow.clearGapsAndOverlaps(it)
68
- assertEquals(850, it[1].top)
69
- }
70
-
71
- //Item within visible window
72
- arrayOf<CellContainer>(getRect(0, 250, 100, 100, 0), getRect(120, 250, 100, 100, 1)).let {
73
- alShadow.clearGapsAndOverlaps(it)
74
- assertEquals(100, it[1].left)
75
- }
76
-
77
- //At the top edge
78
- arrayOf<CellContainer>(getRect(0, 200, 100, 100, 0), getRect(120, 200, 100, 100, 1)).let {
79
- alShadow.clearGapsAndOverlaps(it)
80
- assertEquals(100, it[1].left)
81
- }
82
-
83
- //--------- Horizontal -----------
84
-
85
- alShadow.horizontal = true
86
-
87
- //Item left of visible window
88
- arrayOf<CellContainer>(getRect(0, 0, 100, 100, 0), getRect(0, 120, 100, 100, 1)).let {
89
- alShadow.clearGapsAndOverlaps(it)
90
- assertEquals(120, it[1].top)
91
- }
92
-
93
- //Item right of visible window
94
- arrayOf<CellContainer>(getRect(0, 0, 100, 100, 0), getRect(850, 120, 950, 220, 1)).let {
95
- alShadow.clearGapsAndOverlaps(it)
96
- assertEquals(120, it[1].top)
97
- }
98
-
99
- //Item within visible window
100
- arrayOf<CellContainer>(getRect(250, 0, 100, 100, 0), getRect(250, 120, 100, 100, 1)).let {
101
- alShadow.clearGapsAndOverlaps(it)
102
- assertEquals(100, it[1].top)
103
- }
104
-
105
- //At the left edge
106
- arrayOf<CellContainer>(getRect(200, 0, 100, 100, 0), getRect(250, 150, 100, 100, 1)).let {
107
- alShadow.clearGapsAndOverlaps(it)
108
- assertEquals(100, it[1].top)
109
- }
110
- }
111
-
112
- @Test
113
- fun checkBlankForLastItem() {
114
- val alShadow = getAutolayoutShadow(0)
115
- val testModel = getTestModel()
116
- testModel.vertical.forEachIndexed { index, it ->
117
- alShadow.clearGapsAndOverlaps(it.input as Array<CellContainer>)
118
- it.expectedOutput.map { value -> value.bottom }.maxOrNull()?.let { max ->
119
- alShadow.computeBlankFromGivenOffset(0, 0, 0)
120
- assertEquals("Index: $index", alShadow.windowSize - max, alShadow.blankOffsetAtEnd)
121
- }
122
- }
123
- }
124
-
125
- private fun getTestModel(): TestDataModel {
126
- var str = this.javaClass.classLoader.getResource("LayoutTestData.json").readText()
127
- return gson.fromJson<TestDataModel>(str, TestDataModel::class.java)
128
- }
129
-
130
- private fun getRect(l: Int, t: Int, r: Int, b: Int, index: Int): Rect {
131
- var rect = Rect(b - t, r - l)
132
- rect.left = l
133
- rect.right = r
134
- rect.bottom = b
135
- rect.top = t
136
- rect.index = index
137
- return rect
138
- }
139
-
140
- private fun getAutolayoutShadow(offset: Int): AutoLayoutShadow {
141
- val alShadow = AutoLayoutShadow()
142
- alShadow.windowSize = 500
143
- alShadow.renderOffset = 0
144
- alShadow.scrollOffset = offset
145
- return alShadow
146
- }
147
- }
@@ -1,61 +0,0 @@
1
- package com.shopify.reactnative.flash_list.models
2
-
3
- import com.shopify.reactnative.flash_list.CellContainer
4
-
5
- class Rect (h: Int? = 0, w: Int? = 0): CellContainer {
6
- private var left = 0
7
- private var right = 0
8
- private var top = 0
9
- private var bottom = 0
10
- private var height = 0
11
- private var width = 0
12
- private var index = 0
13
-
14
- override fun setIndex(value: Int) {
15
- index = value
16
- }
17
-
18
- override fun getIndex(): Int {
19
- return index
20
- }
21
-
22
- override fun setLeft(value: Int) {
23
- left = value
24
- }
25
-
26
- override fun getLeft(): Int {
27
- return left
28
- }
29
-
30
- override fun setTop(value: Int) {
31
- top = value
32
- }
33
-
34
- override fun getTop(): Int {
35
- return top
36
- }
37
-
38
- override fun setRight(value: Int) {
39
- right = value
40
- }
41
-
42
- override fun getRight(): Int {
43
- return right
44
- }
45
-
46
- override fun setBottom(value: Int) {
47
- bottom = value
48
- }
49
-
50
- override fun getBottom(): Int {
51
- return bottom
52
- }
53
-
54
- override fun getHeight(): Int {
55
- return height
56
- }
57
-
58
- override fun getWidth(): Int {
59
- return width
60
- }
61
- }
@@ -1,6 +0,0 @@
1
- package com.shopify.reactnative.flash_list.models
2
-
3
- class TestCollection {
4
- lateinit var input: Array<Rect>
5
- lateinit var expectedOutput: Array<Rect>
6
- }
@@ -1,8 +0,0 @@
1
- package com.shopify.reactnative.flash_list.models
2
-
3
-
4
- class TestDataModel {
5
- lateinit var vertical: Array<TestCollection>
6
- lateinit var horizontal: Array<TestCollection>
7
- lateinit var window: Array<TestCollection>
8
- }