vscroll
Version:
Virtual scroll engine
64 lines • 2.51 kB
JavaScript
import { __extends } from "tslib";
import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';
var Render = /** @class */ (function (_super) {
__extends(Render, _super);
function Render() {
return _super !== null && _super.apply(this, arguments) || this;
}
Render.run = function (scroller) {
var workflow = scroller.workflow, _a = scroller.state, cycle = _a.cycle, render = _a.render, scroll = _a.scroll, fetch = _a.fetch, viewport = scroller.viewport, routines = scroller.routines;
scroller.logger.stat('before new items render');
if (scroll.positionBeforeAsync === null) {
scroll.positionBeforeAsync = viewport.scrollPosition;
}
render.cancel = routines.render(function () {
render.cancel = null;
if (Render.doRender(scroller)) {
workflow.call({
process: Render.process,
status: render.noSize ? ProcessStatus.done : ProcessStatus.next,
payload: { process: cycle.initiator }
});
}
else {
workflow.call({
process: Render.process,
status: ProcessStatus.error,
payload: { error: 'Can\'t associate item with element' }
});
}
}, { items: fetch.items.map(function (i) { return i.get(); }) });
};
Render.doRender = function (scroller) {
var _a = scroller.state, fetch = _a.fetch, render = _a.render, viewport = scroller.viewport, buffer = scroller.buffer, logger = scroller.logger;
render.positionBefore = viewport.scrollPosition;
if (!fetch.isCheck) {
render.sizeBefore = viewport.getScrollableSize();
if (!fetch.items.every(function (item) {
return Render.processElement(scroller, item);
})) {
return false;
}
}
buffer.checkDefaultSize();
render.sizeAfter = viewport.getScrollableSize();
logger.stat('after new items render');
logger.log(function () { return render.noSize ? 'viewport size has not been changed' : void 0; });
return true;
};
Render.processElement = function (scroller, item) {
var viewport = scroller.viewport, buffer = scroller.buffer;
var element = viewport.findItemElementById(item.nodeId);
if (!element) {
return false;
}
item.element = element;
item.makeVisible();
item.setSize(buffer.getSizeByIndex(item.$index));
buffer.cacheItem(item);
return true;
};
return Render;
}(BaseProcessFactory(CommonProcess.render)));
export default Render;
//# sourceMappingURL=render.js.map