UNPKG

air-lib

Version:

This is Air's angular component library

323 lines 37.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input, Output, EventEmitter } from '@angular/core'; import * as _ from 'lodash'; import { TranslationService } from '../../services/translation.service'; import { AutocompleteCountSettings } from '../../entities/auto-complete-count-settings'; import { BaseSearchComponent } from './base-search.component'; import { HttpService } from '../../services/http.service'; export class SearchComponent extends BaseSearchComponent { /** * @param {?} httpService * @param {?} translator */ constructor(httpService, translator) { super(translator, httpService); this.editInputValue = true; this.searchPrepared = new EventEmitter(); this.goUrl = new EventEmitter(); this.goSearchForPreset = new EventEmitter(); this.timeDelay = 2000; this.minNumberValue = 3; this.hasSearchIcons = true; this.hasCloseIcons = false; this.defaultItem = new Array(); } /** * @param {?} data * @return {?} */ set InitSearch(data) { if (data) { this.searchSettings = data; this.suggestedList = this.buildPresetsList(); if (this.searchSettings.title) { this.translator.translate(this.searchSettings.title).subscribe((result) => { this.searchSettings.title = result; }); } if (this.searchSettings.stateName) { this.buildDefaultOrStateSearchItem() .then((res) => { if (res && res.id !== '') { this.defaultItem = [res]; this.whatsIcon(this.defaultItem); } else { this.showSearchIcons(); } }); } else { this.defaultItem = [{ id: '', text: '' }]; } } } /** * @private * @param {?} event * @return {?} */ set ApplySearch(event) { if (event) { this.saveToState(this.presetItem.id, this.typePreset).then((res) => { }); } } /** * @param {?} value * @return {?} */ searchTextChanged(value) { if (value && (value.length >= this.minNumberValue)) { /** @type {?} */ const self = this; this.checkedsTextVersion = value; if (this.startTimerSearch) { clearTimeout(this.startTimerSearch); } this.startTimerSearch = setTimeout(function () { self.getSearch(value); }, this.timeDelay); } } /** * @private * @param {?} value * @return {?} */ getSearch(value) { this.hasLoading = true; this.suggestedList = new Array(); if (!value) { this.suggestedList = this.buildPresetsList(); this.hasLoading = false; } else { this.searchSettings.scopeSearch.search = value; /** @type {?} */ const searchJson = JSON.stringify(this.searchSettings.scopeSearch); /** @type {?} */ const encodedJson = window.btoa(encodeURIComponent(searchJson)); /** @type {?} */ const observable = this.searchSettings.httpMethod === 'GET' ? this.httpService.httpGet(this.searchSettings.searchUrl + '?searchQuery=' + encodedJson) // maximum 2048 symbols : this.httpService.httpPost(this.searchSettings.searchUrl, this.searchSettings.scopeSearch); observable .subscribe((data) => { if (data) { /** @type {?} */ const response = data; /** @type {?} */ let autocompleteCountString; this.translator.translate('autocompleteCountString', { value: '\<b>' + (response.count - this.searchSettings.scopeSearch.pageentries) + '\</b>' }).subscribe((res) => { autocompleteCountString = res; this.suggestedList = (this.checkedsTextVersion === ('' + response.search)) ? this.buildAutoCompleteList(response) : new Array(); this.searchSettings.autocompleteCountSettings = this.searchSettings.autocompleteCountSettings || new AutocompleteCountSettings(); if (response.count > this.searchSettings.scopeSearch.pageentries) { this.searchSettings.autocompleteCountSettings.hasAutocompleteCount = true; this.searchSettings.autocompleteCountSettings.autocompleteCountString = autocompleteCountString; } else { this.searchSettings.autocompleteCountSettings.hasAutocompleteCount = false; } }); } else { this.searchSettings.autocompleteCountSettings = this.searchSettings.autocompleteCountSettings || new AutocompleteCountSettings(); this.suggestedList = this.buildEmptyList(); this.searchSettings.autocompleteCountSettings.hasAutocompleteCount = false; } this.hasLoading = false; }, (err) => { this.hasLoading = false; console.error(err); }); } } /** * @param {?} event * @return {?} */ selectedItem(event) { if (event.id === 'noclick') { return; } /** @type {?} */ const self = this; if (_.findIndex(this.searchSettings.presetList, function (row) { self.presetItem = row; return row.id === event.id; }) >= 0) { this.whatsIcon([this.presetItem]); this.goSearchForPreset.emit({ selectedPreset: this.presetItem, isChangePreset: true, isCleared: false }); } else { this.goUrl.emit(event); } } /** * @param {?} event * @return {?} */ onSearchPrepared(event) { if (event && this.searchSettings.stateName) { this.defaultItem = [{ id: event, text: event }]; this.showCloseIcons(); this.saveToState(event, this.typeString).then((res) => { this.searchPrepared.emit(event); }); } } /** * @param {?} event * @return {?} */ removed(event) { if (this.searchSettings.stateName) { this.buildDefaultSearchItem().then((res) => { this.defaultItem = [{ id: this.searchSettings.defaultSearchValue.id, text: this.searchSettings.defaultSearchValue.text }]; this.suggestedList = new Array(); this.suggestedList = this.buildPresetsList(); this.whatsIcon(this.defaultItem); this.goSearchForPreset.emit({ selectedPreset: this.searchSettings.defaultSearchValue, isChangePreset: false, isCleared: true }); }); } } /** * @private * @param {?} selectedItem * @return {?} */ whatsIcon(selectedItem) { if (selectedItem[0] && selectedItem[0].id !== '') { (_.findIndex(this.searchSettings.presetList, function (row) { return row.id === selectedItem[0].id; }) >= 0) ? this.showSearchIcons() : this.showCloseIcons(); } else { this.showCloseIcons(); } } /** * @private * @return {?} */ showSearchIcons() { this.hasSearchIcons = true; this.hasCloseIcons = false; } /** * @private * @return {?} */ showCloseIcons() { this.hasSearchIcons = false; this.hasCloseIcons = true; } /** * @return {?} */ closed() { this.hasError = false; this.suggestedList = new Array(); this.suggestedList = this.buildPresetsList(); if (this.searchSettings) { this.searchSettings.autocompleteCountSettings = this.searchSettings.autocompleteCountSettings || new AutocompleteCountSettings(); this.searchSettings.autocompleteCountSettings.hasAutocompleteCount = false; } } /** * @return {?} */ opened() { this.suggestedList = new Array(); this.suggestedList = this.buildPresetsList(); } } SearchComponent.decorators = [ { type: Component, args: [{ selector: 'air-search', template: "<div pg-form-group class=\"global-search\">\r\n <ng-select componentId=\"search\"\r\n [isSearch]= true\r\n [items]=\"suggestedList\"\r\n [active]=\"defaultItem\"\r\n [placeholder]= searchSettings?.placeholder\r\n (selected)=\"selectedItem($event)\"\r\n (inputText)=\"searchTextChanged($event)\"\r\n (removed)=\"removed($event)\"\r\n [title]= searchSettings?.title\r\n [editInputData] = editInputValue\r\n [allowClear] = hasCloseIcons\r\n [allowSearchIcons] = hasSearchIcons\r\n (searchPrepared)=\"onSearchPrepared($event)\"\r\n [hasError]= hasError\r\n (opened)=\"opened()\"\r\n (closed)= \"closed()\"\r\n [autocompleteCountSettings]=\"searchSettings?.autocompleteCountSettings\"\r\n [searchSettings]=\"searchSettings\"\r\n >\r\n </ng-select>\r\n <div class=\"container-preloader-transparent\" [hidden]='!hasLoading'>\r\n <svg class=\"container-preloader\">\r\n <use xlink:href=\"#progress-circle\"></use>\r\n </svg>\r\n </div>\r\n</div>\r\n", styles: [".global-search{position:relative}.global-search ::ng-deep .container-preloader-transparent{left:auto;width:50px}.global-search ::ng-deep .container-preloader-transparent .container-preloader{left:auto;width:30px;height:30px;right:10px}.global-search ::ng-deep .ui-select-container{background:#fff;box-shadow:inset 0 0 0 1px rgba(0,0,0,.07)}.global-search ::ng-deep .ui-select-container:hover{background-color:#fafafa}.global-search ::ng-deep .ui-select-container.ui-select-focusud{background-color:#f0f0f0}.global-search ::ng-deep .ui-select-container.has-error{background-color:#feeeee}.global-search ::ng-deep .ui-select-container.has-error .ui-select-choices-row{background:0 0}.global-search ::ng-deep .ui-select-container.has-error .dropdown-item strong{background:0 0}.global-search ::ng-deep .ui-select-container.has-error .dropdown-item{color:#c00;font-style:italic;cursor:default}.global-search ::ng-deep .ui-select-container .btn.btn-default.form-control.ui-select-toggle{border:none;background:0 0;min-height:33px;padding:6px 12px 9px;height:33px}.global-search ::ng-deep .ui-select-container .btn-default{display:block;background:0 0}.global-search ::ng-deep .ui-select-container .btn-default:hover{background:0 0}.global-search ::ng-deep .ui-select-container .ui-select-choices-row>a{padding:6px 20px}.global-search ::ng-deep .form-control{border:none;background:0 0;height:33px;min-height:33px}.global-search ::ng-deep .title-input{padding-left:12px;margin:0;padding-top:7px;text-align:left}.global-search ::ng-deep .ui-block-icons{position:absolute;right:10px;bottom:6px;height:20px}.global-search ::ng-deep .ui-block-icons .icons{font-size:14px;color:#ccc;float:left;display:block;overflow:hidden;height:20px;cursor:pointer}.global-search ::ng-deep .ui-block-icons .icons .ui-close{font-size:25px;font-weight:500;line-height:20px;font-style:normal}.global-search ::ng-deep .dropdown-item .category{color:#000;cursor:default;font-weight:600;margin:-6px -20px;padding:6px 20px;background:#fff}.global-search ::ng-deep .dropdown-item .category strong{background:0 0;font-weight:600}.global-search ::ng-deep .dropdown-item strong{background:#fff573;font-weight:400}"] }] } ]; SearchComponent.ctorParameters = () => [ { type: HttpService }, { type: TranslationService } ]; SearchComponent.propDecorators = { InitSearch: [{ type: Input }], ApplySearch: [{ type: Input }], editInputValue: [{ type: Input }], searchPrepared: [{ type: Output }], goUrl: [{ type: Output }], goSearchForPreset: [{ type: Output }] }; if (false) { /** @type {?} */ SearchComponent.prototype.editInputValue; /** @type {?} */ SearchComponent.prototype.searchPrepared; /** @type {?} */ SearchComponent.prototype.goUrl; /** @type {?} */ SearchComponent.prototype.goSearchForPreset; /** @type {?} */ SearchComponent.prototype.suggestedList; /** @type {?} */ SearchComponent.prototype.defaultItem; /** * @type {?} * @private */ SearchComponent.prototype.startTimerSearch; /** * @type {?} * @private */ SearchComponent.prototype.timeDelay; /** * @type {?} * @private */ SearchComponent.prototype.minNumberValue; /** @type {?} */ SearchComponent.prototype.hasSearchIcons; /** @type {?} */ SearchComponent.prototype.hasCloseIcons; /** * @type {?} * @private */ SearchComponent.prototype.checkedsTextVersion; /** * @type {?} * @private */ SearchComponent.prototype.presetItem; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2Fpci1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9zZWFyY2gvc2VhcmNoLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBK0IsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFeEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFeEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBUzFELE1BQU0sc0JBQXVCLFNBQVEsbUJBQW1COzs7OztJQW1EcEQsWUFDSSxXQUF3QixFQUN4QixVQUE4QjtRQUM5QixLQUFLLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBbEIxQixtQkFBYyxHQUFHLElBQUksQ0FBQztRQUVyQixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDcEMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDM0Isc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUt6QyxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLG1CQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBT2xCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxLQUFLLEVBQXVCLENBQUM7SUFDeEQsQ0FBQzs7Ozs7SUF0REQsSUFDVyxVQUFVLENBQUMsSUFBcUI7UUFDdkMsSUFBSSxJQUFJLEVBQUU7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Ozs7O0lBQ3BDLHFDQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdFbmNhcHN1bGF0aW9uLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJU2VhcmNoU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2lzZWFyY2gtc2V0dGluZ3MnO1xyXG5pbXBvcnQgeyBBdXRvY29tcGxldGVDb3VudFNldHRpbmdzIH0gZnJvbSAnLi4vLi4vZW50aXRpZXMvYXV0by1jb21wbGV0ZS1jb3VudC1zZXR0aW5ncyc7XHJcbmltcG9ydCB7IElQcmVzZXQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2lwcmVzZXQnO1xyXG5pbXBvcnQgeyBCYXNlU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLXNlYXJjaC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAuc2VydmljZSc7XHJcbmltcG9ydCB7IElTaW1wbGVOZ1NlbGVjdEl0ZW0gfSBmcm9tICcuLi9uZzItc2VsZWN0LWN1c3RvbS9zZWxlY3QubW9kdWxlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdhaXItc2VhcmNoJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWydzZWFyY2guY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFNlYXJjaENvbXBvbmVudCBleHRlbmRzIEJhc2VTZWFyY2hDb21wb25lbnQge1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IEluaXRTZWFyY2goZGF0YTogSVNlYXJjaFNldHRpbmdzKSB7XHJcbiAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXR0aW5ncyA9IGRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGVkTGlzdCA9IHRoaXMuYnVpbGRQcmVzZXRzTGlzdCgpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hTZXR0aW5ncy50aXRsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdG9yLnRyYW5zbGF0ZSh0aGlzLnNlYXJjaFNldHRpbmdzLnRpdGxlKS5zdWJzY3JpYmUoKHJlc3VsdDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXR0aW5ncy50aXRsZSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFNldHRpbmdzLnN0YXRlTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZERlZmF1bHRPclN0YXRlU2VhcmNoSXRlbSgpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJlczogSVNpbXBsZU5nU2VsZWN0SXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzICYmIHJlcy5pZCAhPT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEl0ZW0gPSBbcmVzXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2hhdHNJY29uKHRoaXMuZGVmYXVsdEl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U2VhcmNoSWNvbnMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0SXRlbSA9IFt7IGlkOiAnJywgdGV4dDogJycgfV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHByaXZhdGUgc2V0IEFwcGx5U2VhcmNoKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5zYXZlVG9TdGF0ZSh0aGlzLnByZXNldEl0ZW0uaWQsIHRoaXMudHlwZVByZXNldCkudGhlbigocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIGVkaXRJbnB1dFZhbHVlID0gdHJ1ZTtcclxuXHJcbiAgICBAT3V0cHV0KCkgc2VhcmNoUHJlcGFyZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgZ29VcmwgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgZ29TZWFyY2hGb3JQcmVzZXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gICAgc3VnZ2VzdGVkTGlzdDogQXJyYXk8SVNpbXBsZU5nU2VsZWN0SXRlbT47XHJcbiAgICBkZWZhdWx0SXRlbTogQXJyYXk8SVNpbXBsZU5nU2VsZWN0SXRlbT47XHJcbiAgICBwcml2YXRlIHN0YXJ0VGltZXJTZWFyY2g6IGFueTtcclxuICAgIHByaXZhdGUgdGltZURlbGF5ID0gMjAwMDtcclxuICAgIHByaXZhdGUgbWluTnVtYmVyVmFsdWUgPSAzO1xyXG4gICAgaGFzU2VhcmNoSWNvbnMgPSB0cnVlO1xyXG4gICAgaGFzQ2xvc2VJY29ucyA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBjaGVja2Vkc1RleHRWZXJzaW9uOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHByZXNldEl0ZW06IElQcmVzZXQ7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBodHRwU2VydmljZTogSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgdHJhbnNsYXRvcjogVHJhbnNsYXRpb25TZXJ2aWNlKSB7XHJcbiAgICAgICAgc3VwZXIodHJhbnNsYXRvciwgaHR0cFNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEl0ZW0gPSBuZXcgQXJyYXk8SVNpbXBsZU5nU2VsZWN0SXRlbT4oKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWFyY2hUZXh0Q2hhbmdlZCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICYmICh2YWx1ZS5sZW5ndGggPj0gdGhpcy5taW5OdW1iZXJWYWx1ZSkpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZHNUZXh0VmVyc2lvbiA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zdGFydFRpbWVyU2VhcmNoKSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zdGFydFRpbWVyU2VhcmNoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZXJTZWFyY2ggPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuZ2V0U2VhcmNoKHZhbHVlKTtcclxuICAgICAgICAgICAgfSwgdGhpcy50aW1lRGVsYXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFNlYXJjaCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5oYXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN1Z2dlc3RlZExpc3QgPSBuZXcgQXJyYXk8SVNpbXBsZU5nU2VsZWN0SXRlbT4oKTtcclxuICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGVkTGlzdCA9IHRoaXMuYnVpbGRQcmVzZXRzTGlzdCgpO1xyXG4gICAgICAgICAgICB0aGlzLmhhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFNldHRpbmdzLnNjb3BlU2VhcmNoLnNlYXJjaCA9IHZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBzZWFyY2hKc29uID0gSlNPTi5zdHJpbmdpZnkodGhpcy5zZWFyY2hTZXR0aW5ncy5zY29wZVNlYXJjaCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRKc29uID0gd2luZG93LmJ0b2EoZW5jb2RlVVJJQ29tcG9uZW50KHNlYXJjaEpzb24pKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmFibGUgPSB0aGlzLnNlYXJjaFNldHRpbmdzLmh0dHBNZXRob2QgPT09ICdHRVQnXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuaHR0cFNlcnZpY2UuaHR0cEdldCh0aGlzLnNlYXJjaFNldHRpbmdzLnNlYXJjaFVybCArICc/c2VhcmNoUXVlcnk9JyArIGVuY29kZWRKc29uICApIC8vIG1heGltdW0gMjA0OCBzeW1ib2xzXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuaHR0cFNlcnZpY2UuaHR0cFBvc3QodGhpcy5zZWFyY2hTZXR0aW5ncy5zZWFyY2hVcmwsIHRoaXMuc2VhcmNoU2V0dGluZ3Muc2NvcGVTZWFyY2gpO1xyXG5cclxuICAgICAgICAgICAgb2JzZXJ2YWJsZVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXV0b2NvbXBsZXRlQ291bnRTdHJpbmc6IHN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdG9yLnRyYW5zbGF0ZSgnYXV0b2NvbXBsZXRlQ291bnRTdHJpbmcnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ1xcPGI+JyArIChyZXNwb25zZS5jb3VudCAtIHRoaXMuc2VhcmNoU2V0dGluZ3Muc2NvcGVTZWFyY2gucGFnZWVudHJpZXMpICsgJ1xcPC9iPidcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuc3Vic2NyaWJlKChyZXM6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlQ291bnRTdHJpbmcgPSByZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWdnZXN0ZWRMaXN0ID0gKHRoaXMuY2hlY2tlZHNUZXh0VmVyc2lvbiA9PT0gKCcnICsgcmVzcG9uc2Uuc2VhcmNoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmJ1aWxkQXV0b0NvbXBsZXRlTGlzdChyZXNwb25zZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXcgQXJyYXk8SVNpbXBsZU5nU2VsZWN0SXRlbT4oKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXR0aW5ncy5hdXRvY29tcGxldGVDb3VudFNldHRpbmdzID0gdGhpcy5zZWFyY2hTZXR0aW5ncy5hdXRvY29tcGxldGVDb3VudFNldHRpbmdzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5ldyBBdXRvY29tcGxldGVDb3VudFNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmNvdW50ID4gdGhpcy5zZWFyY2hTZXR0aW5ncy5zY29wZVNlYXJjaC5wYWdlZW50cmllcykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXR0aW5ncy5hdXRvY29tcGxldGVDb3VudFNldHRpbmdzLmhhc0F1dG9jb21wbGV0ZUNvdW50ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXR0aW5ncy5hdXRvY29tcGxldGVDb3VudFNldHRpbmdzLmF1dG9jb21wbGV0ZUNvdW50U3RyaW5nID0gYXV0b2NvbXBsZXRlQ291bnRTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXR0aW5ncy5hdXRvY29tcGxldGVDb3VudFNldHRpbmdzLmhhc0F1dG9jb21wbGV0ZUNvdW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2V0dGluZ3MuYXV0b2NvbXBsZXRlQ291bnRTZXR0aW5ncyA9IHRoaXMuc2VhcmNoU2V0dGluZ3MuYXV0b2NvbXBsZXRlQ291bnRTZXR0aW5nc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBuZXcgQXV0b2NvbXBsZXRlQ291bnRTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Z2dlc3RlZExpc3QgPSB0aGlzLmJ1aWxkRW1wdHlMaXN0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2V0dGluZ3MuYXV0b2NvbXBsZXRlQ291bnRTZXR0aW5ncy5oYXNBdXRvY29tcGxldGVDb3VudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkSXRlbShldmVudDogSVNpbXBsZU5nU2VsZWN0SXRlbSkge1xyXG4gICAgICAgIGlmIChldmVudC5pZCA9PT0gJ25vY2xpY2snKSB7IHJldHVybjsgfVxyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmIChfLmZpbmRJbmRleCh0aGlzLnNlYXJjaFNldHRpbmdzLnByZXNldExpc3QsXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIChyb3cpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYucHJlc2V0SXRlbSA9IHJvdztcclxuICAgICAgICAgICAgICAgIHJldHVybiByb3cuaWQgPT09IGV2ZW50LmlkO1xyXG4gICAgICAgICAgICB9KSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMud2hhdHNJY29uKFt0aGlzLnByZXNldEl0ZW1dKTtcclxuICAgICAgICAgICAgdGhpcy5nb1NlYXJjaEZvclByZXNldC5lbWl0KFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUHJlc2V0OiB0aGlzLnByZXNldEl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgICAgaXNDaGFuZ2VQcmVzZXQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNDbGVhcmVkOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ29VcmwuZW1pdChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uU2VhcmNoUHJlcGFyZWQoZXZlbnQ6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChldmVudCAmJiB0aGlzLnNlYXJjaFNldHRpbmdzLnN0YXRlTmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRJdGVtID0gW3tcclxuICAgICAgICAgICAgICAgIGlkOiBldmVudCxcclxuICAgICAgICAgICAgICAgIHRleHQ6IGV2ZW50XHJcbiAgICAgICAgICAgIH1dO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dDbG9zZUljb25zKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZVRvU3RhdGUoZXZlbnQsIHRoaXMudHlwZVN0cmluZykudGhlbigocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoUHJlcGFyZWQuZW1pdChldmVudCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVkKGV2ZW50OiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hTZXR0aW5ncy5zdGF0ZU5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5idWlsZERlZmF1bHRTZWFyY2hJdGVtKCkudGhlbigocmVzOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEl0ZW0gPSBbe1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLnNlYXJjaFNldHRpbmdzLmRlZmF1bHRTZWFyY2hWYWx1ZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnNlYXJjaFNldHRpbmdzLmRlZmF1bHRTZWFyY2hWYWx1ZS50ZXh0XHJcbiAgICAgICAgICAgICAgICB9XTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGVkTGlzdCA9IG5ldyBBcnJheTxJU2ltcGxlTmdTZWxlY3RJdGVtPigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdWdnZXN0ZWRMaXN0ID0gdGhpcy5idWlsZFByZXNldHNMaXN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndoYXRzSWNvbih0aGlzLmRlZmF1bHRJdGVtKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ29TZWFyY2hGb3JQcmVzZXQuZW1pdChcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUHJlc2V0OiB0aGlzLnNlYXJjaFNldHRpbmdzLmRlZmF1bHRTZWFyY2hWYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDaGFuZ2VQcmVzZXQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NsZWFyZWQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB3aGF0c0ljb24oc2VsZWN0ZWRJdGVtOiBBcnJheTxJU2ltcGxlTmdTZWxlY3RJdGVtPikge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZEl0ZW1bMF0gJiYgc2VsZWN0ZWRJdGVtWzBdLmlkICE9PSAnJykge1xyXG4gICAgICAgICAgICAoXy5maW5kSW5kZXgodGhpcy5zZWFyY2hTZXR0aW5ncy5wcmVzZXRMaXN0LFxyXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKHJvdykgeyByZXR1cm4gcm93LmlkID09PSBzZWxlY3RlZEl0ZW1bMF0uaWQ7IH0pID49IDApXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuc2hvd1NlYXJjaEljb25zKClcclxuICAgICAgICAgICAgICAgIDogdGhpcy5zaG93Q2xvc2VJY29ucygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0Nsb3NlSWNvbnMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93U2VhcmNoSWNvbnMoKSB7XHJcbiAgICAgICAgdGhpcy5oYXNTZWFyY2hJY29ucyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oYXNDbG9zZUljb25zID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93Q2xvc2VJY29ucygpIHtcclxuICAgICAgICB0aGlzLmhhc1NlYXJjaEljb25zID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5oYXNDbG9zZUljb25zID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZWQoKSB7XHJcbiAgICAgICAgdGhpcy5oYXNFcnJvciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3VnZ2VzdGVkTGlzdCA9IG5ldyBBcnJheTxJU2ltcGxlTmdTZWxlY3RJdGVtPigpO1xyXG4gICAgICAgIHRoaXMuc3VnZ2VzdGVkTGlzdCA9IHRoaXMuYnVpbGRQcmVzZXRzTGlzdCgpO1xyXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU2V0dGluZ3MuYXV0b2NvbXBsZXRlQ291bnRTZXR0aW5ncyA9IHRoaXMuc2VhcmNoU2V0dGluZ3MuYXV0b2NvbXBsZXRlQ291bnRTZXR0aW5nc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBuZXcgQXV0b2NvbXBsZXRlQ291bnRTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFNldHRpbmdzLmF1dG9jb21wbGV0ZUNvdW50U2V0dGluZ3MuaGFzQXV0b2NvbXBsZXRlQ291bnQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW5lZCgpIHtcclxuICAgICAgICB0aGlzLnN1Z2dlc3RlZExpc3QgPSBuZXcgQXJyYXk8SVNpbXBsZU5nU2VsZWN0SXRlbT4oKTtcclxuICAgICAgICB0aGlzLnN1Z2dlc3RlZExpc3QgPSB0aGlzLmJ1aWxkUHJlc2V0c0xpc3QoKTtcclxuICAgIH1cclxuXHJcbn1cclxuIl19