@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,340 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { findDOMNode } from 'react-dom';
|
|
3
|
+
import { render } from '../TestUtils';
|
|
4
|
+
import CellMeasurer from './CellMeasurer';
|
|
5
|
+
import CellMeasurerCache, { DEFAULT_HEIGHT, DEFAULT_WIDTH } from './CellMeasurerCache';
|
|
6
|
+
|
|
7
|
+
// Accounts for the fact that JSDom doesn't support measurements.
|
|
8
|
+
function mockClientWidthAndHeight(_ref) {
|
|
9
|
+
var height = _ref.height,
|
|
10
|
+
width = _ref.width;
|
|
11
|
+
var object = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : HTMLElement.prototype;
|
|
12
|
+
var heightFn = jest.fn().mockReturnValue(height);
|
|
13
|
+
var widthFn = jest.fn().mockReturnValue(width);
|
|
14
|
+
Object.defineProperty(object, 'offsetHeight', {
|
|
15
|
+
configurable: true,
|
|
16
|
+
get: heightFn
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(object, 'offsetWidth', {
|
|
19
|
+
configurable: true,
|
|
20
|
+
get: widthFn
|
|
21
|
+
});
|
|
22
|
+
return {
|
|
23
|
+
heightFn: heightFn,
|
|
24
|
+
widthFn: widthFn
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function createParent() {
|
|
28
|
+
var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
29
|
+
cache = _ref2.cache,
|
|
30
|
+
_ref2$invalidateCellS = _ref2.invalidateCellSizeAfterRender,
|
|
31
|
+
invalidateCellSizeAfterRender = _ref2$invalidateCellS === void 0 ? jest.fn() : _ref2$invalidateCellS;
|
|
32
|
+
return {
|
|
33
|
+
invalidateCellSizeAfterRender: invalidateCellSizeAfterRender,
|
|
34
|
+
props: {
|
|
35
|
+
deferredMeasurementCache: cache
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function renderHelper() {
|
|
40
|
+
var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
41
|
+
_ref3$cache = _ref3.cache,
|
|
42
|
+
cache = _ref3$cache === void 0 ? new CellMeasurerCache({
|
|
43
|
+
fixedWidth: true
|
|
44
|
+
}) : _ref3$cache,
|
|
45
|
+
_ref3$children = _ref3.children,
|
|
46
|
+
children = _ref3$children === void 0 ? /*#__PURE__*/React.createElement("div", null) : _ref3$children,
|
|
47
|
+
parent = _ref3.parent;
|
|
48
|
+
render(/*#__PURE__*/React.createElement(CellMeasurer, {
|
|
49
|
+
cache: cache,
|
|
50
|
+
columnIndex: 0,
|
|
51
|
+
parent: parent,
|
|
52
|
+
rowIndex: 0,
|
|
53
|
+
style: {}
|
|
54
|
+
}, children));
|
|
55
|
+
}
|
|
56
|
+
describe('CellMeasurer', function () {
|
|
57
|
+
it('componentDidMount() should measure content that is not already in the cache', function () {
|
|
58
|
+
var cache = new CellMeasurerCache({
|
|
59
|
+
fixedWidth: true
|
|
60
|
+
});
|
|
61
|
+
var parent = createParent({
|
|
62
|
+
cache: cache
|
|
63
|
+
});
|
|
64
|
+
var _mockClientWidthAndHe = mockClientWidthAndHeight({
|
|
65
|
+
height: 20,
|
|
66
|
+
width: 100
|
|
67
|
+
}),
|
|
68
|
+
heightFn = _mockClientWidthAndHe.heightFn,
|
|
69
|
+
widthFn = _mockClientWidthAndHe.widthFn;
|
|
70
|
+
expect(heightFn).toHaveBeenCalledTimes(0);
|
|
71
|
+
expect(widthFn).toHaveBeenCalledTimes(0);
|
|
72
|
+
expect(cache.has(0, 0)).toBe(false);
|
|
73
|
+
renderHelper({
|
|
74
|
+
cache: cache,
|
|
75
|
+
parent: parent
|
|
76
|
+
});
|
|
77
|
+
expect(parent.invalidateCellSizeAfterRender).toHaveBeenCalled();
|
|
78
|
+
expect(heightFn).toHaveBeenCalledTimes(1);
|
|
79
|
+
expect(widthFn).toHaveBeenCalledTimes(1);
|
|
80
|
+
expect(cache.has(0, 0)).toBe(true);
|
|
81
|
+
expect(cache.getWidth(0, 0)).toBe(100);
|
|
82
|
+
expect(cache.getHeight(0, 0)).toBe(20);
|
|
83
|
+
});
|
|
84
|
+
it('componentDidMount() should not measure content that is already in the cache', function () {
|
|
85
|
+
var cache = new CellMeasurerCache({
|
|
86
|
+
fixedWidth: true
|
|
87
|
+
});
|
|
88
|
+
cache.set(0, 0, 100, 20);
|
|
89
|
+
var parent = createParent({
|
|
90
|
+
cache: cache
|
|
91
|
+
});
|
|
92
|
+
var _mockClientWidthAndHe2 = mockClientWidthAndHeight({
|
|
93
|
+
height: 20,
|
|
94
|
+
width: 100
|
|
95
|
+
}),
|
|
96
|
+
heightFn = _mockClientWidthAndHe2.heightFn,
|
|
97
|
+
widthFn = _mockClientWidthAndHe2.widthFn;
|
|
98
|
+
expect(cache.has(0, 0)).toBe(true);
|
|
99
|
+
renderHelper({
|
|
100
|
+
cache: cache,
|
|
101
|
+
parent: parent
|
|
102
|
+
});
|
|
103
|
+
expect(parent.invalidateCellSizeAfterRender).not.toHaveBeenCalled();
|
|
104
|
+
expect(heightFn).toHaveBeenCalledTimes(0);
|
|
105
|
+
expect(widthFn).toHaveBeenCalledTimes(0);
|
|
106
|
+
});
|
|
107
|
+
it('componentDidUpdate() should measure content that is not already in the cache', function () {
|
|
108
|
+
var cache = new CellMeasurerCache({
|
|
109
|
+
fixedWidth: true
|
|
110
|
+
});
|
|
111
|
+
var parent = createParent({
|
|
112
|
+
cache: cache
|
|
113
|
+
});
|
|
114
|
+
renderHelper({
|
|
115
|
+
cache: cache,
|
|
116
|
+
parent: parent
|
|
117
|
+
});
|
|
118
|
+
cache.clear(0, 0);
|
|
119
|
+
parent.invalidateCellSizeAfterRender.mockReset();
|
|
120
|
+
expect(cache.has(0, 0)).toBe(false);
|
|
121
|
+
expect(cache.getWidth(0, 0)).toBe(DEFAULT_WIDTH);
|
|
122
|
+
expect(cache.getHeight(0, 0)).toBe(DEFAULT_HEIGHT);
|
|
123
|
+
var _mockClientWidthAndHe3 = mockClientWidthAndHeight({
|
|
124
|
+
height: 20,
|
|
125
|
+
width: 100
|
|
126
|
+
}),
|
|
127
|
+
heightFn = _mockClientWidthAndHe3.heightFn,
|
|
128
|
+
widthFn = _mockClientWidthAndHe3.widthFn;
|
|
129
|
+
renderHelper({
|
|
130
|
+
cache: cache,
|
|
131
|
+
parent: parent
|
|
132
|
+
});
|
|
133
|
+
expect(cache.has(0, 0)).toBe(true);
|
|
134
|
+
expect(parent.invalidateCellSizeAfterRender).toHaveBeenCalled();
|
|
135
|
+
expect(heightFn).toHaveBeenCalledTimes(1);
|
|
136
|
+
expect(widthFn).toHaveBeenCalledTimes(1);
|
|
137
|
+
expect(cache.getWidth(0, 0)).toBe(100);
|
|
138
|
+
expect(cache.getHeight(0, 0)).toBe(20);
|
|
139
|
+
});
|
|
140
|
+
it('componentDidUpdate() should not measure content that is already in the cache', function () {
|
|
141
|
+
var cache = new CellMeasurerCache({
|
|
142
|
+
fixedWidth: true
|
|
143
|
+
});
|
|
144
|
+
cache.set(0, 0, 100, 20);
|
|
145
|
+
var parent = createParent({
|
|
146
|
+
cache: cache
|
|
147
|
+
});
|
|
148
|
+
expect(cache.has(0, 0)).toBe(true);
|
|
149
|
+
var _mockClientWidthAndHe4 = mockClientWidthAndHeight({
|
|
150
|
+
height: 20,
|
|
151
|
+
width: 100
|
|
152
|
+
}),
|
|
153
|
+
heightFn = _mockClientWidthAndHe4.heightFn,
|
|
154
|
+
widthFn = _mockClientWidthAndHe4.widthFn;
|
|
155
|
+
renderHelper({
|
|
156
|
+
cache: cache,
|
|
157
|
+
parent: parent
|
|
158
|
+
});
|
|
159
|
+
renderHelper({
|
|
160
|
+
cache: cache,
|
|
161
|
+
parent: parent
|
|
162
|
+
});
|
|
163
|
+
expect(parent.invalidateCellSizeAfterRender).not.toHaveBeenCalled();
|
|
164
|
+
expect(heightFn).toHaveBeenCalledTimes(0);
|
|
165
|
+
expect(widthFn).toHaveBeenCalledTimes(0);
|
|
166
|
+
});
|
|
167
|
+
it('registerChild() should measure content that is not already in the cache', function () {
|
|
168
|
+
var cache = new CellMeasurerCache({
|
|
169
|
+
fixedWidth: true
|
|
170
|
+
});
|
|
171
|
+
var parent = createParent({
|
|
172
|
+
cache: cache
|
|
173
|
+
});
|
|
174
|
+
var element = document.createElement('div');
|
|
175
|
+
var _mockClientWidthAndHe5 = mockClientWidthAndHeight({
|
|
176
|
+
height: 20,
|
|
177
|
+
width: 100
|
|
178
|
+
}, element),
|
|
179
|
+
heightFn = _mockClientWidthAndHe5.heightFn,
|
|
180
|
+
widthFn = _mockClientWidthAndHe5.widthFn;
|
|
181
|
+
expect(heightFn).toHaveBeenCalledTimes(0);
|
|
182
|
+
expect(widthFn).toHaveBeenCalledTimes(0);
|
|
183
|
+
expect(cache.has(0, 0)).toBe(false);
|
|
184
|
+
renderHelper({
|
|
185
|
+
cache: cache,
|
|
186
|
+
parent: parent,
|
|
187
|
+
children: function children(_ref4) {
|
|
188
|
+
var registerChild = _ref4.registerChild;
|
|
189
|
+
registerChild(element);
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
expect(parent.invalidateCellSizeAfterRender).toHaveBeenCalled();
|
|
194
|
+
expect(heightFn).toHaveBeenCalledTimes(1);
|
|
195
|
+
expect(widthFn).toHaveBeenCalledTimes(1);
|
|
196
|
+
expect(cache.has(0, 0)).toBe(true);
|
|
197
|
+
expect(cache.getWidth(0, 0)).toBe(100);
|
|
198
|
+
expect(cache.getHeight(0, 0)).toBe(20);
|
|
199
|
+
});
|
|
200
|
+
it('registerChild() should not measure content that is already in the cache', function () {
|
|
201
|
+
var cache = new CellMeasurerCache({
|
|
202
|
+
fixedWidth: true
|
|
203
|
+
});
|
|
204
|
+
cache.set(0, 0, 100, 20);
|
|
205
|
+
var parent = createParent({
|
|
206
|
+
cache: cache
|
|
207
|
+
});
|
|
208
|
+
var element = document.createElement('div');
|
|
209
|
+
var _mockClientWidthAndHe6 = mockClientWidthAndHeight({
|
|
210
|
+
height: 20,
|
|
211
|
+
width: 100
|
|
212
|
+
}, element),
|
|
213
|
+
heightFn = _mockClientWidthAndHe6.heightFn,
|
|
214
|
+
widthFn = _mockClientWidthAndHe6.widthFn;
|
|
215
|
+
expect(cache.has(0, 0)).toBe(true);
|
|
216
|
+
renderHelper({
|
|
217
|
+
cache: cache,
|
|
218
|
+
parent: parent,
|
|
219
|
+
children: function children(_ref5) {
|
|
220
|
+
var registerChild = _ref5.registerChild;
|
|
221
|
+
registerChild(element);
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
expect(parent.invalidateCellSizeAfterRender).not.toHaveBeenCalled();
|
|
226
|
+
expect(heightFn).toHaveBeenCalledTimes(0);
|
|
227
|
+
expect(widthFn).toHaveBeenCalledTimes(0);
|
|
228
|
+
});
|
|
229
|
+
it('should pass a :measure param to a function child', function () {
|
|
230
|
+
var cache = new CellMeasurerCache({
|
|
231
|
+
fixedWidth: true
|
|
232
|
+
});
|
|
233
|
+
var children = jest.fn().mockReturnValue(/*#__PURE__*/React.createElement("div", null));
|
|
234
|
+
renderHelper({
|
|
235
|
+
cache: cache,
|
|
236
|
+
children: children
|
|
237
|
+
});
|
|
238
|
+
expect(children).toHaveBeenCalled();
|
|
239
|
+
var params = children.mock.calls[0][0];
|
|
240
|
+
expect(typeof params.measure === 'function').toBe(true);
|
|
241
|
+
});
|
|
242
|
+
it('should still update cache without a parent Grid', function () {
|
|
243
|
+
jest.spyOn(console, 'warn');
|
|
244
|
+
mockClientWidthAndHeight({
|
|
245
|
+
height: 20,
|
|
246
|
+
width: 100
|
|
247
|
+
});
|
|
248
|
+
var cache = new CellMeasurerCache({
|
|
249
|
+
fixedWidth: true
|
|
250
|
+
});
|
|
251
|
+
renderHelper({
|
|
252
|
+
cache: cache
|
|
253
|
+
}); // No parent Grid
|
|
254
|
+
|
|
255
|
+
expect(cache.has(0, 0)).toBe(true);
|
|
256
|
+
expect(console.warn).not.toHaveBeenCalled();
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
// See issue #593
|
|
260
|
+
it('should explicitly set width/height style to "auto" before re-measuring', function () {
|
|
261
|
+
var cache = new CellMeasurerCache({
|
|
262
|
+
fixedWidth: true
|
|
263
|
+
});
|
|
264
|
+
var parent = createParent({
|
|
265
|
+
cache: cache
|
|
266
|
+
});
|
|
267
|
+
var child = jest.fn().mockReturnValue(/*#__PURE__*/React.createElement("div", {
|
|
268
|
+
style: {
|
|
269
|
+
width: 100,
|
|
270
|
+
height: 30
|
|
271
|
+
}
|
|
272
|
+
}));
|
|
273
|
+
var measurer;
|
|
274
|
+
var node = findDOMNode(render(/*#__PURE__*/React.createElement(CellMeasurer, {
|
|
275
|
+
ref: function ref(_ref6) {
|
|
276
|
+
measurer = _ref6;
|
|
277
|
+
},
|
|
278
|
+
cache: cache,
|
|
279
|
+
columnIndex: 0,
|
|
280
|
+
parent: parent,
|
|
281
|
+
rowIndex: 0,
|
|
282
|
+
style: {}
|
|
283
|
+
}, child)));
|
|
284
|
+
var styleHeights = [30];
|
|
285
|
+
var styleWidths = [100];
|
|
286
|
+
Object.defineProperties(node.style, {
|
|
287
|
+
height: {
|
|
288
|
+
get: function get() {
|
|
289
|
+
return styleHeights[styleHeights.length - 1];
|
|
290
|
+
},
|
|
291
|
+
set: function set(value) {
|
|
292
|
+
return styleHeights.push(value);
|
|
293
|
+
}
|
|
294
|
+
},
|
|
295
|
+
width: {
|
|
296
|
+
get: function get() {
|
|
297
|
+
return styleWidths[styleWidths.length - 1];
|
|
298
|
+
},
|
|
299
|
+
set: function set(value) {
|
|
300
|
+
return styleWidths.push(value);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
var _measurer$_getCellMea = measurer._getCellMeasurements(node),
|
|
305
|
+
height = _measurer$_getCellMea.height,
|
|
306
|
+
width = _measurer$_getCellMea.width;
|
|
307
|
+
expect(height).toBeGreaterThan(0);
|
|
308
|
+
expect(width).toBeGreaterThan(0);
|
|
309
|
+
expect(styleHeights).toEqual([30, 'auto', 30]);
|
|
310
|
+
expect(styleWidths).toEqual([100, 100]);
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
// See issue #660
|
|
314
|
+
it('should reset width/height style values after measuring with style "auto"', function () {
|
|
315
|
+
var cache = new CellMeasurerCache({
|
|
316
|
+
fixedHeight: true
|
|
317
|
+
});
|
|
318
|
+
var parent = createParent({
|
|
319
|
+
cache: cache
|
|
320
|
+
});
|
|
321
|
+
var child = jest.fn().mockReturnValue(/*#__PURE__*/React.createElement("div", {
|
|
322
|
+
style: {
|
|
323
|
+
width: 100,
|
|
324
|
+
height: 30
|
|
325
|
+
}
|
|
326
|
+
}));
|
|
327
|
+
var node = findDOMNode(render(/*#__PURE__*/React.createElement(CellMeasurer, {
|
|
328
|
+
cache: cache,
|
|
329
|
+
columnIndex: 0,
|
|
330
|
+
parent: parent,
|
|
331
|
+
rowIndex: 0,
|
|
332
|
+
style: {}
|
|
333
|
+
}, child)));
|
|
334
|
+
node.style.width = 200;
|
|
335
|
+
node.style.height = 60;
|
|
336
|
+
child.mock.calls[0][0].measure();
|
|
337
|
+
expect(node.style.height).toBe('30px');
|
|
338
|
+
expect(node.style.width).toBe('100px');
|
|
339
|
+
});
|
|
340
|
+
});
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
2
|
+
import _createClass from "@babel/runtime/helpers/createClass";
|
|
3
|
+
import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
|
|
4
|
+
import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
|
|
5
|
+
import _inherits from "@babel/runtime/helpers/inherits";
|
|
6
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
7
|
+
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
8
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
9
|
+
import * as React from 'react';
|
|
10
|
+
/*:: import type {CellMeasureCache} from './types';*/
|
|
11
|
+
import { cloneElement } from 'react';
|
|
12
|
+
/*:: type Children = (params: {measure: () => void}) => React.Element<*>;*/
|
|
13
|
+
/*:: type Cell = {
|
|
14
|
+
columnIndex: number,
|
|
15
|
+
rowIndex: number,
|
|
16
|
+
};*/
|
|
17
|
+
/*:: type Props = {
|
|
18
|
+
cache: CellMeasureCache,
|
|
19
|
+
children: Children | React.Element<*>,
|
|
20
|
+
columnIndex?: number,
|
|
21
|
+
index?: number,
|
|
22
|
+
parent: {
|
|
23
|
+
invalidateCellSizeAfterRender?: (cell: Cell) => void,
|
|
24
|
+
recomputeGridSize?: (cell: Cell) => void,
|
|
25
|
+
},
|
|
26
|
+
rowIndex?: number,
|
|
27
|
+
};*/
|
|
28
|
+
/**
|
|
29
|
+
* Wraps a cell and measures its rendered content.
|
|
30
|
+
* Measurements are stored in a per-cell cache.
|
|
31
|
+
* Cached-content is not be re-measured.
|
|
32
|
+
*/
|
|
33
|
+
var CellMeasurer = /*#__PURE__*/function (_React$PureComponent) {
|
|
34
|
+
function CellMeasurer() {
|
|
35
|
+
var _this;
|
|
36
|
+
_classCallCheck(this, CellMeasurer);
|
|
37
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
38
|
+
args[_key] = arguments[_key];
|
|
39
|
+
}
|
|
40
|
+
_this = _callSuper(this, CellMeasurer, [].concat(args));
|
|
41
|
+
_defineProperty(_this, "_child", /*#__PURE__*/React.createRef());
|
|
42
|
+
_defineProperty(_this, "_measure", function () {
|
|
43
|
+
var _this$props = _this.props,
|
|
44
|
+
cache = _this$props.cache,
|
|
45
|
+
_this$props$columnInd = _this$props.columnIndex,
|
|
46
|
+
columnIndex = _this$props$columnInd === void 0 ? 0 : _this$props$columnInd,
|
|
47
|
+
parent = _this$props.parent,
|
|
48
|
+
_this$props$rowIndex = _this$props.rowIndex,
|
|
49
|
+
rowIndex = _this$props$rowIndex === void 0 ? _this.props.index || 0 : _this$props$rowIndex;
|
|
50
|
+
var _this$_getCellMeasure = _this._getCellMeasurements(),
|
|
51
|
+
height = _this$_getCellMeasure.height,
|
|
52
|
+
width = _this$_getCellMeasure.width;
|
|
53
|
+
if (height !== cache.getHeight(rowIndex, columnIndex) || width !== cache.getWidth(rowIndex, columnIndex)) {
|
|
54
|
+
cache.set(rowIndex, columnIndex, width, height);
|
|
55
|
+
if (parent && typeof parent.recomputeGridSize === 'function') {
|
|
56
|
+
parent.recomputeGridSize({
|
|
57
|
+
columnIndex: columnIndex,
|
|
58
|
+
rowIndex: rowIndex
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
_defineProperty(_this, "_registerChild", function (element) {
|
|
64
|
+
if (element && !(element instanceof Element)) {
|
|
65
|
+
console.warn('CellMeasurer registerChild expects to be passed Element or null');
|
|
66
|
+
}
|
|
67
|
+
_this._child.current = element;
|
|
68
|
+
if (element) {
|
|
69
|
+
_this._maybeMeasureCell();
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
return _this;
|
|
73
|
+
}
|
|
74
|
+
_inherits(CellMeasurer, _React$PureComponent);
|
|
75
|
+
return _createClass(CellMeasurer, [{
|
|
76
|
+
key: "componentDidMount",
|
|
77
|
+
value: function componentDidMount() {
|
|
78
|
+
this._maybeMeasureCell();
|
|
79
|
+
}
|
|
80
|
+
}, {
|
|
81
|
+
key: "componentDidUpdate",
|
|
82
|
+
value: function componentDidUpdate() {
|
|
83
|
+
this._maybeMeasureCell();
|
|
84
|
+
}
|
|
85
|
+
}, {
|
|
86
|
+
key: "render",
|
|
87
|
+
value: function render() {
|
|
88
|
+
var _this2 = this;
|
|
89
|
+
var children = this.props.children;
|
|
90
|
+
var resolvedChildren = typeof children === 'function' ? children({
|
|
91
|
+
measure: this._measure,
|
|
92
|
+
registerChild: this._registerChild
|
|
93
|
+
}) : children;
|
|
94
|
+
if (resolvedChildren === null) {
|
|
95
|
+
return resolvedChildren;
|
|
96
|
+
}
|
|
97
|
+
return /*#__PURE__*/cloneElement(resolvedChildren, {
|
|
98
|
+
ref: function ref(node) {
|
|
99
|
+
if (typeof resolvedChildren.ref === 'function') {
|
|
100
|
+
resolvedChildren.ref(node);
|
|
101
|
+
} else if (resolvedChildren.ref) {
|
|
102
|
+
resolvedChildren.ref.current = node;
|
|
103
|
+
}
|
|
104
|
+
_this2._child.current = node;
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}, {
|
|
109
|
+
key: "_getCellMeasurements",
|
|
110
|
+
value: function _getCellMeasurements() {
|
|
111
|
+
var cache = this.props.cache;
|
|
112
|
+
var node = this._child.current;
|
|
113
|
+
|
|
114
|
+
// TODO Check for a bad combination of fixedWidth and missing numeric width or vice versa with height
|
|
115
|
+
|
|
116
|
+
if (node && node.ownerDocument && node.ownerDocument.defaultView && node instanceof node.ownerDocument.defaultView.HTMLElement) {
|
|
117
|
+
var styleWidth = node.style.width;
|
|
118
|
+
var styleHeight = node.style.height;
|
|
119
|
+
|
|
120
|
+
// If we are re-measuring a cell that has already been measured,
|
|
121
|
+
// It will have a hard-coded width/height from the previous measurement.
|
|
122
|
+
// The fact that we are measuring indicates this measurement is probably stale,
|
|
123
|
+
// So explicitly clear it out (eg set to "auto") so we can recalculate.
|
|
124
|
+
// See issue #593 for more info.
|
|
125
|
+
// Even if we are measuring initially- if we're inside of a MultiGrid component,
|
|
126
|
+
// Explicitly clear width/height before measuring to avoid being tainted by another Grid.
|
|
127
|
+
// eg top/left Grid renders before bottom/right Grid
|
|
128
|
+
// Since the CellMeasurerCache is shared between them this taints derived cell size values.
|
|
129
|
+
if (!cache.hasFixedWidth()) {
|
|
130
|
+
node.style.width = 'auto';
|
|
131
|
+
}
|
|
132
|
+
if (!cache.hasFixedHeight()) {
|
|
133
|
+
node.style.height = 'auto';
|
|
134
|
+
}
|
|
135
|
+
var height = Math.ceil(node.offsetHeight);
|
|
136
|
+
var width = Math.ceil(node.offsetWidth);
|
|
137
|
+
|
|
138
|
+
// Reset after measuring to avoid breaking styles; see #660
|
|
139
|
+
if (styleWidth) {
|
|
140
|
+
node.style.width = styleWidth;
|
|
141
|
+
}
|
|
142
|
+
if (styleHeight) {
|
|
143
|
+
node.style.height = styleHeight;
|
|
144
|
+
}
|
|
145
|
+
return {
|
|
146
|
+
height: height,
|
|
147
|
+
width: width
|
|
148
|
+
};
|
|
149
|
+
} else {
|
|
150
|
+
return {
|
|
151
|
+
height: 0,
|
|
152
|
+
width: 0
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}, {
|
|
157
|
+
key: "_maybeMeasureCell",
|
|
158
|
+
value: function _maybeMeasureCell() {
|
|
159
|
+
var _this$props2 = this.props,
|
|
160
|
+
cache = _this$props2.cache,
|
|
161
|
+
_this$props2$columnIn = _this$props2.columnIndex,
|
|
162
|
+
columnIndex = _this$props2$columnIn === void 0 ? 0 : _this$props2$columnIn,
|
|
163
|
+
parent = _this$props2.parent,
|
|
164
|
+
_this$props2$rowIndex = _this$props2.rowIndex,
|
|
165
|
+
rowIndex = _this$props2$rowIndex === void 0 ? this.props.index || 0 : _this$props2$rowIndex;
|
|
166
|
+
if (!cache.has(rowIndex, columnIndex)) {
|
|
167
|
+
var _this$_getCellMeasure2 = this._getCellMeasurements(),
|
|
168
|
+
height = _this$_getCellMeasure2.height,
|
|
169
|
+
width = _this$_getCellMeasure2.width;
|
|
170
|
+
cache.set(rowIndex, columnIndex, width, height);
|
|
171
|
+
|
|
172
|
+
// If size has changed, let Grid know to re-render.
|
|
173
|
+
if (parent && typeof parent.invalidateCellSizeAfterRender === 'function') {
|
|
174
|
+
parent.invalidateCellSizeAfterRender({
|
|
175
|
+
columnIndex: columnIndex,
|
|
176
|
+
rowIndex: rowIndex
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}]);
|
|
182
|
+
}(React.PureComponent); // Used for DEV mode warning check
|
|
183
|
+
_defineProperty(CellMeasurer, "__internalCellMeasurerFlag", false);
|
|
184
|
+
export { CellMeasurer as default };
|
|
185
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
186
|
+
CellMeasurer.__internalCellMeasurerFlag = true;
|
|
187
|
+
}
|