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