@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,536 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
6
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
7
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
8
+ var React = _interopRequireWildcard(require("react"));
9
+ var _reactDom = require("react-dom");
10
+ var _TestUtils = require("../TestUtils");
11
+ var _WindowScroller = _interopRequireWildcard(require("./WindowScroller"));
12
+ var _excluded = ["headerElements", "documentOffset", "renderFn"];
13
+ 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); }
14
+ 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; }
15
+ function mockGetBoundingClientRectForHeader(_ref) {
16
+ var _ref$documentOffset = _ref.documentOffset,
17
+ documentOffset = _ref$documentOffset === void 0 ? 0 : _ref$documentOffset,
18
+ height = _ref.height,
19
+ width = _ref.width;
20
+ // Mock the WindowScroller element and window separately
21
+ // The only way to mock the former (before its created) is globally
22
+ Element.prototype.getBoundingClientRect = jest.fn(function () {
23
+ return {
24
+ top: height,
25
+ left: width
26
+ };
27
+ });
28
+ document.documentElement.getBoundingClientRect = jest.fn(function () {
29
+ return {
30
+ top: documentOffset,
31
+ left: documentOffset
32
+ };
33
+ });
34
+ }
35
+ function getMarkup() {
36
+ var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
37
+ headerElements = _ref2.headerElements,
38
+ documentOffset = _ref2.documentOffset,
39
+ renderFn = _ref2.renderFn,
40
+ props = (0, _objectWithoutProperties2["default"])(_ref2, _excluded);
41
+ var windowScroller = /*#__PURE__*/React.createElement(_WindowScroller["default"], props, function (params) {
42
+ return /*#__PURE__*/React.createElement("div", null, renderFn && renderFn(params));
43
+ });
44
+
45
+ // JSDome doesn't implement a working getBoundingClientRect()
46
+ // But WindowScroller requires it
47
+ mockGetBoundingClientRectForHeader({
48
+ documentOffset: documentOffset,
49
+ height: headerElements ? headerElements.props.style.height : 0,
50
+ width: headerElements ? headerElements.props.style.width : 0
51
+ });
52
+ if (headerElements) {
53
+ return /*#__PURE__*/React.createElement("div", null, headerElements, windowScroller);
54
+ } else {
55
+ return windowScroller;
56
+ }
57
+ }
58
+ function simulateWindowScroll(_ref3) {
59
+ var _ref3$scrollX = _ref3.scrollX,
60
+ scrollX = _ref3$scrollX === void 0 ? 0 : _ref3$scrollX,
61
+ _ref3$scrollY = _ref3.scrollY,
62
+ scrollY = _ref3$scrollY === void 0 ? 0 : _ref3$scrollY;
63
+ document.body.style.height = '10000px';
64
+ window.scrollX = scrollX;
65
+ window.scrollY = scrollY;
66
+ document.dispatchEvent(new window.Event('scroll', {
67
+ bubbles: true
68
+ }));
69
+ document.body.style.height = '';
70
+ }
71
+ function simulateWindowResize(_ref4) {
72
+ var _ref4$height = _ref4.height,
73
+ height = _ref4$height === void 0 ? 0 : _ref4$height,
74
+ _ref4$width = _ref4.width,
75
+ width = _ref4$width === void 0 ? 0 : _ref4$width;
76
+ window.innerHeight = height;
77
+ window.innerWidth = width;
78
+ document.dispatchEvent(new window.Event('resize', {
79
+ bubbles: true
80
+ }));
81
+ }
82
+ describe('WindowScroller', function () {
83
+ // Set default window height and scroll position between tests
84
+ beforeEach(function () {
85
+ window.scrollY = 0;
86
+ window.scrollX = 0;
87
+ window.innerHeight = 500;
88
+ window.innerWidth = 500;
89
+ });
90
+
91
+ // Starts updating scrollTop only when the top position is reached
92
+ it('should have correct top and left properties to be defined on :_positionFromTop and :_positionFromLeft', function () {
93
+ var component = (0, _TestUtils.render)(getMarkup());
94
+ var rendered = (0, _reactDom.findDOMNode)(component);
95
+ var _rendered$getBounding = rendered.getBoundingClientRect(),
96
+ top = _rendered$getBounding.top,
97
+ left = _rendered$getBounding.left;
98
+ expect(component._positionFromTop).toEqual(top);
99
+ expect(component._positionFromLeft).toEqual(left);
100
+ });
101
+ it('should allow passing child element with registerChild of children function param', function () {
102
+ var scrollElement = document.createElement('div');
103
+ scrollElement.scrollTop = 100;
104
+ scrollElement.scrollLeft = 150;
105
+ scrollElement.getBoundingClientRect = function () {
106
+ return {
107
+ top: 200,
108
+ left: 250
109
+ };
110
+ };
111
+ var child = document.createElement('div');
112
+ child.getBoundingClientRect = function () {
113
+ return {
114
+ top: 300,
115
+ left: 350
116
+ };
117
+ };
118
+ var renderFn = jest.fn();
119
+ var component = (0, _TestUtils.render)(getMarkup({
120
+ scrollElement: scrollElement,
121
+ renderFn: renderFn
122
+ }));
123
+ renderFn.mock.calls[0][0].registerChild(child);
124
+ expect(component._positionFromTop).toEqual(300 + 100 - 200);
125
+ expect(component._positionFromLeft).toEqual(350 + 150 - 250);
126
+ });
127
+ it('should warn on passing non-element or not null', function () {
128
+ var warnFn = jest.spyOn(console, 'warn');
129
+ var renderFn = jest.fn();
130
+ (0, _TestUtils.render)(getMarkup({
131
+ renderFn: renderFn
132
+ }));
133
+ renderFn.mock.calls[0][0].registerChild(1);
134
+ renderFn.mock.calls[0][0].registerChild(document.createElement('div'));
135
+ renderFn.mock.calls[0][0].registerChild(null);
136
+ expect(warnFn).toHaveBeenCalledTimes(1);
137
+ warnFn.mockRestore();
138
+ });
139
+
140
+ // Test edge-case reported in bvaughn/react-virtualized/pull/346
141
+ it('should have correct top and left properties to be defined on :_positionFromTop and :_positionFromLeft if documentElement is scrolled', function () {
142
+ _TestUtils.render.unmount();
143
+
144
+ // Simulate scrolled documentElement
145
+ var component = (0, _TestUtils.render)(getMarkup({
146
+ documentOffset: -100
147
+ }));
148
+ var rendered = (0, _reactDom.findDOMNode)(component);
149
+ var _rendered$getBounding2 = rendered.getBoundingClientRect(),
150
+ top = _rendered$getBounding2.top,
151
+ left = _rendered$getBounding2.left;
152
+ expect(component._positionFromTop).toEqual(top + 100);
153
+ expect(component._positionFromLeft).toEqual(left + 100);
154
+ // Reset override
155
+ delete document.documentElement.getBoundingClientRect;
156
+ });
157
+ it('inherits the window height and passes it to child component', function () {
158
+ var renderFn = jest.fn();
159
+ var component = (0, _TestUtils.render)(getMarkup({
160
+ renderFn: renderFn
161
+ }));
162
+ expect(component.state.height).toEqual(window.innerHeight);
163
+ expect(component.state.height).toEqual(500);
164
+ expect(renderFn).lastCalledWith(expect.objectContaining({
165
+ height: 500
166
+ }));
167
+ });
168
+ it('should restore pointerEvents on body after IS_SCROLLING_TIMEOUT', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
169
+ return _regenerator["default"].wrap(function _callee$(_context) {
170
+ while (1) switch (_context.prev = _context.next) {
171
+ case 0:
172
+ (0, _TestUtils.render)(getMarkup());
173
+ document.body.style.pointerEvents = 'all';
174
+ simulateWindowScroll({
175
+ scrollY: 5000
176
+ });
177
+ expect(document.body.style.pointerEvents).toEqual('none');
178
+ _context.next = 6;
179
+ return new Promise(function (resolve) {
180
+ return setTimeout(resolve, _WindowScroller.IS_SCROLLING_TIMEOUT + 100);
181
+ });
182
+ case 6:
183
+ expect(document.body.style.pointerEvents).toEqual('all');
184
+ case 7:
185
+ case "end":
186
+ return _context.stop();
187
+ }
188
+ }, _callee);
189
+ })));
190
+ it('should restore pointerEvents on body after unmount', function () {
191
+ (0, _TestUtils.render)(getMarkup());
192
+ document.body.style.pointerEvents = 'all';
193
+ simulateWindowScroll({
194
+ scrollY: 5000
195
+ });
196
+ expect(document.body.style.pointerEvents).toEqual('none');
197
+ _TestUtils.render.unmount();
198
+ expect(document.body.style.pointerEvents).toEqual('all');
199
+ });
200
+ describe('onScroll', function () {
201
+ it('should trigger callback when window scrolls', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
202
+ var onScroll;
203
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
204
+ while (1) switch (_context2.prev = _context2.next) {
205
+ case 0:
206
+ onScroll = jest.fn();
207
+ (0, _TestUtils.render)(getMarkup({
208
+ onScroll: onScroll
209
+ }));
210
+ simulateWindowScroll({
211
+ scrollY: 5000
212
+ });
213
+
214
+ // Allow scrolling timeout to complete so that the component computes state
215
+ _context2.next = 5;
216
+ return new Promise(function (resolve) {
217
+ return setTimeout(resolve, 150);
218
+ });
219
+ case 5:
220
+ expect(onScroll).toHaveBeenCalledWith({
221
+ scrollLeft: 0,
222
+ scrollTop: 5000
223
+ });
224
+ simulateWindowScroll({
225
+ scrollX: 2500,
226
+ scrollY: 5000
227
+ });
228
+
229
+ // Allow scrolling timeout to complete so that the component computes state
230
+ _context2.next = 9;
231
+ return new Promise(function (resolve) {
232
+ return setTimeout(resolve, 150);
233
+ });
234
+ case 9:
235
+ expect(onScroll).toHaveBeenCalledWith({
236
+ scrollLeft: 2500,
237
+ scrollTop: 5000
238
+ });
239
+ case 10:
240
+ case "end":
241
+ return _context2.stop();
242
+ }
243
+ }, _callee2);
244
+ })));
245
+ it('should update :scrollTop when window is scrolled', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
246
+ var renderFn, component, componentScrollTop;
247
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
248
+ while (1) switch (_context3.prev = _context3.next) {
249
+ case 0:
250
+ renderFn = jest.fn();
251
+ component = (0, _TestUtils.render)(getMarkup({
252
+ renderFn: renderFn
253
+ })); // Initial load of the component should have 0 scrollTop
254
+ expect(renderFn).lastCalledWith(expect.objectContaining({
255
+ scrollTop: 0
256
+ }));
257
+ simulateWindowScroll({
258
+ scrollY: 5000
259
+ });
260
+
261
+ // Allow scrolling timeout to complete so that the component computes state
262
+ _context3.next = 6;
263
+ return new Promise(function (resolve) {
264
+ return setTimeout(resolve, 150);
265
+ });
266
+ case 6:
267
+ componentScrollTop = window.scrollY - component._positionFromTop;
268
+ expect(component.state.scrollTop).toEqual(componentScrollTop);
269
+ expect(renderFn).lastCalledWith(expect.objectContaining({
270
+ scrollTop: componentScrollTop
271
+ }));
272
+ case 9:
273
+ case "end":
274
+ return _context3.stop();
275
+ }
276
+ }, _callee3);
277
+ })));
278
+ it('should specify :isScrolling when scrolling and reset after scrolling', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4() {
279
+ var renderFn;
280
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
281
+ while (1) switch (_context4.prev = _context4.next) {
282
+ case 0:
283
+ renderFn = jest.fn();
284
+ (0, _TestUtils.render)(getMarkup({
285
+ renderFn: renderFn
286
+ }));
287
+ simulateWindowScroll({
288
+ scrollY: 5000
289
+ });
290
+ expect(renderFn).lastCalledWith(expect.objectContaining({
291
+ isScrolling: true
292
+ }));
293
+ _context4.next = 6;
294
+ return new Promise(function (resolve) {
295
+ return setTimeout(resolve, 250);
296
+ });
297
+ case 6:
298
+ expect(renderFn).lastCalledWith(expect.objectContaining({
299
+ isScrolling: false
300
+ }));
301
+ case 7:
302
+ case "end":
303
+ return _context4.stop();
304
+ }
305
+ }, _callee4);
306
+ })));
307
+ it('should support a custom :scrollingResetTimeInterval prop', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee5() {
308
+ var renderFn;
309
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
310
+ while (1) switch (_context5.prev = _context5.next) {
311
+ case 0:
312
+ renderFn = jest.fn();
313
+ (0, _TestUtils.render)(getMarkup({
314
+ scrollingResetTimeInterval: 500,
315
+ renderFn: renderFn
316
+ }));
317
+ expect(renderFn).lastCalledWith(expect.objectContaining({
318
+ isScrolling: false
319
+ }));
320
+ simulateWindowScroll({
321
+ scrollY: 5000
322
+ });
323
+ expect(renderFn).lastCalledWith(expect.objectContaining({
324
+ isScrolling: true
325
+ }));
326
+ _context5.next = 7;
327
+ return new Promise(function (resolve) {
328
+ return setTimeout(resolve, 100);
329
+ });
330
+ case 7:
331
+ expect(renderFn).lastCalledWith(expect.objectContaining({
332
+ isScrolling: true
333
+ }));
334
+ _context5.next = 10;
335
+ return new Promise(function (resolve) {
336
+ return setTimeout(resolve, 100);
337
+ });
338
+ case 10:
339
+ expect(renderFn).lastCalledWith(expect.objectContaining({
340
+ isScrolling: true
341
+ }));
342
+ _context5.next = 13;
343
+ return new Promise(function (resolve) {
344
+ return setTimeout(resolve, 400);
345
+ });
346
+ case 13:
347
+ expect(renderFn).lastCalledWith(expect.objectContaining({
348
+ isScrolling: false
349
+ }));
350
+ case 14:
351
+ case "end":
352
+ return _context5.stop();
353
+ }
354
+ }, _callee5);
355
+ })));
356
+ });
357
+ describe('onResize', function () {
358
+ it('should trigger callback on init and when window resizes', function () {
359
+ var resizeFn = jest.fn();
360
+ (0, _TestUtils.render)(getMarkup({
361
+ onResize: resizeFn
362
+ }));
363
+ simulateWindowResize({
364
+ height: 1000,
365
+ width: 1024
366
+ });
367
+ expect(resizeFn).toHaveBeenCalledTimes(1);
368
+ expect(resizeFn).lastCalledWith({
369
+ height: 1000,
370
+ width: 1024
371
+ });
372
+ });
373
+ it('should update height when window resizes', function () {
374
+ var renderFn = jest.fn();
375
+ var component = (0, _TestUtils.render)(getMarkup({
376
+ renderFn: renderFn
377
+ }));
378
+
379
+ // Initial load of the component should have the same window height = 500
380
+ expect(component.state.height).toEqual(window.innerHeight);
381
+ expect(component.state.height).toEqual(500);
382
+ expect(renderFn).lastCalledWith(expect.objectContaining({
383
+ height: 500
384
+ }));
385
+ simulateWindowResize({
386
+ height: 1000
387
+ });
388
+ expect(component.state.height).toEqual(window.innerHeight);
389
+ expect(component.state.height).toEqual(1000);
390
+ expect(renderFn).lastCalledWith(expect.objectContaining({
391
+ height: 1000
392
+ }));
393
+ });
394
+ });
395
+ describe('updatePosition', function () {
396
+ it('should calculate the initial offset from the top of the page when mounted', function () {
397
+ var windowScroller;
398
+ (0, _TestUtils.render)(getMarkup({
399
+ headerElements: /*#__PURE__*/React.createElement("div", {
400
+ style: {
401
+ height: 100
402
+ }
403
+ }),
404
+ ref: function ref(_ref10) {
405
+ windowScroller = _ref10;
406
+ }
407
+ }));
408
+ expect(windowScroller._positionFromTop).toBe(100);
409
+ });
410
+ it('should recalculate the offset from the top when the window resizes', function () {
411
+ var windowScroller;
412
+ (0, _TestUtils.render)(getMarkup({
413
+ headerElements: /*#__PURE__*/React.createElement("div", {
414
+ id: "header",
415
+ style: {
416
+ height: 100,
417
+ width: 150
418
+ }
419
+ }),
420
+ ref: function ref(_ref11) {
421
+ windowScroller = _ref11;
422
+ }
423
+ }));
424
+ expect(windowScroller._positionFromTop).toBe(100);
425
+ expect(windowScroller._positionFromLeft).toBe(150);
426
+ mockGetBoundingClientRectForHeader({
427
+ height: 200,
428
+ width: 300
429
+ });
430
+ expect(windowScroller._positionFromTop).toBe(100);
431
+ expect(windowScroller._positionFromLeft).toBe(150);
432
+ simulateWindowResize({
433
+ height: 1000,
434
+ width: 1000
435
+ });
436
+ expect(windowScroller._positionFromTop).toBe(200);
437
+ expect(windowScroller._positionFromLeft).toBe(300);
438
+ });
439
+ it('should recalculate the offset from the top if called externally', function () {
440
+ var windowScroller;
441
+ (0, _TestUtils.render)(getMarkup({
442
+ headerElements: /*#__PURE__*/React.createElement("div", {
443
+ id: "header",
444
+ style: {
445
+ height: 100,
446
+ width: 150
447
+ }
448
+ }),
449
+ ref: function ref(_ref12) {
450
+ windowScroller = _ref12;
451
+ }
452
+ }));
453
+ expect(windowScroller._positionFromTop).toBe(100);
454
+ expect(windowScroller._positionFromLeft).toBe(150);
455
+ mockGetBoundingClientRectForHeader({
456
+ height: 200,
457
+ width: 300
458
+ });
459
+ windowScroller.updatePosition();
460
+ expect(windowScroller._positionFromTop).toBe(200);
461
+ expect(windowScroller._positionFromLeft).toBe(300);
462
+ });
463
+ });
464
+ describe('when child scrolls', function () {
465
+ var originalScrollTo;
466
+ beforeEach(function () {
467
+ originalScrollTo = window.scrollTo;
468
+ window.scrollTo = function (scrollX, scrollY) {
469
+ return simulateWindowScroll({
470
+ scrollX: scrollX,
471
+ scrollY: scrollY
472
+ });
473
+ };
474
+ });
475
+ afterEach(function () {
476
+ window.scrollTo = originalScrollTo;
477
+ _TestUtils.render.unmount();
478
+ });
479
+ it('should scroll the scrollElement (when it is window) the desired amount', function () {
480
+ var renderFn = jest.fn();
481
+ var windowScroller;
482
+ (0, _TestUtils.render)(getMarkup({
483
+ ref: function ref(_ref13) {
484
+ windowScroller = _ref13;
485
+ },
486
+ renderFn: renderFn
487
+ }));
488
+ renderFn.mock.calls[0][0].onChildScroll({
489
+ scrollTop: 200
490
+ });
491
+ expect(window.scrollY).toEqual(200 + windowScroller._positionFromTop);
492
+ });
493
+ it('should not scroll the scrollElement if trying to scroll to where we already are', function () {
494
+ var renderFn = jest.fn();
495
+ (0, _TestUtils.render)(getMarkup({
496
+ renderFn: renderFn
497
+ }));
498
+ simulateWindowScroll({
499
+ scrollY: 200
500
+ });
501
+ window.scrollTo = jest.fn();
502
+ renderFn.mock.calls[0][0].onChildScroll({
503
+ scrollTop: 200
504
+ });
505
+ expect(window.scrollTo).not.toHaveBeenCalled();
506
+ });
507
+ it('should scroll the scrollElement (when it is an element) the desired amount', function () {
508
+ var windowScroller;
509
+ var renderFn = jest.fn();
510
+ var divEl = document.createElement('div');
511
+ (0, _TestUtils.render)(getMarkup({
512
+ ref: function ref(_ref14) {
513
+ windowScroller = _ref14;
514
+ },
515
+ renderFn: renderFn,
516
+ scrollElement: divEl
517
+ }));
518
+ renderFn.mock.calls[0][0].onChildScroll({
519
+ scrollTop: 200
520
+ });
521
+ expect(divEl.scrollTop).toEqual(200 + windowScroller._positionFromTop);
522
+ });
523
+ it('should update own scrollTop', function () {
524
+ var renderFn = jest.fn();
525
+ (0, _TestUtils.render)(getMarkup({
526
+ renderFn: renderFn
527
+ }));
528
+ renderFn.mock.calls[0][0].onChildScroll({
529
+ scrollTop: 200
530
+ });
531
+ expect(renderFn).lastCalledWith(expect.objectContaining({
532
+ scrollTop: 200
533
+ }));
534
+ });
535
+ });
536
+ });