UNPKG

e5core-angular-ui

Version:

e5 Anywhere Angular UI

374 lines 37.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, Input, EventEmitter, Output } from '@angular/core'; import { ListSearchService, TaxonomyFieldDefinitionService } from 'e5core-angular-services'; import { TaxonomyCategory2Service } from 'e5core-angular-services'; import { UiStyleService } from '../../services/ui-style.service'; import { CategorizationPopulationMode } from "../../enums/categorization-population-mode"; var E5coreUiCategorizationComponent = /** @class */ (function () { function E5coreUiCategorizationComponent(style, listService, fieldDefinitonServices, category2Service) { this.style = style; this.listService = listService; this.fieldDefinitonServices = fieldDefinitonServices; this.category2Service = category2Service; this.CATEGORY1_ID = 'Category1_Id'; this.CATEGORY2_ID = 'Category2_Id'; this.CATEGORY3_ID = 'Category3_Id'; this.populationMode = CategorizationPopulationMode.Default; this.categorizationChange = new EventEmitter(); this.defaultComplete = new EventEmitter(); // Child inputs this.cat1List = []; this.cat2List = []; this.cat3List = []; this.cat123 = [0, 0, 0]; this.catLabels = ['Business Area.', 'Product.', 'Category.']; // Locals this.lastCat123 = [0, 0, 0]; } Object.defineProperty(E5coreUiCategorizationComponent.prototype, "categorization", { set: /** * @param {?} cat123 * @return {?} */ function (cat123) { this.SetCategorisationLists(cat123); }, enumerable: true, configurable: true }); /** * @return {?} */ E5coreUiCategorizationComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.InitialiseCategorisationLists(this.cat123); this.applyLabels(); }; /** * @return {?} */ E5coreUiCategorizationComponent.prototype.applyLabels = /** * @return {?} */ function () { var _this = this; if (this.labels && this.labels[0]) { this.catLabels[0] = this.labels[0]; } else { this.fieldDefinitonServices.get('Category1_Id').subscribe(function (fd) { return _this.catLabels[0] = fd.label; }); } if (this.labels && this.labels[1]) { this.catLabels[1] = this.labels[1]; } else { this.fieldDefinitonServices.get('Category2_Id').subscribe(function (fd) { return _this.catLabels[1] = fd.label; }); } if (this.labels && this.labels[2]) { this.catLabels[2] = this.labels[2]; } else { this.fieldDefinitonServices.get('Category3_Id').subscribe(function (fd) { return _this.catLabels[2] = fd.label; }); } }; /** * @param {?} $event * @return {?} */ E5coreUiCategorizationComponent.prototype.onCategoryChange = /** * @param {?} $event * @return {?} */ function ($event) { var _this = this; if (this.cat123[0] !== this.lastCat123[0]) { // Load new Cat 2, reset cat 3 this.listService.search(this.CATEGORY2_ID, { parentListItemId: this.cat123[0] }).subscribe(function (cat2List) { _this.cat2List = cat2List; }); this.lastCat123 = [this.cat123[0], undefined, undefined]; this.cat123[1] = this.cat123[2] = undefined; this.cat2List = this.cat3List = []; $event.category2Id = $event.category3Id = 0; } if (this.cat123[1] !== this.lastCat123[1]) { // Load new Cat 3 this.listService.search(this.CATEGORY3_ID, { parentListItemId: this.cat123[1] }).subscribe(function (cat3List) { _this.cat3List = cat3List; }); this.lastCat123 = [this.cat123[0], this.cat123[1], undefined]; this.cat123[2] = undefined; this.cat3List = []; } this.EmitCategorizationChangeEvent($event); }; /** * @private * @param {?} cat123 * @return {?} */ E5coreUiCategorizationComponent.prototype.loadCategorization1 = /** * @private * @param {?} cat123 * @return {?} */ function (cat123) { var _this = this; this.lastCat123 = tslib_1.__spread(cat123); if (cat123 && cat123.length >= 1 && +(cat123[0]) !== 0) { // Load the Category 1 and select it this.listService.search(this.CATEGORY1_ID, {}).subscribe(function (catList) { /** @type {?} */ var cat = catList.find(function (c) { return +c.id === cat123[0]; }); if (cat) { _this.cat1List = catList; _this.cat123 = [cat123[0], 0, 0]; _this.loadCategorization2(cat123, cat123[0]); } else { _this.cat1List = _this.cat2List = _this.cat3List = []; _this.cat123 = [0, 0, 0]; } }); } }; /** * @private * @param {?} cat123 * @param {?} parentId * @return {?} */ E5coreUiCategorizationComponent.prototype.loadCategorization2 = /** * @private * @param {?} cat123 * @param {?} parentId * @return {?} */ function (cat123, parentId) { var _this = this; if (cat123 && cat123.length >= 2 && +(cat123[1]) !== 0) { // Load the Category 2 and select it this.listService.search(this.CATEGORY2_ID, { parentListItemId: parentId }).subscribe(function (catList) { /** @type {?} */ var cat = catList.find(function (c) { return +c.id === cat123[1]; }); _this.cat2List = catList; if (cat) { _this.cat123 = [cat123[0], cat123[1], 0]; _this.loadCategorization3(cat123, cat123[1]); } else { _this.cat3List = []; _this.cat123 = [cat123[0], 0, 0]; } }); } }; /** * @private * @param {?} cat123 * @param {?} parentId * @return {?} */ E5coreUiCategorizationComponent.prototype.loadCategorization3 = /** * @private * @param {?} cat123 * @param {?} parentId * @return {?} */ function (cat123, parentId) { var _this = this; if (cat123 && cat123.length >= 3 && +(cat123[2]) !== 0) { // Load the Category 3 and select it this.listService.search(this.CATEGORY3_ID, { parentListItemId: parentId }).subscribe(function (catList) { /** @type {?} */ var cat = catList.find(function (c) { return +c.id === cat123[2]; }); _this.cat3List = catList; if (cat) { _this.cat123 = [cat123[0], cat123[1], cat123[2]]; } else { _this.cat123 = [cat123[0], cat123[1], 0]; } }); } }; /** * @private * @param {?} cat123 * @param {?} event * @return {?} */ E5coreUiCategorizationComponent.prototype.getCategory1 = /** * @private * @param {?} cat123 * @param {?} event * @return {?} */ function (cat123, event) { var _this = this; // Get the Category1 Id using the Category2 this.category2Service.get(cat123[1], 0).subscribe(function (cat) { if (cat) { _this.cat123 = [cat.category1Id, cat123[1], cat123[2]]; } else { _this.cat123 = [cat123[0], cat123[1], cat123[2]]; } _this.lastCat123 = tslib_1.__spread(_this.cat123); event.category1Id = cat.category1Id; _this.categorizationChange.emit(event); }); }; /** * @private * @param {?} cat123 * @return {?} */ E5coreUiCategorizationComponent.prototype.InitialiseCategorisationLists = /** * @private * @param {?} cat123 * @return {?} */ function (cat123) { var _this = this; switch (this.populationMode) { case CategorizationPopulationMode.PopulateAllLevel2: this.hideToLevel = 1; this.cat123[0] = 0; this.lastCat123 = tslib_1.__spread(cat123); this.listService.search(this.CATEGORY2_ID).subscribe(function (list) { _this.cat2List = list; }); break; case CategorizationPopulationMode.Default: this.listService.search(this.CATEGORY1_ID).subscribe(function (list) { _this.cat1List = list; }); break; } }; /** * @private * @param {?} cat123 * @return {?} */ E5coreUiCategorizationComponent.prototype.SetCategorisationLists = /** * @private * @param {?} cat123 * @return {?} */ function (cat123) { switch (this.populationMode) { case CategorizationPopulationMode.PopulateAllLevel2: this.loadCategorization2(cat123, 0); break; case CategorizationPopulationMode.Default: this.loadCategorization1(cat123); break; } }; /** * @private * @param {?} event * @return {?} */ E5coreUiCategorizationComponent.prototype.EmitCategorizationChangeEvent = /** * @private * @param {?} event * @return {?} */ function (event) { switch (this.populationMode) { case CategorizationPopulationMode.PopulateAllLevel2: if (this.cat123[2] !== this.lastCat123[2]) { this.getCategory1(this.cat123, event); } break; case CategorizationPopulationMode.Default: if (this.cat123[2] !== this.lastCat123[2] && this.cat123[2] !== 0) { this.categorizationChange.emit(event); } break; } }; E5coreUiCategorizationComponent.decorators = [ { type: Component, args: [{ selector: 'e5core-ui-categorization', template: "\n <span [ngSwitch]=\"style.current()\">\n <e5core-ui-categorization-box *ngSwitchCase='0' ></e5core-ui-categorization-box>\n <e5core-ui-categorization-bootstrap *ngSwitchCase='1' ></e5core-ui-categorization-bootstrap>\n\t<e5core-ui-categorization-material *ngSwitchCase='2'\n\t\t[hideToLevel]='hideToLevel'\n\t\t[categorization]='cat123'\n\t\t[labels]='catLabels'\n\t\t[readonly]='readonly'\n\t\t[cat1List]='cat1List' [cat2List]='cat2List' [cat3List]='cat3List'\n\t\t(catChange)='onCategoryChange($event)'></e5core-ui-categorization-material>\n </span>" }] } ]; /** @nocollapse */ E5coreUiCategorizationComponent.ctorParameters = function () { return [ { type: UiStyleService }, { type: ListSearchService }, { type: TaxonomyFieldDefinitionService }, { type: TaxonomyCategory2Service } ]; }; E5coreUiCategorizationComponent.propDecorators = { hideToLevel: [{ type: Input }], labels: [{ type: Input }], readonly: [{ type: Input }], populationMode: [{ type: Input }], categorizationChange: [{ type: Output }], defaultComplete: [{ type: Output }], categorization: [{ type: Input }] }; return E5coreUiCategorizationComponent; }()); export { E5coreUiCategorizationComponent }; if (false) { /** @type {?} */ E5coreUiCategorizationComponent.prototype.CATEGORY1_ID; /** @type {?} */ E5coreUiCategorizationComponent.prototype.CATEGORY2_ID; /** @type {?} */ E5coreUiCategorizationComponent.prototype.CATEGORY3_ID; /** @type {?} */ E5coreUiCategorizationComponent.prototype.hideToLevel; /** @type {?} */ E5coreUiCategorizationComponent.prototype.labels; /** @type {?} */ E5coreUiCategorizationComponent.prototype.readonly; /** @type {?} */ E5coreUiCategorizationComponent.prototype.populationMode; /** @type {?} */ E5coreUiCategorizationComponent.prototype.categorizationChange; /** @type {?} */ E5coreUiCategorizationComponent.prototype.defaultComplete; /** @type {?} */ E5coreUiCategorizationComponent.prototype.cat1List; /** @type {?} */ E5coreUiCategorizationComponent.prototype.cat2List; /** @type {?} */ E5coreUiCategorizationComponent.prototype.cat3List; /** @type {?} */ E5coreUiCategorizationComponent.prototype.cat123; /** @type {?} */ E5coreUiCategorizationComponent.prototype.catLabels; /** @type {?} */ E5coreUiCategorizationComponent.prototype.lastCat123; /** @type {?} */ E5coreUiCategorizationComponent.prototype.style; /** * @type {?} * @private */ E5coreUiCategorizationComponent.prototype.listService; /** * @type {?} * @private */ E5coreUiCategorizationComponent.prototype.fieldDefinitonServices; /** * @type {?} * @private */ E5coreUiCategorizationComponent.prototype.category2Service; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZTVjb3JlLXVpLWNhdGVnb3JpemF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2U1Y29yZS1hbmd1bGFyLXVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvZTVjb3JlLXVpLWNhdGVnb3JpemF0aW9uL2U1Y29yZS11aS1jYXRlZ29yaXphdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBaUIsOEJBQThCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFMUY7SUF3Q0kseUNBQW1CLEtBQXFCLEVBQVUsV0FBOEIsRUFDcEUsc0JBQXNELEVBQ3RELGdCQUEwQztRQUZuQyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFtQjtRQUNwRSwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQWdDO1FBQ3RELHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBMEI7UUF6QjdDLGlCQUFZLEdBQUcsY0FBYyxDQUFDO1FBQzlCLGlCQUFZLEdBQUcsY0FBYyxDQUFDO1FBQzlCLGlCQUFZLEdBQUcsY0FBYyxDQUFDO1FBSzlCLG1CQUFjLEdBQUcsNEJBQTRCLENBQUMsT0FBTyxDQUFDO1FBQ3JELHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUE2QixDQUFDO1FBQ3JFLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQTZCLENBQUM7O1FBSzFFLGFBQVEsR0FBb0IsRUFBRSxDQUFDO1FBQy9CLGFBQVEsR0FB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Qzs7SUFDdkMsdURBQXVDOztJQUN2Qyx1REFBdUM7O0lBRXZDLHNEQUE2Qjs7SUFDN0IsaURBQTBCOztJQUMxQixtREFBMkI7O0lBQzNCLHlEQUErRDs7SUFDL0QsK0RBQStFOztJQUMvRSwwREFBMEU7O0lBSzFFLG1EQUErQjs7SUFDL0IsbURBQStCOztJQUMvQixtREFBK0I7O0lBQy9CLGlEQUE2Qjs7SUFDN0Isb0RBQWtFOztJQUdsRSxxREFBaUM7O0lBRXJCLGdEQUE0Qjs7Ozs7SUFBRSxzREFBc0M7Ozs7O0lBQzVFLGlFQUE4RDs7Ozs7SUFDOUQsMkRBQWtEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBFdmVudEVtaXR0ZXIsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2F0ZWdvcml6YXRpb25DaGFuZ2VFdmVudCB9IGZyb20gJy4uLy4uL2V2ZW50cy9jYXRlZ29yaXphdGlvbi1jaGFuZ2UtZXZlbnQnO1xuaW1wb3J0IHsgTGlzdFNlYXJjaFNlcnZpY2UsIExpc3RJdGVtTW9kZWwsIFRheG9ub215RmllbGREZWZpbml0aW9uU2VydmljZSB9IGZyb20gJ2U1Y29yZS1hbmd1bGFyLXNlcnZpY2VzJztcbmltcG9ydCB7IFRheG9ub215Q2F0ZWdvcnkyU2VydmljZSB9IGZyb20gJ2U1Y29yZS1hbmd1bGFyLXNlcnZpY2VzJztcbmltcG9ydCB7IFVpU3R5bGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdWktc3R5bGUuc2VydmljZSc7XG5pbXBvcnQgeyBDYXRlZ29yaXphdGlvblBvcHVsYXRpb25Nb2RlIH0gZnJvbSBcIi4uLy4uL2VudW1zL2NhdGVnb3JpemF0aW9uLXBvcHVsYXRpb24tbW9kZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2U1Y29yZS11aS1jYXRlZ29yaXphdGlvbicsXG4gICAgdGVtcGxhdGU6IGBcbiAgPHNwYW4gW25nU3dpdGNoXT1cInN0eWxlLmN1cnJlbnQoKVwiPlxuICAgIDxlNWNvcmUtdWktY2F0ZWdvcml6YXRpb24tYm94ICpuZ1N3aXRjaENhc2U9JzAnID48L2U1Y29yZS11aS1jYXRlZ29yaXphdGlvbi1ib3g+XG4gICAgPGU1Y29yZS11aS1jYXRlZ29yaXphdGlvbi1ib290c3RyYXAgKm5nU3dpdGNoQ2FzZT0nMScgPjwvZTVjb3JlLXVpLWNhdGVnb3JpemF0aW9uLWJvb3RzdHJhcD5cblx0PGU1Y29yZS11aS1jYXRlZ29yaXphdGlvbi1tYXRlcmlhbCAqbmdTd2l0Y2hDYXNlPScyJ1xuXHRcdFtoaWRlVG9MZXZlbF09J2hpZGVUb0xldmVsJ1xuXHRcdFtjYXRlZ29yaXphdGlvbl09J2NhdDEyMydcblx0XHRbbGFiZWxzXT0nY2F0TGFiZWxzJ1xuXHRcdFtyZWFkb25seV09J3JlYWRvbmx5J1xuXHRcdFtjYXQxTGlzdF09J2NhdDFMaXN0JyBbY2F0Mkxpc3RdPSdjYXQyTGlzdCcgW2NhdDNMaXN0XT0nY2F0M0xpc3QnXG5cdFx0KGNhdENoYW5nZSk9J29uQ2F0ZWdvcnlDaGFuZ2UoJGV2ZW50KSc+PC9lNWNvcmUtdWktY2F0ZWdvcml6YXRpb24tbWF0ZXJpYWw+XG4gIDwvc3Bhbj5gXG59KVxuZXhwb3J0IGNsYXNzIEU1Y29yZVVpQ2F0ZWdvcml6YXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgcmVhZG9ubHkgQ0FURUdPUlkxX0lEID0gJ0NhdGVnb3J5MV9JZCc7XG4gICAgcmVhZG9ubHkgQ0FURUdPUlkyX0lEID0gJ0NhdGVnb3J5Ml9JZCc7XG4gICAgcmVhZG9ubHkgQ0FURUdPUlkzX0lEID0gJ0NhdGVnb3J5M19JZCc7XG5cbiAgICBASW5wdXQoKSBoaWRlVG9MZXZlbDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIGxhYmVsczogc3RyaW5nW107XG4gICAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcG9wdWxhdGlvbk1vZGUgPSBDYXRlZ29yaXphdGlvblBvcHVsYXRpb25Nb2RlLkRlZmF1bHQ7XG4gICAgQE91dHB1dCgpIGNhdGVnb3JpemF0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDYXRlZ29yaXphdGlvbkNoYW5nZUV2ZW50PigpO1xuICAgIEBPdXRwdXQoKSBkZWZhdWx0Q29tcGxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPENhdGVnb3JpemF0aW9uQ2hhbmdlRXZlbnQ+KCk7XG4gICAgQElucHV0KCkgc2V0IGNhdGVnb3JpemF0aW9uKGNhdDEyMzogbnVtYmVyW10pIHtcbiAgICAgICAgdGhpcy5TZXRDYXRlZ29yaXNhdGlvbkxpc3RzKGNhdDEyMyk7XG4gICAgfVxuICAgIC8vIENoaWxkIGlucHV0c1xuICAgIGNhdDFMaXN0OiBMaXN0SXRlbU1vZGVsW10gPSBbXTtcbiAgICBjYXQyTGlzdDogTGlzdEl0ZW1Nb2RlbFtdID0gW107XG4gICAgY2F0M0xpc3Q6IExpc3RJdGVtTW9kZWxbXSA9IFtdO1xuICAgIGNhdDEyMzogbnVtYmVyW10gPSBbMCwgMCwgMF07XG4gICAgY2F0TGFiZWxzOiBzdHJpbmdbXSA9IFsnQnVzaW5lc3MgQXJlYS4nLCAnUHJvZHVjdC4nLCAnQ2F0ZWdvcnkuJ107XG5cbiAgICAvLyBMb2NhbHNcbiAgICBsYXN0Q2F0MTIzOiBudW1iZXJbXSA9IFswLCAwLCAwXTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBzdHlsZTogVWlTdHlsZVNlcnZpY2UsIHByaXZhdGUgbGlzdFNlcnZpY2U6IExpc3RTZWFyY2hTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGZpZWxkRGVmaW5pdG9uU2VydmljZXM6IFRheG9ub215RmllbGREZWZpbml0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjYXRlZ29yeTJTZXJ2aWNlOiBUYXhvbm9teUNhdGVnb3J5MlNlcnZpY2UpIHsgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuSW5pdGlhbGlzZUNhdGVnb3Jpc2F0aW9uTGlzdHModGhpcy5jYXQxMjMpO1xuICAgICAgICB0aGlzLmFwcGx5TGFiZWxzKCk7XG4gICAgfVxuXG4gICAgYXBwbHlMYWJlbHMoKSB7XG4gICAgICAgIGlmICh0aGlzLmxhYmVscyAmJiB0aGlzLmxhYmVsc1swXSkge1xuICAgICAgICAgICAgdGhpcy5jYXRMYWJlbHNbMF0gPSB0aGlzLmxhYmVsc1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZpbml0b25TZXJ2aWNlcy5nZXQoJ0NhdGVnb3J5MV9JZCcpLnN1YnNjcmliZShmZCA9PiB0aGlzLmNhdExhYmVsc1swXSA9IGZkLmxhYmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxhYmVscyAmJiB0aGlzLmxhYmVsc1sxXSkge1xuICAgICAgICAgICAgdGhpcy5jYXRMYWJlbHNbMV0gPSB0aGlzLmxhYmVsc1sxXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZpbml0b25TZXJ2aWNlcy5nZXQoJ0NhdGVnb3J5Ml9JZCcpLnN1YnNjcmliZShmZCA9PiB0aGlzLmNhdExhYmVsc1sxXSA9IGZkLmxhYmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxhYmVscyAmJiB0aGlzLmxhYmVsc1syXSkge1xuICAgICAgICAgICAgdGhpcy5jYXRMYWJlbHNbMl0gPSB0aGlzLmxhYmVsc1syXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZpbml0b25TZXJ2aWNlcy5nZXQoJ0NhdGVnb3J5M19JZCcpLnN1YnNjcmliZShmZCA9PiB0aGlzLmNhdExhYmVsc1syXSA9IGZkLmxhYmVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2F0ZWdvcnlDaGFuZ2UoJGV2ZW50OiBDYXRlZ29yaXphdGlvbkNoYW5nZUV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmNhdDEyM1swXSAhPT0gdGhpcy5sYXN0Q2F0MTIzWzBdKSB7XG4gICAgICAgICAgICAvLyBMb2FkIG5ldyBDYXQgMiwgcmVzZXQgY2F0IDNcbiAgICAgICAgICAgIHRoaXMubGlzdFNlcnZpY2Uuc2VhcmNoKHRoaXMuQ0FURUdPUlkyX0lELCB7IHBhcmVudExpc3RJdGVtSWQ6IHRoaXMuY2F0MTIzWzBdIH0pLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICBjYXQyTGlzdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2F0Mkxpc3QgPSBjYXQyTGlzdDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMubGFzdENhdDEyMyA9IFt0aGlzLmNhdDEyM1swXSwgdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgICAgICAgICAgdGhpcy5jYXQxMjNbMV0gPSB0aGlzLmNhdDEyM1syXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuY2F0Mkxpc3QgPSB0aGlzLmNhdDNMaXN0ID0gW107XG4gICAgICAgICAgICAkZXZlbnQuY2F0ZWdvcnkySWQgPSAkZXZlbnQuY2F0ZWdvcnkzSWQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNhdDEyM1sxXSAhPT0gdGhpcy5sYXN0Q2F0MTIzWzFdKSB7XG4gICAgICAgICAgICAvLyBMb2FkIG5ldyBDYXQgM1xuICAgICAgICAgICAgdGhpcy5saXN0U2VydmljZS5zZWFyY2godGhpcy5DQVRFR09SWTNfSUQsIHsgcGFyZW50TGlzdEl0ZW1JZDogdGhpcy5jYXQxMjNbMV0gfSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIGNhdDNMaXN0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXQzTGlzdCA9IGNhdDNMaXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmxhc3RDYXQxMjMgPSBbdGhpcy5jYXQxMjNbMF0sIHRoaXMuY2F0MTIzWzFdLCB1bmRlZmluZWRdO1xuICAgICAgICAgICAgdGhpcy5jYXQxMjNbMl0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmNhdDNMaXN0ID0gW107XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLkVtaXRDYXRlZ29yaXphdGlvbkNoYW5nZUV2ZW50KCRldmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkQ2F0ZWdvcml6YXRpb24xKGNhdDEyMzogbnVtYmVyW10pIHtcbiAgICAgICAgdGhpcy5sYXN0Q2F0MTIzID0gWy4uLmNhdDEyM107XG4gICAgICAgIGlmIChjYXQxMjMgJiYgY2F0MTIzLmxlbmd0aCA+PSAxICYmICsoY2F0MTIzWzBdKSAhPT0gMCkge1xuICAgICAgICAgICAgLy8gTG9hZCB0aGUgQ2F0ZWdvcnkgMSBhbmQgc2VsZWN0IGl0XG4gICAgICAgICAgICB0aGlzLmxpc3RTZXJ2aWNlLnNlYXJjaCh0aGlzLkNBVEVHT1JZMV9JRCwge30pLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICBjYXRMaXN0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2F0ID0gY2F0TGlzdC5maW5kKGMgPT4gK2MuaWQgPT09IGNhdDEyM1swXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2F0MUxpc3QgPSBjYXRMaXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXQxMjMgPSBbY2F0MTIzWzBdLCAwLCAwXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZENhdGVnb3JpemF0aW9uMihjYXQxMjMsIGNhdDEyM1swXSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhdDFMaXN0ID0gdGhpcy5jYXQyTGlzdCA9IHRoaXMuY2F0M0xpc3QgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2F0MTIzID0gWzAsIDAsIDBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZENhdGVnb3JpemF0aW9uMihjYXQxMjM6IG51bWJlcltdLCBwYXJlbnRJZDogbnVtYmVyKSB7XG4gICAgICAgIGlmIChjYXQxMjMgJiYgY2F0MTIzLmxlbmd0aCA+PSAyICYmICsoY2F0MTIzWzFdKSAhPT0gMCkge1xuICAgICAgICAgICAgLy8gTG9hZCB0aGUgQ2F0ZWdvcnkgMiBhbmQgc2VsZWN0IGl0XG4gICAgICAgICAgICB0aGlzLmxpc3RTZXJ2aWNlLnNlYXJjaCh0aGlzLkNBVEVHT1JZMl9JRCwgeyBwYXJlbnRMaXN0SXRlbUlkOiBwYXJlbnRJZCB9KS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgY2F0TGlzdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhdCA9IGNhdExpc3QuZmluZChjID0+ICtjLmlkID09PSBjYXQxMjNbMV0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhdDJMaXN0ID0gY2F0TGlzdDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXQxMjMgPSBbY2F0MTIzWzBdLCBjYXQxMjNbMV0sIDBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkQ2F0ZWdvcml6YXRpb24zKGNhdDEyMywgY2F0MTIzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2F0M0xpc3QgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2F0MTIzID0gW2NhdDEyM1swXSwgMCwgMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkQ2F0ZWdvcml6YXRpb24zKGNhdDEyMzogbnVtYmVyW10sIHBhcmVudElkOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGNhdDEyMyAmJiBjYXQxMjMubGVuZ3RoID49IDMgJiYgKyhjYXQxMjNbMl0pICE9PSAwKSB7XG4gICAgICAgICAgICAvLyBMb2FkIHRoZSBDYXRlZ29yeSAzIGFuZCBzZWxlY3QgaXRcbiAgICAgICAgICAgIHRoaXMubGlzdFNlcnZpY2Uuc2VhcmNoKHRoaXMuQ0FURUdPUlkzX0lELCB7IHBhcmVudExpc3RJdGVtSWQ6IHBhcmVudElkIH0pLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICBjYXRMaXN0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2F0ID0gY2F0TGlzdC5maW5kKGMgPT4gK2MuaWQgPT09IGNhdDEyM1syXSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2F0M0xpc3QgPSBjYXRMaXN0O1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2F0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhdDEyMyA9IFtjYXQxMjNbMF0sIGNhdDEyM1sxXSwgY2F0MTIzWzJdXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2F0MTIzID0gW2NhdDEyM1swXSwgY2F0MTIzWzFdLCAwXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENhdGVnb3J5MShjYXQxMjM6IG51bWJlcltdLCBldmVudDogQ2F0ZWdvcml6YXRpb25DaGFuZ2VFdmVudCkge1xuICAgICAgICAvLyBHZXQgdGhlIENhdGVnb3J5MSBJZCB1c2luZyB0aGUgQ2F0ZWdvcnkyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnkyU2VydmljZS5nZXQoY2F0MTIzWzFdLCAwKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICBjYXQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXQxMjMgPSBbY2F0LmNhdGVnb3J5MUlkLCBjYXQxMjNbMV0sIGNhdDEyM1syXV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXQxMjMgPSBbY2F0MTIzWzBdLCBjYXQxMjNbMV0sIGNhdDEyM1syXV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMubGFzdENhdDEyMyA9IFsuLi50aGlzLmNhdDEyM107XG4gICAgICAgICAgICAgICAgZXZlbnQuY2F0ZWdvcnkxSWQgPSBjYXQuY2F0ZWdvcnkxSWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yaXphdGlvbkNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIEluaXRpYWxpc2VDYXRlZ29yaXNhdGlvbkxpc3RzKGNhdDEyMzogbnVtYmVyW10pIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLnBvcHVsYXRpb25Nb2RlKSB7XG4gICAgICAgICAgICBjYXNlIENhdGVnb3JpemF0aW9uUG9wdWxhdGlvbk1vZGUuUG9wdWxhdGVBbGxMZXZlbDI6XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlVG9MZXZlbCA9IDE7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXQxMjNbMF0gPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdENhdDEyMyA9IFsuLi5jYXQxMjNdO1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdFNlcnZpY2Uuc2VhcmNoKHRoaXMuQ0FURUdPUlkyX0lEKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgIGxpc3QgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXQyTGlzdCA9IGxpc3Q7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDYXRlZ29yaXphdGlvblBvcHVsYXRpb25Nb2RlLkRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0U2VydmljZS5zZWFyY2godGhpcy5DQVRFR09SWTFfSUQpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgbGlzdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhdDFMaXN0ID0gbGlzdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIFNldENhdGVnb3Jpc2F0aW9uTGlzdHMoY2F0MTIzOiBudW1iZXJbXSkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMucG9wdWxhdGlvbk1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgQ2F0ZWdvcml6YXRpb25Qb3B1bGF0aW9uTW9kZS5Qb3B1bGF0ZUFsbExldmVsMjpcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRDYXRlZ29yaXphdGlvbjIoY2F0MTIzLCAwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ2F0ZWdvcml6YXRpb25Qb3B1bGF0aW9uTW9kZS5EZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMubG9hZENhdGVnb3JpemF0aW9uMShjYXQxMjMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBFbWl0Q2F0ZWdvcml6YXRpb25DaGFuZ2VFdmVudChldmVudDogQ2F0ZWdvcml6YXRpb25DaGFuZ2VFdmVudCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMucG9wdWxhdGlvbk1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgQ2F0ZWdvcml6YXRpb25Qb3B1bGF0aW9uTW9kZS5Qb3B1bGF0ZUFsbExldmVsMjpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jYXQxMjNbMl0gIT09IHRoaXMubGFzdENhdDEyM1syXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENhdGVnb3J5MSh0aGlzLmNhdDEyMywgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ2F0ZWdvcml6YXRpb25Qb3B1bGF0aW9uTW9kZS5EZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhdDEyM1syXSAhPT0gdGhpcy5sYXN0Q2F0MTIzWzJdICYmIHRoaXMuY2F0MTIzWzJdICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2F0ZWdvcml6YXRpb25DaGFuZ2UuZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICB9XG5cbn1cbiJdfQ==