@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,1251 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ import _createClass from "@babel/runtime/helpers/createClass";
4
+ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
5
+ import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
6
+ import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
7
+ import _inherits from "@babel/runtime/helpers/inherits";
8
+ import _extends from "@babel/runtime/helpers/extends";
9
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
10
+ var _excluded = ["cellDataGetter", "cellRenderer", "columnData", "columnID", "columnStyle", "columnHeaderStyle", "disableSort", "headerRenderer", "maxWidth", "minWidth", "defaultSortDirection", "label"];
11
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
12
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
14
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
15
+ import * as React from 'react';
16
+ import { findDOMNode } from 'react-dom';
17
+ import { render } from '../TestUtils';
18
+ import { Simulate } from 'react-dom/test-utils';
19
+ import Immutable from 'immutable';
20
+ import Column from './Column';
21
+ import Table from './Table';
22
+ import SortDirection from './SortDirection';
23
+ describe('Table', function () {
24
+ var array = [];
25
+ for (var i = 0; i < 100; i++) {
26
+ array.push({
27
+ id: i,
28
+ name: "Name ".concat(i),
29
+ email: "user-".concat(i, "@treasure-data.com")
30
+ });
31
+ }
32
+ var list = Immutable.fromJS(array);
33
+
34
+ // Works with an Immutable List of Maps
35
+ function immutableRowGetter(_ref) {
36
+ var index = _ref.index;
37
+ return list.get(index);
38
+ }
39
+
40
+ // Works with an Array of Objects
41
+ function vanillaRowGetter(_ref2) {
42
+ var index = _ref2.index;
43
+ return array[index];
44
+ }
45
+
46
+ // Override default behavior of overscanning by at least 1 (for accessibility)
47
+ // Because it makes for simple tests below
48
+ function overscanIndicesGetter(_ref3) {
49
+ var startIndex = _ref3.startIndex,
50
+ stopIndex = _ref3.stopIndex;
51
+ return {
52
+ overscanStartIndex: startIndex,
53
+ overscanStopIndex: stopIndex
54
+ };
55
+ }
56
+ function getMarkup() {
57
+ var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
58
+ cellDataGetter = _ref4.cellDataGetter,
59
+ cellRenderer = _ref4.cellRenderer,
60
+ _ref4$columnData = _ref4.columnData,
61
+ columnData = _ref4$columnData === void 0 ? {
62
+ data: 123
63
+ } : _ref4$columnData,
64
+ columnID = _ref4.columnID,
65
+ columnStyle = _ref4.columnStyle,
66
+ columnHeaderStyle = _ref4.columnHeaderStyle,
67
+ _ref4$disableSort = _ref4.disableSort,
68
+ disableSort = _ref4$disableSort === void 0 ? false : _ref4$disableSort,
69
+ headerRenderer = _ref4.headerRenderer,
70
+ maxWidth = _ref4.maxWidth,
71
+ minWidth = _ref4.minWidth,
72
+ defaultSortDirection = _ref4.defaultSortDirection,
73
+ label = _ref4.label,
74
+ flexTableProps = _objectWithoutProperties(_ref4, _excluded);
75
+ return /*#__PURE__*/React.createElement(Table, _extends({
76
+ headerHeight: 20,
77
+ height: 100,
78
+ overscanRowCount: 0,
79
+ overscanIndicesGetter: overscanIndicesGetter,
80
+ rowCount: list.size,
81
+ rowGetter: immutableRowGetter,
82
+ rowHeight: 10,
83
+ width: 100
84
+ }, flexTableProps), /*#__PURE__*/React.createElement(Column, {
85
+ label: label || 'Name',
86
+ dataKey: "name",
87
+ columnData: columnData,
88
+ width: 50,
89
+ cellRenderer: cellRenderer,
90
+ cellDataGetter: cellDataGetter,
91
+ headerRenderer: headerRenderer,
92
+ disableSort: disableSort,
93
+ defaultSortDirection: defaultSortDirection,
94
+ style: columnStyle,
95
+ headerStyle: columnHeaderStyle,
96
+ id: columnID
97
+ }), /*#__PURE__*/React.createElement(Column, {
98
+ label: "Email",
99
+ dataKey: "email",
100
+ maxWidth: maxWidth,
101
+ minWidth: minWidth,
102
+ width: 50
103
+ }), false, true, null, undefined);
104
+ }
105
+ beforeEach(function () {
106
+ return jest.resetModules();
107
+ });
108
+ describe('children', function () {
109
+ it('should accept Column children', function () {
110
+ var children = [/*#__PURE__*/React.createElement(Column, {
111
+ dataKey: "foo",
112
+ width: 100
113
+ })];
114
+ var result = Table.propTypes.children({
115
+ children: children
116
+ }, 'children', 'Table');
117
+ expect(result instanceof Error).toEqual(false);
118
+ });
119
+ it('should accept subclasses of Column as children', function () {
120
+ var AnotherColumn = /*#__PURE__*/function (_Column) {
121
+ function AnotherColumn() {
122
+ _classCallCheck(this, AnotherColumn);
123
+ return _callSuper(this, AnotherColumn, arguments);
124
+ }
125
+ _inherits(AnotherColumn, _Column);
126
+ return _createClass(AnotherColumn);
127
+ }(Column);
128
+ var children = [/*#__PURE__*/React.createElement(AnotherColumn, {
129
+ dataKey: "foo",
130
+ width: 100
131
+ })];
132
+ var result = Table.propTypes.children({
133
+ children: children
134
+ }, 'children', 'Table');
135
+ expect(result instanceof Error).toEqual(false);
136
+ });
137
+ it('should not accept non-Column children', function () {
138
+ var children = [/*#__PURE__*/React.createElement("div", null)];
139
+ var result = Table.propTypes.children({
140
+ children: children
141
+ }, 'children', 'Table');
142
+ expect(result instanceof Error).toEqual(true);
143
+ });
144
+ it('should accept falsy children to allow easier dynamic showing/hiding of columns', function () {
145
+ var children = [false, /*#__PURE__*/React.createElement(Column, {
146
+ dataKey: "foo",
147
+ width: 100
148
+ }), null];
149
+ var result = Table.propTypes.children({
150
+ children: children
151
+ }, 'children', 'Table');
152
+ expect(result instanceof Error).toEqual(false);
153
+ });
154
+ });
155
+ describe('height', function () {
156
+ it('should subtract header row height from the inner Grid height if headers are enabled', function () {
157
+ var rendered = findDOMNode(render(getMarkup({
158
+ headerHeight: 10,
159
+ overscanRowCount: 0,
160
+ rowHeight: 20,
161
+ height: 50
162
+ })));
163
+ var rows = rendered.querySelectorAll('.ReactVirtualized__Table__row');
164
+ expect(rows.length).toEqual(2);
165
+ });
166
+ it('should not subtract header row height from the inner Grid height if headers are disabled', function () {
167
+ var rendered = findDOMNode(render(getMarkup({
168
+ disableHeader: true,
169
+ headerHeight: 10,
170
+ overscanRowCount: 0,
171
+ rowHeight: 20,
172
+ height: 50
173
+ })));
174
+ var rows = rendered.querySelectorAll('.ReactVirtualized__Table__row');
175
+ expect(rows.length).toEqual(3);
176
+ });
177
+ });
178
+ describe('initial rendering', function () {
179
+ // Ensure that both Immutable Lists of Maps and Arrays of Objects are supported
180
+ var useImmutable = [true, false];
181
+ useImmutable.forEach(function (useImmutable) {
182
+ it('should render the correct number of rows', function () {
183
+ var rendered = findDOMNode(render(getMarkup({
184
+ rowGetter: useImmutable ? immutableRowGetter : vanillaRowGetter
185
+ })));
186
+ // 100px height should fit 1 header (20px) and 8 rows (10px each) -
187
+ expect(rendered.querySelectorAll('.ReactVirtualized__Table__headerRow').length).toEqual(1);
188
+ expect(rendered.querySelectorAll('.ReactVirtualized__Table__row').length).toEqual(8);
189
+ });
190
+ it('should render the expected headers', function () {
191
+ var rendered = findDOMNode(render(getMarkup({
192
+ rowGetter: useImmutable ? immutableRowGetter : vanillaRowGetter
193
+ })));
194
+ var columns = rendered.querySelectorAll('.ReactVirtualized__Table__headerColumn');
195
+ expect(columns.length).toEqual(2);
196
+ expect(columns[0].textContent).toEqual('Name');
197
+ expect(columns[1].textContent).toEqual('Email');
198
+ });
199
+ it('should render the expected rows and columns', function () {
200
+ var rendered = findDOMNode(render(getMarkup({
201
+ rowGetter: useImmutable ? immutableRowGetter : vanillaRowGetter,
202
+ headerHeight: 10,
203
+ rowHeight: 20,
204
+ height: 50
205
+ })));
206
+ var rows = rendered.querySelectorAll('.ReactVirtualized__Table__row');
207
+ expect(rows.length).toEqual(2);
208
+ Array.from(rows).forEach(function (row, index) {
209
+ var rowData = list.get(index);
210
+ var columns = row.querySelectorAll('.ReactVirtualized__Table__rowColumn');
211
+ expect(columns.length).toEqual(2);
212
+ expect(columns[0].textContent).toEqual(rowData.get('name'));
213
+ expect(columns[1].textContent).toEqual(rowData.get('email'));
214
+ });
215
+ });
216
+ });
217
+ it('should support a :rowHeight function', function () {
218
+ var rowHeight = function rowHeight(_ref5) {
219
+ var index = _ref5.index;
220
+ return 10 + index * 10;
221
+ };
222
+ var rendered = findDOMNode(render(getMarkup({
223
+ rowHeight: rowHeight,
224
+ rowCount: 3
225
+ })));
226
+ var rows = rendered.querySelectorAll('.ReactVirtualized__Table__row');
227
+ Array.from(rows).forEach(function (row, index) {
228
+ expect(Number.parseInt(row.style.height, 10)).toEqual(rowHeight({
229
+ index: index
230
+ }));
231
+ });
232
+ });
233
+ it('should support :minWidth and :maxWidth values for a column', function () {
234
+ var rendered = findDOMNode(render(getMarkup({
235
+ maxWidth: 75,
236
+ minWidth: 25,
237
+ rowCount: 1
238
+ })));
239
+ var columns = rendered.querySelectorAll('.ReactVirtualized__Table__rowColumn');
240
+ var emailColumn = columns[1];
241
+ expect(Number.parseInt(emailColumn.style.maxWidth, 10)).toEqual(75);
242
+ expect(Number.parseInt(emailColumn.style.minWidth, 10)).toEqual(25);
243
+ });
244
+ });
245
+ describe('measureAllRows', function () {
246
+ it('should measure any unmeasured rows', function () {
247
+ var rendered = render(getMarkup({
248
+ estimatedRowSize: 15,
249
+ height: 0,
250
+ rowCount: 10,
251
+ rowHeight: function rowHeight() {
252
+ return 20;
253
+ },
254
+ width: 0
255
+ }));
256
+ expect(rendered.Grid.state.instanceProps.rowSizeAndPositionManager.getTotalSize()).toEqual(150);
257
+ rendered.measureAllRows();
258
+ expect(rendered.Grid.state.instanceProps.rowSizeAndPositionManager.getTotalSize()).toEqual(200);
259
+ });
260
+ });
261
+ describe('recomputeRowHeights', function () {
262
+ it('should recompute row heights and other values when called', function () {
263
+ var indices = [];
264
+ var rowHeight = function rowHeight(_ref6) {
265
+ var index = _ref6.index;
266
+ indices.push(index);
267
+ return 10;
268
+ };
269
+ var component = render(getMarkup({
270
+ rowHeight: rowHeight,
271
+ rowCount: 50
272
+ }));
273
+ indices.splice(0);
274
+ component.recomputeRowHeights();
275
+
276
+ // Only the rows required to fill the current viewport will be rendered
277
+ expect(indices[0]).toEqual(0);
278
+ expect(indices[indices.length - 1]).toEqual(7);
279
+ indices.splice(0);
280
+ component.recomputeRowHeights(4);
281
+ expect(indices[0]).toEqual(4);
282
+ expect(indices[indices.length - 1]).toEqual(7);
283
+ });
284
+ });
285
+ describe('forceUpdateGrid', function () {
286
+ it('should refresh inner Grid content when called', function () {
287
+ var marker = 'a';
288
+ function cellRenderer(_ref7) {
289
+ var rowIndex = _ref7.rowIndex;
290
+ return "".concat(rowIndex).concat(marker);
291
+ }
292
+ var component = render(getMarkup({
293
+ cellRenderer: cellRenderer
294
+ }));
295
+ var node = findDOMNode(component);
296
+ expect(node.textContent).toContain('1a');
297
+ marker = 'b';
298
+ component.forceUpdateGrid();
299
+ expect(node.textContent).toContain('1b');
300
+ });
301
+ });
302
+ describe('custom getter functions', function () {
303
+ it('should use a custom cellDataGetter if specified', function () {
304
+ var rendered = findDOMNode(render(getMarkup({
305
+ cellDataGetter: function cellDataGetter(_ref8) {
306
+ var dataKey = _ref8.dataKey,
307
+ rowData = _ref8.rowData;
308
+ return "Custom ".concat(dataKey, " for row ").concat(rowData.get('id'));
309
+ }
310
+ })));
311
+ var nameColumns = rendered.querySelectorAll('.ReactVirtualized__Table__rowColumn:first-of-type');
312
+ Array.from(nameColumns).forEach(function (nameColumn, index) {
313
+ expect(nameColumn.textContent).toEqual("Custom name for row ".concat(index));
314
+ });
315
+ });
316
+ it('should use a custom cellRenderer if specified', function () {
317
+ var rendered = findDOMNode(render(getMarkup({
318
+ cellRenderer: function cellRenderer(_ref9) {
319
+ var cellData = _ref9.cellData;
320
+ return "Custom ".concat(cellData);
321
+ }
322
+ })));
323
+ var nameColumns = rendered.querySelectorAll('.ReactVirtualized__Table__rowColumn:first-of-type');
324
+ Array.from(nameColumns).forEach(function (nameColumn, index) {
325
+ var rowData = list.get(index);
326
+ expect(nameColumn.textContent).toEqual("Custom ".concat(rowData.get('name')));
327
+ });
328
+ });
329
+ it('should set the rendered cell content as the cell :title if it is a string', function () {
330
+ var rendered = findDOMNode(render(getMarkup({
331
+ cellRenderer: function cellRenderer() {
332
+ return 'Custom';
333
+ }
334
+ })));
335
+ var nameColumn = rendered.querySelector('.ReactVirtualized__Table__rowColumn:first-of-type');
336
+ expect(nameColumn.getAttribute('title')).toContain('Custom');
337
+ });
338
+ it('should not set a cell :title if the rendered cell content is not a string', function () {
339
+ var rendered = findDOMNode(render(getMarkup({
340
+ cellRenderer: function cellRenderer() {
341
+ return /*#__PURE__*/React.createElement("div", null, "Custom");
342
+ }
343
+ })));
344
+ var nameColumn = rendered.querySelector('.ReactVirtualized__Table__rowColumn:first-of-type');
345
+ expect(nameColumn.getAttribute('title')).toEqual(null);
346
+ });
347
+ it('should set the rendered header label as header :title if it is a string', function () {
348
+ var rendered = findDOMNode(render(getMarkup({
349
+ label: 'Custom'
350
+ })));
351
+ var nameColumn = rendered.querySelector('.ReactVirtualized__Table__headerTruncatedText:first-of-type');
352
+ expect(nameColumn.getAttribute('title')).toContain('Custom');
353
+ });
354
+ it('should not set a header :title if the rendered header label is not a string', function () {
355
+ var rendered = findDOMNode(render(getMarkup({
356
+ label: /*#__PURE__*/React.createElement("div", null, "Custom")
357
+ })));
358
+ var nameColumn = rendered.querySelector('.ReactVirtualized__Table__headerTruncatedText:first-of-type');
359
+ expect(nameColumn.getAttribute('title')).toEqual(null);
360
+ });
361
+ });
362
+ describe('sorting', function () {
363
+ it('should not render sort indicators if no sort function is provided', function () {
364
+ var rendered = findDOMNode(render(getMarkup()));
365
+ var nameColumn = rendered.querySelectorAll('.ReactVirtualized__Table__headerColumn:first-of-type');
366
+ expect(nameColumn.className || '').not.toContain('ReactVirtualized__Table__sortableHeaderColumn');
367
+ });
368
+ it('should not render sort indicators for non-sortable columns', function () {
369
+ var rendered = findDOMNode(render(getMarkup({
370
+ disableSort: true,
371
+ sort: function sort() {}
372
+ })));
373
+ var nameColumn = rendered.querySelectorAll('.ReactVirtualized__Table__headerColumn:first-of-type');
374
+ expect(nameColumn.className || '').not.toContain('ReactVirtualized__Table__sortableHeaderColumn');
375
+ expect(rendered.querySelectorAll('.ReactVirtualized__Table__sortableHeaderColumn').length).toEqual(1); // Email only
376
+ });
377
+ it('should render sortable column headers as sortable', function () {
378
+ var rendered = findDOMNode(render(getMarkup({
379
+ sort: function sort() {}
380
+ })));
381
+ var nameColumn = rendered.querySelector('.ReactVirtualized__Table__headerColumn:first-of-type');
382
+ expect(nameColumn.className).toContain('ReactVirtualized__Table__sortableHeaderColumn');
383
+ expect(rendered.querySelectorAll('.ReactVirtualized__Table__sortableHeaderColumn').length).toEqual(2); // Email and Name
384
+ });
385
+ it('should render the correct sort indicator by the current sort-by column', function () {
386
+ var sortDirections = [SortDirection.ASC, SortDirection.DESC];
387
+ sortDirections.forEach(function (sortDirection) {
388
+ var rendered = findDOMNode(render(getMarkup({
389
+ sort: function sort() {},
390
+ sortBy: 'name',
391
+ sortDirection: sortDirection
392
+ })));
393
+ var nameColumn = rendered.querySelector('.ReactVirtualized__Table__headerColumn:first-of-type');
394
+ expect(nameColumn.querySelector('.ReactVirtualized__Table__sortableHeaderIcon')).not.toEqual(null);
395
+ expect(nameColumn.querySelector(".ReactVirtualized__Table__sortableHeaderIcon--".concat(sortDirection))).not.toEqual(null);
396
+ });
397
+ });
398
+ it('should call sort with the correct arguments when the current sort-by column header is clicked', function () {
399
+ var sortDirections = [SortDirection.ASC, SortDirection.DESC];
400
+ sortDirections.forEach(function (sortDirection) {
401
+ var sortCalls = [];
402
+ var rendered = findDOMNode(render(getMarkup({
403
+ sort: function sort(_ref10) {
404
+ var sortBy = _ref10.sortBy,
405
+ sortDirection = _ref10.sortDirection;
406
+ return sortCalls.push({
407
+ sortBy: sortBy,
408
+ sortDirection: sortDirection
409
+ });
410
+ },
411
+ sortBy: 'name',
412
+ sortDirection: sortDirection
413
+ })));
414
+ var nameColumn = rendered.querySelector('.ReactVirtualized__Table__headerColumn:first-of-type');
415
+ Simulate.click(nameColumn);
416
+ expect(sortCalls.length).toEqual(1);
417
+ var _sortCalls$ = sortCalls[0],
418
+ sortBy = _sortCalls$.sortBy,
419
+ newSortDirection = _sortCalls$.sortDirection;
420
+ var expectedSortDirection = sortDirection === SortDirection.ASC ? SortDirection.DESC : SortDirection.ASC;
421
+ expect(sortBy).toEqual('name');
422
+ expect(newSortDirection).toEqual(expectedSortDirection);
423
+ });
424
+ });
425
+ it('should call sort with the correct arguments when a new sort-by column header is clicked', function () {
426
+ var sortCalls = [];
427
+ var rendered = findDOMNode(render(getMarkup({
428
+ sort: function sort(_ref11) {
429
+ var sortBy = _ref11.sortBy,
430
+ sortDirection = _ref11.sortDirection;
431
+ return sortCalls.push({
432
+ sortBy: sortBy,
433
+ sortDirection: sortDirection
434
+ });
435
+ },
436
+ sortBy: 'email',
437
+ sortDirection: SortDirection.ASC
438
+ })));
439
+ var nameColumn = rendered.querySelector('.ReactVirtualized__Table__headerColumn:first-of-type');
440
+ Simulate.click(nameColumn);
441
+ expect(sortCalls.length).toEqual(1);
442
+ var _sortCalls$2 = sortCalls[0],
443
+ sortBy = _sortCalls$2.sortBy,
444
+ sortDirection = _sortCalls$2.sortDirection;
445
+ expect(sortBy).toEqual('name');
446
+ expect(sortDirection).toEqual(SortDirection.ASC);
447
+ });
448
+ it('should call sort when a column header is activated via ENTER or SPACE key', function () {
449
+ var sortCalls = [];
450
+ var rendered = findDOMNode(render(getMarkup({
451
+ sort: function sort(_ref12) {
452
+ var sortBy = _ref12.sortBy,
453
+ sortDirection = _ref12.sortDirection;
454
+ return sortCalls.push({
455
+ sortBy: sortBy,
456
+ sortDirection: sortDirection
457
+ });
458
+ },
459
+ sortBy: 'name'
460
+ })));
461
+ var nameColumn = rendered.querySelector('.ReactVirtualized__Table__headerColumn:first-of-type');
462
+ expect(sortCalls.length).toEqual(0);
463
+ Simulate.keyDown(nameColumn, {
464
+ key: ' '
465
+ });
466
+ expect(sortCalls.length).toEqual(1);
467
+ Simulate.keyDown(nameColumn, {
468
+ key: 'Enter'
469
+ });
470
+ expect(sortCalls.length).toEqual(2);
471
+ Simulate.keyDown(nameColumn, {
472
+ key: 'F'
473
+ });
474
+ expect(sortCalls.length).toEqual(2);
475
+ });
476
+ it('should honor the default sort order on first click of the column', function () {
477
+ var sortDirections = [SortDirection.ASC, SortDirection.DESC];
478
+ sortDirections.forEach(function (sortDirection) {
479
+ var sortCalls = [];
480
+ var rendered = findDOMNode(render(getMarkup({
481
+ sort: function sort(_ref13) {
482
+ var sortBy = _ref13.sortBy,
483
+ sortDirection = _ref13.sortDirection;
484
+ return sortCalls.push({
485
+ sortBy: sortBy,
486
+ sortDirection: sortDirection
487
+ });
488
+ },
489
+ defaultSortDirection: sortDirection
490
+ })));
491
+ var nameColumn = rendered.querySelector('.ReactVirtualized__Table__headerColumn:first-of-type');
492
+ Simulate.click(nameColumn);
493
+ expect(sortCalls.length).toEqual(1);
494
+ var _sortCalls$3 = sortCalls[0],
495
+ sortBy = _sortCalls$3.sortBy,
496
+ newSortDirection = _sortCalls$3.sortDirection;
497
+ expect(sortBy).toEqual('name');
498
+ expect(newSortDirection).toEqual(sortDirection);
499
+ });
500
+ });
501
+ });
502
+ describe('headerRowRenderer', function () {
503
+ it('should render a custom header row if one is provided', function () {
504
+ var headerRowRenderer = jest.fn().mockReturnValue(/*#__PURE__*/React.createElement("div", null, "foo bar"));
505
+ var rendered = findDOMNode(render(getMarkup({
506
+ headerHeight: 33,
507
+ headerRowRenderer: headerRowRenderer,
508
+ rowClassName: 'someRowClass'
509
+ })));
510
+ expect(rendered.textContent).toContain('foo bar');
511
+ expect(headerRowRenderer).toHaveBeenCalled();
512
+ var params = headerRowRenderer.mock.calls[0][0];
513
+ expect(params.className).toContain('someRowClass');
514
+ expect(params.columns).toHaveLength(2);
515
+ expect(params.style.height).toBe(33);
516
+ });
517
+ });
518
+ describe('headerRenderer', function () {
519
+ it('should render a custom header if one is provided', function () {
520
+ var columnData = {
521
+ foo: 'foo',
522
+ bar: 'bar'
523
+ };
524
+ var headerRendererCalls = [];
525
+ var rendered = findDOMNode(render(getMarkup({
526
+ columnData: columnData,
527
+ headerRenderer: function headerRenderer(params) {
528
+ headerRendererCalls.push(params);
529
+ return 'custom header';
530
+ },
531
+ sortBy: 'name',
532
+ sortDirection: SortDirection.ASC
533
+ })));
534
+ var nameColumn = rendered.querySelector('.ReactVirtualized__Table__headerColumn:first-of-type');
535
+ expect(nameColumn.textContent).toContain('custom header');
536
+ expect(headerRendererCalls.length).toBeTruthy();
537
+ var headerRendererCall = headerRendererCalls[0];
538
+ expect(headerRendererCall.columnData).toEqual(columnData);
539
+ expect(headerRendererCall.dataKey).toEqual('name');
540
+ expect(headerRendererCall.disableSort).toEqual(false);
541
+ expect(headerRendererCall.label).toEqual('Name');
542
+ expect(headerRendererCall.sortBy).toEqual('name');
543
+ expect(headerRendererCall.sortDirection).toEqual(SortDirection.ASC);
544
+ });
545
+ it('should honor sort for custom headers', function () {
546
+ var sortCalls = [];
547
+ var rendered = findDOMNode(render(getMarkup({
548
+ headerRenderer: function headerRenderer() {
549
+ return 'custom header';
550
+ },
551
+ sort: function sort(_ref14) {
552
+ var sortBy = _ref14.sortBy,
553
+ sortDirection = _ref14.sortDirection;
554
+ return sortCalls.push([sortBy, sortDirection]);
555
+ },
556
+ sortBy: 'name',
557
+ sortDirection: SortDirection.ASC
558
+ })));
559
+ var nameColumn = rendered.querySelector('.ReactVirtualized__Table__headerColumn:first-of-type');
560
+ Simulate.click(nameColumn);
561
+ expect(sortCalls.length).toEqual(1);
562
+ var sortCall = sortCalls[0];
563
+ expect(sortCall[0]).toEqual('name');
564
+ expect(sortCall[1]).toEqual(SortDirection.DESC);
565
+ });
566
+ it('should honor :onHeaderClick for custom header', function () {
567
+ var columnData = {
568
+ foo: 'foo',
569
+ bar: 'bar'
570
+ };
571
+ var onHeaderClick = jest.fn();
572
+ var rendered = findDOMNode(render(getMarkup({
573
+ columnData: columnData,
574
+ headerRenderer: function headerRenderer() {
575
+ return 'custom header';
576
+ },
577
+ onHeaderClick: onHeaderClick
578
+ })));
579
+ var nameColumn = rendered.querySelector('.ReactVirtualized__Table__headerColumn:first-of-type');
580
+ Simulate.click(nameColumn);
581
+ expect(onHeaderClick).toHaveBeenCalledTimes(1);
582
+ var params = onHeaderClick.mock.calls[0][0];
583
+ expect(params.dataKey).toEqual('name');
584
+ expect(params.columnData).toEqual(columnData);
585
+ expect(params.event.type).toEqual('click');
586
+ });
587
+ });
588
+ describe('noRowsRenderer', function () {
589
+ it('should call :noRowsRenderer if :rowCount is 0', function () {
590
+ var rendered = render(getMarkup({
591
+ noRowsRenderer: function noRowsRenderer() {
592
+ return /*#__PURE__*/React.createElement("div", null, "No rows!");
593
+ },
594
+ rowCount: 0
595
+ }));
596
+ var bodyDOMNode = findDOMNode(rendered.Grid);
597
+ expect(bodyDOMNode.textContent).toEqual('No rows!');
598
+ });
599
+ it('should render an empty body if :rowCount is 0 and there is no :noRowsRenderer', function () {
600
+ var rendered = render(getMarkup({
601
+ rowCount: 0
602
+ }));
603
+ var bodyDOMNode = findDOMNode(rendered.Grid);
604
+ expect(bodyDOMNode.textContent).toEqual('');
605
+ });
606
+ });
607
+ describe('onColumnClick', function () {
608
+ it('should call :onColumnClick with the correct arguments when a column is clicked', function () {
609
+ var onColumnClick = jest.fn();
610
+ var rendered = findDOMNode(render(getMarkup({
611
+ onColumnClick: onColumnClick
612
+ })));
613
+ var nameColumn = rendered.querySelector('.ReactVirtualized__Table__rowColumn:first-of-type');
614
+ Simulate.click(nameColumn);
615
+ expect(onColumnClick).toHaveBeenCalledTimes(1);
616
+ var params = onColumnClick.mock.calls[0][0];
617
+ expect(params.dataKey).toEqual('name');
618
+ expect(params.columnData.data).toEqual(123);
619
+ expect(params.event.type).toEqual('click');
620
+ });
621
+ });
622
+ describe('onHeaderClick', function () {
623
+ it('should call :onHeaderClick with the correct arguments when a column header is clicked and sorting is disabled', function () {
624
+ var onHeaderClick = jest.fn();
625
+ var rendered = findDOMNode(render(getMarkup({
626
+ disableSort: true,
627
+ onHeaderClick: onHeaderClick
628
+ })));
629
+ var nameColumn = rendered.querySelector('.ReactVirtualized__Table__headerColumn:first-of-type');
630
+ Simulate.click(nameColumn);
631
+ expect(onHeaderClick).toHaveBeenCalledTimes(1);
632
+ var params = onHeaderClick.mock.calls[0][0];
633
+ expect(params.dataKey).toEqual('name');
634
+ expect(params.columnData.data).toEqual(123);
635
+ expect(params.event.type).toEqual('click');
636
+ });
637
+ it('should call :onHeaderClick with the correct arguments when a column header is clicked and sorting is enabled', function () {
638
+ var onHeaderClick = jest.fn();
639
+ var rendered = findDOMNode(render(getMarkup({
640
+ disableSort: false,
641
+ onHeaderClick: onHeaderClick
642
+ })));
643
+ var nameColumn = rendered.querySelector('.ReactVirtualized__Table__headerColumn:first-of-type');
644
+ Simulate.click(nameColumn);
645
+ expect(onHeaderClick).toHaveBeenCalledTimes(1);
646
+ var params = onHeaderClick.mock.calls[0][0];
647
+ expect(params.dataKey).toEqual('name');
648
+ expect(params.columnData.data).toEqual(123);
649
+ expect(params.event.type).toEqual('click');
650
+ });
651
+ });
652
+ describe('onRowClick', function () {
653
+ it('should call :onRowClick with the correct :rowIndex when a row is clicked', function () {
654
+ var onRowClick = jest.fn();
655
+ var rendered = findDOMNode(render(getMarkup({
656
+ onRowClick: onRowClick
657
+ })));
658
+ var rows = rendered.querySelectorAll('.ReactVirtualized__Table__row');
659
+ Simulate.click(rows[0]);
660
+ Simulate.click(rows[3]);
661
+ expect(onRowClick).toHaveBeenCalledTimes(2);
662
+ expect(onRowClick.mock.calls.map(function (call) {
663
+ return call[0].index;
664
+ })).toEqual([0, 3]);
665
+ });
666
+ });
667
+ describe('onRowDoubleClick', function () {
668
+ it('should call :onRowDoubleClick with the correct :rowIndex when a row is clicked', function () {
669
+ var onRowDoubleClick = jest.fn();
670
+ var rendered = findDOMNode(render(getMarkup({
671
+ onRowDoubleClick: onRowDoubleClick
672
+ })));
673
+ var rows = rendered.querySelectorAll('.ReactVirtualized__Table__row');
674
+ Simulate.doubleClick(rows[0]);
675
+ Simulate.doubleClick(rows[3]);
676
+ expect(onRowDoubleClick).toHaveBeenCalledTimes(2);
677
+ expect(onRowDoubleClick.mock.calls.map(function (call) {
678
+ return call[0].index;
679
+ })).toEqual([0, 3]);
680
+ });
681
+ });
682
+ describe('onRowRightClick', function () {
683
+ it('should call :onRowRightClick with the correct :rowIndex when a row is right-clicked', function () {
684
+ var onRowRightClick = jest.fn();
685
+ var rendered = findDOMNode(render(getMarkup({
686
+ onRowRightClick: onRowRightClick
687
+ })));
688
+ var rows = rendered.querySelectorAll('.ReactVirtualized__Table__row');
689
+ Simulate.contextMenu(rows[0]);
690
+ Simulate.contextMenu(rows[3]);
691
+ expect(onRowRightClick).toHaveBeenCalledTimes(2);
692
+ expect(onRowRightClick.mock.calls.map(function (call) {
693
+ return call[0].index;
694
+ })).toEqual([0, 3]);
695
+ });
696
+ });
697
+ describe('onRowMouseOver/Out', function () {
698
+ it('should call :onRowMouseOver and :onRowMouseOut with the correct :rowIndex when the mouse is moved over rows', function () {
699
+ var onRowMouseOver = jest.fn();
700
+ var onRowMouseOut = jest.fn();
701
+ var rendered = findDOMNode(render(getMarkup({
702
+ onRowMouseOver: onRowMouseOver,
703
+ onRowMouseOut: onRowMouseOut
704
+ })));
705
+ var simulateMouseOver = function simulateMouseOver(from, to) {
706
+ Simulate.mouseOut(from, {
707
+ relatedTarget: to
708
+ });
709
+ Simulate.mouseOver(to, {
710
+ relatedTarget: from
711
+ });
712
+ };
713
+ var rows = rendered.querySelectorAll('.ReactVirtualized__Table__row');
714
+ simulateMouseOver(rows[0], rows[1]);
715
+ simulateMouseOver(rows[1], rows[2]);
716
+ simulateMouseOver(rows[2], rows[3]);
717
+ expect(onRowMouseOver).toHaveBeenCalled();
718
+ expect(onRowMouseOut).toHaveBeenCalled();
719
+ expect(onRowMouseOver.mock.calls.map(function (call) {
720
+ return call[0].index;
721
+ })).toEqual([1, 2, 3]);
722
+ expect(onRowMouseOut.mock.calls.map(function (call) {
723
+ return call[0].index;
724
+ })).toEqual([0, 1, 2]);
725
+ });
726
+ });
727
+ describe('rowClassName', function () {
728
+ it('should render a static classname given :rowClassName as a string', function () {
729
+ var staticClassName = 'staticClass';
730
+ var rendered = findDOMNode(render(getMarkup({
731
+ rowClassName: staticClassName
732
+ })));
733
+ var rows = rendered.querySelectorAll('.ReactVirtualized__Table__row');
734
+ Array.from(rows).forEach(function (row) {
735
+ expect(row.className).toContain(staticClassName);
736
+ });
737
+ });
738
+ it('should render dynamic classname given :rowClassName as a function', function () {
739
+ var rendered = findDOMNode(render(getMarkup({
740
+ rowClassName: function rowClassName(_ref15) {
741
+ var index = _ref15.index;
742
+ return index % 2 === 0 ? 'even' : 'odd';
743
+ }
744
+ })));
745
+ var rows = rendered.querySelectorAll('.ReactVirtualized__Table__row');
746
+ Array.from(rows).forEach(function (row, index) {
747
+ if (index % 2 === 0) {
748
+ expect(row.className).toContain('even');
749
+ expect(row.className).not.toContain('odd');
750
+ } else {
751
+ expect(row.className).toContain('odd');
752
+ expect(row.className).not.toContain('even');
753
+ }
754
+ });
755
+ });
756
+ });
757
+ describe('onRowsRendered', function () {
758
+ it('should call :onRowsRendered at least one row is rendered', function () {
759
+ var startIndex, stopIndex;
760
+ render(getMarkup({
761
+ onRowsRendered: function onRowsRendered(params) {
762
+ var _params;
763
+ return _params = params, startIndex = _params.startIndex, stopIndex = _params.stopIndex, _params;
764
+ }
765
+ }));
766
+ expect(startIndex).toEqual(0);
767
+ expect(stopIndex).toEqual(7);
768
+ });
769
+ it('should not call :onRowsRendered unless the start or stop indices have changed', function () {
770
+ var numCalls = 0;
771
+ var startIndex;
772
+ var stopIndex;
773
+ var onRowsRendered = function onRowsRendered(params) {
774
+ startIndex = params.startIndex;
775
+ stopIndex = params.stopIndex;
776
+ numCalls++;
777
+ };
778
+ render(getMarkup({
779
+ onRowsRendered: onRowsRendered
780
+ }));
781
+ expect(numCalls).toEqual(1);
782
+ expect(startIndex).toEqual(0);
783
+ expect(stopIndex).toEqual(7);
784
+ render(getMarkup({
785
+ onRowsRendered: onRowsRendered
786
+ }));
787
+ expect(numCalls).toEqual(1);
788
+ expect(startIndex).toEqual(0);
789
+ expect(stopIndex).toEqual(7);
790
+ });
791
+ it('should call :onRowsRendered if the start or stop indices have changed', function () {
792
+ var numCalls = 0;
793
+ var startIndex;
794
+ var stopIndex;
795
+ var onRowsRendered = function onRowsRendered(params) {
796
+ startIndex = params.startIndex;
797
+ stopIndex = params.stopIndex;
798
+ numCalls++;
799
+ };
800
+ render(getMarkup({
801
+ onRowsRendered: onRowsRendered
802
+ }));
803
+ expect(numCalls).toEqual(1);
804
+ expect(startIndex).toEqual(0);
805
+ expect(stopIndex).toEqual(7);
806
+ render(getMarkup({
807
+ height: 50,
808
+ onRowsRendered: onRowsRendered
809
+ }));
810
+ expect(numCalls).toEqual(2);
811
+ expect(startIndex).toEqual(0);
812
+ expect(stopIndex).toEqual(2);
813
+ });
814
+ it('should not call :onRowsRendered if no rows are rendered', function () {
815
+ var startIndex, stopIndex;
816
+ render(getMarkup({
817
+ height: 0,
818
+ onRowsRendered: function onRowsRendered(params) {
819
+ var _params2;
820
+ return _params2 = params, startIndex = _params2.startIndex, stopIndex = _params2.stopIndex, _params2;
821
+ }
822
+ }));
823
+ expect(startIndex).toEqual(undefined);
824
+ expect(stopIndex).toEqual(undefined);
825
+ });
826
+ });
827
+ describe(':scrollTop property', function () {
828
+ it('should render correctly when an initial :scrollTop property is specified', function () {
829
+ var startIndex, stopIndex;
830
+ render(getMarkup({
831
+ onRowsRendered: function onRowsRendered(params) {
832
+ var _params3;
833
+ return _params3 = params, startIndex = _params3.startIndex, stopIndex = _params3.stopIndex, _params3;
834
+ },
835
+ scrollTop: 80
836
+ }));
837
+ expect(startIndex).toEqual(8);
838
+ expect(stopIndex).toEqual(15);
839
+ });
840
+ it('should render correctly when :scrollTop property is updated', function () {
841
+ var startIndex, stopIndex;
842
+ render(getMarkup({
843
+ onRowsRendered: function onRowsRendered(params) {
844
+ var _params4;
845
+ return _params4 = params, startIndex = _params4.startIndex, stopIndex = _params4.stopIndex, _params4;
846
+ }
847
+ }));
848
+ expect(startIndex).toEqual(0);
849
+ expect(stopIndex).toEqual(7);
850
+ render(getMarkup({
851
+ onRowsRendered: function onRowsRendered(params) {
852
+ var _params5;
853
+ return _params5 = params, startIndex = _params5.startIndex, stopIndex = _params5.stopIndex, _params5;
854
+ },
855
+ scrollTop: 80
856
+ }));
857
+ expect(startIndex).toEqual(8);
858
+ expect(stopIndex).toEqual(15);
859
+ });
860
+ });
861
+ describe('styles, classNames, and ids', function () {
862
+ it('should use the expected global CSS classNames', function () {
863
+ var node = findDOMNode(render(getMarkup({
864
+ sort: function sort() {},
865
+ sortBy: 'name',
866
+ sortDirection: SortDirection.ASC
867
+ })));
868
+ expect(node.className).toEqual('ReactVirtualized__Table');
869
+ expect(node.querySelector('.ReactVirtualized__Table__headerRow')).toBeTruthy();
870
+ expect(node.querySelector('.ReactVirtualized__Table__rowColumn')).toBeTruthy();
871
+ expect(node.querySelector('.ReactVirtualized__Table__headerColumn')).toBeTruthy();
872
+ expect(node.querySelector('.ReactVirtualized__Table__row')).toBeTruthy();
873
+ expect(node.querySelector('.ReactVirtualized__Table__sortableHeaderColumn')).toBeTruthy();
874
+ expect(node.querySelector('.ReactVirtualized__Table__sortableHeaderIcon')).toBeTruthy();
875
+ });
876
+ it('should use a custom :className if specified', function () {
877
+ var node = findDOMNode(render(getMarkup({
878
+ className: 'foo',
879
+ headerClassName: 'bar',
880
+ rowClassName: 'baz'
881
+ })));
882
+ expect(node.className).toContain('foo');
883
+ expect(node.querySelectorAll('.bar').length).toEqual(2);
884
+ expect(node.querySelectorAll('.baz').length).toEqual(9);
885
+ });
886
+ it('should use a custom :id if specified', function () {
887
+ var node = findDOMNode(render(getMarkup({
888
+ id: 'bar'
889
+ })));
890
+ expect(node.getAttribute('id')).toEqual('bar');
891
+ });
892
+ it('should not set :id on the inner Grid', function () {
893
+ var node = findDOMNode(render(getMarkup({
894
+ id: 'bar'
895
+ })));
896
+ var grid = node.querySelector('.ReactVirtualized__Grid');
897
+ expect(grid.getAttribute('id')).not.toEqual('bar');
898
+ });
899
+ it('should use custom :styles if specified', function () {
900
+ var columnStyle = {
901
+ backgroundColor: 'red',
902
+ overflow: 'visible'
903
+ };
904
+ var headerStyle = {
905
+ backgroundColor: 'blue'
906
+ };
907
+ var columnHeaderStyle = {
908
+ color: 'yellow'
909
+ };
910
+ var rowStyle = {
911
+ backgroundColor: 'green'
912
+ };
913
+ var style = {
914
+ backgroundColor: 'orange'
915
+ };
916
+ var node = findDOMNode(render(getMarkup({
917
+ columnStyle: columnStyle,
918
+ headerStyle: headerStyle,
919
+ columnHeaderStyle: columnHeaderStyle,
920
+ rowStyle: rowStyle,
921
+ style: style
922
+ })));
923
+ expect(node.querySelector('.ReactVirtualized__Table__rowColumn').style.backgroundColor).toEqual('red');
924
+ expect(node.querySelector('.ReactVirtualized__Table__rowColumn').style.overflow).toEqual('visible');
925
+ expect(node.querySelector('.ReactVirtualized__Table__headerColumn').style.backgroundColor).toEqual('blue');
926
+ expect(node.querySelector('.ReactVirtualized__Table__headerColumn').style.color).toEqual('yellow');
927
+ expect(node.querySelector('.ReactVirtualized__Table__row').style.backgroundColor).toEqual('green');
928
+ expect(node.style.backgroundColor).toEqual('orange');
929
+ });
930
+ it('should render dynamic style given :rowStyle as a function', function () {
931
+ var rendered = findDOMNode(render(getMarkup({
932
+ rowStyle: function rowStyle(_ref16) {
933
+ var index = _ref16.index;
934
+ return index % 2 === 0 ? {
935
+ backgroundColor: 'red'
936
+ } : {
937
+ backgroundColor: 'green'
938
+ };
939
+ }
940
+ })));
941
+ var rows = rendered.querySelectorAll('.ReactVirtualized__Table__row');
942
+ Array.from(rows).forEach(function (row, index) {
943
+ if (index % 2 === 0) {
944
+ expect(row.style.backgroundColor).toEqual('red');
945
+ } else {
946
+ expect(row.style.backgroundColor).toEqual('green');
947
+ }
948
+ });
949
+ });
950
+ it('should pass :gridClassName and :gridStyle to the inner Grid', function () {
951
+ var rendered = findDOMNode(render(getMarkup({
952
+ gridClassName: 'foo',
953
+ gridStyle: {
954
+ backgroundColor: 'red'
955
+ }
956
+ })));
957
+ var grid = rendered.querySelector('.ReactVirtualized__Grid');
958
+ expect(grid.className).toContain('foo');
959
+ expect(grid.style.backgroundColor).toEqual('red');
960
+ });
961
+ });
962
+ describe('overscanRowCount', function () {
963
+ it('should not overscan by default', function () {
964
+ var mock = jest.fn();
965
+ mock.mockImplementation(overscanIndicesGetter);
966
+ render(getMarkup({
967
+ overscanIndicesGetter: mock
968
+ }));
969
+ expect(mock.mock.calls[0][0].overscanCellsCount).toEqual(0);
970
+ expect(mock.mock.calls[1][0].overscanCellsCount).toEqual(0);
971
+ });
972
+ it('should overscan the specified amount', function () {
973
+ var mock = jest.fn();
974
+ mock.mockImplementation(overscanIndicesGetter);
975
+ render(getMarkup({
976
+ overscanIndicesGetter: mock,
977
+ overscanRowCount: 10
978
+ }));
979
+ expect(mock.mock.calls[0][0].overscanCellsCount).toEqual(0);
980
+ expect(mock.mock.calls[1][0].overscanCellsCount).toEqual(10);
981
+ });
982
+ });
983
+ describe('onScroll', function () {
984
+ it('should trigger callback when component initially mounts', function () {
985
+ var onScrollCalls = [];
986
+ render(getMarkup({
987
+ onScroll: function onScroll(params) {
988
+ return onScrollCalls.push(params);
989
+ }
990
+ }));
991
+ expect(onScrollCalls).toEqual([{
992
+ clientHeight: 80,
993
+ scrollHeight: 1000,
994
+ scrollTop: 0
995
+ }]);
996
+ });
997
+ it('should trigger callback when component scrolls', function () {
998
+ var onScrollCalls = [];
999
+ var rendered = render(getMarkup({
1000
+ onScroll: function onScroll(params) {
1001
+ return onScrollCalls.push(params);
1002
+ }
1003
+ }));
1004
+ var target = {
1005
+ scrollLeft: 0,
1006
+ scrollTop: 100
1007
+ };
1008
+ rendered.Grid._scrollingContainer = target; // HACK to work around _onScroll target check
1009
+ Simulate.scroll(findDOMNode(rendered.Grid), {
1010
+ target: target
1011
+ });
1012
+ expect(onScrollCalls.length).toEqual(2);
1013
+ expect(onScrollCalls[1]).toEqual({
1014
+ clientHeight: 80,
1015
+ scrollHeight: 1000,
1016
+ scrollTop: 100
1017
+ });
1018
+ });
1019
+ });
1020
+ describe('a11y properties', function () {
1021
+ it('should set aria role on the table', function () {
1022
+ var node = findDOMNode(render(getMarkup()));
1023
+ expect(node.getAttribute('role')).toEqual('grid');
1024
+ });
1025
+ it('should set aria col/row count on the table', function () {
1026
+ var node = findDOMNode(render(getMarkup()));
1027
+ expect(node.getAttribute('aria-colcount')).toEqual('2');
1028
+ expect(node.getAttribute('aria-rowcount')).toEqual("".concat(list.size));
1029
+ });
1030
+ it('should pass down aria labels on the table', function () {
1031
+ var node = findDOMNode(render(getMarkup({
1032
+ 'aria-label': 'my-table-label',
1033
+ 'aria-labelledby': 'my-table-label-id'
1034
+ })));
1035
+ expect(node.getAttribute('aria-label')).toEqual('my-table-label');
1036
+ expect(node.getAttribute('aria-labelledby')).toEqual('my-table-label-id');
1037
+ });
1038
+ it('should set aria role on the header row', function () {
1039
+ var rendered = findDOMNode(render(getMarkup()));
1040
+ var row = rendered.querySelector('.ReactVirtualized__Table__headerRow');
1041
+ expect(row.getAttribute('role')).toEqual('row');
1042
+ });
1043
+ it('should set appropriate aria role on the grid', function () {
1044
+ var rendered = findDOMNode(render(getMarkup()));
1045
+ var grid = rendered.querySelector('.ReactVirtualized__Table__Grid');
1046
+ expect(grid.getAttribute('role')).toEqual('rowgroup');
1047
+ });
1048
+ it('should set aria role on a row', function () {
1049
+ var rendered = findDOMNode(render(getMarkup()));
1050
+ var row = rendered.querySelector('.ReactVirtualized__Table__row');
1051
+ expect(row.getAttribute('role')).toEqual('row');
1052
+ });
1053
+ it('should set aria rowindex on a row', function () {
1054
+ var rendered = findDOMNode(render(getMarkup()));
1055
+ var rows = rendered.querySelectorAll('.ReactVirtualized__Table__row');
1056
+ expect(rows[0].getAttribute('aria-rowindex')).toEqual('1');
1057
+ expect(rows[1].getAttribute('aria-rowindex')).toEqual('2');
1058
+ });
1059
+ it('should set aria role on a cell', function () {
1060
+ var rendered = findDOMNode(render(getMarkup()));
1061
+ var cell = rendered.querySelector('.ReactVirtualized__Table__rowColumn');
1062
+ expect(cell.getAttribute('role')).toEqual('gridcell');
1063
+ });
1064
+ it('should set aria colindex on a cell', function () {
1065
+ var rendered = findDOMNode(render(getMarkup()));
1066
+ var cells = rendered.querySelectorAll('.ReactVirtualized__Table__rowColumn');
1067
+ expect(cells[0].getAttribute('aria-colindex')).toEqual('1');
1068
+ expect(cells[1].getAttribute('aria-colindex')).toEqual('2');
1069
+ });
1070
+ it('should set aria-describedby on a cell when the column has an id', function () {
1071
+ var columnID = 'column-header-test';
1072
+ var rendered = findDOMNode(render(getMarkup({
1073
+ columnID: columnID
1074
+ })));
1075
+ var cell = rendered.querySelector('.ReactVirtualized__Table__rowColumn');
1076
+ expect(cell.getAttribute('aria-describedby')).toEqual(columnID);
1077
+ });
1078
+ it('should attach a11y properties to a row if :onRowClick is specified', function () {
1079
+ var rendered = findDOMNode(render(getMarkup({
1080
+ onRowClick: function onRowClick() {}
1081
+ })));
1082
+ var row = rendered.querySelector('.ReactVirtualized__Table__row');
1083
+ expect(row.getAttribute('aria-label')).toEqual('row');
1084
+ expect(row.tabIndex).toEqual(0);
1085
+ });
1086
+ it('should not attach a11y properties to a row if no :onRowClick is specified', function () {
1087
+ var rendered = findDOMNode(render(getMarkup({
1088
+ onRowClick: null
1089
+ })));
1090
+ var row = rendered.querySelector('.ReactVirtualized__Table__row');
1091
+ expect(row.getAttribute('aria-label')).toEqual(null);
1092
+ expect(row.tabIndex).toEqual(-1);
1093
+ });
1094
+ it('should set aria role on a header column', function () {
1095
+ var rendered = findDOMNode(render(getMarkup()));
1096
+ var header = rendered.querySelector('.ReactVirtualized__Table__headerColumn');
1097
+ expect(header.getAttribute('role')).toEqual('columnheader');
1098
+ });
1099
+ it('should set aria-sort ascending on a header column if the column is sorted ascending', function () {
1100
+ var rendered = findDOMNode(render(getMarkup({
1101
+ sortBy: 'name',
1102
+ sortDirection: SortDirection.ASC
1103
+ })));
1104
+ var header = rendered.querySelector('.ReactVirtualized__Table__headerColumn');
1105
+ expect(header.getAttribute('aria-sort')).toEqual('ascending');
1106
+ });
1107
+ it('should set aria-sort descending on a header column if the column is sorted descending', function () {
1108
+ var rendered = findDOMNode(render(getMarkup({
1109
+ sortBy: 'name',
1110
+ sortDirection: SortDirection.DESC
1111
+ })));
1112
+ var header = rendered.querySelector('.ReactVirtualized__Table__headerColumn');
1113
+ expect(header.getAttribute('aria-sort')).toEqual('descending');
1114
+ });
1115
+ it('should set aria-sort to "none" if the column is sortable but not the current sort', function () {
1116
+ var rendered = findDOMNode(render(getMarkup({
1117
+ disableSort: true,
1118
+ sort: jest.fn()
1119
+ })));
1120
+ var headers = rendered.querySelectorAll('.ReactVirtualized__Table__headerColumn');
1121
+ // the first column is not sortable
1122
+ expect(headers[0].getAttribute('aria-sort')).toBe(null);
1123
+ // the second column is sortable
1124
+ expect(headers[1].getAttribute('aria-sort')).toEqual('none');
1125
+ });
1126
+ it('should set id on a header column when the column has an id', function () {
1127
+ var columnID = 'column-header-test';
1128
+ var rendered = findDOMNode(render(getMarkup({
1129
+ columnID: columnID
1130
+ })));
1131
+ var header = rendered.querySelector('.ReactVirtualized__Table__headerColumn');
1132
+ expect(header.getAttribute('id')).toEqual(columnID);
1133
+ });
1134
+ it('should attach a11y properties to a header column if sort is enabled', function () {
1135
+ var rendered = findDOMNode(render(getMarkup({
1136
+ disableSort: false,
1137
+ sort: function sort() {}
1138
+ })));
1139
+ var row = rendered.querySelector('.ReactVirtualized__Table__headerColumn');
1140
+ expect(row.getAttribute('aria-label')).toEqual('Name');
1141
+ expect(row.tabIndex).toEqual(0);
1142
+ });
1143
+ it('should not attach a11y properties to a header column if sort is not enabled', function () {
1144
+ var rendered = findDOMNode(render(getMarkup({
1145
+ disableSort: true
1146
+ })));
1147
+ var row = rendered.querySelector('.ReactVirtualized__Table__headerColumn');
1148
+ expect(row.getAttribute('aria-label')).toEqual(null);
1149
+ expect(row.tabIndex).toEqual(-1);
1150
+ });
1151
+ });
1152
+ describe('tabIndex', function () {
1153
+ it('should be focusable by default', function () {
1154
+ var rendered = findDOMNode(render(getMarkup()));
1155
+ expect(rendered.querySelector('.ReactVirtualized__Grid').tabIndex).toEqual(0);
1156
+ });
1157
+ it('should allow tabIndex to be overridden', function () {
1158
+ var rendered = findDOMNode(render(getMarkup({
1159
+ tabIndex: -1
1160
+ })));
1161
+ expect(rendered.querySelector('.ReactVirtualized__Grid').tabIndex).toEqual(-1);
1162
+ });
1163
+ });
1164
+ describe('pure', function () {
1165
+ it('should not re-render unless props have changed', function () {
1166
+ var headerRendererCalled = false;
1167
+ var cellRendererCalled = false;
1168
+ function headerRenderer() {
1169
+ headerRendererCalled = true;
1170
+ return 'foo';
1171
+ }
1172
+ function cellRenderer() {
1173
+ cellRendererCalled = true;
1174
+ return 'foo';
1175
+ }
1176
+ var markup = getMarkup({
1177
+ headerRenderer: headerRenderer,
1178
+ cellRenderer: cellRenderer
1179
+ });
1180
+ render(markup);
1181
+ expect(headerRendererCalled).toEqual(true);
1182
+ expect(cellRendererCalled).toEqual(true);
1183
+ headerRendererCalled = false;
1184
+ cellRendererCalled = false;
1185
+ render(markup);
1186
+ expect(headerRendererCalled).toEqual(false);
1187
+ expect(cellRendererCalled).toEqual(false);
1188
+ });
1189
+ it('should re-render both the Table and the inner Grid whenever an external property changes', function () {
1190
+ var headerRendererCalled = false;
1191
+ var cellRendererCalled = false;
1192
+ function headerRenderer() {
1193
+ headerRendererCalled = true;
1194
+ return 'foo';
1195
+ }
1196
+ function cellRenderer() {
1197
+ cellRendererCalled = true;
1198
+ return 'foo';
1199
+ }
1200
+ var initialProperties = {
1201
+ autoHeight: false,
1202
+ cellRenderer: cellRenderer,
1203
+ estimatedRowSize: 15,
1204
+ headerRenderer: headerRenderer,
1205
+ overscanRowCount: 1,
1206
+ rowHeight: 15,
1207
+ rowCount: 20,
1208
+ scrollToAlignment: 'auto',
1209
+ scrollTop: 0,
1210
+ sortBy: 'name',
1211
+ sortDirection: SortDirection.ASC,
1212
+ tabIndex: null
1213
+ };
1214
+ var changedProperties = {
1215
+ autoHeight: true,
1216
+ estimatedRowSize: 10,
1217
+ overscanRowCount: 0,
1218
+ rowHeight: 10,
1219
+ rowCount: 10,
1220
+ scrollToAlignment: 'center',
1221
+ scrollTop: 1,
1222
+ sortBy: 'email',
1223
+ sortDirection: SortDirection.DESC,
1224
+ tabIndex: 1
1225
+ };
1226
+ Object.entries(changedProperties).forEach(function (_ref17) {
1227
+ var _ref18 = _slicedToArray(_ref17, 2),
1228
+ key = _ref18[0],
1229
+ value = _ref18[1];
1230
+ render.unmount(); // Reset
1231
+ render(getMarkup(initialProperties));
1232
+ headerRendererCalled = true;
1233
+ cellRendererCalled = false;
1234
+ render(getMarkup(_objectSpread(_objectSpread({}, initialProperties), {}, _defineProperty({}, key, value))));
1235
+ expect(headerRendererCalled).toEqual(true);
1236
+ expect(cellRendererCalled).toEqual(true);
1237
+ });
1238
+ });
1239
+ });
1240
+ it('should set the width of the single-column inner Grid to auto', function () {
1241
+ var rendered = findDOMNode(render(getMarkup()));
1242
+ expect(rendered.querySelector('.ReactVirtualized__Grid__innerScrollContainer').style.width).toEqual('auto');
1243
+ });
1244
+ it('should relay the Grid :parent param to the Column :cellRenderer', function () {
1245
+ var cellRenderer = jest.fn().mockReturnValue(null);
1246
+ findDOMNode(render(getMarkup({
1247
+ cellRenderer: cellRenderer
1248
+ })));
1249
+ expect(cellRenderer.mock.calls[0][0].parent).not.toBeUndefined();
1250
+ });
1251
+ });