@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,511 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import * as React from 'react';
3
+ import { findDOMNode } from 'react-dom';
4
+ import { render } from '../TestUtils';
5
+ import { Simulate } from 'react-dom/test-utils';
6
+ import Immutable from 'immutable';
7
+ import List from './List';
8
+ import { defaultOverscanIndicesGetter } from '../Grid';
9
+ describe('List', function () {
10
+ var array = [];
11
+ for (var i = 0; i < 100; i++) {
12
+ array.push("Name ".concat(i));
13
+ }
14
+ var names = Immutable.fromJS(array);
15
+
16
+ // Override default behavior of overscanning by at least 1 (for accessibility)
17
+ // Because it makes for simple tests below
18
+ function overscanIndicesGetter(_ref) {
19
+ var startIndex = _ref.startIndex,
20
+ stopIndex = _ref.stopIndex;
21
+ return {
22
+ overscanStartIndex: startIndex,
23
+ overscanStopIndex: stopIndex
24
+ };
25
+ }
26
+ function getMarkup() {
27
+ var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
28
+ function rowRenderer(_ref2) {
29
+ var index = _ref2.index,
30
+ key = _ref2.key,
31
+ style = _ref2.style;
32
+ return /*#__PURE__*/React.createElement("div", {
33
+ className: "listItem",
34
+ key: key,
35
+ style: style
36
+ }, names.get(index));
37
+ }
38
+ return /*#__PURE__*/React.createElement(List, _extends({
39
+ height: 100,
40
+ overscanIndicesGetter: overscanIndicesGetter,
41
+ overscanRowCount: 0,
42
+ rowHeight: 10,
43
+ rowCount: names.size,
44
+ rowRenderer: rowRenderer,
45
+ width: 100
46
+ }, props));
47
+ }
48
+ describe('number of rendered children', function () {
49
+ it('should render enough children to fill the view', function () {
50
+ var rendered = findDOMNode(render(getMarkup()));
51
+ expect(rendered.querySelectorAll('.listItem').length).toEqual(10);
52
+ });
53
+ it('should not render more children than available if the list is not filled', function () {
54
+ var rendered = findDOMNode(render(getMarkup({
55
+ rowCount: 5
56
+ })));
57
+ expect(rendered.querySelectorAll('.listItem').length).toEqual(5);
58
+ });
59
+ });
60
+ describe('scrollToPosition', function () {
61
+ it('should scroll to the top', function () {
62
+ var instance = render(getMarkup({
63
+ rowHeight: 10
64
+ }));
65
+ instance.scrollToPosition(100);
66
+ var rendered = findDOMNode(instance);
67
+ expect(rendered.textContent).toContain('Name 10');
68
+ expect(rendered.textContent).toContain('Name 19');
69
+ });
70
+ });
71
+
72
+ /** Tests scrolling via initial props */
73
+ describe('scrollToIndex', function () {
74
+ it('should scroll to the top', function () {
75
+ var rendered = findDOMNode(render(getMarkup({
76
+ scrollToIndex: 0
77
+ })));
78
+ expect(rendered.textContent).toContain('Name 0');
79
+ });
80
+ it('should scroll down to the middle', function () {
81
+ var rendered = findDOMNode(render(getMarkup({
82
+ scrollToIndex: 49
83
+ })));
84
+ // 100 items * 10 item height = 1,000 total item height
85
+ // 10 items can be visible at a time and :scrollTop is initially 0,
86
+ // So the minimum amount of scrolling leaves the 50th item at the bottom (just scrolled into view).
87
+ expect(rendered.textContent).toContain('Name 49');
88
+ });
89
+ it('should scroll to the bottom', function () {
90
+ var rendered = findDOMNode(render(getMarkup({
91
+ scrollToIndex: 99
92
+ })));
93
+ // 100 height - 10 header = 90 available scroll space.
94
+ // 100 items * 10 item height = 1,000 total item height
95
+ // Target height for the last item then is 1000 - 90
96
+ expect(rendered.textContent).toContain('Name 99');
97
+ });
98
+ it('should scroll to the correct position for :scrollToAlignment "start"', function () {
99
+ var rendered = findDOMNode(render(getMarkup({
100
+ scrollToAlignment: 'start',
101
+ scrollToIndex: 49
102
+ })));
103
+ // 100 items * 10 item height = 1,000 total item height; 10 items can be visible at a time.
104
+ expect(rendered.textContent).toContain('Name 49');
105
+ expect(rendered.textContent).toContain('Name 58');
106
+ });
107
+ it('should scroll to the correct position for :scrollToAlignment "end"', function () {
108
+ render(getMarkup({
109
+ scrollToIndex: 99
110
+ }));
111
+ var rendered = findDOMNode(render(getMarkup({
112
+ scrollToAlignment: 'end',
113
+ scrollToIndex: 49
114
+ })));
115
+ // 100 items * 10 item height = 1,000 total item height; 10 items can be visible at a time.
116
+ expect(rendered.textContent).toContain('Name 40');
117
+ expect(rendered.textContent).toContain('Name 49');
118
+ });
119
+ it('should scroll to the correct position for :scrollToAlignment "center"', function () {
120
+ render(getMarkup({
121
+ scrollToIndex: 99
122
+ }));
123
+ var rendered = findDOMNode(render(getMarkup({
124
+ scrollToAlignment: 'center',
125
+ scrollToIndex: 49
126
+ })));
127
+ // 100 items * 10 item height = 1,000 total item height; 11 items can be visible at a time (the first and last item are only partially visible)
128
+ expect(rendered.textContent).toContain('Name 44');
129
+ expect(rendered.textContent).toContain('Name 54');
130
+ });
131
+ });
132
+ describe('property updates', function () {
133
+ it('should update :scrollToIndex position when :rowHeight changes', function () {
134
+ var rendered = findDOMNode(render(getMarkup({
135
+ scrollToIndex: 50
136
+ })));
137
+ expect(rendered.textContent).toContain('Name 50');
138
+ // Making rows taller pushes name off/beyond the scrolled area
139
+ rendered = findDOMNode(render(getMarkup({
140
+ scrollToIndex: 50,
141
+ rowHeight: 20
142
+ })));
143
+ expect(rendered.textContent).toContain('Name 50');
144
+ });
145
+ it('should update :scrollToIndex position when :height changes', function () {
146
+ var rendered = findDOMNode(render(getMarkup({
147
+ scrollToIndex: 50
148
+ })));
149
+ expect(rendered.textContent).toContain('Name 50');
150
+ // Making the list shorter leaves only room for 1 item
151
+ rendered = findDOMNode(render(getMarkup({
152
+ scrollToIndex: 50,
153
+ height: 20
154
+ })));
155
+ expect(rendered.textContent).toContain('Name 50');
156
+ });
157
+ it('should update :scrollToIndex position when :scrollToIndex changes', function () {
158
+ var rendered = findDOMNode(render(getMarkup()));
159
+ expect(rendered.textContent).not.toContain('Name 50');
160
+ rendered = findDOMNode(render(getMarkup({
161
+ scrollToIndex: 50
162
+ })));
163
+ expect(rendered.textContent).toContain('Name 50');
164
+ });
165
+ it('should update scroll position if size shrinks smaller than the current scroll', function () {
166
+ findDOMNode(render(getMarkup({
167
+ scrollToIndex: 500
168
+ })));
169
+ findDOMNode(render(getMarkup()));
170
+ var rendered = findDOMNode(render(getMarkup({
171
+ scrollToIndex: 500,
172
+ rowCount: 10
173
+ })));
174
+ expect(rendered.textContent).toContain('Name 9');
175
+ });
176
+ });
177
+ describe('noRowsRenderer', function () {
178
+ it('should call :noRowsRenderer if :rowCount is 0', function () {
179
+ var rendered = findDOMNode(render(getMarkup({
180
+ noRowsRenderer: function noRowsRenderer() {
181
+ return /*#__PURE__*/React.createElement("div", null, "No rows!");
182
+ },
183
+ rowCount: 0
184
+ })));
185
+ expect(rendered.textContent).toEqual('No rows!');
186
+ });
187
+ it('should render an empty body if :rowCount is 0 and there is no :noRowsRenderer', function () {
188
+ var rendered = findDOMNode(render(getMarkup({
189
+ rowCount: 0
190
+ })));
191
+ expect(rendered.textContent).toEqual('');
192
+ });
193
+ });
194
+ describe('onRowsRendered', function () {
195
+ it('should call :onRowsRendered if at least one row is rendered', function () {
196
+ var startIndex, stopIndex;
197
+ render(getMarkup({
198
+ onRowsRendered: function onRowsRendered(params) {
199
+ var _params;
200
+ return _params = params, startIndex = _params.startIndex, stopIndex = _params.stopIndex, _params;
201
+ }
202
+ }));
203
+ expect(startIndex).toEqual(0);
204
+ expect(stopIndex).toEqual(9);
205
+ });
206
+ it('should not call :onRowsRendered unless the start or stop indices have changed', function () {
207
+ var numCalls = 0;
208
+ var startIndex;
209
+ var stopIndex;
210
+ var onRowsRendered = function onRowsRendered(params) {
211
+ startIndex = params.startIndex;
212
+ stopIndex = params.stopIndex;
213
+ numCalls++;
214
+ };
215
+ findDOMNode(render(getMarkup({
216
+ onRowsRendered: onRowsRendered
217
+ })));
218
+ expect(numCalls).toEqual(1);
219
+ expect(startIndex).toEqual(0);
220
+ expect(stopIndex).toEqual(9);
221
+ findDOMNode(render(getMarkup({
222
+ onRowsRendered: onRowsRendered
223
+ })));
224
+ expect(numCalls).toEqual(1);
225
+ expect(startIndex).toEqual(0);
226
+ expect(stopIndex).toEqual(9);
227
+ });
228
+ it('should call :onRowsRendered if the start or stop indices have changed', function () {
229
+ var numCalls = 0;
230
+ var startIndex;
231
+ var stopIndex;
232
+ var onRowsRendered = function onRowsRendered(params) {
233
+ startIndex = params.startIndex;
234
+ stopIndex = params.stopIndex;
235
+ numCalls++;
236
+ };
237
+ findDOMNode(render(getMarkup({
238
+ onRowsRendered: onRowsRendered
239
+ })));
240
+ expect(numCalls).toEqual(1);
241
+ expect(startIndex).toEqual(0);
242
+ expect(stopIndex).toEqual(9);
243
+ findDOMNode(render(getMarkup({
244
+ height: 50,
245
+ onRowsRendered: onRowsRendered
246
+ })));
247
+ expect(numCalls).toEqual(2);
248
+ expect(startIndex).toEqual(0);
249
+ expect(stopIndex).toEqual(4);
250
+ });
251
+ it('should not call :onRowsRendered if no rows are rendered', function () {
252
+ var startIndex, stopIndex;
253
+ render(getMarkup({
254
+ height: 0,
255
+ onRowsRendered: function onRowsRendered(params) {
256
+ var _params2;
257
+ return _params2 = params, startIndex = _params2.startIndex, stopIndex = _params2.stopIndex, _params2;
258
+ }
259
+ }));
260
+ expect(startIndex).toEqual(undefined);
261
+ expect(stopIndex).toEqual(undefined);
262
+ });
263
+ });
264
+ describe(':scrollTop property', function () {
265
+ it('should render correctly when an initial :scrollTop property is specified', function () {
266
+ var startIndex, stopIndex;
267
+ render(getMarkup({
268
+ onRowsRendered: function onRowsRendered(params) {
269
+ var _params3;
270
+ return _params3 = params, startIndex = _params3.startIndex, stopIndex = _params3.stopIndex, _params3;
271
+ },
272
+ scrollTop: 100
273
+ }));
274
+ expect(startIndex).toEqual(10);
275
+ expect(stopIndex).toEqual(19);
276
+ });
277
+ it('should render correctly when :scrollTop property is updated', function () {
278
+ var startIndex, stopIndex;
279
+ findDOMNode(render(getMarkup({
280
+ onRowsRendered: function onRowsRendered(params) {
281
+ var _params4;
282
+ return _params4 = params, startIndex = _params4.startIndex, stopIndex = _params4.stopIndex, _params4;
283
+ }
284
+ })));
285
+ expect(startIndex).toEqual(0);
286
+ expect(stopIndex).toEqual(9);
287
+ findDOMNode(render(getMarkup({
288
+ onRowsRendered: function onRowsRendered(params) {
289
+ var _params5;
290
+ return _params5 = params, startIndex = _params5.startIndex, stopIndex = _params5.stopIndex, _params5;
291
+ },
292
+ scrollTop: 100
293
+ })));
294
+ expect(startIndex).toEqual(10);
295
+ expect(stopIndex).toEqual(19);
296
+ });
297
+ });
298
+ describe('styles, classNames, and ids', function () {
299
+ it('should use the expected global CSS classNames', function () {
300
+ var node = findDOMNode(render(getMarkup()));
301
+ expect(node.className).toContain('ReactVirtualized__List');
302
+ });
303
+ it('should use a custom :className if specified', function () {
304
+ var node = findDOMNode(render(getMarkup({
305
+ className: 'foo'
306
+ })));
307
+ expect(node.className).toContain('foo');
308
+ });
309
+ it('should use a custom :id if specified', function () {
310
+ var node = findDOMNode(render(getMarkup({
311
+ id: 'bar'
312
+ })));
313
+ expect(node.getAttribute('id')).toEqual('bar');
314
+ });
315
+ it('should use a custom :style if specified', function () {
316
+ var style = {
317
+ backgroundColor: 'red'
318
+ };
319
+ var rendered = findDOMNode(render(getMarkup({
320
+ style: style
321
+ })));
322
+ expect(rendered.style.backgroundColor).toEqual('red');
323
+ });
324
+ it('should set the width of a row to be 100% by default', function () {
325
+ var rendered = findDOMNode(render(getMarkup()));
326
+ var cell = rendered.querySelector('.listItem');
327
+ expect(cell.style.width).toEqual('100%');
328
+ });
329
+ });
330
+ describe('overscanRowCount', function () {
331
+ it('should not overscan by default', function () {
332
+ var mock = jest.fn();
333
+ mock.mockImplementation(overscanIndicesGetter);
334
+ render(getMarkup({
335
+ overscanIndicesGetter: mock
336
+ }));
337
+ expect(mock.mock.calls[0][0].overscanCellsCount).toEqual(0);
338
+ expect(mock.mock.calls[1][0].overscanCellsCount).toEqual(0);
339
+ });
340
+ it('should overscan the specified amount', function () {
341
+ var mock = jest.fn();
342
+ mock.mockImplementation(overscanIndicesGetter);
343
+ render(getMarkup({
344
+ overscanIndicesGetter: mock,
345
+ overscanRowCount: 10
346
+ }));
347
+ expect(mock.mock.calls[0][0].overscanCellsCount).toEqual(0);
348
+ expect(mock.mock.calls[1][0].overscanCellsCount).toEqual(10);
349
+ });
350
+ });
351
+ describe('onScroll', function () {
352
+ it('should trigger callback when component initially mounts', function () {
353
+ var onScrollCalls = [];
354
+ render(getMarkup({
355
+ onScroll: function onScroll(params) {
356
+ return onScrollCalls.push(params);
357
+ }
358
+ }));
359
+ expect(onScrollCalls).toEqual([{
360
+ clientHeight: 100,
361
+ scrollHeight: 1000,
362
+ scrollTop: 0
363
+ }]);
364
+ });
365
+ it('should trigger callback when component scrolls', function () {
366
+ var onScrollCalls = [];
367
+ var rendered = render(getMarkup({
368
+ onScroll: function onScroll(params) {
369
+ return onScrollCalls.push(params);
370
+ }
371
+ }));
372
+ var target = {
373
+ scrollLeft: 0,
374
+ scrollTop: 100
375
+ };
376
+ rendered.Grid._scrollingContainer = target; // HACK to work around _onScroll target check
377
+ Simulate.scroll(findDOMNode(rendered), {
378
+ target: target
379
+ });
380
+ expect(onScrollCalls[onScrollCalls.length - 1]).toEqual({
381
+ clientHeight: 100,
382
+ scrollHeight: 1000,
383
+ scrollTop: 100
384
+ });
385
+ });
386
+ });
387
+ describe('measureAllRows', function () {
388
+ it('should measure any unmeasured rows', function () {
389
+ var rendered = render(getMarkup({
390
+ estimatedRowSize: 15,
391
+ height: 0,
392
+ rowCount: 10,
393
+ rowHeight: function rowHeight() {
394
+ return 20;
395
+ },
396
+ width: 0
397
+ }));
398
+ expect(rendered.Grid.state.instanceProps.rowSizeAndPositionManager.getTotalSize()).toEqual(150);
399
+ rendered.measureAllRows();
400
+ expect(rendered.Grid.state.instanceProps.rowSizeAndPositionManager.getTotalSize()).toEqual(200);
401
+ });
402
+ });
403
+ describe('recomputeRowHeights', function () {
404
+ it('should recompute row heights and other values when called', function () {
405
+ var indices = [];
406
+ var rowHeight = function rowHeight(_ref3) {
407
+ var index = _ref3.index;
408
+ indices.push(index);
409
+ return 10;
410
+ };
411
+ var component = render(getMarkup({
412
+ rowHeight: rowHeight,
413
+ rowCount: 50
414
+ }));
415
+ indices.splice(0);
416
+ component.recomputeRowHeights();
417
+
418
+ // Only the rows required to fill the current viewport will be rendered
419
+ expect(indices[0]).toEqual(0);
420
+ expect(indices[indices.length - 1]).toEqual(9);
421
+ indices.splice(0);
422
+ component.recomputeRowHeights(4);
423
+ expect(indices[0]).toEqual(4);
424
+ expect(indices[indices.length - 1]).toEqual(9);
425
+ });
426
+ });
427
+ describe('forceUpdateGrid', function () {
428
+ it('should refresh inner Grid content when called', function () {
429
+ var marker = 'a';
430
+ function rowRenderer(_ref4) {
431
+ var index = _ref4.index,
432
+ key = _ref4.key,
433
+ style = _ref4.style;
434
+ return /*#__PURE__*/React.createElement("div", {
435
+ key: key,
436
+ style: style
437
+ }, index, marker);
438
+ }
439
+ var component = render(getMarkup({
440
+ rowRenderer: rowRenderer
441
+ }));
442
+ var node = findDOMNode(component);
443
+ expect(node.textContent).toContain('1a');
444
+ marker = 'b';
445
+ component.forceUpdateGrid();
446
+ expect(node.textContent).toContain('1b');
447
+ });
448
+ });
449
+ describe('tabIndex', function () {
450
+ it('should be focusable by default', function () {
451
+ var rendered = findDOMNode(render(getMarkup()));
452
+ expect(rendered.tabIndex).toEqual(0);
453
+ });
454
+ it('should allow tabIndex to be overridden', function () {
455
+ var rendered = findDOMNode(render(getMarkup({
456
+ tabIndex: -1
457
+ })));
458
+ expect(rendered.tabIndex).toEqual(-1);
459
+ });
460
+ });
461
+ it('should pass the cellRenderer an :isVisible flag', function () {
462
+ var rowRendererCalls = [];
463
+ function rowRenderer(props) {
464
+ rowRendererCalls.push(props);
465
+ return null;
466
+ }
467
+ findDOMNode(render(getMarkup({
468
+ height: 50,
469
+ overscanIndicesGetter: defaultOverscanIndicesGetter,
470
+ overscanRowCount: 1,
471
+ rowHeight: 50,
472
+ rowRenderer: rowRenderer
473
+ })));
474
+ expect(rowRendererCalls[0].isVisible).toEqual(true);
475
+ expect(rowRendererCalls[1].isVisible).toEqual(false);
476
+ });
477
+ it('should relay the Grid :parent param to the :rowRenderer', function () {
478
+ var rowRenderer = jest.fn().mockReturnValue(null);
479
+ findDOMNode(render(getMarkup({
480
+ rowRenderer: rowRenderer
481
+ })));
482
+ expect(rowRenderer.mock.calls[0][0].parent).not.toBeUndefined();
483
+ });
484
+ describe('pure', function () {
485
+ it('should not re-render unless props have changed', function () {
486
+ var rowRendererCalled = false;
487
+ function rowRenderer(_ref5) {
488
+ var index = _ref5.index,
489
+ key = _ref5.key,
490
+ style = _ref5.style;
491
+ rowRendererCalled = true;
492
+ return /*#__PURE__*/React.createElement("div", {
493
+ key: key,
494
+ style: style
495
+ }, index);
496
+ }
497
+ var markup = getMarkup({
498
+ rowRenderer: rowRenderer
499
+ });
500
+ render(markup);
501
+ expect(rowRendererCalled).toEqual(true);
502
+ rowRendererCalled = false;
503
+ render(markup);
504
+ expect(rowRendererCalled).toEqual(false);
505
+ });
506
+ });
507
+ it('should set the width of the single-column inner Grid to auto', function () {
508
+ var rendered = findDOMNode(render(getMarkup()));
509
+ expect(rendered.querySelector('.ReactVirtualized__Grid__innerScrollContainer').style.width).toEqual('auto');
510
+ });
511
+ });