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