UNPKG

@bi8/am-data-table

Version:

ng update @angular/cli --migrate-only --from=1.7.4 ng update @angular/core yarn add ng-packagr yarn add @angular/material yarn add core-js yarn add @angular/flex-layout yarn add lodash yarn add material-design-icons yarn add roboto-fontface yarn

189 lines 21.9 kB
import { BehaviorSubject } from "rxjs/BehaviorSubject"; import { DataSource } from "@angular/cdk/collections"; import 'rxjs/Rx'; export var Operation; (function (Operation) { Operation[Operation["gt"] = 0] = "gt"; Operation[Operation["lt"] = 1] = "lt"; Operation[Operation["gte"] = 2] = "gte"; Operation[Operation["lte"] = 3] = "lte"; Operation[Operation["eq"] = 4] = "eq"; Operation[Operation["ieq"] = 5] = "ieq"; Operation[Operation["neq"] = 6] = "neq"; Operation[Operation["ineq"] = 7] = "ineq"; Operation[Operation["like"] = 8] = "like"; Operation[Operation["ilike"] = 9] = "ilike"; // case insensitive like })(Operation || (Operation = {})); export var SortOrder; (function (SortOrder) { SortOrder[SortOrder["asc"] = 0] = "asc"; SortOrder[SortOrder["desc"] = 1] = "desc"; // Descending })(SortOrder || (SortOrder = {})); export function SelectionMapper(codeProperty, valueProperty, source$) { return source$.map((response) => { response.results.forEach((item, index) => { item.code = item[codeProperty]; item.value = item[valueProperty]; }); return response.results; }); } export function StringSelectionMapper(source$) { return source$.map((response) => { let values = []; response.results.forEach((item, index) => { values.push({ code: item, value: item }); }); return values; }); } export class FilterCriteriaUtils { constructor(ctx) { this.ctx = ctx; if (!ctx) { this.ctx = {}; } } getContext() { return this.ctx; } applyFilter(path, operation, value) { if (!value) { return; } let filter = { path: path, operation: operation, value: value }; if (!this.ctx.criteria) { this.ctx.criteria = []; } this.ctx.criteria.push(filter); return this; } format() { let result = {}; if (this.ctx.size) { result.size = this.ctx.size; } if (this.ctx.page) { result.page = this.ctx.page; } if (this.ctx.inclusive != undefined) { result.inclusive = this.ctx.inclusive; } if (this.ctx.sortField != undefined) { result.sortField = this.ctx.sortField; } switch (this.ctx.sortOrder) { case SortOrder.asc: result.sortOrder = 'asc'; break; case SortOrder.desc: result.sortOrder = 'desc'; break; } if (this.ctx.criteria && this.ctx.criteria.length > 0) { result.criteria = []; for (let filter of this.ctx.criteria) { let fc = { value: filter.value, path: filter.path }; switch (filter.operation) { case Operation.eq: fc.operation = '='; break; case Operation.gt: fc.operation = '>'; break; case Operation.gte: fc.operation = '>='; break; case Operation.ilike: fc.operation = 'ilike'; break; case Operation.like: fc.operation = 'like'; break; case Operation.lt: fc.operation = '<'; break; case Operation.lte: fc.operation = '<='; break; case Operation.ieq: fc.operation = ':'; break; case Operation.neq: fc.operation = '!='; break; case Operation.ineq: fc.operation = '!:'; break; } result.criteria.push(fc); } } return result; } } export class FunctionCriteriaLoader { constructor(loadFn) { this.loadFn = loadFn; } prepare(criteria) { return this.loadFn(criteria).map((response) => { return this.processResponse(response); }); } processResponse(response) { return { total: response.total, items: response.results }; } } export class CriteriaTableDB { constructor(loader, paginator) { this.loader = loader; this.paginator = paginator; this.dataSubject = new BehaviorSubject([]); this.items = []; this.lastCtx = {}; this.pageSize = 5; this.pageIndex = 0; this.totalSize = 0; this.dataSource = new CriteriaTableDS(this.dataSubject); this.paginator.page.subscribe((event) => { this.pageSize = event.pageSize; this.pageIndex = event.pageIndex; this.reload(this.lastCtx); }); } reload(ctx) { let criteria = ctx || {}; criteria.page = this.pageIndex; criteria.size = this.pageSize; this.lastCtx = criteria; this.loader.prepare(criteria).subscribe((result) => { this.items = result.items; this.totalSize = result.total; this.items = result.items; this.dataSubject.next(result.items); }); } } export class CriteriaTableDS extends DataSource { constructor(subject) { super(); this.subject = subject; } connect() { return this.subject.asObservable(); } disconnect() { } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1jcml0ZXJpYS5kcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BiaTgvYW0tZGF0YS10YWJsZS8iLCJzb3VyY2VzIjpbImFwcC9tb2R1bGVzL2FtLWRhdGEtdGFibGUvZ3JpZC1jcml0ZXJpYS5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFckQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRXBELE9BQU8sU0FBUyxDQUFDO0FBRWpCLE1BQU0sQ0FBTixJQUFZLFNBV1g7QUFYRCxXQUFZLFNBQVM7SUFDbkIscUNBQUUsQ0FBQTtJQUNGLHFDQUFFLENBQUE7SUFDRix1Q0FBRyxDQUFBO0lBQ0gsdUNBQUcsQ0FBQTtJQUNILHFDQUFFLENBQUE7SUFDRix1Q0FBRyxDQUFBO0lBQ0gsdUNBQUcsQ0FBQTtJQUNILHlDQUFJLENBQUE7SUFDSix5Q0FBSSxDQUFBO0lBQ0osMkNBQUssQ0FBQSxDQUFHLHdCQUF3QjtBQUNsQyxDQUFDLEVBWFcsU0FBUyxLQUFULFNBQVMsUUFXcEI7QUFFRCxNQUFNLENBQU4sSUFBWSxTQUdYO0FBSEQsV0FBWSxTQUFTO0lBQ25CLHVDQUFHLENBQUE7SUFDSCx5Q0FBSSxDQUFBLENBQUcsYUFBYTtBQUN0QixDQUFDLEVBSFcsU0FBUyxLQUFULFNBQVMsUUFHcEI7QUFpQkQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxZQUFvQixFQUFFLGFBQXFCLEVBQUUsT0FBMkI7SUFDdEcsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBYyxFQUFFLEVBQUU7UUFDcEMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFDLEVBQUU7WUFDdEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMs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QmVoYXZpb3JTdWJqZWN0fSBmcm9tIFwicnhqcy9CZWhhdmlvclN1YmplY3RcIjtcclxuaW1wb3J0IHtNYXRQYWdpbmF0b3J9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbFwiO1xyXG5pbXBvcnQge0RhdGFTb3VyY2V9IGZyb20gXCJAYW5ndWxhci9jZGsvY29sbGVjdGlvbnNcIjtcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tIFwicnhqcy9PYnNlcnZhYmxlXCI7XHJcbmltcG9ydCAncnhqcy9SeCc7XHJcblxyXG5leHBvcnQgZW51bSBPcGVyYXRpb24ge1xyXG4gIGd0LCAgICAgLy8gPiBHcmVhdGVyIFRoYW5cclxuICBsdCwgICAgIC8vID4gTG93ZXIgVGhhblxyXG4gIGd0ZSwgICAgLy8gPj0gR3JlYXRlciBvciBFcXVhbFxyXG4gIGx0ZSwgICAgLy8gPD0gTG93ZXIgb3IgRXF1YWxcclxuICBlcSwgICAgIC8vID1cclxuICBpZXEsICAgIC8vIDogY2FzZSBpbnNlbnNpdGl2ZSBlcXVhbCAoY2FuIG9ubHkgYmUgZG9uZSBvbiBzdHJpbmdzKVxyXG4gIG5lcSwgICAgLy8gIT0gbm90IGVxdWFsXHJcbiAgaW5lcSwgICAvLyAhOiBjYXNlIGluc2Vuc2l0aXZlIG5vdCBlcXVhbCAoY2FuIG9ubHkgYmUgZG9uZSBvbiBzdHJpbmdzKVxyXG4gIGxpa2UsICAgLy8gbGlrZVxyXG4gIGlsaWtlICAgLy8gY2FzZSBpbnNlbnNpdGl2ZSBsaWtlXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFNvcnRPcmRlciB7XHJcbiAgYXNjLCAgIC8vIEFzY2VuZGluZ1xyXG4gIGRlc2MgICAvLyBEZXNjZW5kaW5nXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoQ29udGV4dCB7XHJcbiAgc2l6ZT86IG51bWJlcjtcclxuICBwYWdlPzogbnVtYmVyO1xyXG4gIGluY2x1c2l2ZT86IGJvb2xlYW47XHJcbiAgc29ydEZpZWxkPzogc3RyaW5nO1xyXG4gIHNvcnRPcmRlcj86IFNvcnRPcmRlcjtcclxuICBjcml0ZXJpYT86IEZpbHRlckNyaXRlcmlhW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyQ3JpdGVyaWEge1xyXG4gIHBhdGg6IHN0cmluZztcclxuICBvcGVyYXRpb246IE9wZXJhdGlvbjtcclxuICB2YWx1ZTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gU2VsZWN0aW9uTWFwcGVyKGNvZGVQcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZVByb3BlcnR5OiBzdHJpbmcsIHNvdXJjZSQ6IE9ic2VydmFibGU8T2JqZWN0PikgOiBPYnNlcnZhYmxlPE9iamVjdD4ge1xyXG4gIHJldHVybiBzb3VyY2UkLm1hcCgocmVzcG9uc2UgOiBhbnkpID0+IHtcclxuICAgIHJlc3BvbnNlLnJlc3VsdHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpPT57XHJcbiAgICAgIGl0ZW0uY29kZSA9IGl0ZW1bY29kZVByb3BlcnR5XTtcclxuICAgICAgaXRlbS52YWx1ZSA9IGl0ZW1bdmFsdWVQcm9wZXJ0eV07XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXNwb25zZS5yZXN1bHRzO1xyXG4gIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gU3RyaW5nU2VsZWN0aW9uTWFwcGVyKHNvdXJjZSQ6IE9ic2VydmFibGU8T2JqZWN0PikgOiBPYnNlcnZhYmxlPE9iamVjdD4ge1xyXG4gIHJldHVybiBzb3VyY2UkLm1hcCgocmVzcG9uc2UgOiBhbnkpID0+IHtcclxuICAgIGxldCB2YWx1ZXMgPSBbXTtcclxuXHJcbiAgICByZXNwb25zZS5yZXN1bHRzLmZvckVhY2goKGl0ZW0sIGluZGV4KT0+e1xyXG4gICAgICB2YWx1ZXMucHVzaCh7IGNvZGU6IGl0ZW0sIHZhbHVlOiBpdGVtIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdmFsdWVzO1xyXG4gIH0pO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRmlsdGVyQ3JpdGVyaWFVdGlscyB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjdHg/OiBTZWFyY2hDb250ZXh0KXtcclxuICAgIGlmICghY3R4KXtcclxuICAgICAgdGhpcy5jdHggPSB7fTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbnRleHQoKSA6IFNlYXJjaENvbnRleHQge1xyXG4gICAgcmV0dXJuIHRoaXMuY3R4O1xyXG4gIH1cclxuXHJcbiAgYXBwbHlGaWx0ZXIocGF0aDogc3RyaW5nLCBvcGVyYXRpb246IE9wZXJhdGlvbiwgdmFsdWU6IGFueSkgOiBGaWx0ZXJDcml0ZXJpYVV0aWxzIHtcclxuICAgIGlmICghdmFsdWUpe1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZpbHRlcjogRmlsdGVyQ3JpdGVyaWEgPSB7XHJcbiAgICAgIHBhdGg6IHBhdGgsXHJcbiAgICAgIG9wZXJhdGlvbjogb3BlcmF0aW9uLFxyXG4gICAgICB2YWx1ZTogdmFsdWVcclxuICAgIH07XHJcblxyXG4gICAgaWYgKCF0aGlzLmN0eC5jcml0ZXJpYSl7XHJcbiAgICAgIHRoaXMuY3R4LmNyaXRlcmlhID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jdHguY3JpdGVyaWEucHVzaChmaWx0ZXIpO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBmb3JtYXQoKXtcclxuICAgIGxldCByZXN1bHQ6IGFueSA9IHt9O1xyXG4gICAgaWYgKHRoaXMuY3R4LnNpemUpIHtcclxuICAgICAgcmVzdWx0LnNpemUgPSB0aGlzLmN0eC5zaXplO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmN0eC5wYWdlKXtcclxuICAgICAgcmVzdWx0LnBhZ2UgPSB0aGlzLmN0eC5wYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmN0eC5pbmNsdXNpdmUgIT0gdW5kZWZpbmVkKXtcclxuICAgICAgcmVzdWx0LmluY2x1c2l2ZSA9IHRoaXMuY3R4LmluY2x1c2l2ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jdHguc29ydEZpZWxkICE9IHVuZGVmaW5lZCl7XHJcbiAgICAgIHJlc3VsdC5zb3J0RmllbGQgPSB0aGlzLmN0eC5zb3J0RmllbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLmN0eC5zb3J0T3JkZXIpe1xyXG4gICAgICBjYXNlIFNvcnRPcmRlci5hc2M6XHJcbiAgICAgICAgcmVzdWx0LnNvcnRPcmRlciA9ICdhc2MnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFNvcnRPcmRlci5kZXNjOlxyXG4gICAgICAgIHJlc3VsdC5zb3J0T3JkZXIgPSAnZGVzYyc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY3R4LmNyaXRlcmlhICYmIHRoaXMuY3R4LmNyaXRlcmlhLmxlbmd0aCA+IDApe1xyXG4gICAgICByZXN1bHQuY3JpdGVyaWEgPSBbXTtcclxuICAgICAgZm9yIChsZXQgZmlsdGVyIG9mIHRoaXMuY3R4LmNyaXRlcmlhKXtcclxuICAgICAgICBsZXQgZmM6IGFueSA9IHtcclxuICAgICAgICAgIHZhbHVlOiBmaWx0ZXIudmFsdWUsXHJcbiAgICAgICAgICBwYXRoOiBmaWx0ZXIucGF0aFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHN3aXRjaCAoZmlsdGVyLm9wZXJhdGlvbil7XHJcbiAgICAgICAgICBjYXNlIE9wZXJhdGlvbi5lcTpcclxuICAgICAgICAgICAgZmMub3BlcmF0aW9uID0gJz0nO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgT3BlcmF0aW9uLmd0OlxyXG4gICAgICAgICAgICBmYy5vcGVyYXRpb24gPSAnPic7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBPcGVyYXRpb24uZ3RlOlxyXG4gICAgICAgICAgICBmYy5vcGVyYXRpb24gPSAnPj0nO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgT3BlcmF0aW9uLmlsaWtlOlxyXG4gICAgICAgICAgICBmYy5vcGVyYXRpb24gPSAnaWxpa2UnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgT3BlcmF0aW9uLmxpa2U6XHJcbiAgICAgICAgICAgIGZjLm9wZXJhdGlvbiA9ICdsaWtlJztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIE9wZXJhdGlvbi5sdDpcclxuICAgICAgICAgICAgZmMub3BlcmF0aW9uID0gJzwnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgT3BlcmF0aW9uLmx0ZTpcclxuICAgICAgICAgICAgZmMub3BlcmF0aW9uID0gJzw9JztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIE9wZXJhdGlvbi5pZXE6XHJcbiAgICAgICAgICAgIGZjLm9wZXJhdGlvbiA9ICc6JztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIE9wZXJhdGlvbi5uZXE6XHJcbiAgICAgICAgICAgIGZjLm9wZXJhdGlvbiA9ICchPSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBPcGVyYXRpb24uaW5lcTpcclxuICAgICAgICAgICAgZmMub3BlcmF0aW9uID0gJyE6JztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXN1bHQuY3JpdGVyaWEucHVzaChmYyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3JpdGVyaWFTZWFyY2hTZXJ2aWNlIHtcclxuICBzZWFyY2goY3JpdGVyaWE6IGFueSkgOiBPYnNlcnZhYmxlPE9iamVjdD5cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDcml0ZXJpYUxvYWRGbiB7XHJcbiAgKGNyaXRlcmlhOiBhbnkpOiBPYnNlcnZhYmxlPE9iamVjdD47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3JpdGVyaWFMb2FkZXIge1xyXG4gIHByZXBhcmUoY3JpdGVyaWE6IGFueSkgOiBPYnNlcnZhYmxlPE9iamVjdD47XHJcbiAgcHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlOiBhbnkpIDogYW55O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25Dcml0ZXJpYUxvYWRlciBpbXBsZW1lbnRzIENyaXRlcmlhTG9hZGVyIHtcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbG9hZEZuOiBDcml0ZXJpYUxvYWRGbil7XHJcbiAgfVxyXG5cclxuICBwcmVwYXJlKGNyaXRlcmlhOiBhbnkpIDogT2JzZXJ2YWJsZTxPYmplY3Q+IHtcclxuICAgIHJldHVybiB0aGlzLmxvYWRGbihjcml0ZXJpYSkubWFwKChyZXNwb25zZSA6IGFueSk9PntcclxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKXtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHRvdGFsOiByZXNwb25zZS50b3RhbCxcclxuICAgICAgaXRlbXM6IHJlc3BvbnNlLnJlc3VsdHNcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDcml0ZXJpYVRhYmxlREIge1xyXG4gIGRhdGFTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xyXG4gIGRhdGFTb3VyY2U6IENyaXRlcmlhVGFibGVEUyB8IG51bGw7XHJcbiAgaXRlbXM6IGFueSA9IFtdO1xyXG4gIGxhc3RDdHg6IGFueSA9IHt9O1xyXG5cclxuICBwYWdlU2l6ZTogbnVtYmVyID0gNTtcclxuICBwYWdlSW5kZXg6IG51bWJlciA9IDA7XHJcbiAgdG90YWxTaXplOiBudW1iZXIgPSAwO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvYWRlciA6IENyaXRlcmlhTG9hZGVyLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3Ipe1xyXG5cclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBDcml0ZXJpYVRhYmxlRFModGhpcy5kYXRhU3ViamVjdCk7XHJcbiAgICB0aGlzLnBhZ2luYXRvci5wYWdlLnN1YnNjcmliZSgoZXZlbnQpPT57XHJcbiAgICAgIHRoaXMucGFnZVNpemUgPSBldmVudC5wYWdlU2l6ZTtcclxuICAgICAgdGhpcy5wYWdlSW5kZXggPSBldmVudC5wYWdlSW5kZXg7XHJcbiAgICAgIHRoaXMucmVsb2FkKHRoaXMubGFzdEN0eCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlbG9hZChjdHg/OiBhbnkpe1xyXG4gICAgbGV0IGNyaXRlcmlhID0gY3R4IHx8IHt9O1xyXG4gICAgY3JpdGVyaWEucGFnZSA9IHRoaXMucGFnZUluZGV4O1xyXG4gICAgY3JpdGVyaWEuc2l6ZSA9IHRoaXMucGFnZVNpemU7XHJcbiAgICB0aGlzLmxhc3RDdHggPSBjcml0ZXJpYTtcclxuXHJcbiAgICB0aGlzLmxvYWRlci5wcmVwYXJlKGNyaXRlcmlhKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KT0+e1xyXG4gICAgICB0aGlzLml0ZW1zID0gcmVzdWx0Lml0ZW1zO1xyXG4gICAgICB0aGlzLnRvdGFsU2l6ZSA9IHJlc3VsdC50b3RhbDtcclxuICAgICAgdGhpcy5pdGVtcyA9IHJlc3VsdC5pdGVtcztcclxuICAgICAgdGhpcy5kYXRhU3ViamVjdC5uZXh0KHJlc3VsdC5pdGVtcyk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDcml0ZXJpYVRhYmxlRFMgZXh0ZW5kcyBEYXRhU291cmNlPGFueVtdPiB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8YW55W10+KSB7XHJcbiAgICBzdXBlciAoKTtcclxuICB9XHJcblxyXG4gIGNvbm5lY3QoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIGRpc2Nvbm5lY3QoKTogdm9pZCB7XHJcbiAgfVxyXG59XHJcbiJdfQ==