@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,198 @@
1
+ import ScalingCellSizeAndPositionManager from './ScalingCellSizeAndPositionManager';
2
+ describe('ScalingCellSizeAndPositionManager', function () {
3
+ function init() {
4
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
5
+ _ref$cellCount = _ref.cellCount,
6
+ cellCount = _ref$cellCount === void 0 ? 10 : _ref$cellCount,
7
+ _ref$cellSize = _ref.cellSize,
8
+ cellSize = _ref$cellSize === void 0 ? 10 : _ref$cellSize,
9
+ _ref$estimatedCellSiz = _ref.estimatedCellSize,
10
+ estimatedCellSize = _ref$estimatedCellSiz === void 0 ? 10 : _ref$estimatedCellSiz,
11
+ _ref$maxScrollSize = _ref.maxScrollSize,
12
+ maxScrollSize = _ref$maxScrollSize === void 0 ? 50 : _ref$maxScrollSize;
13
+ var cellSizeAndPositionManager = new ScalingCellSizeAndPositionManager({
14
+ cellCount: cellCount,
15
+ cellSizeGetter: function cellSizeGetter() {
16
+ return cellSize;
17
+ },
18
+ estimatedCellSize: estimatedCellSize,
19
+ maxScrollSize: maxScrollSize
20
+ });
21
+ return cellSizeAndPositionManager;
22
+ }
23
+ describe('_getOffsetPercentage', function () {
24
+ it('should return the correct offset fraction', function () {
25
+ var expectations = [{
26
+ offset: 0,
27
+ expectedOffsetPercentage: 0
28
+ }, {
29
+ offset: 35,
30
+ expectedOffsetPercentage: 0.5
31
+ }, {
32
+ offset: 70,
33
+ expectedOffsetPercentage: 1
34
+ }];
35
+ var instance = init();
36
+ expectations.forEach(function (expectation) {
37
+ expect(instance._getOffsetPercentage({
38
+ containerSize: 30,
39
+ offset: expectation.offset,
40
+ totalSize: 100
41
+ })).toBe(expectation.expectedOffsetPercentage);
42
+ });
43
+ });
44
+ });
45
+ describe('getOffsetAdjustment', function () {
46
+ it('should always return 0 as the adjustment for unscaled lists', function () {
47
+ var maxScrollSizes = [100, 150];
48
+ maxScrollSizes.forEach(function (maxScrollSize) {
49
+ var instance = init({
50
+ cellCount: 10,
51
+ maxScrollSize: maxScrollSize
52
+ });
53
+ var offsets = [0, 35, 70];
54
+ offsets.forEach(function (offset) {
55
+ expect(instance.getOffsetAdjustment({
56
+ containerSize: 30,
57
+ offset: offset
58
+ })).toBe(0);
59
+ });
60
+ });
61
+ });
62
+ it('should properly scale an offset at the beginning, middle, and end of the list', function () {
63
+ var offsetsAndExpectedAdjustements = [{
64
+ offset: 0,
65
+ expectedAdjustment: -0
66
+ }, {
67
+ offset: 10,
68
+ expectedAdjustment: -25
69
+ }, {
70
+ offset: 20,
71
+ expectedAdjustment: -50
72
+ }];
73
+ var instance = init();
74
+ offsetsAndExpectedAdjustements.forEach(function (offsetAndExpectedAdjustement) {
75
+ expect(instance.getOffsetAdjustment({
76
+ containerSize: 30,
77
+ offset: offsetAndExpectedAdjustement.offset
78
+ })).toBe(offsetAndExpectedAdjustement.expectedAdjustment);
79
+ });
80
+ });
81
+ });
82
+ describe('getTotalSize', function () {
83
+ it('should return :totalSize if it is not greater than :maxScrollSize', function () {
84
+ var maxScrollSizes = [500, 750];
85
+ maxScrollSizes.forEach(function (maxScrollSize) {
86
+ var instance = init({
87
+ cellCount: 50,
88
+ maxScrollSize: maxScrollSize
89
+ });
90
+ expect(instance.getTotalSize()).toEqual(500);
91
+ });
92
+ });
93
+ it('should return :maxScrollSize if :totalSize is greater', function () {
94
+ var instance = init({
95
+ cellCount: 100,
96
+ maxScrollSize: 100
97
+ });
98
+ expect(instance.getTotalSize()).toEqual(100);
99
+ });
100
+ });
101
+ describe('getUpdatedOffsetForIndex', function () {
102
+ it('should scroll to a cell before the current range', function () {
103
+ var data = [{
104
+ targetIndex: 0,
105
+ expectedOffset: 0
106
+ }, {
107
+ targetIndex: 1,
108
+ expectedOffset: 3
109
+ },
110
+ // (unsafe: 10)
111
+ {
112
+ targetIndex: 2,
113
+ expectedOffset: 6
114
+ } // (unsafe: 20)
115
+ ];
116
+ var instance = init();
117
+ data.forEach(function (datum) {
118
+ expect(instance.getUpdatedOffsetForIndex({
119
+ containerSize: 30,
120
+ currentOffset: 10,
121
+ // (unsafe: 35)
122
+ targetIndex: datum.targetIndex
123
+ })).toBe(datum.expectedOffset);
124
+ });
125
+ });
126
+ it('should scroll to a cell after the current range', function () {
127
+ var data = [{
128
+ targetIndex: 7,
129
+ expectedOffset: 14
130
+ },
131
+ // (unsafe: 50)
132
+ {
133
+ targetIndex: 9,
134
+ expectedOffset: 20
135
+ } // (unsafe: 70)
136
+ ];
137
+ var instance = init();
138
+ data.forEach(function (datum) {
139
+ expect(instance.getUpdatedOffsetForIndex({
140
+ containerSize: 30,
141
+ currentOffset: 0,
142
+ targetIndex: datum.targetIndex
143
+ })).toBe(datum.expectedOffset);
144
+ });
145
+ });
146
+ it('should not scroll to a cell already visible within the current range', function () {
147
+ var instance = init();
148
+ expect(instance.getUpdatedOffsetForIndex({
149
+ containerSize: 30,
150
+ currentOffset: 10,
151
+ // (unsafe: 35)
152
+ targetIndex: 4
153
+ })).toBe(10);
154
+ });
155
+ });
156
+ describe('getVisibleCellRange', function () {
157
+ it('should correct identify the first set of cells', function () {
158
+ var instance = init();
159
+ expect(instance.getVisibleCellRange({
160
+ containerSize: 30,
161
+ offset: 0
162
+ })).toEqual({
163
+ start: 0,
164
+ stop: 2
165
+ });
166
+ });
167
+ it('should correct identify cells in the middle', function () {
168
+ var instance = init();
169
+ expect(instance.getVisibleCellRange({
170
+ containerSize: 30,
171
+ offset: 2.85 // (unsafe: 10)
172
+ })).toEqual({
173
+ start: 1,
174
+ stop: 3
175
+ });
176
+ });
177
+ it('should correct identify partially visible cells', function () {
178
+ var instance = init();
179
+ expect(instance.getVisibleCellRange({
180
+ containerSize: 30,
181
+ offset: 10 // (unsafe: 35)
182
+ })).toEqual({
183
+ start: 3,
184
+ stop: 6
185
+ });
186
+ });
187
+ it('should correct identify the last set of cells', function () {
188
+ var instance = init();
189
+ expect(instance.getVisibleCellRange({
190
+ containerSize: 30,
191
+ offset: 20
192
+ })).toEqual({
193
+ start: 7,
194
+ stop: 9
195
+ });
196
+ });
197
+ });
198
+ });
@@ -0,0 +1,198 @@
1
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
2
+ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
3
+ import _createClass from "@babel/runtime/helpers/createClass";
4
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
5
+ var _excluded = ["maxScrollSize"];
6
+ /*:: import type {Alignment, CellSizeGetter, VisibleCellRange} from '../types';*/
7
+ import CellSizeAndPositionManager from './CellSizeAndPositionManager';
8
+ import { getMaxElementSize } from './maxElementSize.js';
9
+ /*:: type ContainerSizeAndOffset = {
10
+ containerSize: number,
11
+ offset: number,
12
+ };*/
13
+ /*:: type Params = {
14
+ maxScrollSize?: number,
15
+ cellCount: number,
16
+ cellSizeGetter: CellSizeGetter,
17
+ estimatedCellSize: number,
18
+ };*/
19
+ /**
20
+ * Browsers have scroll offset limitations (eg Chrome stops scrolling at ~33.5M pixels where as Edge tops out at ~1.5M pixels).
21
+ * After a certain position, the browser won't allow the user to scroll further (even via JavaScript scroll offset adjustments).
22
+ * This util picks a lower ceiling for max size and artificially adjusts positions within to make it transparent for users.
23
+ */
24
+ /**
25
+ * Extends CellSizeAndPositionManager and adds scaling behavior for lists that are too large to fit within a browser's native limits.
26
+ */
27
+ var ScalingCellSizeAndPositionManager = /*#__PURE__*/function () {
28
+ function ScalingCellSizeAndPositionManager(_ref /*:: */) {
29
+ var _ref$maxScrollSize = _ref /*:: */.maxScrollSize,
30
+ maxScrollSize = _ref$maxScrollSize === void 0 ? getMaxElementSize() : _ref$maxScrollSize,
31
+ params = _objectWithoutProperties(_ref /*:: */, _excluded);
32
+ _classCallCheck(this, ScalingCellSizeAndPositionManager);
33
+ _defineProperty(this, "_cellSizeAndPositionManager", void 0);
34
+ _defineProperty(this, "_maxScrollSize", void 0);
35
+ // Favor composition over inheritance to simplify IE10 support
36
+ this._cellSizeAndPositionManager = new CellSizeAndPositionManager(params);
37
+ this._maxScrollSize = maxScrollSize;
38
+ }
39
+ return _createClass(ScalingCellSizeAndPositionManager, [{
40
+ key: "areOffsetsAdjusted",
41
+ value: function areOffsetsAdjusted() /*: boolean*/{
42
+ return this._cellSizeAndPositionManager.getTotalSize() > this._maxScrollSize;
43
+ }
44
+ }, {
45
+ key: "configure",
46
+ value: function configure(params
47
+ /*: {
48
+ cellCount: number,
49
+ estimatedCellSize: number,
50
+ cellSizeGetter: CellSizeGetter,
51
+ }*/
52
+ ) {
53
+ this._cellSizeAndPositionManager.configure(params);
54
+ }
55
+ }, {
56
+ key: "getCellCount",
57
+ value: function getCellCount() /*: number*/{
58
+ return this._cellSizeAndPositionManager.getCellCount();
59
+ }
60
+ }, {
61
+ key: "getEstimatedCellSize",
62
+ value: function getEstimatedCellSize() /*: number*/{
63
+ return this._cellSizeAndPositionManager.getEstimatedCellSize();
64
+ }
65
+ }, {
66
+ key: "getLastMeasuredIndex",
67
+ value: function getLastMeasuredIndex() /*: number*/{
68
+ return this._cellSizeAndPositionManager.getLastMeasuredIndex();
69
+ }
70
+
71
+ /**
72
+ * Number of pixels a cell at the given position (offset) should be shifted in order to fit within the scaled container.
73
+ * The offset passed to this function is scaled (safe) as well.
74
+ */
75
+ }, {
76
+ key: "getOffsetAdjustment",
77
+ value: function getOffsetAdjustment(_ref2 /*:: */) /*: number*/{
78
+ var containerSize = _ref2 /*:: */.containerSize,
79
+ offset = _ref2 /*:: */.offset;
80
+ var totalSize = this._cellSizeAndPositionManager.getTotalSize();
81
+ var safeTotalSize = this.getTotalSize();
82
+ var offsetPercentage = this._getOffsetPercentage({
83
+ containerSize: containerSize,
84
+ offset: offset,
85
+ totalSize: safeTotalSize
86
+ });
87
+ return Math.round(offsetPercentage * (safeTotalSize - totalSize));
88
+ }
89
+ }, {
90
+ key: "getSizeAndPositionOfCell",
91
+ value: function getSizeAndPositionOfCell(index /*: number*/) {
92
+ return this._cellSizeAndPositionManager.getSizeAndPositionOfCell(index);
93
+ }
94
+ }, {
95
+ key: "getSizeAndPositionOfLastMeasuredCell",
96
+ value: function getSizeAndPositionOfLastMeasuredCell() {
97
+ return this._cellSizeAndPositionManager.getSizeAndPositionOfLastMeasuredCell();
98
+ }
99
+
100
+ /** See CellSizeAndPositionManager#getTotalSize */
101
+ }, {
102
+ key: "getTotalSize",
103
+ value: function getTotalSize() /*: number*/{
104
+ return Math.min(this._maxScrollSize, this._cellSizeAndPositionManager.getTotalSize());
105
+ }
106
+
107
+ /** See CellSizeAndPositionManager#getUpdatedOffsetForIndex */
108
+ }, {
109
+ key: "getUpdatedOffsetForIndex",
110
+ value: function getUpdatedOffsetForIndex(_ref3 /*:: */) {
111
+ var _ref3$align = _ref3 /*:: */.align,
112
+ align = _ref3$align === void 0 ? 'auto' : _ref3$align,
113
+ containerSize = _ref3 /*:: */.containerSize,
114
+ currentOffset = _ref3 /*:: */.currentOffset,
115
+ targetIndex = _ref3 /*:: */.targetIndex;
116
+ currentOffset = this._safeOffsetToOffset({
117
+ containerSize: containerSize,
118
+ offset: currentOffset
119
+ });
120
+ var offset = this._cellSizeAndPositionManager.getUpdatedOffsetForIndex({
121
+ align: align,
122
+ containerSize: containerSize,
123
+ currentOffset: currentOffset,
124
+ targetIndex: targetIndex
125
+ });
126
+ return this._offsetToSafeOffset({
127
+ containerSize: containerSize,
128
+ offset: offset
129
+ });
130
+ }
131
+
132
+ /** See CellSizeAndPositionManager#getVisibleCellRange */
133
+ }, {
134
+ key: "getVisibleCellRange",
135
+ value: function getVisibleCellRange(_ref4 /*:: */) /*: VisibleCellRange*/{
136
+ var containerSize = _ref4 /*:: */.containerSize,
137
+ offset = _ref4 /*:: */.offset;
138
+ offset = this._safeOffsetToOffset({
139
+ containerSize: containerSize,
140
+ offset: offset
141
+ });
142
+ return this._cellSizeAndPositionManager.getVisibleCellRange({
143
+ containerSize: containerSize,
144
+ offset: offset
145
+ });
146
+ }
147
+ }, {
148
+ key: "resetCell",
149
+ value: function resetCell(index /*: number*/) /*: void*/{
150
+ this._cellSizeAndPositionManager.resetCell(index);
151
+ }
152
+ }, {
153
+ key: "_getOffsetPercentage",
154
+ value: function _getOffsetPercentage(_ref5 /*:: */) {
155
+ var containerSize = _ref5 /*:: */.containerSize,
156
+ offset = _ref5 /*:: */.offset,
157
+ totalSize = _ref5 /*:: */.totalSize;
158
+ return totalSize <= containerSize ? 0 : offset / (totalSize - containerSize);
159
+ }
160
+ }, {
161
+ key: "_offsetToSafeOffset",
162
+ value: function _offsetToSafeOffset(_ref6 /*:: */) /*: number*/{
163
+ var containerSize = _ref6 /*:: */.containerSize,
164
+ offset = _ref6 /*:: */.offset;
165
+ var totalSize = this._cellSizeAndPositionManager.getTotalSize();
166
+ var safeTotalSize = this.getTotalSize();
167
+ if (totalSize === safeTotalSize) {
168
+ return offset;
169
+ } else {
170
+ var offsetPercentage = this._getOffsetPercentage({
171
+ containerSize: containerSize,
172
+ offset: offset,
173
+ totalSize: totalSize
174
+ });
175
+ return Math.round(offsetPercentage * (safeTotalSize - containerSize));
176
+ }
177
+ }
178
+ }, {
179
+ key: "_safeOffsetToOffset",
180
+ value: function _safeOffsetToOffset(_ref7 /*:: */) /*: number*/{
181
+ var containerSize = _ref7 /*:: */.containerSize,
182
+ offset = _ref7 /*:: */.offset;
183
+ var totalSize = this._cellSizeAndPositionManager.getTotalSize();
184
+ var safeTotalSize = this.getTotalSize();
185
+ if (totalSize === safeTotalSize) {
186
+ return offset;
187
+ } else {
188
+ var offsetPercentage = this._getOffsetPercentage({
189
+ containerSize: containerSize,
190
+ offset: offset,
191
+ totalSize: safeTotalSize
192
+ });
193
+ return Math.round(offsetPercentage * (totalSize - containerSize));
194
+ }
195
+ }
196
+ }]);
197
+ }();
198
+ export { ScalingCellSizeAndPositionManager as default };
@@ -0,0 +1,81 @@
1
+ import calculateSizeAndPositionDataAndUpdateScrollOffset from './calculateSizeAndPositionDataAndUpdateScrollOffset';
2
+ describe('calculateSizeAndPositionDataAndUpdateScrollOffset', function () {
3
+ function helper() {
4
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
5
+ _ref$cellCount = _ref.cellCount,
6
+ cellCount = _ref$cellCount === void 0 ? 100 : _ref$cellCount,
7
+ _ref$cellSize = _ref.cellSize,
8
+ cellSize = _ref$cellSize === void 0 ? 10 : _ref$cellSize,
9
+ _ref$computeMetadataC = _ref.computeMetadataCallbackProps,
10
+ computeMetadataCallbackProps = _ref$computeMetadataC === void 0 ? {} : _ref$computeMetadataC,
11
+ _ref$nextCellsCount = _ref.nextCellsCount,
12
+ nextCellsCount = _ref$nextCellsCount === void 0 ? 100 : _ref$nextCellsCount,
13
+ _ref$nextCellSize = _ref.nextCellSize,
14
+ nextCellSize = _ref$nextCellSize === void 0 ? 10 : _ref$nextCellSize,
15
+ nextScrollToIndex = _ref.nextScrollToIndex,
16
+ scrollToIndex = _ref.scrollToIndex;
17
+ var computeMetadataCallbackCalls = [];
18
+ var updateScrollOffsetForScrollToIndexCalls = [];
19
+ calculateSizeAndPositionDataAndUpdateScrollOffset({
20
+ cellCount: cellCount,
21
+ cellSize: cellSize,
22
+ computeMetadataCallback: function computeMetadataCallback(params) {
23
+ return computeMetadataCallbackCalls.push(params);
24
+ },
25
+ computeMetadataCallbackProps: computeMetadataCallbackProps,
26
+ nextCellsCount: nextCellsCount,
27
+ nextCellSize: nextCellSize,
28
+ nextScrollToIndex: nextScrollToIndex,
29
+ scrollToIndex: scrollToIndex,
30
+ updateScrollOffsetForScrollToIndex: function updateScrollOffsetForScrollToIndex(params) {
31
+ return updateScrollOffsetForScrollToIndexCalls.push(params);
32
+ }
33
+ });
34
+ return {
35
+ computeMetadataCallbackCalls: computeMetadataCallbackCalls,
36
+ updateScrollOffsetForScrollToIndexCalls: updateScrollOffsetForScrollToIndexCalls
37
+ };
38
+ }
39
+ it('should call :computeMetadataCallback if :cellCount has changed', function () {
40
+ var _helper = helper({
41
+ cellCount: 100,
42
+ nextCellsCount: 200
43
+ }),
44
+ computeMetadataCallbackCalls = _helper.computeMetadataCallbackCalls;
45
+ expect(computeMetadataCallbackCalls.length).toEqual(1);
46
+ });
47
+ it('should call :computeMetadataCallback if numeric :cellSize has changed', function () {
48
+ var _helper2 = helper({
49
+ cellSize: 10,
50
+ nextCellSize: 20
51
+ }),
52
+ computeMetadataCallbackCalls = _helper2.computeMetadataCallbackCalls;
53
+ expect(computeMetadataCallbackCalls.length).toEqual(1);
54
+ });
55
+ it('should not call :computeMetadataCallback if :cellSize callback has changed', function () {
56
+ var _helper3 = helper({
57
+ cellSize: function cellSize() {},
58
+ nextCellSize: function nextCellSize() {}
59
+ }),
60
+ computeMetadataCallbackCalls = _helper3.computeMetadataCallbackCalls;
61
+ expect(computeMetadataCallbackCalls.length).toEqual(0);
62
+ });
63
+ it('should not call :updateScrollOffsetForScrollToIndex if :scrollToIndex is not specified', function () {
64
+ var _helper4 = helper(),
65
+ updateScrollOffsetForScrollToIndexCalls = _helper4.updateScrollOffsetForScrollToIndexCalls;
66
+ expect(updateScrollOffsetForScrollToIndexCalls.length).toEqual(0);
67
+ });
68
+ it('should not call :updateScrollOffsetForScrollToIndex if :scrollToIndex has also changed', function () {
69
+ var _helper5 = helper({
70
+ scrollToIndex: 10,
71
+ nextScrollToIndex: 20
72
+ }),
73
+ updateScrollOffsetForScrollToIndexCalls = _helper5.updateScrollOffsetForScrollToIndexCalls;
74
+ expect(updateScrollOffsetForScrollToIndexCalls.length).toEqual(0);
75
+ });
76
+ it('should not call :computeMetadataCallback if the above conditions are not true', function () {
77
+ var _helper6 = helper(),
78
+ computeMetadataCallbackCalls = _helper6.computeMetadataCallbackCalls;
79
+ expect(computeMetadataCallbackCalls.length).toEqual(0);
80
+ });
81
+ });
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Helper method that determines when to recalculate row or column metadata.
3
+ */
4
+ /*:: type Params<T> = {
5
+ // Number of rows or columns in the current axis
6
+ cellCount: number,
7
+
8
+ // Width or height of cells for the current axis
9
+ cellSize: ?number,
10
+
11
+ // Method to invoke if cell metadata should be recalculated
12
+ computeMetadataCallback: (props: T) => void,
13
+
14
+ // Parameters to pass to :computeMetadataCallback
15
+ computeMetadataCallbackProps: T,
16
+
17
+ // Newly updated number of rows or columns in the current axis
18
+ nextCellsCount: number,
19
+
20
+ // Newly updated width or height of cells for the current axis
21
+ nextCellSize: ?number,
22
+
23
+ // Newly updated scroll-to-index
24
+ nextScrollToIndex: number,
25
+
26
+ // Scroll-to-index
27
+ scrollToIndex: number,
28
+
29
+ // Callback to invoke if the scroll position should be recalculated
30
+ updateScrollOffsetForScrollToIndex: () => void,
31
+ };*/
32
+ export default function calculateSizeAndPositionDataAndUpdateScrollOffset(_ref /*:: */) {
33
+ var cellCount = _ref /*:: */.cellCount,
34
+ cellSize = _ref /*:: */.cellSize,
35
+ computeMetadataCallback = _ref /*:: */.computeMetadataCallback,
36
+ computeMetadataCallbackProps = _ref /*:: */.computeMetadataCallbackProps,
37
+ nextCellsCount = _ref /*:: */.nextCellsCount,
38
+ nextCellSize = _ref /*:: */.nextCellSize,
39
+ nextScrollToIndex = _ref /*:: */.nextScrollToIndex,
40
+ scrollToIndex = _ref /*:: */.scrollToIndex,
41
+ updateScrollOffsetForScrollToIndex = _ref /*:: */.updateScrollOffsetForScrollToIndex;
42
+ // Don't compare cell sizes if they are functions because inline functions would cause infinite loops.
43
+ // In that event users should use the manual recompute methods to inform of changes.
44
+ if (cellCount !== nextCellsCount || (typeof cellSize === 'number' || typeof nextCellSize === 'number') && cellSize !== nextCellSize) {
45
+ computeMetadataCallback(computeMetadataCallbackProps);
46
+
47
+ // Updated cell metadata may have hidden the previous scrolled-to item.
48
+ // In this case we should also update the scrollTop to ensure it stays visible.
49
+ if (scrollToIndex >= 0 && scrollToIndex === nextScrollToIndex) {
50
+ updateScrollOffsetForScrollToIndex();
51
+ }
52
+ }
53
+ }
@@ -0,0 +1,16 @@
1
+ var DEFAULT_MAX_ELEMENT_SIZE = 1500000;
2
+ var CHROME_MAX_ELEMENT_SIZE = 1.67771e7;
3
+ var isBrowser = function isBrowser() {
4
+ return typeof window !== 'undefined';
5
+ };
6
+ var isChrome = function isChrome() {
7
+ return !!window.chrome;
8
+ };
9
+ export var getMaxElementSize = function getMaxElementSize() /*: number*/{
10
+ if (isBrowser()) {
11
+ if (isChrome()) {
12
+ return CHROME_MAX_ELEMENT_SIZE;
13
+ }
14
+ }
15
+ return DEFAULT_MAX_ELEMENT_SIZE;
16
+ };