brainloper-ui 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brainloper-ui",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "private": false,
5
5
  "dependencies": {
6
6
  "@angular-material-components/file-input": "^7.0.1",
package/public_api.d.ts CHANGED
@@ -5,7 +5,7 @@
5
5
  export * from './src/app/modules/brainloper-ui/brainloper-ui.module';
6
6
  /**
7
7
  * @Component */
8
- export * from './src/app/modules/brainloper-ui/components/buttons/combos/combos.component';
8
+ export * from './src/app/modules/brainloper-ui/components/combos/combos.component';
9
9
  export * from './src/app/modules/brainloper-ui/components/data-table/data-table.component';
10
10
  export * from './src/app/modules/brainloper-ui/components/file-input/file-input.component';
11
11
  export * from './src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component';
@@ -1,7 +1,7 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import * as i1 from "./components/data-table/data-table.component";
3
3
  import * as i2 from "./components/data-table/table-modal/table-modal.component";
4
- import * as i3 from "./components/buttons/combos/combos.component";
4
+ import * as i3 from "./components/combos/combos.component";
5
5
  import * as i4 from "./components/file-input/file-input.component";
6
6
  import * as i5 from "../services/loading/loading.component";
7
7
  import * as i6 from "./components/report/generate-pdf/generate-pdf.component";
@@ -1,6 +1,6 @@
1
1
  import { OnInit, EventEmitter, SimpleChanges, OnChanges } from '@angular/core';
2
2
  import { FormControl } from '@angular/forms';
3
- import { HttpService } from '../../../../services/http.service';
3
+ import { HttpService } from '../../../services/http.service';
4
4
  import { MatTooltip } from '@angular/material/tooltip';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class CombosComponent implements OnInit, OnChanges {
@@ -19,6 +19,7 @@ export declare class CombosComponent implements OnInit, OnChanges {
19
19
  tooltipActive: boolean;
20
20
  tooltip: MatTooltip;
21
21
  changeOption: EventEmitter<any>;
22
+ changeOptionDataComplete: EventEmitter<any>;
22
23
  returnDataCombo: EventEmitter<any>;
23
24
  selected: FormControl;
24
25
  filteredList: Array<any>;
@@ -27,9 +28,10 @@ export declare class CombosComponent implements OnInit, OnChanges {
27
28
  ngOnChanges(changes: SimpleChanges): void;
28
29
  getData(): void;
29
30
  selectedData($event: any): void;
31
+ findData($event: any): void;
30
32
  toggleTooltip(): void;
31
33
  static ɵfac: i0.ɵɵFactoryDeclaration<CombosComponent, never>;
32
- static ɵcmp: i0.ɵɵComponentDeclaration<CombosComponent, "combos", never, { "dataCombos": "dataCombos"; "additionalData": "additionalData"; "configuration": "configuration"; "filter": "filter"; "checkbox": "checkbox"; "required": "required"; "disabled": "disabled"; "addFinal": "addFinal"; "appearance": "appearance"; "reloadCombo": "reloadCombo"; }, { "changeOption": "changeOption"; "returnDataCombo": "returnDataCombo"; }, never, never>;
34
+ static ɵcmp: i0.ɵɵComponentDeclaration<CombosComponent, "combos", never, { "dataCombos": "dataCombos"; "additionalData": "additionalData"; "configuration": "configuration"; "filter": "filter"; "checkbox": "checkbox"; "required": "required"; "disabled": "disabled"; "addFinal": "addFinal"; "appearance": "appearance"; "reloadCombo": "reloadCombo"; }, { "changeOption": "changeOption"; "changeOptionDataComplete": "changeOptionDataComplete"; "returnDataCombo": "returnDataCombo"; }, never, never>;
33
35
  }
34
36
  interface CombosConfiguration {
35
37
  selectionField?: string;
@@ -1,144 +0,0 @@
1
- import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
2
- import { FormControl } from '@angular/forms';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../../../../services/http.service";
5
- import * as i2 from "@angular/material/icon";
6
- import * as i3 from "@angular/material/form-field";
7
- import * as i4 from "@angular/material/select";
8
- import * as i5 from "mat-select-filter";
9
- import * as i6 from "@angular/material/core";
10
- import * as i7 from "@angular/common";
11
- import * as i8 from "@angular/material/tooltip";
12
- import * as i9 from "@angular/forms";
13
- export class CombosComponent {
14
- constructor(http) {
15
- this.http = http;
16
- this.filter = false;
17
- this.checkbox = false;
18
- this.required = false;
19
- this.disabled = false;
20
- this.addFinal = false;
21
- this.appearance = "";
22
- this.tooltipDescription = null;
23
- this.tooltipActive = false;
24
- this.changeOption = new EventEmitter();
25
- this.returnDataCombo = new EventEmitter();
26
- this.selected = new FormControl;
27
- }
28
- ngOnInit() {
29
- if (!this.configuration.label) {
30
- this.configuration.label = this.configuration.visibleField;
31
- }
32
- if (this.configuration.urlCombo) {
33
- this.getData();
34
- }
35
- else {
36
- if (this.dataCombos) {
37
- this.filteredList = this.dataCombos.slice();
38
- }
39
- }
40
- if (this.reloadCombo) {
41
- this.reloadCombo.subscribe((res) => {
42
- if (res == "selected") {
43
- this.selected.setValue(this.configuration.selected);
44
- }
45
- else {
46
- this.getData();
47
- }
48
- });
49
- }
50
- this.selected.setValue(this.configuration.selected);
51
- //console.log(this.configuration)
52
- }
53
- ngOnChanges(changes) {
54
- if (this.dataCombos) {
55
- this.dataCombos = changes.dataCombos.currentValue;
56
- this.filteredList = this.dataCombos.slice();
57
- }
58
- }
59
- getData() {
60
- this.http.getData(this.configuration.urlCombo, this.configuration.urlParams).subscribe(res => {
61
- if (res['code'] === 0) {
62
- this.dataCombos = res['body'];
63
- if (this.additionalData) {
64
- if (this.addFinal) {
65
- this.dataCombos = this.dataCombos.concat(this.additionalData);
66
- }
67
- else {
68
- this.dataCombos = this.additionalData.concat(this.dataCombos);
69
- }
70
- }
71
- this.returnDataCombo.emit(this.dataCombos);
72
- this.filteredList = this.dataCombos.slice();
73
- }
74
- else {
75
- console.log('error en la consulta para datos combo');
76
- }
77
- }, err => {
78
- console.log(err);
79
- });
80
- }
81
- selectedData($event) {
82
- if (this.configuration.fileTooltip) {
83
- let d = this.filteredList.find(x => x[this.configuration.selectionField] == $event.value);
84
- if (d) {
85
- this.tooltipDescription = d[this.configuration.fileTooltip];
86
- this.tooltipActive = true;
87
- setTimeout(() => {
88
- this.tooltip.show();
89
- }, 50);
90
- setTimeout(() => {
91
- this.tooltip.hide();
92
- }, 10000);
93
- }
94
- else
95
- this.tooltipDescription = null;
96
- }
97
- else
98
- this.tooltipDescription = null;
99
- this.changeOption.emit($event.value);
100
- }
101
- toggleTooltip() {
102
- this.tooltipActive = !this.tooltipActive;
103
- if (this.tooltipActive) {
104
- this.tooltip.show();
105
- }
106
- else {
107
- this.tooltip.hide();
108
- }
109
- }
110
- }
111
- CombosComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: CombosComponent, deps: [{ token: i1.HttpService }], target: i0.ɵɵFactoryTarget.Component });
112
- CombosComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: CombosComponent, selector: "combos", inputs: { dataCombos: "dataCombos", additionalData: "additionalData", configuration: "configuration", filter: "filter", checkbox: "checkbox", required: "required", disabled: "disabled", addFinal: "addFinal", appearance: "appearance", reloadCombo: "reloadCombo" }, outputs: { changeOption: "changeOption", returnDataCombo: "returnDataCombo" }, viewQueries: [{ propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div style=\"display: flex; flex-direction: row; justify-content: space-between\">\r\n <div class=\"combo-container\">\r\n\r\n <mat-icon\r\n class=\"m-1 icon-information\"\r\n *ngIf=\"tooltipDescription\"\r\n matTooltip=\"{{tooltipDescription}}\"\r\n matTooltipPosition=\"above\"\r\n #tooltip=\"matTooltip\"\r\n (click)=\"toggleTooltip()\"\r\n matTooltipClass=\"custom-tooltip\"\r\n >info</mat-icon>\r\n\r\n <mat-form-field style=\"width: 100%\" [appearance]=\"appearance\">\r\n <mat-label style=\"text-transform: capitalize\">{{\r\n configuration.label\r\n }}</mat-label>\r\n <mat-select [multiple]=\"checkbox\" (selectionChange)=\"selectedData(selected)\" [required]=\"required\"\r\n [formControl]=\"selected\" [disabled]=\"disabled\">\r\n <mat-select-filter *ngIf=\"filter\" [placeholder]=\"'Filter'\" [displayMember]=\"configuration.visibleField\"\r\n [array]=\"dataCombos\" (filteredReturn)=\"filteredList = $event\">\r\n </mat-select-filter>\r\n <mat-option [value]=\"data[configuration.selectionField]\" *ngFor=\"let data of filteredList\">\r\n {{ data[configuration.visibleField] }}\r\n </mat-option>\r\n </mat-select>\r\n <mat-error *ngIf=\"required\">Campo requerido</mat-error>\r\n </mat-form-field>\r\n </div>\r\n</div>\r\n\r\n", styles: [".mat-form-field{width:100%}.combo-container{width:100%;display:flex;align-items:center}.icon-information{cursor:pointer;color:gray}.mat-icon{font-size:1.1rem}::ng-deep .custom-tooltip{background-color:#fbe870!important;color:#000!important;line-height:17px!important;font-size:.8rem}\n"], components: [{ type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i5.MatSelectFilterComponent, selector: "mat-select-filter", inputs: ["showSpinner", "noResultsMessage", "placeholder", "array", "color", "displayMember", "hasGroup", "groupArrayName"], outputs: ["filteredReturn"] }, { type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i3.MatLabel, selector: "mat-label" }, { type: i9.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.MatError, selector: "mat-error", inputs: ["id"] }] });
113
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: CombosComponent, decorators: [{
114
- type: Component,
115
- args: [{ selector: 'combos', template: "<div style=\"display: flex; flex-direction: row; justify-content: space-between\">\r\n <div class=\"combo-container\">\r\n\r\n <mat-icon\r\n class=\"m-1 icon-information\"\r\n *ngIf=\"tooltipDescription\"\r\n matTooltip=\"{{tooltipDescription}}\"\r\n matTooltipPosition=\"above\"\r\n #tooltip=\"matTooltip\"\r\n (click)=\"toggleTooltip()\"\r\n matTooltipClass=\"custom-tooltip\"\r\n >info</mat-icon>\r\n\r\n <mat-form-field style=\"width: 100%\" [appearance]=\"appearance\">\r\n <mat-label style=\"text-transform: capitalize\">{{\r\n configuration.label\r\n }}</mat-label>\r\n <mat-select [multiple]=\"checkbox\" (selectionChange)=\"selectedData(selected)\" [required]=\"required\"\r\n [formControl]=\"selected\" [disabled]=\"disabled\">\r\n <mat-select-filter *ngIf=\"filter\" [placeholder]=\"'Filter'\" [displayMember]=\"configuration.visibleField\"\r\n [array]=\"dataCombos\" (filteredReturn)=\"filteredList = $event\">\r\n </mat-select-filter>\r\n <mat-option [value]=\"data[configuration.selectionField]\" *ngFor=\"let data of filteredList\">\r\n {{ data[configuration.visibleField] }}\r\n </mat-option>\r\n </mat-select>\r\n <mat-error *ngIf=\"required\">Campo requerido</mat-error>\r\n </mat-form-field>\r\n </div>\r\n</div>\r\n\r\n", styles: [".mat-form-field{width:100%}.combo-container{width:100%;display:flex;align-items:center}.icon-information{cursor:pointer;color:gray}.mat-icon{font-size:1.1rem}::ng-deep .custom-tooltip{background-color:#fbe870!important;color:#000!important;line-height:17px!important;font-size:.8rem}\n"] }]
116
- }], ctorParameters: function () { return [{ type: i1.HttpService }]; }, propDecorators: { dataCombos: [{
117
- type: Input
118
- }], additionalData: [{
119
- type: Input
120
- }], configuration: [{
121
- type: Input
122
- }], filter: [{
123
- type: Input
124
- }], checkbox: [{
125
- type: Input
126
- }], required: [{
127
- type: Input
128
- }], disabled: [{
129
- type: Input
130
- }], addFinal: [{
131
- type: Input
132
- }], appearance: [{
133
- type: Input
134
- }], reloadCombo: [{
135
- type: Input
136
- }], tooltip: [{
137
- type: ViewChild,
138
- args: ['tooltip']
139
- }], changeOption: [{
140
- type: Output
141
- }], returnDataCombo: [{
142
- type: Output
143
- }] } });
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9icmFpbmxvcGVyLXVpL2NvbXBvbmVudHMvYnV0dG9ucy9jb21ib3MvY29tYm9zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9icmFpbmxvcGVyLXVpL2NvbXBvbmVudHMvYnV0dG9ucy9jb21ib3MvY29tYm9zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQTRCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBVzdDLE1BQU0sT0FBTyxlQUFlO0lBd0IxQixZQUNVLElBQWlCO1FBQWpCLFNBQUksR0FBSixJQUFJLENBQWE7UUFwQmxCLFdBQU0sR0FBWSxLQUFLLENBQUE7UUFDdkIsYUFBUSxHQUFZLEtBQUssQ0FBQTtRQUN6QixhQUFRLEdBQVksS0FBSyxDQUFBO1FBQ3pCLGFBQVEsR0FBWSxLQUFLLENBQUE7UUFDekIsYUFBUSxHQUFZLEtBQUssQ0FBQTtRQUN6QixlQUFVLEdBQVEsRUFBRSxDQUFDO1FBSXZCLHVCQUFrQixHQUFVLElBQUksQ0FBQTtRQUNoQyxrQkFBYSxHQUFXLEtBQUssQ0FBQTtRQUkxQixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUE7UUFDdEMsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFBO1FBRW5ELGFBQVEsR0FBRyxJQUFJLFdBQVcsQ0FBQTtJQUl0QixDQUFDO0lBR0wsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRTtZQUM3QixJQUFJLENB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LEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQU1nQixPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVM7Z0JBRVYsWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgU2ltcGxlQ2hhbmdlcywgT25DaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvaHR0cC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRBcHBlYXJhbmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb21ib3MnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb21ib3MuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbWJvcy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21ib3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBJbnB1dCgpIGRhdGFDb21ib3M6IEFycmF5PGFueT5cclxuICBASW5wdXQoKSBhZGRpdGlvbmFsRGF0YTogQXJyYXk8YW55PlxyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb246IENvbWJvc0NvbmZpZ3VyYXRpb25cclxuICBASW5wdXQoKSBmaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIEBJbnB1dCgpIGNoZWNrYm94OiBib29sZWFuID0gZmFsc2VcclxuICBASW5wdXQoKSByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIEBJbnB1dCgpIGFkZEZpbmFsOiBib29sZWFuID0gZmFsc2VcclxuICBASW5wdXQoKSBhcHBlYXJhbmNlOiBhbnkgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIHJlbG9hZENvbWJvOiBFdmVudEVtaXR0ZXI8YW55PjtcclxuXHJcblxyXG4gIHB1YmxpYyB0b29sdGlwRGVzY3JpcHRpb246c3RyaW5nID0gbnVsbFxyXG4gIHB1YmxpYyB0b29sdGlwQWN0aXZlOmJvb2xlYW4gPSBmYWxzZVxyXG5cclxuICBAVmlld0NoaWxkKCd0b29sdGlwJykgdG9vbHRpcDogTWF0VG9vbHRpcDtcclxuXHJcbiAgQE91dHB1dCgpIGNoYW5nZU9wdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXHJcbiAgQE91dHB1dCgpIHJldHVybkRhdGFDb21ibyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXHJcblxyXG4gIHNlbGVjdGVkID0gbmV3IEZvcm1Db250cm9sXHJcbiAgZmlsdGVyZWRMaXN0IDogQXJyYXk8YW55PlxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uLmxhYmVsKSB7XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5sYWJlbCA9IHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlRmllbGRcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24udXJsQ29tYm8pIHtcclxuICAgICAgdGhpcy5nZXREYXRhKClcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIGlmICh0aGlzLmRhdGFDb21ib3MpIHtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IHRoaXMuZGF0YUNvbWJvcy5zbGljZSgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5yZWxvYWRDb21ibykge1xyXG4gICAgICB0aGlzLnJlbG9hZENvbWJvLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyA9PSBcInNlbGVjdGVkXCIpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuc2V0VmFsdWUodGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdGVkKVxyXG4gICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgdGhpcy5nZXREYXRhKClcclxuICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkLnNldFZhbHVlKHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RlZClcclxuICAgIC8vY29uc29sZS5sb2codGhpcy5jb25maWd1cmF0aW9uKVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyl7XHJcbiAgICBpZiAodGhpcy5kYXRhQ29tYm9zKSB7XHJcblxyXG4gICAgICB0aGlzLmRhdGFDb21ib3MgPSBjaGFuZ2VzLmRhdGFDb21ib3MuY3VycmVudFZhbHVlXHJcbiAgICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gdGhpcy5kYXRhQ29tYm9zLnNsaWNlKClcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXREYXRhKCkge1xyXG5cclxuICAgIHRoaXMuaHR0cC5nZXREYXRhKHRoaXMuY29uZmlndXJhdGlvbi51cmxDb21ibywgdGhpcy5jb25maWd1cmF0aW9uLnVybFBhcmFtcykuc3Vic2NyaWJlKFxyXG4gICAgICByZXMgPT4ge1xyXG4gICAgICAgIGlmIChyZXNbJ2NvZGUnXSA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5kYXRhQ29tYm9zID0gcmVzWydib2R5J11cclxuICAgICAgICAgIGlmICh0aGlzLmFkZGl0aW9uYWxEYXRhKSB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuYWRkRmluYWwpIHtcclxuICAgICAgICAgICAgICB0aGlzLmRhdGFDb21ib3MgPSB0aGlzLmRhdGFDb21ib3MuY29uY2F0KHRoaXMuYWRkaXRpb25hbERhdGEpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgIHRoaXMuZGF0YUNvbWJvcyA9IHRoaXMuYWRkaXRpb25hbERhdGEuY29uY2F0KHRoaXMuZGF0YUNvbWJvcylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJldHVybkRhdGFDb21iby5lbWl0KHRoaXMuZGF0YUNvbWJvcylcclxuICAgICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IHRoaXMuZGF0YUNvbWJvcy5zbGljZSgpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciBlbiBsYSBjb25zdWx0YSBwYXJhIGRhdG9zIGNvbWJvJylcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9LCBlcnIgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycilcclxuICAgICAgfVxyXG5cclxuICAgIClcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkRGF0YSgkZXZlbnQpIHtcclxuICAgIGlmKHRoaXMuY29uZmlndXJhdGlvbi5maWxlVG9vbHRpcCl7XHJcbiAgICAgIGxldCBkID0gdGhpcy5maWx0ZXJlZExpc3QuZmluZCh4ID0+IHhbdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdGlvbkZpZWxkXSA9PSAkZXZlbnQudmFsdWUpXHJcbiAgICAgIGlmKGQpe1xyXG4gICAgICAgIHRoaXMudG9vbHRpcERlc2NyaXB0aW9uID0gZFt0aGlzLmNvbmZpZ3VyYXRpb24uZmlsZVRvb2x0aXBdXHJcbiAgICAgICAgdGhpcy50b29sdGlwQWN0aXZlID0gdHJ1ZVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b29sdGlwLnNob3coKTtcclxuICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvb2x0aXAuaGlkZSgpO1xyXG4gICAgICAgIH0sIDEwMDAwKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy50b29sdGlwRGVzY3JpcHRpb24gPSBudWxsXHJcbiAgICB9ZWxzZVxyXG4gICAgICB0aGlzLnRvb2x0aXBEZXNjcmlwdGlvbiA9IG51bGxcclxuICAgIHRoaXMuY2hhbmdlT3B0aW9uLmVtaXQoJGV2ZW50LnZhbHVlKVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlVG9vbHRpcCgpIHtcclxuICAgIHRoaXMudG9vbHRpcEFjdGl2ZSA9ICF0aGlzLnRvb2x0aXBBY3RpdmU7XHJcbiAgICBpZiAodGhpcy50b29sdGlwQWN0aXZlKSB7XHJcbiAgICAgIHRoaXMudG9vbHRpcC5zaG93KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRvb2x0aXAuaGlkZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXHJcblxyXG5pbnRlcmZhY2UgQ29tYm9zQ29uZmlndXJhdGlvbiB7XHJcbiAgc2VsZWN0aW9uRmllbGQ/OnN0cmluZyxcclxuICB2aXNpYmxlRmllbGQ/OnN0cmluZyxcclxuICB1cmxDb21ibz86c3RyaW5nLFxyXG4gIHVybFBhcmFtcz86YW55W10sXHJcbiAgbGFiZWw/OnN0cmluZyxcclxuICBzZWxlY3RlZD86IGFueSxcclxuICBmaWxlVG9vbHRpcD86c3RyaW5nXHJcbn1cclxuIiwiPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb21iby1jb250YWluZXJcIj5cclxuXHJcbiAgICA8bWF0LWljb25cclxuICAgICAgY2xhc3M9XCJtLTEgaWNvbi1pbmZvcm1hdGlvblwiXHJcbiAgICAgICpuZ0lmPVwidG9vbHRpcERlc2NyaXB0aW9uXCJcclxuICAgICAgbWF0VG9vbHRpcD1cInt7dG9vbHRpcERlc2NyaXB0aW9ufX1cIlxyXG4gICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXHJcbiAgICAgICN0b29sdGlwPVwibWF0VG9vbHRpcFwiXHJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVUb29sdGlwKClcIlxyXG4gICAgICBtYXRUb29sdGlwQ2xhc3M9XCJjdXN0b20tdG9vbHRpcFwiXHJcbiAgICAgPmluZm88L21hdC1pY29uPlxyXG5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBzdHlsZT1cIndpZHRoOiAxMDAlXCIgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiPlxyXG4gICAgICA8bWF0LWxhYmVsIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemVcIj57e1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24ubGFiZWxcclxuICAgICAgICB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBbbXVsdGlwbGVdPVwiY2hlY2tib3hcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdGVkRGF0YShzZWxlY3RlZClcIiBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxyXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJzZWxlY3RlZFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0LWZpbHRlciAqbmdJZj1cImZpbHRlclwiIFtwbGFjZWhvbGRlcl09XCInRmlsdGVyJ1wiIFtkaXNwbGF5TWVtYmVyXT1cImNvbmZpZ3VyYXRpb24udmlzaWJsZUZpZWxkXCJcclxuICAgICAgICAgIFthcnJheV09XCJkYXRhQ29tYm9zXCIgKGZpbHRlcmVkUmV0dXJuKT1cImZpbHRlcmVkTGlzdCA9ICRldmVudFwiPlxyXG4gICAgICAgIDwvbWF0LXNlbGVjdC1maWx0ZXI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImRhdGFbY29uZmlndXJhdGlvbi5zZWxlY3Rpb25GaWVsZF1cIiAqbmdGb3I9XCJsZXQgZGF0YSBvZiBmaWx0ZXJlZExpc3RcIj5cclxuICAgICAgICAgIHt7IGRhdGFbY29uZmlndXJhdGlvbi52aXNpYmxlRmllbGRdIH19XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJyZXF1aXJlZFwiPkNhbXBvIHJlcXVlcmlkbzwvbWF0LWVycm9yPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG4iXX0=