UNPKG

vanilla-recycler-view

Version:

high performance UI rendering library for web browser

93 lines 3.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.VirtualElement = void 0; const _1 = require("./"); class VirtualElement { constructor(parent, data) { this.index = 0; this.start = 0; this.size = 0; this.wrapperElement = null; this.renderer = null; this.parent = parent; this.data = data; } setPosition(start, size) { this.start = start; this.size = size; } setIndex(index) { this.index = index; } updatePosition() { if (this.wrapperElement) { switch (this.parent._direction) { case _1.DIRECTION.VERTICAL: this.wrapperElement.style.top = (0, _1.toPx)(this.start); this.wrapperElement.style.height = (0, _1.toPx)(this.size); break; case _1.DIRECTION.HORIZONTAL: this.wrapperElement.style.left = (0, _1.toPx)(this.start); this.wrapperElement.style.width = (0, _1.toPx)(this.size); break; } } else { throw new Error('element not mounted'); } } isMounted() { return !!this.renderer && !!this.wrapperElement; } mountRenderer(reusable) { if (!this.wrapperElement && !this.renderer) { switch (this.parent._direction) { case _1.DIRECTION.VERTICAL: reusable.wrapperElement.style.top = (0, _1.toPx)(this.start); reusable.wrapperElement.style.height = (0, _1.toPx)(this.size); break; case _1.DIRECTION.HORIZONTAL: reusable.wrapperElement.style.left = (0, _1.toPx)(this.start); reusable.wrapperElement.style.width = (0, _1.toPx)(this.size); break; } this.wrapperElement = reusable.wrapperElement; this.renderer = reusable.renderer; if (!this.wrapperElement.parentElement) { this.parent.container.appendChild(this.wrapperElement); } } else { throw new Error('reusable already mounted'); } } unmountRenderer() { const renderer = this.renderer; const wrapperElement = this.wrapperElement; if (renderer && wrapperElement) { this.renderer = null; this.wrapperElement = null; if (renderer.onUnmount) { renderer.onUnmount({ api: this.parent, data: this.data, index: this.index, }); } return { renderer: renderer, wrapperElement: wrapperElement, }; } else { throw new Error('renderer not mounted'); } } destroyRenderer() { var _a; const reusable = this.unmountRenderer(); (_a = reusable.wrapperElement.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(reusable.wrapperElement); } } exports.VirtualElement = VirtualElement; //# sourceMappingURL=virtual-element.js.map