@aggdirect/coolmap 3.0.0 → 3.0.2
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.
|
@@ -30,6 +30,12 @@ export class JobCodeNavComponent {
|
|
|
30
30
|
destroyer$ = new Subject();
|
|
31
31
|
customerRepoDetails;
|
|
32
32
|
selectedDate;
|
|
33
|
+
statLegend = [
|
|
34
|
+
{ label: 'Done', color: '#00CC00', total: 0 },
|
|
35
|
+
{ label: 'Incomplete', color: '#000000', total: 0 },
|
|
36
|
+
{ label: 'Ongoing', color: '#FFAA00', total: 0 },
|
|
37
|
+
{ label: 'Open', color: '#CCCCCC', total: 0 }
|
|
38
|
+
];
|
|
33
39
|
constructor(utils, config) {
|
|
34
40
|
this.utils = utils;
|
|
35
41
|
this.config = config;
|
|
@@ -77,12 +83,24 @@ export class JobCodeNavComponent {
|
|
|
77
83
|
return ele;
|
|
78
84
|
});
|
|
79
85
|
}
|
|
86
|
+
if (this.config.repository === 'customer') {
|
|
87
|
+
let projectName = window.location.href.split('project=').pop();
|
|
88
|
+
projectName = projectName.toLowerCase();
|
|
89
|
+
this.listData = this.listData.filter(ele => {
|
|
90
|
+
const project = ele.project.toLowerCase();
|
|
91
|
+
let adjustedProject = project.replace(/\s+|\/+/g, "_");
|
|
92
|
+
return adjustedProject === projectName;
|
|
93
|
+
});
|
|
94
|
+
}
|
|
80
95
|
this.listData.forEach((ele) => {
|
|
81
96
|
this.utils.makeOptions(ele);
|
|
82
97
|
});
|
|
83
98
|
}
|
|
84
99
|
else
|
|
85
100
|
this.listData = [];
|
|
101
|
+
if (this.config.repository === 'coolmap') {
|
|
102
|
+
this.calculateStatsTotals();
|
|
103
|
+
}
|
|
86
104
|
this.clearJobDetails.emit(true);
|
|
87
105
|
this.utils.clearViewRouteforJobCode.next(true);
|
|
88
106
|
this.filters = [];
|
|
@@ -93,6 +111,41 @@ export class JobCodeNavComponent {
|
|
|
93
111
|
this.utils.preventnavChange.next(true);
|
|
94
112
|
});
|
|
95
113
|
}
|
|
114
|
+
calculateStatsTotals() {
|
|
115
|
+
this.statLegend.forEach(legend => {
|
|
116
|
+
legend.total = 0;
|
|
117
|
+
});
|
|
118
|
+
if (this.listData && this.listData.length > 0) {
|
|
119
|
+
this.listData.forEach((item) => {
|
|
120
|
+
if (item.values) {
|
|
121
|
+
if (item.values['Done'] !== undefined) {
|
|
122
|
+
const doneLegend = this.statLegend.find(legend => legend.label === 'Done');
|
|
123
|
+
if (doneLegend) {
|
|
124
|
+
doneLegend.total += item.values['Done'] || 0;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (item.values['Incomplete'] !== undefined) {
|
|
128
|
+
const incompleteLegend = this.statLegend.find(legend => legend.label === 'Incomplete');
|
|
129
|
+
if (incompleteLegend) {
|
|
130
|
+
incompleteLegend.total += item.values['Incomplete'] || 0;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (item.values['Ongoing'] !== undefined) {
|
|
134
|
+
const ongoingLegend = this.statLegend.find(legend => legend.label === 'Ongoing');
|
|
135
|
+
if (ongoingLegend) {
|
|
136
|
+
ongoingLegend.total += item.values['Ongoing'] || 0;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (item.values['Open'] !== undefined) {
|
|
140
|
+
const openLegend = this.statLegend.find(legend => legend.label === 'Open');
|
|
141
|
+
if (openLegend) {
|
|
142
|
+
openLegend.total += item.values['Open'] || 0;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
96
149
|
getRoute(job) {
|
|
97
150
|
if (job['type'] === 'jobcode') {
|
|
98
151
|
this.jobemit.emit(job);
|
|
@@ -123,11 +176,11 @@ export class JobCodeNavComponent {
|
|
|
123
176
|
this.destroyer$.unsubscribe();
|
|
124
177
|
}
|
|
125
178
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: JobCodeNavComponent, deps: [{ token: i1.UtilsService }, { token: 'memberData' }], target: i0.ɵɵFactoryTarget.Component });
|
|
126
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: JobCodeNavComponent, selector: "app-job-code-nav", inputs: { customerRepoDetails: "customerRepoDetails" }, outputs: { jobemit: "jobemit", clearJobDetails: "clearJobDetails" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"nav_body\">\n <div class=\"search-panel\">\n <div class=\"datepicker\">\n <mat-form-field>\n <mat-label>Choose a date</mat-label>\n <input readonly matInput (click)=\"picker.open()\" [disabled]=\"loaderVal\" [(ngModel)]=\"dateValue\" [matDatepicker]=\"picker\" (dateChange)=\"getDate($event)\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n </div>\n <div class=\"search\">\n <form [formGroup]=\"filterForm\">\n <mat-form-field class=\"full-width\" [class.disabled]=\"loaderVal\">\n <input matInput [matChipInputFor]=\"chipList\" formControlName=\"search\" [matAutocomplete]=\"auto\"\n [disabled]=\"loaderVal\" placeholder=\"Search\">\n
|
|
179
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: JobCodeNavComponent, selector: "app-job-code-nav", inputs: { customerRepoDetails: "customerRepoDetails" }, outputs: { jobemit: "jobemit", clearJobDetails: "clearJobDetails" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"nav_body\">\n <div class=\"search-panel\">\n <div class=\"datepicker\">\n <mat-form-field>\n <mat-label>Choose a date</mat-label>\n <input readonly matInput (click)=\"picker.open()\" [disabled]=\"loaderVal\" [(ngModel)]=\"dateValue\" [matDatepicker]=\"picker\" (dateChange)=\"getDate($event)\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n </div>\n <div class=\"search\">\n <form [formGroup]=\"filterForm\">\n <mat-form-field class=\"full-width\" [class.disabled]=\"loaderVal\">\n <input matInput [matChipInputFor]=\"chipList\" formControlName=\"search\" [matAutocomplete]=\"auto\"\n [disabled]=\"loaderVal\" placeholder=\"Search\">\n @if (!utils.conveySearchIcon(filterForm.value.search)) {\n <mat-icon matSuffix>search</mat-icon>\n }\n @if (utils.conveySearchIcon(filterForm.value.search)) {\n <button\n matSuffix \n mat-icon-button \n aria-label=\"Clear\" \n (click)=\"filterForm.reset()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" class=\"whole_width\">\n <mat-option *ngFor=\"let option of filteredOptions | async\" (onSelectionChange)=\"filterSearch($event)\"\n [value]=\"option\">\n {{option.type | titlecase }}: {{option['label']}}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n </form>\n </div>\n\n <div class=\"chip-list\">\n <mat-chip-grid #chipList aria-label=\"Filter selection\">\n @for (filter of filters; track filter) {\n <mat-chip-row class=\"chip-grid\" (removed)=\"removeFromFilter(filter)\">\n {{filter.type | titlecase }}: {{filter.name}}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n </mat-chip-grid>\n </div>\n </div>\n @if (config.repository === 'coolmap') {\n <div>\n <div class=\"stats-legend-container\">\n @for (legend of statLegend; track legend.label) {\n <div [ngStyle]=\"{background: legend.color}\" class=\"stats-legend\">\n <div class=\"stats-legend-box\">\n {{legend.total}}\n </div>\n <div class=\"stats-legend-label\">{{legend.label}}</div>\n </div>\n }\n </div>\n </div>\n }\n <app-route-jobcode-list [type]=\"'jobcode'\" [searchTerm]=\"filters\" [data]=\"listData\" [loader]=\"loaderVal\" (clearJobDetailsFromList)=\"clearJobDetails.emit(true)\" (showAllRoute)=\"filters = []; clearJobDetails.emit(true)\" (emitroute)=\"getRoute($event)\"></app-route-jobcode-list>\n</div>\n", styles: [".search-panel .datepicker,.search-panel .search{width:47%}.chip-grid{width:auto;height:auto}.stats-legend{display:inline-block;width:60px;margin:0 .2em;border-radius:10px;font-family:Roboto;padding:.425em 0;border:3px solid #ccc}.stats-legend-box{margin:auto;text-align:center;font-size:1.5rem;padding:0;color:#fff}.stats-legend-label{text-align:center;width:100%;color:#fff;font-size:.6rem}.stats-legend-container{display:inline-block;margin-bottom:10px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i8.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i8.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i9.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i9.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i9.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i9.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: i10.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i10.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i10.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i11.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i12.RouteJobCodeListComponent, selector: "app-route-jobcode-list", inputs: ["loader", "type", "data", "currentNav", "searchTerm", "clearListSeletion"], outputs: ["emitroute", "showAllRoute", "clearJobDetailsFromList"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TitleCasePipe, name: "titlecase" }] });
|
|
127
180
|
}
|
|
128
181
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: JobCodeNavComponent, decorators: [{
|
|
129
182
|
type: Component,
|
|
130
|
-
args: [{ selector: 'app-job-code-nav', template: "<div class=\"nav_body\">\n <div class=\"search-panel\">\n <div class=\"datepicker\">\n <mat-form-field>\n <mat-label>Choose a date</mat-label>\n <input readonly matInput (click)=\"picker.open()\" [disabled]=\"loaderVal\" [(ngModel)]=\"dateValue\" [matDatepicker]=\"picker\" (dateChange)=\"getDate($event)\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n </div>\n <div class=\"search\">\n <form [formGroup]=\"filterForm\">\n <mat-form-field class=\"full-width\" [class.disabled]=\"loaderVal\">\n <input matInput [matChipInputFor]=\"chipList\" formControlName=\"search\" [matAutocomplete]=\"auto\"\n [disabled]=\"loaderVal\" placeholder=\"Search\">\n
|
|
183
|
+
args: [{ selector: 'app-job-code-nav', template: "<div class=\"nav_body\">\n <div class=\"search-panel\">\n <div class=\"datepicker\">\n <mat-form-field>\n <mat-label>Choose a date</mat-label>\n <input readonly matInput (click)=\"picker.open()\" [disabled]=\"loaderVal\" [(ngModel)]=\"dateValue\" [matDatepicker]=\"picker\" (dateChange)=\"getDate($event)\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n </div>\n <div class=\"search\">\n <form [formGroup]=\"filterForm\">\n <mat-form-field class=\"full-width\" [class.disabled]=\"loaderVal\">\n <input matInput [matChipInputFor]=\"chipList\" formControlName=\"search\" [matAutocomplete]=\"auto\"\n [disabled]=\"loaderVal\" placeholder=\"Search\">\n @if (!utils.conveySearchIcon(filterForm.value.search)) {\n <mat-icon matSuffix>search</mat-icon>\n }\n @if (utils.conveySearchIcon(filterForm.value.search)) {\n <button\n matSuffix \n mat-icon-button \n aria-label=\"Clear\" \n (click)=\"filterForm.reset()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" class=\"whole_width\">\n <mat-option *ngFor=\"let option of filteredOptions | async\" (onSelectionChange)=\"filterSearch($event)\"\n [value]=\"option\">\n {{option.type | titlecase }}: {{option['label']}}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n </form>\n </div>\n\n <div class=\"chip-list\">\n <mat-chip-grid #chipList aria-label=\"Filter selection\">\n @for (filter of filters; track filter) {\n <mat-chip-row class=\"chip-grid\" (removed)=\"removeFromFilter(filter)\">\n {{filter.type | titlecase }}: {{filter.name}}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n </mat-chip-grid>\n </div>\n </div>\n @if (config.repository === 'coolmap') {\n <div>\n <div class=\"stats-legend-container\">\n @for (legend of statLegend; track legend.label) {\n <div [ngStyle]=\"{background: legend.color}\" class=\"stats-legend\">\n <div class=\"stats-legend-box\">\n {{legend.total}}\n </div>\n <div class=\"stats-legend-label\">{{legend.label}}</div>\n </div>\n }\n </div>\n </div>\n }\n <app-route-jobcode-list [type]=\"'jobcode'\" [searchTerm]=\"filters\" [data]=\"listData\" [loader]=\"loaderVal\" (clearJobDetailsFromList)=\"clearJobDetails.emit(true)\" (showAllRoute)=\"filters = []; clearJobDetails.emit(true)\" (emitroute)=\"getRoute($event)\"></app-route-jobcode-list>\n</div>\n", styles: [".search-panel .datepicker,.search-panel .search{width:47%}.chip-grid{width:auto;height:auto}.stats-legend{display:inline-block;width:60px;margin:0 .2em;border-radius:10px;font-family:Roboto;padding:.425em 0;border:3px solid #ccc}.stats-legend-box{margin:auto;text-align:center;font-size:1.5rem;padding:0;color:#fff}.stats-legend-label{text-align:center;width:100%;color:#fff;font-size:.6rem}.stats-legend-container{display:inline-block;margin-bottom:10px}\n"] }]
|
|
131
184
|
}], ctorParameters: () => [{ type: i1.UtilsService }, { type: i1.CoolmapConfigModel, decorators: [{
|
|
132
185
|
type: Inject,
|
|
133
186
|
args: ['memberData']
|
|
@@ -138,4 +191,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
138
191
|
}], customerRepoDetails: [{
|
|
139
192
|
type: Input
|
|
140
193
|
}] } });
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLWNvZGUtbmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvb2xtYXAvc3JjL2xpYi9jb21wb25lbnQvbmF2L2xheW91dC9qb2ItY29kZS1uYXYvam9iLWNvZGUtbmF2LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvb2xtYXAvc3JjL2xpYi9jb21wb25lbnQvbmF2L2xheW91dC9qb2ItY29kZS1uYXYvam9iLWNvZGUtbmF2LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFFTixNQUFNLEVBQ04sS0FBSyxHQUdOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxHQUFHLEVBQWMsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPeEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBYTFDLE1BQU0sT0FBTyxtQkFBbUI7SUFlckI7SUFDdUI7SUFmaEMsVUFBVSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFELFFBQVEsR0FBWSxFQUFFLENBQUM7SUFDdkIsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUMzQixTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNOLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzlDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDWCxlQUFlLENBQWlDO0lBQ2hELE9BQU8sR0FBYSxFQUFFLENBQUM7SUFDTixlQUFlLEdBQUcsSUFBSSxZQUFZLEVB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Q29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIE91dHB1dCxcbiAgT25EZXN0cm95LFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW50ZXJmYWNlIEZpbHRlciB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgdmFsdWU6IGFueTtcbiAgbGFiZWw/OiBzdHJpbmc7XG59XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIENvb2xtYXBDb25maWdNb2RlbCxcbiAgQ3VzdG9tZXJSZXBvRGV0YWlsc01vZGVsLFxuICBSb3V0ZSxcbiAgVXRpbHNTZXJ2aWNlLFxufSBmcm9tICdAYWdnZGlyZWN0L2Nvb2xtYXAtc2VydmljZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtam9iLWNvZGUtbmF2JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2pvYi1jb2RlLW5hdi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2pvYi1jb2RlLW5hdi5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBKb2JDb2RlTmF2Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBmaWx0ZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7IHNlYXJjaDogbmV3IEZvcm1Db250cm9sKCkgfSk7XG4gIGxpc3REYXRhOiBSb3V0ZVtdID0gW107XG4gIGxvYWRlclZhbDogYm9vbGVhbiA9IGZhbHNlO1xuICBkYXRlVmFsdWUgPSBuZXcgRGF0ZSgpO1xuICBAT3V0cHV0KCkgcHVibGljIGpvYmVtaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHZhbHVlID0gJyc7XG4gIGZpbHRlcmVkT3B0aW9ucyE6IE9ic2VydmFibGU8YW55W10+IHwgdW5kZWZpbmVkO1xuICBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICBAT3V0cHV0KCkgcHVibGljIGNsZWFySm9iRGV0YWlscyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIGRlc3Ryb3llciQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tZXJSZXBvRGV0YWlscyE6IEN1c3RvbWVyUmVwb0RldGFpbHNNb2RlbDtcbiAgc2VsZWN0ZWREYXRlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHV0aWxzOiBVdGlsc1NlcnZpY2UsXG4gICAgQEluamVjdCgnbWVtYmVyRGF0YScpIHByaXZhdGUgY29uZmlnOiBDb29sbWFwQ29uZmlnTW9kZWxcbiAgKSB7XG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSB0aGlzLnV0aWxzLmdldERhdGVGb3JtYXQobmV3IERhdGUoKSk7XG4gICAgdXRpbHMubmF2Q2hhbmdlT2JzZXJ2ZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llciQpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICB0aGlzLmxvYWRlclZhbCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHRoaXMubG9hZGVyVmFsID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1snY3VzdG9tZXJSZXBvRGV0YWlscyddICYmXG4gICAgICBjaGFuZ2VzWydjdXN0b21lclJlcG9EZXRhaWxzJ11bJ2N1cnJlbnRWYWx1ZSddXG4gICAgKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgIHRoaXMuZmlsdGVycyA9IFtdO1xuICAgICAgdGhpcy51dGlscy5jbGVhclZpZXdSb3V0ZWZvckpvYkNvZGUubmV4dCh0cnVlKTtcbiAgICB9XG4gIH1cbiAgbG9hZERhdGEodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gdmFsdWU7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLmZpbHRlckZvcm0uZ2V0KCdzZWFyY2gnKT8udmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICBzdGFydFdpdGgoJycpLFxuICAgICAgbWFwKCh2YWx1ZSkgPT4gdGhpcy51dGlscy5maWx0ZXIodmFsdWUsIHRoaXMuZmlsdGVycykpXG4gICAgKTtcbiAgICB0aGlzLnV0aWxzLnByZXZlbnRuYXZDaGFuZ2UubmV4dChmYWxzZSk7XG4gICAgdGhpcy5sb2FkZXJWYWwgPSB0cnVlO1xuICAgIGxldCBkYXRhU2V0O1xuICAgIGlmICh0aGlzLmNvbmZpZy5yZXBvc2l0b3J5ID09PSAnY3VzdG9tZXInKSB7XG4gICAgICBkYXRhU2V0ID0ge1xuICAgICAgICBkYXRlOiB2YWx1ZSxcbiAgICAgICAgY3VzdG9tZXJfaWQ6IHRoaXMuY3VzdG9tZXJSZXBvRGV0YWlscy5jdXN0b21lci5pZCxcbiAgICAgICAgcHJvamVjdF9pZDogdGhpcy5jdXN0b21lclJlcG9EZXRhaWxzLnByb2plY3RJZCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFTZXQgPSB7IGRhdGU6IHZhbHVlIH07XG4gICAgfVxuICAgIHRoaXMudXRpbHNcbiAgICAgIC5wb3N0ZGF0YSgnam9ic19yZXBvcnRfdjInLCBkYXRhU2V0KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVyJCkpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlc1snZGF0YSddICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKHJlc1snZGF0YSddLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5saXN0RGF0YSA9IHJlc1snZGF0YSddLm1hcCgoZWxlOiBSb3V0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGVsZVsnZGF0ZSddID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5saXN0RGF0YS5mb3JFYWNoKChlbGU6IFJvdXRlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnV0aWxzLm1ha2VPcHRpb25zKGVsZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHRoaXMubGlzdERhdGEgPSBbXTtcbiAgICAgICAgICB0aGlzLmNsZWFySm9iRGV0YWlscy5lbWl0KHRydWUpO1xuICAgICAgICAgIHRoaXMudXRpbHMuY2xlYXJWaWV3Um91dGVmb3JKb2JDb2RlLm5leHQodHJ1ZSk7XG4gICAgICAgICAgdGhpcy5maWx0ZXJzID0gW107XG4gICAgICAgICAgaWYgKHR5cGVvZiByZXNbJ2RhdGEnXSA9PT0gJ3N0cmluZycpIHRoaXMudXRpbHMucHJldmVudG5hdkNoYW5nZS5uZXh0KHRydWUpO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgaWYgKGVycikgdGhpcy51dGlscy5wcmV2ZW50bmF2Q2hhbmdlLm5leHQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBnZXRSb3V0ZShqb2I6IFJvdXRlKSB7XG4gICAgaWYgKGpvYlsndHlwZSddID09PSAnam9iY29kZScpIHtcbiAgICAgIHRoaXMuam9iZW1pdC5lbWl0KGpvYik7XG4gICAgfVxuICB9XG4gIGdldERhdGUoZXY6IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50PERhdGU+KSB7XG4gICAgdGhpcy5sb2FkRGF0YSh0aGlzLnV0aWxzLmdldERhdGVGb3JtYXQoZXYudmFsdWUpKTtcbiAgfVxuXG4gIGZpbHRlclNlYXJjaChlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlckZvcm0uY29udHJvbHMuc2VhcmNoLnNldFZhbHVlKG51bGwpO1xuICAgIHRoaXMuZmlsdGVyRm9ybS5jb250cm9scy5zZWFyY2gudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIHRoaXMuZmlsdGVycyA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogZS5zb3VyY2UudmFsdWUubGFiZWwsXG4gICAgICAgIHR5cGU6IGUuc291cmNlLnZhbHVlLnR5cGUsXG4gICAgICAgIHZhbHVlOiBlLnNvdXJjZS52YWx1ZSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuICByZW1vdmVGcm9tRmlsdGVyKGZpbHRlcjogYW55KTogdm9pZCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbHRlcnMuaW5kZXhPZihmaWx0ZXIpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLmZpbHRlcnMgPSBbXTtcbiAgICB9XG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95ZXIkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5kZXN0cm95ZXIkLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJuYXZfYm9keVwiPlxuICA8ZGl2IGNsYXNzPVwic2VhcmNoLXBhbmVsXCI+XG4gICAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXJcIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1sYWJlbD5DaG9vc2UgYSBkYXRlPC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dCByZWFkb25seSBtYXRJbnB1dCAoY2xpY2spPVwicGlja2VyLm9wZW4oKVwiIFtkaXNhYmxlZF09XCJsb2FkZXJWYWxcIiAgWyhuZ01vZGVsKV09XCJkYXRlVmFsdWVcIiBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiAoZGF0ZUNoYW5nZSk9XCJnZXREYXRlKCRldmVudClcIj5cbiAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInNlYXJjaFwiPlxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZmlsdGVyRm9ybVwiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIFtjbGFzcy5kaXNhYmxlZF09XCJsb2FkZXJWYWxcIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IFttYXRDaGlwSW5wdXRGb3JdPVwiY2hpcExpc3RcIiBmb3JtQ29udHJvbE5hbWU9XCJzZWFyY2hcIiBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkZXJWYWxcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXggKm5nSWY9XCIhdXRpbHMuY29udmV5U2VhcmNoSWNvbihmaWx0ZXJGb3JtLnZhbHVlLnNlYXJjaClcIj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdFN1ZmZpeCBcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbiBcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiIFxuICAgICAgICAgICAgKm5nSWY9XCJ1dGlscy5jb252ZXlTZWFyY2hJY29uKGZpbHRlckZvcm0udmFsdWUuc2VhcmNoKVwiIChjbGljayk9XCJmaWx0ZXJGb3JtLnJlc2V0KClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlIGF1dG9BY3RpdmVGaXJzdE9wdGlvbiAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIGNsYXNzPVwid2hvbGVfd2lkdGhcIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9ucyB8IGFzeW5jXCIgKG9uU2VsZWN0aW9uQ2hhbmdlKT1cImZpbHRlclNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb25cIj5cbiAgICAgICAgICAgIHt7b3B0aW9uLnR5cGUgfCB0aXRsZWNhc2UgfX06IHt7b3B0aW9uWydsYWJlbCddfX1cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNoaXAtbGlzdFwiPlxuICAgICAgPG1hdC1jaGlwLWdyaWQgI2NoaXBMaXN0IGFyaWEtbGFiZWw9XCJGaWx0ZXIgc2VsZWN0aW9uXCI+XG4gICAgICAgIEBmb3IgKGZpbHRlciBvZiBmaWx0ZXJzOyB0cmFjayBmaWx0ZXIpIHtcbiAgICAgICAgICA8bWF0LWNoaXAtcm93IGNsYXNzPVwiY2hpcC1ncmlkXCIgKHJlbW92ZWQpPVwicmVtb3ZlRnJvbUZpbHRlcihmaWx0ZXIpXCI+XG4gICAgICAgICAgICB7e2ZpbHRlci50eXBlIHwgdGl0bGVjYXNlIH19OiB7e2ZpbHRlci5uYW1lfX1cbiAgICAgICAgICAgIDxidXR0b24gbWF0Q2hpcFJlbW92ZT5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmNhbmNlbDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L21hdC1jaGlwLXJvdz5cbiAgICAgICAgfVxuICAgICAgPC9tYXQtY2hpcC1ncmlkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGFwcC1yb3V0ZS1qb2Jjb2RlLWxpc3QgW3R5cGVdPVwiJ2pvYmNvZGUnXCIgW3NlYXJjaFRlcm1dPVwiZmlsdGVyc1wiIFtkYXRhXT1cImxpc3REYXRhXCIgW2xvYWRlcl09XCJsb2FkZXJWYWxcIiAoY2xlYXJKb2JEZXRhaWxzRnJvbUxpc3QpPVwiY2xlYXJKb2JEZXRhaWxzLmVtaXQodHJ1ZSlcIiAoc2hvd0FsbFJvdXRlKT1cImZpbHRlcnMgPSBbXTsgY2xlYXJKb2JEZXRhaWxzLmVtaXQodHJ1ZSlcIiAoZW1pdHJvdXRlKT1cImdldFJvdXRlKCRldmVudClcIj48L2FwcC1yb3V0ZS1qb2Jjb2RlLWxpc3Q+XG48L2Rpdj5cbiJdfQ==
|
|
194
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLWNvZGUtbmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvb2xtYXAvc3JjL2xpYi9jb21wb25lbnQvbmF2L2xheW91dC9qb2ItY29kZS1uYXYvam9iLWNvZGUtbmF2LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvb2xtYXAvc3JjL2xpYi9jb21wb25lbnQvbmF2L2xheW91dC9qb2ItY29kZS1uYXYvam9iLWNvZGUtbmF2LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFFTixNQUFNLEVBQ04sS0FBSyxHQUdOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxHQUFHLEVBQWMsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPeEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBYTFDLE1BQU0sT0FBTyxtQkFBbUI7SUFvQnJCO0lBQ3NCO0lBcEIvQixVQUFVLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUQsUUFBUSxHQUFZLEVBQUUsQ0FBQztJQUN2QixTQUFTLEdBQVksS0FBSyxDQUFDO0lBQzNCLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ04sT0FBTyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDOUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNYLGVBQWUsQ0FBaUM7SUFDaEQsT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUNOLGVBQWUsR0FBRyxJQUFJLFlBQVks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QUMsQ0FBQyxNQUFNLENBQUMsS0FBSzthQUN0QjtTQUNGLENBQUM7SUFDSixDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsTUFBVztRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBQ0QsV0FBVztRQUNULElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDaEMsQ0FBQzt3R0FsS1UsbUJBQW1CLDhDQXFCcEIsWUFBWTs0RkFyQlgsbUJBQW1CLDBNQ2hDaEMseTJGQWtFQTs7NEZEbENhLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxrQkFBa0I7OzBCQXlCekIsTUFBTTsyQkFBQyxZQUFZO3lDQWhCTCxPQUFPO3NCQUF2QixNQUFNO2dCQUlVLGVBQWU7c0JBQS9CLE1BQU07Z0JBRVMsbUJBQW1CO3NCQUFsQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIE91dHB1dCxcbiAgT25EZXN0cm95LFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW50ZXJmYWNlIEZpbHRlciB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgdmFsdWU6IGFueTtcbiAgbGFiZWw/OiBzdHJpbmc7XG59XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIENvb2xtYXBDb25maWdNb2RlbCxcbiAgQ3VzdG9tZXJSZXBvRGV0YWlsc01vZGVsLFxuICBSb3V0ZSxcbiAgVXRpbHNTZXJ2aWNlLFxufSBmcm9tICdAYWdnZGlyZWN0L2Nvb2xtYXAtc2VydmljZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtam9iLWNvZGUtbmF2JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2pvYi1jb2RlLW5hdi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2pvYi1jb2RlLW5hdi5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBKb2JDb2RlTmF2Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBmaWx0ZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7IHNlYXJjaDogbmV3IEZvcm1Db250cm9sKCkgfSk7XG4gIGxpc3REYXRhOiBSb3V0ZVtdID0gW107XG4gIGxvYWRlclZhbDogYm9vbGVhbiA9IGZhbHNlO1xuICBkYXRlVmFsdWUgPSBuZXcgRGF0ZSgpO1xuICBAT3V0cHV0KCkgcHVibGljIGpvYmVtaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHZhbHVlID0gJyc7XG4gIGZpbHRlcmVkT3B0aW9ucyE6IE9ic2VydmFibGU8YW55W10+IHwgdW5kZWZpbmVkO1xuICBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICBAT3V0cHV0KCkgcHVibGljIGNsZWFySm9iRGV0YWlscyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIGRlc3Ryb3llciQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tZXJSZXBvRGV0YWlscyE6IEN1c3RvbWVyUmVwb0RldGFpbHNNb2RlbDtcbiAgc2VsZWN0ZWREYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyBzdGF0TGVnZW5kID0gW1xuICAgIHtsYWJlbDogJ0RvbmUnLCBjb2xvcjogJyMwMENDMDAnLCB0b3RhbDogMH0sXG4gICAge2xhYmVsOiAnSW5jb21wbGV0ZScsIGNvbG9yOiAnIzAwMDAwMCcsIHRvdGFsOiAwfSxcbiAgICB7bGFiZWw6ICdPbmdvaW5nJywgY29sb3I6ICcjRkZBQTAwJywgdG90YWw6IDB9LFxuICAgIHtsYWJlbDogJ09wZW4nLCBjb2xvcjogJyNDQ0NDQ0MnLCB0b3RhbDogMH1cbiAgXTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHV0aWxzOiBVdGlsc1NlcnZpY2UsXG4gICAgQEluamVjdCgnbWVtYmVyRGF0YScpIHB1YmxpYyBjb25maWc6IENvb2xtYXBDb25maWdNb2RlbFxuICApIHtcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHRoaXMudXRpbHMuZ2V0RGF0ZUZvcm1hdChuZXcgRGF0ZSgpKTtcbiAgICB1dGlscy5uYXZDaGFuZ2VPYnNlcnZlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVyJCkpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHRoaXMubG9hZGVyVmFsID0gZmFsc2U7XG4gICAgICB9IGVsc2UgdGhpcy5sb2FkZXJWYWwgPSB0cnVlO1xuICAgIH0pO1xuICB9XG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzWydjdXN0b21lclJlcG9EZXRhaWxzJ10gJiZcbiAgICAgIGNoYW5nZXNbJ2N1c3RvbWVyUmVwb0RldGFpbHMnXVsnY3VycmVudFZhbHVlJ11cbiAgICApIHtcbiAgICAgIHRoaXMubG9hZERhdGEodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgICAgdGhpcy5maWx0ZXJzID0gW107XG4gICAgICB0aGlzLnV0aWxzLmNsZWFyVmlld1JvdXRlZm9ySm9iQ29kZS5uZXh0KHRydWUpO1xuICAgIH1cbiAgfVxuICBsb2FkRGF0YSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMuZmlsdGVyRm9ybS5nZXQoJ3NlYXJjaCcpPy52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aCgnJyksXG4gICAgICBtYXAoKHZhbHVlKSA9PiB0aGlzLnV0aWxzLmZpbHRlcih2YWx1ZSwgdGhpcy5maWx0ZXJzKSlcbiAgICApO1xuICAgIHRoaXMudXRpbHMucHJldmVudG5hdkNoYW5nZS5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLmxvYWRlclZhbCA9IHRydWU7XG4gICAgbGV0IGRhdGFTZXQ7XG4gICAgaWYgKHRoaXMuY29uZmlnLnJlcG9zaXRvcnkgPT09ICdjdXN0b21lcicpIHtcbiAgICAgIGRhdGFTZXQgPSB7XG4gICAgICAgIGRhdGU6IHZhbHVlLFxuICAgICAgICBjdXN0b21lcl9pZDogdGhpcy5jdXN0b21lclJlcG9EZXRhaWxzLmN1c3RvbWVyLmlkLFxuICAgICAgICBwcm9qZWN0X2lkOiB0aGlzLmN1c3RvbWVyUmVwb0RldGFpbHMucHJvamVjdElkLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YVNldCA9IHsgZGF0ZTogdmFsdWUgfTtcbiAgICB9XG4gICAgdGhpcy51dGlsc1xuICAgICAgLnBvc3RkYXRhKCdqb2JzX3JlcG9ydF92MicsIGRhdGFTZXQpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZXIkKSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgcmVzWydkYXRhJ10gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAocmVzWydkYXRhJ10ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0aGlzLmxpc3REYXRhID0gcmVzWydkYXRhJ10ubWFwKChlbGU6IFJvdXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlWydkYXRlJ10gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5yZXBvc2l0b3J5ID09PSAnY3VzdG9tZXInKSB7XG4gICAgICAgICAgICAgIGxldCBwcm9qZWN0TmFtZSA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCdwcm9qZWN0PScpLnBvcCgpO1xuICAgICAgICAgICAgICBwcm9qZWN0TmFtZSA9IHByb2plY3ROYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgdGhpcy5saXN0RGF0YSA9IHRoaXMubGlzdERhdGEuZmlsdGVyKGVsZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvamVjdCA9IGVsZS5wcm9qZWN0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgbGV0IGFkanVzdGVkUHJvamVjdCA9IHByb2plY3QucmVwbGFjZSgvXFxzK3xcXC8rL2csIFwiX1wiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRqdXN0ZWRQcm9qZWN0ID09PSBwcm9qZWN0TmFtZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxpc3REYXRhLmZvckVhY2goKGVsZTogUm91dGUpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy51dGlscy5tYWtlT3B0aW9ucyhlbGUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB0aGlzLmxpc3REYXRhID0gW107XG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnJlcG9zaXRvcnkgPT09ICdjb29sbWFwJykge1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVTdGF0c1RvdGFscygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNsZWFySm9iRGV0YWlscy5lbWl0KHRydWUpO1xuICAgICAgICAgIHRoaXMudXRpbHMuY2xlYXJWaWV3Um91dGVmb3JKb2JDb2RlLm5leHQodHJ1ZSk7XG4gICAgICAgICAgdGhpcy5maWx0ZXJzID0gW107XG4gICAgICAgICAgaWYgKHR5cGVvZiByZXNbJ2RhdGEnXSA9PT0gJ3N0cmluZycpIHRoaXMudXRpbHMucHJldmVudG5hdkNoYW5nZS5uZXh0KHRydWUpO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgaWYgKGVycikgdGhpcy51dGlscy5wcmV2ZW50bmF2Q2hhbmdlLm5leHQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cbiAgY2FsY3VsYXRlU3RhdHNUb3RhbHMoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0TGVnZW5kLmZvckVhY2gobGVnZW5kID0+IHtcbiAgICAgIGxlZ2VuZC50b3RhbCA9IDA7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5saXN0RGF0YSAmJiB0aGlzLmxpc3REYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMubGlzdERhdGEuZm9yRWFjaCgoaXRlbTogUm91dGUpID0+IHtcbiAgICAgICAgaWYgKGl0ZW0udmFsdWVzKSB7XG4gICAgICAgICAgaWYgKGl0ZW0udmFsdWVzWydEb25lJ10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgZG9uZUxlZ2VuZCA9IHRoaXMuc3RhdExlZ2VuZC5maW5kKGxlZ2VuZCA9PiBsZWdlbmQubGFiZWwgPT09ICdEb25lJyk7XG4gICAgICAgICAgICBpZiAoZG9uZUxlZ2VuZCkge1xuICAgICAgICAgICAgICBkb25lTGVnZW5kLnRvdGFsICs9IGl0ZW0udmFsdWVzWydEb25lJ10gfHwgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0ZW0udmFsdWVzWydJbmNvbXBsZXRlJ10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgaW5jb21wbGV0ZUxlZ2VuZCA9IHRoaXMuc3RhdExlZ2VuZC5maW5kKGxlZ2VuZCA9PiBsZWdlbmQubGFiZWwgPT09ICdJbmNvbXBsZXRlJyk7XG4gICAgICAgICAgICBpZiAoaW5jb21wbGV0ZUxlZ2VuZCkge1xuICAgICAgICAgICAgICBpbmNvbXBsZXRlTGVnZW5kLnRvdGFsICs9IGl0ZW0udmFsdWVzWydJbmNvbXBsZXRlJ10gfHwgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0ZW0udmFsdWVzWydPbmdvaW5nJ10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3Qgb25nb2luZ0xlZ2VuZCA9IHRoaXMuc3RhdExlZ2VuZC5maW5kKGxlZ2VuZCA9PiBsZWdlbmQubGFiZWwgPT09ICdPbmdvaW5nJyk7XG4gICAgICAgICAgICBpZiAob25nb2luZ0xlZ2VuZCkge1xuICAgICAgICAgICAgICBvbmdvaW5nTGVnZW5kLnRvdGFsICs9IGl0ZW0udmFsdWVzWydPbmdvaW5nJ10gfHwgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0ZW0udmFsdWVzWydPcGVuJ10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3Qgb3BlbkxlZ2VuZCA9IHRoaXMuc3RhdExlZ2VuZC5maW5kKGxlZ2VuZCA9PiBsZWdlbmQubGFiZWwgPT09ICdPcGVuJyk7XG4gICAgICAgICAgICBpZiAob3BlbkxlZ2VuZCkge1xuICAgICAgICAgICAgICBvcGVuTGVnZW5kLnRvdGFsICs9IGl0ZW0udmFsdWVzWydPcGVuJ10gfHwgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldFJvdXRlKGpvYjogUm91dGUpIHtcbiAgICBpZiAoam9iWyd0eXBlJ10gPT09ICdqb2Jjb2RlJykge1xuICAgICAgdGhpcy5qb2JlbWl0LmVtaXQoam9iKTtcbiAgICB9XG4gIH1cbiAgZ2V0RGF0ZShldjogTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQ8RGF0ZT4pIHtcbiAgICB0aGlzLmxvYWREYXRhKHRoaXMudXRpbHMuZ2V0RGF0ZUZvcm1hdChldi52YWx1ZSkpO1xuICB9XG5cbiAgZmlsdGVyU2VhcmNoKGU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyRm9ybS5jb250cm9scy5zZWFyY2guc2V0VmFsdWUobnVsbCk7XG4gICAgdGhpcy5maWx0ZXJGb3JtLmNvbnRyb2xzLnNlYXJjaC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgdGhpcy5maWx0ZXJzID0gW1xuICAgICAge1xuICAgICAgICBuYW1lOiBlLnNvdXJjZS52YWx1ZS5sYWJlbCxcbiAgICAgICAgdHlwZTogZS5zb3VyY2UudmFsdWUudHlwZSxcbiAgICAgICAgdmFsdWU6IGUuc291cmNlLnZhbHVlLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG4gIHJlbW92ZUZyb21GaWx0ZXIoZmlsdGVyOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmlsdGVycy5pbmRleE9mKGZpbHRlcik7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHRoaXMuZmlsdGVycyA9IFtdO1xuICAgIH1cbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3llciQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmRlc3Ryb3llciQudW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm5hdl9ib2R5XCI+XG4gIDxkaXYgY2xhc3M9XCJzZWFyY2gtcGFuZWxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlclwiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPkNob29zZSBhIGRhdGU8L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IHJlYWRvbmx5IG1hdElucHV0IChjbGljayk9XCJwaWNrZXIub3BlbigpXCIgW2Rpc2FibGVkXT1cImxvYWRlclZhbFwiICBbKG5nTW9kZWwpXT1cImRhdGVWYWx1ZVwiIFttYXREYXRlcGlja2VyXT1cInBpY2tlclwiIChkYXRlQ2hhbmdlKT1cImdldERhdGUoJGV2ZW50KVwiPlxuICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlcj48L21hdC1kYXRlcGlja2VyPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic2VhcmNoXCI+XG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmdWxsLXdpZHRoXCIgW2NsYXNzLmRpc2FibGVkXT1cImxvYWRlclZhbFwiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW21hdENoaXBJbnB1dEZvcl09XCJjaGlwTGlzdFwiIGZvcm1Db250cm9sTmFtZT1cInNlYXJjaFwiIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRlclZhbFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCI+XG4gICAgICAgICAgQGlmICghdXRpbHMuY29udmV5U2VhcmNoSWNvbihmaWx0ZXJGb3JtLnZhbHVlLnNlYXJjaCkpIHtcbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXg+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmICh1dGlscy5jb252ZXlTZWFyY2hJY29uKGZpbHRlckZvcm0udmFsdWUuc2VhcmNoKSkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBtYXRTdWZmaXggXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbiBcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCIgXG4gICAgICAgICAgICAgIChjbGljayk9XCJmaWx0ZXJGb3JtLnJlc2V0KClcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgYXV0b0FjdGl2ZUZpcnN0T3B0aW9uICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgY2xhc3M9XCJ3aG9sZV93aWR0aFwiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zIHwgYXN5bmNcIiAob25TZWxlY3Rpb25DaGFuZ2UpPVwiZmlsdGVyU2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvblwiPlxuICAgICAgICAgICAge3tvcHRpb24udHlwZSB8IHRpdGxlY2FzZSB9fToge3tvcHRpb25bJ2xhYmVsJ119fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Zvcm0+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2hpcC1saXN0XCI+XG4gICAgICA8bWF0LWNoaXAtZ3JpZCAjY2hpcExpc3QgYXJpYS1sYWJlbD1cIkZpbHRlciBzZWxlY3Rpb25cIj5cbiAgICAgICAgQGZvciAoZmlsdGVyIG9mIGZpbHRlcnM7IHRyYWNrIGZpbHRlcikge1xuICAgICAgICAgIDxtYXQtY2hpcC1yb3cgY2xhc3M9XCJjaGlwLWdyaWRcIiAocmVtb3ZlZCk9XCJyZW1vdmVGcm9tRmlsdGVyKGZpbHRlcilcIj5cbiAgICAgICAgICAgIHt7ZmlsdGVyLnR5cGUgfCB0aXRsZWNhc2UgfX06IHt7ZmlsdGVyLm5hbWV9fVxuICAgICAgICAgICAgPGJ1dHRvbiBtYXRDaGlwUmVtb3ZlPlxuICAgICAgICAgICAgICA8bWF0LWljb24+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbWF0LWNoaXAtcm93PlxuICAgICAgICB9XG4gICAgICA8L21hdC1jaGlwLWdyaWQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICBAaWYgKGNvbmZpZy5yZXBvc2l0b3J5ID09PSAnY29vbG1hcCcpIHtcbiAgICA8ZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInN0YXRzLWxlZ2VuZC1jb250YWluZXJcIj5cbiAgICAgICAgQGZvciAobGVnZW5kIG9mIHN0YXRMZWdlbmQ7IHRyYWNrIGxlZ2VuZC5sYWJlbCkge1xuICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwie2JhY2tncm91bmQ6IGxlZ2VuZC5jb2xvcn1cIiBjbGFzcz1cInN0YXRzLWxlZ2VuZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0YXRzLWxlZ2VuZC1ib3hcIj5cbiAgICAgICAgICAgICAge3tsZWdlbmQudG90YWx9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHMtbGVnZW5kLWxhYmVsXCI+e3tsZWdlbmQubGFiZWx9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuICA8YXBwLXJvdXRlLWpvYmNvZGUtbGlzdCBbdHlwZV09XCInam9iY29kZSdcIiBbc2VhcmNoVGVybV09XCJmaWx0ZXJzXCIgW2RhdGFdPVwibGlzdERhdGFcIiBbbG9hZGVyXT1cImxvYWRlclZhbFwiIChjbGVhckpvYkRldGFpbHNGcm9tTGlzdCk9XCJjbGVhckpvYkRldGFpbHMuZW1pdCh0cnVlKVwiIChzaG93QWxsUm91dGUpPVwiZmlsdGVycyA9IFtdOyBjbGVhckpvYkRldGFpbHMuZW1pdCh0cnVlKVwiIChlbWl0cm91dGUpPVwiZ2V0Um91dGUoJGV2ZW50KVwiPjwvYXBwLXJvdXRlLWpvYmNvZGUtbGlzdD5cbjwvZGl2PlxuIl19
|
|
@@ -696,6 +696,12 @@ class JobCodeNavComponent {
|
|
|
696
696
|
destroyer$ = new Subject();
|
|
697
697
|
customerRepoDetails;
|
|
698
698
|
selectedDate;
|
|
699
|
+
statLegend = [
|
|
700
|
+
{ label: 'Done', color: '#00CC00', total: 0 },
|
|
701
|
+
{ label: 'Incomplete', color: '#000000', total: 0 },
|
|
702
|
+
{ label: 'Ongoing', color: '#FFAA00', total: 0 },
|
|
703
|
+
{ label: 'Open', color: '#CCCCCC', total: 0 }
|
|
704
|
+
];
|
|
699
705
|
constructor(utils, config) {
|
|
700
706
|
this.utils = utils;
|
|
701
707
|
this.config = config;
|
|
@@ -743,12 +749,24 @@ class JobCodeNavComponent {
|
|
|
743
749
|
return ele;
|
|
744
750
|
});
|
|
745
751
|
}
|
|
752
|
+
if (this.config.repository === 'customer') {
|
|
753
|
+
let projectName = window.location.href.split('project=').pop();
|
|
754
|
+
projectName = projectName.toLowerCase();
|
|
755
|
+
this.listData = this.listData.filter(ele => {
|
|
756
|
+
const project = ele.project.toLowerCase();
|
|
757
|
+
let adjustedProject = project.replace(/\s+|\/+/g, "_");
|
|
758
|
+
return adjustedProject === projectName;
|
|
759
|
+
});
|
|
760
|
+
}
|
|
746
761
|
this.listData.forEach((ele) => {
|
|
747
762
|
this.utils.makeOptions(ele);
|
|
748
763
|
});
|
|
749
764
|
}
|
|
750
765
|
else
|
|
751
766
|
this.listData = [];
|
|
767
|
+
if (this.config.repository === 'coolmap') {
|
|
768
|
+
this.calculateStatsTotals();
|
|
769
|
+
}
|
|
752
770
|
this.clearJobDetails.emit(true);
|
|
753
771
|
this.utils.clearViewRouteforJobCode.next(true);
|
|
754
772
|
this.filters = [];
|
|
@@ -759,6 +777,41 @@ class JobCodeNavComponent {
|
|
|
759
777
|
this.utils.preventnavChange.next(true);
|
|
760
778
|
});
|
|
761
779
|
}
|
|
780
|
+
calculateStatsTotals() {
|
|
781
|
+
this.statLegend.forEach(legend => {
|
|
782
|
+
legend.total = 0;
|
|
783
|
+
});
|
|
784
|
+
if (this.listData && this.listData.length > 0) {
|
|
785
|
+
this.listData.forEach((item) => {
|
|
786
|
+
if (item.values) {
|
|
787
|
+
if (item.values['Done'] !== undefined) {
|
|
788
|
+
const doneLegend = this.statLegend.find(legend => legend.label === 'Done');
|
|
789
|
+
if (doneLegend) {
|
|
790
|
+
doneLegend.total += item.values['Done'] || 0;
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
if (item.values['Incomplete'] !== undefined) {
|
|
794
|
+
const incompleteLegend = this.statLegend.find(legend => legend.label === 'Incomplete');
|
|
795
|
+
if (incompleteLegend) {
|
|
796
|
+
incompleteLegend.total += item.values['Incomplete'] || 0;
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
if (item.values['Ongoing'] !== undefined) {
|
|
800
|
+
const ongoingLegend = this.statLegend.find(legend => legend.label === 'Ongoing');
|
|
801
|
+
if (ongoingLegend) {
|
|
802
|
+
ongoingLegend.total += item.values['Ongoing'] || 0;
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
if (item.values['Open'] !== undefined) {
|
|
806
|
+
const openLegend = this.statLegend.find(legend => legend.label === 'Open');
|
|
807
|
+
if (openLegend) {
|
|
808
|
+
openLegend.total += item.values['Open'] || 0;
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
});
|
|
813
|
+
}
|
|
814
|
+
}
|
|
762
815
|
getRoute(job) {
|
|
763
816
|
if (job['type'] === 'jobcode') {
|
|
764
817
|
this.jobemit.emit(job);
|
|
@@ -789,11 +842,11 @@ class JobCodeNavComponent {
|
|
|
789
842
|
this.destroyer$.unsubscribe();
|
|
790
843
|
}
|
|
791
844
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: JobCodeNavComponent, deps: [{ token: i1.UtilsService }, { token: 'memberData' }], target: i0.ɵɵFactoryTarget.Component });
|
|
792
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: JobCodeNavComponent, selector: "app-job-code-nav", inputs: { customerRepoDetails: "customerRepoDetails" }, outputs: { jobemit: "jobemit", clearJobDetails: "clearJobDetails" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"nav_body\">\n <div class=\"search-panel\">\n <div class=\"datepicker\">\n <mat-form-field>\n <mat-label>Choose a date</mat-label>\n <input readonly matInput (click)=\"picker.open()\" [disabled]=\"loaderVal\" [(ngModel)]=\"dateValue\" [matDatepicker]=\"picker\" (dateChange)=\"getDate($event)\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n </div>\n <div class=\"search\">\n <form [formGroup]=\"filterForm\">\n <mat-form-field class=\"full-width\" [class.disabled]=\"loaderVal\">\n <input matInput [matChipInputFor]=\"chipList\" formControlName=\"search\" [matAutocomplete]=\"auto\"\n [disabled]=\"loaderVal\" placeholder=\"Search\">\n
|
|
845
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: JobCodeNavComponent, selector: "app-job-code-nav", inputs: { customerRepoDetails: "customerRepoDetails" }, outputs: { jobemit: "jobemit", clearJobDetails: "clearJobDetails" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"nav_body\">\n <div class=\"search-panel\">\n <div class=\"datepicker\">\n <mat-form-field>\n <mat-label>Choose a date</mat-label>\n <input readonly matInput (click)=\"picker.open()\" [disabled]=\"loaderVal\" [(ngModel)]=\"dateValue\" [matDatepicker]=\"picker\" (dateChange)=\"getDate($event)\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n </div>\n <div class=\"search\">\n <form [formGroup]=\"filterForm\">\n <mat-form-field class=\"full-width\" [class.disabled]=\"loaderVal\">\n <input matInput [matChipInputFor]=\"chipList\" formControlName=\"search\" [matAutocomplete]=\"auto\"\n [disabled]=\"loaderVal\" placeholder=\"Search\">\n @if (!utils.conveySearchIcon(filterForm.value.search)) {\n <mat-icon matSuffix>search</mat-icon>\n }\n @if (utils.conveySearchIcon(filterForm.value.search)) {\n <button\n matSuffix \n mat-icon-button \n aria-label=\"Clear\" \n (click)=\"filterForm.reset()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" class=\"whole_width\">\n <mat-option *ngFor=\"let option of filteredOptions | async\" (onSelectionChange)=\"filterSearch($event)\"\n [value]=\"option\">\n {{option.type | titlecase }}: {{option['label']}}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n </form>\n </div>\n\n <div class=\"chip-list\">\n <mat-chip-grid #chipList aria-label=\"Filter selection\">\n @for (filter of filters; track filter) {\n <mat-chip-row class=\"chip-grid\" (removed)=\"removeFromFilter(filter)\">\n {{filter.type | titlecase }}: {{filter.name}}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n </mat-chip-grid>\n </div>\n </div>\n @if (config.repository === 'coolmap') {\n <div>\n <div class=\"stats-legend-container\">\n @for (legend of statLegend; track legend.label) {\n <div [ngStyle]=\"{background: legend.color}\" class=\"stats-legend\">\n <div class=\"stats-legend-box\">\n {{legend.total}}\n </div>\n <div class=\"stats-legend-label\">{{legend.label}}</div>\n </div>\n }\n </div>\n </div>\n }\n <app-route-jobcode-list [type]=\"'jobcode'\" [searchTerm]=\"filters\" [data]=\"listData\" [loader]=\"loaderVal\" (clearJobDetailsFromList)=\"clearJobDetails.emit(true)\" (showAllRoute)=\"filters = []; clearJobDetails.emit(true)\" (emitroute)=\"getRoute($event)\"></app-route-jobcode-list>\n</div>\n", styles: [".search-panel .datepicker,.search-panel .search{width:47%}.chip-grid{width:auto;height:auto}.stats-legend{display:inline-block;width:60px;margin:0 .2em;border-radius:10px;font-family:Roboto;padding:.425em 0;border:3px solid #ccc}.stats-legend-box{margin:auto;text-align:center;font-size:1.5rem;padding:0;color:#fff}.stats-legend-label{text-align:center;width:100%;color:#fff;font-size:.6rem}.stats-legend-container{display:inline-block;margin-bottom:10px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i8$1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i8$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i9.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i9.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i9.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i9.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: i10$1.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i10$1.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i10$1.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i10.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: RouteJobCodeListComponent, selector: "app-route-jobcode-list", inputs: ["loader", "type", "data", "currentNav", "searchTerm", "clearListSeletion"], outputs: ["emitroute", "showAllRoute", "clearJobDetailsFromList"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TitleCasePipe, name: "titlecase" }] });
|
|
793
846
|
}
|
|
794
847
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: JobCodeNavComponent, decorators: [{
|
|
795
848
|
type: Component,
|
|
796
|
-
args: [{ selector: 'app-job-code-nav', template: "<div class=\"nav_body\">\n <div class=\"search-panel\">\n <div class=\"datepicker\">\n <mat-form-field>\n <mat-label>Choose a date</mat-label>\n <input readonly matInput (click)=\"picker.open()\" [disabled]=\"loaderVal\" [(ngModel)]=\"dateValue\" [matDatepicker]=\"picker\" (dateChange)=\"getDate($event)\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n </div>\n <div class=\"search\">\n <form [formGroup]=\"filterForm\">\n <mat-form-field class=\"full-width\" [class.disabled]=\"loaderVal\">\n <input matInput [matChipInputFor]=\"chipList\" formControlName=\"search\" [matAutocomplete]=\"auto\"\n [disabled]=\"loaderVal\" placeholder=\"Search\">\n
|
|
849
|
+
args: [{ selector: 'app-job-code-nav', template: "<div class=\"nav_body\">\n <div class=\"search-panel\">\n <div class=\"datepicker\">\n <mat-form-field>\n <mat-label>Choose a date</mat-label>\n <input readonly matInput (click)=\"picker.open()\" [disabled]=\"loaderVal\" [(ngModel)]=\"dateValue\" [matDatepicker]=\"picker\" (dateChange)=\"getDate($event)\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n </div>\n <div class=\"search\">\n <form [formGroup]=\"filterForm\">\n <mat-form-field class=\"full-width\" [class.disabled]=\"loaderVal\">\n <input matInput [matChipInputFor]=\"chipList\" formControlName=\"search\" [matAutocomplete]=\"auto\"\n [disabled]=\"loaderVal\" placeholder=\"Search\">\n @if (!utils.conveySearchIcon(filterForm.value.search)) {\n <mat-icon matSuffix>search</mat-icon>\n }\n @if (utils.conveySearchIcon(filterForm.value.search)) {\n <button\n matSuffix \n mat-icon-button \n aria-label=\"Clear\" \n (click)=\"filterForm.reset()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" class=\"whole_width\">\n <mat-option *ngFor=\"let option of filteredOptions | async\" (onSelectionChange)=\"filterSearch($event)\"\n [value]=\"option\">\n {{option.type | titlecase }}: {{option['label']}}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n </form>\n </div>\n\n <div class=\"chip-list\">\n <mat-chip-grid #chipList aria-label=\"Filter selection\">\n @for (filter of filters; track filter) {\n <mat-chip-row class=\"chip-grid\" (removed)=\"removeFromFilter(filter)\">\n {{filter.type | titlecase }}: {{filter.name}}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n </mat-chip-grid>\n </div>\n </div>\n @if (config.repository === 'coolmap') {\n <div>\n <div class=\"stats-legend-container\">\n @for (legend of statLegend; track legend.label) {\n <div [ngStyle]=\"{background: legend.color}\" class=\"stats-legend\">\n <div class=\"stats-legend-box\">\n {{legend.total}}\n </div>\n <div class=\"stats-legend-label\">{{legend.label}}</div>\n </div>\n }\n </div>\n </div>\n }\n <app-route-jobcode-list [type]=\"'jobcode'\" [searchTerm]=\"filters\" [data]=\"listData\" [loader]=\"loaderVal\" (clearJobDetailsFromList)=\"clearJobDetails.emit(true)\" (showAllRoute)=\"filters = []; clearJobDetails.emit(true)\" (emitroute)=\"getRoute($event)\"></app-route-jobcode-list>\n</div>\n", styles: [".search-panel .datepicker,.search-panel .search{width:47%}.chip-grid{width:auto;height:auto}.stats-legend{display:inline-block;width:60px;margin:0 .2em;border-radius:10px;font-family:Roboto;padding:.425em 0;border:3px solid #ccc}.stats-legend-box{margin:auto;text-align:center;font-size:1.5rem;padding:0;color:#fff}.stats-legend-label{text-align:center;width:100%;color:#fff;font-size:.6rem}.stats-legend-container{display:inline-block;margin-bottom:10px}\n"] }]
|
|
797
850
|
}], ctorParameters: () => [{ type: i1.UtilsService }, { type: i1.CoolmapConfigModel, decorators: [{
|
|
798
851
|
type: Inject,
|
|
799
852
|
args: ['memberData']
|