UNPKG

truly-ui

Version:

Web Components for Desktop Applications.

110 lines (108 loc) 14 kB
/* MIT License Copyright (c) 2019 Temainfo Sistemas Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import { DataSource } from '@angular/cdk/collections'; import { BehaviorSubject, Subscription, Subject } from 'rxjs'; export class DataSourceList extends DataSource { constructor(config) { super(); this.config = config; this.loadMoreData = new Subject(); this.totalLength = 0; this.pageSize = 0; this.lazyMode = false; this.fetchedPages = new Set(); this.cachedData = []; this.subscription = new Subscription(); this.arrayTotal = []; this.currentPage = 0; this.setProprieties(config); this.cachedData = this.config.dataSource; this.dataStream = new BehaviorSubject(this.arrayTotal); this.resetData(); } connect(collectionViewer) { this.subscription.add(collectionViewer.viewChange.subscribe(range => { const startPage = this.getPageForIndex(range.start); const endPage = this.getPageForIndex(range.end - 1); for (let i = startPage; i <= endPage; i++) { this.fetchPage(i); } })); return this.dataStream; } disconnect() { // this.subscription.unsubscribe(); } unsubscribe() { this.subscription.unsubscribe(); } addPage(page) { this.fetchedPages.add(page); } setArray(value) { this.arrayTotal.length = value; this.dataStream.next(this.arrayTotal); } resetData() { this.arrayTotal = Array.from({ length: this.totalLength }); this.dataStream.next(this.arrayTotal); } resetPages() { this.fetchedPages.clear(); } setProprieties(config) { Object.keys(config).forEach((value) => { this[value] = config[value]; }); } getCachedData() { return this.cachedData; } setData(data) { this.cachedData = data; this.arrayTotal.splice(this.currentPage * this.pageSize, this.pageSize, ...data); this.dataStream.next(this.arrayTotal); if (data.length === this.pageSize) { if (!this.fetchedPages.has(0)) { this.fetchedPages.add(0); } } } getPageForIndex(index) { return Math.floor(index / this.pageSize); } emitCachedData(skip) { this.cachedData.slice(skip, this.pageSize); this.dataStream.next(this.cachedData); } emitLoadData(skip) { this.loadMoreData.next({ skip: skip, limit: this.pageSize + skip }); } fetchPage(page) { this.currentPage = page; if (this.fetchedPages.has(page)) { return; } this.addPage(page); const skip = page * this.pageSize; !this.lazyMode ? this.emitCachedData(skip) : this.emitLoadData(skip); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1bHktdWkvc3JjL2NvbXBvbmVudHMvY29yZS9jbGFzc2VzL2RhdGFzb3VyY2UtbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxPQUFPLEVBQW9CLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQWMsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcxRSxNQUFNLE9BQU8sY0FBZSxTQUFRLFVBQThCO0lBc0JoRSxZQUFvQixNQUEyQjtRQUM3QyxLQUFLLEVBQUUsQ0FBQztRQURVLFdBQU0sR0FBTixNQUFNLENBQXFCO1FBbEJ4QyxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFNUIsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFFaEIsYUFBUSxHQUFHLENBQUMsQ0FBQztRQUViLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsaUJBQVksR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBRWpDLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFFaEIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRWxDLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFFaEIsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFJdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxlQUFlLENBQXVCLElBQUksQ0FBQyxVQUFVLENBQUUsQ0FBQztRQUM5RSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELE9BQU8sQ0FBRSxnQkFB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N0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBRSxDQUFDO0lBQzFDLENBQUM7SUFFTyxZQUFZLENBQUMsSUFBWTtRQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxFQUFFLENBQUUsQ0FBQztJQUN4RSxDQUFDO0lBRU8sU0FBUyxDQUFFLElBQVk7UUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBRSxJQUFJLENBQUUsRUFBRztZQUNuQyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2xDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RSxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuIE1JVCBMaWNlbnNlXG5cbiBDb3B5cmlnaHQgKGMpIDIwMTkgVGVtYWluZm8gU2lzdGVtYXNcblxuIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IENvbGxlY3Rpb25WaWV3ZXIsIERhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERhdGFTb3VyY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2RhdGFzb3VyY2UtbGlzdC5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY2xhc3MgRGF0YVNvdXJjZUxpc3QgZXh0ZW5kcyBEYXRhU291cmNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuXG4gIHB1YmxpYyBkYXRhU3RyZWFtOiBCZWhhdmlvclN1YmplY3Q8YW55PjtcblxuICBwdWJsaWMgbG9hZE1vcmVEYXRhID0gbmV3IFN1YmplY3QoKTtcblxuICBwcml2YXRlIHRvdGFsTGVuZ3RoID0gMDtcblxuICBwcml2YXRlIHBhZ2VTaXplID0gMDtcblxuICBwcml2YXRlIGxhenlNb2RlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBmZXRjaGVkUGFnZXMgPSBuZXcgU2V0PG51bWJlcj4oKTtcblxuICBwcml2YXRlIGNhY2hlZERhdGEgPSBbXTtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBwcml2YXRlIGFycmF5VG90YWwgPSBbXTtcblxuICBwcml2YXRlIGN1cnJlbnRQYWdlID0gMDtcblxuICBjb25zdHJ1Y3RvciggcHVibGljIGNvbmZpZzogRGF0YVNvdXJjZUludGVyZmFjZSApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc2V0UHJvcHJpZXRpZXMoY29uZmlnKTtcbiAgICB0aGlzLmNhY2hlZERhdGEgPSB0aGlzLmNvbmZpZy5kYXRhU291cmNlO1xuICAgIHRoaXMuZGF0YVN0cmVhbSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8KGFueSB8IHVuZGVmaW5lZClbXT4oIHRoaXMuYXJyYXlUb3RhbCApO1xuICAgIHRoaXMucmVzZXREYXRhKCk7XG4gIH1cblxuICBjb25uZWN0KCBjb2xsZWN0aW9uVmlld2VyPzogQ29sbGVjdGlvblZpZXdlciApOiBPYnNlcnZhYmxlPChzdHJpbmcgfCB1bmRlZmluZWQpW10+IHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoIGNvbGxlY3Rpb25WaWV3ZXIudmlld0NoYW5nZS5zdWJzY3JpYmUoIHJhbmdlID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0UGFnZSA9IHRoaXMuZ2V0UGFnZUZvckluZGV4KCByYW5nZS5zdGFydCApO1xuICAgICAgY29uc3QgZW5kUGFnZSA9IHRoaXMuZ2V0UGFnZUZvckluZGV4KCByYW5nZS5lbmQgLSAxICk7XG4gICAgICBmb3IgKCBsZXQgaSA9IHN0YXJ0UGFnZTsgaSA8PSBlbmRQYWdlOyBpKysgKSB7XG4gICAgICAgIHRoaXMuZmV0Y2hQYWdlKCBpICk7XG4gICAgICB9XG4gICAgfSApICk7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVN0cmVhbTtcbiAgfVxuXG4gIGRpc2Nvbm5lY3QoKTogdm9pZCB7XG4gICAgLy8gdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHVuc3Vic2NyaWJlKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBhZGRQYWdlKHBhZ2U6IG51bWJlcikge1xuICAgIHRoaXMuZmV0Y2hlZFBhZ2VzLmFkZCggcGFnZSApO1xuICB9XG5cbiAgcHVibGljIHNldEFycmF5KCB2YWx1ZSApIHtcbiAgICB0aGlzLmFycmF5VG90YWwubGVuZ3RoID0gdmFsdWU7XG4gICAgdGhpcy5kYXRhU3RyZWFtLm5leHQoIHRoaXMuYXJyYXlUb3RhbCApO1xuICB9XG5cbiAgcHVibGljIHJlc2V0RGF0YSgpIHtcbiAgICB0aGlzLmFycmF5VG90YWwgPSBBcnJheS5mcm9tPHN0cmluZz4oe2xlbmd0aDogdGhpcy50b3RhbExlbmd0aCB9KTtcbiAgICB0aGlzLmRhdGFTdHJlYW0ubmV4dCggdGhpcy5hcnJheVRvdGFsICk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRQYWdlcygpIHtcbiAgICB0aGlzLmZldGNoZWRQYWdlcy5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQcm9wcmlldGllcyhjb25maWcpIHtcbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICB0aGlzW3ZhbHVlXSA9IGNvbmZpZ1t2YWx1ZV07XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2FjaGVkRGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZWREYXRhO1xuICB9XG5cbiAgcHVibGljIHNldERhdGEoZGF0YTogQXJyYXk8YW55Pikge1xuICAgIHRoaXMuY2FjaGVkRGF0YSA9IGRhdGE7XG4gICAgdGhpcy5hcnJheVRvdGFsLnNwbGljZSh0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5wYWdlU2l6ZSwgdGhpcy5wYWdlU2l6ZSwgLi4uZGF0YSk7XG4gICAgdGhpcy5kYXRhU3RyZWFtLm5leHQoIHRoaXMuYXJyYXlUb3RhbCApO1xuICAgIGlmICggZGF0YS5sZW5ndGggPT09IHRoaXMucGFnZVNpemUpIHtcbiAgICAgIGlmICggIXRoaXMuZmV0Y2hlZFBhZ2VzLmhhcygwKSApIHtcbiAgICAgICAgdGhpcy5mZXRjaGVkUGFnZXMuYWRkKDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGFnZUZvckluZGV4KCBpbmRleDogbnVtYmVyICk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoIGluZGV4IC8gdGhpcy5wYWdlU2l6ZSApO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Q2FjaGVkRGF0YShza2lwOiBudW1iZXIpIHtcbiAgICB0aGlzLmNhY2hlZERhdGEuc2xpY2UoIHNraXAsIHRoaXMucGFnZVNpemUgKTtcbiAgICB0aGlzLmRhdGFTdHJlYW0ubmV4dCggdGhpcy5jYWNoZWREYXRhICk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRMb2FkRGF0YShza2lwOiBudW1iZXIpIHtcbiAgICB0aGlzLmxvYWRNb3JlRGF0YS5uZXh0KCB7IHNraXA6IHNraXAsIGxpbWl0OiB0aGlzLnBhZ2VTaXplICsgc2tpcCB9ICk7XG4gIH1cblxuICBwcml2YXRlIGZldGNoUGFnZSggcGFnZTogbnVtYmVyICkge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlO1xuICAgIGlmICggdGhpcy5mZXRjaGVkUGFnZXMuaGFzKCBwYWdlICkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYWRkUGFnZShwYWdlKTtcbiAgICBjb25zdCBza2lwID0gcGFnZSAqIHRoaXMucGFnZVNpemU7XG4gICAgIXRoaXMubGF6eU1vZGUgPyB0aGlzLmVtaXRDYWNoZWREYXRhKHNraXApIDogdGhpcy5lbWl0TG9hZERhdGEoc2tpcCk7XG4gIH1cblxufVxuIl19