@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.
- package/LICENSE +22 -0
- package/README.md +34 -0
- package/changes.json +22 -0
- package/dist/commonjs/ArrowKeyStepper/ArrowKeyStepper.example.js +184 -0
- package/dist/commonjs/ArrowKeyStepper/ArrowKeyStepper.jest.js +338 -0
- package/dist/commonjs/ArrowKeyStepper/ArrowKeyStepper.js +204 -0
- package/dist/commonjs/ArrowKeyStepper/index.js +19 -0
- package/dist/commonjs/ArrowKeyStepper/types.js +5 -0
- package/dist/commonjs/AutoSizer/AutoSizer.example.js +104 -0
- package/dist/commonjs/AutoSizer/AutoSizer.jest.js +341 -0
- package/dist/commonjs/AutoSizer/AutoSizer.js +199 -0
- package/dist/commonjs/AutoSizer/AutoSizer.ssr.js +25 -0
- package/dist/commonjs/AutoSizer/index.js +19 -0
- package/dist/commonjs/CellMeasurer/CellMeasurer.DynamicHeightGrid.example.js +100 -0
- package/dist/commonjs/CellMeasurer/CellMeasurer.DynamicHeightList.example.js +99 -0
- package/dist/commonjs/CellMeasurer/CellMeasurer.DynamicHeightTableColumn.example.js +107 -0
- package/dist/commonjs/CellMeasurer/CellMeasurer.DynamicWidthGrid.example.js +102 -0
- package/dist/commonjs/CellMeasurer/CellMeasurer.DynamicWidthMultiGrid.example.js +107 -0
- package/dist/commonjs/CellMeasurer/CellMeasurer.example.js +129 -0
- package/dist/commonjs/CellMeasurer/CellMeasurer.jest.js +345 -0
- package/dist/commonjs/CellMeasurer/CellMeasurer.js +195 -0
- package/dist/commonjs/CellMeasurer/CellMeasurerCache.jest.js +298 -0
- package/dist/commonjs/CellMeasurer/CellMeasurerCache.js +202 -0
- package/dist/commonjs/CellMeasurer/index.js +22 -0
- package/dist/commonjs/CellMeasurer/types.js +14 -0
- package/dist/commonjs/Collection/Collection.example.js +231 -0
- package/dist/commonjs/Collection/Collection.jest.js +829 -0
- package/dist/commonjs/Collection/Collection.js +266 -0
- package/dist/commonjs/Collection/CollectionView.js +553 -0
- package/dist/commonjs/Collection/Section.jest.js +63 -0
- package/dist/commonjs/Collection/Section.js +57 -0
- package/dist/commonjs/Collection/SectionManager.jest.js +121 -0
- package/dist/commonjs/Collection/SectionManager.js +134 -0
- package/dist/commonjs/Collection/TestData.js +77 -0
- package/dist/commonjs/Collection/index.js +15 -0
- package/dist/commonjs/Collection/types.js +22 -0
- package/dist/commonjs/Collection/utils/calculateSizeAndPositionData.jest.js +34 -0
- package/dist/commonjs/Collection/utils/calculateSizeAndPositionData.js +38 -0
- package/dist/commonjs/ColumnSizer/ColumnSizer.example.js +159 -0
- package/dist/commonjs/ColumnSizer/ColumnSizer.jest.js +129 -0
- package/dist/commonjs/ColumnSizer/ColumnSizer.js +103 -0
- package/dist/commonjs/ColumnSizer/index.js +15 -0
- package/dist/commonjs/Grid/Grid.example.js +330 -0
- package/dist/commonjs/Grid/Grid.jest.js +2561 -0
- package/dist/commonjs/Grid/Grid.js +1432 -0
- package/dist/commonjs/Grid/Grid.ssr.js +62 -0
- package/dist/commonjs/Grid/accessibilityOverscanIndicesGetter.jest.js +92 -0
- package/dist/commonjs/Grid/accessibilityOverscanIndicesGetter.js +40 -0
- package/dist/commonjs/Grid/defaultCellRangeRenderer.js +139 -0
- package/dist/commonjs/Grid/defaultOverscanIndicesGetter.jest.js +92 -0
- package/dist/commonjs/Grid/defaultOverscanIndicesGetter.js +36 -0
- package/dist/commonjs/Grid/index.js +40 -0
- package/dist/commonjs/Grid/types.js +8 -0
- package/dist/commonjs/Grid/utils/CellSizeAndPositionManager.jest.js +375 -0
- package/dist/commonjs/Grid/utils/CellSizeAndPositionManager.js +296 -0
- package/dist/commonjs/Grid/utils/ScalingCellSizeAndPositionManager.jest.js +201 -0
- package/dist/commonjs/Grid/utils/ScalingCellSizeAndPositionManager.js +204 -0
- package/dist/commonjs/Grid/utils/calculateSizeAndPositionDataAndUpdateScrollOffset.jest.js +84 -0
- package/dist/commonjs/Grid/utils/calculateSizeAndPositionDataAndUpdateScrollOffset.js +59 -0
- package/dist/commonjs/Grid/utils/maxElementSize.js +22 -0
- package/dist/commonjs/Grid/utils/updateScrollIndexHelper.jest.js +180 -0
- package/dist/commonjs/Grid/utils/updateScrollIndexHelper.js +85 -0
- package/dist/commonjs/InfiniteLoader/InfiniteLoader.example.js +179 -0
- package/dist/commonjs/InfiniteLoader/InfiniteLoader.jest.js +571 -0
- package/dist/commonjs/InfiniteLoader/InfiniteLoader.js +274 -0
- package/dist/commonjs/InfiniteLoader/index.js +15 -0
- package/dist/commonjs/List/List.example.js +236 -0
- package/dist/commonjs/List/List.jest.js +517 -0
- package/dist/commonjs/List/List.js +318 -0
- package/dist/commonjs/List/index.js +19 -0
- package/dist/commonjs/List/types.js +6 -0
- package/dist/commonjs/Masonry/Masonry.example.js +287 -0
- package/dist/commonjs/Masonry/Masonry.jest.js +450 -0
- package/dist/commonjs/Masonry/Masonry.js +431 -0
- package/dist/commonjs/Masonry/PositionCache.js +88 -0
- package/dist/commonjs/Masonry/createCellPositioner.js +59 -0
- package/dist/commonjs/Masonry/index.js +22 -0
- package/dist/commonjs/MultiGrid/CellMeasurerCacheDecorator.js +106 -0
- package/dist/commonjs/MultiGrid/MultiGrid.example.js +131 -0
- package/dist/commonjs/MultiGrid/MultiGrid.jest.js +584 -0
- package/dist/commonjs/MultiGrid/MultiGrid.js +743 -0
- package/dist/commonjs/MultiGrid/index.js +15 -0
- package/dist/commonjs/ScrollSync/ScrollSync.example.js +257 -0
- package/dist/commonjs/ScrollSync/ScrollSync.jest.js +66 -0
- package/dist/commonjs/ScrollSync/ScrollSync.js +88 -0
- package/dist/commonjs/ScrollSync/index.js +15 -0
- package/dist/commonjs/Table/Column.jest.js +90 -0
- package/dist/commonjs/Table/Column.js +93 -0
- package/dist/commonjs/Table/SortDirection.js +19 -0
- package/dist/commonjs/Table/SortIndicator.js +40 -0
- package/dist/commonjs/Table/Table.example.js +325 -0
- package/dist/commonjs/Table/Table.jest.js +1257 -0
- package/dist/commonjs/Table/Table.js +742 -0
- package/dist/commonjs/Table/createMultiSort.jest.js +165 -0
- package/dist/commonjs/Table/createMultiSort.js +99 -0
- package/dist/commonjs/Table/defaultCellDataGetter.js +21 -0
- package/dist/commonjs/Table/defaultCellRenderer.js +19 -0
- package/dist/commonjs/Table/defaultHeaderRenderer.js +35 -0
- package/dist/commonjs/Table/defaultHeaderRowRenderer.js +21 -0
- package/dist/commonjs/Table/defaultRowRenderer.js +87 -0
- package/dist/commonjs/Table/index.js +78 -0
- package/dist/commonjs/Table/types.js +39 -0
- package/dist/commonjs/WindowScroller/WindowScroller.e2e.js +298 -0
- package/dist/commonjs/WindowScroller/WindowScroller.example.js +167 -0
- package/dist/commonjs/WindowScroller/WindowScroller.header-resize.e2e.js +359 -0
- package/dist/commonjs/WindowScroller/WindowScroller.jest.js +536 -0
- package/dist/commonjs/WindowScroller/WindowScroller.js +268 -0
- package/dist/commonjs/WindowScroller/WindowScroller.ssr.js +25 -0
- package/dist/commonjs/WindowScroller/index.js +23 -0
- package/dist/commonjs/WindowScroller/utils/dimensions.js +89 -0
- package/dist/commonjs/WindowScroller/utils/onScroll.js +70 -0
- package/dist/commonjs/index.js +180 -0
- package/dist/commonjs/jest-setup.js +7 -0
- package/dist/commonjs/utils/TestHelper.js +36 -0
- package/dist/commonjs/utils/animationFrame.js +29 -0
- package/dist/commonjs/utils/createCallbackMemoizer.jest.js +219 -0
- package/dist/commonjs/utils/createCallbackMemoizer.js +31 -0
- package/dist/commonjs/utils/getUpdatedOffsetForIndex.jest.js +68 -0
- package/dist/commonjs/utils/getUpdatedOffsetForIndex.js +38 -0
- package/dist/commonjs/utils/initCellMetadata.js +37 -0
- package/dist/commonjs/utils/requestAnimationTimeout.js +38 -0
- package/dist/commonjs/vendor/binarySearchBounds.js +200 -0
- package/dist/commonjs/vendor/detectElementResize.js +192 -0
- package/dist/commonjs/vendor/intervalTree.js +361 -0
- package/dist/es/ArrowKeyStepper/ArrowKeyStepper.example.js +176 -0
- package/dist/es/ArrowKeyStepper/ArrowKeyStepper.jest.js +332 -0
- package/dist/es/ArrowKeyStepper/ArrowKeyStepper.js +197 -0
- package/dist/es/ArrowKeyStepper/index.js +3 -0
- package/dist/es/ArrowKeyStepper/types.js +4 -0
- package/dist/es/AutoSizer/AutoSizer.example.js +96 -0
- package/dist/es/AutoSizer/AutoSizer.jest.js +335 -0
- package/dist/es/AutoSizer/AutoSizer.js +190 -0
- package/dist/es/AutoSizer/AutoSizer.js.flow +200 -0
- package/dist/es/AutoSizer/AutoSizer.ssr.js +19 -0
- package/dist/es/AutoSizer/index.js +2 -0
- package/dist/es/AutoSizer/index.js.flow +4 -0
- package/dist/es/CellMeasurer/CellMeasurer.DynamicHeightGrid.example.js +91 -0
- package/dist/es/CellMeasurer/CellMeasurer.DynamicHeightList.example.js +90 -0
- package/dist/es/CellMeasurer/CellMeasurer.DynamicHeightTableColumn.example.js +98 -0
- package/dist/es/CellMeasurer/CellMeasurer.DynamicWidthGrid.example.js +93 -0
- package/dist/es/CellMeasurer/CellMeasurer.DynamicWidthMultiGrid.example.js +98 -0
- package/dist/es/CellMeasurer/CellMeasurer.example.js +120 -0
- package/dist/es/CellMeasurer/CellMeasurer.jest.js +340 -0
- package/dist/es/CellMeasurer/CellMeasurer.js +187 -0
- package/dist/es/CellMeasurer/CellMeasurerCache.jest.js +293 -0
- package/dist/es/CellMeasurer/CellMeasurerCache.js +196 -0
- package/dist/es/CellMeasurer/index.js +4 -0
- package/dist/es/CellMeasurer/types.js +13 -0
- package/dist/es/Collection/Collection.example.js +223 -0
- package/dist/es/Collection/Collection.jest.js +824 -0
- package/dist/es/Collection/Collection.js +257 -0
- package/dist/es/Collection/CollectionView.js +544 -0
- package/dist/es/Collection/Section.jest.js +60 -0
- package/dist/es/Collection/Section.js +51 -0
- package/dist/es/Collection/SectionManager.jest.js +118 -0
- package/dist/es/Collection/SectionManager.js +128 -0
- package/dist/es/Collection/TestData.js +71 -0
- package/dist/es/Collection/index.js +3 -0
- package/dist/es/Collection/types.js +21 -0
- package/dist/es/Collection/utils/calculateSizeAndPositionData.jest.js +31 -0
- package/dist/es/Collection/utils/calculateSizeAndPositionData.js +31 -0
- package/dist/es/ColumnSizer/ColumnSizer.example.js +150 -0
- package/dist/es/ColumnSizer/ColumnSizer.jest.js +123 -0
- package/dist/es/ColumnSizer/ColumnSizer.js +95 -0
- package/dist/es/ColumnSizer/index.js +3 -0
- package/dist/es/Grid/Grid.example.js +321 -0
- package/dist/es/Grid/Grid.jest.js +2555 -0
- package/dist/es/Grid/Grid.js +1425 -0
- package/dist/es/Grid/Grid.ssr.js +57 -0
- package/dist/es/Grid/accessibilityOverscanIndicesGetter.jest.js +87 -0
- package/dist/es/Grid/accessibilityOverscanIndicesGetter.js +33 -0
- package/dist/es/Grid/defaultCellRangeRenderer.js +134 -0
- package/dist/es/Grid/defaultOverscanIndicesGetter.jest.js +87 -0
- package/dist/es/Grid/defaultOverscanIndicesGetter.js +29 -0
- package/dist/es/Grid/index.js +15 -0
- package/dist/es/Grid/types.js +96 -0
- package/dist/es/Grid/utils/CellSizeAndPositionManager.jest.js +372 -0
- package/dist/es/Grid/utils/CellSizeAndPositionManager.js +290 -0
- package/dist/es/Grid/utils/ScalingCellSizeAndPositionManager.jest.js +198 -0
- package/dist/es/Grid/utils/ScalingCellSizeAndPositionManager.js +198 -0
- package/dist/es/Grid/utils/calculateSizeAndPositionDataAndUpdateScrollOffset.jest.js +81 -0
- package/dist/es/Grid/utils/calculateSizeAndPositionDataAndUpdateScrollOffset.js +53 -0
- package/dist/es/Grid/utils/maxElementSize.js +16 -0
- package/dist/es/Grid/utils/updateScrollIndexHelper.jest.js +174 -0
- package/dist/es/Grid/utils/updateScrollIndexHelper.js +79 -0
- package/dist/es/InfiniteLoader/InfiniteLoader.example.js +170 -0
- package/dist/es/InfiniteLoader/InfiniteLoader.jest.js +565 -0
- package/dist/es/InfiniteLoader/InfiniteLoader.js +263 -0
- package/dist/es/InfiniteLoader/index.js +3 -0
- package/dist/es/List/List.example.js +227 -0
- package/dist/es/List/List.jest.js +511 -0
- package/dist/es/List/List.js +312 -0
- package/dist/es/List/index.js +3 -0
- package/dist/es/List/types.js +21 -0
- package/dist/es/Masonry/Masonry.example.js +278 -0
- package/dist/es/Masonry/Masonry.jest.js +444 -0
- package/dist/es/Masonry/Masonry.js +421 -0
- package/dist/es/Masonry/PositionCache.js +82 -0
- package/dist/es/Masonry/createCellPositioner.js +53 -0
- package/dist/es/Masonry/index.js +4 -0
- package/dist/es/MultiGrid/CellMeasurerCacheDecorator.js +100 -0
- package/dist/es/MultiGrid/MultiGrid.example.js +122 -0
- package/dist/es/MultiGrid/MultiGrid.jest.js +579 -0
- package/dist/es/MultiGrid/MultiGrid.js +733 -0
- package/dist/es/MultiGrid/index.js +3 -0
- package/dist/es/ScrollSync/ScrollSync.example.js +248 -0
- package/dist/es/ScrollSync/ScrollSync.jest.js +60 -0
- package/dist/es/ScrollSync/ScrollSync.js +80 -0
- package/dist/es/ScrollSync/index.js +3 -0
- package/dist/es/Table/Column.jest.js +84 -0
- package/dist/es/Table/Column.js +85 -0
- package/dist/es/Table/SortDirection.js +13 -0
- package/dist/es/Table/SortIndicator.js +31 -0
- package/dist/es/Table/Table.example.js +316 -0
- package/dist/es/Table/Table.jest.js +1251 -0
- package/dist/es/Table/Table.js +735 -0
- package/dist/es/Table/createMultiSort.jest.js +162 -0
- package/dist/es/Table/createMultiSort.js +93 -0
- package/dist/es/Table/defaultCellDataGetter.js +15 -0
- package/dist/es/Table/defaultCellRenderer.js +13 -0
- package/dist/es/Table/defaultHeaderRenderer.js +25 -0
- package/dist/es/Table/defaultHeaderRowRenderer.js +12 -0
- package/dist/es/Table/defaultRowRenderer.js +77 -0
- package/dist/es/Table/index.js +12 -0
- package/dist/es/Table/types.js +38 -0
- package/dist/es/WindowScroller/WindowScroller.e2e.js +295 -0
- package/dist/es/WindowScroller/WindowScroller.example.js +158 -0
- package/dist/es/WindowScroller/WindowScroller.header-resize.e2e.js +356 -0
- package/dist/es/WindowScroller/WindowScroller.jest.js +530 -0
- package/dist/es/WindowScroller/WindowScroller.js +259 -0
- package/dist/es/WindowScroller/WindowScroller.js.flow +277 -0
- package/dist/es/WindowScroller/WindowScroller.ssr.js +19 -0
- package/dist/es/WindowScroller/index.js +3 -0
- package/dist/es/WindowScroller/index.js.flow +6 -0
- package/dist/es/WindowScroller/utils/dimensions.js +81 -0
- package/dist/es/WindowScroller/utils/dimensions.js.flow +91 -0
- package/dist/es/WindowScroller/utils/onScroll.js +64 -0
- package/dist/es/WindowScroller/utils/onScroll.js.flow +94 -0
- package/dist/es/index.js +13 -0
- package/dist/es/jest-setup.js +5 -0
- package/dist/es/utils/TestHelper.js +30 -0
- package/dist/es/utils/animationFrame.js +23 -0
- package/dist/es/utils/createCallbackMemoizer.jest.js +216 -0
- package/dist/es/utils/createCallbackMemoizer.js +25 -0
- package/dist/es/utils/getUpdatedOffsetForIndex.jest.js +65 -0
- package/dist/es/utils/getUpdatedOffsetForIndex.js +32 -0
- package/dist/es/utils/initCellMetadata.js +31 -0
- package/dist/es/utils/requestAnimationTimeout.js +32 -0
- package/dist/es/vendor/binarySearchBounds.js +194 -0
- package/dist/es/vendor/detectElementResize.js +186 -0
- package/dist/es/vendor/intervalTree.js +354 -0
- package/dist/umd/react-virtualized.js +4638 -0
- package/package.json +188 -0
- package/styles.css +80 -0
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
6
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
7
|
+
var React = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _reactDom = require("react-dom");
|
|
9
|
+
var _testUtils = require("react-dom/test-utils");
|
|
10
|
+
var _TestUtils = require("../TestUtils");
|
|
11
|
+
var _createCellPositioner = _interopRequireDefault(require("./createCellPositioner"));
|
|
12
|
+
var _Masonry = _interopRequireDefault(require("./Masonry"));
|
|
13
|
+
var _CellMeasurer = require("../CellMeasurer");
|
|
14
|
+
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); }
|
|
15
|
+
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; }
|
|
16
|
+
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; }
|
|
17
|
+
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; }
|
|
18
|
+
var ALTERNATING_CELL_HEIGHTS = [100, 50, 100, 150];
|
|
19
|
+
var CELL_SIZE_MULTIPLIER = 50;
|
|
20
|
+
var COLUMN_COUNT = 3;
|
|
21
|
+
function assertVisibleCells(rendered, text) {
|
|
22
|
+
expect(Array.from(rendered.querySelectorAll('.cell')).map(function (node) {
|
|
23
|
+
return node.textContent;
|
|
24
|
+
}).sort().join(',')).toEqual(text);
|
|
25
|
+
}
|
|
26
|
+
function createCellMeasurerCache() {
|
|
27
|
+
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
28
|
+
return new _CellMeasurer.CellMeasurerCache(_objectSpread({
|
|
29
|
+
defaultHeight: CELL_SIZE_MULTIPLIER,
|
|
30
|
+
defaultWidth: CELL_SIZE_MULTIPLIER,
|
|
31
|
+
fixedWidth: true,
|
|
32
|
+
keyMapper: function keyMapper(index) {
|
|
33
|
+
return index;
|
|
34
|
+
}
|
|
35
|
+
}, props));
|
|
36
|
+
}
|
|
37
|
+
function createCellPositioner(cache) {
|
|
38
|
+
return (0, _createCellPositioner["default"])({
|
|
39
|
+
cellMeasurerCache: cache,
|
|
40
|
+
columnCount: COLUMN_COUNT,
|
|
41
|
+
columnWidth: CELL_SIZE_MULTIPLIER
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function createCellRenderer(cache, renderCallback) {
|
|
45
|
+
renderCallback = typeof renderCallback === 'function' ? renderCallback : function (index) {
|
|
46
|
+
return index;
|
|
47
|
+
};
|
|
48
|
+
return function cellRenderer(_ref) {
|
|
49
|
+
var index = _ref.index,
|
|
50
|
+
isScrolling = _ref.isScrolling,
|
|
51
|
+
key = _ref.key,
|
|
52
|
+
parent = _ref.parent,
|
|
53
|
+
style = _ref.style;
|
|
54
|
+
var height = ALTERNATING_CELL_HEIGHTS[index % ALTERNATING_CELL_HEIGHTS.length];
|
|
55
|
+
var width = CELL_SIZE_MULTIPLIER;
|
|
56
|
+
return /*#__PURE__*/React.createElement(_CellMeasurer.CellMeasurer, {
|
|
57
|
+
cache: cache,
|
|
58
|
+
index: index,
|
|
59
|
+
key: key,
|
|
60
|
+
parent: parent
|
|
61
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
62
|
+
className: "cell",
|
|
63
|
+
ref: function ref(_ref2) {
|
|
64
|
+
if (_ref2) {
|
|
65
|
+
// Accounts for the fact that JSDom doesn't support measurements.
|
|
66
|
+
Object.defineProperty(_ref2, 'offsetHeight', {
|
|
67
|
+
configurable: true,
|
|
68
|
+
value: height
|
|
69
|
+
});
|
|
70
|
+
Object.defineProperty(_ref2, 'offsetWidth', {
|
|
71
|
+
configurable: true,
|
|
72
|
+
value: width
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
style: _objectSpread(_objectSpread({}, style), {}, {
|
|
77
|
+
minHeight: height,
|
|
78
|
+
minWidth: width
|
|
79
|
+
})
|
|
80
|
+
}, renderCallback(index, {
|
|
81
|
+
index: index,
|
|
82
|
+
isScrolling: isScrolling,
|
|
83
|
+
key: key,
|
|
84
|
+
parent: parent,
|
|
85
|
+
style: style
|
|
86
|
+
})));
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function getMarkup() {
|
|
90
|
+
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
91
|
+
var cellMeasurerCache = props.cellMeasurerCache || createCellMeasurerCache();
|
|
92
|
+
return /*#__PURE__*/React.createElement(_Masonry["default"], (0, _extends2["default"])({
|
|
93
|
+
cellCount: 1000,
|
|
94
|
+
cellMeasurerCache: cellMeasurerCache,
|
|
95
|
+
cellPositioner: createCellPositioner(cellMeasurerCache),
|
|
96
|
+
cellRenderer: createCellRenderer(cellMeasurerCache),
|
|
97
|
+
columnCount: COLUMN_COUNT,
|
|
98
|
+
height: CELL_SIZE_MULTIPLIER * 2,
|
|
99
|
+
overscanByPixels: CELL_SIZE_MULTIPLIER,
|
|
100
|
+
width: CELL_SIZE_MULTIPLIER * COLUMN_COUNT
|
|
101
|
+
}, props));
|
|
102
|
+
}
|
|
103
|
+
function simulateScroll(masonry) {
|
|
104
|
+
var scrollTop = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
105
|
+
var target = {
|
|
106
|
+
scrollTop: scrollTop
|
|
107
|
+
};
|
|
108
|
+
masonry._scrollingContainer = target; // HACK to work around _onScroll target check
|
|
109
|
+
|
|
110
|
+
var masonryNode = (0, _reactDom.findDOMNode)(masonry);
|
|
111
|
+
masonryNode.scrollTop = scrollTop;
|
|
112
|
+
_testUtils.Simulate.scroll(masonryNode);
|
|
113
|
+
}
|
|
114
|
+
describe('Masonry', function () {
|
|
115
|
+
beforeEach(_TestUtils.render.unmount);
|
|
116
|
+
describe('layout and measuring', function () {
|
|
117
|
+
it('should measure only enough cells required for initial render', function () {
|
|
118
|
+
// avg cell size: CELL_SIZE_MULTIPLIER
|
|
119
|
+
// width: CELL_SIZE_MULTIPLIER * 3
|
|
120
|
+
// height: CELL_SIZE_MULTIPLIER * 2
|
|
121
|
+
// overcsan by: CELL_SIZE_MULTIPLIER
|
|
122
|
+
// Expected to measure 9 cells
|
|
123
|
+
var cellMeasurerCache = createCellMeasurerCache();
|
|
124
|
+
(0, _TestUtils.render)(getMarkup({
|
|
125
|
+
cellMeasurerCache: cellMeasurerCache
|
|
126
|
+
}));
|
|
127
|
+
for (var i = 0; i <= 8; i++) {
|
|
128
|
+
expect(cellMeasurerCache.has(i)).toBe(true);
|
|
129
|
+
}
|
|
130
|
+
expect(cellMeasurerCache.has(9)).toBe(false);
|
|
131
|
+
});
|
|
132
|
+
it('should not measure cells while scrolling until they are needed', function () {
|
|
133
|
+
// Expected to measure 9 cells
|
|
134
|
+
var cellMeasurerCache = createCellMeasurerCache();
|
|
135
|
+
var renderCallback = jest.fn().mockImplementation(function (index) {
|
|
136
|
+
return index;
|
|
137
|
+
});
|
|
138
|
+
var cellRenderer = createCellRenderer(cellMeasurerCache, renderCallback);
|
|
139
|
+
var rendered = (0, _reactDom.findDOMNode)((0, _TestUtils.render)(getMarkup({
|
|
140
|
+
cellMeasurerCache: cellMeasurerCache,
|
|
141
|
+
cellRenderer: cellRenderer
|
|
142
|
+
})));
|
|
143
|
+
renderCallback.mockClear();
|
|
144
|
+
// Scroll a little bit, but not so much to require re-measuring
|
|
145
|
+
simulateScroll(rendered, 51);
|
|
146
|
+
// Verify that render was only called enough times to fill view port (no extra for measuring)
|
|
147
|
+
expect(renderCallback).toHaveBeenCalledTimes(9);
|
|
148
|
+
});
|
|
149
|
+
it('should measure additional cells on scroll when it runs out of measured cells', function () {
|
|
150
|
+
var cellMeasurerCache = createCellMeasurerCache();
|
|
151
|
+
var renderCallback = jest.fn().mockImplementation(function (index) {
|
|
152
|
+
return index;
|
|
153
|
+
});
|
|
154
|
+
var cellRenderer = createCellRenderer(cellMeasurerCache, renderCallback);
|
|
155
|
+
var rendered = (0, _reactDom.findDOMNode)((0, _TestUtils.render)(getMarkup({
|
|
156
|
+
cellRenderer: cellRenderer,
|
|
157
|
+
cellMeasurerCache: cellMeasurerCache
|
|
158
|
+
})));
|
|
159
|
+
expect(cellMeasurerCache.has(9)).toBe(false);
|
|
160
|
+
renderCallback.mockClear();
|
|
161
|
+
simulateScroll(rendered, 101);
|
|
162
|
+
expect(cellMeasurerCache.has(9)).toBe(true);
|
|
163
|
+
expect(cellMeasurerCache.has(10)).toBe(false);
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
// Masonry used to do a render pass for only unmeasured cells,
|
|
167
|
+
// But this resulting in removing (and later re-adding) measured cells from the DOM,
|
|
168
|
+
// Which was bad for performance. See GitHub issue #875
|
|
169
|
+
it('should not remove previously-measured cells when measuring new ones', function () {
|
|
170
|
+
var log = [];
|
|
171
|
+
var cellMeasurerCache = createCellMeasurerCache();
|
|
172
|
+
var renderCallback = function renderCallback(index) {
|
|
173
|
+
log.push(index);
|
|
174
|
+
};
|
|
175
|
+
var cellRenderer = createCellRenderer(cellMeasurerCache, renderCallback);
|
|
176
|
+
var rendered = (0, _reactDom.findDOMNode)((0, _TestUtils.render)(getMarkup({
|
|
177
|
+
cellMeasurerCache: cellMeasurerCache,
|
|
178
|
+
cellRenderer: cellRenderer
|
|
179
|
+
})));
|
|
180
|
+
|
|
181
|
+
// Expected to have rendered twice:
|
|
182
|
+
// 1st time to measure 9 cells (b'c of esimated size)
|
|
183
|
+
// 2nd time to render and position 9 cells (b'c of actual size)
|
|
184
|
+
expect(log).toHaveLength(18);
|
|
185
|
+
log.splice(0);
|
|
186
|
+
simulateScroll(rendered, 101);
|
|
187
|
+
|
|
188
|
+
// Expected to have rendered twice:
|
|
189
|
+
// 1st time to measure additional cells (based on estimated size)
|
|
190
|
+
// 2nd time to render and position with new cells
|
|
191
|
+
// The 1st render should also have included the pre-measured cells,
|
|
192
|
+
// To prevent them from being removed, recreated, and re-added to the DOM.
|
|
193
|
+
expect(log).toHaveLength(18);
|
|
194
|
+
});
|
|
195
|
+
it('should only render enough cells to fill the viewport', function () {
|
|
196
|
+
var rendered = (0, _reactDom.findDOMNode)((0, _TestUtils.render)(getMarkup({
|
|
197
|
+
overscanByPixels: 0
|
|
198
|
+
})));
|
|
199
|
+
assertVisibleCells(rendered, '0,1,2,3,4,5');
|
|
200
|
+
simulateScroll(rendered, 51);
|
|
201
|
+
assertVisibleCells(rendered, '0,2,3,4,5,6');
|
|
202
|
+
simulateScroll(rendered, 101);
|
|
203
|
+
assertVisibleCells(rendered, '3,4,5,6,7,8');
|
|
204
|
+
simulateScroll(rendered, 1001);
|
|
205
|
+
assertVisibleCells(rendered, '30,31,32,33,34,35');
|
|
206
|
+
});
|
|
207
|
+
it('should only render enough cells to fill the viewport plus overscanByPixels', function () {
|
|
208
|
+
var rendered = (0, _reactDom.findDOMNode)((0, _TestUtils.render)(getMarkup({
|
|
209
|
+
overscanByPixels: 100
|
|
210
|
+
})));
|
|
211
|
+
assertVisibleCells(rendered, '0,1,10,11,2,3,4,5,6,7,8,9');
|
|
212
|
+
simulateScroll(rendered, 51);
|
|
213
|
+
assertVisibleCells(rendered, '0,1,10,11,2,3,4,5,6,7,8,9');
|
|
214
|
+
simulateScroll(rendered, 101);
|
|
215
|
+
assertVisibleCells(rendered, '0,1,10,11,2,3,4,5,6,7,8,9');
|
|
216
|
+
simulateScroll(rendered, 1001);
|
|
217
|
+
assertVisibleCells(rendered, '26,27,28,29,30,31,32,33,34,35,36,37');
|
|
218
|
+
});
|
|
219
|
+
it('should still render correctly when autoHeight is true (eg WindowScroller)', function () {
|
|
220
|
+
// Share instances between renders to avoid resetting state in ways we don't intend
|
|
221
|
+
var cellMeasurerCache = createCellMeasurerCache();
|
|
222
|
+
var cellPositioner = createCellPositioner(cellMeasurerCache);
|
|
223
|
+
var rendered = (0, _reactDom.findDOMNode)((0, _TestUtils.render)(getMarkup({
|
|
224
|
+
autoHeight: true,
|
|
225
|
+
cellMeasurerCache: cellMeasurerCache,
|
|
226
|
+
cellPositioner: cellPositioner
|
|
227
|
+
})));
|
|
228
|
+
assertVisibleCells(rendered, '0,1,2,3,4,5,6,7,8');
|
|
229
|
+
rendered = (0, _reactDom.findDOMNode)((0, _TestUtils.render)(getMarkup({
|
|
230
|
+
autoHeight: true,
|
|
231
|
+
cellMeasurerCache: cellMeasurerCache,
|
|
232
|
+
cellPositioner: cellPositioner,
|
|
233
|
+
scrollTop: 51
|
|
234
|
+
})));
|
|
235
|
+
assertVisibleCells(rendered, '0,1,2,3,4,5,6,7,8');
|
|
236
|
+
rendered = (0, _reactDom.findDOMNode)((0, _TestUtils.render)(getMarkup({
|
|
237
|
+
autoHeight: true,
|
|
238
|
+
cellMeasurerCache: cellMeasurerCache,
|
|
239
|
+
cellPositioner: cellPositioner,
|
|
240
|
+
scrollTop: 101
|
|
241
|
+
})));
|
|
242
|
+
assertVisibleCells(rendered, '0,2,3,4,5,6,7,8,9');
|
|
243
|
+
rendered = (0, _reactDom.findDOMNode)((0, _TestUtils.render)(getMarkup({
|
|
244
|
+
autoHeight: true,
|
|
245
|
+
cellMeasurerCache: cellMeasurerCache,
|
|
246
|
+
cellPositioner: cellPositioner,
|
|
247
|
+
scrollTop: 1001
|
|
248
|
+
})));
|
|
249
|
+
assertVisibleCells(rendered, '27,29,30,31,32,33,34,35,36');
|
|
250
|
+
});
|
|
251
|
+
it('should set right instead of left in a cell styles for rtl row direction', function () {
|
|
252
|
+
// Share instances between renders to avoid resetting state in ways we don't intend
|
|
253
|
+
var cellMeasurerCache = createCellMeasurerCache();
|
|
254
|
+
var cellPositioner = createCellPositioner(cellMeasurerCache);
|
|
255
|
+
var rendered = (0, _reactDom.findDOMNode)((0, _TestUtils.render)(getMarkup({
|
|
256
|
+
cellMeasurerCache: cellMeasurerCache,
|
|
257
|
+
cellPositioner: cellPositioner,
|
|
258
|
+
rowDirection: 'rtl'
|
|
259
|
+
})));
|
|
260
|
+
Array.from(rendered.querySelectorAll('.cell')).map(function (node) {
|
|
261
|
+
expect(node.style.right).toMatch(/px/);
|
|
262
|
+
});
|
|
263
|
+
});
|
|
264
|
+
it('should consider scroll only of the container element and not of any ancestor element', function () {
|
|
265
|
+
var cellMeasurerCache = createCellMeasurerCache();
|
|
266
|
+
var renderScrollableCell = function renderScrollableCell(index) {
|
|
267
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
268
|
+
style: {
|
|
269
|
+
height: '50px',
|
|
270
|
+
overflow: 'visible'
|
|
271
|
+
},
|
|
272
|
+
id: "scrollable-cell-".concat(index)
|
|
273
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
274
|
+
style: {
|
|
275
|
+
height: '500px'
|
|
276
|
+
}
|
|
277
|
+
}, index));
|
|
278
|
+
};
|
|
279
|
+
var cellRenderer = createCellRenderer(cellMeasurerCache, renderScrollableCell);
|
|
280
|
+
var rendered = (0, _reactDom.findDOMNode)((0, _TestUtils.render)(getMarkup({
|
|
281
|
+
overscanByPixels: 0,
|
|
282
|
+
cellMeasurerCache: cellMeasurerCache,
|
|
283
|
+
cellRenderer: cellRenderer
|
|
284
|
+
})));
|
|
285
|
+
assertVisibleCells(rendered, '0,1,2,3,4,5');
|
|
286
|
+
var cellEl = rendered.querySelector('#scrollable-cell-1');
|
|
287
|
+
_testUtils.Simulate.scroll(cellEl, {
|
|
288
|
+
target: {
|
|
289
|
+
scrollTop: 100
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
assertVisibleCells(rendered, '0,1,2,3,4,5');
|
|
293
|
+
});
|
|
294
|
+
});
|
|
295
|
+
describe('recomputeCellPositions', function () {
|
|
296
|
+
it('should refresh all cell positions', function () {
|
|
297
|
+
// Share instances between renders to avoid resetting state in ways we don't intend
|
|
298
|
+
var cellMeasurerCache = createCellMeasurerCache();
|
|
299
|
+
var cellPositioner = jest.fn().mockImplementation(createCellPositioner(cellMeasurerCache));
|
|
300
|
+
var rendered = (0, _reactDom.findDOMNode)((0, _TestUtils.render)(getMarkup({
|
|
301
|
+
cellMeasurerCache: cellMeasurerCache,
|
|
302
|
+
cellPositioner: cellPositioner
|
|
303
|
+
})));
|
|
304
|
+
assertVisibleCells(rendered, '0,1,2,3,4,5,6,7,8');
|
|
305
|
+
cellPositioner.mockImplementation(function (index) {
|
|
306
|
+
return {
|
|
307
|
+
left: 0,
|
|
308
|
+
top: index * CELL_SIZE_MULTIPLIER
|
|
309
|
+
};
|
|
310
|
+
});
|
|
311
|
+
var component = (0, _TestUtils.render)(getMarkup({
|
|
312
|
+
cellMeasurerCache: cellMeasurerCache,
|
|
313
|
+
cellPositioner: cellPositioner
|
|
314
|
+
}));
|
|
315
|
+
rendered = (0, _reactDom.findDOMNode)(component);
|
|
316
|
+
assertVisibleCells(rendered, '0,1,2,3,4,5,6,7,8');
|
|
317
|
+
component.recomputeCellPositions();
|
|
318
|
+
assertVisibleCells(rendered, '0,1,2,3,4');
|
|
319
|
+
});
|
|
320
|
+
it('should not reset measurement cache', function () {
|
|
321
|
+
var cellMeasurerCache = createCellMeasurerCache();
|
|
322
|
+
var component = (0, _TestUtils.render)(getMarkup({
|
|
323
|
+
cellMeasurerCache: cellMeasurerCache
|
|
324
|
+
}));
|
|
325
|
+
var rendered = (0, _reactDom.findDOMNode)(component);
|
|
326
|
+
simulateScroll(rendered, 101);
|
|
327
|
+
expect(cellMeasurerCache.has(9)).toBe(true);
|
|
328
|
+
simulateScroll(rendered, 0);
|
|
329
|
+
component.recomputeCellPositions();
|
|
330
|
+
for (var i = 0; i <= 9; i++) {
|
|
331
|
+
expect(cellMeasurerCache.has(i)).toBe(true);
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
});
|
|
335
|
+
describe('isScrolling', function () {
|
|
336
|
+
it('should be true for cellRenderer while scrolling is in progress', function () {
|
|
337
|
+
var cellMeasurerCache = createCellMeasurerCache();
|
|
338
|
+
var renderCallback = jest.fn().mockImplementation(function (index) {
|
|
339
|
+
return index;
|
|
340
|
+
});
|
|
341
|
+
var cellRenderer = createCellRenderer(cellMeasurerCache, renderCallback);
|
|
342
|
+
var rendered = (0, _reactDom.findDOMNode)((0, _TestUtils.render)(getMarkup({
|
|
343
|
+
cellMeasurerCache: cellMeasurerCache,
|
|
344
|
+
cellRenderer: cellRenderer
|
|
345
|
+
})));
|
|
346
|
+
renderCallback.mockClear();
|
|
347
|
+
simulateScroll(rendered, 51);
|
|
348
|
+
expect(renderCallback.mock.calls[0][1].isScrolling).toEqual(true);
|
|
349
|
+
});
|
|
350
|
+
it('should be reset after a small debounce when scrolling stops', function () {
|
|
351
|
+
var cellMeasurerCache = createCellMeasurerCache();
|
|
352
|
+
var renderCallback = jest.fn().mockImplementation(function (index) {
|
|
353
|
+
return index;
|
|
354
|
+
});
|
|
355
|
+
var cellRenderer = createCellRenderer(cellMeasurerCache, renderCallback);
|
|
356
|
+
var rendered = (0, _reactDom.findDOMNode)((0, _TestUtils.render)(getMarkup({
|
|
357
|
+
cellMeasurerCache: cellMeasurerCache,
|
|
358
|
+
cellRenderer: cellRenderer
|
|
359
|
+
})));
|
|
360
|
+
simulateScroll(rendered, 51);
|
|
361
|
+
renderCallback.mockClear();
|
|
362
|
+
setTimeout(function () {
|
|
363
|
+
expect(renderCallback.mock.calls[0][1].isScrolling).toEqual(false);
|
|
364
|
+
}, 0);
|
|
365
|
+
});
|
|
366
|
+
});
|
|
367
|
+
describe('callbacks', function () {
|
|
368
|
+
it('should call onCellsRendered when rendered cells change', function () {
|
|
369
|
+
var onCellsRendered = jest.fn();
|
|
370
|
+
var rendered = (0, _reactDom.findDOMNode)((0, _TestUtils.render)(getMarkup({
|
|
371
|
+
onCellsRendered: onCellsRendered
|
|
372
|
+
})));
|
|
373
|
+
expect(onCellsRendered.mock.calls).toEqual([[{
|
|
374
|
+
startIndex: 0,
|
|
375
|
+
stopIndex: 8
|
|
376
|
+
}]]);
|
|
377
|
+
simulateScroll(rendered, 51);
|
|
378
|
+
expect(onCellsRendered.mock.calls).toEqual([[{
|
|
379
|
+
startIndex: 0,
|
|
380
|
+
stopIndex: 8
|
|
381
|
+
}]]);
|
|
382
|
+
simulateScroll(rendered, 101);
|
|
383
|
+
expect(onCellsRendered.mock.calls).toEqual([[{
|
|
384
|
+
startIndex: 0,
|
|
385
|
+
stopIndex: 8
|
|
386
|
+
}], [{
|
|
387
|
+
startIndex: 0,
|
|
388
|
+
stopIndex: 9
|
|
389
|
+
}]]);
|
|
390
|
+
});
|
|
391
|
+
it('should call onScroll when scroll position changes', function () {
|
|
392
|
+
var onScroll = jest.fn();
|
|
393
|
+
var rendered = (0, _reactDom.findDOMNode)((0, _TestUtils.render)(getMarkup({
|
|
394
|
+
onScroll: onScroll
|
|
395
|
+
})));
|
|
396
|
+
expect(onScroll.mock.calls).toEqual([[{
|
|
397
|
+
clientHeight: 100,
|
|
398
|
+
scrollHeight: 16900,
|
|
399
|
+
scrollTop: 0
|
|
400
|
+
}]]);
|
|
401
|
+
simulateScroll(rendered, 51);
|
|
402
|
+
expect(onScroll.mock.calls).toEqual([[{
|
|
403
|
+
clientHeight: 100,
|
|
404
|
+
scrollHeight: 16900,
|
|
405
|
+
scrollTop: 0
|
|
406
|
+
}], [{
|
|
407
|
+
clientHeight: 100,
|
|
408
|
+
scrollHeight: 16900,
|
|
409
|
+
scrollTop: 51
|
|
410
|
+
}]]);
|
|
411
|
+
simulateScroll(rendered, 0);
|
|
412
|
+
expect(onScroll.mock.calls).toEqual([[{
|
|
413
|
+
clientHeight: 100,
|
|
414
|
+
scrollHeight: 16900,
|
|
415
|
+
scrollTop: 0
|
|
416
|
+
}], [{
|
|
417
|
+
clientHeight: 100,
|
|
418
|
+
scrollHeight: 16900,
|
|
419
|
+
scrollTop: 51
|
|
420
|
+
}], [{
|
|
421
|
+
clientHeight: 100,
|
|
422
|
+
scrollHeight: 16900,
|
|
423
|
+
scrollTop: 0
|
|
424
|
+
}]]);
|
|
425
|
+
});
|
|
426
|
+
});
|
|
427
|
+
describe('keyMapper', function () {
|
|
428
|
+
it('should pass the correct key to rendered cells', function () {
|
|
429
|
+
var keyMapper = jest.fn().mockImplementation(function (index) {
|
|
430
|
+
return "key:".concat(index);
|
|
431
|
+
});
|
|
432
|
+
var cellRenderer = jest.fn().mockImplementation(function (_ref3) {
|
|
433
|
+
var index = _ref3.index,
|
|
434
|
+
key = _ref3.key,
|
|
435
|
+
style = _ref3.style;
|
|
436
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
437
|
+
key: key,
|
|
438
|
+
style: style
|
|
439
|
+
}, index);
|
|
440
|
+
});
|
|
441
|
+
(0, _reactDom.findDOMNode)((0, _TestUtils.render)(getMarkup({
|
|
442
|
+
cellRenderer: cellRenderer,
|
|
443
|
+
keyMapper: keyMapper
|
|
444
|
+
})));
|
|
445
|
+
expect(keyMapper).toHaveBeenCalled();
|
|
446
|
+
expect(cellRenderer).toHaveBeenCalled();
|
|
447
|
+
expect(cellRenderer.mock.calls[0][0].key).toEqual('key:0');
|
|
448
|
+
});
|
|
449
|
+
});
|
|
450
|
+
});
|