@depup/react-virtualized 9.22.6-depup.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +34 -0
  3. package/changes.json +22 -0
  4. package/dist/commonjs/ArrowKeyStepper/ArrowKeyStepper.example.js +184 -0
  5. package/dist/commonjs/ArrowKeyStepper/ArrowKeyStepper.jest.js +338 -0
  6. package/dist/commonjs/ArrowKeyStepper/ArrowKeyStepper.js +204 -0
  7. package/dist/commonjs/ArrowKeyStepper/index.js +19 -0
  8. package/dist/commonjs/ArrowKeyStepper/types.js +5 -0
  9. package/dist/commonjs/AutoSizer/AutoSizer.example.js +104 -0
  10. package/dist/commonjs/AutoSizer/AutoSizer.jest.js +341 -0
  11. package/dist/commonjs/AutoSizer/AutoSizer.js +199 -0
  12. package/dist/commonjs/AutoSizer/AutoSizer.ssr.js +25 -0
  13. package/dist/commonjs/AutoSizer/index.js +19 -0
  14. package/dist/commonjs/CellMeasurer/CellMeasurer.DynamicHeightGrid.example.js +100 -0
  15. package/dist/commonjs/CellMeasurer/CellMeasurer.DynamicHeightList.example.js +99 -0
  16. package/dist/commonjs/CellMeasurer/CellMeasurer.DynamicHeightTableColumn.example.js +107 -0
  17. package/dist/commonjs/CellMeasurer/CellMeasurer.DynamicWidthGrid.example.js +102 -0
  18. package/dist/commonjs/CellMeasurer/CellMeasurer.DynamicWidthMultiGrid.example.js +107 -0
  19. package/dist/commonjs/CellMeasurer/CellMeasurer.example.js +129 -0
  20. package/dist/commonjs/CellMeasurer/CellMeasurer.jest.js +345 -0
  21. package/dist/commonjs/CellMeasurer/CellMeasurer.js +195 -0
  22. package/dist/commonjs/CellMeasurer/CellMeasurerCache.jest.js +298 -0
  23. package/dist/commonjs/CellMeasurer/CellMeasurerCache.js +202 -0
  24. package/dist/commonjs/CellMeasurer/index.js +22 -0
  25. package/dist/commonjs/CellMeasurer/types.js +14 -0
  26. package/dist/commonjs/Collection/Collection.example.js +231 -0
  27. package/dist/commonjs/Collection/Collection.jest.js +829 -0
  28. package/dist/commonjs/Collection/Collection.js +266 -0
  29. package/dist/commonjs/Collection/CollectionView.js +553 -0
  30. package/dist/commonjs/Collection/Section.jest.js +63 -0
  31. package/dist/commonjs/Collection/Section.js +57 -0
  32. package/dist/commonjs/Collection/SectionManager.jest.js +121 -0
  33. package/dist/commonjs/Collection/SectionManager.js +134 -0
  34. package/dist/commonjs/Collection/TestData.js +77 -0
  35. package/dist/commonjs/Collection/index.js +15 -0
  36. package/dist/commonjs/Collection/types.js +22 -0
  37. package/dist/commonjs/Collection/utils/calculateSizeAndPositionData.jest.js +34 -0
  38. package/dist/commonjs/Collection/utils/calculateSizeAndPositionData.js +38 -0
  39. package/dist/commonjs/ColumnSizer/ColumnSizer.example.js +159 -0
  40. package/dist/commonjs/ColumnSizer/ColumnSizer.jest.js +129 -0
  41. package/dist/commonjs/ColumnSizer/ColumnSizer.js +103 -0
  42. package/dist/commonjs/ColumnSizer/index.js +15 -0
  43. package/dist/commonjs/Grid/Grid.example.js +330 -0
  44. package/dist/commonjs/Grid/Grid.jest.js +2561 -0
  45. package/dist/commonjs/Grid/Grid.js +1432 -0
  46. package/dist/commonjs/Grid/Grid.ssr.js +62 -0
  47. package/dist/commonjs/Grid/accessibilityOverscanIndicesGetter.jest.js +92 -0
  48. package/dist/commonjs/Grid/accessibilityOverscanIndicesGetter.js +40 -0
  49. package/dist/commonjs/Grid/defaultCellRangeRenderer.js +139 -0
  50. package/dist/commonjs/Grid/defaultOverscanIndicesGetter.jest.js +92 -0
  51. package/dist/commonjs/Grid/defaultOverscanIndicesGetter.js +36 -0
  52. package/dist/commonjs/Grid/index.js +40 -0
  53. package/dist/commonjs/Grid/types.js +8 -0
  54. package/dist/commonjs/Grid/utils/CellSizeAndPositionManager.jest.js +375 -0
  55. package/dist/commonjs/Grid/utils/CellSizeAndPositionManager.js +296 -0
  56. package/dist/commonjs/Grid/utils/ScalingCellSizeAndPositionManager.jest.js +201 -0
  57. package/dist/commonjs/Grid/utils/ScalingCellSizeAndPositionManager.js +204 -0
  58. package/dist/commonjs/Grid/utils/calculateSizeAndPositionDataAndUpdateScrollOffset.jest.js +84 -0
  59. package/dist/commonjs/Grid/utils/calculateSizeAndPositionDataAndUpdateScrollOffset.js +59 -0
  60. package/dist/commonjs/Grid/utils/maxElementSize.js +22 -0
  61. package/dist/commonjs/Grid/utils/updateScrollIndexHelper.jest.js +180 -0
  62. package/dist/commonjs/Grid/utils/updateScrollIndexHelper.js +85 -0
  63. package/dist/commonjs/InfiniteLoader/InfiniteLoader.example.js +179 -0
  64. package/dist/commonjs/InfiniteLoader/InfiniteLoader.jest.js +571 -0
  65. package/dist/commonjs/InfiniteLoader/InfiniteLoader.js +274 -0
  66. package/dist/commonjs/InfiniteLoader/index.js +15 -0
  67. package/dist/commonjs/List/List.example.js +236 -0
  68. package/dist/commonjs/List/List.jest.js +517 -0
  69. package/dist/commonjs/List/List.js +318 -0
  70. package/dist/commonjs/List/index.js +19 -0
  71. package/dist/commonjs/List/types.js +6 -0
  72. package/dist/commonjs/Masonry/Masonry.example.js +287 -0
  73. package/dist/commonjs/Masonry/Masonry.jest.js +450 -0
  74. package/dist/commonjs/Masonry/Masonry.js +431 -0
  75. package/dist/commonjs/Masonry/PositionCache.js +88 -0
  76. package/dist/commonjs/Masonry/createCellPositioner.js +59 -0
  77. package/dist/commonjs/Masonry/index.js +22 -0
  78. package/dist/commonjs/MultiGrid/CellMeasurerCacheDecorator.js +106 -0
  79. package/dist/commonjs/MultiGrid/MultiGrid.example.js +131 -0
  80. package/dist/commonjs/MultiGrid/MultiGrid.jest.js +584 -0
  81. package/dist/commonjs/MultiGrid/MultiGrid.js +743 -0
  82. package/dist/commonjs/MultiGrid/index.js +15 -0
  83. package/dist/commonjs/ScrollSync/ScrollSync.example.js +257 -0
  84. package/dist/commonjs/ScrollSync/ScrollSync.jest.js +66 -0
  85. package/dist/commonjs/ScrollSync/ScrollSync.js +88 -0
  86. package/dist/commonjs/ScrollSync/index.js +15 -0
  87. package/dist/commonjs/Table/Column.jest.js +90 -0
  88. package/dist/commonjs/Table/Column.js +93 -0
  89. package/dist/commonjs/Table/SortDirection.js +19 -0
  90. package/dist/commonjs/Table/SortIndicator.js +40 -0
  91. package/dist/commonjs/Table/Table.example.js +325 -0
  92. package/dist/commonjs/Table/Table.jest.js +1257 -0
  93. package/dist/commonjs/Table/Table.js +742 -0
  94. package/dist/commonjs/Table/createMultiSort.jest.js +165 -0
  95. package/dist/commonjs/Table/createMultiSort.js +99 -0
  96. package/dist/commonjs/Table/defaultCellDataGetter.js +21 -0
  97. package/dist/commonjs/Table/defaultCellRenderer.js +19 -0
  98. package/dist/commonjs/Table/defaultHeaderRenderer.js +35 -0
  99. package/dist/commonjs/Table/defaultHeaderRowRenderer.js +21 -0
  100. package/dist/commonjs/Table/defaultRowRenderer.js +87 -0
  101. package/dist/commonjs/Table/index.js +78 -0
  102. package/dist/commonjs/Table/types.js +39 -0
  103. package/dist/commonjs/WindowScroller/WindowScroller.e2e.js +298 -0
  104. package/dist/commonjs/WindowScroller/WindowScroller.example.js +167 -0
  105. package/dist/commonjs/WindowScroller/WindowScroller.header-resize.e2e.js +359 -0
  106. package/dist/commonjs/WindowScroller/WindowScroller.jest.js +536 -0
  107. package/dist/commonjs/WindowScroller/WindowScroller.js +268 -0
  108. package/dist/commonjs/WindowScroller/WindowScroller.ssr.js +25 -0
  109. package/dist/commonjs/WindowScroller/index.js +23 -0
  110. package/dist/commonjs/WindowScroller/utils/dimensions.js +89 -0
  111. package/dist/commonjs/WindowScroller/utils/onScroll.js +70 -0
  112. package/dist/commonjs/index.js +180 -0
  113. package/dist/commonjs/jest-setup.js +7 -0
  114. package/dist/commonjs/utils/TestHelper.js +36 -0
  115. package/dist/commonjs/utils/animationFrame.js +29 -0
  116. package/dist/commonjs/utils/createCallbackMemoizer.jest.js +219 -0
  117. package/dist/commonjs/utils/createCallbackMemoizer.js +31 -0
  118. package/dist/commonjs/utils/getUpdatedOffsetForIndex.jest.js +68 -0
  119. package/dist/commonjs/utils/getUpdatedOffsetForIndex.js +38 -0
  120. package/dist/commonjs/utils/initCellMetadata.js +37 -0
  121. package/dist/commonjs/utils/requestAnimationTimeout.js +38 -0
  122. package/dist/commonjs/vendor/binarySearchBounds.js +200 -0
  123. package/dist/commonjs/vendor/detectElementResize.js +192 -0
  124. package/dist/commonjs/vendor/intervalTree.js +361 -0
  125. package/dist/es/ArrowKeyStepper/ArrowKeyStepper.example.js +176 -0
  126. package/dist/es/ArrowKeyStepper/ArrowKeyStepper.jest.js +332 -0
  127. package/dist/es/ArrowKeyStepper/ArrowKeyStepper.js +197 -0
  128. package/dist/es/ArrowKeyStepper/index.js +3 -0
  129. package/dist/es/ArrowKeyStepper/types.js +4 -0
  130. package/dist/es/AutoSizer/AutoSizer.example.js +96 -0
  131. package/dist/es/AutoSizer/AutoSizer.jest.js +335 -0
  132. package/dist/es/AutoSizer/AutoSizer.js +190 -0
  133. package/dist/es/AutoSizer/AutoSizer.js.flow +200 -0
  134. package/dist/es/AutoSizer/AutoSizer.ssr.js +19 -0
  135. package/dist/es/AutoSizer/index.js +2 -0
  136. package/dist/es/AutoSizer/index.js.flow +4 -0
  137. package/dist/es/CellMeasurer/CellMeasurer.DynamicHeightGrid.example.js +91 -0
  138. package/dist/es/CellMeasurer/CellMeasurer.DynamicHeightList.example.js +90 -0
  139. package/dist/es/CellMeasurer/CellMeasurer.DynamicHeightTableColumn.example.js +98 -0
  140. package/dist/es/CellMeasurer/CellMeasurer.DynamicWidthGrid.example.js +93 -0
  141. package/dist/es/CellMeasurer/CellMeasurer.DynamicWidthMultiGrid.example.js +98 -0
  142. package/dist/es/CellMeasurer/CellMeasurer.example.js +120 -0
  143. package/dist/es/CellMeasurer/CellMeasurer.jest.js +340 -0
  144. package/dist/es/CellMeasurer/CellMeasurer.js +187 -0
  145. package/dist/es/CellMeasurer/CellMeasurerCache.jest.js +293 -0
  146. package/dist/es/CellMeasurer/CellMeasurerCache.js +196 -0
  147. package/dist/es/CellMeasurer/index.js +4 -0
  148. package/dist/es/CellMeasurer/types.js +13 -0
  149. package/dist/es/Collection/Collection.example.js +223 -0
  150. package/dist/es/Collection/Collection.jest.js +824 -0
  151. package/dist/es/Collection/Collection.js +257 -0
  152. package/dist/es/Collection/CollectionView.js +544 -0
  153. package/dist/es/Collection/Section.jest.js +60 -0
  154. package/dist/es/Collection/Section.js +51 -0
  155. package/dist/es/Collection/SectionManager.jest.js +118 -0
  156. package/dist/es/Collection/SectionManager.js +128 -0
  157. package/dist/es/Collection/TestData.js +71 -0
  158. package/dist/es/Collection/index.js +3 -0
  159. package/dist/es/Collection/types.js +21 -0
  160. package/dist/es/Collection/utils/calculateSizeAndPositionData.jest.js +31 -0
  161. package/dist/es/Collection/utils/calculateSizeAndPositionData.js +31 -0
  162. package/dist/es/ColumnSizer/ColumnSizer.example.js +150 -0
  163. package/dist/es/ColumnSizer/ColumnSizer.jest.js +123 -0
  164. package/dist/es/ColumnSizer/ColumnSizer.js +95 -0
  165. package/dist/es/ColumnSizer/index.js +3 -0
  166. package/dist/es/Grid/Grid.example.js +321 -0
  167. package/dist/es/Grid/Grid.jest.js +2555 -0
  168. package/dist/es/Grid/Grid.js +1425 -0
  169. package/dist/es/Grid/Grid.ssr.js +57 -0
  170. package/dist/es/Grid/accessibilityOverscanIndicesGetter.jest.js +87 -0
  171. package/dist/es/Grid/accessibilityOverscanIndicesGetter.js +33 -0
  172. package/dist/es/Grid/defaultCellRangeRenderer.js +134 -0
  173. package/dist/es/Grid/defaultOverscanIndicesGetter.jest.js +87 -0
  174. package/dist/es/Grid/defaultOverscanIndicesGetter.js +29 -0
  175. package/dist/es/Grid/index.js +15 -0
  176. package/dist/es/Grid/types.js +96 -0
  177. package/dist/es/Grid/utils/CellSizeAndPositionManager.jest.js +372 -0
  178. package/dist/es/Grid/utils/CellSizeAndPositionManager.js +290 -0
  179. package/dist/es/Grid/utils/ScalingCellSizeAndPositionManager.jest.js +198 -0
  180. package/dist/es/Grid/utils/ScalingCellSizeAndPositionManager.js +198 -0
  181. package/dist/es/Grid/utils/calculateSizeAndPositionDataAndUpdateScrollOffset.jest.js +81 -0
  182. package/dist/es/Grid/utils/calculateSizeAndPositionDataAndUpdateScrollOffset.js +53 -0
  183. package/dist/es/Grid/utils/maxElementSize.js +16 -0
  184. package/dist/es/Grid/utils/updateScrollIndexHelper.jest.js +174 -0
  185. package/dist/es/Grid/utils/updateScrollIndexHelper.js +79 -0
  186. package/dist/es/InfiniteLoader/InfiniteLoader.example.js +170 -0
  187. package/dist/es/InfiniteLoader/InfiniteLoader.jest.js +565 -0
  188. package/dist/es/InfiniteLoader/InfiniteLoader.js +263 -0
  189. package/dist/es/InfiniteLoader/index.js +3 -0
  190. package/dist/es/List/List.example.js +227 -0
  191. package/dist/es/List/List.jest.js +511 -0
  192. package/dist/es/List/List.js +312 -0
  193. package/dist/es/List/index.js +3 -0
  194. package/dist/es/List/types.js +21 -0
  195. package/dist/es/Masonry/Masonry.example.js +278 -0
  196. package/dist/es/Masonry/Masonry.jest.js +444 -0
  197. package/dist/es/Masonry/Masonry.js +421 -0
  198. package/dist/es/Masonry/PositionCache.js +82 -0
  199. package/dist/es/Masonry/createCellPositioner.js +53 -0
  200. package/dist/es/Masonry/index.js +4 -0
  201. package/dist/es/MultiGrid/CellMeasurerCacheDecorator.js +100 -0
  202. package/dist/es/MultiGrid/MultiGrid.example.js +122 -0
  203. package/dist/es/MultiGrid/MultiGrid.jest.js +579 -0
  204. package/dist/es/MultiGrid/MultiGrid.js +733 -0
  205. package/dist/es/MultiGrid/index.js +3 -0
  206. package/dist/es/ScrollSync/ScrollSync.example.js +248 -0
  207. package/dist/es/ScrollSync/ScrollSync.jest.js +60 -0
  208. package/dist/es/ScrollSync/ScrollSync.js +80 -0
  209. package/dist/es/ScrollSync/index.js +3 -0
  210. package/dist/es/Table/Column.jest.js +84 -0
  211. package/dist/es/Table/Column.js +85 -0
  212. package/dist/es/Table/SortDirection.js +13 -0
  213. package/dist/es/Table/SortIndicator.js +31 -0
  214. package/dist/es/Table/Table.example.js +316 -0
  215. package/dist/es/Table/Table.jest.js +1251 -0
  216. package/dist/es/Table/Table.js +735 -0
  217. package/dist/es/Table/createMultiSort.jest.js +162 -0
  218. package/dist/es/Table/createMultiSort.js +93 -0
  219. package/dist/es/Table/defaultCellDataGetter.js +15 -0
  220. package/dist/es/Table/defaultCellRenderer.js +13 -0
  221. package/dist/es/Table/defaultHeaderRenderer.js +25 -0
  222. package/dist/es/Table/defaultHeaderRowRenderer.js +12 -0
  223. package/dist/es/Table/defaultRowRenderer.js +77 -0
  224. package/dist/es/Table/index.js +12 -0
  225. package/dist/es/Table/types.js +38 -0
  226. package/dist/es/WindowScroller/WindowScroller.e2e.js +295 -0
  227. package/dist/es/WindowScroller/WindowScroller.example.js +158 -0
  228. package/dist/es/WindowScroller/WindowScroller.header-resize.e2e.js +356 -0
  229. package/dist/es/WindowScroller/WindowScroller.jest.js +530 -0
  230. package/dist/es/WindowScroller/WindowScroller.js +259 -0
  231. package/dist/es/WindowScroller/WindowScroller.js.flow +277 -0
  232. package/dist/es/WindowScroller/WindowScroller.ssr.js +19 -0
  233. package/dist/es/WindowScroller/index.js +3 -0
  234. package/dist/es/WindowScroller/index.js.flow +6 -0
  235. package/dist/es/WindowScroller/utils/dimensions.js +81 -0
  236. package/dist/es/WindowScroller/utils/dimensions.js.flow +91 -0
  237. package/dist/es/WindowScroller/utils/onScroll.js +64 -0
  238. package/dist/es/WindowScroller/utils/onScroll.js.flow +94 -0
  239. package/dist/es/index.js +13 -0
  240. package/dist/es/jest-setup.js +5 -0
  241. package/dist/es/utils/TestHelper.js +30 -0
  242. package/dist/es/utils/animationFrame.js +23 -0
  243. package/dist/es/utils/createCallbackMemoizer.jest.js +216 -0
  244. package/dist/es/utils/createCallbackMemoizer.js +25 -0
  245. package/dist/es/utils/getUpdatedOffsetForIndex.jest.js +65 -0
  246. package/dist/es/utils/getUpdatedOffsetForIndex.js +32 -0
  247. package/dist/es/utils/initCellMetadata.js +31 -0
  248. package/dist/es/utils/requestAnimationTimeout.js +32 -0
  249. package/dist/es/vendor/binarySearchBounds.js +194 -0
  250. package/dist/es/vendor/detectElementResize.js +186 -0
  251. package/dist/es/vendor/intervalTree.js +354 -0
  252. package/dist/umd/react-virtualized.js +4638 -0
  253. package/package.json +188 -0
  254. package/styles.css +80 -0
@@ -0,0 +1,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
+ }