@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,444 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
+ import * as React from 'react';
6
+ import { findDOMNode } from 'react-dom';
7
+ import { Simulate } from 'react-dom/test-utils';
8
+ import { render } from '../TestUtils';
9
+ import createCellPositionerUtil from './createCellPositioner';
10
+ import Masonry from './Masonry';
11
+ import { CellMeasurer, CellMeasurerCache } from '../CellMeasurer';
12
+ var ALTERNATING_CELL_HEIGHTS = [100, 50, 100, 150];
13
+ var CELL_SIZE_MULTIPLIER = 50;
14
+ var COLUMN_COUNT = 3;
15
+ function assertVisibleCells(rendered, text) {
16
+ expect(Array.from(rendered.querySelectorAll('.cell')).map(function (node) {
17
+ return node.textContent;
18
+ }).sort().join(',')).toEqual(text);
19
+ }
20
+ function createCellMeasurerCache() {
21
+ var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
22
+ return new CellMeasurerCache(_objectSpread({
23
+ defaultHeight: CELL_SIZE_MULTIPLIER,
24
+ defaultWidth: CELL_SIZE_MULTIPLIER,
25
+ fixedWidth: true,
26
+ keyMapper: function keyMapper(index) {
27
+ return index;
28
+ }
29
+ }, props));
30
+ }
31
+ function createCellPositioner(cache) {
32
+ return createCellPositionerUtil({
33
+ cellMeasurerCache: cache,
34
+ columnCount: COLUMN_COUNT,
35
+ columnWidth: CELL_SIZE_MULTIPLIER
36
+ });
37
+ }
38
+ function createCellRenderer(cache, renderCallback) {
39
+ renderCallback = typeof renderCallback === 'function' ? renderCallback : function (index) {
40
+ return index;
41
+ };
42
+ return function cellRenderer(_ref) {
43
+ var index = _ref.index,
44
+ isScrolling = _ref.isScrolling,
45
+ key = _ref.key,
46
+ parent = _ref.parent,
47
+ style = _ref.style;
48
+ var height = ALTERNATING_CELL_HEIGHTS[index % ALTERNATING_CELL_HEIGHTS.length];
49
+ var width = CELL_SIZE_MULTIPLIER;
50
+ return /*#__PURE__*/React.createElement(CellMeasurer, {
51
+ cache: cache,
52
+ index: index,
53
+ key: key,
54
+ parent: parent
55
+ }, /*#__PURE__*/React.createElement("div", {
56
+ className: "cell",
57
+ ref: function ref(_ref2) {
58
+ if (_ref2) {
59
+ // Accounts for the fact that JSDom doesn't support measurements.
60
+ Object.defineProperty(_ref2, 'offsetHeight', {
61
+ configurable: true,
62
+ value: height
63
+ });
64
+ Object.defineProperty(_ref2, 'offsetWidth', {
65
+ configurable: true,
66
+ value: width
67
+ });
68
+ }
69
+ },
70
+ style: _objectSpread(_objectSpread({}, style), {}, {
71
+ minHeight: height,
72
+ minWidth: width
73
+ })
74
+ }, renderCallback(index, {
75
+ index: index,
76
+ isScrolling: isScrolling,
77
+ key: key,
78
+ parent: parent,
79
+ style: style
80
+ })));
81
+ };
82
+ }
83
+ function getMarkup() {
84
+ var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
85
+ var cellMeasurerCache = props.cellMeasurerCache || createCellMeasurerCache();
86
+ return /*#__PURE__*/React.createElement(Masonry, _extends({
87
+ cellCount: 1000,
88
+ cellMeasurerCache: cellMeasurerCache,
89
+ cellPositioner: createCellPositioner(cellMeasurerCache),
90
+ cellRenderer: createCellRenderer(cellMeasurerCache),
91
+ columnCount: COLUMN_COUNT,
92
+ height: CELL_SIZE_MULTIPLIER * 2,
93
+ overscanByPixels: CELL_SIZE_MULTIPLIER,
94
+ width: CELL_SIZE_MULTIPLIER * COLUMN_COUNT
95
+ }, props));
96
+ }
97
+ function simulateScroll(masonry) {
98
+ var scrollTop = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
99
+ var target = {
100
+ scrollTop: scrollTop
101
+ };
102
+ masonry._scrollingContainer = target; // HACK to work around _onScroll target check
103
+
104
+ var masonryNode = findDOMNode(masonry);
105
+ masonryNode.scrollTop = scrollTop;
106
+ Simulate.scroll(masonryNode);
107
+ }
108
+ describe('Masonry', function () {
109
+ beforeEach(render.unmount);
110
+ describe('layout and measuring', function () {
111
+ it('should measure only enough cells required for initial render', function () {
112
+ // avg cell size: CELL_SIZE_MULTIPLIER
113
+ // width: CELL_SIZE_MULTIPLIER * 3
114
+ // height: CELL_SIZE_MULTIPLIER * 2
115
+ // overcsan by: CELL_SIZE_MULTIPLIER
116
+ // Expected to measure 9 cells
117
+ var cellMeasurerCache = createCellMeasurerCache();
118
+ render(getMarkup({
119
+ cellMeasurerCache: cellMeasurerCache
120
+ }));
121
+ for (var i = 0; i <= 8; i++) {
122
+ expect(cellMeasurerCache.has(i)).toBe(true);
123
+ }
124
+ expect(cellMeasurerCache.has(9)).toBe(false);
125
+ });
126
+ it('should not measure cells while scrolling until they are needed', function () {
127
+ // Expected to measure 9 cells
128
+ var cellMeasurerCache = createCellMeasurerCache();
129
+ var renderCallback = jest.fn().mockImplementation(function (index) {
130
+ return index;
131
+ });
132
+ var cellRenderer = createCellRenderer(cellMeasurerCache, renderCallback);
133
+ var rendered = findDOMNode(render(getMarkup({
134
+ cellMeasurerCache: cellMeasurerCache,
135
+ cellRenderer: cellRenderer
136
+ })));
137
+ renderCallback.mockClear();
138
+ // Scroll a little bit, but not so much to require re-measuring
139
+ simulateScroll(rendered, 51);
140
+ // Verify that render was only called enough times to fill view port (no extra for measuring)
141
+ expect(renderCallback).toHaveBeenCalledTimes(9);
142
+ });
143
+ it('should measure additional cells on scroll when it runs out of measured cells', function () {
144
+ var cellMeasurerCache = createCellMeasurerCache();
145
+ var renderCallback = jest.fn().mockImplementation(function (index) {
146
+ return index;
147
+ });
148
+ var cellRenderer = createCellRenderer(cellMeasurerCache, renderCallback);
149
+ var rendered = findDOMNode(render(getMarkup({
150
+ cellRenderer: cellRenderer,
151
+ cellMeasurerCache: cellMeasurerCache
152
+ })));
153
+ expect(cellMeasurerCache.has(9)).toBe(false);
154
+ renderCallback.mockClear();
155
+ simulateScroll(rendered, 101);
156
+ expect(cellMeasurerCache.has(9)).toBe(true);
157
+ expect(cellMeasurerCache.has(10)).toBe(false);
158
+ });
159
+
160
+ // Masonry used to do a render pass for only unmeasured cells,
161
+ // But this resulting in removing (and later re-adding) measured cells from the DOM,
162
+ // Which was bad for performance. See GitHub issue #875
163
+ it('should not remove previously-measured cells when measuring new ones', function () {
164
+ var log = [];
165
+ var cellMeasurerCache = createCellMeasurerCache();
166
+ var renderCallback = function renderCallback(index) {
167
+ log.push(index);
168
+ };
169
+ var cellRenderer = createCellRenderer(cellMeasurerCache, renderCallback);
170
+ var rendered = findDOMNode(render(getMarkup({
171
+ cellMeasurerCache: cellMeasurerCache,
172
+ cellRenderer: cellRenderer
173
+ })));
174
+
175
+ // Expected to have rendered twice:
176
+ // 1st time to measure 9 cells (b'c of esimated size)
177
+ // 2nd time to render and position 9 cells (b'c of actual size)
178
+ expect(log).toHaveLength(18);
179
+ log.splice(0);
180
+ simulateScroll(rendered, 101);
181
+
182
+ // Expected to have rendered twice:
183
+ // 1st time to measure additional cells (based on estimated size)
184
+ // 2nd time to render and position with new cells
185
+ // The 1st render should also have included the pre-measured cells,
186
+ // To prevent them from being removed, recreated, and re-added to the DOM.
187
+ expect(log).toHaveLength(18);
188
+ });
189
+ it('should only render enough cells to fill the viewport', function () {
190
+ var rendered = findDOMNode(render(getMarkup({
191
+ overscanByPixels: 0
192
+ })));
193
+ assertVisibleCells(rendered, '0,1,2,3,4,5');
194
+ simulateScroll(rendered, 51);
195
+ assertVisibleCells(rendered, '0,2,3,4,5,6');
196
+ simulateScroll(rendered, 101);
197
+ assertVisibleCells(rendered, '3,4,5,6,7,8');
198
+ simulateScroll(rendered, 1001);
199
+ assertVisibleCells(rendered, '30,31,32,33,34,35');
200
+ });
201
+ it('should only render enough cells to fill the viewport plus overscanByPixels', function () {
202
+ var rendered = findDOMNode(render(getMarkup({
203
+ overscanByPixels: 100
204
+ })));
205
+ assertVisibleCells(rendered, '0,1,10,11,2,3,4,5,6,7,8,9');
206
+ simulateScroll(rendered, 51);
207
+ assertVisibleCells(rendered, '0,1,10,11,2,3,4,5,6,7,8,9');
208
+ simulateScroll(rendered, 101);
209
+ assertVisibleCells(rendered, '0,1,10,11,2,3,4,5,6,7,8,9');
210
+ simulateScroll(rendered, 1001);
211
+ assertVisibleCells(rendered, '26,27,28,29,30,31,32,33,34,35,36,37');
212
+ });
213
+ it('should still render correctly when autoHeight is true (eg WindowScroller)', function () {
214
+ // Share instances between renders to avoid resetting state in ways we don't intend
215
+ var cellMeasurerCache = createCellMeasurerCache();
216
+ var cellPositioner = createCellPositioner(cellMeasurerCache);
217
+ var rendered = findDOMNode(render(getMarkup({
218
+ autoHeight: true,
219
+ cellMeasurerCache: cellMeasurerCache,
220
+ cellPositioner: cellPositioner
221
+ })));
222
+ assertVisibleCells(rendered, '0,1,2,3,4,5,6,7,8');
223
+ rendered = findDOMNode(render(getMarkup({
224
+ autoHeight: true,
225
+ cellMeasurerCache: cellMeasurerCache,
226
+ cellPositioner: cellPositioner,
227
+ scrollTop: 51
228
+ })));
229
+ assertVisibleCells(rendered, '0,1,2,3,4,5,6,7,8');
230
+ rendered = findDOMNode(render(getMarkup({
231
+ autoHeight: true,
232
+ cellMeasurerCache: cellMeasurerCache,
233
+ cellPositioner: cellPositioner,
234
+ scrollTop: 101
235
+ })));
236
+ assertVisibleCells(rendered, '0,2,3,4,5,6,7,8,9');
237
+ rendered = findDOMNode(render(getMarkup({
238
+ autoHeight: true,
239
+ cellMeasurerCache: cellMeasurerCache,
240
+ cellPositioner: cellPositioner,
241
+ scrollTop: 1001
242
+ })));
243
+ assertVisibleCells(rendered, '27,29,30,31,32,33,34,35,36');
244
+ });
245
+ it('should set right instead of left in a cell styles for rtl row direction', function () {
246
+ // Share instances between renders to avoid resetting state in ways we don't intend
247
+ var cellMeasurerCache = createCellMeasurerCache();
248
+ var cellPositioner = createCellPositioner(cellMeasurerCache);
249
+ var rendered = findDOMNode(render(getMarkup({
250
+ cellMeasurerCache: cellMeasurerCache,
251
+ cellPositioner: cellPositioner,
252
+ rowDirection: 'rtl'
253
+ })));
254
+ Array.from(rendered.querySelectorAll('.cell')).map(function (node) {
255
+ expect(node.style.right).toMatch(/px/);
256
+ });
257
+ });
258
+ it('should consider scroll only of the container element and not of any ancestor element', function () {
259
+ var cellMeasurerCache = createCellMeasurerCache();
260
+ var renderScrollableCell = function renderScrollableCell(index) {
261
+ return /*#__PURE__*/React.createElement("div", {
262
+ style: {
263
+ height: '50px',
264
+ overflow: 'visible'
265
+ },
266
+ id: "scrollable-cell-".concat(index)
267
+ }, /*#__PURE__*/React.createElement("div", {
268
+ style: {
269
+ height: '500px'
270
+ }
271
+ }, index));
272
+ };
273
+ var cellRenderer = createCellRenderer(cellMeasurerCache, renderScrollableCell);
274
+ var rendered = findDOMNode(render(getMarkup({
275
+ overscanByPixels: 0,
276
+ cellMeasurerCache: cellMeasurerCache,
277
+ cellRenderer: cellRenderer
278
+ })));
279
+ assertVisibleCells(rendered, '0,1,2,3,4,5');
280
+ var cellEl = rendered.querySelector('#scrollable-cell-1');
281
+ Simulate.scroll(cellEl, {
282
+ target: {
283
+ scrollTop: 100
284
+ }
285
+ });
286
+ assertVisibleCells(rendered, '0,1,2,3,4,5');
287
+ });
288
+ });
289
+ describe('recomputeCellPositions', function () {
290
+ it('should refresh all cell positions', function () {
291
+ // Share instances between renders to avoid resetting state in ways we don't intend
292
+ var cellMeasurerCache = createCellMeasurerCache();
293
+ var cellPositioner = jest.fn().mockImplementation(createCellPositioner(cellMeasurerCache));
294
+ var rendered = findDOMNode(render(getMarkup({
295
+ cellMeasurerCache: cellMeasurerCache,
296
+ cellPositioner: cellPositioner
297
+ })));
298
+ assertVisibleCells(rendered, '0,1,2,3,4,5,6,7,8');
299
+ cellPositioner.mockImplementation(function (index) {
300
+ return {
301
+ left: 0,
302
+ top: index * CELL_SIZE_MULTIPLIER
303
+ };
304
+ });
305
+ var component = render(getMarkup({
306
+ cellMeasurerCache: cellMeasurerCache,
307
+ cellPositioner: cellPositioner
308
+ }));
309
+ rendered = findDOMNode(component);
310
+ assertVisibleCells(rendered, '0,1,2,3,4,5,6,7,8');
311
+ component.recomputeCellPositions();
312
+ assertVisibleCells(rendered, '0,1,2,3,4');
313
+ });
314
+ it('should not reset measurement cache', function () {
315
+ var cellMeasurerCache = createCellMeasurerCache();
316
+ var component = render(getMarkup({
317
+ cellMeasurerCache: cellMeasurerCache
318
+ }));
319
+ var rendered = findDOMNode(component);
320
+ simulateScroll(rendered, 101);
321
+ expect(cellMeasurerCache.has(9)).toBe(true);
322
+ simulateScroll(rendered, 0);
323
+ component.recomputeCellPositions();
324
+ for (var i = 0; i <= 9; i++) {
325
+ expect(cellMeasurerCache.has(i)).toBe(true);
326
+ }
327
+ });
328
+ });
329
+ describe('isScrolling', function () {
330
+ it('should be true for cellRenderer while scrolling is in progress', function () {
331
+ var cellMeasurerCache = createCellMeasurerCache();
332
+ var renderCallback = jest.fn().mockImplementation(function (index) {
333
+ return index;
334
+ });
335
+ var cellRenderer = createCellRenderer(cellMeasurerCache, renderCallback);
336
+ var rendered = findDOMNode(render(getMarkup({
337
+ cellMeasurerCache: cellMeasurerCache,
338
+ cellRenderer: cellRenderer
339
+ })));
340
+ renderCallback.mockClear();
341
+ simulateScroll(rendered, 51);
342
+ expect(renderCallback.mock.calls[0][1].isScrolling).toEqual(true);
343
+ });
344
+ it('should be reset after a small debounce when scrolling stops', function () {
345
+ var cellMeasurerCache = createCellMeasurerCache();
346
+ var renderCallback = jest.fn().mockImplementation(function (index) {
347
+ return index;
348
+ });
349
+ var cellRenderer = createCellRenderer(cellMeasurerCache, renderCallback);
350
+ var rendered = findDOMNode(render(getMarkup({
351
+ cellMeasurerCache: cellMeasurerCache,
352
+ cellRenderer: cellRenderer
353
+ })));
354
+ simulateScroll(rendered, 51);
355
+ renderCallback.mockClear();
356
+ setTimeout(function () {
357
+ expect(renderCallback.mock.calls[0][1].isScrolling).toEqual(false);
358
+ }, 0);
359
+ });
360
+ });
361
+ describe('callbacks', function () {
362
+ it('should call onCellsRendered when rendered cells change', function () {
363
+ var onCellsRendered = jest.fn();
364
+ var rendered = findDOMNode(render(getMarkup({
365
+ onCellsRendered: onCellsRendered
366
+ })));
367
+ expect(onCellsRendered.mock.calls).toEqual([[{
368
+ startIndex: 0,
369
+ stopIndex: 8
370
+ }]]);
371
+ simulateScroll(rendered, 51);
372
+ expect(onCellsRendered.mock.calls).toEqual([[{
373
+ startIndex: 0,
374
+ stopIndex: 8
375
+ }]]);
376
+ simulateScroll(rendered, 101);
377
+ expect(onCellsRendered.mock.calls).toEqual([[{
378
+ startIndex: 0,
379
+ stopIndex: 8
380
+ }], [{
381
+ startIndex: 0,
382
+ stopIndex: 9
383
+ }]]);
384
+ });
385
+ it('should call onScroll when scroll position changes', function () {
386
+ var onScroll = jest.fn();
387
+ var rendered = findDOMNode(render(getMarkup({
388
+ onScroll: onScroll
389
+ })));
390
+ expect(onScroll.mock.calls).toEqual([[{
391
+ clientHeight: 100,
392
+ scrollHeight: 16900,
393
+ scrollTop: 0
394
+ }]]);
395
+ simulateScroll(rendered, 51);
396
+ expect(onScroll.mock.calls).toEqual([[{
397
+ clientHeight: 100,
398
+ scrollHeight: 16900,
399
+ scrollTop: 0
400
+ }], [{
401
+ clientHeight: 100,
402
+ scrollHeight: 16900,
403
+ scrollTop: 51
404
+ }]]);
405
+ simulateScroll(rendered, 0);
406
+ expect(onScroll.mock.calls).toEqual([[{
407
+ clientHeight: 100,
408
+ scrollHeight: 16900,
409
+ scrollTop: 0
410
+ }], [{
411
+ clientHeight: 100,
412
+ scrollHeight: 16900,
413
+ scrollTop: 51
414
+ }], [{
415
+ clientHeight: 100,
416
+ scrollHeight: 16900,
417
+ scrollTop: 0
418
+ }]]);
419
+ });
420
+ });
421
+ describe('keyMapper', function () {
422
+ it('should pass the correct key to rendered cells', function () {
423
+ var keyMapper = jest.fn().mockImplementation(function (index) {
424
+ return "key:".concat(index);
425
+ });
426
+ var cellRenderer = jest.fn().mockImplementation(function (_ref3) {
427
+ var index = _ref3.index,
428
+ key = _ref3.key,
429
+ style = _ref3.style;
430
+ return /*#__PURE__*/React.createElement("div", {
431
+ key: key,
432
+ style: style
433
+ }, index);
434
+ });
435
+ findDOMNode(render(getMarkup({
436
+ cellRenderer: cellRenderer,
437
+ keyMapper: keyMapper
438
+ })));
439
+ expect(keyMapper).toHaveBeenCalled();
440
+ expect(cellRenderer).toHaveBeenCalled();
441
+ expect(cellRenderer.mock.calls[0][0].key).toEqual('key:0');
442
+ });
443
+ });
444
+ });