@depup/react-virtualized 9.22.6-depup.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 (254) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +34 -0
  3. package/changes.json +22 -0
  4. package/dist/commonjs/ArrowKeyStepper/ArrowKeyStepper.example.js +184 -0
  5. package/dist/commonjs/ArrowKeyStepper/ArrowKeyStepper.jest.js +338 -0
  6. package/dist/commonjs/ArrowKeyStepper/ArrowKeyStepper.js +204 -0
  7. package/dist/commonjs/ArrowKeyStepper/index.js +19 -0
  8. package/dist/commonjs/ArrowKeyStepper/types.js +5 -0
  9. package/dist/commonjs/AutoSizer/AutoSizer.example.js +104 -0
  10. package/dist/commonjs/AutoSizer/AutoSizer.jest.js +341 -0
  11. package/dist/commonjs/AutoSizer/AutoSizer.js +199 -0
  12. package/dist/commonjs/AutoSizer/AutoSizer.ssr.js +25 -0
  13. package/dist/commonjs/AutoSizer/index.js +19 -0
  14. package/dist/commonjs/CellMeasurer/CellMeasurer.DynamicHeightGrid.example.js +100 -0
  15. package/dist/commonjs/CellMeasurer/CellMeasurer.DynamicHeightList.example.js +99 -0
  16. package/dist/commonjs/CellMeasurer/CellMeasurer.DynamicHeightTableColumn.example.js +107 -0
  17. package/dist/commonjs/CellMeasurer/CellMeasurer.DynamicWidthGrid.example.js +102 -0
  18. package/dist/commonjs/CellMeasurer/CellMeasurer.DynamicWidthMultiGrid.example.js +107 -0
  19. package/dist/commonjs/CellMeasurer/CellMeasurer.example.js +129 -0
  20. package/dist/commonjs/CellMeasurer/CellMeasurer.jest.js +345 -0
  21. package/dist/commonjs/CellMeasurer/CellMeasurer.js +195 -0
  22. package/dist/commonjs/CellMeasurer/CellMeasurerCache.jest.js +298 -0
  23. package/dist/commonjs/CellMeasurer/CellMeasurerCache.js +202 -0
  24. package/dist/commonjs/CellMeasurer/index.js +22 -0
  25. package/dist/commonjs/CellMeasurer/types.js +14 -0
  26. package/dist/commonjs/Collection/Collection.example.js +231 -0
  27. package/dist/commonjs/Collection/Collection.jest.js +829 -0
  28. package/dist/commonjs/Collection/Collection.js +266 -0
  29. package/dist/commonjs/Collection/CollectionView.js +553 -0
  30. package/dist/commonjs/Collection/Section.jest.js +63 -0
  31. package/dist/commonjs/Collection/Section.js +57 -0
  32. package/dist/commonjs/Collection/SectionManager.jest.js +121 -0
  33. package/dist/commonjs/Collection/SectionManager.js +134 -0
  34. package/dist/commonjs/Collection/TestData.js +77 -0
  35. package/dist/commonjs/Collection/index.js +15 -0
  36. package/dist/commonjs/Collection/types.js +22 -0
  37. package/dist/commonjs/Collection/utils/calculateSizeAndPositionData.jest.js +34 -0
  38. package/dist/commonjs/Collection/utils/calculateSizeAndPositionData.js +38 -0
  39. package/dist/commonjs/ColumnSizer/ColumnSizer.example.js +159 -0
  40. package/dist/commonjs/ColumnSizer/ColumnSizer.jest.js +129 -0
  41. package/dist/commonjs/ColumnSizer/ColumnSizer.js +103 -0
  42. package/dist/commonjs/ColumnSizer/index.js +15 -0
  43. package/dist/commonjs/Grid/Grid.example.js +330 -0
  44. package/dist/commonjs/Grid/Grid.jest.js +2561 -0
  45. package/dist/commonjs/Grid/Grid.js +1432 -0
  46. package/dist/commonjs/Grid/Grid.ssr.js +62 -0
  47. package/dist/commonjs/Grid/accessibilityOverscanIndicesGetter.jest.js +92 -0
  48. package/dist/commonjs/Grid/accessibilityOverscanIndicesGetter.js +40 -0
  49. package/dist/commonjs/Grid/defaultCellRangeRenderer.js +139 -0
  50. package/dist/commonjs/Grid/defaultOverscanIndicesGetter.jest.js +92 -0
  51. package/dist/commonjs/Grid/defaultOverscanIndicesGetter.js +36 -0
  52. package/dist/commonjs/Grid/index.js +40 -0
  53. package/dist/commonjs/Grid/types.js +8 -0
  54. package/dist/commonjs/Grid/utils/CellSizeAndPositionManager.jest.js +375 -0
  55. package/dist/commonjs/Grid/utils/CellSizeAndPositionManager.js +296 -0
  56. package/dist/commonjs/Grid/utils/ScalingCellSizeAndPositionManager.jest.js +201 -0
  57. package/dist/commonjs/Grid/utils/ScalingCellSizeAndPositionManager.js +204 -0
  58. package/dist/commonjs/Grid/utils/calculateSizeAndPositionDataAndUpdateScrollOffset.jest.js +84 -0
  59. package/dist/commonjs/Grid/utils/calculateSizeAndPositionDataAndUpdateScrollOffset.js +59 -0
  60. package/dist/commonjs/Grid/utils/maxElementSize.js +22 -0
  61. package/dist/commonjs/Grid/utils/updateScrollIndexHelper.jest.js +180 -0
  62. package/dist/commonjs/Grid/utils/updateScrollIndexHelper.js +85 -0
  63. package/dist/commonjs/InfiniteLoader/InfiniteLoader.example.js +179 -0
  64. package/dist/commonjs/InfiniteLoader/InfiniteLoader.jest.js +571 -0
  65. package/dist/commonjs/InfiniteLoader/InfiniteLoader.js +274 -0
  66. package/dist/commonjs/InfiniteLoader/index.js +15 -0
  67. package/dist/commonjs/List/List.example.js +236 -0
  68. package/dist/commonjs/List/List.jest.js +517 -0
  69. package/dist/commonjs/List/List.js +318 -0
  70. package/dist/commonjs/List/index.js +19 -0
  71. package/dist/commonjs/List/types.js +6 -0
  72. package/dist/commonjs/Masonry/Masonry.example.js +287 -0
  73. package/dist/commonjs/Masonry/Masonry.jest.js +450 -0
  74. package/dist/commonjs/Masonry/Masonry.js +431 -0
  75. package/dist/commonjs/Masonry/PositionCache.js +88 -0
  76. package/dist/commonjs/Masonry/createCellPositioner.js +59 -0
  77. package/dist/commonjs/Masonry/index.js +22 -0
  78. package/dist/commonjs/MultiGrid/CellMeasurerCacheDecorator.js +106 -0
  79. package/dist/commonjs/MultiGrid/MultiGrid.example.js +131 -0
  80. package/dist/commonjs/MultiGrid/MultiGrid.jest.js +584 -0
  81. package/dist/commonjs/MultiGrid/MultiGrid.js +743 -0
  82. package/dist/commonjs/MultiGrid/index.js +15 -0
  83. package/dist/commonjs/ScrollSync/ScrollSync.example.js +257 -0
  84. package/dist/commonjs/ScrollSync/ScrollSync.jest.js +66 -0
  85. package/dist/commonjs/ScrollSync/ScrollSync.js +88 -0
  86. package/dist/commonjs/ScrollSync/index.js +15 -0
  87. package/dist/commonjs/Table/Column.jest.js +90 -0
  88. package/dist/commonjs/Table/Column.js +93 -0
  89. package/dist/commonjs/Table/SortDirection.js +19 -0
  90. package/dist/commonjs/Table/SortIndicator.js +40 -0
  91. package/dist/commonjs/Table/Table.example.js +325 -0
  92. package/dist/commonjs/Table/Table.jest.js +1257 -0
  93. package/dist/commonjs/Table/Table.js +742 -0
  94. package/dist/commonjs/Table/createMultiSort.jest.js +165 -0
  95. package/dist/commonjs/Table/createMultiSort.js +99 -0
  96. package/dist/commonjs/Table/defaultCellDataGetter.js +21 -0
  97. package/dist/commonjs/Table/defaultCellRenderer.js +19 -0
  98. package/dist/commonjs/Table/defaultHeaderRenderer.js +35 -0
  99. package/dist/commonjs/Table/defaultHeaderRowRenderer.js +21 -0
  100. package/dist/commonjs/Table/defaultRowRenderer.js +87 -0
  101. package/dist/commonjs/Table/index.js +78 -0
  102. package/dist/commonjs/Table/types.js +39 -0
  103. package/dist/commonjs/WindowScroller/WindowScroller.e2e.js +298 -0
  104. package/dist/commonjs/WindowScroller/WindowScroller.example.js +167 -0
  105. package/dist/commonjs/WindowScroller/WindowScroller.header-resize.e2e.js +359 -0
  106. package/dist/commonjs/WindowScroller/WindowScroller.jest.js +536 -0
  107. package/dist/commonjs/WindowScroller/WindowScroller.js +268 -0
  108. package/dist/commonjs/WindowScroller/WindowScroller.ssr.js +25 -0
  109. package/dist/commonjs/WindowScroller/index.js +23 -0
  110. package/dist/commonjs/WindowScroller/utils/dimensions.js +89 -0
  111. package/dist/commonjs/WindowScroller/utils/onScroll.js +70 -0
  112. package/dist/commonjs/index.js +180 -0
  113. package/dist/commonjs/jest-setup.js +7 -0
  114. package/dist/commonjs/utils/TestHelper.js +36 -0
  115. package/dist/commonjs/utils/animationFrame.js +29 -0
  116. package/dist/commonjs/utils/createCallbackMemoizer.jest.js +219 -0
  117. package/dist/commonjs/utils/createCallbackMemoizer.js +31 -0
  118. package/dist/commonjs/utils/getUpdatedOffsetForIndex.jest.js +68 -0
  119. package/dist/commonjs/utils/getUpdatedOffsetForIndex.js +38 -0
  120. package/dist/commonjs/utils/initCellMetadata.js +37 -0
  121. package/dist/commonjs/utils/requestAnimationTimeout.js +38 -0
  122. package/dist/commonjs/vendor/binarySearchBounds.js +200 -0
  123. package/dist/commonjs/vendor/detectElementResize.js +192 -0
  124. package/dist/commonjs/vendor/intervalTree.js +361 -0
  125. package/dist/es/ArrowKeyStepper/ArrowKeyStepper.example.js +176 -0
  126. package/dist/es/ArrowKeyStepper/ArrowKeyStepper.jest.js +332 -0
  127. package/dist/es/ArrowKeyStepper/ArrowKeyStepper.js +197 -0
  128. package/dist/es/ArrowKeyStepper/index.js +3 -0
  129. package/dist/es/ArrowKeyStepper/types.js +4 -0
  130. package/dist/es/AutoSizer/AutoSizer.example.js +96 -0
  131. package/dist/es/AutoSizer/AutoSizer.jest.js +335 -0
  132. package/dist/es/AutoSizer/AutoSizer.js +190 -0
  133. package/dist/es/AutoSizer/AutoSizer.js.flow +200 -0
  134. package/dist/es/AutoSizer/AutoSizer.ssr.js +19 -0
  135. package/dist/es/AutoSizer/index.js +2 -0
  136. package/dist/es/AutoSizer/index.js.flow +4 -0
  137. package/dist/es/CellMeasurer/CellMeasurer.DynamicHeightGrid.example.js +91 -0
  138. package/dist/es/CellMeasurer/CellMeasurer.DynamicHeightList.example.js +90 -0
  139. package/dist/es/CellMeasurer/CellMeasurer.DynamicHeightTableColumn.example.js +98 -0
  140. package/dist/es/CellMeasurer/CellMeasurer.DynamicWidthGrid.example.js +93 -0
  141. package/dist/es/CellMeasurer/CellMeasurer.DynamicWidthMultiGrid.example.js +98 -0
  142. package/dist/es/CellMeasurer/CellMeasurer.example.js +120 -0
  143. package/dist/es/CellMeasurer/CellMeasurer.jest.js +340 -0
  144. package/dist/es/CellMeasurer/CellMeasurer.js +187 -0
  145. package/dist/es/CellMeasurer/CellMeasurerCache.jest.js +293 -0
  146. package/dist/es/CellMeasurer/CellMeasurerCache.js +196 -0
  147. package/dist/es/CellMeasurer/index.js +4 -0
  148. package/dist/es/CellMeasurer/types.js +13 -0
  149. package/dist/es/Collection/Collection.example.js +223 -0
  150. package/dist/es/Collection/Collection.jest.js +824 -0
  151. package/dist/es/Collection/Collection.js +257 -0
  152. package/dist/es/Collection/CollectionView.js +544 -0
  153. package/dist/es/Collection/Section.jest.js +60 -0
  154. package/dist/es/Collection/Section.js +51 -0
  155. package/dist/es/Collection/SectionManager.jest.js +118 -0
  156. package/dist/es/Collection/SectionManager.js +128 -0
  157. package/dist/es/Collection/TestData.js +71 -0
  158. package/dist/es/Collection/index.js +3 -0
  159. package/dist/es/Collection/types.js +21 -0
  160. package/dist/es/Collection/utils/calculateSizeAndPositionData.jest.js +31 -0
  161. package/dist/es/Collection/utils/calculateSizeAndPositionData.js +31 -0
  162. package/dist/es/ColumnSizer/ColumnSizer.example.js +150 -0
  163. package/dist/es/ColumnSizer/ColumnSizer.jest.js +123 -0
  164. package/dist/es/ColumnSizer/ColumnSizer.js +95 -0
  165. package/dist/es/ColumnSizer/index.js +3 -0
  166. package/dist/es/Grid/Grid.example.js +321 -0
  167. package/dist/es/Grid/Grid.jest.js +2555 -0
  168. package/dist/es/Grid/Grid.js +1425 -0
  169. package/dist/es/Grid/Grid.ssr.js +57 -0
  170. package/dist/es/Grid/accessibilityOverscanIndicesGetter.jest.js +87 -0
  171. package/dist/es/Grid/accessibilityOverscanIndicesGetter.js +33 -0
  172. package/dist/es/Grid/defaultCellRangeRenderer.js +134 -0
  173. package/dist/es/Grid/defaultOverscanIndicesGetter.jest.js +87 -0
  174. package/dist/es/Grid/defaultOverscanIndicesGetter.js +29 -0
  175. package/dist/es/Grid/index.js +15 -0
  176. package/dist/es/Grid/types.js +96 -0
  177. package/dist/es/Grid/utils/CellSizeAndPositionManager.jest.js +372 -0
  178. package/dist/es/Grid/utils/CellSizeAndPositionManager.js +290 -0
  179. package/dist/es/Grid/utils/ScalingCellSizeAndPositionManager.jest.js +198 -0
  180. package/dist/es/Grid/utils/ScalingCellSizeAndPositionManager.js +198 -0
  181. package/dist/es/Grid/utils/calculateSizeAndPositionDataAndUpdateScrollOffset.jest.js +81 -0
  182. package/dist/es/Grid/utils/calculateSizeAndPositionDataAndUpdateScrollOffset.js +53 -0
  183. package/dist/es/Grid/utils/maxElementSize.js +16 -0
  184. package/dist/es/Grid/utils/updateScrollIndexHelper.jest.js +174 -0
  185. package/dist/es/Grid/utils/updateScrollIndexHelper.js +79 -0
  186. package/dist/es/InfiniteLoader/InfiniteLoader.example.js +170 -0
  187. package/dist/es/InfiniteLoader/InfiniteLoader.jest.js +565 -0
  188. package/dist/es/InfiniteLoader/InfiniteLoader.js +263 -0
  189. package/dist/es/InfiniteLoader/index.js +3 -0
  190. package/dist/es/List/List.example.js +227 -0
  191. package/dist/es/List/List.jest.js +511 -0
  192. package/dist/es/List/List.js +312 -0
  193. package/dist/es/List/index.js +3 -0
  194. package/dist/es/List/types.js +21 -0
  195. package/dist/es/Masonry/Masonry.example.js +278 -0
  196. package/dist/es/Masonry/Masonry.jest.js +444 -0
  197. package/dist/es/Masonry/Masonry.js +421 -0
  198. package/dist/es/Masonry/PositionCache.js +82 -0
  199. package/dist/es/Masonry/createCellPositioner.js +53 -0
  200. package/dist/es/Masonry/index.js +4 -0
  201. package/dist/es/MultiGrid/CellMeasurerCacheDecorator.js +100 -0
  202. package/dist/es/MultiGrid/MultiGrid.example.js +122 -0
  203. package/dist/es/MultiGrid/MultiGrid.jest.js +579 -0
  204. package/dist/es/MultiGrid/MultiGrid.js +733 -0
  205. package/dist/es/MultiGrid/index.js +3 -0
  206. package/dist/es/ScrollSync/ScrollSync.example.js +248 -0
  207. package/dist/es/ScrollSync/ScrollSync.jest.js +60 -0
  208. package/dist/es/ScrollSync/ScrollSync.js +80 -0
  209. package/dist/es/ScrollSync/index.js +3 -0
  210. package/dist/es/Table/Column.jest.js +84 -0
  211. package/dist/es/Table/Column.js +85 -0
  212. package/dist/es/Table/SortDirection.js +13 -0
  213. package/dist/es/Table/SortIndicator.js +31 -0
  214. package/dist/es/Table/Table.example.js +316 -0
  215. package/dist/es/Table/Table.jest.js +1251 -0
  216. package/dist/es/Table/Table.js +735 -0
  217. package/dist/es/Table/createMultiSort.jest.js +162 -0
  218. package/dist/es/Table/createMultiSort.js +93 -0
  219. package/dist/es/Table/defaultCellDataGetter.js +15 -0
  220. package/dist/es/Table/defaultCellRenderer.js +13 -0
  221. package/dist/es/Table/defaultHeaderRenderer.js +25 -0
  222. package/dist/es/Table/defaultHeaderRowRenderer.js +12 -0
  223. package/dist/es/Table/defaultRowRenderer.js +77 -0
  224. package/dist/es/Table/index.js +12 -0
  225. package/dist/es/Table/types.js +38 -0
  226. package/dist/es/WindowScroller/WindowScroller.e2e.js +295 -0
  227. package/dist/es/WindowScroller/WindowScroller.example.js +158 -0
  228. package/dist/es/WindowScroller/WindowScroller.header-resize.e2e.js +356 -0
  229. package/dist/es/WindowScroller/WindowScroller.jest.js +530 -0
  230. package/dist/es/WindowScroller/WindowScroller.js +259 -0
  231. package/dist/es/WindowScroller/WindowScroller.js.flow +277 -0
  232. package/dist/es/WindowScroller/WindowScroller.ssr.js +19 -0
  233. package/dist/es/WindowScroller/index.js +3 -0
  234. package/dist/es/WindowScroller/index.js.flow +6 -0
  235. package/dist/es/WindowScroller/utils/dimensions.js +81 -0
  236. package/dist/es/WindowScroller/utils/dimensions.js.flow +91 -0
  237. package/dist/es/WindowScroller/utils/onScroll.js +64 -0
  238. package/dist/es/WindowScroller/utils/onScroll.js.flow +94 -0
  239. package/dist/es/index.js +13 -0
  240. package/dist/es/jest-setup.js +5 -0
  241. package/dist/es/utils/TestHelper.js +30 -0
  242. package/dist/es/utils/animationFrame.js +23 -0
  243. package/dist/es/utils/createCallbackMemoizer.jest.js +216 -0
  244. package/dist/es/utils/createCallbackMemoizer.js +25 -0
  245. package/dist/es/utils/getUpdatedOffsetForIndex.jest.js +65 -0
  246. package/dist/es/utils/getUpdatedOffsetForIndex.js +32 -0
  247. package/dist/es/utils/initCellMetadata.js +31 -0
  248. package/dist/es/utils/requestAnimationTimeout.js +32 -0
  249. package/dist/es/vendor/binarySearchBounds.js +194 -0
  250. package/dist/es/vendor/detectElementResize.js +186 -0
  251. package/dist/es/vendor/intervalTree.js +354 -0
  252. package/dist/umd/react-virtualized.js +4638 -0
  253. package/package.json +188 -0
  254. package/styles.css +80 -0
