truly-ui
Version:
Web Components for Desktop Applications.
110 lines (108 loc) • 14 kB
JavaScript
/*
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