react-virtualized
Version:
React components for efficiently rendering large, scrollable lists and tabular data
36 lines (32 loc) • 1.35 kB
JavaScript
/**
* Determines a new offset that ensures a certain cell is visible, given the current offset.
* If the cell is already visible then the current offset will be returned.
* If the current offset is too great or small, it will be adjusted just enough to ensure the specified index is visible.
*
* @param align Desired alignment within container; one of "auto" (default), "start", or "end"
* @param cellOffset Offset (x or y) position for cell
* @param cellSize Size (width or height) of cell
* @param containerSize Total size (width or height) of the container
* @param currentOffset Container's current (x or y) offset
* @return Offset to use to ensure the specified cell is visible
*/
export default function getUpdatedOffsetForIndex(_ref) {
var _ref$align = _ref.align,
align = _ref$align === void 0 ? 'auto' : _ref$align,
cellOffset = _ref.cellOffset,
cellSize = _ref.cellSize,
containerSize = _ref.containerSize,
currentOffset = _ref.currentOffset;
var maxOffset = cellOffset;
var minOffset = maxOffset - containerSize + cellSize;
switch (align) {
case 'start':
return maxOffset;
case 'end':
return minOffset;
case 'center':
return maxOffset - (containerSize - cellSize) / 2;
default:
return Math.max(minOffset, Math.min(maxOffset, currentOffset));
}
}