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