@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
JavaScript
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==