@@ -0,0 +1,174 @@
1
+ import updateScrollIndexHelper from './updateScrollIndexHelper';
2
+ import CellSizeAndPositionManager from './CellSizeAndPositionManager';
3
+
4
+ // Default cell sizes and offsets for use in shared tests
5
+ export function getCellSizeAndPositionManager(_ref) {
6
+ var _ref$cellCount = _ref.cellCount,
7
+ cellCount = _ref$cellCount === void 0 ? CELL_SIZES.length : _ref$cellCount,
8
+ _ref$estimatedCellSiz = _ref.estimatedCellSize,
9
+ estimatedCellSize = _ref$estimatedCellSiz === void 0 ? 10 : _ref$estimatedCellSiz;
10
+ return new CellSizeAndPositionManager({
11
+ cellCount: cellCount,
12
+ cellSizeGetter: function cellSizeGetter(_ref2) {
13
+ var index = _ref2.index;
14
+ return CELL_SIZES[index % CELL_SIZES.length];
15
+ },
16
+ estimatedCellSize: estimatedCellSize
17
+ });
18
+ }
19
+ var CELL_SIZES = [10,
20
+ // 0: 0..0 (min)
21
+ 20,
22
+ // 1: 0..10
23
+ 15,
24
+ // 2: 0..30
25
+ 10,
26
+ // 3: 5..45
27
+ 15,
28
+ // 4: 20..55
29
+ 30,
30
+ // 5: 50..70
31
+ 20,
32
+ // 6: 70..100
33
+ 10,
34
+ // 7: 80..110
35
+ 30 // 8: 110..110 (max)
36
+ ];
37
+ describe('updateScrollIndexHelper', function () {
38
+ function helper() {
39
+ var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
40
+ _ref3$cellCount = _ref3.cellCount,
41
+ cellCount = _ref3$cellCount === void 0 ? undefined : _ref3$cellCount,
42
+ cellSizeAndPositionManager = _ref3.cellSizeAndPositionManager,
43
+ _ref3$cellSize = _ref3.cellSize,
44
+ cellSize = _ref3$cellSize === void 0 ? 10 : _ref3$cellSize,
45
+ _ref3$previousCellsCo = _ref3.previousCellsCount,
46
+ previousCellsCount = _ref3$previousCellsCo === void 0 ? undefined : _ref3$previousCellsCo,
47
+ _ref3$previousCellSiz = _ref3.previousCellSize,
48
+ previousCellSize = _ref3$previousCellSiz === void 0 ? 10 : _ref3$previousCellSiz,
49
+ _ref3$previousScrollT = _ref3.previousScrollToAlignment,
50
+ previousScrollToAlignment = _ref3$previousScrollT === void 0 ? 'auto' : _ref3$previousScrollT,
51
+ previousScrollToIndex = _ref3.previousScrollToIndex,
52
+ _ref3$previousSize = _ref3.previousSize,
53
+ previousSize = _ref3$previousSize === void 0 ? 50 : _ref3$previousSize,
54
+ _ref3$scrollOffset = _ref3.scrollOffset,
55
+ scrollOffset = _ref3$scrollOffset === void 0 ? 0 : _ref3$scrollOffset,
56
+ _ref3$scrollToAlignme = _ref3.scrollToAlignment,
57
+ scrollToAlignment = _ref3$scrollToAlignme === void 0 ? 'auto' : _ref3$scrollToAlignme,
58
+ scrollToIndex = _ref3.scrollToIndex,
59
+ _ref3$size = _ref3.size,
60
+ size = _ref3$size === void 0 ? 50 : _ref3$size;
61
+ cellSizeAndPositionManager = cellSizeAndPositionManager || getCellSizeAndPositionManager({
62
+ cellCount: cellCount
63
+ });
64
+ cellCount = cellCount === undefined ? cellSizeAndPositionManager.getCellCount() : cellCount;
65
+ previousCellsCount = previousCellsCount === undefined ? cellCount : previousCellsCount;
66
+ var updateScrollIndexCallbackCalled = false;
67
+ function updateScrollIndexCallback() {
68
+ updateScrollIndexCallbackCalled = true;
69
+ }
70
+ updateScrollIndexHelper({
71
+ cellCount: cellCount,
72
+ cellSizeAndPositionManager: cellSizeAndPositionManager,
73
+ cellSize: cellSize,
74
+ previousCellsCount: previousCellsCount,
75
+ previousCellSize: previousCellSize,
76
+ previousScrollToAlignment: previousScrollToAlignment,
77
+ previousScrollToIndex: previousScrollToIndex,
78
+ previousSize: previousSize,
79
+ scrollOffset: scrollOffset,
80
+ scrollToAlignment: scrollToAlignment,
81
+ scrollToIndex: scrollToIndex,
82
+ size: size,
83
+ updateScrollIndexCallback: updateScrollIndexCallback
84
+ });
85
+ return updateScrollIndexCallbackCalled;
86
+ }
87
+ it('should not call :updateScrollIndexCallback if there is no :scrollToIndex and size has not changed', function () {
88
+ expect(helper()).toEqual(false);
89
+ });
90
+ it('should not call :updateScrollIndexCallback if an invalid :scrollToIndex has been specified', function () {
91
+ expect(helper({
92
+ size: 100,
93
+ previousSize: 50,
94
+ scrollToIndex: -1
95
+ })).toEqual(false);
96
+ });
97
+ it('should call :updateScrollIndexCallback if there is a :scrollToIndex and :size has changed', function () {
98
+ expect(helper({
99
+ cellCount: 100,
100
+ size: 100,
101
+ previousSize: 50,
102
+ scrollToIndex: 10
103
+ })).toEqual(true);
104
+ });
105
+ it('should call :updateScrollIndexCallback if there is a :scrollToIndex and :cellSize has changed', function () {
106
+ expect(helper({
107
+ cellCount: 100,
108
+ cellSize: 15,
109
+ previousCellSize: 20,
110
+ scrollToIndex: 10
111
+ })).toEqual(true);
112
+ });
113
+ it('should call :updateScrollIndexCallback if previous :scrollToIndex has changed', function () {
114
+ expect(helper({
115
+ cellCount: 15,
116
+ previousScrollToIndex: 20,
117
+ scrollToIndex: 10
118
+ })).toEqual(true);
119
+ });
120
+ it('should call :updateScrollIndexCallback if :cellCount has been reduced past the current scroll offset', function () {
121
+ expect(helper({
122
+ previousCellsCount: 100,
123
+ scrollOffset: 510
124
+ })).toEqual(true);
125
+ });
126
+ it('should call :updateScrollIndexCallback if there is no :scrollToIndex but :size has been reduced', function () {
127
+ expect(helper({
128
+ previousSize: 100,
129
+ scrollOffset: 510,
130
+ size: 50
131
+ })).toEqual(true);
132
+ });
133
+ it('should not measure rows if :size or :cellCount have been reduced but only use already measured (or estimated) total size', function () {
134
+ var cellSizeAndPositionManager = {
135
+ getCellCount: function getCellCount() {
136
+ return CELL_SIZES.length;
137
+ },
138
+ getTotalSize: function getTotalSize() {
139
+ return 560;
140
+ }
141
+ };
142
+ expect(helper({
143
+ cellSizeAndPositionManager: cellSizeAndPositionManager,
144
+ previousSize: 100,
145
+ scrollOffset: 510,
146
+ size: 50
147
+ })).toEqual(false);
148
+ });
149
+ it('should not call :updateScrollIndexCallback if there is no :scrollToIndex but :cellCount has been increased', function () {
150
+ expect(helper({
151
+ cellCount: 100,
152
+ previousCellsCount: 50
153
+ })).toEqual(false);
154
+ });
155
+ it('should not call :updateScrollIndexCallback if there is no :scrollToIndex but :size has been increased', function () {
156
+ expect(helper({
157
+ previousSize: 50,
158
+ size: 100
159
+ })).toEqual(false);
160
+ });
161
+ it('should call :updateScrollIndexCallback if :scrollToAlignment has changed', function () {
162
+ expect(helper({
163
+ previousScrollToAlignment: 'start',
164
+ scrollToAlignment: 'end',
165
+ scrollToIndex: 5
166
+ })).toEqual(true);
167
+ });
168
+ it('should not call :updateScrollIndexCallback if :scrollToAlignment has changed but there is no :scrollToIndex', function () {
169
+ expect(helper({
170
+ previousScrollToAlignment: 'start',
171
+ scrollToAlignment: 'end'
172
+ })).toEqual(false);
173
+ });
174
+ });
@@ -0,0 +1,79 @@
1
+ /*:: import type {Alignment, CellSize} from '../types';*/
2
+ import ScalingCellSizeAndPositionManager from './ScalingCellSizeAndPositionManager.js';
3
+
4
+ /**
5
+ * Helper function that determines when to update scroll offsets to ensure that a scroll-to-index remains visible.
6
+ * This function also ensures that the scroll ofset isn't past the last column/row of cells.
7
+ */
8
+ /*:: type Params = {
9
+ // Width or height of cells for the current axis
10
+ cellSize?: CellSize,
11
+
12
+ // Manages size and position metadata of cells
13
+ cellSizeAndPositionManager: ScalingCellSizeAndPositionManager,
14
+
15
+ // Previous number of rows or columns
16
+ previousCellsCount: number,
17
+
18
+ // Previous width or height of cells
19
+ previousCellSize: CellSize,
20
+
21
+ previousScrollToAlignment: Alignment,
22
+
23
+ // Previous scroll-to-index
24
+ previousScrollToIndex: number,
25
+
26
+ // Previous width or height of the virtualized container
27
+ previousSize: number,
28
+
29
+ // Current scrollLeft or scrollTop
30
+ scrollOffset: number,
31
+
32
+ scrollToAlignment: Alignment,
33
+
34
+ // Scroll-to-index
35
+ scrollToIndex: number,
36
+
37
+ // Width or height of the virtualized container
38
+ size: number,
39
+
40
+ sizeJustIncreasedFromZero: boolean,
41
+
42
+ // Callback to invoke with an scroll-to-index value
43
+ updateScrollIndexCallback: (index: number) => void,
44
+ };*/
45
+ export default function updateScrollIndexHelper(_ref /*:: */) {
46
+ var cellSize = _ref /*:: */.cellSize,
47
+ cellSizeAndPositionManager = _ref /*:: */.cellSizeAndPositionManager,
48
+ previousCellsCount = _ref /*:: */.previousCellsCount,
49
+ previousCellSize = _ref /*:: */.previousCellSize,
50
+ previousScrollToAlignment = _ref /*:: */.previousScrollToAlignment,
51
+ previousScrollToIndex = _ref /*:: */.previousScrollToIndex,
52
+ previousSize = _ref /*:: */.previousSize,
53
+ scrollOffset = _ref /*:: */.scrollOffset,
54
+ scrollToAlignment = _ref /*:: */.scrollToAlignment,
55
+ scrollToIndex = _ref /*:: */.scrollToIndex,
56
+ size = _ref /*:: */.size,
57
+ sizeJustIncreasedFromZero = _ref /*:: */.sizeJustIncreasedFromZero,
58
+ updateScrollIndexCallback = _ref /*:: */.updateScrollIndexCallback;
59
+ var cellCount = cellSizeAndPositionManager.getCellCount();
60
+ var hasScrollToIndex = scrollToIndex >= 0 && scrollToIndex < cellCount;
61
+ var sizeHasChanged = size !== previousSize || sizeJustIncreasedFromZero || !previousCellSize || typeof cellSize === 'number' && cellSize !== previousCellSize;
62
+
63
+ // If we have a new scroll target OR if height/row-height has changed,
64
+ // We should ensure that the scroll target is visible.
65
+ if (hasScrollToIndex && (sizeHasChanged || scrollToAlignment !== previousScrollToAlignment || scrollToIndex !== previousScrollToIndex)) {
66
+ updateScrollIndexCallback(scrollToIndex);
67
+
68
+ // If we don't have a selected item but list size or number of children have decreased,
69
+ // Make sure we aren't scrolled too far past the current content.
70
+ } else if (!hasScrollToIndex && cellCount > 0 && (size < previousSize || cellCount < previousCellsCount)) {
71
+ // We need to ensure that the current scroll offset is still within the collection's range.
72
+ // To do this, we don't need to measure everything; CellMeasurer would perform poorly.
73
+ // Just check to make sure we're still okay.
74
+ // Only adjust the scroll position if we've scrolled below the last set of rows.
75
+ if (scrollOffset > cellSizeAndPositionManager.getTotalSize() - size) {
76
+ updateScrollIndexCallback(cellCount - 1);
77
+ }
78
+ }
79
+ }
@@ -0,0 +1,170 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/createClass";
3
+ import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
4
+ import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
5
+ import _inherits from "@babel/runtime/helpers/inherits";
6
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
7
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
8
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
9
+ import * as React from 'react';
10
+ import PropTypes from 'prop-types';
11
+ import { ContentBox, ContentBoxHeader, ContentBoxParagraph } from '../demo/ContentBox';
12
+ import Immutable from 'immutable';
13
+ import AutoSizer from '../AutoSizer';
14
+ import InfiniteLoader from './InfiniteLoader';
15
+ import List from '../List';
16
+ import styles from './InfiniteLoader.example.css';
17
+ var STATUS_LOADING = 1;
18
+ var STATUS_LOADED = 2;
19
+ var InfiniteLoaderExample = /*#__PURE__*/function (_React$PureComponent) {
20
+ function InfiniteLoaderExample(props) {
21
+ var _this;
22
+ _classCallCheck(this, InfiniteLoaderExample);
23
+ _this = _callSuper(this, InfiniteLoaderExample, [props]);
24
+ _this.state = {
25
+ loadedRowCount: 0,
26
+ loadedRowsMap: {},
27
+ loadingRowCount: 0
28
+ };
29
+ _this._timeoutIdMap = {};
30
+ _this._clearData = _this._clearData.bind(_this);
31
+ _this._isRowLoaded = _this._isRowLoaded.bind(_this);
32
+ _this._loadMoreRows = _this._loadMoreRows.bind(_this);
33
+ _this._rowRenderer = _this._rowRenderer.bind(_this);
34
+ return _this;
35
+ }
36
+ _inherits(InfiniteLoaderExample, _React$PureComponent);
37
+ return _createClass(InfiniteLoaderExample, [{
38
+ key: "componentWillUnmount",
39
+ value: function componentWillUnmount() {
40
+ Object.keys(this._timeoutIdMap).forEach(function (timeoutId) {
41
+ clearTimeout(timeoutId);
42
+ });
43
+ }
44
+ }, {
45
+ key: "render",
46
+ value: function render() {
47
+ var _this2 = this;
48
+ var list = this.context.list;
49
+ var _this$state = this.state,
50
+ loadedRowCount = _this$state.loadedRowCount,
51
+ loadingRowCount = _this$state.loadingRowCount;
52
+ return /*#__PURE__*/React.createElement(ContentBox, null, /*#__PURE__*/React.createElement(ContentBoxHeader, {
53
+ text: "InfiniteLoader",
54
+ sourceLink: "https://github.com/bvaughn/react-virtualized/blob/master/source/InfiniteLoader/InfiniteLoader.example.js",
55
+ docsLink: "https://github.com/bvaughn/react-virtualized/blob/master/docs/InfiniteLoader.md"
56
+ }), /*#__PURE__*/React.createElement(ContentBoxParagraph, null, "This component manages just-in-time data fetching to ensure that the all visible rows have been loaded. It also uses a threshold to determine how early to pre-fetch rows (before a user scrolls to them)."), /*#__PURE__*/React.createElement(ContentBoxParagraph, null, /*#__PURE__*/React.createElement("div", {
57
+ className: styles.cacheButtonAndCountRow
58
+ }, /*#__PURE__*/React.createElement("button", {
59
+ className: styles.button,
60
+ onClick: this._clearData
61
+ }, "Flush Cached Data"), /*#__PURE__*/React.createElement("div", {
62
+ className: styles.cacheCountRow
63
+ }, loadingRowCount, " loading, ", loadedRowCount, " loaded"))), /*#__PURE__*/React.createElement(InfiniteLoader, {
64
+ isRowLoaded: this._isRowLoaded,
65
+ loadMoreRows: this._loadMoreRows,
66
+ rowCount: list.size
67
+ }, function (_ref) {
68
+ var onRowsRendered = _ref.onRowsRendered,
69
+ registerChild = _ref.registerChild;
70
+ return /*#__PURE__*/React.createElement(AutoSizer, {
71
+ disableHeight: true
72
+ }, function (_ref2) {
73
+ var width = _ref2.width;
74
+ return /*#__PURE__*/React.createElement(List, {
75
+ ref: registerChild,
76
+ className: styles.List,
77
+ height: 200,
78
+ onRowsRendered: onRowsRendered,
79
+ rowCount: list.size,
80
+ rowHeight: 30,
81
+ rowRenderer: _this2._rowRenderer,
82
+ width: width
83
+ });
84
+ });
85
+ }));
86
+ }
87
+ }, {
88
+ key: "_clearData",
89
+ value: function _clearData() {
90
+ this.setState({
91
+ loadedRowCount: 0,
92
+ loadedRowsMap: {},
93
+ loadingRowCount: 0
94
+ });
95
+ }
96
+ }, {
97
+ key: "_isRowLoaded",
98
+ value: function _isRowLoaded(_ref3) {
99
+ var index = _ref3.index;
100
+ var loadedRowsMap = this.state.loadedRowsMap;
101
+ return !!loadedRowsMap[index]; // STATUS_LOADING or STATUS_LOADED
102
+ }
103
+ }, {
104
+ key: "_loadMoreRows",
105
+ value: function _loadMoreRows(_ref4) {
106
+ var _this3 = this;
107
+ var startIndex = _ref4.startIndex,
108
+ stopIndex = _ref4.stopIndex;
109
+ var _this$state2 = this.state,
110
+ loadedRowsMap = _this$state2.loadedRowsMap,
111
+ loadingRowCount = _this$state2.loadingRowCount;
112
+ var increment = stopIndex - startIndex + 1;
113
+ for (var i = startIndex; i <= stopIndex; i++) {
114
+ loadedRowsMap[i] = STATUS_LOADING;
115
+ }
116
+ this.setState({
117
+ loadingRowCount: loadingRowCount + increment
118
+ });
119
+ var timeoutId = setTimeout(function () {
120
+ var _this3$state = _this3.state,
121
+ loadedRowCount = _this3$state.loadedRowCount,
122
+ loadingRowCount = _this3$state.loadingRowCount;
123
+ delete _this3._timeoutIdMap[timeoutId];
124
+ for (var i = startIndex; i <= stopIndex; i++) {
125
+ loadedRowsMap[i] = STATUS_LOADED;
126
+ }
127
+ _this3.setState({
128
+ loadingRowCount: loadingRowCount - increment,
129
+ loadedRowCount: loadedRowCount + increment
130
+ });
131
+ promiseResolver();
132
+ }, 1000 + Math.round(Math.random() * 2000));
133
+ this._timeoutIdMap[timeoutId] = true;
134
+ var promiseResolver;
135
+ return new Promise(function (resolve) {
136
+ promiseResolver = resolve;
137
+ });
138
+ }
139
+ }, {
140
+ key: "_rowRenderer",
141
+ value: function _rowRenderer(_ref5) {
142
+ var index = _ref5.index,
143
+ key = _ref5.key,
144
+ style = _ref5.style;
145
+ var list = this.context.list;
146
+ var loadedRowsMap = this.state.loadedRowsMap;
147
+ var row = list.get(index);
148
+ var content;
149
+ if (loadedRowsMap[index] === STATUS_LOADED) {
150
+ content = row.name;
151
+ } else {
152
+ content = /*#__PURE__*/React.createElement("div", {
153
+ className: styles.placeholder,
154
+ style: {
155
+ width: row.size
156
+ }
157
+ });
158
+ }
159
+ return /*#__PURE__*/React.createElement("div", {
160
+ className: styles.row,
161
+ key: key,
162
+ style: style
163
+ }, content);
164
+ }
165
+ }]);
166
+ }(React.PureComponent);
167
+ _defineProperty(InfiniteLoaderExample, "contextTypes", {
168
+ list: PropTypes.instanceOf(Immutable.List).isRequired
169
+ });
170
+ export { InfiniteLoaderExample as default };