air-lib
Version:
This is Air's angular component library
323 lines • 37.2 kB
JavaScript
/**
* @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