UNPKG

@alfresco/adf-content-services

Version:
153 lines 22 kB
/*! * @license * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { SearchService } from '../services/search.service'; import { Component, ContentChild, ElementRef, EventEmitter, Input, Output, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core'; import { Subject } from 'rxjs'; import { debounceTime } from 'rxjs/operators'; import { CommonModule } from '@angular/common'; import { TranslateModule } from '@ngx-translate/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import * as i0 from "@angular/core"; import * as i1 from "../services/search.service"; import * as i2 from "@angular/common"; import * as i3 from "@ngx-translate/core"; export class SearchComponent { /** CSS class for display. */ // eslint-disable-next-line @angular-eslint/no-input-rename set classList(classList) { if (classList?.length) { classList.split(' ').forEach((className) => (this._classList[className.trim()] = true)); this._elementRef.nativeElement.className = ''; } } get isOpen() { return this._isOpen && this.showPanel; } set isOpen(value) { this._isOpen = value; } constructor(searchService, _elementRef) { this.searchService = searchService; this._elementRef = _elementRef; /** Function that maps an option's value to its display value in the trigger. */ this.displayWith = null; /** Maximum number of results to show in the search. */ this.maxResults = 20; /** Number of results to skip from the results pagination. */ this.skipResults = 0; /** * Search term to use when executing the search. Updating this value will * run a new search and update the results. */ this.searchTerm = ''; /** Emitted when search results have fully loaded. */ this.resultLoaded = new EventEmitter(); /** Emitted when an error occurs. */ this.error = new EventEmitter(); this.showPanel = false; this._isOpen = false; this.keyPressedStream = new Subject(); this._classList = {}; this.keyPressedStream.pipe(debounceTime(200), takeUntilDestroyed()).subscribe((searchedWord) => { this.loadSearchResults(searchedWord); }); searchService.dataLoaded.pipe(takeUntilDestroyed()).subscribe((nodePaging) => this.onSearchDataLoaded(nodePaging), (error) => this.onSearchDataError(error)); } ngAfterContentInit() { this.setVisibility(); } ngOnChanges(changes) { if (changes.searchTerm?.currentValue) { this.loadSearchResults(changes.searchTerm.currentValue); } } resetResults() { this.cleanResults(); this.setVisibility(); } reload() { this.loadSearchResults(this.searchTerm); } cleanResults() { if (this.results) { this.results = {}; } } loadSearchResults(searchTerm) { this.resetResults(); if (searchTerm) { this.searchService.search(searchTerm, this.maxResults, this.skipResults).subscribe((result) => this.onSearchDataLoaded(result), (err) => this.onSearchDataError(err)); } else { this.cleanResults(); } } onSearchDataLoaded(resultSetPaging) { if (resultSetPaging) { this.results = resultSetPaging; this.resultLoaded.emit(this.results); this.isOpen = true; this.setVisibility(); } } onSearchDataError(error) { if (error?.status !== 400) { this.results = null; this.error.emit(error); } } hidePanel() { if (this.isOpen) { this._classList['adf-search-show'] = false; this._classList['adf-search-hide'] = true; this.isOpen = false; } } setVisibility() { this.showPanel = !!this.results && !!this.results.list; this._classList['adf-search-show'] = this.showPanel; this._classList['adf-search-hide'] = !this.showPanel; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SearchComponent, deps: [{ token: i1.SearchService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: SearchComponent, isStandalone: true, selector: "adf-search", inputs: { displayWith: "displayWith", maxResults: "maxResults", skipResults: "skipResults", searchTerm: "searchTerm", classList: ["class", "classList"] }, outputs: { resultLoaded: "resultLoaded", error: "error" }, host: { classAttribute: "adf-search" }, queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], viewQueries: [{ propertyName: "panel", first: true, predicate: ["panel"], descendants: true, static: true }], exportAs: ["searchAutocomplete"], usesOnChanges: true, ngImport: i0, template: "<div role=\"listbox\" id=\"adf-search-results-content\" title=\"{{'PERMISSION_MANAGER.ADD-PERMISSION.USER-GROUP-LIST' | translate}}\"\n [ngClass]=\"_classList\" #panel>\n <ng-template\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"{ $implicit: results }\" />\n</div>\n", styles: [".adf-search-hide{visibility:hidden}.adf-search-show{visibility:visible}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SearchComponent, decorators: [{ type: Component, args: [{ selector: 'adf-search', standalone: true, imports: [CommonModule, TranslateModule], encapsulation: ViewEncapsulation.None, preserveWhitespaces: false, exportAs: 'searchAutocomplete', host: { class: 'adf-search' }, template: "<div role=\"listbox\" id=\"adf-search-results-content\" title=\"{{'PERMISSION_MANAGER.ADD-PERMISSION.USER-GROUP-LIST' | translate}}\"\n [ngClass]=\"_classList\" #panel>\n <ng-template\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"{ $implicit: results }\" />\n</div>\n", styles: [".adf-search-hide{visibility:hidden}.adf-search-show{visibility:visible}\n"] }] }], ctorParameters: () => [{ type: i1.SearchService }, { type: i0.ElementRef }], propDecorators: { panel: [{ type: ViewChild, args: ['panel', { static: true }] }], template: [{ type: ContentChild, args: [TemplateRef] }], displayWith: [{ type: Input }], maxResults: [{ type: Input }], skipResults: [{ type: Input }], searchTerm: [{ type: Input }], classList: [{ type: Input, args: ['class'] }], resultLoaded: [{ type: Output }], error: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvc2VhcmNoL2NvbXBvbmVudHMvc2VhcmNoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvc2VhcmNoL2NvbXBvbmVudHMvc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7QUFhaEUsTUFBTSxPQUFPLGVBQWU7SUEwQnhCLDZCQUE2QjtJQUM3QiwyREFBMkQ7SUFDM0QsSUFDSSxTQUFTLENBQUMsU0FBaUI7UUFDM0IsSUFBSSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDcEIsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFT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LFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN6RCxDQUFDOzhHQXJJUSxlQUFlO2tHQUFmLGVBQWUsMFdBSVYsV0FBVyxxTkN2RDdCLG1UQU1BLGtJRHFDYyxZQUFZLG1TQUFFLGVBQWU7OzJGQVE5QixlQUFlO2tCQVgzQixTQUFTOytCQUNJLFlBQVksY0FDVixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLGlCQUd6QixpQkFBaUIsQ0FBQyxJQUFJLHVCQUNoQixLQUFLLFlBQ2hCLG9CQUFvQixRQUN4QixFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7MkdBSTdCLEtBQUs7c0JBREosU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUlwQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsV0FBVztnQkFLekIsV0FBVztzQkFEVixLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFLTixXQUFXO3NCQURWLEtBQUs7Z0JBUU4sVUFBVTtzQkFEVCxLQUFLO2dCQU1GLFNBQVM7c0JBRFosS0FBSzt1QkFBQyxPQUFPO2dCQVVkLFlBQVk7c0JBRFgsTUFBTTtnQkFLUCxLQUFLO3NCQURKLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IFNlYXJjaFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zZWFyY2guc2VydmljZSc7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm9kZVBhZ2luZywgUmVzdWx0U2V0UGFnaW5nIH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTZWFyY2hDb21wb25lbnRJbnRlcmZhY2UgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi1zZWFyY2gnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgVHJhbnNsYXRlTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zZWFyY2guY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICAgIGV4cG9ydEFzOiAnc2VhcmNoQXV0b2NvbXBsZXRlJyxcbiAgICBob3N0OiB7IGNsYXNzOiAnYWRmLXNlYXJjaCcgfVxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hDb21wb25lbnQgaW1wbGVtZW50cyBTZWFyY2hDb21wb25lbnRJbnRlcmZhY2UsIEFmdGVyQ29udGVudEluaXQsIE9uQ2hhbmdlcyB7XG4gICAgQFZpZXdDaGlsZCgncGFuZWwnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHBhbmVsOiBFbGVtZW50UmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZilcbiAgICB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBGdW5jdGlvbiB0aGF0IG1hcHMgYW4gb3B0aW9uJ3MgdmFsdWUgdG8gaXRzIGRpc3BsYXkgdmFsdWUgaW4gdGhlIHRyaWdnZXIuICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5V2l0aDogKCh2YWx1ZTogYW55KSA9PiBzdHJpbmcpIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogTWF4aW11bSBudW1iZXIgb2YgcmVzdWx0cyB0byBzaG93IGluIHRoZSBzZWFyY2guICovXG4gICAgQElucHV0KClcbiAgICBtYXhSZXN1bHRzOiBudW1iZXIgPSAyMDtcblxuICAgIC8qKiBOdW1iZXIgb2YgcmVzdWx0cyB0byBza2lwIGZyb20gdGhlIHJlc3VsdHMgcGFnaW5hdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNraXBSZXN1bHRzOiBudW1iZXIgPSAwO1xuXG4gICAgLyoqXG4gICAgICogU2VhcmNoIHRlcm0gdG8gdXNlIHdoZW4gZXhlY3V0aW5nIHRoZSBzZWFyY2guIFVwZGF0aW5nIHRoaXMgdmFsdWUgd2lsbFxuICAgICAqIHJ1biBhIG5ldyBzZWFyY2ggYW5kIHVwZGF0ZSB0aGUgcmVzdWx0cy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlYXJjaFRlcm06IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIENTUyBjbGFzcyBmb3IgZGlzcGxheS4gKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxuICAgIEBJbnB1dCgnY2xhc3MnKVxuICAgIHNldCBjbGFzc0xpc3QoY2xhc3NMaXN0OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGNsYXNzTGlzdD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjbGFzc0xpc3Quc3BsaXQoJyAnKS5mb3JFYWNoKChjbGFzc05hbWUpID0+ICh0aGlzLl9jbGFzc0xpc3RbY2xhc3NOYW1lLnRyaW0oKV0gPSB0cnVlKSk7XG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1lID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHNlYXJjaCByZXN1bHRzIGhhdmUgZnVsbHkgbG9hZGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlc3VsdExvYWRlZDogRXZlbnRFbWl0dGVyPE5vZGVQYWdpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMuICovXG4gICAgQE91dHB1dCgpXG4gICAgZXJyb3I6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgc2hvd1BhbmVsOiBib29sZWFuID0gZmFsc2U7XG4gICAgcmVzdWx0czogTm9kZVBhZ2luZztcblxuICAgIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc09wZW4gJiYgdGhpcy5zaG93UGFuZWw7XG4gICAgfVxuXG4gICAgc2V0IGlzT3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9pc09wZW4gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBfaXNPcGVuOiBib29sZWFuID0gZmFsc2U7XG4gICAga2V5UHJlc3NlZFN0cmVhbSA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgICBfY2xhc3NMaXN0OiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VhcmNoU2VydmljZTogU2VhcmNoU2VydmljZSwgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgICAgICB0aGlzLmtleVByZXNzZWRTdHJlYW0ucGlwZShkZWJvdW5jZVRpbWUoMjAwKSwgdGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoc2VhcmNoZWRXb3JkKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRTZWFyY2hSZXN1bHRzKHNlYXJjaGVkV29yZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNlYXJjaFNlcnZpY2UuZGF0YUxvYWRlZC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAobm9kZVBhZ2luZykgPT4gdGhpcy5vblNlYXJjaERhdGFMb2FkZWQobm9kZVBhZ2luZyksXG4gICAgICAgICAgICAoZXJyb3IpID0+IHRoaXMub25TZWFyY2hEYXRhRXJyb3IoZXJyb3IpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLnNldFZpc2liaWxpdHkoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLnNlYXJjaFRlcm0/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkU2VhcmNoUmVzdWx0cyhjaGFuZ2VzLnNlYXJjaFRlcm0uY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXNldFJlc3VsdHMoKSB7XG4gICAgICAgIHRoaXMuY2xlYW5SZXN1bHRzKCk7XG4gICAgICAgIHRoaXMuc2V0VmlzaWJpbGl0eSgpO1xuICAgIH1cblxuICAgIHJlbG9hZCgpIHtcbiAgICAgICAgdGhpcy5sb2FkU2VhcmNoUmVzdWx0cyh0aGlzLnNlYXJjaFRlcm0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYW5SZXN1bHRzKCkge1xuICAgICAgICBpZiAodGhpcy5yZXN1bHRzKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSB7fTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZFNlYXJjaFJlc3VsdHMoc2VhcmNoVGVybT86IHN0cmluZykge1xuICAgICAgICB0aGlzLnJlc2V0UmVzdWx0cygpO1xuICAgICAgICBpZiAoc2VhcmNoVGVybSkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaChzZWFyY2hUZXJtLCB0aGlzLm1heFJlc3VsdHMsIHRoaXMuc2tpcFJlc3VsdHMpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAocmVzdWx0KSA9PiB0aGlzLm9uU2VhcmNoRGF0YUxvYWRlZChyZXN1bHQpLFxuICAgICAgICAgICAgICAgIChlcnIpID0+IHRoaXMub25TZWFyY2hEYXRhRXJyb3IoZXJyKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYW5SZXN1bHRzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNlYXJjaERhdGFMb2FkZWQocmVzdWx0U2V0UGFnaW5nOiBSZXN1bHRTZXRQYWdpbmcpIHtcbiAgICAgICAgaWYgKHJlc3VsdFNldFBhZ2luZykge1xuICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gcmVzdWx0U2V0UGFnaW5nIGFzIE5vZGVQYWdpbmc7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdExvYWRlZC5lbWl0KHRoaXMucmVzdWx0cyk7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNldFZpc2liaWxpdHkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2VhcmNoRGF0YUVycm9yKGVycm9yOiB7IHN0YXR1czogbnVtYmVyIH0pIHtcbiAgICAgICAgaWYgKGVycm9yPy5zdGF0dXMgIT09IDQwMCkge1xuICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IuZW1pdChlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoaWRlUGFuZWwoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5fY2xhc3NMaXN0WydhZGYtc2VhcmNoLXNob3cnXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2xhc3NMaXN0WydhZGYtc2VhcmNoLWhpZGUnXSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0VmlzaWJpbGl0eSgpIHtcbiAgICAgICAgdGhpcy5zaG93UGFuZWwgPSAhIXRoaXMucmVzdWx0cyAmJiAhIXRoaXMucmVzdWx0cy5saXN0O1xuICAgICAgICB0aGlzLl9jbGFzc0xpc3RbJ2FkZi1zZWFyY2gtc2hvdyddID0gdGhpcy5zaG93UGFuZWw7XG4gICAgICAgIHRoaXMuX2NsYXNzTGlzdFsnYWRmLXNlYXJjaC1oaWRlJ10gPSAhdGhpcy5zaG93UGFuZWw7XG4gICAgfVxufVxuIiwiPGRpdiByb2xlPVwibGlzdGJveFwiIGlkPVwiYWRmLXNlYXJjaC1yZXN1bHRzLWNvbnRlbnRcIiB0aXRsZT1cInt7J1BFUk1JU1NJT05fTUFOQUdFUi5BREQtUEVSTUlTU0lPTi5VU0VSLUdST1VQLUxJU1QnIHwgdHJhbnNsYXRlfX1cIlxuICAgIFtuZ0NsYXNzXT1cIl9jbGFzc0xpc3RcIiAjcGFuZWw+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiByZXN1bHRzIH1cIiAvPlxuPC9kaXY+XG4iXX0=