react-infinite-table
Version:
React table with infinite rows and much more!
45 lines (36 loc) • 1.88 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createInfiniteComputer = createInfiniteComputer;
exports.recomputeApertureStateFromOptionsAndScrollTop = recomputeApertureStateFromOptionsAndScrollTop;
var _constantInfiniteComputer = _interopRequireDefault(require("../computers/constantInfiniteComputer.js"));
var _arrayInfiniteComputer = _interopRequireDefault(require("../computers/arrayInfiniteComputer.js"));
function createInfiniteComputer(rowCount, rowHeight) {
var computer;
if (typeof rowHeight === 'function') {
throw new Error('not implemented yet');
computer = new _arrayInfiniteComputer["default"](rowCount, rowHeight);
} else {
computer = new _constantInfiniteComputer["default"](rowCount, rowHeight);
}
return computer;
} // Given the scrollTop of the container, computes the state the
// component should be in. The goal is to abstract all of this
// from any actual representation in the DOM.
// The window is the block with any overscanSize
// added to it.
function recomputeApertureStateFromOptionsAndScrollTop(overscanSize, infiniteComputer, scrollTop, height) {
var blockStartNumber = overscanSize === 0 ? 0 : Math.floor(scrollTop / overscanSize);
var blockEndNumber = overscanSize === 0 ? 0 : Math.ceil((scrollTop + height) / overscanSize);
var blockStart = overscanSize * blockStartNumber;
var blockEnd = overscanSize * blockEndNumber;
var totalHeight = infiniteComputer.getTotalScrollableHeight();
var apertureTop = Math.max(0, blockStart - overscanSize);
var apertureBottom = Math.min(totalHeight, blockEnd + overscanSize);
return {
displayIndexStart: infiniteComputer.getDisplayIndexStart(apertureTop),
displayIndexEnd: infiniteComputer.getDisplayIndexEnd(apertureBottom)
};
}