vanilla-recycler-view
Version:
high performance UI rendering library for web browser
93 lines • 3.23 kB
JavaScript
"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