react-virtualized
Version:
React components for efficiently rendering large, scrollable lists and tabular data
29 lines (24 loc) • 1.3 kB
JavaScript
export default function calculateSizeAndPositionDataAndUpdateScrollOffset(_ref) {
var cellCount = _ref.cellCount,
cellSize = _ref.cellSize,
computeMetadataCallback = _ref.computeMetadataCallback,
computeMetadataCallbackProps = _ref.computeMetadataCallbackProps,
nextCellsCount = _ref.nextCellsCount,
nextCellSize = _ref.nextCellSize,
nextScrollToIndex = _ref.nextScrollToIndex,
scrollToIndex = _ref.scrollToIndex,
updateScrollOffsetForScrollToIndex = _ref.updateScrollOffsetForScrollToIndex;
// Don't compare cell sizes if they are functions because inline functions would cause infinite loops.
// In that event users should use the manual recompute methods to inform of changes.
if (cellCount !== nextCellsCount || (typeof cellSize === 'number' || typeof nextCellSize === 'number') && cellSize !== nextCellSize) {
computeMetadataCallback(computeMetadataCallbackProps);
// Updated cell metadata may have hidden the previous scrolled-to item.
// In this case we should also update the scrollTop to ensure it stays visible.
if (scrollToIndex >= 0 && scrollToIndex === nextScrollToIndex) {
updateScrollOffsetForScrollToIndex();
}
}
}
/**
* Helper method that determines when to recalculate row or column metadata.
*/