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