brainloper-ui 14.1.0 → 14.1.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.
- package/esm2020/brainloper-ui.mjs +4 -4
- package/esm2020/public_api.mjs +56 -51
- package/esm2020/src/app/modules/brainloper-ui/brainloper-ui.module.mjs +310 -305
- package/esm2020/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.mjs +29 -29
- package/esm2020/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.mjs +23 -23
- package/esm2020/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.mjs +83 -83
- package/esm2020/src/app/modules/brainloper-ui/components/carousel/carousel.component.mjs +37 -31
- package/esm2020/src/app/modules/brainloper-ui/components/combos/combos.component.mjs +176 -176
- package/esm2020/src/app/modules/brainloper-ui/components/data-table/data-table.component.mjs +728 -652
- package/esm2020/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.mjs +118 -118
- package/esm2020/src/app/modules/brainloper-ui/components/file-input/file-input.component.mjs +186 -185
- package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/doc.mjs +1 -1
- package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/fondoTransparente.mjs +1 -1
- package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/pdf.mjs +1 -1
- package/esm2020/src/app/modules/brainloper-ui/components/filters/filters.component.mjs +222 -222
- package/esm2020/src/app/modules/brainloper-ui/components/report/generate-pdf/generate-pdf.component.mjs +80 -80
- package/esm2020/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.mjs +81 -81
- package/esm2020/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.mjs +108 -108
- package/esm2020/src/app/modules/directives/carousel-item.directive.mjs +18 -0
- package/esm2020/src/app/modules/interfaces/buttons/button-icon.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/buttons/button-lavel-edit.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/combos/combos-configuration.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/data-table/params.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/data-table/rules.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/data-table/table-columns.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/data-table/table-configuration.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/enum/enumActions.mjs +8 -7
- package/esm2020/src/app/modules/interfaces/enum/enumRules.mjs +8 -8
- package/esm2020/src/app/modules/interfaces/file-forms-service/file-forms-params.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/file-forms-service/file-input-params.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/filters/header-filters.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.mjs +8 -8
- package/esm2020/src/app/modules/interfaces/report/template-pdf-ot.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/report/template-pfd-fo.mjs +2 -2
- package/esm2020/src/app/modules/services/crypto.service.mjs +37 -37
- package/esm2020/src/app/modules/services/export-data.service.mjs +166 -166
- package/esm2020/src/app/modules/services/file-forms.service.mjs +24 -24
- package/esm2020/src/app/modules/services/functions.service.mjs +54 -54
- package/esm2020/src/app/modules/services/generate-pdf.service.mjs +58 -58
- package/esm2020/src/app/modules/services/http.service.mjs +97 -154
- package/esm2020/src/app/modules/services/loading/loading.component.mjs +28 -28
- package/esm2020/src/app/modules/services/local-storage.service.mjs +115 -115
- package/esm2020/src/app/modules/services/message.service.mjs +200 -200
- package/esm2020/src/app/modules/services/screen-size-util.mjs +6 -6
- package/esm2020/src/app/modules/services/session.service.mjs +42 -42
- package/fesm2015/brainloper-ui.mjs +2819 -2769
- package/fesm2015/brainloper-ui.mjs.map +1 -1
- package/fesm2020/brainloper-ui.mjs +2779 -2733
- package/fesm2020/brainloper-ui.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/package.json +3 -1
- package/public_api.d.ts +55 -50
- package/src/app/modules/brainloper-ui/brainloper-ui.module.d.ts +62 -73
- package/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.d.ts +13 -13
- package/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.d.ts +10 -10
- package/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.d.ts +24 -24
- package/src/app/modules/brainloper-ui/components/carousel/carousel.component.d.ts +15 -12
- package/src/app/modules/brainloper-ui/components/combos/combos.component.d.ts +46 -46
- package/src/app/modules/brainloper-ui/components/data-table/data-table.component.d.ts +125 -119
- package/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.d.ts +21 -21
- package/src/app/modules/brainloper-ui/components/file-input/file-input.component.d.ts +42 -42
- package/src/app/modules/brainloper-ui/components/file-input/imagenes/doc.d.ts +2 -2
- package/src/app/modules/brainloper-ui/components/file-input/imagenes/fondoTransparente.d.ts +2 -2
- package/src/app/modules/brainloper-ui/components/file-input/imagenes/pdf.d.ts +2 -2
- package/src/app/modules/brainloper-ui/components/filters/filters.component.d.ts +30 -30
- package/src/app/modules/brainloper-ui/components/report/generate-pdf/generate-pdf.component.d.ts +35 -35
- package/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.d.ts +36 -36
- package/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.d.ts +26 -26
- package/src/app/modules/directives/carousel-item.directive.d.ts +9 -0
- package/src/app/modules/interfaces/buttons/button-icon.d.ts +9 -9
- package/src/app/modules/interfaces/buttons/button-lavel-edit.d.ts +6 -6
- package/src/app/modules/interfaces/combos/combos-configuration.d.ts +13 -13
- package/src/app/modules/interfaces/data-table/params.d.ts +7 -7
- package/src/app/modules/interfaces/data-table/rules.d.ts +8 -8
- package/src/app/modules/interfaces/data-table/table-columns.d.ts +25 -25
- package/src/app/modules/interfaces/data-table/table-configuration.d.ts +26 -25
- package/src/app/modules/interfaces/enum/enumActions.d.ts +6 -5
- package/src/app/modules/interfaces/enum/enumRules.d.ts +6 -6
- package/src/app/modules/interfaces/file-forms-service/file-forms-params.d.ts +4 -4
- package/src/app/modules/interfaces/file-forms-service/file-input-params.d.ts +13 -13
- package/src/app/modules/interfaces/filters/header-filters.d.ts +13 -13
- package/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.d.ts +10 -10
- package/src/app/modules/interfaces/report/template-pdf-ot.d.ts +19 -19
- package/src/app/modules/interfaces/report/template-pfd-fo.d.ts +20 -20
- package/src/app/modules/services/crypto.service.d.ts +10 -10
- package/src/app/modules/services/export-data.service.d.ts +18 -18
- package/src/app/modules/services/file-forms.service.d.ts +7 -7
- package/src/app/modules/services/functions.service.d.ts +13 -13
- package/src/app/modules/services/generate-pdf.service.d.ts +12 -12
- package/src/app/modules/services/http.service.d.ts +22 -21
- package/src/app/modules/services/loading/loading.component.d.ts +15 -15
- package/src/app/modules/services/local-storage.service.d.ts +49 -49
- package/src/app/modules/services/message.service.d.ts +23 -23
- package/src/app/modules/services/screen-size-util.d.ts +3 -3
- package/src/app/modules/services/session.service.d.ts +14 -14
|
@@ -1,222 +1,222 @@
|
|
|
1
|
-
import { ScreenSizeUtil } from '../../../services/screen-size-util';
|
|
2
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
3
|
-
import { UntypedFormControl, UntypedFormGroup } from '@angular/forms';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "../../../services/functions.service";
|
|
6
|
-
import * as i2 from "../../../services/http.service";
|
|
7
|
-
import * as i3 from "@angular/common";
|
|
8
|
-
import * as i4 from "@angular/material/icon";
|
|
9
|
-
import * as i5 from "@angular/material/form-field";
|
|
10
|
-
import * as i6 from "@angular/material/input";
|
|
11
|
-
import * as i7 from "@angular/material/select";
|
|
12
|
-
import * as i8 from "@angular/material/core";
|
|
13
|
-
import * as i9 from "@angular/material/datepicker";
|
|
14
|
-
import * as i10 from "@angular/forms";
|
|
15
|
-
import * as i11 from "../select-filter/select-filter.component";
|
|
16
|
-
export class FiltersComponent {
|
|
17
|
-
constructor(functionEter, http) {
|
|
18
|
-
this.functionEter = functionEter;
|
|
19
|
-
this.http = http;
|
|
20
|
-
this.headerFilters = [];
|
|
21
|
-
this.applyFilters = new EventEmitter();
|
|
22
|
-
this.headerFiltersValue = "-1";
|
|
23
|
-
this.headerFiltersSelected = [];
|
|
24
|
-
this.movil = ScreenSizeUtil.isMobile();
|
|
25
|
-
this.filtersPost = [];
|
|
26
|
-
this.loadDates();
|
|
27
|
-
this.loadDatesBetween();
|
|
28
|
-
}
|
|
29
|
-
async ngOnChanges(changes) {
|
|
30
|
-
if (changes) {
|
|
31
|
-
await this.loadFilter();
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
async ngOnInit() {
|
|
35
|
-
// if(this.headerFilters && this.headerFilters.length > 0)
|
|
36
|
-
// await this.loadFilter()
|
|
37
|
-
}
|
|
38
|
-
handlerFiltersDate(deleteFilter, item, valueDate = null, valueBetween1 = null, valueBetween2 = null) {
|
|
39
|
-
switch (item.type) {
|
|
40
|
-
case 'date':
|
|
41
|
-
if (deleteFilter) {
|
|
42
|
-
this.delteFilter({
|
|
43
|
-
labelFilter: 'Fecha entre',
|
|
44
|
-
type: 'dateRange'
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
this.loadDates(new Date(valueDate + "T05:00:00.000Z"));
|
|
49
|
-
}
|
|
50
|
-
break;
|
|
51
|
-
case 'dateRange':
|
|
52
|
-
if (deleteFilter) {
|
|
53
|
-
this.delteFilter({
|
|
54
|
-
labelFilter: 'Fecha igual a',
|
|
55
|
-
type: 'date'
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
this.loadDatesBetween(false, new Date(valueBetween1 + "T05:00:00.000Z"), new Date(valueBetween2 + "T05:00:00.000Z"));
|
|
60
|
-
}
|
|
61
|
-
break;
|
|
62
|
-
default:
|
|
63
|
-
break;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
selectFilter($event) {
|
|
67
|
-
let validate = this.headerFiltersSelected.find(x => x.labelFilter == $event.value);
|
|
68
|
-
if (!validate) {
|
|
69
|
-
let value = this.headerFilters.find(x => x.labelFilter == $event.value);
|
|
70
|
-
if (value) {
|
|
71
|
-
this.headerFiltersSelected.push(value);
|
|
72
|
-
this.handlerFiltersDate(true, { type: value.type });
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
setTimeout(() => {
|
|
76
|
-
this.headerFiltersValue = null;
|
|
77
|
-
}, 500);
|
|
78
|
-
}
|
|
79
|
-
async selectFilterData($event, item) {
|
|
80
|
-
let i = this.headerFiltersSelected.findIndex(x => x.labelFilter == item.labelFilter);
|
|
81
|
-
if (i >= 0)
|
|
82
|
-
this.headerFiltersSelected[i].value = $event.value;
|
|
83
|
-
let f = this.filtersPost.findIndex(x => x.labelFilter == item.labelFilter);
|
|
84
|
-
if ($event.value) {
|
|
85
|
-
let value = null;
|
|
86
|
-
switch (item.type) {
|
|
87
|
-
case 'select':
|
|
88
|
-
value = $event.value;
|
|
89
|
-
break;
|
|
90
|
-
case 'date':
|
|
91
|
-
value = this.functionEter.dateDB($event.value);
|
|
92
|
-
break;
|
|
93
|
-
case 'dateRange':
|
|
94
|
-
value = `${this.functionEter.dateDB(this.campaignOne.controls.start.value)},${this.functionEter.dateDB(this.campaignOne.controls.end.value)}`;
|
|
95
|
-
break;
|
|
96
|
-
default:
|
|
97
|
-
break;
|
|
98
|
-
}
|
|
99
|
-
if (!value)
|
|
100
|
-
return;
|
|
101
|
-
if (f >= 0) {
|
|
102
|
-
this.filtersPost[f].value = value;
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
this.filtersPost.push({
|
|
106
|
-
tN: btoa(item.tN),
|
|
107
|
-
primaryKey: item.fileNameDb ? item.fileNameDb : item.primaryKey,
|
|
108
|
-
type: item.type,
|
|
109
|
-
value: value,
|
|
110
|
-
labelFilter: item.labelFilter
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
this.applyFilters.emit(this.filtersPost);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
delteFilter(item) {
|
|
117
|
-
let i = this.headerFiltersSelected.findIndex(x => x.labelFilter == item.labelFilter);
|
|
118
|
-
let f = this.filtersPost.findIndex(x => x.labelFilter == item.labelFilter);
|
|
119
|
-
if (i >= 0) {
|
|
120
|
-
this.headerFiltersSelected[i].value = "-1";
|
|
121
|
-
this.headerFiltersSelected.splice(i, 1);
|
|
122
|
-
}
|
|
123
|
-
if (f >= 0) {
|
|
124
|
-
this.filtersPost.splice(f, 1);
|
|
125
|
-
this.applyFilters.emit(this.filtersPost);
|
|
126
|
-
}
|
|
127
|
-
this.handlerFiltersDate(false, item);
|
|
128
|
-
setTimeout(() => {
|
|
129
|
-
this.headerFiltersValue = null;
|
|
130
|
-
}, 500);
|
|
131
|
-
}
|
|
132
|
-
loadDates(value = null) {
|
|
133
|
-
this.fecha = new UntypedFormGroup({
|
|
134
|
-
fecha: new UntypedFormControl(value)
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
loadDatesBetween(init = true, value1 = null, value2 = null) {
|
|
138
|
-
if (init) {
|
|
139
|
-
this.campaignOne = new UntypedFormGroup({
|
|
140
|
-
start: new UntypedFormControl(null),
|
|
141
|
-
end: new UntypedFormControl(null),
|
|
142
|
-
});
|
|
143
|
-
this.campaignTwo = new UntypedFormGroup({
|
|
144
|
-
start: new UntypedFormControl(null),
|
|
145
|
-
end: new UntypedFormControl(null),
|
|
146
|
-
});
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
var day1 = 1;
|
|
150
|
-
var day2 = 15;
|
|
151
|
-
if (!value1) {
|
|
152
|
-
value1 = new Date();
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
day1 = value1.getDate();
|
|
156
|
-
}
|
|
157
|
-
if (!value2) {
|
|
158
|
-
value2 = new Date();
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
day2 = value2.getDate();
|
|
162
|
-
}
|
|
163
|
-
this.campaignOne = new UntypedFormGroup({
|
|
164
|
-
start: new UntypedFormControl(new Date(value1.getFullYear(), value1.getMonth(), day1)),
|
|
165
|
-
end: new UntypedFormControl(new Date(value2.getFullYear(), value2.getMonth(), day2)),
|
|
166
|
-
});
|
|
167
|
-
this.campaignTwo = new UntypedFormGroup({
|
|
168
|
-
start: new UntypedFormControl(new Date(value1.getFullYear(), value1.getMonth(), day1)),
|
|
169
|
-
end: new UntypedFormControl(new Date(value1.getFullYear(), value1.getMonth(), day1)),
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
async loadFilter() {
|
|
173
|
-
// if (this.headerFiltersSelected.length != 0) {
|
|
174
|
-
// return
|
|
175
|
-
// }
|
|
176
|
-
let applyFilter = false;
|
|
177
|
-
for (let element of this.headerFilters) {
|
|
178
|
-
if (element.urlData) {
|
|
179
|
-
let res = await this.http.getDataBody(element.urlData);
|
|
180
|
-
element.body = res;
|
|
181
|
-
}
|
|
182
|
-
else if (element.type == 'select') {
|
|
183
|
-
element.body = element.data;
|
|
184
|
-
}
|
|
185
|
-
element.filteredList = element.body;
|
|
186
|
-
if (!element.primaryKey)
|
|
187
|
-
element.primaryKey = element.visibleField;
|
|
188
|
-
if (element.type == "date")
|
|
189
|
-
element.labelFilter = element.labelFilter ?? "Fecha igual a";
|
|
190
|
-
if (element.type == "dateRange")
|
|
191
|
-
element.labelFilter = element.labelFilter ?? "Fecha entre";
|
|
192
|
-
if (element.active) {
|
|
193
|
-
this.headerFiltersSelected.push(element);
|
|
194
|
-
this.filtersPost.push({
|
|
195
|
-
tN: btoa(element.tN),
|
|
196
|
-
primaryKey: element.fileNameDb ? element.fileNameDb : element.primaryKey,
|
|
197
|
-
type: element.type,
|
|
198
|
-
value: element.value,
|
|
199
|
-
labelFilter: element.labelFilter
|
|
200
|
-
});
|
|
201
|
-
this.handlerFiltersDate(false, element, element.value, element.value.split(',')[0], element.value.split(',')[1]);
|
|
202
|
-
if (element.value && element.value != '') {
|
|
203
|
-
applyFilter = true;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
if (applyFilter) {
|
|
208
|
-
this.applyFilters.emit(this.filtersPost);
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
FiltersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FiltersComponent, deps: [{ token: i1.FunctionsService }, { token: i2.HttpService }], target: i0.ɵɵFactoryTarget.Component });
|
|
213
|
-
FiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FiltersComponent, selector: "app-filters", inputs: { headerFilters: "headerFilters" }, outputs: { applyFilters: "applyFilters" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"headerFilters && headerFilters.length > 0\" style=\"display: flex; width: 100%; flex-wrap: wrap;\" class=\"col-12 mb-2\">\
|
|
214
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FiltersComponent, decorators: [{
|
|
215
|
-
type: Component,
|
|
216
|
-
args: [{ selector: 'app-filters', template: "<div *ngIf=\"headerFilters && headerFilters.length > 0\" style=\"display: flex; width: 100%; flex-wrap: wrap;\" class=\"col-12 mb-2\">\
|
|
217
|
-
}], ctorParameters: function () { return [{ type: i1.FunctionsService }, { type: i2.HttpService }]; }, propDecorators: { headerFilters: [{
|
|
218
|
-
type: Input
|
|
219
|
-
}], applyFilters: [{
|
|
220
|
-
type: Output
|
|
221
|
-
}] } });
|
|
222
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2ZpbHRlcnMvZmlsdGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2ZpbHRlcnMvZmlsdGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBVyxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ2xILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBU3RFLE1BQU0sT0FBTyxnQkFBZ0I7SUFlM0IsWUFDVSxZQUE4QixFQUM5QixJQUFpQjtRQURqQixpQkFBWSxHQUFaLFlBQVksQ0FBa0I7UUFDOUIsU0FBSSxHQUFKLElBQUksQ0FBYTtRQWZsQixrQkFBYSxHQUFlLEVBQUUsQ0FBQTtRQUM3QixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFakQsdUJBQWtCLEdBQUcsSUFBSSxDQUFBO1FBQ3pCLDBCQUFxQixHQUFnQixFQUFFLENBQUE7UUFJdkMsVUFBSyxHQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUdsQyxnQkFBVyxHQUFHLEVBQUUsQ0FBQTtRQU1kLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUNoQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtJQUN4QixDQUFDO0lBQ0YsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFzQjtRQUN0QyxJQUFLLE9BQU8sRUFBRTtZQUNaLE1B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MkZEbERhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxhQUFhO2lJQU1kLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaHR0cC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRnVuY3Rpb25zU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Z1bmN0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2NyZWVuU2l6ZVV0aWwgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zY3JlZW4tc2l6ZS11dGlsJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBEb0NoZWNrLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZWxlbWVudCB9IGZyb20gJ3Byb3RyYWN0b3InO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWZpbHRlcnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXJzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXJzLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbHRlcnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBJbnB1dCgpIGhlYWRlckZpbHRlcnM6IEFycmF5PGFueT4gPSBbXVxyXG4gIEBPdXRwdXQoKSBhcHBseUZpbHRlcnMgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgaGVhZGVyRmlsdGVyc1ZhbHVlID0gXCItMVwiXHJcbiAgaGVhZGVyRmlsdGVyc1NlbGVjdGVkIDogQXJyYXk8YW55PiA9IFtdXHJcbiAgY2FtcGFpZ25PbmU6IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgY2FtcGFpZ25Ud286IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgZmVjaGE6IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgbW92aWwgPSBTY3JlZW5TaXplVXRpbC5pc01vYmlsZSgpO1xyXG5cclxuXHJcbiAgZmlsdGVyc1Bvc3QgPSBbXVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZnVuY3Rpb25FdGVyOiBGdW5jdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwU2VydmljZSxcclxuICApIHtcclxuICAgIHRoaXMubG9hZERhdGVzKClcclxuICAgIHRoaXMubG9hZERhdGVzQmV0d2VlbigpXHJcbiAgIH1cclxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoIGNoYW5nZXMpIHtcclxuICAgICAgYXdhaXQgdGhpcy5sb2FkRmlsdGVyKClcclxuICAgIH1cclxuICB9ICBcclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICAvLyBpZih0aGlzLmhlYWRlckZpbHRlcnMgJiYgdGhpcy5oZWFkZXJGaWx0ZXJzLmxlbmd0aCA+IDApXHJcbiAgICAvLyAgIGF3YWl0IHRoaXMubG9hZEZpbHRlcigpXHJcbiAgfVxyXG5cclxuICBoYW5kbGVyRmlsdGVyc0RhdGUoZGVsZXRlRmlsdGVyOmJvb2xlYW4sIGl0ZW06YW55LCB2YWx1ZURhdGUgPSBudWxsLCB2YWx1ZUJldHdlZW4xID0gbnVsbCwgdmFsdWVCZXR3ZWVuMiA9IG51bGwpe1xyXG4gICAgc3dpdGNoIChpdGVtLnR5cGUpIHtcclxuICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgaWYoZGVsZXRlRmlsdGVyKXtcclxuICAgICAgICAgIHRoaXMuZGVsdGVGaWx0ZXIoe1xyXG4gICAgICAgICAgICBsYWJlbEZpbHRlcjonRmVjaGEgZW50cmUnLFxyXG4gICAgICAgICAgICB0eXBlOidkYXRlUmFuZ2UnXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5sb2FkRGF0ZXMobmV3IERhdGUodmFsdWVEYXRlICsgXCJUMDU6MDA6MDAuMDAwWlwiKSlcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnZGF0ZVJhbmdlJzpcclxuICAgICAgICBpZihkZWxldGVGaWx0ZXIpe1xyXG4gICAgICAgICAgdGhpcy5kZWx0ZUZpbHRlcih7XHJcbiAgICAgICAgICAgIGxhYmVsRmlsdGVyOidGZWNoYSBpZ3VhbCBhJyxcclxuICAgICAgICAgICAgdHlwZTonZGF0ZSdcclxuICAgICAgICB9KVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5sb2FkRGF0ZXNCZXR3ZWVuKGZhbHNlLCBuZXcgRGF0ZSh2YWx1ZUJldHdlZW4xICsgXCJUMDU6MDA6MDAuMDAwWlwiKSAsIG5ldyBEYXRlKHZhbHVlQmV0d2VlbjIgKyBcIlQwNTowMDowMC4wMDBaXCIpKVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVha1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdEZpbHRlcigkZXZlbnQpe1xyXG4gICAgbGV0IHZhbGlkYXRlID0gdGhpcy5oZWFkZXJGaWx0ZXJzU2VsZWN0ZWQuZmluZCh4ID0+IHgubGFiZWxGaWx0ZXIgPT0gJGV2ZW50LnZhbHVlKVxyXG4gICAgaWYoIXZhbGlkYXRlKXtcclxuICAgICAgbGV0IHZhbHVlID0gdGhpcy5oZWFkZXJGaWx0ZXJzLmZpbmQoeCA9PiB4LmxhYmVsRmlsdGVyID09ICRldmVudC52YWx1ZSlcclxuICAgICAgaWYodmFsdWUpe1xyXG4gICAgICAgIHRoaXMuaGVhZGVyRmlsdGVyc1NlbGVjdGVkLnB1c2godmFsdWUpXHJcbiAgICAgICAgdGhpcy5oYW5kbGVyRmlsdGVyc0RhdGUodHJ1ZSAsIHt0eXBlOnZhbHVlLnR5cGV9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5oZWFkZXJGaWx0ZXJzVmFsdWUgPSBudWxsXHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2VsZWN0RmlsdGVyRGF0YSgkZXZlbnQsIGl0ZW0pe1xyXG4gICAgbGV0IGkgPSB0aGlzLmhlYWRlckZpbHRlcnNTZWxlY3RlZC5maW5kSW5kZXgoeCA9PiB4LmxhYmVsRmlsdGVyID09IGl0ZW0ubGFiZWxGaWx0ZXIpXHJcbiAgICBpZihpID49IDAgKSB0aGlzLmhlYWRlckZpbHRlcnNTZWxlY3RlZFtpXS52YWx1ZSA9ICRldmVudC52YWx1ZVxyXG4gICAgbGV0IGYgPSB0aGlzLmZpbHRlcnNQb3N0LmZpbmRJbmRleCh4ID0+IHgubGFiZWxGaWx0ZXIgPT0gaXRlbS5sYWJlbEZpbHRlcilcclxuICAgIGlmKCRldmVudC52YWx1ZSl7XHJcbiAgICAgIGxldCB2YWx1ZSA9IG51bGxcclxuICAgICAgc3dpdGNoIChpdGVtLnR5cGUpIHtcclxuICAgICAgICBjYXNlICdzZWxlY3QnOlxyXG4gICAgICAgICAgdmFsdWUgPSAkZXZlbnQudmFsdWVcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgICAgdmFsdWUgPSB0aGlzLmZ1bmN0aW9uRXRlci5kYXRlREIoJGV2ZW50LnZhbHVlKVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICdkYXRlUmFuZ2UnOlxyXG4gICAgICAgICAgdmFsdWUgPSBgJHt0aGlzLmZ1bmN0aW9uRXRlci5kYXRlREIodGhpcy5jYW1wYWlnbk9uZS5jb250cm9scy5zdGFydC52YWx1ZSl9LCR7dGhpcy5mdW5jdGlvbkV0ZXIuZGF0ZURCKHRoaXMuY2FtcGFpZ25PbmUuY29udHJvbHMuZW5kLnZhbHVlKX1gXHJcbiAgICAgICAgICBicmVha1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaWYoIXZhbHVlKSByZXR1cm5cclxuICAgICAgaWYoZiA+PSAwKXtcclxuICAgICAgICB0aGlzLmZpbHRlcnNQb3N0W2ZdLnZhbHVlID0gdmFsdWVcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzUG9zdC5wdXNoKHtcclxuICAgICAgICAgIHROOmJ0b2EoaXRlbS50TiksXHJcbiAgICAgICAgICBwcmltYXJ5S2V5Oml0ZW0uZmlsZU5hbWVEYj9pdGVtLmZpbGVOYW1lRGI6aXRlbS5wcmltYXJ5S2V5LFxyXG4gICAgICAgICAgdHlwZTppdGVtLnR5cGUsXHJcbiAgICAgICAgICB2YWx1ZTp2YWx1ZSxcclxuICAgICAgICAgIGxhYmVsRmlsdGVyOml0ZW0ubGFiZWxGaWx0ZXJcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzLmVtaXQodGhpcy5maWx0ZXJzUG9zdClcclxuICAgIH1cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgZGVsdGVGaWx0ZXIoaXRlbSl7XHJcbiAgICBsZXQgaSA9IHRoaXMuaGVhZGVyRmlsdGVyc1NlbGVjdGVkLmZpbmRJbmRleCh4ID0+IHgubGFiZWxGaWx0ZXIgPT0gaXRlbS5sYWJlbEZpbHRlcilcclxuICAgIGxldCBmID0gdGhpcy5maWx0ZXJzUG9zdC5maW5kSW5kZXgoeCA9PiB4LmxhYmVsRmlsdGVyID09IGl0ZW0ubGFiZWxGaWx0ZXIpXHJcbiAgICBpZihpID49IDApIHtcclxuICAgICAgdGhpcy5oZWFkZXJGaWx0ZXJzU2VsZWN0ZWRbaV0udmFsdWUgPSBcIi0xXCJcclxuICAgICAgdGhpcy5oZWFkZXJGaWx0ZXJzU2VsZWN0ZWQuc3BsaWNlKGksIDEpXHJcbiAgICB9XHJcbiAgICBpZihmID49IDApIHtcclxuICAgICAgdGhpcy5maWx0ZXJzUG9zdC5zcGxpY2UoZiwxKVxyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVycy5lbWl0KHRoaXMuZmlsdGVyc1Bvc3QpXHJcbiAgICB9XHJcbiAgICB0aGlzLmhhbmRsZXJGaWx0ZXJzRGF0ZShmYWxzZSwgaXRlbSlcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmhlYWRlckZpbHRlcnNWYWx1ZSA9IG51bGxcclxuICAgIH0sIDUwMCk7XHJcbiAgfVxyXG5cclxuICBsb2FkRGF0ZXModmFsdWUgOiBEYXRlID0gbnVsbCl7XHJcbiAgICB0aGlzLmZlY2hhID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe1xyXG4gICAgICBmZWNoYTogbmV3IFVudHlwZWRGb3JtQ29udHJvbCh2YWx1ZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZERhdGVzQmV0d2Vlbihpbml0OmJvb2xlYW4gPSB0cnVlLCB2YWx1ZTEgOiBEYXRlID0gbnVsbCwgdmFsdWUyIDogRGF0ZSA9IG51bGwpe1xyXG4gICAgaWYoaW5pdCl7XHJcbiAgICAgIHRoaXMuY2FtcGFpZ25PbmUgPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7XHJcbiAgICAgICAgc3RhcnQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgZW5kOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuY2FtcGFpZ25Ud28gPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7XHJcbiAgICAgICAgc3RhcnQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgZW5kOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB2YXIgZGF5MSA9IDFcclxuICAgIHZhciBkYXkyID0gMTVcclxuICAgIGlmKCF2YWx1ZTEpe1xyXG4gICAgICB2YWx1ZTEgPSBuZXcgRGF0ZSgpXHJcbiAgICB9ZWxzZXtcclxuICAgICAgZGF5MSA9IHZhbHVlMS5nZXREYXRlKClcclxuICAgIH1cclxuXHJcbiAgICBpZighdmFsdWUyKXtcclxuICAgICAgdmFsdWUyID0gbmV3IERhdGUoKVxyXG4gICAgfWVsc2V7XHJcbiAgICAgIGRheTIgPSB2YWx1ZTIuZ2V0RGF0ZSgpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jYW1wYWlnbk9uZSA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHtcclxuICAgICAgc3RhcnQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobmV3IERhdGUodmFsdWUxLmdldEZ1bGxZZWFyKCksIHZhbHVlMS5nZXRNb250aCgpLCBkYXkxKSksXHJcbiAgICAgIGVuZDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChuZXcgRGF0ZSh2YWx1ZTIuZ2V0RnVsbFllYXIoKSwgdmFsdWUyLmdldE1vbnRoKCksIGRheTIpKSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FtcGFpZ25Ud28gPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7XHJcbiAgICAgIHN0YXJ0OiBuZXcgVW50eXBlZEZvcm1Db250cm9sKG5ldyBEYXRlKHZhbHVlMS5nZXRGdWxsWWVhcigpLCB2YWx1ZTEuZ2V0TW9udGgoKSwgZGF5MSkpLFxyXG4gICAgICBlbmQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobmV3IERhdGUodmFsdWUxLmdldEZ1bGxZZWFyKCksIHZhbHVlMS5nZXRNb250aCgpLCBkYXkxKSksXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBhc3luYyBsb2FkRmlsdGVyKCl7XHJcbiAgICAvLyBpZiAodGhpcy5oZWFkZXJGaWx0ZXJzU2VsZWN0ZWQubGVuZ3RoICE9IDApIHtcclxuICAgIC8vICAgcmV0dXJuXHJcbiAgICAvLyB9XHJcbiAgICBsZXQgYXBwbHlGaWx0ZXIgPSBmYWxzZSBcclxuICAgIGZvcihsZXQgZWxlbWVudCBvZiB0aGlzLmhlYWRlckZpbHRlcnMpe1xyXG4gICAgIFxyXG4gICAgICBpZihlbGVtZW50LnVybERhdGEpe1xyXG4gICAgICAgIGxldCByZXMgPSBhd2FpdCB0aGlzLmh0dHAuZ2V0RGF0YUJvZHk8YW55PihlbGVtZW50LnVybERhdGEpXHJcbiAgICAgICAgZWxlbWVudC5ib2R5ID0gcmVzO1xyXG4gICAgICB9ZWxzZSBpZiAoZWxlbWVudC50eXBlID09ICdzZWxlY3QnKSB7ICAgICAgIFxyXG4gICAgICAgIGVsZW1lbnQuYm9keSA9IGVsZW1lbnQuZGF0YSAgICAgIFxyXG4gICAgICB9XHJcbiAgICAgIGVsZW1lbnQuZmlsdGVyZWRMaXN0ID0gZWxlbWVudC5ib2R5O1xyXG4gICAgICBpZighZWxlbWVudC5wcmltYXJ5S2V5KSBlbGVtZW50LnByaW1hcnlLZXkgPSBlbGVtZW50LnZpc2libGVGaWVsZFxyXG4gICAgICBpZihlbGVtZW50LnR5cGUgPT0gXCJkYXRlXCIpIGVsZW1lbnQubGFiZWxGaWx0ZXIgPSBlbGVtZW50LmxhYmVsRmlsdGVyID8/IFwiRmVjaGEgaWd1YWwgYVwiXHJcbiAgICAgIGlmKGVsZW1lbnQudHlwZSA9PSBcImRhdGVSYW5nZVwiKSBlbGVtZW50LmxhYmVsRmlsdGVyID0gZWxlbWVudC5sYWJlbEZpbHRlciA/PyBcIkZlY2hhIGVudHJlXCJcclxuICAgICAgaWYoZWxlbWVudC5hY3RpdmUpIHtcclxuICAgICAgICB0aGlzLmhlYWRlckZpbHRlcnNTZWxlY3RlZC5wdXNoKGVsZW1lbnQpXHJcbiAgICAgICAgdGhpcy5maWx0ZXJzUG9zdC5wdXNoKHtcclxuICAgICAgICAgIHROOmJ0b2EoZWxlbWVudC50TiksXHJcbiAgICAgICAgICBwcmltYXJ5S2V5OmVsZW1lbnQuZmlsZU5hbWVEYj9lbGVtZW50LmZpbGVOYW1lRGI6ZWxlbWVudC5wcmltYXJ5S2V5LFxyXG4gICAgICAgICAgdHlwZTplbGVtZW50LnR5cGUsXHJcbiAgICAgICAgICB2YWx1ZTplbGVtZW50LnZhbHVlLFxyXG4gICAgICAgICAgbGFiZWxGaWx0ZXI6ZWxlbWVudC5sYWJlbEZpbHRlclxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5oYW5kbGVyRmlsdGVyc0RhdGUoZmFsc2UsIGVsZW1lbnQsIGVsZW1lbnQudmFsdWUsIGVsZW1lbnQudmFsdWUuc3BsaXQoJywnKVswXSwgZWxlbWVudC52YWx1ZS5zcGxpdCgnLCcpWzFdKVxyXG4gICAgICAgIGlmIChlbGVtZW50LnZhbHVlICYmIGVsZW1lbnQudmFsdWUgIT0gJycpIHtcclxuICAgICAgICAgIGFwcGx5RmlsdGVyID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGFwcGx5RmlsdGVyKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzLmVtaXQodGhpcy5maWx0ZXJzUG9zdCkgICAgICBcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cImhlYWRlckZpbHRlcnMgJiYgaGVhZGVyRmlsdGVycy5sZW5ndGggPiAwXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyB3aWR0aDogMTAwJTsgZmxleC13cmFwOiB3cmFwO1wiIGNsYXNzPVwiY29sLTEyIG1iLTJcIj5cclxuICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgY29sLTEyXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgPlxyXG4gICAgICA8bWF0LWxhYmVsPkZpbHRyb3M8L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3QgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3RGaWx0ZXIoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwiaGVhZGVyRmlsdGVyc1ZhbHVlXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBmIG9mIGhlYWRlckZpbHRlcnNcIlxyXG4gICAgICAgICAgdmFsdWU9XCJ7eyBmLmxhYmVsRmlsdGVyIH19XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBmLmxhYmVsRmlsdGVyIH19XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGhlYWRlckZpbHRlcnNTZWxlY3RlZFwiIGNsYXNzPVwiY29sLW1kLTQgY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiaXRlbS50eXBlID09ICdzZWxlY3QnXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5GaWx0cmFyIHBvciB7e2l0ZW0ubGFiZWxGaWx0ZXJ9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0RmlsdGVyRGF0YSgkZXZlbnQsIGl0ZW0pXCIgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIj5cclxuICAgICAgICAgIDxhcHAtc2VsZWN0LWZpbHRlclxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0ZpbHRlcidcIlxyXG4gICAgICAgICAgICBbZGlzcGxheU1lbWJlcl09XCJpdGVtLnZpc2libGVGaWVsZFwiXHJcbiAgICAgICAgICAgIFthcnJheV09XCJpdGVtLmJvZHlcIlxyXG4gICAgICAgICAgICAoZmlsdGVyZWRSZXR1cm4pPVwiaXRlbS5maWx0ZXJlZExpc3QgPSAkZXZlbnRcIlxyXG4gICAgICAgICAgICBbbm9SZXN1bHRzTWVzc2FnZV09XCInTm8gaGF5IHJlc3VsdGFkb3MnXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvYXBwLXNlbGVjdC1maWx0ZXI+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBpdGVtLmZpbHRlcmVkTGlzdFwiXHJcbiAgICAgICAgICAgIHZhbHVlPVwie3sgZGF0YVtpdGVtLnByaW1hcnlLZXldIH19XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgZGF0YVtpdGVtLnZpc2libGVGaWVsZF0gfX1cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIml0ZW0udHlwZSA9PSAnZGF0ZSdcIiBbZm9ybUdyb3VwXT1cImZlY2hhXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPnt7aXRlbS5sYWJlbEZpbHRlcn19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgKGRhdGVJbnB1dCk9XCJzZWxlY3RGaWx0ZXJEYXRhKCRldmVudCwgaXRlbSlcIiBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJGZWNoYVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSdmZWNoYScgcmVxdWlyZWQ+XHJcbiAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cIkZlY2hhXCI+XHJcbiAgICAgICAgICA8L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciBkYXRlSW5wdXQgI0ZlY2hhIFt0b3VjaFVpXT0nbW92aWw/dHJ1ZTpmYWxzZSc+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIml0ZW0udHlwZSA9PSAnZGF0ZVJhbmdlJ1wiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+e3tpdGVtLmxhYmVsRmlsdGVyfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXRcclxuICAgICAgICAgIFtmb3JtR3JvdXBdPVwiY2FtcGFpZ25PbmVcIlxyXG4gICAgICAgICAgW3JhbmdlUGlja2VyXT1cImNhbXBhaWduT25lUGlja2VyXCJcclxuICAgICAgICAgIFtjb21wYXJpc29uU3RhcnRdPVwiY2FtcGFpZ25Ud28udmFsdWUuc3RhcnRcIlxyXG4gICAgICAgICAgW2NvbXBhcmlzb25FbmRdPVwiY2FtcGFpZ25Ud28udmFsdWUuZW5kXCI+XHJcbiAgICAgICAgICA8aW5wdXQgIG1hdFN0YXJ0RGF0ZSBwbGFjZWhvbGRlcj1cIlN0YXJ0IGRhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJzdGFydFwiPlxyXG4gICAgICAgICAgPGlucHV0IChkYXRlSW5wdXQpPVwic2VsZWN0RmlsdGVyRGF0YSgkZXZlbnQsIGl0ZW0pXCIgbWF0RW5kRGF0ZSBwbGFjZWhvbGRlcj1cIkVuZCBkYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW5kXCI+XHJcbiAgICAgICAgPC9tYXQtZGF0ZS1yYW5nZS1pbnB1dD5cclxuICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cImNhbXBhaWduT25lUGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgPG1hdC1kYXRlLXJhbmdlLXBpY2tlciAjY2FtcGFpZ25PbmVQaWNrZXI+PC9tYXQtZGF0ZS1yYW5nZS1waWNrZXI+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicC0yXCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIiAoY2xpY2spPVwiZGVsdGVGaWx0ZXIoaXRlbSlcIj48bWF0LWljb24+Y2FuY2VsPC9tYXQtaWNvbj48L2Rpdj5cclxuXHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
1
|
+
import { ScreenSizeUtil } from '../../../services/screen-size-util';
|
|
2
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
3
|
+
import { UntypedFormControl, UntypedFormGroup } from '@angular/forms';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../../../services/functions.service";
|
|
6
|
+
import * as i2 from "../../../services/http.service";
|
|
7
|
+
import * as i3 from "@angular/common";
|
|
8
|
+
import * as i4 from "@angular/material/icon";
|
|
9
|
+
import * as i5 from "@angular/material/form-field";
|
|
10
|
+
import * as i6 from "@angular/material/input";
|
|
11
|
+
import * as i7 from "@angular/material/select";
|
|
12
|
+
import * as i8 from "@angular/material/core";
|
|
13
|
+
import * as i9 from "@angular/material/datepicker";
|
|
14
|
+
import * as i10 from "@angular/forms";
|
|
15
|
+
import * as i11 from "../select-filter/select-filter.component";
|
|
16
|
+
export class FiltersComponent {
|
|
17
|
+
constructor(functionEter, http) {
|
|
18
|
+
this.functionEter = functionEter;
|
|
19
|
+
this.http = http;
|
|
20
|
+
this.headerFilters = [];
|
|
21
|
+
this.applyFilters = new EventEmitter();
|
|
22
|
+
this.headerFiltersValue = "-1";
|
|
23
|
+
this.headerFiltersSelected = [];
|
|
24
|
+
this.movil = ScreenSizeUtil.isMobile();
|
|
25
|
+
this.filtersPost = [];
|
|
26
|
+
this.loadDates();
|
|
27
|
+
this.loadDatesBetween();
|
|
28
|
+
}
|
|
29
|
+
async ngOnChanges(changes) {
|
|
30
|
+
if (changes) {
|
|
31
|
+
await this.loadFilter();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async ngOnInit() {
|
|
35
|
+
// if(this.headerFilters && this.headerFilters.length > 0)
|
|
36
|
+
// await this.loadFilter()
|
|
37
|
+
}
|
|
38
|
+
handlerFiltersDate(deleteFilter, item, valueDate = null, valueBetween1 = null, valueBetween2 = null) {
|
|
39
|
+
switch (item.type) {
|
|
40
|
+
case 'date':
|
|
41
|
+
if (deleteFilter) {
|
|
42
|
+
this.delteFilter({
|
|
43
|
+
labelFilter: 'Fecha entre',
|
|
44
|
+
type: 'dateRange'
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
this.loadDates(new Date(valueDate + "T05:00:00.000Z"));
|
|
49
|
+
}
|
|
50
|
+
break;
|
|
51
|
+
case 'dateRange':
|
|
52
|
+
if (deleteFilter) {
|
|
53
|
+
this.delteFilter({
|
|
54
|
+
labelFilter: 'Fecha igual a',
|
|
55
|
+
type: 'date'
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
this.loadDatesBetween(false, new Date(valueBetween1 + "T05:00:00.000Z"), new Date(valueBetween2 + "T05:00:00.000Z"));
|
|
60
|
+
}
|
|
61
|
+
break;
|
|
62
|
+
default:
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
selectFilter($event) {
|
|
67
|
+
let validate = this.headerFiltersSelected.find(x => x.labelFilter == $event.value);
|
|
68
|
+
if (!validate) {
|
|
69
|
+
let value = this.headerFilters.find(x => x.labelFilter == $event.value);
|
|
70
|
+
if (value) {
|
|
71
|
+
this.headerFiltersSelected.push(value);
|
|
72
|
+
this.handlerFiltersDate(true, { type: value.type });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
setTimeout(() => {
|
|
76
|
+
this.headerFiltersValue = null;
|
|
77
|
+
}, 500);
|
|
78
|
+
}
|
|
79
|
+
async selectFilterData($event, item) {
|
|
80
|
+
let i = this.headerFiltersSelected.findIndex(x => x.labelFilter == item.labelFilter);
|
|
81
|
+
if (i >= 0)
|
|
82
|
+
this.headerFiltersSelected[i].value = $event.value;
|
|
83
|
+
let f = this.filtersPost.findIndex(x => x.labelFilter == item.labelFilter);
|
|
84
|
+
if ($event.value) {
|
|
85
|
+
let value = null;
|
|
86
|
+
switch (item.type) {
|
|
87
|
+
case 'select':
|
|
88
|
+
value = $event.value;
|
|
89
|
+
break;
|
|
90
|
+
case 'date':
|
|
91
|
+
value = this.functionEter.dateDB($event.value);
|
|
92
|
+
break;
|
|
93
|
+
case 'dateRange':
|
|
94
|
+
value = `${this.functionEter.dateDB(this.campaignOne.controls.start.value)},${this.functionEter.dateDB(this.campaignOne.controls.end.value)}`;
|
|
95
|
+
break;
|
|
96
|
+
default:
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
if (!value)
|
|
100
|
+
return;
|
|
101
|
+
if (f >= 0) {
|
|
102
|
+
this.filtersPost[f].value = value;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
this.filtersPost.push({
|
|
106
|
+
tN: btoa(item.tN),
|
|
107
|
+
primaryKey: item.fileNameDb ? item.fileNameDb : item.primaryKey,
|
|
108
|
+
type: item.type,
|
|
109
|
+
value: value,
|
|
110
|
+
labelFilter: item.labelFilter
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
this.applyFilters.emit(this.filtersPost);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
delteFilter(item) {
|
|
117
|
+
let i = this.headerFiltersSelected.findIndex(x => x.labelFilter == item.labelFilter);
|
|
118
|
+
let f = this.filtersPost.findIndex(x => x.labelFilter == item.labelFilter);
|
|
119
|
+
if (i >= 0) {
|
|
120
|
+
this.headerFiltersSelected[i].value = "-1";
|
|
121
|
+
this.headerFiltersSelected.splice(i, 1);
|
|
122
|
+
}
|
|
123
|
+
if (f >= 0) {
|
|
124
|
+
this.filtersPost.splice(f, 1);
|
|
125
|
+
this.applyFilters.emit(this.filtersPost);
|
|
126
|
+
}
|
|
127
|
+
this.handlerFiltersDate(false, item);
|
|
128
|
+
setTimeout(() => {
|
|
129
|
+
this.headerFiltersValue = null;
|
|
130
|
+
}, 500);
|
|
131
|
+
}
|
|
132
|
+
loadDates(value = null) {
|
|
133
|
+
this.fecha = new UntypedFormGroup({
|
|
134
|
+
fecha: new UntypedFormControl(value)
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
loadDatesBetween(init = true, value1 = null, value2 = null) {
|
|
138
|
+
if (init) {
|
|
139
|
+
this.campaignOne = new UntypedFormGroup({
|
|
140
|
+
start: new UntypedFormControl(null),
|
|
141
|
+
end: new UntypedFormControl(null),
|
|
142
|
+
});
|
|
143
|
+
this.campaignTwo = new UntypedFormGroup({
|
|
144
|
+
start: new UntypedFormControl(null),
|
|
145
|
+
end: new UntypedFormControl(null),
|
|
146
|
+
});
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
var day1 = 1;
|
|
150
|
+
var day2 = 15;
|
|
151
|
+
if (!value1) {
|
|
152
|
+
value1 = new Date();
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
day1 = value1.getDate();
|
|
156
|
+
}
|
|
157
|
+
if (!value2) {
|
|
158
|
+
value2 = new Date();
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
day2 = value2.getDate();
|
|
162
|
+
}
|
|
163
|
+
this.campaignOne = new UntypedFormGroup({
|
|
164
|
+
start: new UntypedFormControl(new Date(value1.getFullYear(), value1.getMonth(), day1)),
|
|
165
|
+
end: new UntypedFormControl(new Date(value2.getFullYear(), value2.getMonth(), day2)),
|
|
166
|
+
});
|
|
167
|
+
this.campaignTwo = new UntypedFormGroup({
|
|
168
|
+
start: new UntypedFormControl(new Date(value1.getFullYear(), value1.getMonth(), day1)),
|
|
169
|
+
end: new UntypedFormControl(new Date(value1.getFullYear(), value1.getMonth(), day1)),
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
async loadFilter() {
|
|
173
|
+
// if (this.headerFiltersSelected.length != 0) {
|
|
174
|
+
// return
|
|
175
|
+
// }
|
|
176
|
+
let applyFilter = false;
|
|
177
|
+
for (let element of this.headerFilters) {
|
|
178
|
+
if (element.urlData) {
|
|
179
|
+
let res = await this.http.getDataBody(element.urlData);
|
|
180
|
+
element.body = res;
|
|
181
|
+
}
|
|
182
|
+
else if (element.type == 'select') {
|
|
183
|
+
element.body = element.data;
|
|
184
|
+
}
|
|
185
|
+
element.filteredList = element.body;
|
|
186
|
+
if (!element.primaryKey)
|
|
187
|
+
element.primaryKey = element.visibleField;
|
|
188
|
+
if (element.type == "date")
|
|
189
|
+
element.labelFilter = element.labelFilter ?? "Fecha igual a";
|
|
190
|
+
if (element.type == "dateRange")
|
|
191
|
+
element.labelFilter = element.labelFilter ?? "Fecha entre";
|
|
192
|
+
if (element.active) {
|
|
193
|
+
this.headerFiltersSelected.push(element);
|
|
194
|
+
this.filtersPost.push({
|
|
195
|
+
tN: btoa(element.tN),
|
|
196
|
+
primaryKey: element.fileNameDb ? element.fileNameDb : element.primaryKey,
|
|
197
|
+
type: element.type,
|
|
198
|
+
value: element.value,
|
|
199
|
+
labelFilter: element.labelFilter
|
|
200
|
+
});
|
|
201
|
+
this.handlerFiltersDate(false, element, element.value, element.value.split(',')[0], element.value.split(',')[1]);
|
|
202
|
+
if (element.value && element.value != '') {
|
|
203
|
+
applyFilter = true;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (applyFilter) {
|
|
208
|
+
this.applyFilters.emit(this.filtersPost);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
FiltersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FiltersComponent, deps: [{ token: i1.FunctionsService }, { token: i2.HttpService }], target: i0.ɵɵFactoryTarget.Component });
|
|
213
|
+
FiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FiltersComponent, selector: "app-filters", inputs: { headerFilters: "headerFilters" }, outputs: { applyFilters: "applyFilters" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"headerFilters && headerFilters.length > 0\" style=\"display: flex; width: 100%; flex-wrap: wrap;\" class=\"col-12 mb-2\">\n <div class=\"col-md-4 col-12\">\n <mat-form-field >\n <mat-label>Filtros</mat-label>\n <mat-select (selectionChange)=\"selectFilter($event)\" [(ngModel)]=\"headerFiltersValue\">\n <mat-option\n *ngFor=\"let f of headerFilters\"\n value=\"{{ f.labelFilter }}\"\n >\n {{ f.labelFilter }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div *ngFor=\"let item of headerFiltersSelected\" class=\"col-md-4 col-12 d-flex align-items-center\">\n <mat-form-field *ngIf=\"item.type == 'select'\">\n <mat-label>Filtrar por {{item.labelFilter}}</mat-label>\n <mat-select (selectionChange)=\"selectFilterData($event, item)\" [value]=\"item.value\">\n <app-select-filter\n [placeholder]=\"'Filter'\"\n [displayMember]=\"item.visibleField\"\n [array]=\"item.body\"\n (filteredReturn)=\"item.filteredList = $event\"\n [noResultsMessage]=\"'No hay resultados'\"\n >\n </app-select-filter>\n <mat-option\n *ngFor=\"let data of item.filteredList\"\n value=\"{{ data[item.primaryKey] }}\"\n >\n {{ data[item.visibleField] }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"item.type == 'date'\" [formGroup]=\"fecha\">\n <mat-label>{{item.labelFilter}}</mat-label>\n <input (dateInput)=\"selectFilterData($event, item)\" matInput [matDatepicker]=\"Fecha\" autocomplete=\"off\" matInput\n formControlName='fecha' required>\n <mat-datepicker-toggle matSuffix [for]=\"Fecha\">\n </mat-datepicker-toggle>\n <mat-datepicker dateInput #Fecha [touchUi]='movil?true:false'></mat-datepicker>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"item.type == 'dateRange'\">\n <mat-label>{{item.labelFilter}}</mat-label>\n <mat-date-range-input\n [formGroup]=\"campaignOne\"\n [rangePicker]=\"campaignOnePicker\"\n [comparisonStart]=\"campaignTwo.value.start\"\n [comparisonEnd]=\"campaignTwo.value.end\">\n <input matStartDate placeholder=\"Start date\" formControlName=\"start\">\n <input (dateInput)=\"selectFilterData($event, item)\" matEndDate placeholder=\"End date\" formControlName=\"end\">\n </mat-date-range-input>\n <mat-datepicker-toggle matSuffix [for]=\"campaignOnePicker\"></mat-datepicker-toggle>\n <mat-date-range-picker #campaignOnePicker></mat-date-range-picker>\n </mat-form-field>\n\n <div class=\"p-2\" style=\"cursor: pointer\" (click)=\"delteFilter(item)\"><mat-icon>cancel</mat-icon></div>\n\n </div>\n</div>\n", styles: ["mat-form-field{padding:0!important;width:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i6.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: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i9.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i9.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i9.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i9.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i9.MatStartDate, selector: "input[matStartDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i9.MatEndDate, selector: "input[matEndDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i9.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "directive", type: i10.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: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i10.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i10.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i11.SelectFilterComponent, selector: "app-select-filter", inputs: ["array", "placeholder", "color", "displayMember", "showSpinner", "noResultsMessage", "hasGroup", "groupArrayName"], outputs: ["filteredReturn"] }] });
|
|
214
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FiltersComponent, decorators: [{
|
|
215
|
+
type: Component,
|
|
216
|
+
args: [{ selector: 'app-filters', template: "<div *ngIf=\"headerFilters && headerFilters.length > 0\" style=\"display: flex; width: 100%; flex-wrap: wrap;\" class=\"col-12 mb-2\">\n <div class=\"col-md-4 col-12\">\n <mat-form-field >\n <mat-label>Filtros</mat-label>\n <mat-select (selectionChange)=\"selectFilter($event)\" [(ngModel)]=\"headerFiltersValue\">\n <mat-option\n *ngFor=\"let f of headerFilters\"\n value=\"{{ f.labelFilter }}\"\n >\n {{ f.labelFilter }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div *ngFor=\"let item of headerFiltersSelected\" class=\"col-md-4 col-12 d-flex align-items-center\">\n <mat-form-field *ngIf=\"item.type == 'select'\">\n <mat-label>Filtrar por {{item.labelFilter}}</mat-label>\n <mat-select (selectionChange)=\"selectFilterData($event, item)\" [value]=\"item.value\">\n <app-select-filter\n [placeholder]=\"'Filter'\"\n [displayMember]=\"item.visibleField\"\n [array]=\"item.body\"\n (filteredReturn)=\"item.filteredList = $event\"\n [noResultsMessage]=\"'No hay resultados'\"\n >\n </app-select-filter>\n <mat-option\n *ngFor=\"let data of item.filteredList\"\n value=\"{{ data[item.primaryKey] }}\"\n >\n {{ data[item.visibleField] }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"item.type == 'date'\" [formGroup]=\"fecha\">\n <mat-label>{{item.labelFilter}}</mat-label>\n <input (dateInput)=\"selectFilterData($event, item)\" matInput [matDatepicker]=\"Fecha\" autocomplete=\"off\" matInput\n formControlName='fecha' required>\n <mat-datepicker-toggle matSuffix [for]=\"Fecha\">\n </mat-datepicker-toggle>\n <mat-datepicker dateInput #Fecha [touchUi]='movil?true:false'></mat-datepicker>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"item.type == 'dateRange'\">\n <mat-label>{{item.labelFilter}}</mat-label>\n <mat-date-range-input\n [formGroup]=\"campaignOne\"\n [rangePicker]=\"campaignOnePicker\"\n [comparisonStart]=\"campaignTwo.value.start\"\n [comparisonEnd]=\"campaignTwo.value.end\">\n <input matStartDate placeholder=\"Start date\" formControlName=\"start\">\n <input (dateInput)=\"selectFilterData($event, item)\" matEndDate placeholder=\"End date\" formControlName=\"end\">\n </mat-date-range-input>\n <mat-datepicker-toggle matSuffix [for]=\"campaignOnePicker\"></mat-datepicker-toggle>\n <mat-date-range-picker #campaignOnePicker></mat-date-range-picker>\n </mat-form-field>\n\n <div class=\"p-2\" style=\"cursor: pointer\" (click)=\"delteFilter(item)\"><mat-icon>cancel</mat-icon></div>\n\n </div>\n</div>\n", styles: ["mat-form-field{padding:0!important;width:100%}\n"] }]
|
|
217
|
+
}], ctorParameters: function () { return [{ type: i1.FunctionsService }, { type: i2.HttpService }]; }, propDecorators: { headerFilters: [{
|
|
218
|
+
type: Input
|
|
219
|
+
}], applyFilters: [{
|
|
220
|
+
type: Output
|
|
221
|
+
}] } });
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2ZpbHRlcnMvZmlsdGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2ZpbHRlcnMvZmlsdGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBVyxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ2xILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBU3RFLE1BQU0sT0FBTyxnQkFBZ0I7SUFlM0IsWUFDVSxZQUE4QixFQUM5QixJQUFpQjtRQURqQixpQkFBWSxHQUFaLFlBQVksQ0FBa0I7UUFDOUIsU0FBSSxHQUFKLElBQUksQ0FBYTtRQWZsQixrQkFBYSxHQUFlLEVBQUUsQ0FBQTtRQUM3QixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFakQsdUJBQWtCLEdBQUcsSUFBSSxDQUFBO1FBQ3pCLDBCQUFxQixHQUFnQixFQUFFLENBQUE7UUFJdkMsVUFBSyxHQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUdsQyxnQkFBVyxHQUFHLEVBQUUsQ0FBQTtRQU1kLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUNoQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtJQUN4QixDQUFDO0lBQ0YsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFzQjtRQUN0QyxJQUFLLE9BQU8sRUFBRTtZQUNaLE1B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MkZEbERhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxhQUFhO2lJQU1kLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaHR0cC5zZXJ2aWNlJztcbmltcG9ydCB7IEZ1bmN0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mdW5jdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBTY3JlZW5TaXplVXRpbCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NjcmVlbi1zaXplLXV0aWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBEb0NoZWNrLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBlbGVtZW50IH0gZnJvbSAncHJvdHJhY3Rvcic7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWZpbHRlcnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsdGVycy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpbHRlcnMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuXG4gIEBJbnB1dCgpIGhlYWRlckZpbHRlcnM6IEFycmF5PGFueT4gPSBbXVxuICBAT3V0cHV0KCkgYXBwbHlGaWx0ZXJzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgaGVhZGVyRmlsdGVyc1ZhbHVlID0gXCItMVwiXG4gIGhlYWRlckZpbHRlcnNTZWxlY3RlZCA6IEFycmF5PGFueT4gPSBbXVxuICBjYW1wYWlnbk9uZTogVW50eXBlZEZvcm1Hcm91cDtcbiAgY2FtcGFpZ25Ud286IFVudHlwZWRGb3JtR3JvdXA7XG4gIGZlY2hhOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBtb3ZpbCA9IFNjcmVlblNpemVVdGlsLmlzTW9iaWxlKCk7XG5cblxuICBmaWx0ZXJzUG9zdCA9IFtdXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmdW5jdGlvbkV0ZXI6IEZ1bmN0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwU2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5sb2FkRGF0ZXMoKVxuICAgIHRoaXMubG9hZERhdGVzQmV0d2VlbigpXG4gICB9XG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoIGNoYW5nZXMpIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEZpbHRlcigpXG4gICAgfVxuICB9ICBcblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICAvLyBpZih0aGlzLmhlYWRlckZpbHRlcnMgJiYgdGhpcy5oZWFkZXJGaWx0ZXJzLmxlbmd0aCA+IDApXG4gICAgLy8gICBhd2FpdCB0aGlzLmxvYWRGaWx0ZXIoKVxuICB9XG5cbiAgaGFuZGxlckZpbHRlcnNEYXRlKGRlbGV0ZUZpbHRlcjpib29sZWFuLCBpdGVtOmFueSwgdmFsdWVEYXRlID0gbnVsbCwgdmFsdWVCZXR3ZWVuMSA9IG51bGwsIHZhbHVlQmV0d2VlbjIgPSBudWxsKXtcbiAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgIGlmKGRlbGV0ZUZpbHRlcil7XG4gICAgICAgICAgdGhpcy5kZWx0ZUZpbHRlcih7XG4gICAgICAgICAgICBsYWJlbEZpbHRlcjonRmVjaGEgZW50cmUnLFxuICAgICAgICAgICAgdHlwZTonZGF0ZVJhbmdlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHRoaXMubG9hZERhdGVzKG5ldyBEYXRlKHZhbHVlRGF0ZSArIFwiVDA1OjAwOjAwLjAwMFpcIikpXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2RhdGVSYW5nZSc6XG4gICAgICAgIGlmKGRlbGV0ZUZpbHRlcil7XG4gICAgICAgICAgdGhpcy5kZWx0ZUZpbHRlcih7XG4gICAgICAgICAgICBsYWJlbEZpbHRlcjonRmVjaGEgaWd1YWwgYScsXG4gICAgICAgICAgICB0eXBlOidkYXRlJ1xuICAgICAgICB9KVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICB0aGlzLmxvYWREYXRlc0JldHdlZW4oZmFsc2UsIG5ldyBEYXRlKHZhbHVlQmV0d2VlbjEgKyBcIlQwNTowMDowMC4wMDBaXCIpICwgbmV3IERhdGUodmFsdWVCZXR3ZWVuMiArIFwiVDA1OjAwOjAwLjAwMFpcIikpXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0RmlsdGVyKCRldmVudCl7XG4gICAgbGV0IHZhbGlkYXRlID0gdGhpcy5oZWFkZXJGaWx0ZXJzU2VsZWN0ZWQuZmluZCh4ID0+IHgubGFiZWxGaWx0ZXIgPT0gJGV2ZW50LnZhbHVlKVxuICAgIGlmKCF2YWxpZGF0ZSl7XG4gICAgICBsZXQgdmFsdWUgPSB0aGlzLmhlYWRlckZpbHRlcnMuZmluZCh4ID0+IHgubGFiZWxGaWx0ZXIgPT0gJGV2ZW50LnZhbHVlKVxuICAgICAgaWYodmFsdWUpe1xuICAgICAgICB0aGlzLmhlYWRlckZpbHRlcnNTZWxlY3RlZC5wdXNoKHZhbHVlKVxuICAgICAgICB0aGlzLmhhbmRsZXJGaWx0ZXJzRGF0ZSh0cnVlICwge3R5cGU6dmFsdWUudHlwZX0pXG4gICAgICB9XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5oZWFkZXJGaWx0ZXJzVmFsdWUgPSBudWxsXG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIGFzeW5jIHNlbGVjdEZpbHRlckRhdGEoJGV2ZW50LCBpdGVtKXtcbiAgICBsZXQgaSA9IHRoaXMuaGVhZGVyRmlsdGVyc1NlbGVjdGVkLmZpbmRJbmRleCh4ID0+IHgubGFiZWxGaWx0ZXIgPT0gaXRlbS5sYWJlbEZpbHRlcilcbiAgICBpZihpID49IDAgKSB0aGlzLmhlYWRlckZpbHRlcnNTZWxlY3RlZFtpXS52YWx1ZSA9ICRldmVudC52YWx1ZVxuICAgIGxldCBmID0gdGhpcy5maWx0ZXJzUG9zdC5maW5kSW5kZXgoeCA9PiB4LmxhYmVsRmlsdGVyID09IGl0ZW0ubGFiZWxGaWx0ZXIpXG4gICAgaWYoJGV2ZW50LnZhbHVlKXtcbiAgICAgIGxldCB2YWx1ZSA9IG51bGxcbiAgICAgIHN3aXRjaCAoaXRlbS50eXBlKSB7XG4gICAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgICAgdmFsdWUgPSAkZXZlbnQudmFsdWVcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgdmFsdWUgPSB0aGlzLmZ1bmN0aW9uRXRlci5kYXRlREIoJGV2ZW50LnZhbHVlKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2RhdGVSYW5nZSc6XG4gICAgICAgICAgdmFsdWUgPSBgJHt0aGlzLmZ1bmN0aW9uRXRlci5kYXRlREIodGhpcy5jYW1wYWlnbk9uZS5jb250cm9scy5zdGFydC52YWx1ZSl9LCR7dGhpcy5mdW5jdGlvbkV0ZXIuZGF0ZURCKHRoaXMuY2FtcGFpZ25PbmUuY29udHJvbHMuZW5kLnZhbHVlKX1gXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYoIXZhbHVlKSByZXR1cm5cbiAgICAgIGlmKGYgPj0gMCl7XG4gICAgICAgIHRoaXMuZmlsdGVyc1Bvc3RbZl0udmFsdWUgPSB2YWx1ZVxuICAgICAgfWVsc2V7XG4gICAgICAgIHRoaXMuZmlsdGVyc1Bvc3QucHVzaCh7XG4gICAgICAgICAgdE46YnRvYShpdGVtLnROKSxcbiAgICAgICAgICBwcmltYXJ5S2V5Oml0ZW0uZmlsZU5hbWVEYj9pdGVtLmZpbGVOYW1lRGI6aXRlbS5wcmltYXJ5S2V5LFxuICAgICAgICAgIHR5cGU6aXRlbS50eXBlLFxuICAgICAgICAgIHZhbHVlOnZhbHVlLFxuICAgICAgICAgIGxhYmVsRmlsdGVyOml0ZW0ubGFiZWxGaWx0ZXJcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzLmVtaXQodGhpcy5maWx0ZXJzUG9zdClcbiAgICB9XG5cblxuICB9XG5cbiAgZGVsdGVGaWx0ZXIoaXRlbSl7XG4gICAgbGV0IGkgPSB0aGlzLmhlYWRlckZpbHRlcnNTZWxlY3RlZC5maW5kSW5kZXgoeCA9PiB4LmxhYmVsRmlsdGVyID09IGl0ZW0ubGFiZWxGaWx0ZXIpXG4gICAgbGV0IGYgPSB0aGlzLmZpbHRlcnNQb3N0LmZpbmRJbmRleCh4ID0+IHgubGFiZWxGaWx0ZXIgPT0gaXRlbS5sYWJlbEZpbHRlcilcbiAgICBpZihpID49IDApIHtcbiAgICAgIHRoaXMuaGVhZGVyRmlsdGVyc1NlbGVjdGVkW2ldLnZhbHVlID0gXCItMVwiXG4gICAgICB0aGlzLmhlYWRlckZpbHRlcnNTZWxlY3RlZC5zcGxpY2UoaSwgMSlcbiAgICB9XG4gICAgaWYoZiA+PSAwKSB7XG4gICAgICB0aGlzLmZpbHRlcnNQb3N0LnNwbGljZShmLDEpXG4gICAgICB0aGlzLmFwcGx5RmlsdGVycy5lbWl0KHRoaXMuZmlsdGVyc1Bvc3QpXG4gICAgfVxuICAgIHRoaXMuaGFuZGxlckZpbHRlcnNEYXRlKGZhbHNlLCBpdGVtKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5oZWFkZXJGaWx0ZXJzVmFsdWUgPSBudWxsXG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIGxvYWREYXRlcyh2YWx1ZSA6IERhdGUgPSBudWxsKXtcbiAgICB0aGlzLmZlY2hhID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe1xuICAgICAgZmVjaGE6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wodmFsdWUpXG4gICAgfSk7XG4gIH1cblxuICBsb2FkRGF0ZXNCZXR3ZWVuKGluaXQ6Ym9vbGVhbiA9IHRydWUsIHZhbHVlMSA6IERhdGUgPSBudWxsLCB2YWx1ZTIgOiBEYXRlID0gbnVsbCl7XG4gICAgaWYoaW5pdCl7XG4gICAgICB0aGlzLmNhbXBhaWduT25lID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe1xuICAgICAgICBzdGFydDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChudWxsKSxcbiAgICAgICAgZW5kOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKG51bGwpLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY2FtcGFpZ25Ud28gPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7XG4gICAgICAgIHN0YXJ0OiBuZXcgVW50eXBlZEZvcm1Db250cm9sKG51bGwpLFxuICAgICAgICBlbmQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobnVsbCksXG4gICAgICB9KTtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB2YXIgZGF5MSA9IDFcbiAgICB2YXIgZGF5MiA9IDE1XG4gICAgaWYoIXZhbHVlMSl7XG4gICAgICB2YWx1ZTEgPSBuZXcgRGF0ZSgpXG4gICAgfWVsc2V7XG4gICAgICBkYXkxID0gdmFsdWUxLmdldERhdGUoKVxuICAgIH1cblxuICAgIGlmKCF2YWx1ZTIpe1xuICAgICAgdmFsdWUyID0gbmV3IERhdGUoKVxuICAgIH1lbHNle1xuICAgICAgZGF5MiA9IHZhbHVlMi5nZXREYXRlKClcbiAgICB9XG5cbiAgICB0aGlzLmNhbXBhaWduT25lID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe1xuICAgICAgc3RhcnQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobmV3IERhdGUodmFsdWUxLmdldEZ1bGxZZWFyKCksIHZhbHVlMS5nZXRNb250aCgpLCBkYXkxKSksXG4gICAgICBlbmQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobmV3IERhdGUodmFsdWUyLmdldEZ1bGxZZWFyKCksIHZhbHVlMi5nZXRNb250aCgpLCBkYXkyKSksXG4gICAgfSk7XG5cbiAgICB0aGlzLmNhbXBhaWduVHdvID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe1xuICAgICAgc3RhcnQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobmV3IERhdGUodmFsdWUxLmdldEZ1bGxZZWFyKCksIHZhbHVlMS5nZXRNb250aCgpLCBkYXkxKSksXG4gICAgICBlbmQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobmV3IERhdGUodmFsdWUxLmdldEZ1bGxZZWFyKCksIHZhbHVlMS5nZXRNb250aCgpLCBkYXkxKSksXG4gICAgfSk7XG5cbiAgfVxuXG4gIGFzeW5jIGxvYWRGaWx0ZXIoKXtcbiAgICAvLyBpZiAodGhpcy5oZWFkZXJGaWx0ZXJzU2VsZWN0ZWQubGVuZ3RoICE9IDApIHtcbiAgICAvLyAgIHJldHVyblxuICAgIC8vIH1cbiAgICBsZXQgYXBwbHlGaWx0ZXIgPSBmYWxzZSBcbiAgICBmb3IobGV0IGVsZW1lbnQgb2YgdGhpcy5oZWFkZXJGaWx0ZXJzKXtcbiAgICAgXG4gICAgICBpZihlbGVtZW50LnVybERhdGEpe1xuICAgICAgICBsZXQgcmVzID0gYXdhaXQgdGhpcy5odHRwLmdldERhdGFCb2R5PGFueT4oZWxlbWVudC51cmxEYXRhKVxuICAgICAgICBlbGVtZW50LmJvZHkgPSByZXM7XG4gICAgICB9ZWxzZSBpZiAoZWxlbWVudC50eXBlID09ICdzZWxlY3QnKSB7ICAgICAgIFxuICAgICAgICBlbGVtZW50LmJvZHkgPSBlbGVtZW50LmRhdGEgICAgICBcbiAgICAgIH1cbiAgICAgIGVsZW1lbnQuZmlsdGVyZWRMaXN0ID0gZWxlbWVudC5ib2R5O1xuICAgICAgaWYoIWVsZW1lbnQucHJpbWFyeUtleSkgZWxlbWVudC5wcmltYXJ5S2V5ID0gZWxlbWVudC52aXNpYmxlRmllbGRcbiAgICAgIGlmKGVsZW1lbnQudHlwZSA9PSBcImRhdGVcIikgZWxlbWVudC5sYWJlbEZpbHRlciA9IGVsZW1lbnQubGFiZWxGaWx0ZXIgPz8gXCJGZWNoYSBpZ3VhbCBhXCJcbiAgICAgIGlmKGVsZW1lbnQudHlwZSA9PSBcImRhdGVSYW5nZVwiKSBlbGVtZW50LmxhYmVsRmlsdGVyID0gZWxlbWVudC5sYWJlbEZpbHRlciA/PyBcIkZlY2hhIGVudHJlXCJcbiAgICAgIGlmKGVsZW1lbnQuYWN0aXZlKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyRmlsdGVyc1NlbGVjdGVkLnB1c2goZWxlbWVudClcbiAgICAgICAgdGhpcy5maWx0ZXJzUG9zdC5wdXNoKHtcbiAgICAgICAgICB0TjpidG9hKGVsZW1lbnQudE4pLFxuICAgICAgICAgIHByaW1hcnlLZXk6ZWxlbWVudC5maWxlTmFtZURiP2VsZW1lbnQuZmlsZU5hbWVEYjplbGVtZW50LnByaW1hcnlLZXksXG4gICAgICAgICAgdHlwZTplbGVtZW50LnR5cGUsXG4gICAgICAgICAgdmFsdWU6ZWxlbWVudC52YWx1ZSxcbiAgICAgICAgICBsYWJlbEZpbHRlcjplbGVtZW50LmxhYmVsRmlsdGVyXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuaGFuZGxlckZpbHRlcnNEYXRlKGZhbHNlLCBlbGVtZW50LCBlbGVtZW50LnZhbHVlLCBlbGVtZW50LnZhbHVlLnNwbGl0KCcsJylbMF0sIGVsZW1lbnQudmFsdWUuc3BsaXQoJywnKVsxXSlcbiAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUgJiYgZWxlbWVudC52YWx1ZSAhPSAnJykge1xuICAgICAgICAgIGFwcGx5RmlsdGVyID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhcHBseUZpbHRlcikge1xuICAgICAgdGhpcy5hcHBseUZpbHRlcnMuZW1pdCh0aGlzLmZpbHRlcnNQb3N0KSAgICAgIFxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cImhlYWRlckZpbHRlcnMgJiYgaGVhZGVyRmlsdGVycy5sZW5ndGggPiAwXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyB3aWR0aDogMTAwJTsgZmxleC13cmFwOiB3cmFwO1wiIGNsYXNzPVwiY29sLTEyIG1iLTJcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC1tZC00IGNvbC0xMlwiPlxuICAgIDxtYXQtZm9ybS1maWVsZCA+XG4gICAgICA8bWF0LWxhYmVsPkZpbHRyb3M8L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0RmlsdGVyKCRldmVudClcIiBbKG5nTW9kZWwpXT1cImhlYWRlckZpbHRlcnNWYWx1ZVwiPlxuICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICpuZ0Zvcj1cImxldCBmIG9mIGhlYWRlckZpbHRlcnNcIlxuICAgICAgICAgIHZhbHVlPVwie3sgZi5sYWJlbEZpbHRlciB9fVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBmLmxhYmVsRmlsdGVyIH19XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGhlYWRlckZpbHRlcnNTZWxlY3RlZFwiIGNsYXNzPVwiY29sLW1kLTQgY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIml0ZW0udHlwZSA9PSAnc2VsZWN0J1wiPlxuICAgICAgICA8bWF0LWxhYmVsPkZpbHRyYXIgcG9yIHt7aXRlbS5sYWJlbEZpbHRlcn19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0RmlsdGVyRGF0YSgkZXZlbnQsIGl0ZW0pXCIgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIj5cbiAgICAgICAgICA8YXBwLXNlbGVjdC1maWx0ZXJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInRmlsdGVyJ1wiXG4gICAgICAgICAgICBbZGlzcGxheU1lbWJlcl09XCJpdGVtLnZpc2libGVGaWVsZFwiXG4gICAgICAgICAgICBbYXJyYXldPVwiaXRlbS5ib2R5XCJcbiAgICAgICAgICAgIChmaWx0ZXJlZFJldHVybik9XCJpdGVtLmZpbHRlcmVkTGlzdCA9ICRldmVudFwiXG4gICAgICAgICAgICBbbm9SZXN1bHRzTWVzc2FnZV09XCInTm8gaGF5IHJlc3VsdGFkb3MnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9hcHAtc2VsZWN0LWZpbHRlcj5cbiAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2YgaXRlbS5maWx0ZXJlZExpc3RcIlxuICAgICAgICAgICAgdmFsdWU9XCJ7eyBkYXRhW2l0ZW0ucHJpbWFyeUtleV0gfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGRhdGFbaXRlbS52aXNpYmxlRmllbGRdIH19XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIml0ZW0udHlwZSA9PSAnZGF0ZSdcIiBbZm9ybUdyb3VwXT1cImZlY2hhXCI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57e2l0ZW0ubGFiZWxGaWx0ZXJ9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCAoZGF0ZUlucHV0KT1cInNlbGVjdEZpbHRlckRhdGEoJGV2ZW50LCBpdGVtKVwiIG1hdElucHV0IFttYXREYXRlcGlja2VyXT1cIkZlY2hhXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgbWF0SW5wdXRcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSdmZWNoYScgcmVxdWlyZWQ+XG4gICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJGZWNoYVwiPlxuICAgICAgICAgIDwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciBkYXRlSW5wdXQgI0ZlY2hhIFt0b3VjaFVpXT0nbW92aWw/dHJ1ZTpmYWxzZSc+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIml0ZW0udHlwZSA9PSAnZGF0ZVJhbmdlJ1wiPlxuICAgICAgICA8bWF0LWxhYmVsPnt7aXRlbS5sYWJlbEZpbHRlcn19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dFxuICAgICAgICAgIFtmb3JtR3JvdXBdPVwiY2FtcGFpZ25PbmVcIlxuICAgICAgICAgIFtyYW5nZVBpY2tlcl09XCJjYW1wYWlnbk9uZVBpY2tlclwiXG4gICAgICAgICAgW2NvbXBhcmlzb25TdGFydF09XCJjYW1wYWlnblR3by52YWx1ZS5zdGFydFwiXG4gICAgICAgICAgW2NvbXBhcmlzb25FbmRdPVwiY2FtcGFpZ25Ud28udmFsdWUuZW5kXCI+XG4gICAgICAgICAgPGlucHV0ICBtYXRTdGFydERhdGUgcGxhY2Vob2xkZXI9XCJTdGFydCBkYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwic3RhcnRcIj5cbiAgICAgICAgICA8aW5wdXQgKGRhdGVJbnB1dCk9XCJzZWxlY3RGaWx0ZXJEYXRhKCRldmVudCwgaXRlbSlcIiBtYXRFbmREYXRlIHBsYWNlaG9sZGVyPVwiRW5kIGRhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJlbmRcIj5cbiAgICAgICAgPC9tYXQtZGF0ZS1yYW5nZS1pbnB1dD5cbiAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJjYW1wYWlnbk9uZVBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtcGlja2VyICNjYW1wYWlnbk9uZVBpY2tlcj48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLTJcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiIChjbGljayk9XCJkZWx0ZUZpbHRlcihpdGVtKVwiPjxtYXQtaWNvbj5jYW5jZWw8L21hdC1pY29uPjwvZGl2PlxuXG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|