e5core-angular-ui
Version:
e5 Anywhere Angular UI
276 lines • 21.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Injectable } from '@angular/core';
import { UiDocumentService } from 'e5core-angular-services';
import { DataSourceColumnStatus } from './data-source-column';
import { map } from 'rxjs/operators';
import { of } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "e5core-angular-services";
var DocumentDataSourceService = /** @class */ (function () {
function DocumentDataSourceService(uiDocumentService) {
this.uiDocumentService = uiDocumentService;
this.folderName = "";
this.fieldsToShow = null;
this.searchOptions = {};
}
/**
* @return {?}
*/
DocumentDataSourceService.prototype.defaultOptions = /**
* @return {?}
*/
function () {
return (this.searchOptions);
};
/**
* @param {?} options
* @return {?}
*/
DocumentDataSourceService.prototype.setDefaultOptions = /**
* @param {?} options
* @return {?}
*/
function (options) {
this.searchOptions = tslib_1.__assign({}, options); // clone
};
/**
* @param {?} libraryId
* @param {?} folderName
* @param {?} includeSelect
* @param {?} fieldsToShow
* @param {?} searchText
* @return {?}
*/
DocumentDataSourceService.prototype.setLibrary = /**
* @param {?} libraryId
* @param {?} folderName
* @param {?} includeSelect
* @param {?} fieldsToShow
* @param {?} searchText
* @return {?}
*/
function (libraryId, folderName, includeSelect, fieldsToShow, searchText) {
this.libraryId = libraryId;
this.folderName = folderName;
this.includeSelect = includeSelect;
this.fieldsToShow = fieldsToShow;
this.searchText = searchText;
return (this);
};
/**
* @return {?}
*/
DocumentDataSourceService.prototype.columns = /**
* @return {?}
*/
function () {
/** @type {?} */
var columns = this.fieldsToShow.filter(function (f) { return f.display; }).map(function (sf) { return (/** @type {?} */ ({
code: sf.fieldCode,
label: sf.name,
type: "Input",
status: DataSourceColumnStatus.Selected
})); });
columns = this.addOptionalColumns(columns);
return of(columns);
};
/**
* @private
* @param {?} columns
* @return {?}
*/
DocumentDataSourceService.prototype.addOptionalColumns = /**
* @private
* @param {?} columns
* @return {?}
*/
function (columns) {
if (this.includeSelect)
// Add to start
columns.unshift((/** @type {?} */ ({
label: "",
code: "ActionSelect",
type: "ActionSelect",
status: DataSourceColumnStatus.Selected
})));
return (columns);
};
/**
* @param {?} page
* @param {?} pageSize
* @param {?} optionsIn
* @return {?}
*/
DocumentDataSourceService.prototype.read = /**
* @param {?} page
* @param {?} pageSize
* @param {?} optionsIn
* @return {?}
*/
function (page, pageSize, optionsIn) {
var _this = this;
/** @type {?} */
var options = tslib_1.__assign({}, this.searchOptions, optionsIn);
/** @type {?} */
var returnFields = "";
if (this.fieldsToShow && typeof (this.fieldsToShow) !== 'undefined') {
//var fieldsToRetrieve = fieldsToShow.reduce((fid, fs) => [ ...fid, ...fs.fieldId ], <string[]> []);
//.join(",")
/** @type {?} */
var fieldsToRetrieve = this.fieldsToShow.filter(function (f) { return f.display; }).reduce(function (a, b) { return [a, b.fieldId]; }, []).toString();
if (fieldsToRetrieve.length > 0)
fieldsToRetrieve = fieldsToRetrieve.substring(1);
returnFields = fieldsToRetrieve;
}
/** @type {?} */
var orderBy = (options && options.orderBy) ? options.orderBy : "";
pageSize = (pageSize) ? pageSize : 10;
//return this.uiDocumentService.getAll(this.libraryId, returnFields, page, pageSize, "", this.searchText, orderBy)
return this.uiDocumentService.getAll(this.libraryId, {
returnFields: returnFields,
page: page,
pageSize: pageSize,
orderBy: "",
searchBy: this.searchText,
filter: "",
folderName: ""
})
.pipe(map(function (results) {
return {
total: results.length,
data: _this.mapResults(results)
};
}));
};
/**
* @private
* @param {?} result
* @return {?}
*/
DocumentDataSourceService.prototype.mapResults = /**
* @private
* @param {?} result
* @return {?}
*/
function (result) {
/** @type {?} */
var results = [];
if (result && result.length > 0) {
for (var r = 0; r < result.length; r++) {
/** @type {?} */
var dataRow = result[r];
/** @type {?} */
var objectRow = {};
for (var c = 0; c < this.fieldsToShow.length; c++) {
/** @type {?} */
var field = this.fieldsToShow[c];
objectRow[field.fieldCode] = dataRow.fields[field.fieldCode];
}
results[results.length] = objectRow;
}
}
return results;
};
// In order to use the foundation service we need to map the DataSourceQuery into
// the underlying foundation query
// {
// "filters": [
// {
// "field": "string",
// "operator": "string",
// "value": "string"
// }
// ],
// "logic": "string"
// }
// In order to use the foundation service we need to map the DataSourceQuery into
// the underlying foundation query
// {
// "filters": [
// {
// "field": "string",
// "operator": "string",
// "value": "string"
// }
// ],
// "logic": "string"
// }
/**
* @private
* @param {?} query
* @return {?}
*/
DocumentDataSourceService.prototype.mapQueryToFilterBy =
// In order to use the foundation service we need to map the DataSourceQuery into
// the underlying foundation query
// {
// "filters": [
// {
// "field": "string",
// "operator": "string",
// "value": "string"
// }
// ],
// "logic": "string"
// }
/**
* @private
* @param {?} query
* @return {?}
*/
function (query) {
/** @type {?} */
var filterBy = {};
if (query && query.Expressions && query.Expressions.length > 0) {
/** @type {?} */
var filters = query.Expressions
.filter(function (e) { return e.Value; })
.map(function (e) {
return {
field: e.Field,
value: e.Value
};
});
filterBy = {
filters: filters
};
}
return (filterBy);
};
DocumentDataSourceService.decorators = [
{ type: Injectable, args: [{
providedIn: null //'root'
},] }
];
/** @nocollapse */
DocumentDataSourceService.ctorParameters = function () { return [
{ type: UiDocumentService }
]; };
/** @nocollapse */ DocumentDataSourceService.ngInjectableDef = i0.defineInjectable({ factory: function DocumentDataSourceService_Factory() { return new DocumentDataSourceService(i0.inject(i1.UiDocumentService)); }, token: DocumentDataSourceService, providedIn: null });
return DocumentDataSourceService;
}());
export { DocumentDataSourceService };
if (false) {
/** @type {?} */
DocumentDataSourceService.prototype.libraryId;
/** @type {?} */
DocumentDataSourceService.prototype.folderName;
/** @type {?} */
DocumentDataSourceService.prototype.includeSelect;
/** @type {?} */
DocumentDataSourceService.prototype.searchText;
/** @type {?} */
DocumentDataSourceService.prototype.fieldsToShow;
/** @type {?} */
DocumentDataSourceService.prototype.searchOptions;
/**
* @type {?}
* @private
*/
DocumentDataSourceService.prototype.uiDocumentService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtZGF0YS1zb3VyY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2U1Y29yZS1hbmd1bGFyLXVpLyIsInNvdXJjZXMiOlsibGliL2RhdGFzb3VyY2UvZG9jdW1lbnQtZGF0YS1zb3VyY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJNUQsT0FBTyxFQUFvQixzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR2hGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFFMUI7SUFZQyxtQ0FBb0IsaUJBQW9DO1FBQXBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFOeEQsZUFBVSxHQUFZLEVBQUUsQ0FBQztRQUd4QixpQkFBWSxHQUE0QixJQUFJLENBQUM7UUFDOUMsa0JBQWEsR0FBc0IsRUFBRSxDQUFFO0lBR3ZDLENBQUM7Ozs7SUFFTSxrREFBYzs7O0lBQXJCO1FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBRTtJQUM5QixDQUFDOzs7OztJQUVNLHFEQUFpQjs7OztJQUF4QixVQUF5QixPQUF5QjtRQUNqRCxJQUFJLENBQUMsYUFBYSx3QkFBTyxPQUFPLENBQUMsQ0FBRSxDQUFDLFFBQVE7SUFDN0MsQ0FBQzs7Ozs7Ozs7O0lBRU0sOENBQVU7Ozs7Ozs7O0lBQWpCLFVBQWtCLFNBQWtCLEVBQUUsVUFBbUIsRUFBRSxhQUF1QixFQUFFLFlBQW9DLEVBQUUsVUFBa0I7UUFDekksSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFB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Ozs7Ozs7Ozs7Ozs7OztJQUExQixVQUEyQixLQUFxQjs7WUFDM0MsUUFBUSxHQUFHLEVBQUU7UUFDakIsSUFBRyxLQUFLLElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7O2dCQUMxRCxPQUFPLEdBQUcsS0FBSyxDQUFDLFdBQVc7aUJBQzdCLE1BQU0sQ0FBRSxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxLQUFLLEVBQVAsQ0FBTyxDQUFFO2lCQUN0QixHQUFHLENBQUUsVUFBQSxDQUFDO2dCQUNOLE9BQU87b0JBQ04sS0FBSyxFQUFHLENBQUMsQ0FBQyxLQUFLO29CQUNmLEtBQUssRUFBRyxDQUFDLENBQUMsS0FBSztpQkFDZixDQUFBO1lBQ0YsQ0FBQyxDQUFDO1lBQ0gsUUFBUSxHQUFHO2dCQUNWLE9BQU8sRUFBRyxPQUFPO2FBQ2pCLENBQUE7U0FDRDtRQUNELE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNsQixDQUFDOztnQkEzSUQsVUFBVSxTQUFDO29CQUNYLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUTtpQkFDekI7Ozs7Z0JBYlEsaUJBQWlCOzs7b0NBRDFCO0NBd0pDLEFBNUlELElBNElDO1NBeklZLHlCQUF5Qjs7O0lBRXBDLDhDQUFtQjs7SUFDcEIsK0NBQXlCOztJQUN6QixrREFBd0I7O0lBQ3hCLCtDQUFvQjs7SUFDbkIsaURBQTZDOztJQUM5QyxrREFBdUM7Ozs7O0lBRTNCLHNEQUE0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVpRG9jdW1lbnRTZXJ2aWNlIH0gZnJvbSAnZTVjb3JlLWFuZ3VsYXItc2VydmljZXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSURhdGFTb3VyY2UgfSBmcm9tICcuL2RhdGEtc291cmNlJztcbmltcG9ydCB7IERhdGFTb3VyY2VPcHRpb25zIH0gZnJvbSAnLi9kYXRhLXNvdXJjZS1vcHRpb25zJztcbmltcG9ydCB7IERhdGFTb3VyY2VDb2x1bW4sIERhdGFTb3VyY2VDb2x1bW5TdGF0dXMgfSBmcm9tICcuL2RhdGEtc291cmNlLWNvbHVtbic7XG5pbXBvcnQgeyBEYXRhU291cmNlUXVlcnkgfSBmcm9tICcuL2RhdGEtc291cmNlLXF1ZXJ5JztcbmltcG9ydCB7IERhdGFTb3VyY2VSZXN1bHRzIH0gZnJvbSAnLi9kYXRhLXNvdXJjZS1yZXN1bHRzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZpZWxkRGVmaW5pdGlvbk1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2ZpZWxkLWRlZmluaXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgb2YgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoe1xuXHRwcm92aWRlZEluOiBudWxsIC8vJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIERvY3VtZW50RGF0YVNvdXJjZVNlcnZpY2UgaW1wbGVtZW50cyBJRGF0YVNvdXJjZSB7XG5cbiAgbGlicmFyeUlkIDogbnVtYmVyO1xuXHRmb2xkZXJOYW1lIDogc3RyaW5nID0gXCJcIjtcblx0aW5jbHVkZVNlbGVjdCA6IGJvb2xlYW47XG5cdHNlYXJjaFRleHQgOiBzdHJpbmc7XG4gIGZpZWxkc1RvU2hvdyA6IEZpZWxkRGVmaW5pdGlvbk1vZGVsW10gPSBudWxsO1xuXHRzZWFyY2hPcHRpb25zOiBEYXRhU291cmNlT3B0aW9ucyA9IHt9IDtcblxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIHVpRG9jdW1lbnRTZXJ2aWNlOiBVaURvY3VtZW50U2VydmljZSkge1xuXHR9XG5cblx0cHVibGljIGRlZmF1bHRPcHRpb25zKCk6IERhdGFTb3VyY2VPcHRpb25zIHtcblx0XHRyZXR1cm4gKHRoaXMuc2VhcmNoT3B0aW9ucykgO1xuXHR9XG5cblx0cHVibGljIHNldERlZmF1bHRPcHRpb25zKG9wdGlvbnM6RGF0YVNvdXJjZU9wdGlvbnMpIHtcblx0XHR0aGlzLnNlYXJjaE9wdGlvbnMgPSB7Li4ub3B0aW9uc30gOyAvLyBjbG9uZVxuXHR9XG5cblx0cHVibGljIHNldExpYnJhcnkobGlicmFyeUlkIDogbnVtYmVyLCBmb2xkZXJOYW1lIDogc3RyaW5nLCBpbmNsdWRlU2VsZWN0IDogYm9vbGVhbiwgZmllbGRzVG9TaG93OiBGaWVsZERlZmluaXRpb25Nb2RlbFtdLCBzZWFyY2hUZXh0OiBzdHJpbmcpOiBEb2N1bWVudERhdGFTb3VyY2VTZXJ2aWNlIHtcbiAgICB0aGlzLmxpYnJhcnlJZCA9IGxpYnJhcnlJZDtcblx0XHR0aGlzLmZvbGRlck5hbWUgPSBmb2xkZXJOYW1lO1xuXHRcdHRoaXMuaW5jbHVkZVNlbGVjdCA9IGluY2x1ZGVTZWxlY3Q7XG5cdFx0dGhpcy5maWVsZHNUb1Nob3cgPSBmaWVsZHNUb1Nob3c7XG5cdFx0dGhpcy5zZWFyY2hUZXh0ID0gc2VhcmNoVGV4dDtcblx0XHRyZXR1cm4gKHRoaXMpXG5cdH1cblxuXHRjb2x1bW5zKCk6IE9ic2VydmFibGU8RGF0YVNvdXJjZUNvbHVtbltdPiB7XG5cdFx0bGV0IGNvbHVtbnMgPSB0aGlzLmZpZWxkc1RvU2hvdy5maWx0ZXIoZiA9PiBmLmRpc3BsYXkpLm1hcDxEYXRhU291cmNlQ29sdW1uPihzZiA9PiA8RGF0YVNvdXJjZUNvbHVtbj57XG5cdFx0XHRjb2RlOiBzZi5maWVsZENvZGUsXG5cdFx0XHRsYWJlbDogc2YubmFtZSxcblx0XHRcdHR5cGU6IFwiSW5wdXRcIixcblx0XHRcdHN0YXR1czogRGF0YVNvdXJjZUNvbHVtblN0YXR1cy5TZWxlY3RlZFxuXHRcdH0pO1xuXHRcdGNvbHVtbnMgPSB0aGlzLmFkZE9wdGlvbmFsQ29sdW1ucyhjb2x1bW5zKTtcblx0XHRyZXR1cm4gb2YoY29sdW1ucyk7XG5cdH1cblxuXHRwcml2YXRlIGFkZE9wdGlvbmFsQ29sdW1ucyhjb2x1bW5zOkRhdGFTb3VyY2VDb2x1bW5bXSk6IERhdGFTb3VyY2VDb2x1bW5bXSB7XG5cdFx0aWYodGhpcy5pbmNsdWRlU2VsZWN0KVxuXHRcdFx0Ly8gQWRkIHRvIHN0YXJ0XG5cdFx0XHRjb2x1bW5zLnVuc2hpZnQoPERhdGFTb3VyY2VDb2x1bW4+e1xuXHRcdFx0XHRsYWJlbDogXCJcIixcblx0XHRcdFx0Y29kZTogXCJBY3Rpb25TZWxlY3RcIixcblx0XHRcdFx0dHlwZTogXCJBY3Rpb25TZWxlY3RcIixcblx0XHRcdFx0c3RhdHVzOiBEYXRhU291cmNlQ29sdW1uU3RhdHVzLlNlbGVjdGVkXG5cdFx0XHR9KTtcblx0XHRyZXR1cm4gKGNvbHVtbnMpIDtcblx0fVxuXG5cdHB1YmxpYyByZWFkKHBhZ2U6IG51bWJlciwgcGFnZVNpemU6IG51bWJlciwgb3B0aW9uc0luOiBEYXRhU291cmNlT3B0aW9ucyk6IE9ic2VydmFibGU8RGF0YVNvdXJjZVJlc3VsdHM+IHtcblx0XHRsZXQgb3B0aW9uczogRGF0YVNvdXJjZU9wdGlvbnMgPSB7XG5cdFx0XHQuLi50aGlzLnNlYXJjaE9wdGlvbnMsXG5cdFx0XHQuLi5vcHRpb25zSW5cblx0XHR9XG5cdFx0XG5cdFx0dmFyIHJldHVybkZpZWxkcyA9IFwiXCI7XG4gICAgaWYgKHRoaXMuZmllbGRzVG9TaG93ICYmIHR5cGVvZih0aGlzLmZpZWxkc1RvU2hvdykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvL3ZhciBmaWVsZHNUb1JldHJpZXZlID0gZmllbGRzVG9TaG93LnJlZHVjZSgoZmlkLCBmcykgPT4gWyAuLi5maWQsIC4uLmZzLmZpZWxkSWQgXSwgPHN0cmluZ1tdPiBbXSk7XG4gICAgICAvLy5qb2luKFwiLFwiKVxuICAgICAgdmFyIGZpZWxkc1RvUmV0cmlldmUgPSB0aGlzLmZpZWxkc1RvU2hvdy5maWx0ZXIoZiA9PiBmLmRpc3BsYXkpLnJlZHVjZShmdW5jdGlvbihhLCBiKSB7cmV0dXJuIFthLGIuZmllbGRJZF19LCBbXSkudG9TdHJpbmcoKTtcbiAgICAgIGlmIChmaWVsZHNUb1JldHJpZXZlLmxlbmd0aD4gMClcbiAgICAgICAgZmllbGRzVG9SZXRyaWV2ZSA9IGZpZWxkc1RvUmV0cmlldmUuc3Vic3RyaW5nKDEpO1xuICAgICAgcmV0dXJuRmllbGRzID0gZmllbGRzVG9SZXRyaWV2ZTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyQnkgPSAob3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyQnkpID8gb3B0aW9ucy5vcmRlckJ5IDogXCJcIjtcblx0XHRcblx0XHRwYWdlU2l6ZSA9IChwYWdlU2l6ZSkgPyBwYWdlU2l6ZSA6IDEwXG5cblx0XHQvL3JldHVybiB0aGlzLnVpRG9jdW1lbnRTZXJ2aWNlLmdldEFsbCh0aGlzLmxpYnJhcnlJZCwgcmV0dXJuRmllbGRzLCBwYWdlLCBwYWdlU2l6ZSwgXCJcIiwgdGhpcy5zZWFyY2hUZXh0LCBvcmRlckJ5KVxuXHRcdHJldHVybiB0aGlzLnVpRG9jdW1lbnRTZXJ2aWNlLmdldEFsbCh0aGlzLmxpYnJhcnlJZCwgeyBcblx0XHRcdHJldHVybkZpZWxkczogcmV0dXJuRmllbGRzLCBcblx0XHRcdHBhZ2U6IHBhZ2UsIFxuXHRcdFx0cGFnZVNpemU6cGFnZVNpemUsIFxuXHRcdFx0b3JkZXJCeTpcIlwiLCBcblx0XHRcdHNlYXJjaEJ5OnRoaXMuc2VhcmNoVGV4dCwgXG5cdFx0XHRmaWx0ZXI6IFwiXCIsXG5cdFx0XHRmb2xkZXJOYW1lOiBcIlwiXG5cdFx0fSlcblx0XHQucGlwZTxEYXRhU291cmNlUmVzdWx0cz4oXG5cdFx0XHRtYXAocmVzdWx0cyA9PiB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0dG90YWw6IHJlc3VsdHMubGVuZ3RoLFxuXHRcdFx0XHRcdGRhdGE6IHRoaXMubWFwUmVzdWx0cyhyZXN1bHRzKVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuICBwcml2YXRlIG1hcFJlc3VsdHMocmVzdWx0OiBhbnkpOiBhbnlbXSB7XG4gICAgbGV0IHJlc3VsdHM6IGFueVtdID0gW107XG5cbiAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKHZhciByOiBudW1iZXIgPSAwOyByIDwgcmVzdWx0Lmxlbmd0aDsgcisrKSB7XG4gICAgICAgIGxldCBkYXRhUm93OiBhbnkgPSByZXN1bHRbcl07XG4gICAgICAgIGxldCBvYmplY3RSb3c6IGFueSA9IHt9O1xuICAgICAgICBmb3IgKHZhciBjOiBudW1iZXIgPSAwOyBjIDwgdGhpcy5maWVsZHNUb1Nob3cubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICBsZXQgZmllbGQgPSB0aGlzLmZpZWxkc1RvU2hvd1tjXTtcbiAgICAgICAgICBvYmplY3RSb3dbZmllbGQuZmllbGRDb2RlXSA9IGRhdGFSb3cuZmllbGRzW2ZpZWxkLmZpZWxkQ29kZV07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0c1tyZXN1bHRzLmxlbmd0aF0gPSBvYmplY3RSb3c7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzXG4gIH1cblxuXHQvLyBJbiBvcmRlciB0byB1c2UgdGhlIGZvdW5kYXRpb24gc2VydmljZSB3ZSBuZWVkIHRvIG1hcCB0aGUgRGF0YVNvdXJjZVF1ZXJ5IGludG8gXG5cdC8vXHR0aGUgdW5kZXJseWluZyBmb3VuZGF0aW9uIHF1ZXJ5XG5cdC8vIFx0e1xuXHQvLyBcdFx0XCJmaWx0ZXJzXCI6IFtcblx0Ly8gXHQgIFx0XHR7XG5cdC8vIFx0XHRcdFx0XCJmaWVsZFwiOiBcInN0cmluZ1wiLFxuXHQvLyBcdFx0XHRcdFwib3BlcmF0b3JcIjogXCJzdHJpbmdcIixcblx0Ly8gXHRcdFx0XHRcInZhbHVlXCI6IFwic3RyaW5nXCJcblx0Ly8gXHQgIFx0XHR9XG5cdC8vIFx0XHRdLFxuXHQvLyBcdFx0XCJsb2dpY1wiOiBcInN0cmluZ1wiXG5cdC8vIFx0fVxuXHRwcml2YXRlIG1hcFF1ZXJ5VG9GaWx0ZXJCeShxdWVyeTpEYXRhU291cmNlUXVlcnkpOiBhbnkge1xuXHRcdGxldCBmaWx0ZXJCeSA9IHt9IDtcblx0XHRpZihxdWVyeSAmJiBxdWVyeS5FeHByZXNzaW9ucyAmJiBxdWVyeS5FeHByZXNzaW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRsZXQgZmlsdGVycyA9IHF1ZXJ5LkV4cHJlc3Npb25zXG5cdFx0XHRcdC5maWx0ZXIoIGUgPT4gZS5WYWx1ZSApXG5cdFx0XHRcdC5tYXAoIGUgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRmaWVsZCA6IGUuRmllbGQsXG5cdFx0XHRcdFx0XHR2YWx1ZSA6IGUuVmFsdWVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pIDtcblx0XHRcdGZpbHRlckJ5ID0ge1xuXHRcdFx0XHRmaWx0ZXJzIDogZmlsdGVyc1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gKGZpbHRlckJ5KVxuXHR9XG59XG4iXX0=