UNPKG

ng-cdk-table-virtual-scroll

Version:
68 lines 8.68 kB
import { __extends } from "tslib"; import { DataSource } from '@angular/cdk/table'; import { BehaviorSubject, ReplaySubject, Subscription, } from 'rxjs'; var TableVirtualScrollDataSource = /** @class */ (function (_super) { __extends(TableVirtualScrollDataSource, _super); function TableVirtualScrollDataSource(initialData) { if (initialData === void 0) { initialData = []; } var _this = _super.call(this) || this; /** Stream emitting render data to the table (depends on ordered data changes). */ _this._renderData = new BehaviorSubject([]); /** * Subscription to the changes that should trigger an update to the table's rendered rows, such * as filtering, sorting, pagination, or base data changes. */ _this._renderChangesSubscription = null; _this._data = new BehaviorSubject(initialData); _this.updateChangeSubscription(); return _this; } Object.defineProperty(TableVirtualScrollDataSource.prototype, "data", { /** Array of data that should be rendered by the table, where each object represents one row. */ get: function () { return this._data.value; }, set: function (data) { this._data.next(data); }, enumerable: true, configurable: true }); TableVirtualScrollDataSource.prototype.updateChangeSubscription = function () { var _this = this; this.initStreams(); this._renderChangesSubscription = new Subscription(); this._renderChangesSubscription.add(this._data.subscribe(function (data) { return _this.dataToRender$.next(data); })); this._renderChangesSubscription.add(this.dataOfRange$.subscribe(function (data) { return _this._renderData.next(data); })); }; TableVirtualScrollDataSource.prototype.initStreams = function () { if (!this.streamsReady) { this.dataToRender$ = new ReplaySubject(1); this.dataOfRange$ = new ReplaySubject(1); this.streamsReady = true; } }; /** * Used by the MatTable. Called when it connects to the data source. * @private */ TableVirtualScrollDataSource.prototype.connect = function () { if (!this._renderChangesSubscription) { this.updateChangeSubscription(); } return this._renderData; }; /** * Used by the MatTable. Called when it disconnects from the data source. * @private */ TableVirtualScrollDataSource.prototype.disconnect = function () { if (this._renderChangesSubscription) { this._renderChangesSubscription.unsubscribe(); } this._renderChangesSubscription = null; }; return TableVirtualScrollDataSource; }(DataSource)); export { TableVirtualScrollDataSource }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZGF0YS1zb3VyY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1jZGstdGFibGUtdmlydHVhbC1zY3JvbGwvIiwic291cmNlcyI6WyJsaWIvdGFibGUtZGF0YS1zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQ0wsZUFBZSxFQUVmLGFBQWEsRUFFYixZQUFZLEdBQ2IsTUFBTSxNQUFNLENBQUM7QUFFZDtJQUFxRCxnREFBYTtJQXlCaEUsc0NBQVksV0FBcUI7UUFBckIsNEJBQUEsRUFBQSxnQkFBcUI7UUFBakMsWUFDRSxpQkFBTyxTQUdSO1FBekJELGtGQUFrRjtRQUNqRSxpQkFBVyxHQUFHLElBQUksZUFBZSxDQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRTVEOzs7V0FHRztRQUNPLGdDQUEwQixHQUF3QixJQUFJLENBQUM7UUFnQi9ELEtBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxlQUFlLENBQU0sV0FBVyxDQUFDLENBQUM7UUFDbkQsS0FBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7O0lBQ2xDLENBQUM7SUFYRCxzQkFBSSw4Q0FBSTtRQURSLGdHQUFnRzthQUNoRztZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDMUIsQ0FBQzthQUNELFVBQVMsSUFBUztZQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixDQUFDOzs7T0FIQTtJQVdTLCtEQUF3QixHQUFsQztRQUFBLGlCQVNDO1FBUkMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3JELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLENBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQUMsSUFBSSxJQUFLLE9BQUEsS0FBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQTdCLENBQTZCLENBQUMsQ0FDOUQsQ0FBQztRQUNGLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLENBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFVBQUMsSUFBSSxJQUFLLE9BQUEsS0FBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQTNCLENBQTJCLENBQUMsQ0FDbkUsQ0FBQztJQUNKLENBQUM7SUFFUyxrREFBVyxHQUFyQjtRQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQU0sQ0FBQyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLGFBQWEsQ0FBTSxDQUFDLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCw4Q0FBTyxHQUFQO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRTtZQUNwQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztTQUNqQztRQUVELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaURBQVUsR0FBVjtRQUNFLElBQUksSUFBSSxDQUFDLDBCQUEwQixFQUFFO1lBQ25DLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUMvQztRQUNELElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUM7SUFDekMsQ0FBQztJQUNILG1DQUFDO0FBQUQsQ0FBQyxBQXhFRCxDQUFxRCxVQUFVLEdBd0U5RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9jZGsvdGFibGUnO1xyXG5pbXBvcnQge1xyXG4gIEJlaGF2aW9yU3ViamVjdCxcclxuICBPYnNlcnZhYmxlLFxyXG4gIFJlcGxheVN1YmplY3QsXHJcbiAgU3ViamVjdCxcclxuICBTdWJzY3JpcHRpb24sXHJcbn0gZnJvbSAncnhqcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGFibGVWaXJ0dWFsU2Nyb2xsRGF0YVNvdXJjZTxUPiBleHRlbmRzIERhdGFTb3VyY2U8VD4ge1xyXG4gIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyB3aGVuIGEgbmV3IGRhdGEgYXJyYXkgaXMgc2V0IG9uIHRoZSBkYXRhIHNvdXJjZS4gKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhOiBCZWhhdmlvclN1YmplY3Q8VFtdPjtcclxuXHJcbiAgLyoqIFN0cmVhbSBlbWl0dGluZyByZW5kZXIgZGF0YSB0byB0aGUgdGFibGUgKGRlcGVuZHMgb24gb3JkZXJlZCBkYXRhIGNoYW5nZXMpLiAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlbmRlckRhdGEgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRbXT4oW10pO1xyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpcHRpb24gdG8gdGhlIGNoYW5nZXMgdGhhdCBzaG91bGQgdHJpZ2dlciBhbiB1cGRhdGUgdG8gdGhlIHRhYmxlJ3MgcmVuZGVyZWQgcm93cywgc3VjaFxyXG4gICAqIGFzIGZpbHRlcmluZywgc29ydGluZywgcGFnaW5hdGlvbiwgb3IgYmFzZSBkYXRhIGNoYW5nZXMuXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIF9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHVibGljIGRhdGFUb1JlbmRlciQ6IFN1YmplY3Q8VFtdPjtcclxuICBwdWJsaWMgZGF0YU9mUmFuZ2UkOiBTdWJqZWN0PFRbXT47XHJcbiAgcHJvdGVjdGVkIHN0cmVhbXNSZWFkeTogYm9vbGVhbjtcclxuXHJcbiAgLyoqIEFycmF5IG9mIGRhdGEgdGhhdCBzaG91bGQgYmUgcmVuZGVyZWQgYnkgdGhlIHRhYmxlLCB3aGVyZSBlYWNoIG9iamVjdCByZXByZXNlbnRzIG9uZSByb3cuICovXHJcbiAgZ2V0IGRhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YS52YWx1ZTtcclxuICB9XHJcbiAgc2V0IGRhdGEoZGF0YTogVFtdKSB7XHJcbiAgICB0aGlzLl9kYXRhLm5leHQoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihpbml0aWFsRGF0YTogVFtdID0gW10pIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLl9kYXRhID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUW10+KGluaXRpYWxEYXRhKTtcclxuICAgIHRoaXMudXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCkge1xyXG4gICAgdGhpcy5pbml0U3RyZWFtcygpO1xyXG4gICAgdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAgIHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLl9kYXRhLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5kYXRhVG9SZW5kZXIkLm5leHQoZGF0YSkpXHJcbiAgICApO1xyXG4gICAgdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMuZGF0YU9mUmFuZ2UkLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5fcmVuZGVyRGF0YS5uZXh0KGRhdGEpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpbml0U3RyZWFtcygpIHtcclxuICAgIGlmICghdGhpcy5zdHJlYW1zUmVhZHkpIHtcclxuICAgICAgdGhpcy5kYXRhVG9SZW5kZXIkID0gbmV3IFJlcGxheVN1YmplY3Q8VFtdPigxKTtcclxuICAgICAgdGhpcy5kYXRhT2ZSYW5nZSQgPSBuZXcgUmVwbGF5U3ViamVjdDxUW10+KDEpO1xyXG4gICAgICB0aGlzLnN0cmVhbXNSZWFkeSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVc2VkIGJ5IHRoZSBNYXRUYWJsZS4gQ2FsbGVkIHdoZW4gaXQgY29ubmVjdHMgdG8gdGhlIGRhdGEgc291cmNlLlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgY29ubmVjdCgpOiBPYnNlcnZhYmxlPFRbXSB8IHJlYWRvbmx5IFRbXT4ge1xyXG4gICAgaWYgKCF0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3JlbmRlckRhdGE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVc2VkIGJ5IHRoZSBNYXRUYWJsZS4gQ2FsbGVkIHdoZW4gaXQgZGlzY29ubmVjdHMgZnJvbSB0aGUgZGF0YSBzb3VyY2UuXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBkaXNjb25uZWN0KCkge1xyXG4gICAgaWYgKHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IG51bGw7XHJcbiAgfVxyXG59XHJcbiJdfQ==