react-virtualized
Version:
React components for efficiently rendering large, scrollable lists and tabular data
36 lines (29 loc) • 1.34 kB
JavaScript
import SectionManager from '../SectionManager';
export default function calculateSizeAndPositionData(_ref) {
var cellCount = _ref.cellCount,
cellSizeAndPositionGetter = _ref.cellSizeAndPositionGetter,
sectionSize = _ref.sectionSize;
var cellMetadata = [];
var sectionManager = new SectionManager(sectionSize);
var height = 0;
var width = 0;
for (var index = 0; index < cellCount; index++) {
var cellMetadatum = cellSizeAndPositionGetter({ index: index });
if (cellMetadatum.height == null || isNaN(cellMetadatum.height) || cellMetadatum.width == null || isNaN(cellMetadatum.width) || cellMetadatum.x == null || isNaN(cellMetadatum.x) || cellMetadatum.y == null || isNaN(cellMetadatum.y)) {
throw Error('Invalid metadata returned for cell ' + index + ':\n x:' + cellMetadatum.x + ', y:' + cellMetadatum.y + ', width:' + cellMetadatum.width + ', height:' + cellMetadatum.height);
}
height = Math.max(height, cellMetadatum.y + cellMetadatum.height);
width = Math.max(width, cellMetadatum.x + cellMetadatum.width);
cellMetadata[index] = cellMetadatum;
sectionManager.registerCell({
cellMetadatum: cellMetadatum,
index: index
});
}
return {
cellMetadata: cellMetadata,
height: height,
sectionManager: sectionManager,
width: width
};
}