UNPKG

air-lib

Version:

This is Air's angular component library

376 lines 39.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; 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'; var SearchComponent = /** @class */ (function (_super) { tslib_1.__extends(SearchComponent, _super); function SearchComponent(httpService, translator) { var _this = _super.call(this, translator, httpService) || this; _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(); return _this; } Object.defineProperty(SearchComponent.prototype, "InitSearch", { set: /** * @param {?} data * @return {?} */ function (data) { var _this = this; if (data) { this.searchSettings = data; this.suggestedList = this.buildPresetsList(); if (this.searchSettings.title) { this.translator.translate(this.searchSettings.title).subscribe(function (result) { _this.searchSettings.title = result; }); } if (this.searchSettings.stateName) { this.buildDefaultOrStateSearchItem() .then(function (res) { if (res && res.id !== '') { _this.defaultItem = [res]; _this.whatsIcon(_this.defaultItem); } else { _this.showSearchIcons(); } }); } else { this.defaultItem = [{ id: '', text: '' }]; } } }, enumerable: true, configurable: true }); Object.defineProperty(SearchComponent.prototype, "ApplySearch", { set: /** * @private * @param {?} event * @return {?} */ function (event) { if (event) { this.saveToState(this.presetItem.id, this.typePreset).then(function (res) { }); } }, enumerable: true, configurable: true }); /** * @param {?} value * @return {?} */ SearchComponent.prototype.searchTextChanged = /** * @param {?} value * @return {?} */ function (value) { if (value && (value.length >= this.minNumberValue)) { /** @type {?} */ var self_1 = this; this.checkedsTextVersion = value; if (this.startTimerSearch) { clearTimeout(this.startTimerSearch); } this.startTimerSearch = setTimeout(function () { self_1.getSearch(value); }, this.timeDelay); } }; /** * @private * @param {?} value * @return {?} */ SearchComponent.prototype.getSearch = /** * @private * @param {?} value * @return {?} */ function (value) { var _this = this; this.hasLoading = true; this.suggestedList = new Array(); if (!value) { this.suggestedList = this.buildPresetsList(); this.hasLoading = false; } else { this.searchSettings.scopeSearch.search = value; /** @type {?} */ var searchJson = JSON.stringify(this.searchSettings.scopeSearch); /** @type {?} */ var encodedJson = window.btoa(encodeURIComponent(searchJson)); /** @type {?} */ var 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(function (data) { if (data) { /** @type {?} */ var response_1 = data; /** @type {?} */ var autocompleteCountString_1; _this.translator.translate('autocompleteCountString', { value: '\<b>' + (response_1.count - _this.searchSettings.scopeSearch.pageentries) + '\</b>' }).subscribe(function (res) { autocompleteCountString_1 = res; _this.suggestedList = (_this.checkedsTextVersion === ('' + response_1.search)) ? _this.buildAutoCompleteList(response_1) : new Array(); _this.searchSettings.autocompleteCountSettings = _this.searchSettings.autocompleteCountSettings || new AutocompleteCountSettings(); if (response_1.count > _this.searchSettings.scopeSearch.pageentries) { _this.searchSettings.autocompleteCountSettings.hasAutocompleteCount = true; _this.searchSettings.autocompleteCountSettings.autocompleteCountString = autocompleteCountString_1; } 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; }, function (err) { _this.hasLoading = false; console.error(err); }); } }; /** * @param {?} event * @return {?} */ SearchComponent.prototype.selectedItem = /** * @param {?} event * @return {?} */ function (event) { if (event.id === 'noclick') { return; } /** @type {?} */ var 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 {?} */ SearchComponent.prototype.onSearchPrepared = /** * @param {?} event * @return {?} */ function (event) { var _this = this; if (event && this.searchSettings.stateName) { this.defaultItem = [{ id: event, text: event }]; this.showCloseIcons(); this.saveToState(event, this.typeString).then(function (res) { _this.searchPrepared.emit(event); }); } }; /** * @param {?} event * @return {?} */ SearchComponent.prototype.removed = /** * @param {?} event * @return {?} */ function (event) { var _this = this; if (this.searchSettings.stateName) { this.buildDefaultSearchItem().then(function (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 {?} */ SearchComponent.prototype.whatsIcon = /** * @private * @param {?} selectedItem * @return {?} */ function (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 {?} */ SearchComponent.prototype.showSearchIcons = /** * @private * @return {?} */ function () { this.hasSearchIcons = true; this.hasCloseIcons = false; }; /** * @private * @return {?} */ SearchComponent.prototype.showCloseIcons = /** * @private * @return {?} */ function () { this.hasSearchIcons = false; this.hasCloseIcons = true; }; /** * @return {?} */ SearchComponent.prototype.closed = /** * @return {?} */ function () { 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 {?} */ SearchComponent.prototype.opened = /** * @return {?} */ function () { 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 = function () { return [ { type: HttpService }, { type: TranslationService } ]; }; SearchComponent.propDecorators = { InitSearch: [{ type: Input }], ApplySearch: [{ type: Input }], editInputValue: [{ type: Input }], searchPrepared: [{ type: Output }], goUrl: [{ type: Output }], goSearchForPreset: [{ type: Output }] }; return SearchComponent; }(BaseSearchComponent)); export { SearchComponent }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2Fpci1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9zZWFyY2gvc2VhcmNoLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQStCLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXhFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRXhGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUcxRDtJQU1xQywyQ0FBbUI7SUFtRHBELHlCQUNJLFdBQXdCLEVBQ3hCLFVBQThCO1FBRmxDLFlBR0ksa0JBQU0sVUFBVSxFQUFFLFdBQVcsQ0FBQyxTQUVqQztRQXBCUSxvQkFBYyxHQUFHLElBQUksQ0FBQztRQUVyQixvQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDcEMsV0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDM0IsdUJBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUt6QyxlQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLG9CQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLG9CQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLG1CQUFhLEdBQUcsS0FBSyxDQUFDO1FBT2xCLEtBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxLQUFLLEVBQXVCLENBQUM7O0lBQ3hELENBQUM7SUF0REQsc0JBQ1csdUNBQVU7Ozs7O1FBRHJCLFVBQ3NCLElBQXFCO1lBRDNDLGlCQXdCQztZQXRCRyxJQUFJ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OEM7O0lBQzlDLGdDQUFxQzs7SUFDckMsNENBQWlEOztJQUVqRCx3Q0FBMEM7O0lBQzFDLHNDQUF3Qzs7Ozs7SUFDeEMsMkNBQThCOzs7OztJQUM5QixvQ0FBeUI7Ozs7O0lBQ3pCLHlDQUEyQjs7SUFDM0IseUNBQXNCOztJQUN0Qix3Q0FBc0I7Ozs7O0lBQ3RCLDhDQUFvQzs7Ozs7SUFDcEMscUNBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVmlld0VuY2Fwc3VsYXRpb24sIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IElTZWFyY2hTZXR0aW5ncyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvaXNlYXJjaC1zZXR0aW5ncyc7XHJcbmltcG9ydCB7IEF1dG9jb21wbGV0ZUNvdW50U2V0dGluZ3MgfSBmcm9tICcuLi8uLi9lbnRpdGllcy9hdXRvLWNvbXBsZXRlLWNvdW50LXNldHRpbmdzJztcclxuaW1wb3J0IHsgSVByZXNldCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvaXByZXNldCc7XHJcbmltcG9ydCB7IEJhc2VTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuL2Jhc2Utc2VhcmNoLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSVNpbXBsZU5nU2VsZWN0SXRlbSB9IGZyb20gJy4uL25nMi1zZWxlY3QtY3VzdG9tL3NlbGVjdC5tb2R1bGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2Fpci1zZWFyY2gnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICdzZWFyY2guY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJ3NlYXJjaC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgU2VhcmNoQ29tcG9uZW50IGV4dGVuZHMgQmFzZVNlYXJjaENvbXBvbmVudCB7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgSW5pdFNlYXJjaChkYXRhOiBJU2VhcmNoU2V0dGluZ3MpIHtcclxuICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFNldHRpbmdzID0gZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5zdWdnZXN0ZWRMaXN0ID0gdGhpcy5idWlsZFByZXNldHNMaXN0KCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFNldHRpbmdzLnRpdGxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0b3IudHJhbnNsYXRlKHRoaXMuc2VhcmNoU2V0dGluZ3MudGl0bGUpLnN1YnNjcmliZSgocmVzdWx0OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNldHRpbmdzLnRpdGxlID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoU2V0dGluZ3Muc3RhdGVOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkRGVmYXVsdE9yU3RhdGVTZWFyY2hJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzOiBJU2ltcGxlTmdTZWxlY3RJdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmlkICE9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0SXRlbSA9IFtyZXNdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53aGF0c0ljb24odGhpcy5kZWZhdWx0SXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTZWFyY2hJY29ucygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRJdGVtID0gW3sgaWQ6ICcnLCB0ZXh0OiAnJyB9XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHJpdmF0ZSBzZXQgQXBwbHlTZWFyY2goZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIGlmIChldmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnNhdmVUb1N0YXRlKHRoaXMucHJlc2V0SXRlbS5pZCwgdGhpcy50eXBlUHJlc2V0KS50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgZWRpdElucHV0VmFsdWUgPSB0cnVlO1xyXG5cclxuICAgIEBPdXRwdXQoKSBzZWFyY2hQcmVwYXJlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBnb1VybCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBnb1NlYXJjaEZvclByZXNldCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgICBzdWdnZXN0ZWRMaXN0OiBBcnJheTxJU2ltcGxlTmdTZWxlY3RJdGVtPjtcclxuICAgIGRlZmF1bHRJdGVtOiBBcnJheTxJU2ltcGxlTmdTZWxlY3RJdGVtPjtcclxuICAgIHByaXZhdGUgc3RhcnRUaW1lclNlYXJjaDogYW55O1xyXG4gICAgcHJpdmF0ZSB0aW1lRGVsYXkgPSAyMDAwO1xyXG4gICAgcHJpdmF0ZSBtaW5OdW1iZXJWYWx1ZSA9IDM7XHJcbiAgICBoYXNTZWFyY2hJY29ucyA9IHRydWU7XHJcbiAgICBoYXNDbG9zZUljb25zID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGNoZWNrZWRzVGV4dFZlcnNpb246IHN0cmluZztcclxuICAgIHByaXZhdGUgcHJlc2V0SXRlbTogSVByZXNldDtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGh0dHBTZXJ2aWNlOiBIdHRwU2VydmljZSxcclxuICAgICAgICB0cmFuc2xhdG9yOiBUcmFuc2xhdGlvblNlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcih0cmFuc2xhdG9yLCBodHRwU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0SXRlbSA9IG5ldyBBcnJheTxJU2ltcGxlTmdTZWxlY3RJdGVtPigpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaFRleHRDaGFuZ2VkKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodmFsdWUgJiYgKHZhbHVlLmxlbmd0aCA+PSB0aGlzLm1pbk51bWJlclZhbHVlKSkge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgdGhpcy5jaGVja2Vkc1RleHRWZXJzaW9uID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXJ0VGltZXJTZWFyY2gpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN0YXJ0VGltZXJTZWFyY2gpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lclNlYXJjaCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5nZXRTZWFyY2godmFsdWUpO1xyXG4gICAgICAgICAgICB9LCB0aGlzLnRpbWVEZWxheSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0U2VhcmNoKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmhhc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3VnZ2VzdGVkTGlzdCA9IG5ldyBBcnJheTxJU2ltcGxlTmdTZWxlY3RJdGVtPigpO1xyXG4gICAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zdWdnZXN0ZWRMaXN0ID0gdGhpcy5idWlsZFByZXNldHNMaXN0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU2V0dGluZ3Muc2NvcGVTZWFyY2guc2VhcmNoID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaEpzb24gPSBKU09OLnN0cmluZ2lmeSh0aGlzLnNlYXJjaFNldHRpbmdzLnNjb3BlU2VhcmNoKTtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZEpzb24gPSB3aW5kb3cuYnRvYShlbmNvZGVVUklDb21wb25lbnQoc2VhcmNoSnNvbikpO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZSA9IHRoaXMuc2VhcmNoU2V0dGluZ3MuaHR0cE1ldGhvZCA9PT0gJ0dFVCdcclxuICAgICAgICAgICAgICAgID8gdGhpcy5odHRwU2VydmljZS5odHRwR2V0KHRoaXMuc2VhcmNoU2V0dGluZ3Muc2VhcmNoVXJsICsgJz9zZWFyY2hRdWVyeT0nICsgZW5jb2RlZEpzb24gICkgLy8gbWF4aW11bSAyMDQ4IHN5bWJvbHNcclxuICAgICAgICAgICAgICAgIDogdGhpcy5odHRwU2VydmljZS5odHRwUG9zdCh0aGlzLnNlYXJjaFNldHRpbmdzLnNlYXJjaFVybCwgdGhpcy5zZWFyY2hTZXR0aW5ncy5zY29wZVNlYXJjaCk7XHJcblxyXG4gICAgICAgICAgICBvYnNlcnZhYmxlXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhdXRvY29tcGxldGVDb3VudFN0cmluZzogc3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0b3IudHJhbnNsYXRlKCdhdXRvY29tcGxldGVDb3VudFN0cmluZycsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnXFw8Yj4nICsgKHJlc3BvbnNlLmNvdW50IC0gdGhpcy5zZWFyY2hTZXR0aW5ncy5zY29wZVNlYXJjaC5wYWdlZW50cmllcykgKyAnXFw8L2I+J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5zdWJzY3JpYmUoKHJlczogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGVDb3VudFN0cmluZyA9IHJlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Z2dlc3RlZExpc3QgPSAodGhpcy5jaGVja2Vkc1RleHRWZXJzaW9uID09PSAoJycgKyByZXNwb25zZS5zZWFyY2gpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuYnVpbGRBdXRvQ29tcGxldGVMaXN0KHJlc3BvbnNlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBBcnJheTxJU2ltcGxlTmdTZWxlY3RJdGVtPigpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNldHRpbmdzLmF1dG9jb21wbGV0ZUNvdW50U2V0dGluZ3MgPSB0aGlzLnNlYXJjaFNldHRpbmdzLmF1dG9jb21wbGV0ZUNvdW50U2V0dGluZ3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbmV3IEF1dG9jb21wbGV0ZUNvdW50U2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuY291bnQgPiB0aGlzLnNlYXJjaFNldHRpbmdzLnNjb3BlU2VhcmNoLnBhZ2VlbnRyaWVzKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNldHRpbmdzLmF1dG9jb21wbGV0ZUNvdW50U2V0dGluZ3MuaGFzQXV0b2NvbXBsZXRlQ291bnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNldHRpbmdzLmF1dG9jb21wbGV0ZUNvdW50U2V0dGluZ3MuYXV0b2NvbXBsZXRlQ291bnRTdHJpbmcgPSBhdXRvY29tcGxldGVDb3VudFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNldHRpbmdzLmF1dG9jb21wbGV0ZUNvdW50U2V0dGluZ3MuaGFzQXV0b2NvbXBsZXRlQ291bnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXR0aW5ncy5hdXRvY29tcGxldGVDb3VudFNldHRpbmdzID0gdGhpcy5zZWFyY2hTZXR0aW5ncy5hdXRvY29tcGxldGVDb3VudFNldHRpbmdzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5ldyBBdXRvY29tcGxldGVDb3VudFNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGVkTGlzdCA9IHRoaXMuYnVpbGRFbXB0eUxpc3QoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXR0aW5ncy5hdXRvY29tcGxldGVDb3VudFNldHRpbmdzLmhhc0F1dG9jb21wbGV0ZUNvdW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWRJdGVtKGV2ZW50OiBJU2ltcGxlTmdTZWxlY3RJdGVtKSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmlkID09PSAnbm9jbGljaycpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKF8uZmluZEluZGV4KHRoaXMuc2VhcmNoU2V0dGluZ3MucHJlc2V0TGlzdCxcclxuICAgICAgICAgICAgZnVuY3Rpb24gKHJvdykge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5wcmVzZXRJdGVtID0gcm93O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvdy5pZCA9PT0gZXZlbnQuaWQ7XHJcbiAgICAgICAgICAgIH0pID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy53aGF0c0ljb24oW3RoaXMucHJlc2V0SXRlbV0pO1xyXG4gICAgICAgICAgICB0aGlzLmdvU2VhcmNoRm9yUHJlc2V0LmVtaXQoXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQcmVzZXQ6IHRoaXMucHJlc2V0SXRlbSxcclxuICAgICAgICAgICAgICAgICAgICBpc0NoYW5nZVByZXNldDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBpc0NsZWFyZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nb1VybC5lbWl0KGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25TZWFyY2hQcmVwYXJlZChldmVudDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGV2ZW50ICYmIHRoaXMuc2VhcmNoU2V0dGluZ3Muc3RhdGVOYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdEl0ZW0gPSBbe1xyXG4gICAgICAgICAgICAgICAgaWQ6IGV2ZW50LFxyXG4gICAgICAgICAgICAgICAgdGV4dDogZXZlbnRcclxuICAgICAgICAgICAgfV07XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0Nsb3NlSWNvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5zYXZlVG9TdGF0ZShldmVudCwgdGhpcy50eXBlU3RyaW5nKS50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hQcmVwYXJlZC5lbWl0KGV2ZW50KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZWQoZXZlbnQ6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFNldHRpbmdzLnN0YXRlTmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmJ1aWxkRGVmYXVsdFNlYXJjaEl0ZW0oKS50aGVuKChyZXM6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0SXRlbSA9IFt7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMuc2VhcmNoU2V0dGluZ3MuZGVmYXVsdFNlYXJjaFZhbHVlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMuc2VhcmNoU2V0dGluZ3MuZGVmYXVsdFNlYXJjaFZhbHVlLnRleHRcclxuICAgICAgICAgICAgICAgIH1dO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdWdnZXN0ZWRMaXN0ID0gbmV3IEFycmF5PElTaW1wbGVOZ1NlbGVjdEl0ZW0+KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1Z2dlc3RlZExpc3QgPSB0aGlzLmJ1aWxkUHJlc2V0c0xpc3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMud2hhdHNJY29uKHRoaXMuZGVmYXVsdEl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nb1NlYXJjaEZvclByZXNldC5lbWl0KFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQcmVzZXQ6IHRoaXMuc2VhcmNoU2V0dGluZ3MuZGVmYXVsdFNlYXJjaFZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NoYW5nZVByZXNldDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2xlYXJlZDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHdoYXRzSWNvbihzZWxlY3RlZEl0ZW06IEFycmF5PElTaW1wbGVOZ1NlbGVjdEl0ZW0+KSB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkSXRlbVswXSAmJiBzZWxlY3RlZEl0ZW1bMF0uaWQgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIChfLmZpbmRJbmRleCh0aGlzLnNlYXJjaFNldHRpbmdzLnByZXNldExpc3QsXHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAocm93KSB7IHJldHVybiByb3cuaWQgPT09IHNlbGVjdGVkSXRlbVswXS5pZDsgfSkgPj0gMClcclxuICAgICAgICAgICAgICAgID8gdGhpcy5zaG93U2VhcmNoSWNvbnMoKVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNob3dDbG9zZUljb25zKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q2xvc2VJY29ucygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNob3dTZWFyY2hJY29ucygpIHtcclxuICAgICAgICB0aGlzLmhhc1NlYXJjaEljb25zID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmhhc0Nsb3NlSWNvbnMgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNob3dDbG9zZUljb25zKCkge1xyXG4gICAgICAgIHRoaXMuaGFzU2VhcmNoSWNvbnMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmhhc0Nsb3NlSWNvbnMgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlZCgpIHtcclxuICAgICAgICB0aGlzLmhhc0Vycm9yID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zdWdnZXN0ZWRMaXN0ID0gbmV3IEFycmF5PElTaW1wbGVOZ1NlbGVjdEl0ZW0+KCk7XHJcbiAgICAgICAgdGhpcy5zdWdnZXN0ZWRMaXN0ID0gdGhpcy5idWlsZFByZXNldHNMaXN0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoU2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXR0aW5ncy5hdXRvY29tcGxldGVDb3VudFNldHRpbmdzID0gdGhpcy5zZWFyY2hTZXR0aW5ncy5hdXRvY29tcGxldGVDb3VudFNldHRpbmdzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5ldyBBdXRvY29tcGxldGVDb3VudFNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU2V0dGluZ3MuYXV0b2NvbXBsZXRlQ291bnRTZXR0aW5ncy5oYXNBdXRvY29tcGxldGVDb3VudCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbmVkKCkge1xyXG4gICAgICAgIHRoaXMuc3VnZ2VzdGVkTGlzdCA9IG5ldyBBcnJheTxJU2ltcGxlTmdTZWxlY3RJdGVtPigpO1xyXG4gICAgICAgIHRoaXMuc3VnZ2VzdGVkTGlzdCA9IHRoaXMuYnVpbGRQcmVzZXRzTGlzdCgpO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=