UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

200 lines 26.9 kB
import { NAE_SEARCH_COMPONENT_CONFIGURATION } from '../models/component-configuration/search-component-configuration-injection-token'; import { Component, EventEmitter, Inject, Input, Optional, Output } from '@angular/core'; import { SearchMode } from '../models/component-configuration/search-mode'; import { NAE_SEARCH_CATEGORIES } from '../category-factory/search-categories-injection-token'; import { NAE_FILTERS_FILTER } from '../../filter/models/filters-filter-injection-token'; import { NAE_NAVIGATION_ITEM_TASK_DATA } from '../../navigation/model/filter-case-injection-token'; import * as i0 from "@angular/core"; import * as i1 from "../search-service/search.service"; import * as i2 from "../../logger/services/logger.service"; import * as i3 from "../../dialog/services/dialog.service"; import * as i4 from "@ngx-translate/core"; import * as i5 from "../../filter/user-filters.service"; import * as i6 from "../../allowed-nets/services/allowed-nets.service"; import * as i7 from "../../user/services/view-id.service"; import * as i8 from "../../filter/models/filter"; /** * A universal search component that can be used to interactively create search predicates for anything with supported categories. * * This component is responsible for the interactive creation of an AND {@link ClausePredicate} object instance. * The nested Predicates are OR {@link ClausePredicate} instances created by {@link AbstractSearchClauseComponent}. * * Search categories must be provided by the {@link NAE_SEARCH_CATEGORIES} injection token. * Default factory methods for [task]{@link defaultTaskSearchCategoriesFactory} and * [case]{@link defaultCaseSearchCategoriesFactory} search categories exist. See their documentation for more information. * * The search component's visuals can be configured either by the {@link NAE_SEARCH_COMPONENT_CONFIGURATION} injection token, * or by the appropriate component inputs. The injection token configuration takes precedence over the inputs if both are present. */ export class AbstractSearchComponent { _searchService; _logger; _dialogService; _translate; _userFilterService; _allowedNetsService; _viewIdService; _searchCategories; _configuration; _filtersFilter; _navigationItemTaskData; advancedSearchDisplayed; _showSearchIcon = true; _showSearchToggleButton = true; _showAdvancedSearchHelp = true; _showSaveFilterButton = true; _showLoadFilterButton = true; _initialSearchMode = SearchMode.FULLTEXT; disabled; /** * Set data request body, that is sent to the filter in addition to the default body. * The default body is applied first and can be overridden by this argument. */ additionalFilterData = {}; /** * The emitted data contains the filter case object */ filterLoaded = new EventEmitter(); /** * The emitted data contains only the saved case's ID */ filterSaved = new EventEmitter(); constructor(_searchService, _logger, _dialogService, _translate, _userFilterService, _allowedNetsService, _viewIdService, _searchCategories, _configuration, _filtersFilter = null, _navigationItemTaskData = null) { this._searchService = _searchService; this._logger = _logger; this._dialogService = _dialogService; this._translate = _translate; this._userFilterService = _userFilterService; this._allowedNetsService = _allowedNetsService; this._viewIdService = _viewIdService; this._searchCategories = _searchCategories; this._configuration = _configuration; this._filtersFilter = _filtersFilter; this._navigationItemTaskData = _navigationItemTaskData; if (this._configuration === null) { this._configuration = {}; } } ngOnInit() { this.advancedSearchDisplayed = this.initialSearchMode === SearchMode.ADVANCED; } get showSearchIcon() { return this._configuration.showSearchIcon ?? this._showSearchIcon; } set showSearchIcon(value) { this._showSearchIcon = value; } get showAdvancedSearchHelp() { return this._configuration.showAdvancedSearchHelp ?? this._showAdvancedSearchHelp; } set showAdvancedSearchHelp(value) { this._showAdvancedSearchHelp = value; } get showSaveFilterButton() { return this._configuration.showSaveFilterButton ?? this._showSaveFilterButton; } set showSaveFilterButton(value) { this._showSaveFilterButton = value; } get showLoadFilterButton() { return this._configuration.showLoadFilterButton ?? this._showLoadFilterButton; } set showLoadFilterButton(value) { this._showLoadFilterButton = value; } get initialSearchMode() { return this._configuration.initialSearchMode ?? this._initialSearchMode; } set initialSearchMode(value) { this._initialSearchMode = value; } get showSearchToggleButton() { return this._configuration.showSearchToggleButton ?? this._showSearchToggleButton; } set showSearchToggleButton(value) { this._showSearchToggleButton = value; } hasPredicates() { return Array.from(this._searchService.rootPredicate.getPredicateMap().values()).some(value => value.isVisible); } toggleSearchMode() { if (this.advancedSearchDisplayed) { this._searchService.clearPredicates(); } else { this._searchService.clearFullTextFilter(); } this.advancedSearchDisplayed = !this.advancedSearchDisplayed; } showHelp() { this._dialogService.openAlertDialog(this._translate.instant('search.help.title'), this._translate.instant('search.help.text')); } /** * The saved filter data are emitted into the [filterSaved]{@link AbstractSearchComponent#filterSaved} `EventEmitter` */ saveFilter() { this._userFilterService.save(this._searchService, this._allowedNetsService.allowedNetsIdentifiers, this._searchCategories, this._viewIdService.viewId, this.additionalFilterData, this._configuration.saveFilterWithDefaultCategories ?? true, this._configuration.inheritAllowedNets ?? true, this._navigationItemTaskData).subscribe(savedFilterData => { if (savedFilterData) { this.filterSaved.emit(savedFilterData); } }); } /** * The loaded filter data are emitted into the [filterLoaded]{@link AbstractSearchComponent#filterLoaded} `EventEmitter` */ loadFilter() { this._userFilterService.load(this._searchService.filterType, this._filtersFilter ?? undefined).subscribe(savedFilterData => { if (savedFilterData) { this.filterLoaded.emit(savedFilterData); } }); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractSearchComponent, deps: [{ token: i1.SearchService }, { token: i2.LoggerService }, { token: i3.DialogService }, { token: i4.TranslateService }, { token: i5.UserFiltersService }, { token: i6.AllowedNetsService }, { token: i7.ViewIdService }, { token: NAE_SEARCH_CATEGORIES }, { token: NAE_SEARCH_COMPONENT_CONFIGURATION, optional: true }, { token: NAE_FILTERS_FILTER, optional: true }, { token: NAE_NAVIGATION_ITEM_TASK_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AbstractSearchComponent, selector: "ncc-abstract-search", inputs: { disabled: "disabled", additionalFilterData: "additionalFilterData", showSearchIcon: "showSearchIcon", showAdvancedSearchHelp: "showAdvancedSearchHelp", showSaveFilterButton: "showSaveFilterButton", showLoadFilterButton: "showLoadFilterButton", initialSearchMode: "initialSearchMode", showSearchToggleButton: "showSearchToggleButton" }, outputs: { filterLoaded: "filterLoaded", filterSaved: "filterSaved" }, ngImport: i0, template: '', isInline: true }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractSearchComponent, decorators: [{ type: Component, args: [{ selector: 'ncc-abstract-search', template: '' }] }], ctorParameters: () => [{ type: i1.SearchService }, { type: i2.LoggerService }, { type: i3.DialogService }, { type: i4.TranslateService }, { type: i5.UserFiltersService }, { type: i6.AllowedNetsService }, { type: i7.ViewIdService }, { type: Array, decorators: [{ type: Inject, args: [NAE_SEARCH_CATEGORIES] }] }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [NAE_SEARCH_COMPONENT_CONFIGURATION] }] }, { type: i8.Filter, decorators: [{ type: Optional }, { type: Inject, args: [NAE_FILTERS_FILTER] }] }, { type: Array, decorators: [{ type: Optional }, { type: Inject, args: [NAE_NAVIGATION_ITEM_TASK_DATA] }] }], propDecorators: { disabled: [{ type: Input }], additionalFilterData: [{ type: Input }], filterLoaded: [{ type: Output }], filterSaved: [{ type: Output }], showSearchIcon: [{ type: Input }], showAdvancedSearchHelp: [{ type: Input }], showSaveFilterButton: [{ type: Input }], showLoadFilterButton: [{ type: Input }], initialSearchMode: [{ type: Input }], showSearchToggleButton: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3Qtc2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvc2VhcmNoL3NlYXJjaC1jb21wb25lbnQvYWJzdHJhY3Qtc2VhcmNoLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSxrRkFBa0YsQ0FBQztBQUNwSSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQU8sTUFBTSxlQUFlLENBQUM7QUFFckcsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBR3pFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVEQUF1RCxDQUFDO0FBSTVGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBR3RGLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLG9EQUFvRCxDQUFDOzs7Ozs7Ozs7O0FBR2pHOzs7Ozs7Ozs7Ozs7R0FZRztBQUtILE1BQU0sT0FBZ0IsdUJBQXVCO0lBMkJUO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQytCO0lBQ3lCO0lBQ2hCO0lBQ1c7SUFuQzVFLHVCQUF1QixDQUFDO0lBRXZCLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDdkIsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO0lBQy9CLHVCQUF1QixHQUFHLElBQUksQ0FBQztJQUMvQixxQkFBcUIsR0FBRyxJQUFJLENBQUM7SUFDN0IscUJBQXFCLEdBQUcsSUFBSSxDQUFDO0lBQzdCLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7SUFFakMsUUFBUSxDQUFVO0lBQ2xDOzs7T0FHRztJQUNNLG9CQUFvQixHQUE2QixFQUFFLENBQUM7SUFFN0Q7O09BRUc7SUFDTyxZQUFZLEdBQXNDLElBQUksWUFBWSxFQUFFLENBQUM7SUFDL0U7O09BRUc7SUFDTyxXQUFXLEdBQXNDLElBQUksWUFBWSxFQUFFLENBQUM7SUFFOUUsWUFBZ0MsY0FBNkIsRUFDN0IsT0FBc0IsRUFDdEIsY0FBNkIsRUFDN0IsVUFBNEIsRUFDNUIsa0JBQXNDLEVBQ3RDLG1CQUF1QyxFQUN2QyxjQUE2QixFQUNFLGlCQUE2QyxFQUNwQixjQUE0QyxFQUM1RCxpQkFBeUIsSUFBSSxFQUNsQiwwQkFBNEMsSUFBSTtRQVZuRyxtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3QixZQUFPLEdBQVAsT0FBTyxDQUFlO1FBQ3RCLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQUN2QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUNFLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBNEI7UUFDcEIsbUJBQWMsR0FBZCxjQUFjLENBQThCO1FBQzVELG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQ2xCLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDL0gsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRTtZQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztTQUM1QjtJQUNMLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxVQUFVLENBQUMsUUFBUSxDQUFDO0lBQ2xGLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDZCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDdEUsQ0FBQztJQUVELElBQWEsY0FBYyxDQUFDLEtBQWM7UUFDdEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksc0JBQXNCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUM7SUFDdEYsQ0FBQztJQUVELElBQWEsc0JBQXNCLENBQUMsS0FBYztRQUM5QyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLG9CQUFvQjtRQUNwQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQ2xGLENBQUM7SUFFRCxJQUFhLG9CQUFvQixDQUFDLEtBQWM7UUFDNUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztJQUNsRixDQUFDO0lBRUQsSUFBYSxvQkFBb0IsQ0FBQyxLQUFjO1FBQzVDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDNUUsQ0FBQztJQUVELElBQWEsaUJBQWlCLENBQUMsS0FBaUI7UUFDNUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxzQkFBc0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLHNCQUFzQixJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztJQUN0RixDQUFDO0lBRUQsSUFBYSxzQkFBc0IsQ0FBQyxLQUFjO1FBQzlDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUM7SUFDekMsQ0FBQztJQUVNLGFBQWE7UUFDaEIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25ILENBQUM7SUFFTSxnQkFBZ0I7UUFDbkIsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN6QzthQUFNO1lBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NBQzdDO1FBRUQsSUFBSSxDQUFDLHVCQUF1QixHQUFHLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDO0lBQ2pFLENBQUM7SUFFTSxRQUFRO1FBQ1gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFDbkksQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVTtRQUNiLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQ3hCLElBQUksQ0FBQyxjQUFjLEVBQ25CLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxzQkFBc0IsRUFDL0MsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFDMUIsSUFBSSxDQUFDLG9CQUFvQixFQUN6QixJQUFJLENBQUMsY0FBYyxDQUFDLCtCQUErQixJQUFJLElBQUksRUFDM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLEVBQzlDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUN0RCxJQUFJLGVBQWUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDMUM7UUFDVCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVU7UUFDYixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjLElBQUksU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ3ZILElBQUksZUFBZSxFQUFFO2dCQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUMzQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzt3R0E3SWlCLHVCQUF1QiwwT0FrQ1gscUJBQXFCLGFBQ1Qsa0NBQWtDLDZCQUNsQyxrQkFBa0IsNkJBQ2xCLDZCQUE2Qjs0RkFyQ3JELHVCQUF1Qiw0ZEFGL0IsRUFBRTs7NEZBRU0sdUJBQXVCO2tCQUo1QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFFBQVEsRUFBRSxFQUFFO2lCQUNmOzswQkFtQzBCLE1BQU07MkJBQUMscUJBQXFCOzswQkFDNUIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxrQ0FBa0M7OzBCQUNyRCxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQ3JDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsNkJBQTZCO3lDQTFCdkQsUUFBUTtzQkFBdkIsS0FBSztnQkFLRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBS0ksWUFBWTtzQkFBckIsTUFBTTtnQkFJRyxXQUFXO3NCQUFwQixNQUFNO2dCQTBCTSxjQUFjO3NCQUExQixLQUFLO2dCQVFPLHNCQUFzQjtzQkFBbEMsS0FBSztnQkFRTyxvQkFBb0I7c0JBQWhDLEtBQUs7Z0JBUU8sb0JBQW9CO3NCQUFoQyxLQUFLO2dCQVFPLGlCQUFpQjtzQkFBN0IsS0FBSztnQkFRTyxzQkFBc0I7c0JBQWxDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NlYXJjaFNlcnZpY2V9IGZyb20gJy4uL3NlYXJjaC1zZXJ2aWNlL3NlYXJjaC5zZXJ2aWNlJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSAnLi4vLi4vZGlhbG9nL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge05BRV9TRUFSQ0hfQ09NUE9ORU5UX0NPTkZJR1VSQVRJT059IGZyb20gJy4uL21vZGVscy9jb21wb25lbnQtY29uZmlndXJhdGlvbi9zZWFyY2gtY29tcG9uZW50LWNvbmZpZ3VyYXRpb24taW5qZWN0aW9uLXRva2VuJztcbmltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgVHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1NlYXJjaENvbXBvbmVudENvbmZpZ3VyYXRpb259IGZyb20gJy4uL21vZGVscy9jb21wb25lbnQtY29uZmlndXJhdGlvbi9zZWFyY2gtY29tcG9uZW50LWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtTZWFyY2hNb2RlfSBmcm9tICcuLi9tb2RlbHMvY29tcG9uZW50LWNvbmZpZ3VyYXRpb24vc2VhcmNoLW1vZGUnO1xuaW1wb3J0IHtVc2VyRmlsdGVyc1NlcnZpY2V9IGZyb20gJy4uLy4uL2ZpbHRlci91c2VyLWZpbHRlcnMuc2VydmljZSc7XG5pbXBvcnQge0FsbG93ZWROZXRzU2VydmljZX0gZnJvbSAnLi4vLi4vYWxsb3dlZC1uZXRzL3NlcnZpY2VzL2FsbG93ZWQtbmV0cy5zZXJ2aWNlJztcbmltcG9ydCB7TkFFX1NFQVJDSF9DQVRFR09SSUVTfSBmcm9tICcuLi9jYXRlZ29yeS1mYWN0b3J5L3NlYXJjaC1jYXRlZ29yaWVzLWluamVjdGlvbi10b2tlbic7XG5pbXBvcnQge0NhdGVnb3J5fSBmcm9tICcuLi9tb2RlbHMvY2F0ZWdvcnkvY2F0ZWdvcnknO1xuaW1wb3J0IHtTYXZlZEZpbHRlck1ldGFkYXRhfSBmcm9tICcuLi9tb2RlbHMvcGVyc2lzdGFuY2Uvc2F2ZWQtZmlsdGVyLW1ldGFkYXRhJztcbmltcG9ydCB7Vmlld0lkU2VydmljZX0gZnJvbSAnLi4vLi4vdXNlci9zZXJ2aWNlcy92aWV3LWlkLnNlcnZpY2UnO1xuaW1wb3J0IHtOQUVfRklMVEVSU19GSUxURVJ9IGZyb20gJy4uLy4uL2ZpbHRlci9tb2RlbHMvZmlsdGVycy1maWx0ZXItaW5qZWN0aW9uLXRva2VuJztcbmltcG9ydCB7RmlsdGVyfSBmcm9tICcuLi8uLi9maWx0ZXIvbW9kZWxzL2ZpbHRlcic7XG5pbXBvcnQge1Rhc2tTZXREYXRhUmVxdWVzdEZpZWxkc30gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS90YXNrLXNldC1kYXRhLXJlcXVlc3QtYm9keSc7XG5pbXBvcnQge05BRV9OQVZJR0FUSU9OX0lURU1fVEFTS19EQVRBfSBmcm9tICcuLi8uLi9uYXZpZ2F0aW9uL21vZGVsL2ZpbHRlci1jYXNlLWluamVjdGlvbi10b2tlbic7XG5pbXBvcnQge0RhdGFHcm91cH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9kYXRhLWdyb3Vwcyc7XG5cbi8qKlxuICogQSB1bml2ZXJzYWwgc2VhcmNoIGNvbXBvbmVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIGludGVyYWN0aXZlbHkgY3JlYXRlIHNlYXJjaCBwcmVkaWNhdGVzIGZvciBhbnl0aGluZyB3aXRoIHN1cHBvcnRlZCBjYXRlZ29yaWVzLlxuICpcbiAqIFRoaXMgY29tcG9uZW50IGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgaW50ZXJhY3RpdmUgY3JlYXRpb24gb2YgYW4gQU5EIHtAbGluayBDbGF1c2VQcmVkaWNhdGV9IG9iamVjdCBpbnN0YW5jZS5cbiAqIFRoZSBuZXN0ZWQgUHJlZGljYXRlcyBhcmUgT1Ige0BsaW5rIENsYXVzZVByZWRpY2F0ZX0gaW5zdGFuY2VzIGNyZWF0ZWQgYnkge0BsaW5rIEFic3RyYWN0U2VhcmNoQ2xhdXNlQ29tcG9uZW50fS5cbiAqXG4gKiBTZWFyY2ggY2F0ZWdvcmllcyBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSB7QGxpbmsgTkFFX1NFQVJDSF9DQVRFR09SSUVTfSBpbmplY3Rpb24gdG9rZW4uXG4gKiBEZWZhdWx0IGZhY3RvcnkgbWV0aG9kcyBmb3IgW3Rhc2tde0BsaW5rIGRlZmF1bHRUYXNrU2VhcmNoQ2F0ZWdvcmllc0ZhY3Rvcnl9IGFuZFxuICogW2Nhc2Vde0BsaW5rIGRlZmF1bHRDYXNlU2VhcmNoQ2F0ZWdvcmllc0ZhY3Rvcnl9IHNlYXJjaCBjYXRlZ29yaWVzIGV4aXN0LiBTZWUgdGhlaXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBUaGUgc2VhcmNoIGNvbXBvbmVudCdzIHZpc3VhbHMgY2FuIGJlIGNvbmZpZ3VyZWQgZWl0aGVyIGJ5IHRoZSB7QGxpbmsgTkFFX1NFQVJDSF9DT01QT05FTlRfQ09ORklHVVJBVElPTn0gaW5qZWN0aW9uIHRva2VuLFxuICogb3IgYnkgdGhlIGFwcHJvcHJpYXRlIGNvbXBvbmVudCBpbnB1dHMuIFRoZSBpbmplY3Rpb24gdG9rZW4gY29uZmlndXJhdGlvbiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIGlucHV0cyBpZiBib3RoIGFyZSBwcmVzZW50LlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25jYy1hYnN0cmFjdC1zZWFyY2gnLFxuICAgIHRlbXBsYXRlOiAnJ1xufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFNlYXJjaENvbXBvbmVudCBpbXBsZW1lbnRzIFNlYXJjaENvbXBvbmVudENvbmZpZ3VyYXRpb24sIE9uSW5pdCB7XG5cbiAgICBwdWJsaWMgYWR2YW5jZWRTZWFyY2hEaXNwbGF5ZWQ7XG5cbiAgICBwcml2YXRlIF9zaG93U2VhcmNoSWNvbiA9IHRydWU7XG4gICAgcHJpdmF0ZSBfc2hvd1NlYXJjaFRvZ2dsZUJ1dHRvbiA9IHRydWU7XG4gICAgcHJpdmF0ZSBfc2hvd0FkdmFuY2VkU2VhcmNoSGVscCA9IHRydWU7XG4gICAgcHJpdmF0ZSBfc2hvd1NhdmVGaWx0ZXJCdXR0b24gPSB0cnVlO1xuICAgIHByaXZhdGUgX3Nob3dMb2FkRmlsdGVyQnV0dG9uID0gdHJ1ZTtcbiAgICBwcml2YXRlIF9pbml0aWFsU2VhcmNoTW9kZSA9IFNlYXJjaE1vZGUuRlVMTFRFWFQ7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogU2V0IGRhdGEgcmVxdWVzdCBib2R5LCB0aGF0IGlzIHNlbnQgdG8gdGhlIGZpbHRlciBpbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBib2R5LlxuICAgICAqIFRoZSBkZWZhdWx0IGJvZHkgaXMgYXBwbGllZCBmaXJzdCBhbmQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhpcyBhcmd1bWVudC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBhZGRpdGlvbmFsRmlsdGVyRGF0YTogVGFza1NldERhdGFSZXF1ZXN0RmllbGRzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZW1pdHRlZCBkYXRhIGNvbnRhaW5zIHRoZSBmaWx0ZXIgY2FzZSBvYmplY3RcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgZmlsdGVyTG9hZGVkOiBFdmVudEVtaXR0ZXI8U2F2ZWRGaWx0ZXJNZXRhZGF0YT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgLyoqXG4gICAgICogVGhlIGVtaXR0ZWQgZGF0YSBjb250YWlucyBvbmx5IHRoZSBzYXZlZCBjYXNlJ3MgSURcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgZmlsdGVyU2F2ZWQ6IEV2ZW50RW1pdHRlcjxTYXZlZEZpbHRlck1ldGFkYXRhPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3NlYXJjaFNlcnZpY2U6IFNlYXJjaFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2RpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3VzZXJGaWx0ZXJTZXJ2aWNlOiBVc2VyRmlsdGVyc1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfYWxsb3dlZE5ldHNTZXJ2aWNlOiBBbGxvd2VkTmV0c1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfdmlld0lkU2VydmljZTogVmlld0lkU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQEluamVjdChOQUVfU0VBUkNIX0NBVEVHT1JJRVMpIHByb3RlY3RlZCBfc2VhcmNoQ2F0ZWdvcmllczogQXJyYXk8VHlwZTxDYXRlZ29yeTxhbnk+Pj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTkFFX1NFQVJDSF9DT01QT05FTlRfQ09ORklHVVJBVElPTikgcHJvdGVjdGVkIF9jb25maWd1cmF0aW9uOiBTZWFyY2hDb21wb25lbnRDb25maWd1cmF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE5BRV9GSUxURVJTX0ZJTFRFUikgcHJvdGVjdGVkIF9maWx0ZXJzRmlsdGVyOiBGaWx0ZXIgPSBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE5BRV9OQVZJR0FUSU9OX0lURU1fVEFTS19EQVRBKSBwcm90ZWN0ZWQgX25hdmlnYXRpb25JdGVtVGFza0RhdGE6IEFycmF5PERhdGFHcm91cD4gPSBudWxsKSB7XG4gICAgICAgIGlmICh0aGlzLl9jb25maWd1cmF0aW9uID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLl9jb25maWd1cmF0aW9uID0ge307XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hZHZhbmNlZFNlYXJjaERpc3BsYXllZCA9IHRoaXMuaW5pdGlhbFNlYXJjaE1vZGUgPT09IFNlYXJjaE1vZGUuQURWQU5DRUQ7XG4gICAgfVxuXG4gICAgZ2V0IHNob3dTZWFyY2hJY29uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlndXJhdGlvbi5zaG93U2VhcmNoSWNvbiA/PyB0aGlzLl9zaG93U2VhcmNoSWNvbjtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc2hvd1NlYXJjaEljb24odmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fc2hvd1NlYXJjaEljb24gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgc2hvd0FkdmFuY2VkU2VhcmNoSGVscCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZ3VyYXRpb24uc2hvd0FkdmFuY2VkU2VhcmNoSGVscCA/PyB0aGlzLl9zaG93QWR2YW5jZWRTZWFyY2hIZWxwO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzaG93QWR2YW5jZWRTZWFyY2hIZWxwKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Nob3dBZHZhbmNlZFNlYXJjaEhlbHAgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgc2hvd1NhdmVGaWx0ZXJCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWd1cmF0aW9uLnNob3dTYXZlRmlsdGVyQnV0dG9uID8/IHRoaXMuX3Nob3dTYXZlRmlsdGVyQnV0dG9uO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzaG93U2F2ZUZpbHRlckJ1dHRvbih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9zaG93U2F2ZUZpbHRlckJ1dHRvbiA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBzaG93TG9hZEZpbHRlckJ1dHRvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZ3VyYXRpb24uc2hvd0xvYWRGaWx0ZXJCdXR0b24gPz8gdGhpcy5fc2hvd0xvYWRGaWx0ZXJCdXR0b247XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNob3dMb2FkRmlsdGVyQnV0dG9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Nob3dMb2FkRmlsdGVyQnV0dG9uID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IGluaXRpYWxTZWFyY2hNb2RlKCk6IFNlYXJjaE1vZGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlndXJhdGlvbi5pbml0aWFsU2VhcmNoTW9kZSA/PyB0aGlzLl9pbml0aWFsU2VhcmNoTW9kZTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgaW5pdGlhbFNlYXJjaE1vZGUodmFsdWU6IFNlYXJjaE1vZGUpIHtcbiAgICAgICAgdGhpcy5faW5pdGlhbFNlYXJjaE1vZGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgc2hvd1NlYXJjaFRvZ2dsZUJ1dHRvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZ3VyYXRpb24uc2hvd1NlYXJjaFRvZ2dsZUJ1dHRvbiA/PyB0aGlzLl9zaG93U2VhcmNoVG9nZ2xlQnV0dG9uO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzaG93U2VhcmNoVG9nZ2xlQnV0dG9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Nob3dTZWFyY2hUb2dnbGVCdXR0b24gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzUHJlZGljYXRlcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fc2VhcmNoU2VydmljZS5yb290UHJlZGljYXRlLmdldFByZWRpY2F0ZU1hcCgpLnZhbHVlcygpKS5zb21lKHZhbHVlID0+IHZhbHVlLmlzVmlzaWJsZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZVNlYXJjaE1vZGUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFkdmFuY2VkU2VhcmNoRGlzcGxheWVkKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWFyY2hTZXJ2aWNlLmNsZWFyUHJlZGljYXRlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc2VhcmNoU2VydmljZS5jbGVhckZ1bGxUZXh0RmlsdGVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkdmFuY2VkU2VhcmNoRGlzcGxheWVkID0gIXRoaXMuYWR2YW5jZWRTZWFyY2hEaXNwbGF5ZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dIZWxwKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW5BbGVydERpYWxvZyh0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnc2VhcmNoLmhlbHAudGl0bGUnKSwgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ3NlYXJjaC5oZWxwLnRleHQnKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHNhdmVkIGZpbHRlciBkYXRhIGFyZSBlbWl0dGVkIGludG8gdGhlIFtmaWx0ZXJTYXZlZF17QGxpbmsgQWJzdHJhY3RTZWFyY2hDb21wb25lbnQjZmlsdGVyU2F2ZWR9IGBFdmVudEVtaXR0ZXJgXG4gICAgICovXG4gICAgcHVibGljIHNhdmVGaWx0ZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3VzZXJGaWx0ZXJTZXJ2aWNlLnNhdmUoXG4gICAgICAgICAgICB0aGlzLl9zZWFyY2hTZXJ2aWNlLFxuICAgICAgICAgICAgdGhpcy5fYWxsb3dlZE5ldHNTZXJ2aWNlLmFsbG93ZWROZXRzSWRlbnRpZmllcnMsXG4gICAgICAgICAgICB0aGlzLl9zZWFyY2hDYXRlZ29yaWVzLFxuICAgICAgICAgICAgdGhpcy5fdmlld0lkU2VydmljZS52aWV3SWQsXG4gICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxGaWx0ZXJEYXRhLFxuICAgICAgICAgICAgdGhpcy5fY29uZmlndXJhdGlvbi5zYXZlRmlsdGVyV2l0aERlZmF1bHRDYXRlZ29yaWVzID8/IHRydWUsXG4gICAgICAgICAgICB0aGlzLl9jb25maWd1cmF0aW9uLmluaGVyaXRBbGxvd2VkTmV0cyA/PyB0cnVlLFxuICAgICAgICAgICAgdGhpcy5fbmF2aWdhdGlvbkl0ZW1UYXNrRGF0YSkuc3Vic2NyaWJlKHNhdmVkRmlsdGVyRGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNhdmVkRmlsdGVyRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclNhdmVkLmVtaXQoc2F2ZWRGaWx0ZXJEYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBsb2FkZWQgZmlsdGVyIGRhdGEgYXJlIGVtaXR0ZWQgaW50byB0aGUgW2ZpbHRlckxvYWRlZF17QGxpbmsgQWJzdHJhY3RTZWFyY2hDb21wb25lbnQjZmlsdGVyTG9hZGVkfSBgRXZlbnRFbWl0dGVyYFxuICAgICAqL1xuICAgIHB1YmxpYyBsb2FkRmlsdGVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl91c2VyRmlsdGVyU2VydmljZS5sb2FkKHRoaXMuX3NlYXJjaFNlcnZpY2UuZmlsdGVyVHlwZSwgdGhpcy5fZmlsdGVyc0ZpbHRlciA/PyB1bmRlZmluZWQpLnN1YnNjcmliZShzYXZlZEZpbHRlckRhdGEgPT4ge1xuICAgICAgICAgICAgaWYgKHNhdmVkRmlsdGVyRGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyTG9hZGVkLmVtaXQoc2F2ZWRGaWx0ZXJEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19