UNPKG

react-infinite-table

Version:
45 lines (36 loc) 1.88 kB
"use strict"; 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) }; }