ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
86 lines • 12.7 kB
JavaScript
import { Injectable } from "@angular/core";
import { Subject } from "rxjs";
import { distinctUntilChanged } from "rxjs/operators";
import * as i0 from "@angular/core";
export class OTableVirtualScrollStrategy {
constructor() {
this.indexChange = new Subject();
this.scrolledIndexChange = this.indexChange.pipe(distinctUntilChanged());
this.stickyChange = new Subject();
this.bufferMultiplier = 1;
this._dataLength = 0;
}
get dataLength() {
return this._dataLength;
}
set dataLength(value) {
this._dataLength = value;
this.onDataLengthChanged();
}
attach(viewport) {
this.viewport = viewport;
this.onDataLengthChanged();
this.updateContent();
}
detach() {
}
destroy() {
this.indexChange.complete();
this.stickyChange.complete();
}
onContentRendered() {
}
onRenderedOffsetChanged() {
}
scrollToIndex(index, behavior) {
}
onContentScrolled() {
this.updateContent();
}
setConfig(rowHeight, headerHeight, footerHeight) {
if (this.rowHeight === rowHeight
&& this.headerHeight === headerHeight
&& this.footerHeight === footerHeight) {
return;
}
this.rowHeight = rowHeight;
this.headerHeight = headerHeight;
this.footerHeight = footerHeight;
this.onDataLengthChanged();
}
onDataLengthChanged() {
if (this.viewport) {
this.viewport.setTotalContentSize(this.dataLength * this.rowHeight + this.headerHeight + this.footerHeight);
this.viewport.scrollToOffset(0);
this.updateContent();
}
}
updateContent() {
if (!this.viewport || !this.rowHeight || this.dataLength === 0) {
return;
}
const scrollOffset = this.viewport.measureScrollOffset();
const itemsDisplayed = Math.ceil(this.viewport.getViewportSize() / this.rowHeight);
const renderedOffset = this.viewport.getOffsetToRenderedContentStart();
const start = renderedOffset / this.rowHeight;
const bufferItems = Math.ceil(itemsDisplayed * this.bufferMultiplier);
const bufferOffset = renderedOffset + bufferItems * this.rowHeight;
const relativeScrollOffset = scrollOffset - bufferOffset;
const rowsScrolled = relativeScrollOffset / this.rowHeight;
const displayed = scrollOffset / this.rowHeight;
this.indexChange.next(displayed);
const rowsToMove = Math.sign(rowsScrolled) * Math.floor(Math.abs(rowsScrolled));
const adjustedRenderedOffset = Math.max(0, renderedOffset + rowsToMove * this.rowHeight);
this.viewport.setRenderedContentOffset(adjustedRenderedOffset);
const adjustedStart = Math.max(0, start + rowsToMove);
const adjustedEnd = adjustedStart + itemsDisplayed + bufferItems;
this.viewport.setRenderedRange({ start: adjustedStart, end: adjustedEnd });
this.stickyChange.next(adjustedRenderedOffset);
}
}
OTableVirtualScrollStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableVirtualScrollStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
OTableVirtualScrollStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableVirtualScrollStrategy });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableVirtualScrollStrategy, decorators: [{
type: Injectable
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1zdHJhdGVneS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvZXh0ZW5zaW9ucy9vLXRhYmxlLXN0cmF0ZWd5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUd0RCxNQUFNLE9BQU8sMkJBQTJCO0lBRHhDO1FBT21CLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUM5Qyx3QkFBbUIsR0FBdUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUM3QyxxQkFBZ0IsR0FBVyxDQUFDLENBQUM7UUFXN0IsZ0JBQVcsR0FBRyxDQUFDLENBQUM7S0FvRnpCO0lBN0ZDLElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsS0FBYTtRQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBSU0sTUFBTSxDQUFDLFFBQWtDO1FBQzlDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU0sTUFBTTtJQUViLENBQUM7SUFFTSxPQUFPO1FB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QUUvRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFDdEQsTUFBTSxXQUFXLEdBQUcsYUFBYSxHQUFHLGNBQWMsR0FBRyxXQUFXLENBQUM7UUFDakUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNqRCxDQUFDOzt5SEF2R1UsMkJBQTJCOzZIQUEzQiwyQkFBMkI7NEZBQTNCLDJCQUEyQjtrQkFEdkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgVmlydHVhbFNjcm9sbFN0cmF0ZWd5IH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9zY3JvbGxpbmdcIjtcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT1RhYmxlVmlydHVhbFNjcm9sbFN0cmF0ZWd5IGltcGxlbWVudHMgVmlydHVhbFNjcm9sbFN0cmF0ZWd5IHtcbiAgcHJpdmF0ZSB2aWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gIHByaXZhdGUgcm93SGVpZ2h0ITogbnVtYmVyO1xuICBwcml2YXRlIGhlYWRlckhlaWdodCE6IG51bWJlcjtcbiAgcHJpdmF0ZSBmb290ZXJIZWlnaHQhOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5kZXhDaGFuZ2UgPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG4gIHB1YmxpYyBzY3JvbGxlZEluZGV4Q2hhbmdlOiBPYnNlcnZhYmxlPG51bWJlcj4gPSB0aGlzLmluZGV4Q2hhbmdlLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gIHB1YmxpYyByZWFkb25seSBzdGlja3lDaGFuZ2UgPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG4gIHByaXZhdGUgYnVmZmVyTXVsdGlwbGllcjogbnVtYmVyID0gMTtcblxuICBnZXQgZGF0YUxlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9kYXRhTGVuZ3RoO1xuICB9XG5cbiAgc2V0IGRhdGFMZW5ndGgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2RhdGFMZW5ndGggPSB2YWx1ZTtcbiAgICB0aGlzLm9uRGF0YUxlbmd0aENoYW5nZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2RhdGFMZW5ndGggPSAwO1xuXG4gIHB1YmxpYyBhdHRhY2godmlld3BvcnQ6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCk6IHZvaWQge1xuICAgIHRoaXMudmlld3BvcnQgPSB2aWV3cG9ydDtcbiAgICB0aGlzLm9uRGF0YUxlbmd0aENoYW5nZWQoKTtcbiAgICB0aGlzLnVwZGF0ZUNvbnRlbnQoKTtcbiAgfVxuXG4gIHB1YmxpYyBkZXRhY2goKTogdm9pZCB7XG4gICAgLy9uby1vcFxuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5pbmRleENoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuc3RpY2t5Q2hhbmdlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgb25Db250ZW50UmVuZGVyZWQoKTogdm9pZCB7XG4gICAgLy8gbm8tb3BcbiAgfVxuXG4gIHB1YmxpYyBvblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpOiB2b2lkIHtcbiAgICAvLyBuby1vcFxuICB9XG5cbiAgcHVibGljIHNjcm9sbFRvSW5kZXgoaW5kZXg6IG51bWJlciwgYmVoYXZpb3I/OiBTY3JvbGxCZWhhdmlvcik6IHZvaWQge1xuICAgIC8vIG5vLW9wXG4gIH1cblxuICBwdWJsaWMgb25Db250ZW50U2Nyb2xsZWQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDb250ZW50KCk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29uZmlnKHJvd0hlaWdodDogbnVtYmVyLCBoZWFkZXJIZWlnaHQ6IG51bWJlciwgZm9vdGVySGVpZ2h0OiBudW1iZXIpIHtcblxuICAgIGlmIChcbiAgICAgIHRoaXMucm93SGVpZ2h0ID09PSByb3dIZWlnaHRcbiAgICAgICYmIHRoaXMuaGVhZGVySGVpZ2h0ID09PSBoZWFkZXJIZWlnaHRcbiAgICAgICYmIHRoaXMuZm9vdGVySGVpZ2h0ID09PSBmb290ZXJIZWlnaHRcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yb3dIZWlnaHQgPSByb3dIZWlnaHQ7XG4gICAgdGhpcy5oZWFkZXJIZWlnaHQgPSBoZWFkZXJIZWlnaHQ7XG4gICAgdGhpcy5mb290ZXJIZWlnaHQgPSBmb290ZXJIZWlnaHQ7XG4gICAgLy9pZiBjaGFuZ2UgaGVpZ2h0cywgdGhlbiB1cGRhdGUgY29udGVudCBzaXplXG4gICAgdGhpcy5vbkRhdGFMZW5ndGhDaGFuZ2VkKCk7XG4gIH1cblxuICBwdWJsaWMgb25EYXRhTGVuZ3RoQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52aWV3cG9ydCkge1xuICAgICAgdGhpcy52aWV3cG9ydC5zZXRUb3RhbENvbnRlbnRTaXplKHRoaXMuZGF0YUxlbmd0aCAqIHRoaXMucm93SGVpZ2h0ICsgdGhpcy5oZWFkZXJIZWlnaHQgKyB0aGlzLmZvb3RlckhlaWdodCk7XG4gICAgICB0aGlzLnZpZXdwb3J0LnNjcm9sbFRvT2Zmc2V0KDApOy8vc2V0IHNjcm9sbCB1cFxuICAgICAgdGhpcy51cGRhdGVDb250ZW50KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb250ZW50KCkge1xuICAgIGlmICghdGhpcy52aWV3cG9ydCB8fCAhdGhpcy5yb3dIZWlnaHQgfHwgdGhpcy5kYXRhTGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNjcm9sbE9mZnNldCA9IHRoaXMudmlld3BvcnQubWVhc3VyZVNjcm9sbE9mZnNldCgpO1xuICAgIGNvbnN0IGl0ZW1zRGlzcGxheWVkID0gTWF0aC5jZWlsKHRoaXMudmlld3BvcnQuZ2V0Vmlld3BvcnRTaXplKCkgLyB0aGlzLnJvd0hlaWdodCk7XG4gICAgY29uc3QgcmVuZGVyZWRPZmZzZXQgPSB0aGlzLnZpZXdwb3J0LmdldE9mZnNldFRvUmVuZGVyZWRDb250ZW50U3RhcnQoKTtcbiAgICBjb25zdCBzdGFydCA9IHJlbmRlcmVkT2Zmc2V0IC8gdGhpcy5yb3dIZWlnaHQ7XG4gICAgY29uc3QgYnVmZmVySXRlbXMgPSBNYXRoLmNlaWwoaXRlbXNEaXNwbGF5ZWQgKiB0aGlzLmJ1ZmZlck11bHRpcGxpZXIpO1xuICAgIGNvbnN0IGJ1ZmZlck9mZnNldCA9IHJlbmRlcmVkT2Zmc2V0ICsgYnVmZmVySXRlbXMgKiB0aGlzLnJvd0hlaWdodDtcblxuICAgIGNvbnN0IHJlbGF0aXZlU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0IC0gYnVmZmVyT2Zmc2V0Oy8vIEhvdyBmYXIgdGhlIHNjcm9sbCBvZmZzZXQgaXMgZnJvbSB0aGUgbG93ZXIgYnVmZmVyLCB3aGljaCBpcyB1c3VhbGx5IHdoZXJlIGl0ZW1zIHN0YXJ0IGJlaW5nIGRpc3BsYXllZFxuICAgIGNvbnN0IHJvd3NTY3JvbGxlZCA9IHJlbGF0aXZlU2Nyb2xsT2Zmc2V0IC8gdGhpcy5yb3dIZWlnaHQ7XG5cbiAgICBjb25zdCBkaXNwbGF5ZWQgPSBzY3JvbGxPZmZzZXQgLyB0aGlzLnJvd0hlaWdodDtcbiAgICB0aGlzLmluZGV4Q2hhbmdlLm5leHQoZGlzcGxheWVkKTtcblxuICAgIGNvbnN0IHJvd3NUb01vdmUgPSBNYXRoLnNpZ24ocm93c1Njcm9sbGVkKSAqIE1hdGguZmxvb3IoTWF0aC5hYnMocm93c1Njcm9sbGVkKSk7XG5cbiAgICBjb25zdCBhZGp1c3RlZFJlbmRlcmVkT2Zmc2V0ID0gTWF0aC5tYXgoMCwgcmVuZGVyZWRPZmZzZXQgKyByb3dzVG9Nb3ZlICogdGhpcy5yb3dIZWlnaHQpO1xuICAgIHRoaXMudmlld3BvcnQuc2V0UmVuZGVyZWRDb250ZW50T2Zmc2V0KGFkanVzdGVkUmVuZGVyZWRPZmZzZXQpO1xuXG4gICAgY29uc3QgYWRqdXN0ZWRTdGFydCA9IE1hdGgubWF4KDAsIHN0YXJ0ICsgcm93c1RvTW92ZSk7XG4gICAgY29uc3QgYWRqdXN0ZWRFbmQgPSBhZGp1c3RlZFN0YXJ0ICsgaXRlbXNEaXNwbGF5ZWQgKyBidWZmZXJJdGVtcztcbiAgICB0aGlzLnZpZXdwb3J0LnNldFJlbmRlcmVkUmFuZ2UoeyBzdGFydDogYWRqdXN0ZWRTdGFydCwgZW5kOiBhZGp1c3RlZEVuZCB9KTtcbiAgICB0aGlzLnN0aWNreUNoYW5nZS5uZXh0KGFkanVzdGVkUmVuZGVyZWRPZmZzZXQpO1xuICB9XG59Il19