@huntsman-cancer-institute/reporting-framework 17.2.5 → 17.3.0
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/esm2022/model/param.model.mjs +7 -2
- package/esm2022/parameter/parameter.component.mjs +17 -1
- package/esm2022/reporting-framework.component.mjs +7 -1
- package/fesm2022/huntsman-cancer-institute-reporting-framework.mjs +28 -1
- package/fesm2022/huntsman-cancer-institute-reporting-framework.mjs.map +1 -1
- package/model/param.model.d.ts +3 -0
- package/package.json +3 -3
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
export class Param {
|
|
2
2
|
constructor() {
|
|
3
3
|
this.activeOnly = true;
|
|
4
|
+
this.sortNumeric = false;
|
|
5
|
+
this.filterField = "";
|
|
4
6
|
this.options = [];
|
|
5
7
|
this.selectedValueList = []; //for multi-select
|
|
6
8
|
}
|
|
7
9
|
calculateDictionaryURL() {
|
|
8
|
-
|
|
10
|
+
let out = "";
|
|
9
11
|
if (this.activeOnly) {
|
|
10
12
|
out = this.dictAPILeadIn + "/" + this.className + "/active-entries";
|
|
11
13
|
}
|
|
12
14
|
else {
|
|
13
15
|
out = this.dictAPILeadIn + "/" + this.className + "/entries";
|
|
14
16
|
}
|
|
17
|
+
if (this.filterField) {
|
|
18
|
+
out = out + "?" + this.filterField;
|
|
19
|
+
}
|
|
15
20
|
return out;
|
|
16
21
|
}
|
|
17
22
|
}
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW0ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBvcnRpbmctZnJhbWV3b3JrL3NyYy9tb2RlbC9wYXJhbS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sS0FBSztJQUFsQjtRQVFXLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFHM0IsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0IsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFFekIsWUFBTyxHQUFhLEVBQUUsQ0FBQztRQUd2QixzQkFBaUIsR0FBVSxFQUFFLENBQUMsQ0FBQyxrQkFBa0I7SUFrQjVELENBQUM7SUFmVSxzQkFBc0I7UUFDM0IsSUFBSSxHQUFHLEdBQVcsRUFBRSxDQUFDO1FBRXJCLElBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ25CLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFDO1FBQ3RFLENBQUM7YUFBSyxDQUFDO1lBQ0wsR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO1FBQy9ELENBQUM7UUFFRCxJQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3JDLENBQUM7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T3B0aW9ufSBmcm9tIFwiLi9vcHRpb24ubW9kZWxcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBQYXJhbSB7XHJcblxyXG4gICAgcHVibGljIGNhcHRpb246IHN0cmluZztcclxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgdHlwZTogc3RyaW5nO1xyXG4gICAgcHVibGljIGNsYXNzTmFtZTogc3RyaW5nO1xyXG4gICAgcHVibGljIHZhbHVlWFBhdGg6IHN0cmluZztcclxuICAgIHB1YmxpYyBkaXNwbGF5WFBhdGg6IHN0cmluZztcclxuICAgIHB1YmxpYyBhY3RpdmVPbmx5OiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBkaXNwbGF5T3JkZXI6IG51bWJlcjtcclxuICAgIHB1YmxpYyBzb3J0RmllbGQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBzb3J0TnVtZXJpYzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGZpbHRlckZpZWxkOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIHB1YmxpYyBvcHRpb25zOiBPcHRpb25bXSA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyBzZWxlY3RlZFZhbHVlOiBhbnk7XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRWYWx1ZUxpc3Q6IGFueVtdID0gW107IC8vZm9yIG11bHRpLXNlbGVjdFxyXG4gICAgcHVibGljIGRpY3RBUElMZWFkSW46IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgY2FsY3VsYXRlRGljdGlvbmFyeVVSTCgpOiBzdHJpbmcge1xyXG4gICAgICBsZXQgb3V0OiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgICAgaWYodGhpcy5hY3RpdmVPbmx5KSB7XHJcbiAgICAgICAgb3V0ID0gdGhpcy5kaWN0QVBJTGVhZEluICsgXCIvXCIgKyB0aGlzLmNsYXNzTmFtZSArIFwiL2FjdGl2ZS1lbnRyaWVzXCI7XHJcbiAgICAgIH1lbHNlIHtcclxuICAgICAgICBvdXQgPSB0aGlzLmRpY3RBUElMZWFkSW4gKyBcIi9cIiArIHRoaXMuY2xhc3NOYW1lICsgXCIvZW50cmllc1wiO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZih0aGlzLmZpbHRlckZpZWxkKSB7XHJcbiAgICAgICAgb3V0ID0gb3V0ICsgXCI/XCIgKyB0aGlzLmZpbHRlckZpZWxkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gb3V0O1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -54,6 +54,8 @@ export class ParameterComponent {
|
|
|
54
54
|
[name]="param.name"
|
|
55
55
|
[idKey]="param.valueXPath"
|
|
56
56
|
[displayKey]="param.displayXPath"
|
|
57
|
+
[sortKey]="param.sortField"
|
|
58
|
+
[sortNumeric]="param.sortNumeric"
|
|
57
59
|
[(ngModel)]="param.selectedValue"
|
|
58
60
|
[url]="param.calculateDictionaryURL()"
|
|
59
61
|
></hci-native-select>
|
|
@@ -70,6 +72,8 @@ export class ParameterComponent {
|
|
|
70
72
|
[id]="param.name"
|
|
71
73
|
[name]="param.name"
|
|
72
74
|
[(ngModel)]="param.selectedValue"
|
|
75
|
+
[sortKey]="param.sortField"
|
|
76
|
+
[sortNumeric]="param.sortNumeric"
|
|
73
77
|
[entries] = "entries"
|
|
74
78
|
></hci-native-select>
|
|
75
79
|
</div>
|
|
@@ -86,6 +90,8 @@ export class ParameterComponent {
|
|
|
86
90
|
[name]="param.name"
|
|
87
91
|
[idKey]="param.valueXPath"
|
|
88
92
|
[displayKey]="param.displayXPath"
|
|
93
|
+
[sortKey]="param.sortField"
|
|
94
|
+
[sortNumeric]="param.sortNumeric"
|
|
89
95
|
[(ngModel)]="param.selectedValueList"
|
|
90
96
|
[url]="param.calculateDictionaryURL()"
|
|
91
97
|
>
|
|
@@ -103,6 +109,8 @@ export class ParameterComponent {
|
|
|
103
109
|
[id]="param.name"
|
|
104
110
|
[name]="param.name"
|
|
105
111
|
[entries] = "entries"
|
|
112
|
+
[sortKey]="param.sortField"
|
|
113
|
+
[sortNumeric]="param.sortNumeric"
|
|
106
114
|
[(ngModel)]="param.selectedValueList"
|
|
107
115
|
>
|
|
108
116
|
</hci-md-multi-select>
|
|
@@ -173,6 +181,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
173
181
|
[name]="param.name"
|
|
174
182
|
[idKey]="param.valueXPath"
|
|
175
183
|
[displayKey]="param.displayXPath"
|
|
184
|
+
[sortKey]="param.sortField"
|
|
185
|
+
[sortNumeric]="param.sortNumeric"
|
|
176
186
|
[(ngModel)]="param.selectedValue"
|
|
177
187
|
[url]="param.calculateDictionaryURL()"
|
|
178
188
|
></hci-native-select>
|
|
@@ -189,6 +199,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
189
199
|
[id]="param.name"
|
|
190
200
|
[name]="param.name"
|
|
191
201
|
[(ngModel)]="param.selectedValue"
|
|
202
|
+
[sortKey]="param.sortField"
|
|
203
|
+
[sortNumeric]="param.sortNumeric"
|
|
192
204
|
[entries] = "entries"
|
|
193
205
|
></hci-native-select>
|
|
194
206
|
</div>
|
|
@@ -205,6 +217,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
205
217
|
[name]="param.name"
|
|
206
218
|
[idKey]="param.valueXPath"
|
|
207
219
|
[displayKey]="param.displayXPath"
|
|
220
|
+
[sortKey]="param.sortField"
|
|
221
|
+
[sortNumeric]="param.sortNumeric"
|
|
208
222
|
[(ngModel)]="param.selectedValueList"
|
|
209
223
|
[url]="param.calculateDictionaryURL()"
|
|
210
224
|
>
|
|
@@ -222,6 +236,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
222
236
|
[id]="param.name"
|
|
223
237
|
[name]="param.name"
|
|
224
238
|
[entries] = "entries"
|
|
239
|
+
[sortKey]="param.sortField"
|
|
240
|
+
[sortNumeric]="param.sortNumeric"
|
|
225
241
|
[(ngModel)]="param.selectedValueList"
|
|
226
242
|
>
|
|
227
243
|
</hci-md-multi-select>
|
|
@@ -249,4 +265,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
249
265
|
|
|
250
266
|
`, styles: [".data-label{width:270px;margin-right:30px;display:flex;align-items:center;justify-content:flex-end}.date-input{width:45%}.report-select,.multi-report-select{flex-grow:unset!important;width:45%}.radio-pair{display:flex;align-items:center;padding-right:5px;margin-right:15px}.input-field{width:45%}\n"] }]
|
|
251
267
|
}] });
|
|
252
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydGluZy1mcmFtZXdvcmsvc3JjL3BhcmFtZXRlci9wYXJhbWV0ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7OztBQXNLeEMsTUFBTSxPQUFPLGtCQUFrQjtJQUszQixRQUFRLENBQUMsQ0FBUTtRQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRWYsSUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQyxDQUFDLG9DQUFvQztZQUNwRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDOzhHQVpRLGtCQUFrQjtrR0FBbEIsa0JBQWtCLHFEQWhLakI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQTJIVDs7MkZBcUNRLGtCQUFrQjtrQkFsSzlCLFNBQVM7K0JBQ0ksZUFBZSxZQUNmOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0EySFQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtQYXJhbX0gZnJvbSBcIi4uL21vZGVsL3BhcmFtLm1vZGVsXCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJoY2ktcGFyYW1ldGVyXCIsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG5cclxuICAgICAgPCEtLVRleHQgSW5wdXQtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhcmFtLnR5cGUgPT09ICdpbnB1dCdcIj5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogYmxvY2s7XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImRhdGEtbGFiZWxcIj57e3BhcmFtLmNhcHRpb259fTo8L2xhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC1maWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICBbaWRdPVwicGFyYW0ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJwYXJhbS5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicGFyYW0uc2VsZWN0ZWRWYWx1ZVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwhLS1EYXRlLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJhbS50eXBlID09PSAnZGF0ZSdcIj5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogYmxvY2s7XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImRhdGEtbGFiZWxcIj57e3BhcmFtLmNhcHRpb259fTo8L2xhYmVsPlxyXG4gICAgICAgICAgICA8cmVwb3J0LWRhdGVwaWNrZXIgY2xhc3M9XCJkYXRlLWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwie3twYXJhbS5uYW1lfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwicGFyYW0uc2VsZWN0ZWRWYWx1ZVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9yZXBvcnQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwhLS1TZWxlY3Qgd2l0aCBkaWN0aW9uYXJ5LS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJhbS50eXBlID09PSAnc2VsZWN0JyAmJiBwYXJhbS5jbGFzc05hbWUgJiYgcGFyYW0uY2xhc3NOYW1lICE9ICcnXCI+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGJsb2NrO1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJkYXRhLWxhYmVsXCI+e3twYXJhbS5jYXB0aW9ufX06PC9sYWJlbD5cclxuICAgICAgICAgICAgPGhjaS1uYXRpdmUtc2VsZWN0IGNsYXNzPVwicmVwb3J0LXNlbGVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwicGFyYW0ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJwYXJhbS5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZEtleV09XCJwYXJhbS52YWx1ZVhQYXRoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5S2V5XT1cInBhcmFtLmRpc3BsYXlYUGF0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc29ydEtleV09XCJwYXJhbS5zb3J0RmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvcnROdW1lcmljXT1cInBhcmFtLnNvcnROdW1lcmljXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicGFyYW0uc2VsZWN0ZWRWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdXJsXT1cInBhcmFtLmNhbGN1bGF0ZURpY3Rpb25hcnlVUkwoKVwiXHJcbiAgICAgICAgICAgID48L2hjaS1uYXRpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPCEtLVNlbGVjdCB3aXRoIG1hbnVhbCBvcHRpb25zLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJhbS50eXBlID09PSAnc2VsZWN0JyAmJiAoIXBhcmFtLmNsYXNzTmFtZSB8fCBwYXJhbS5jbGFzc05hbWUgPT09ICcnKVwiPlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBibG9jaztcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZGF0YS1sYWJlbFwiPnt7cGFyYW0uY2FwdGlvbn19OjwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxoY2ktbmF0aXZlLXNlbGVjdCBjbGFzcz1cInJlcG9ydC1zZWxlY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cInBhcmFtLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwicGFyYW0ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhcmFtLnNlbGVjdGVkVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvcnRLZXldPVwicGFyYW0uc29ydEZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzb3J0TnVtZXJpY109XCJwYXJhbS5zb3J0TnVtZXJpY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW50cmllc10gPSBcImVudHJpZXNcIlxyXG4gICAgICAgICAgICA+PC9oY2ktbmF0aXZlLXNlbGVjdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwhLS1NdWx0aS1zZWxlY3Qgd2l0aCBkaWN0aW9uYXJ5LS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJhbS50eXBlID09PSAnbXVsdGlzZWxlY3QnICYmIHBhcmFtLmNsYXNzTmFtZSAmJiBwYXJhbS5jbGFzc05hbWUgIT0gJydcIj5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogYmxvY2s7XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImRhdGEtbGFiZWxcIj57e3BhcmFtLmNhcHRpb259fTo8L2xhYmVsPlxyXG4gICAgICAgICAgICA8aGNpLW1kLW11bHRpLXNlbGVjdCBjbGFzcz1cIm11bHRpLXJlcG9ydC1zZWxlY3RcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJwYXJhbS5uYW1lXCJcclxuICAgICAgICAgICAgICBbbmFtZV09XCJwYXJhbS5uYW1lXCJcclxuICAgICAgICAgICAgICBbaWRLZXldPVwicGFyYW0udmFsdWVYUGF0aFwiXHJcbiAgICAgICAgICAgICAgW2Rpc3BsYXlLZXldPVwicGFyYW0uZGlzcGxheVhQYXRoXCJcclxuICAgICAgICAgICAgICBbc29ydEtleV09XCJwYXJhbS5zb3J0RmllbGRcIlxyXG4gICAgICAgICAgICAgIFtzb3J0TnVtZXJpY109XCJwYXJhbS5zb3J0TnVtZXJpY1wiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwYXJhbS5zZWxlY3RlZFZhbHVlTGlzdFwiXHJcbiAgICAgICAgICAgICAgW3VybF09XCJwYXJhbS5jYWxjdWxhdGVEaWN0aW9uYXJ5VVJMKClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvaGNpLW1kLW11bHRpLXNlbGVjdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwhLS1NdWx0aS1zZWxlY3Qgd2l0aCBtYW51YWwgb3B0aW9ucy0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFyYW0udHlwZSA9PT0gJ211bHRpc2VsZWN0JyAmJiAoIXBhcmFtLmNsYXNzTmFtZSB8fCBwYXJhbS5jbGFzc05hbWUgPT09ICcnKVwiPlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBibG9jaztcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZGF0YS1sYWJlbFwiPnt7cGFyYW0uY2FwdGlvbn19OjwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxoY2ktbWQtbXVsdGktc2VsZWN0IGNsYXNzPVwibXVsdGktcmVwb3J0LXNlbGVjdFwiXHJcbiAgICAgICAgICAgICAgW2lkXT1cInBhcmFtLm5hbWVcIlxyXG4gICAgICAgICAgICAgIFtuYW1lXT1cInBhcmFtLm5hbWVcIlxyXG4gICAgICAgICAgICAgIFtlbnRyaWVzXSA9IFwiZW50cmllc1wiXHJcbiAgICAgICAgICAgICAgW3NvcnRLZXldPVwicGFyYW0uc29ydEZpZWxkXCJcclxuICAgICAgICAgICAgICBbc29ydE51bWVyaWNdPVwicGFyYW0uc29ydE51bWVyaWNcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicGFyYW0uc2VsZWN0ZWRWYWx1ZUxpc3RcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvaGNpLW1kLW11bHRpLXNlbGVjdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwhLS1SYWRpbyBidXR0b25zLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJhbS50eXBlID09PSAncmFkaW8nXCI+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGJsb2NrO1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJkYXRhLWxhYmVsXCI+e3twYXJhbS5jYXB0aW9ufX06PC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhZGlvLXBhaXJcIiAqbmdGb3I9XCJsZXQgbyBvZiBwYXJhbS5vcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAzcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbaWRdPVwicGFyYW0ubmFtZSArICctJyArIG8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhcmFtLnNlbGVjdGVkVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJwYXJhbS5uYW1lXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInt7cGFyYW0ubmFtZSArICctJyArIG8udmFsdWV9fVwiPnt7by5kaXNwbGF5fX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICBgLFxyXG4gICAgc3R5bGVzOiBbYFxyXG5cclxuICAgICAgLmRhdGEtbGFiZWx7XHJcbiAgICAgICAgd2lkdGg6IDI3MHB4O1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMzBweDtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLmRhdGUtaW5wdXR7XHJcbiAgICAgICAgd2lkdGg6IDQ1JTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLnJlcG9ydC1zZWxlY3R7XHJcbiAgICAgICAgZmxleC1ncm93OiB1bnNldCAhaW1wb3J0YW50O1xyXG4gICAgICAgIHdpZHRoOiA0NSU7XHJcbiAgICB9XHJcblxyXG4gICAgLm11bHRpLXJlcG9ydC1zZWxlY3R7XHJcbiAgICAgICAgZmxleC1ncm93OiB1bnNldCAhaW1wb3J0YW50O1xyXG4gICAgICAgIHdpZHRoOiA0NSU7XHJcbiAgICB9XHJcblxyXG4gICAgLnJhZGlvLXBhaXJ7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDVweDtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDE1cHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmlucHV0LWZpZWxke1xyXG4gICAgICAgIHdpZHRoOiA0NSVcclxuICAgIH1cclxuICAgIGBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYXJhbWV0ZXJDb21wb25lbnQge1xyXG5cclxuICAgIHBhcmFtOiBQYXJhbTtcclxuICAgIGVudHJpZXM6IGFueVtdO1xyXG5cclxuICAgIHNldFBhcmFtKHA6IFBhcmFtKSB7XHJcbiAgICAgIHRoaXMucGFyYW0gPSBwO1xyXG5cclxuICAgICAgaWYodGhpcy5wYXJhbS50eXBlID09PSBcInJhZGlvXCIpIHsgLy9pZiByYWRpbywgYXV0byBzZWxlY3QgZmlyc3Qgb3B0aW9uXHJcbiAgICAgICAgbGV0IG8gPSB0aGlzLnBhcmFtLm9wdGlvbnNbMF07XHJcbiAgICAgICAgdGhpcy5wYXJhbS5zZWxlY3RlZFZhbHVlID0gby52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
|
|
@@ -129,12 +129,18 @@ export class ReportingFrameworkComponent {
|
|
|
129
129
|
newParam.displayXPath = p.displayXPath;
|
|
130
130
|
newParam.displayOrder = p.displayOrder;
|
|
131
131
|
newParam.activeOnly = p.activeOnly;
|
|
132
|
+
newParam.sortField = p.sortField;
|
|
133
|
+
newParam.sortNumeric = p.sortNumeric;
|
|
134
|
+
newParam.filterField = p.filterField;
|
|
132
135
|
if (newParam.valueXPath) {
|
|
133
136
|
newParam.valueXPath = newParam.valueXPath.replace("@", "");
|
|
134
137
|
}
|
|
135
138
|
if (newParam.displayXPath) {
|
|
136
139
|
newParam.displayXPath = newParam.displayXPath.replace("@", "");
|
|
137
140
|
}
|
|
141
|
+
if (newParam.sortField) {
|
|
142
|
+
newParam.sortField = newParam.sortField.replace("@", "");
|
|
143
|
+
}
|
|
138
144
|
let options = p.options;
|
|
139
145
|
if (options) {
|
|
140
146
|
for (let o of options) {
|
|
@@ -624,4 +630,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
624
630
|
type: ViewChild,
|
|
625
631
|
args: ["formatContainer", { read: ViewContainerRef, static: false }]
|
|
626
632
|
}] } });
|
|
627
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0aW5nLWZyYW1ld29yay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9yZXBvcnRpbmctZnJhbWV3b3JrL3NyYy9yZXBvcnRpbmctZnJhbWV3b3JrLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULHdCQUF3QixFQUN4QixLQUFLLEVBRUwsU0FBUyxFQUNULGdCQUFnQixFQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsVUFBVSxFQUFFLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDMUMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDekUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7QUFxSXpELE1BQU0sT0FBTywyQkFBMkI7SUFvQ3BDLFlBQW9CLElBQWdCLEVBQ2hCLFFBQWtDLEVBQ2xDLFFBQWtCLEVBQ2xCLGNBQThCLEVBQzlCLFlBQXNC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clxuICAgIENvbXBvbmVudCwgQ29tcG9uZW50RmFjdG9yeSxcclxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgQ29tcG9uZW50UmVmLFxyXG4gICAgSW5wdXQsIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIFZpZXdDaGlsZCxcclxuICAgIFZpZXdDb250YWluZXJSZWZcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBQYXJhbXN9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQge1JlcG9ydH0gZnJvbSBcIi4vbW9kZWwvcmVwb3J0Lm1vZGVsXCI7XHJcbmltcG9ydCB7UGFyYW19IGZyb20gXCIuL21vZGVsL3BhcmFtLm1vZGVsXCI7XHJcbmltcG9ydCB7UGFyYW1ldGVyQ29tcG9uZW50fSBmcm9tIFwiLi9wYXJhbWV0ZXIvcGFyYW1ldGVyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge09wdGlvbn0gZnJvbSBcIi4vbW9kZWwvb3B0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7UmVwb3J0VGFifSBmcm9tIFwiLi9tb2RlbC9yZXBvcnQtdGFiLm1vZGVsXCI7XHJcbmltcG9ydCB7Rm9ybWF0fSBmcm9tIFwiLi9tb2RlbC9mb3JtYXQubW9kZWxcIjtcclxuaW1wb3J0IHtGb3JtYXRDb21wb25lbnR9IGZyb20gXCIuL2Zvcm1hdC9mb3JtYXQuY29tcG9uZW50XCI7XHJcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tIFwibW9tZW50XCI7XHJcbmltcG9ydCB7RGF0ZVBpcGV9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHtNb2RhbERpc21pc3NSZWFzb25zLCBOZ2JNb2RhbH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7RGlhbG9nc1NlcnZpY2V9IGZyb20gXCIuL3NwaW5uZXIvZGlhbG9ncy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEdyaWRBcGkgfSBmcm9tIFwiYWctZ3JpZC1jb21tdW5pdHlcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwiaGNpLXJlcG9ydGluZy1mcmFtZXdvcmtcIixcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDEwMHZoXCI+XHJcbiAgICAgICAgPHJlc2l6YWJsZS1zZWN0aW9uLWRpdmlkZXIgY2xhc3M9XCJmbGV4LWdyb3ctMVwiIFtpc1ZlcnRpY2FsTGF5b3V0XT1cInRydWVcIj5cclxuICAgICAgICAgIDxkaXYgdG9wU2VjdGlvbiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiIHN0eWxlPVwiaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgb3ZlcmZsb3c6IGF1dG87XCI+XHJcbiAgICAgICAgICAgIDwhLS1jYW4gd3JhcCBqdXN0IHRoZSBncmlkIHdpdGggdGhlIHRhYnMtLT5cclxuICAgICAgICAgICAgPG1hdC10YWItZ3JvdXAgKm5nSWY9XCJ0YWJMaXN0Lmxlbmd0aCA+IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXgtZ3Jvdy0xXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC10YWIgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJMaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cInt7dGFiLnRpdGxlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleC1ncm93LTFcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICA8YWctZ3JpZC1hbmd1bGFyXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZy10aGVtZS1iYWxoYW0gZnVsbC13aWR0aCBmbGV4LWdyb3ctMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiAyMDBweDsgaGVpZ2h0OiAxMDAlO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGdyaWRSZWFkeSk9XCJ0aGlzLm9uVGFiYmVkR3JpZFJlYWR5KCRldmVudCwgdGFiLm5hbWUpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZ3JpZE9wdGlvbnNdPVwidGhpcy5ncmlkT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Jvd1NlbGVjdGlvbl09XCInc2luZ2xlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKHJvd1NlbGVjdGVkKT1cInNldFNlbGVjdGVkUm93KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtmcmFtZXdvcmtDb21wb25lbnRzXT1cImZyYW1ld29ya0NvbXBvbmVudHNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyb3dEYXRhXT1cInRhYmJlZEdyaWRMaXN0W3RhYi5uYW1lXVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L2FnLWdyaWQtYW5ndWxhcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICA8L21hdC10YWItZ3JvdXA+XHJcblxyXG4gICAgICAgICAgICA8IS0tbmdiLXRhYnNldCAqbmdJZj1cInRhYkxpc3QubGVuZ3RoID4gMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lPbkhpZGU9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0YWJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4LWdyb3ctMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICNyZXBvcnRUYWJTZXQ9XCJuZ2JUYWJzZXRcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPG5nYi10YWIgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJMaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICBpZD1cInt7dGFiLm5hbWV9fVwiIHRpdGxlPVwie3t0YWIudGl0bGV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJib3JkZXI6IDVweCBzb2xpZDtcIiA+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiVGFiQ29udGVudCA+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8YWctZ3JpZC1hbmd1bGFyXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZy10aGVtZS1iYWxoYW0gZnVsbC13aWR0aCBmbGV4LWdyb3ctMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiAyMDBweDsgaGVpZ2h0OiAxMDAlO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGdyaWRSZWFkeSk9XCJ0aGlzLm9uVGFiYmVkR3JpZFJlYWR5KCRldmVudCwgdGFiLm5hbWUpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZ3JpZE9wdGlvbnNdPVwidGhpcy5ncmlkT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Jvd1NlbGVjdGlvbl09XCInc2luZ2xlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKHJvd1NlbGVjdGVkKT1cInNldFNlbGVjdGVkUm93KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtmcmFtZXdvcmtDb21wb25lbnRzXT1cImZyYW1ld29ya0NvbXBvbmVudHNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyb3dEYXRhXT1cInRhYmJlZEdyaWRMaXN0W3RhYi5uYW1lXVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L2FnLWdyaWQtYW5ndWxhcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9uZ2ItdGFiPlxyXG5cclxuICAgICAgICAgICAgPC9uZ2ItdGFic2V0LS0+XHJcblxyXG4gICAgICAgICAgICA8YWctZ3JpZC1hbmd1bGFyICpuZ0lmPVwidGFiTGlzdC5sZW5ndGggPD0gMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZy10aGVtZS1iYWxoYW0gZnVsbC13aWR0aCBmbGV4LWdyb3ctMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiAyMDBweDsgaGVpZ2h0OiAxMDAlO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdyaWRSZWFkeSk9XCJ0aGlzLm9uTWFpbkdyaWRSZWFkeSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JpZE9wdGlvbnNdPVwidGhpcy5ncmlkT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd1NlbGVjdGlvbl09XCInc2luZ2xlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJvd1NlbGVjdGVkKT1cInNldFNlbGVjdGVkUm93KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmcmFtZXdvcmtDb21wb25lbnRzXT1cImZyYW1ld29ya0NvbXBvbmVudHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dEYXRhXT1cImZ1bGxHcmlkTGlzdFwiPlxyXG4gICAgICAgICAgICA8L2FnLWdyaWQtYW5ndWxhcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBib3R0b21TZWN0aW9uIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCIgc3R5bGU9XCJoZWlnaHQ6IDgwJTsgd2lkdGg6IDEwMCU7IG92ZXJmbG93OiBhdXRvO1wiPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogYmxvY2s7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDI1cHg7IGZvbnQtd2VpZ2h0OiBib2xkXCI+e3tzZWxlY3RlZFJlcG9ydC50aXRsZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG5cIiAqbmdJZj1cInNlbGVjdGVkUmVwb3J0LmhlbHAgJiYgc2VsZWN0ZWRSZXBvcnQuaGVscCAhPSAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSGVscChjb250ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhciBmYS1xdWVzdGlvbi1jaXJjbGVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDx0ZW1wbGF0ZSAjcGFyYW1Db250YWluZXI+PC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGJsb2NrO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY2VudGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPHRlbXBsYXRlICNmb3JtYXRDb250YWluZXI+PC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzZWxlY3RlZFJlcG9ydC5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUnVuUmVwb3J0KClcIlxyXG4gICAgICAgICAgICAgICAgPlJ1biBSZXBvcnQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3Jlc2l6YWJsZS1zZWN0aW9uLWRpdmlkZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2NvbnRlbnQgbGV0LW1vZGFsPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJoZWxwLW1vZGVsLXRpdGxlXCI+UmVwb3J0IEhlbHA8L2g0PlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKCdDcm9zcyBjbGljaycpXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiID5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIiBbaW5uZXJIVE1MXT1cInNlbGVjdGVkUmVwb3J0LmhlbHBcIj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoJ09rIGNsaWNrJylcIj5PSzwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIGAsXHJcbiAgICBzdHlsZXM6IFtgXHJcbiAgICAgIDpob3N0IDo6bmctZGVlcCAubWF0LXRhYi1ib2R5LXdyYXBwZXJ7XHJcbiAgICAgICAgZmxleC1ncm93OiAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLm1hdC10YWItbGFiZWx7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzk4YzdlMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5tYXQtdGFiLWxhYmVsLWFjdGl2ZXtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVmNGZmO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAucmVwb3J0LWRldGFpbHN7XHJcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICAuY2VudGVyLXJvd3tcclxuICAgICAgICBtYXJnaW4tdG9wOiAxMHB4O1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiA2MHZ3O1xyXG4gICAgICB9XHJcbiAgICBgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVwb3J0aW5nRnJhbWV3b3JrQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICAgIEBJbnB1dCgpIG1hbmFnZVJlcG9ydFVybDogc3RyaW5nOyAvLyAvYXJ0YWRtaW4vbGVnYWN5L2FwaS9oY2kuYXJ0YWRtaW4uY29udHJvbGxlci5NYW5hZ2VSZXBvcnRzXHJcbiAgICBASW5wdXQoKSBjb21tYW5kUHJlZml4OiBzdHJpbmc7IC8vICAvYXJ0YWRtaW4vbGVnYWN5L2FwaS9qc3BcclxuICAgIEBJbnB1dCgpIGRpY3RBUElMZWFkSW46IHN0cmluZzsgLy8gL2FydGFkbWluL2FwaS9kaWN0aW9uYXJpZXNcclxuICAgIEBJbnB1dCgpIHJlcG9ydHNCeVR5cGU6IHN0cmluZzsgLy9vcHRpb25hbC4gdXN1YWxseSBcImdsb2JhbFwiIG9yIFwicGF0aWVudFwiXHJcblxyXG4gICAgQFZpZXdDaGlsZChcInBhcmFtQ29udGFpbmVyXCIsIHtyZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IGZhbHNlfSkgcGFyYW1Db250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgICBAVmlld0NoaWxkKFwiZm9ybWF0Q29udGFpbmVyXCIsIHtyZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IGZhbHNlfSkgZm9ybWF0Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xyXG5cclxuICAgIGZ1bGxHcmlkTGlzdDogYW55W10gPSBbXTtcclxuICAgIHRhYmJlZEdyaWRMaXN0OiBhbnkgPSB7fTtcclxuXHJcblxyXG4gICAgZ3JpZE9wdGlvbnMgPSB7XHJcbiAgICAgIHJvd1N0eWxlOiB7XHJcbiAgICAgICAgXCJmb250LWZhbWlseVwiOiBcIlByb21wdCwgc2Fucy1zZXJpZlwiXHJcbiAgICAgIH0sXHJcbiAgICAgIHJvd0hlaWdodDogMjAsXHJcbiAgICAgIGVuYWJsZUNlbGxUZXh0U2VsZWN0aW9uOiB0cnVlLFxyXG4gICAgICBlbnN1cmVEb21PcmRlcjogdHJ1ZVxyXG4gICAgfTsgLy9lbmFibGVDZWxsVGV4dFNlbGVjdGlvbiBzaG91bGQgYmUgY29tYmluZWQgd2l0aCBlbnN1cmVEb21PcmRlclxyXG4gICAgZnJhbWV3b3JrQ29tcG9uZW50czogYW55O1xyXG5cclxuICAgIG1haW5HcmlkQXBpOiBHcmlkQXBpO1xyXG4gICAgdGFiYmVkR3JpZEFwaUxpc3Q6IGFueSA9IHt9OyAvL2EgbWFwIG9mIEdyaWRBUElzIHRvIHRhYiBuYW1lc1xyXG5cclxuICAgIHJlcG9ydExpc3Q6IFJlcG9ydFtdID0gW107XHJcbiAgICB0YWJMaXN0OiBSZXBvcnRUYWJbXSA9IFtdO1xyXG4gICAgdGFiVHlwZU5hbWVMb29rdXA6IGFueSA9IHt9OyAvL2Ega2luZCBvZiBkaWN0IHRoYXQgbWFwcyB0aGUgdGFiIG9yIHR5cGUgdG8gdGhlIHRhYi1uYW1lXHJcblxyXG4gICAgc2VsZWN0ZWRSZXBvcnQ6IFJlcG9ydCA9IG5ldyBSZXBvcnQoKTtcclxuICAgIHNlbGVjdGVkRm9ybWF0OiBzdHJpbmc7XHJcbiAgICBkaXNwbGF5ZWRQYXJhbUNvbXBvbmVudFJlZnM6IENvbXBvbmVudFJlZjxhbnk+W10gPSBbXTtcclxuICAgIGRpc3BsYXllZEZvcm1hdENvbXBvbmVudFJlZnM6IENvbXBvbmVudFJlZjxhbnk+W10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgZGlhbG9nc1NlcnZpY2U6IERpYWxvZ3NTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5tYW5hZ2VSZXBvcnRVcmwgIT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5odHRwLmdldCh0aGlzLm1hbmFnZVJlcG9ydFVybCxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IG5ldyBIdHRwUGFyYW1zKCkuc2V0KFwiYWN0aW9uXCIsIFwibG9hZFdpdGhQYXJhbXNcIilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAocmVzcCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3ApO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wbGlzdCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wVGFiYmVkR3JpZExpc3QgPSB7fTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhYmxpc3QgPSByZXNwW1wicmVwb3J0VGFic1wiXTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgdGFibGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFiOiBSZXBvcnRUYWIgPSBuZXcgUmVwb3J0VGFiKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYi5uYW1lID0gcm93Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYi50aXRsZSA9IHJvdy50aXRsZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiLnR5cGUgPSByb3cudHlwZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiLnRhYiA9IHJvdy50YWI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYi5kYXRha2V5ID0gcm93LmRhdGFrZXk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucmVwb3J0c0J5VHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJMaXN0LnB1c2godGFiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWIudGFiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJUeXBlTmFtZUxvb2t1cFt0YWIudGFiXSA9IHRhYi5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhYi50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJUeXBlTmFtZUxvb2t1cFt0YWIudHlwZV0gPSB0YWIubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVwb3J0c0J5VHlwZSA9PSB0YWIudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFiTGlzdC5wdXNoKHRhYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJUeXBlTmFtZUxvb2t1cFt0YWIudGFiXSA9IHRhYi5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFiR3JpZExpc3Q6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFiYmVkR3JpZExpc3RbdGFiLm5hbWVdID0gdGFiR3JpZExpc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBUYWJiZWRHcmlkTGlzdFt0YWIubmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IHJlc3BbXCJyZXBvcnRMaXN0XCJdO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGxpc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHJvdyBvZiBsaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXBvcnQ6IFJlcG9ydCA9IG5ldyBSZXBvcnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0Lm5hbWUgPSByb3cubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0LnRpdGxlID0gcm93LnRpdGxlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuZGVzY3JpcHRpb24gPSByb3cuZGVzY3JpcHRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydC5jbGFzc05hbWUgPSByb3cuY2xhc3NOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuZmlsZU5hbWUgPSByb3cuZmlsZU5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydC50eXBlID0gcm93LnR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydC50YWIgPSByb3cudGFiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuZGF0YWtleSA9IHJvdy5kYXRha2V5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuaGVscCA9IHJvdy5oZWxwO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogcmVwb3J0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcmVwb3J0LnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHJlcG9ydC5kZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWJuYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwb3J0LnRhYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibmFtZSA9IHRoaXMudGFiVHlwZU5hbWVMb29rdXBbcmVwb3J0LnRhYl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMucmVwb3J0c0J5VHlwZSAmJiByZXBvcnQudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibmFtZSA9IHRoaXMudGFiVHlwZU5hbWVMb29rdXBbcmVwb3J0LnR5cGVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFibmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdyaWRsaXN0OiBhbnlbXSA9IHRlbXBUYWJiZWRHcmlkTGlzdFt0YWJuYW1lXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLnJlcG9ydHNCeVR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09IHRoaXMucmVwb3J0c0J5VHlwZSApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZGxpc3QucHVzaChvYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkbGlzdC5wdXNoKG9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSByb3cucGFyYW1zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcCBvZiBwYXJhbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3UGFyYW06IFBhcmFtID0gbmV3IFBhcmFtKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGFyYW0uZGljdEFQSUxlYWRJbiA9IHRoaXMuZGljdEFQSUxlYWRJbjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGFyYW0uY2FwdGlvbiA9IHAuY2FwdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXJhbS5uYW1lID0gcC5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1BhcmFtLnR5cGUgPSBwLnR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGFyYW0uY2xhc3NOYW1lID0gcC5jbGFzc05hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGFyYW0udmFsdWVYUGF0aCA9IHAudmFsdWVYUGF0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXJhbS5kaXNwbGF5WFBhdGggPSBwLmRpc3BsYXlYUGF0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXJhbS5kaXNwbGF5T3JkZXIgPSBwLmRpc3BsYXlPcmRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXJhbS5hY3RpdmVPbmx5ID0gcC5hY3RpdmVPbmx5O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3UGFyYW0udmFsdWVYUGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXJhbS52YWx1ZVhQYXRoID0gbmV3UGFyYW0udmFsdWVYUGF0aC5yZXBsYWNlKFwiQFwiLCBcIlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1BhcmFtLmRpc3BsYXlYUGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXJhbS5kaXNwbGF5WFBhdGggPSBuZXdQYXJhbS5kaXNwbGF5WFBhdGgucmVwbGFjZShcIkBcIiwgXCJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9ucyA9IHAub3B0aW9ucztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbyBvZiBvcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3T3B0aW9uOiBPcHRpb24gPSBuZXcgT3B0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb24udmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3T3B0aW9uLmRpc3BsYXkgPSBvLmRpc3BsYXk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb24uZGlzcGxheU9yZGVyID0gby5kaXNwbGF5T3JkZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGFyYW0ub3B0aW9ucy5wdXNoKG5ld09wdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydC5wYXJhbXMucHVzaChuZXdQYXJhbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JtYXRzID0gcm93LmZvcm1hdHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXRzKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgZiBvZiBmb3JtYXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0Zvcm1hdDogRm9ybWF0ID0gbmV3IEZvcm1hdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Zvcm1hdC5uYW1lID0gZi5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Zvcm1hdC5jYXB0aW9uID0gZi5jYXB0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Zvcm1hdC5kaXNwbGF5T3JkZXIgPSBmLmRpc3BsYXlPcmRlcjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0LmZvcm1hdHMucHVzaChuZXdGb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRMaXN0LnB1c2gocmVwb3J0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlcG9ydHNCeVR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlcG9ydC50eXBlID09PSB0aGlzLnJlcG9ydHNCeVR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGlzdC5wdXNoKG9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGlzdC5wdXNoKG9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnVsbEdyaWRMaXN0ID0gdGVtcGxpc3Quc2xpY2UoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImdyaWRsaXN0OiBcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5mdWxsR3JpZExpc3QpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IHRhYiBvZiB0aGlzLnRhYkxpc3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmJlZEdyaWRMaXN0W3RhYi5uYW1lXSA9IHRlbXBUYWJiZWRHcmlkTGlzdFt0YWIubmFtZV0uc2xpY2UoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29sdW1uRGVmKCkgOiBhbnlbXSB7XHJcbiAgICAgIHJldHVybiBbXHJcblxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpZWxkOiBcInRpdGxlXCIsXHJcbiAgICAgICAgICBoZWFkZXJOYW1lOiBcIlRpdGxlXCIsXHJcbiAgICAgICAgICB3aWR0aDogMzAwLFxyXG4gICAgICAgICAgc29ydGFibGU6IHRydWUsXHJcbiAgICAgICAgICByZXNpemFibGU6IHRydWUsXHJcbiAgICAgICAgICBlZGl0YWJsZTogZmFsc2V9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpZWxkOiBcImRlc2NyaXB0aW9uXCIsXHJcbiAgICAgICAgICBoZWFkZXJOYW1lOiBcIkRlc2NyaXB0aW9uXCIsXHJcbiAgICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcclxuICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZX1cclxuICAgICAgXTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25NYWluR3JpZFJlYWR5KHBhcmFtcyA6IGFueSkge1xyXG5cclxuICAgICAgdGhpcy5tYWluR3JpZEFwaSA9IHBhcmFtcy5hcGk7XHJcbiAgICAgIHRoaXMubWFpbkdyaWRBcGkuc2V0Q29sdW1uRGVmcyh0aGlzLmNvbHVtbkRlZigpKTtcclxuICAgICAgdGhpcy5tYWluR3JpZEFwaS5zZXRSb3dEYXRhKHRoaXMuZnVsbEdyaWRMaXN0KTtcclxuICAgICAgdGhpcy5tYWluR3JpZEFwaS5zaXplQ29sdW1uc1RvRml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25UYWJiZWRHcmlkUmVhZHkocGFyYW1zIDogYW55LCB0YWJuYW1lOiBzdHJpbmcpIHtcclxuXHJcbiAgICAgIHRoaXMudGFiYmVkR3JpZEFwaUxpc3RbdGFibmFtZV0gPSBwYXJhbXMuYXBpO1xyXG4gICAgICB0aGlzLnRhYmJlZEdyaWRBcGlMaXN0W3RhYm5hbWVdLnNldENvbHVtbkRlZnModGhpcy5jb2x1bW5EZWYoKSk7XHJcbiAgICAgIHRoaXMudGFiYmVkR3JpZEFwaUxpc3RbdGFibmFtZV0uc2V0Um93RGF0YSh0aGlzLnRhYmJlZEdyaWRMaXN0W3RhYm5hbWVdKTtcclxuICAgICAgdGhpcy50YWJiZWRHcmlkQXBpTGlzdFt0YWJuYW1lXS5zaXplQ29sdW1uc1RvRml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0U2VsZWN0ZWRSb3coZXZlbnQpIHtcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhldmVudCk7XHJcbiAgICAgICAgaWYoZXZlbnQubm9kZS5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgbGV0IHJlcG9ydE5hbWUgPSBldmVudC5ub2RlLmRhdGEubmFtZTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGV2ZW50Lm5vZGUuZGF0YS5uYW1lKTtcclxuXHJcbiAgICAgICAgICB2YXIgbWF0Y2hlZFJlcG9ydDogUmVwb3J0O1xyXG4gICAgICAgICAgZm9yIChsZXQgciBvZiB0aGlzLnJlcG9ydExpc3QpIHtcclxuICAgICAgICAgICAgaWYgKHIubmFtZSA9PSByZXBvcnROYW1lKSB7XHJcbiAgICAgICAgICAgICAgbWF0Y2hlZFJlcG9ydCA9IHI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAobWF0Y2hlZFJlcG9ydCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZXBvcnQgPSBtYXRjaGVkUmVwb3J0O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlcG9ydCA9IG5ldyBSZXBvcnQoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZVBhcmFtQ29tcG9uZW50cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVQYXJhbUNvbXBvbmVudHMoKSB7XHJcbiAgICAgICAgaWYodGhpcy5wYXJhbUNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtQ29udGFpbmVyLmNsZWFyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMuZm9ybWF0Q29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0Q29udGFpbmVyLmNsZWFyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2Rlc3Ryb3kgcHJldmlvdXMgY29tcG9uZW50cyBhbmQgY2xlYXIgdGhlIGRpc3BsYXllZFJlZiBsaXN0cy4uP1xyXG4gICAgICAgIHRoaXMuZGVzdHJveUNvbXBvbmVudFJlZnMoKTtcclxuICAgICAgICB0aGlzLmRpc3BsYXllZFBhcmFtQ29tcG9uZW50UmVmcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuZGlzcGxheWVkRm9ybWF0Q29tcG9uZW50UmVmcyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IobGV0IHAgb2YgdGhpcy5zZWxlY3RlZFJlcG9ydC5wYXJhbXMpe1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxQYXJhbWV0ZXJDb21wb25lbnQ+ID0gdGhpcy5yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShQYXJhbWV0ZXJDb21wb25lbnQpO1xyXG4gICAgICAgICAgICB2YXIgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8UGFyYW1ldGVyQ29tcG9uZW50PiA9IHRoaXMucGFyYW1Db250YWluZXIuY3JlYXRlQ29tcG9uZW50KGZhY3RvcnkpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXllZFBhcmFtQ29tcG9uZW50UmVmcy5wdXNoKGNvbXBvbmVudFJlZik7XHJcblxyXG4gICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Uuc2V0UGFyYW0ocCk7XHJcblxyXG4gICAgICAgICAgICBpZihwLm9wdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVudHJpZXM6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IG8gb2YgcC5vcHRpb25zKXtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IHtpZDogby52YWx1ZSwgZGlzcGxheTogby5kaXNwbGF5fTtcclxuICAgICAgICAgICAgICAgICAgICBlbnRyaWVzLnB1c2goZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZW50cmllcyA9IGVudHJpZXM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZmlyc3Q6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgICAgIGZvcihsZXQgZiBvZiB0aGlzLnNlbGVjdGVkUmVwb3J0LmZvcm1hdHMpe1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmFjdG9yeTI6IENvbXBvbmVudEZhY3Rvcnk8Rm9ybWF0Q29tcG9uZW50PiA9IHRoaXMucmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoRm9ybWF0Q29tcG9uZW50KTtcclxuICAgICAgICAgICAgdmFyIGNvbXBvbmVudFJlZjI6IENvbXBvbmVudFJlZjxGb3JtYXRDb21wb25lbnQ+ID0gdGhpcy5mb3JtYXRDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KGZhY3RvcnkyKTtcclxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRGb3JtYXRDb21wb25lbnRSZWZzLnB1c2goY29tcG9uZW50UmVmMik7XHJcblxyXG4gICAgICAgICAgICBjb21wb25lbnRSZWYyLmluc3RhbmNlLmZvcm1hdCA9IGY7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudFJlZjIuaW5zdGFuY2Uuc2VsZWN0ZWRWYWx1ZUNoYW5nZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAocykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGb3JtYXQgPSBzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZihmaXJzdCkgey8vc2VsZWN0IHRoZSBmaXJzdCBmb3JtYXQgaW4gdGhlIGdyb3VwaW5nXHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYyLmluc3RhbmNlLnNlbGVjdGVkVmFsdWUgPSBmLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRm9ybWF0ID0gZi5uYW1lO1xyXG4gICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW5IZWxwKGNvbnRlbnQpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbihjb250ZW50LCB7YXJpYUxhYmVsbGVkQnk6IFwiaGVscC1tb2RhbC10aXRsZVwifSlcclxuICAgICAgICAgICAgLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgLy8gdGhpcy5jbG9zZVJlc3VsdCA9IGBDbG9zZWQgd2l0aDogJHtyZXN1bHR9YDtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcclxuXHJcbiAgICAgICAgfSwgKHJlYXNvbikgPT4ge1xyXG4gICAgICAgICAgICB2YXIgY2xvc2VSZXN1bHQgPSBgRGlzbWlzc2VkICR7dGhpcy5nZXREaXNtaXNzUmVhc29uKHJlYXNvbil9YDtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coY2xvc2VSZXN1bHQpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXREaXNtaXNzUmVhc29uKHJlYXNvbjogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBpZiAocmVhc29uID09PSBNb2RhbERpc21pc3NSZWFzb25zLkVTQykge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJieSBwcmVzc2luZyBFU0NcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKHJlYXNvbiA9PT0gTW9kYWxEaXNtaXNzUmVhc29ucy5CQUNLRFJPUF9DTElDSykge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJieSBjbGlja2luZyBvbiBhIGJhY2tkcm9wXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICBgd2l0aDogJHtyZWFzb259YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25SdW5SZXBvcnQoKSB7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRSZXBvcnQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nc1NlcnZpY2Uuc3RhcnREZWZhdWx0U3Bpbm5lckRpYWxvZygpO1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJmb3JtYXQ6XCIgKyB0aGlzLnNlbGVjdGVkRm9ybWF0KTtcclxuICAgICAgICAgICAgaWYoIXRoaXMuc2VsZWN0ZWRGb3JtYXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGb3JtYXQgPSBcImh0bWxcIjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHJ1blBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgICAgIHJ1blBhcmFtcyA9IHJ1blBhcmFtcy5hcHBlbmQoXCJmb3JtYXRcIiwgdGhpcy5zZWxlY3RlZEZvcm1hdCk7XHJcbiAgICAgICAgICAgIHJ1blBhcmFtcyA9IHJ1blBhcmFtcy5hcHBlbmQoXCJhY3Rpb25cIiwgXCJzaG93XCIpO1xyXG4gICAgICAgICAgICBydW5QYXJhbXMgPSBydW5QYXJhbXMuYXBwZW5kKFwicmVwb3J0TmFtZVwiLCB0aGlzLnNlbGVjdGVkUmVwb3J0Lm5hbWUpO1xyXG5cclxuICAgICAgICAgICAgcnVuUGFyYW1zID0gdGhpcy5nZXRSdW5QYXJhbWV0ZXJzKHJ1blBhcmFtcyk7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhydW5QYXJhbXMpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5odHRwLmdldCh0aGlzLmNvbW1hbmRQcmVmaXggKyB0aGlzLnNlbGVjdGVkUmVwb3J0LmNsYXNzTmFtZSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJ1blBhcmFtcyxcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIChyZXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZW5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5zZWxlY3RlZEZvcm1hdCAhPSBcImh0bWxcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IHJlcy5oZWFkZXJzLmdldChcImNvbnRlbnQtZGlzcG9zaXRpb25cIikuc3BsaXQoXCI7XCIpWzFdLnNwbGl0KFwiPVwiKVsxXS5yZXBsYWNlKC9cXFwiL2csIFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtyZXMuYm9keV0sIHt0eXBlOiByZXMuYm9keS50eXBlfSApOyAvLywge3R5cGU6IFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsXCJ9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGVVUkwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlVVJMKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYTogSFRNTEFuY2hvckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKSBhcyBIVE1MQW5jaG9yRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICBhLmhyZWYgPSBmaWxlVVJMO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRGb3JtYXQgPT0gXCJodG1sXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYS50YXJnZXQgPSBcIl9ibGFua1wiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYS5kb3dubG9hZCA9IGZpbGVuYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcclxuICAgICAgICAgICAgICAgICAgICBhLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChmaWxlVVJMKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dzU2VydmljZS5zdG9wQWxsU3Bpbm5lckRpYWxvZ3MoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UnVuUGFyYW1ldGVycyhydW5QYXJhbXM6IEh0dHBQYXJhbXMpOiBIdHRwUGFyYW1zIHtcclxuICAgICAgICB2YXIgbmV3UGFyYW1zID0gcnVuUGFyYW1zO1xyXG5cclxuICAgICAgICBmb3IobGV0IG8gb2YgdGhpcy5kaXNwbGF5ZWRQYXJhbUNvbXBvbmVudFJlZnMpe1xyXG4gICAgICAgICAgICB2YXIgcGFyYW0gPSBvLmluc3RhbmNlLnBhcmFtO1xyXG5cclxuICAgICAgICAgICAgaWYocGFyYW0udHlwZSA9PSBcIm11bHRpc2VsZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIHZhciByZXNMaXN0ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgdiBvZiBwYXJhbS5zZWxlY3RlZFZhbHVlTGlzdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYocmVzTGlzdCAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc0xpc3QgKz0gXCIsXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc0xpc3QgKz0gdjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG5ld1BhcmFtcyA9IG5ld1BhcmFtcy5hcHBlbmQocGFyYW0ubmFtZSwgcmVzTGlzdCk7XHJcbiAgICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIGlmKHBhcmFtLnNlbGVjdGVkVmFsdWUpIHsgLy9zbyB3ZSBkb24ndCBnZXQgXCJ1bmRlZmluZWRcIiBzZW50IGJhY2tcclxuICAgICAgICAgICAgICAgICAgICBpZihwYXJhbS50eXBlID09IFwiZGF0ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXREYXRlU3RyaW5nKHBhcmFtLnNlbGVjdGVkVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJhbS5zZWxlY3RlZFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBuZXdQYXJhbXMgPSBuZXdQYXJhbXMuYXBwZW5kKHBhcmFtLm5hbWUsIHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3UGFyYW1zO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERhdGVTdHJpbmcoZGF0ZTogYW55KTogc3RyaW5nIHtcclxuXHJcbiAgICAgICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgIGlmICghaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgXCJNTS9kZC95eXl5XCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZSBpZihtb21lbnQuaXNNb21lbnQoZGF0ZSkgKSB7XHJcbiAgICAgICAgICAgIGlmKGRhdGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGUuZm9ybWF0KFwiTS9EL1lZWVlcIik7XHJcbiAgICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2UgaWYodHlwZW9mIGRhdGUgPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0ZTtcclxuICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkZXN0cm95Q29tcG9uZW50UmVmcygpIHtcclxuICAgICAgZm9yKGxldCBvIG9mIHRoaXMuZGlzcGxheWVkUGFyYW1Db21wb25lbnRSZWZzKXtcclxuICAgICAgICBvLmRlc3Ryb3koKTtcclxuICAgICAgfVxyXG4gICAgICBmb3IobGV0IG8gb2YgdGhpcy5kaXNwbGF5ZWRGb3JtYXRDb21wb25lbnRSZWZzKXtcclxuICAgICAgICBvLmRlc3Ryb3koKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveUNvbXBvbmVudFJlZnMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgc3R5bGVzOiBbYFxyXG4gICAgICAucmVwb3J0LWRldGFpbHN7XHJcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICAuY2VudGVyLXJvd3tcclxuICAgICAgICBtYXJnaW4tdG9wOiAxMHB4O1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiA2MHZ3O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAubWF0LXRhYi1ib2R5LXdyYXBwZXJ7XHJcbiAgICBmbGV4LWdyb3c6IDE7XHJcbiAgfVxyXG5cclxuLnRhYi1wYW5le1xyXG4gIGhlaWdodDogMTAwJTtcclxufVxyXG5gXSovXHJcbn1cclxuIl19
|
|
633
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0aW5nLWZyYW1ld29yay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9yZXBvcnRpbmctZnJhbWV3b3JrL3NyYy9yZXBvcnRpbmctZnJhbWV3b3JrLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULHdCQUF3QixFQUN4QixLQUFLLEVBRUwsU0FBUyxFQUNULGdCQUFnQixFQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsVUFBVSxFQUFFLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDMUMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDekUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7QUFxSXpELE1BQU0sT0FBTywyQkFBMkI7SUFvQ3BDLFlBQW9CLElBQWdCLEVBQ2hCLFFBQWtDLEVBQ2xDLFFBQWtCLEVBQ2xCLGNBQThCLEVBQzlCLFlBQXNC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RyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFFZ0UsY0FBYztzQkFBbkYsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDO2dCQUNHLGVBQWU7c0JBQXJGLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDb21wb25lbnQsIENvbXBvbmVudEZhY3RvcnksXHJcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENvbXBvbmVudFJlZixcclxuICAgIElucHV0LCBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbiAgICBWaWV3Q29udGFpbmVyUmVmXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwUGFyYW1zfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHtSZXBvcnR9IGZyb20gXCIuL21vZGVsL3JlcG9ydC5tb2RlbFwiO1xyXG5pbXBvcnQge1BhcmFtfSBmcm9tIFwiLi9tb2RlbC9wYXJhbS5tb2RlbFwiO1xyXG5pbXBvcnQge1BhcmFtZXRlckNvbXBvbmVudH0gZnJvbSBcIi4vcGFyYW1ldGVyL3BhcmFtZXRlci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtPcHRpb259IGZyb20gXCIuL21vZGVsL29wdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQge1JlcG9ydFRhYn0gZnJvbSBcIi4vbW9kZWwvcmVwb3J0LXRhYi5tb2RlbFwiO1xyXG5pbXBvcnQge0Zvcm1hdH0gZnJvbSBcIi4vbW9kZWwvZm9ybWF0Lm1vZGVsXCI7XHJcbmltcG9ydCB7Rm9ybWF0Q29tcG9uZW50fSBmcm9tIFwiLi9mb3JtYXQvZm9ybWF0LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xyXG5pbXBvcnQge0RhdGVQaXBlfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7TW9kYWxEaXNtaXNzUmVhc29ucywgTmdiTW9kYWx9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xyXG5pbXBvcnQge0RpYWxvZ3NTZXJ2aWNlfSBmcm9tIFwiLi9zcGlubmVyL2RpYWxvZ3Muc2VydmljZVwiO1xyXG5pbXBvcnQgeyBHcmlkQXBpIH0gZnJvbSBcImFnLWdyaWQtY29tbXVuaXR5XCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImhjaS1yZXBvcnRpbmctZnJhbWV3b3JrXCIsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAxMDB2aFwiPlxyXG4gICAgICAgIDxyZXNpemFibGUtc2VjdGlvbi1kaXZpZGVyIGNsYXNzPVwiZmxleC1ncm93LTFcIiBbaXNWZXJ0aWNhbExheW91dF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICA8ZGl2IHRvcFNlY3Rpb24gY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIiBzdHlsZT1cImhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IG92ZXJmbG93OiBhdXRvO1wiPlxyXG4gICAgICAgICAgICA8IS0tY2FuIHdyYXAganVzdCB0aGUgZ3JpZCB3aXRoIHRoZSB0YWJzLS0+XHJcbiAgICAgICAgICAgIDxtYXQtdGFiLWdyb3VwICpuZ0lmPVwidGFiTGlzdC5sZW5ndGggPiAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtdGFiICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFiTGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJ7e3RhYi50aXRsZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXgtZ3Jvdy0xXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgPGFnLWdyaWQtYW5ndWxhclxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWctdGhlbWUtYmFsaGFtIGZ1bGwtd2lkdGggZmxleC1ncm93LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWluLWhlaWdodDogMjAwcHg7IGhlaWdodDogMTAwJTtcIlxyXG4gICAgICAgICAgICAgICAgICAgIChncmlkUmVhZHkpPVwidGhpcy5vblRhYmJlZEdyaWRSZWFkeSgkZXZlbnQsIHRhYi5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2dyaWRPcHRpb25zXT1cInRoaXMuZ3JpZE9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyb3dTZWxlY3Rpb25dPVwiJ3NpbmdsZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgIChyb3dTZWxlY3RlZCk9XCJzZXRTZWxlY3RlZFJvdygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZnJhbWV3b3JrQ29tcG9uZW50c109XCJmcmFtZXdvcmtDb21wb25lbnRzXCJcclxuICAgICAgICAgICAgICAgICAgICBbcm93RGF0YV09XCJ0YWJiZWRHcmlkTGlzdFt0YWIubmFtZV1cIj5cclxuICAgICAgICAgICAgICAgICAgPC9hZy1ncmlkLWFuZ3VsYXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXRhYj5cclxuICAgICAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxyXG5cclxuICAgICAgICAgICAgPCEtLW5nYi10YWJzZXQgKm5nSWY9XCJ0YWJMaXN0Lmxlbmd0aCA+IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0cm95T25IaWRlPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGFic1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleC1ncm93LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAjcmVwb3J0VGFiU2V0PVwibmdiVGFic2V0XCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxuZ2ItdGFiICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFiTGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ7e3RhYi5uYW1lfX1cIiB0aXRsZT1cInt7dGFiLnRpdGxlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyOiA1cHggc29saWQ7XCIgPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYlRhYkNvbnRlbnQgPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGFnLWdyaWQtYW5ndWxhclxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWctdGhlbWUtYmFsaGFtIGZ1bGwtd2lkdGggZmxleC1ncm93LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWluLWhlaWdodDogMjAwcHg7IGhlaWdodDogMTAwJTtcIlxyXG4gICAgICAgICAgICAgICAgICAgIChncmlkUmVhZHkpPVwidGhpcy5vblRhYmJlZEdyaWRSZWFkeSgkZXZlbnQsIHRhYi5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2dyaWRPcHRpb25zXT1cInRoaXMuZ3JpZE9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyb3dTZWxlY3Rpb25dPVwiJ3NpbmdsZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgIChyb3dTZWxlY3RlZCk9XCJzZXRTZWxlY3RlZFJvdygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZnJhbWV3b3JrQ29tcG9uZW50c109XCJmcmFtZXdvcmtDb21wb25lbnRzXCJcclxuICAgICAgICAgICAgICAgICAgICBbcm93RGF0YV09XCJ0YWJiZWRHcmlkTGlzdFt0YWIubmFtZV1cIj5cclxuICAgICAgICAgICAgICAgICAgPC9hZy1ncmlkLWFuZ3VsYXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvbmdiLXRhYj5cclxuXHJcbiAgICAgICAgICAgIDwvbmdiLXRhYnNldC0tPlxyXG5cclxuICAgICAgICAgICAgPGFnLWdyaWQtYW5ndWxhciAqbmdJZj1cInRhYkxpc3QubGVuZ3RoIDw9IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWctdGhlbWUtYmFsaGFtIGZ1bGwtd2lkdGggZmxleC1ncm93LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWluLWhlaWdodDogMjAwcHg7IGhlaWdodDogMTAwJTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChncmlkUmVhZHkpPVwidGhpcy5vbk1haW5HcmlkUmVhZHkoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyaWRPcHRpb25zXT1cInRoaXMuZ3JpZE9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dTZWxlY3Rpb25dPVwiJ3NpbmdsZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyb3dTZWxlY3RlZCk9XCJzZXRTZWxlY3RlZFJvdygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZnJhbWV3b3JrQ29tcG9uZW50c109XCJmcmFtZXdvcmtDb21wb25lbnRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93RGF0YV09XCJmdWxsR3JpZExpc3RcIj5cclxuICAgICAgICAgICAgPC9hZy1ncmlkLWFuZ3VsYXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgYm90dG9tU2VjdGlvbiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiIHN0eWxlPVwiaGVpZ2h0OiA4MCU7IHdpZHRoOiAxMDAlOyBvdmVyZmxvdzogYXV0bztcIj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGJsb2NrO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAyNXB4OyBmb250LXdlaWdodDogYm9sZFwiPnt7c2VsZWN0ZWRSZXBvcnQudGl0bGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuXCIgKm5nSWY9XCJzZWxlY3RlZFJlcG9ydC5oZWxwICYmIHNlbGVjdGVkUmVwb3J0LmhlbHAgIT0gJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkhlbHAoY29udGVudClcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXIgZmEtcXVlc3Rpb24tY2lyY2xlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8dGVtcGxhdGUgI3BhcmFtQ29udGFpbmVyPjwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBibG9jaztcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNlbnRlci1yb3dcIj5cclxuICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjZm9ybWF0Q29udGFpbmVyPjwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2VsZWN0ZWRSZXBvcnQubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJ1blJlcG9ydCgpXCJcclxuICAgICAgICAgICAgICAgID5SdW4gUmVwb3J0PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9yZXNpemFibGUtc2VjdGlvbi1kaXZpZGVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5nLXRlbXBsYXRlICNjb250ZW50IGxldC1tb2RhbD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiaGVscC1tb2RlbC10aXRsZVwiPlJlcG9ydCBIZWxwPC9oND5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygnQ3Jvc3MgY2xpY2snKVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIiA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgW2lubmVySFRNTF09XCJzZWxlY3RlZFJlcG9ydC5oZWxwXCI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKCdPayBjbGljaycpXCI+T0s8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICBgLFxyXG4gICAgc3R5bGVzOiBbYFxyXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLm1hdC10YWItYm9keS13cmFwcGVye1xyXG4gICAgICAgIGZsZXgtZ3JvdzogMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5tYXQtdGFiLWxhYmVse1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM5OGM3ZTA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIDpob3N0IDo6bmctZGVlcCAubWF0LXRhYi1sYWJlbC1hY3RpdmV7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2RlZjRmZjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLnJlcG9ydC1kZXRhaWxze1xyXG4gICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcclxuICAgICAgfVxyXG5cclxuICAgICAgLmNlbnRlci1yb3d7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMTBweDtcclxuICAgICAgICBtYXJnaW4tbGVmdDogNjB2dztcclxuICAgICAgfVxyXG4gICAgYF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlcG9ydGluZ0ZyYW1ld29ya0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgICBASW5wdXQoKSBtYW5hZ2VSZXBvcnRVcmw6IHN0cmluZzsgLy8gL2FydGFkbWluL2xlZ2FjeS9hcGkvaGNpLmFydGFkbWluLmNvbnRyb2xsZXIuTWFuYWdlUmVwb3J0c1xyXG4gICAgQElucHV0KCkgY29tbWFuZFByZWZpeDogc3RyaW5nOyAvLyAgL2FydGFkbWluL2xlZ2FjeS9hcGkvanNwXHJcbiAgICBASW5wdXQoKSBkaWN0QVBJTGVhZEluOiBzdHJpbmc7IC8vIC9hcnRhZG1pbi9hcGkvZGljdGlvbmFyaWVzXHJcbiAgICBASW5wdXQoKSByZXBvcnRzQnlUeXBlOiBzdHJpbmc7IC8vb3B0aW9uYWwuIHVzdWFsbHkgXCJnbG9iYWxcIiBvciBcInBhdGllbnRcIlxyXG5cclxuICAgIEBWaWV3Q2hpbGQoXCJwYXJhbUNvbnRhaW5lclwiLCB7cmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiBmYWxzZX0pIHBhcmFtQ29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gICAgQFZpZXdDaGlsZChcImZvcm1hdENvbnRhaW5lclwiLCB7cmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiBmYWxzZX0pIGZvcm1hdENvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcclxuXHJcbiAgICBmdWxsR3JpZExpc3Q6IGFueVtdID0gW107XHJcbiAgICB0YWJiZWRHcmlkTGlzdDogYW55ID0ge307XHJcblxyXG5cclxuICAgIGdyaWRPcHRpb25zID0ge1xyXG4gICAgICByb3dTdHlsZToge1xyXG4gICAgICAgIFwiZm9udC1mYW1pbHlcIjogXCJQcm9tcHQsIHNhbnMtc2VyaWZcIlxyXG4gICAgICB9LFxyXG4gICAgICByb3dIZWlnaHQ6IDIwLFxyXG4gICAgICBlbmFibGVDZWxsVGV4dFNlbGVjdGlvbjogdHJ1ZSxcclxuICAgICAgZW5zdXJlRG9tT3JkZXI6IHRydWVcclxuICAgIH07IC8vZW5hYmxlQ2VsbFRleHRTZWxlY3Rpb24gc2hvdWxkIGJlIGNvbWJpbmVkIHdpdGggZW5zdXJlRG9tT3JkZXJcclxuICAgIGZyYW1ld29ya0NvbXBvbmVudHM6IGFueTtcclxuXHJcbiAgICBtYWluR3JpZEFwaTogR3JpZEFwaTtcclxuICAgIHRhYmJlZEdyaWRBcGlMaXN0OiBhbnkgPSB7fTsgLy9hIG1hcCBvZiBHcmlkQVBJcyB0byB0YWIgbmFtZXNcclxuXHJcbiAgICByZXBvcnRMaXN0OiBSZXBvcnRbXSA9IFtdO1xyXG4gICAgdGFiTGlzdDogUmVwb3J0VGFiW10gPSBbXTtcclxuICAgIHRhYlR5cGVOYW1lTG9va3VwOiBhbnkgPSB7fTsgLy9hIGtpbmQgb2YgZGljdCB0aGF0IG1hcHMgdGhlIHRhYiBvciB0eXBlIHRvIHRoZSB0YWItbmFtZVxyXG5cclxuICAgIHNlbGVjdGVkUmVwb3J0OiBSZXBvcnQgPSBuZXcgUmVwb3J0KCk7XHJcbiAgICBzZWxlY3RlZEZvcm1hdDogc3RyaW5nO1xyXG4gICAgZGlzcGxheWVkUGFyYW1Db21wb25lbnRSZWZzOiBDb21wb25lbnRSZWY8YW55PltdID0gW107XHJcbiAgICBkaXNwbGF5ZWRGb3JtYXRDb21wb25lbnRSZWZzOiBDb21wb25lbnRSZWY8YW55PltdID0gW107XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRpYWxvZ3NTZXJ2aWNlOiBEaWFsb2dzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubWFuYWdlUmVwb3J0VXJsICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaHR0cC5nZXQodGhpcy5tYW5hZ2VSZXBvcnRVcmwsXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBuZXcgSHR0cFBhcmFtcygpLnNldChcImFjdGlvblwiLCBcImxvYWRXaXRoUGFyYW1zXCIpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcGxpc3QgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcFRhYmJlZEdyaWRMaXN0ID0ge307XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YWJsaXN0ID0gcmVzcFtcInJlcG9ydFRhYnNcIl07XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcm93IG9mIHRhYmxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhYjogUmVwb3J0VGFiID0gbmV3IFJlcG9ydFRhYigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWIubmFtZSA9IHJvdy5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWIudGl0bGUgPSByb3cudGl0bGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYi50eXBlID0gcm93LnR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYi50YWIgPSByb3cudGFiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWIuZGF0YWtleSA9IHJvdy5kYXRha2V5O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlcG9ydHNCeVR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFiTGlzdC5wdXNoKHRhYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFiLnRhYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFiVHlwZU5hbWVMb29rdXBbdGFiLnRhYl0gPSB0YWIubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWIudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFiVHlwZU5hbWVMb29rdXBbdGFiLnR5cGVdID0gdGFiLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlcG9ydHNCeVR5cGUgPT0gdGFiLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYkxpc3QucHVzaCh0YWIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFiVHlwZU5hbWVMb29rdXBbdGFiLnRhYl0gPSB0YWIubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhYkdyaWRMaXN0OiBhbnlbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmJlZEdyaWRMaXN0W3RhYi5uYW1lXSA9IHRhYkdyaWRMaXN0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wVGFiYmVkR3JpZExpc3RbdGFiLm5hbWVdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxpc3QgPSByZXNwW1wicmVwb3J0TGlzdFwiXTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhsaXN0KTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgbGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVwb3J0OiBSZXBvcnQgPSBuZXcgUmVwb3J0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydC5uYW1lID0gcm93Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydC50aXRsZSA9IHJvdy50aXRsZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0LmRlc2NyaXB0aW9uID0gcm93LmRlc2NyaXB0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuY2xhc3NOYW1lID0gcm93LmNsYXNzTmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0LmZpbGVOYW1lID0gcm93LmZpbGVOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQudHlwZSA9IHJvdy50eXBlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQudGFiID0gcm93LnRhYjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0LmRhdGFrZXkgPSByb3cuZGF0YWtleTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0LmhlbHAgPSByb3cuaGVscDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iamVjdCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHJlcG9ydC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHJlcG9ydC50aXRsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiByZXBvcnQuZGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFibmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcG9ydC50YWIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYm5hbWUgPSB0aGlzLnRhYlR5cGVOYW1lTG9va3VwW3JlcG9ydC50YWJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnJlcG9ydHNCeVR5cGUgJiYgcmVwb3J0LnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYm5hbWUgPSB0aGlzLnRhYlR5cGVOYW1lTG9va3VwW3JlcG9ydC50eXBlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhYm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncmlkbGlzdDogYW55W10gPSB0ZW1wVGFiYmVkR3JpZExpc3RbdGFibmFtZV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5yZXBvcnRzQnlUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSB0aGlzLnJlcG9ydHNCeVR5cGUgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWRsaXN0LnB1c2gob2JqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZGxpc3QucHVzaChvYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1zID0gcm93LnBhcmFtcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHAgb2YgcGFyYW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1BhcmFtOiBQYXJhbSA9IG5ldyBQYXJhbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1BhcmFtLmRpY3RBUElMZWFkSW4gPSB0aGlzLmRpY3RBUElMZWFkSW47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1BhcmFtLmNhcHRpb24gPSBwLmNhcHRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGFyYW0ubmFtZSA9IHAubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXJhbS50eXBlID0gcC50eXBlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1BhcmFtLmNsYXNzTmFtZSA9IHAuY2xhc3NOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1BhcmFtLnZhbHVlWFBhdGggPSBwLnZhbHVlWFBhdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGFyYW0uZGlzcGxheVhQYXRoID0gcC5kaXNwbGF5WFBhdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGFyYW0uZGlzcGxheU9yZGVyID0gcC5kaXNwbGF5T3JkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGFyYW0uYWN0aXZlT25seSA9IHAuYWN0aXZlT25seTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXJhbS5zb3J0RmllbGQgPSBwLnNvcnRGaWVsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXJhbS5zb3J0TnVtZXJpYyA9IHAuc29ydE51bWVyaWM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGFyYW0uZmlsdGVyRmllbGQgPSBwLmZpbHRlckZpZWxkO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3UGFyYW0udmFsdWVYUGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXJhbS52YWx1ZVhQYXRoID0gbmV3UGFyYW0udmFsdWVYUGF0aC5yZXBsYWNlKFwiQFwiLCBcIlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1BhcmFtLmRpc3BsYXlYUGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXJhbS5kaXNwbGF5WFBhdGggPSBuZXdQYXJhbS5kaXNwbGF5WFBhdGgucmVwbGFjZShcIkBcIiwgXCJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdQYXJhbS5zb3J0RmllbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGFyYW0uc29ydEZpZWxkID0gbmV3UGFyYW0uc29ydEZpZWxkLnJlcGxhY2UoXCJAXCIsIFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBwLm9wdGlvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IG8gb2Ygb3B0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld09wdGlvbjogT3B0aW9uID0gbmV3IE9wdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3T3B0aW9uLnZhbHVlID0gby52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld09wdGlvbi5kaXNwbGF5ID0gby5kaXNwbGF5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3T3B0aW9uLmRpc3BsYXlPcmRlciA9IG8uZGlzcGxheU9yZGVyO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1BhcmFtLm9wdGlvbnMucHVzaChuZXdPcHRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQucGFyYW1zLnB1c2gobmV3UGFyYW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9ybWF0cyA9IHJvdy5mb3JtYXRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0cykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGYgb2YgZm9ybWF0cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdGb3JtYXQ6IEZvcm1hdCA9IG5ldyBGb3JtYXQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdGb3JtYXQubmFtZSA9IGYubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdGb3JtYXQuY2FwdGlvbiA9IGYuY2FwdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdGb3JtYXQuZGlzcGxheU9yZGVyID0gZi5kaXNwbGF5T3JkZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydC5mb3JtYXRzLnB1c2gobmV3Rm9ybWF0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0TGlzdC5wdXNoKHJlcG9ydCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZXBvcnRzQnlUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXBvcnQudHlwZSA9PT0gdGhpcy5yZXBvcnRzQnlUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxpc3QucHVzaChvYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxpc3QucHVzaChvYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZ1bGxHcmlkTGlzdCA9IHRlbXBsaXN0LnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJncmlkbGlzdDogXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZnVsbEdyaWRMaXN0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCB0YWIgb2YgdGhpcy50YWJMaXN0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJiZWRHcmlkTGlzdFt0YWIubmFtZV0gPSB0ZW1wVGFiYmVkR3JpZExpc3RbdGFiLm5hbWVdLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbHVtbkRlZigpIDogYW55W10ge1xyXG4gICAgICByZXR1cm4gW1xyXG5cclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaWVsZDogXCJ0aXRsZVwiLFxyXG4gICAgICAgICAgaGVhZGVyTmFtZTogXCJUaXRsZVwiLFxyXG4gICAgICAgICAgd2lkdGg6IDMwMCxcclxuICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgICAgICAgZWRpdGFibGU6IGZhbHNlfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaWVsZDogXCJkZXNjcmlwdGlvblwiLFxyXG4gICAgICAgICAgaGVhZGVyTmFtZTogXCJEZXNjcmlwdGlvblwiLFxyXG4gICAgICAgICAgc29ydGFibGU6IHRydWUsXHJcbiAgICAgICAgICByZXNpemFibGU6IHRydWUsXHJcbiAgICAgICAgICBlZGl0YWJsZTogZmFsc2V9XHJcbiAgICAgIF07XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9uTWFpbkdyaWRSZWFkeShwYXJhbXMgOiBhbnkpIHtcclxuXHJcbiAgICAgIHRoaXMubWFpbkdyaWRBcGkgPSBwYXJhbXMuYXBpO1xyXG4gICAgICB0aGlzLm1haW5HcmlkQXBpLnNldENvbHVtbkRlZnModGhpcy5jb2x1bW5EZWYoKSk7XHJcbiAgICAgIHRoaXMubWFpbkdyaWRBcGkuc2V0Um93RGF0YSh0aGlzLmZ1bGxHcmlkTGlzdCk7XHJcbiAgICAgIHRoaXMubWFpbkdyaWRBcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVGFiYmVkR3JpZFJlYWR5KHBhcmFtcyA6IGFueSwgdGFibmFtZTogc3RyaW5nKSB7XHJcblxyXG4gICAgICB0aGlzLnRhYmJlZEdyaWRBcGlMaXN0W3RhYm5hbWVdID0gcGFyYW1zLmFwaTtcclxuICAgICAgdGhpcy50YWJiZWRHcmlkQXBpTGlzdFt0YWJuYW1lXS5zZXRDb2x1bW5EZWZzKHRoaXMuY29sdW1uRGVmKCkpO1xyXG4gICAgICB0aGlzLnRhYmJlZEdyaWRBcGlMaXN0W3RhYm5hbWVdLnNldFJvd0RhdGEodGhpcy50YWJiZWRHcmlkTGlzdFt0YWJuYW1lXSk7XHJcbiAgICAgIHRoaXMudGFiYmVkR3JpZEFwaUxpc3RbdGFibmFtZV0uc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFNlbGVjdGVkUm93KGV2ZW50KSB7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coZXZlbnQpO1xyXG4gICAgICAgIGlmKGV2ZW50Lm5vZGUuc2VsZWN0ZWQpIHtcclxuICAgICAgICAgIGxldCByZXBvcnROYW1lID0gZXZlbnQubm9kZS5kYXRhLm5hbWU7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhldmVudC5ub2RlLmRhdGEubmFtZSk7XHJcblxyXG4gICAgICAgICAgdmFyIG1hdGNoZWRSZXBvcnQ6IFJlcG9ydDtcclxuICAgICAgICAgIGZvciAobGV0IHIgb2YgdGhpcy5yZXBvcnRMaXN0KSB7XHJcbiAgICAgICAgICAgIGlmIChyLm5hbWUgPT0gcmVwb3J0TmFtZSkge1xyXG4gICAgICAgICAgICAgIG1hdGNoZWRSZXBvcnQgPSByO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKG1hdGNoZWRSZXBvcnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVwb3J0ID0gbWF0Y2hlZFJlcG9ydDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZXBvcnQgPSBuZXcgUmVwb3J0KCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5jcmVhdGVQYXJhbUNvbXBvbmVudHMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlUGFyYW1Db21wb25lbnRzKCkge1xyXG4gICAgICAgIGlmKHRoaXMucGFyYW1Db250YWluZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbUNvbnRhaW5lci5jbGVhcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLmZvcm1hdENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1hdENvbnRhaW5lci5jbGVhcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9kZXN0cm95IHByZXZpb3VzIGNvbXBvbmVudHMgYW5kIGNsZWFyIHRoZSBkaXNwbGF5ZWRSZWYgbGlzdHMuLj9cclxuICAgICAgICB0aGlzLmRlc3Ryb3lDb21wb25lbnRSZWZzKCk7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRQYXJhbUNvbXBvbmVudFJlZnMgPSBbXTtcclxuICAgICAgICB0aGlzLmRpc3BsYXllZEZvcm1hdENvbXBvbmVudFJlZnMgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yKGxldCBwIG9mIHRoaXMuc2VsZWN0ZWRSZXBvcnQucGFyYW1zKXtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8UGFyYW1ldGVyQ29tcG9uZW50PiA9IHRoaXMucmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoUGFyYW1ldGVyQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgdmFyIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFBhcmFtZXRlckNvbXBvbmVudD4gPSB0aGlzLnBhcmFtQ29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5KTtcclxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRQYXJhbUNvbXBvbmVudFJlZnMucHVzaChjb21wb25lbnRSZWYpO1xyXG5cclxuICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnNldFBhcmFtKHApO1xyXG5cclxuICAgICAgICAgICAgaWYocC5vcHRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciBlbnRyaWVzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBvIG9mIHAub3B0aW9ucyl7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSB7aWQ6IG8udmFsdWUsIGRpc3BsYXk6IG8uZGlzcGxheX07XHJcbiAgICAgICAgICAgICAgICAgICAgZW50cmllcy5wdXNoKGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmVudHJpZXMgPSBlbnRyaWVzO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGZpcnN0OiBib29sZWFuID0gdHJ1ZTtcclxuICAgICAgICBmb3IobGV0IGYgb2YgdGhpcy5zZWxlY3RlZFJlcG9ydC5mb3JtYXRzKXtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZhY3RvcnkyOiBDb21wb25lbnRGYWN0b3J5PEZvcm1hdENvbXBvbmVudD4gPSB0aGlzLnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KEZvcm1hdENvbXBvbmVudCk7XHJcbiAgICAgICAgICAgIHZhciBjb21wb25lbnRSZWYyOiBDb21wb25lbnRSZWY8Rm9ybWF0Q29tcG9uZW50PiA9IHRoaXMuZm9ybWF0Q29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5Mik7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkRm9ybWF0Q29tcG9uZW50UmVmcy5wdXNoKGNvbXBvbmVudFJlZjIpO1xyXG5cclxuICAgICAgICAgICAgY29tcG9uZW50UmVmMi5pbnN0YW5jZS5mb3JtYXQgPSBmO1xyXG4gICAgICAgICAgICBjb21wb25lbnRSZWYyLmluc3RhbmNlLnNlbGVjdGVkVmFsdWVDaGFuZ2Uuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRm9ybWF0ID0gcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYoZmlyc3QpIHsvL3NlbGVjdCB0aGUgZmlyc3QgZm9ybWF0IGluIHRoZSBncm91cGluZ1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50UmVmMi5pbnN0YW5jZS5zZWxlY3RlZFZhbHVlID0gZi5uYW1lO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvcm1hdCA9IGYubmFtZTtcclxuICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuSGVscChjb250ZW50KSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oY29udGVudCwge2FyaWFMYWJlbGxlZEJ5OiBcImhlbHAtbW9kYWwtdGl0bGVcIn0pXHJcbiAgICAgICAgICAgIC5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuY2xvc2VSZXN1bHQgPSBgQ2xvc2VkIHdpdGg6ICR7cmVzdWx0fWA7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcblxyXG4gICAgICAgIH0sIChyZWFzb24pID0+IHtcclxuICAgICAgICAgICAgdmFyIGNsb3NlUmVzdWx0ID0gYERpc21pc3NlZCAke3RoaXMuZ2V0RGlzbWlzc1JlYXNvbihyZWFzb24pfWA7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNsb3NlUmVzdWx0KTtcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RGlzbWlzc1JlYXNvbihyZWFzb246IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHJlYXNvbiA9PT0gTW9kYWxEaXNtaXNzUmVhc29ucy5FU0MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiYnkgcHJlc3NpbmcgRVNDXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZWFzb24gPT09IE1vZGFsRGlzbWlzc1JlYXNvbnMuQkFDS0RST1BfQ0xJQ0spIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiYnkgY2xpY2tpbmcgb24gYSBiYWNrZHJvcFwiO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAgYHdpdGg6ICR7cmVhc29ufWA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uUnVuUmVwb3J0KCkge1xyXG5cclxuICAgICAgICBpZih0aGlzLnNlbGVjdGVkUmVwb3J0KSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ3NTZXJ2aWNlLnN0YXJ0RGVmYXVsdFNwaW5uZXJEaWFsb2coKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZm9ybWF0OlwiICsgdGhpcy5zZWxlY3RlZEZvcm1hdCk7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnNlbGVjdGVkRm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRm9ybWF0ID0gXCJodG1sXCI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBydW5QYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgICAgICAgICBydW5QYXJhbXMgPSBydW5QYXJhbXMuYXBwZW5kKFwiZm9ybWF0XCIsIHRoaXMuc2VsZWN0ZWRGb3JtYXQpO1xyXG4gICAgICAgICAgICBydW5QYXJhbXMgPSBydW5QYXJhbXMuYXBwZW5kKFwiYWN0aW9uXCIsIFwic2hvd1wiKTtcclxuICAgICAgICAgICAgcnVuUGFyYW1zID0gcnVuUGFyYW1zLmFwcGVuZChcInJlcG9ydE5hbWVcIiwgdGhpcy5zZWxlY3RlZFJlcG9ydC5uYW1lKTtcclxuXHJcbiAgICAgICAgICAgIHJ1blBhcmFtcyA9IHRoaXMuZ2V0UnVuUGFyYW1ldGVycyhydW5QYXJhbXMpO1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2cocnVuUGFyYW1zKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaHR0cC5nZXQodGhpcy5jb21tYW5kUHJlZml4ICsgdGhpcy5zZWxlY3RlZFJlcG9ydC5jbGFzc05hbWUsXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBydW5QYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGVuYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRGb3JtYXQgIT0gXCJodG1sXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSByZXMuaGVhZGVycy5nZXQoXCJjb250ZW50LWRpc3Bvc2l0aW9uXCIpLnNwbGl0KFwiO1wiKVsxXS5zcGxpdChcIj1cIilbMV0ucmVwbGFjZSgvXFxcIi9nLCBcIlwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbcmVzLmJvZHldLCB7dHlwZTogcmVzLmJvZHkudHlwZX0gKTsgLy8sIHt0eXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbFwifVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWxlVVJMID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZVVSTCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGE6IEhUTUxBbmNob3JFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIikgYXMgSFRNTEFuY2hvckVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYS5ocmVmID0gZmlsZVVSTDtcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLnNlbGVjdGVkRm9ybWF0ID09IFwiaHRtbFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGEudGFyZ2V0ID0gXCJfYmxhbmtcIjtcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuZG93bmxvYWQgPSBmaWxlbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYS5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoZmlsZVVSTCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nc1NlcnZpY2Uuc3RvcEFsbFNwaW5uZXJEaWFsb2dzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFJ1blBhcmFtZXRlcnMocnVuUGFyYW1zOiBIdHRwUGFyYW1zKTogSHR0cFBhcmFtcyB7XHJcbiAgICAgICAgdmFyIG5ld1BhcmFtcyA9IHJ1blBhcmFtcztcclxuXHJcbiAgICAgICAgZm9yKGxldCBvIG9mIHRoaXMuZGlzcGxheWVkUGFyYW1Db21wb25lbnRSZWZzKXtcclxuICAgICAgICAgICAgdmFyIHBhcmFtID0gby5pbnN0YW5jZS5wYXJhbTtcclxuXHJcbiAgICAgICAgICAgIGlmKHBhcmFtLnR5cGUgPT0gXCJtdWx0aXNlbGVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzTGlzdCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IHYgb2YgcGFyYW0uc2VsZWN0ZWRWYWx1ZUxpc3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHJlc0xpc3QgIT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNMaXN0ICs9IFwiLFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXNMaXN0ICs9IHY7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBuZXdQYXJhbXMgPSBuZXdQYXJhbXMuYXBwZW5kKHBhcmFtLm5hbWUsIHJlc0xpc3QpO1xyXG4gICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWU7XHJcbiAgICAgICAgICAgICAgICBpZihwYXJhbS5zZWxlY3RlZFZhbHVlKSB7IC8vc28gd2UgZG9uJ3QgZ2V0IFwidW5kZWZpbmVkXCIgc2VudCBiYWNrXHJcbiAgICAgICAgICAgICAgICAgICAgaWYocGFyYW0udHlwZSA9PSBcImRhdGVcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuZ2V0RGF0ZVN0cmluZyhwYXJhbS5zZWxlY3RlZFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyYW0uc2VsZWN0ZWRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbmV3UGFyYW1zID0gbmV3UGFyYW1zLmFwcGVuZChwYXJhbS5uYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld1BhcmFtcztcclxuICAgIH1cclxuXHJcbiAgICBnZXREYXRlU3RyaW5nKGRhdGU6IGFueSk6IHN0cmluZyB7XHJcblxyXG4gICAgICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICBpZiAoIWlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsIFwiTU0vZGQveXl5eVwiKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2UgaWYobW9tZW50LmlzTW9tZW50KGRhdGUpICkge1xyXG4gICAgICAgICAgICBpZihkYXRlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRlLmZvcm1hdChcIk0vRC9ZWVlZXCIpO1xyXG4gICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNlIGlmKHR5cGVvZiBkYXRlID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGVzdHJveUNvbXBvbmVudFJlZnMoKSB7XHJcbiAgICAgIGZvcihsZXQgbyBvZiB0aGlzLmRpc3BsYXllZFBhcmFtQ29tcG9uZW50UmVmcyl7XHJcbiAgICAgICAgby5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgICAgZm9yKGxldCBvIG9mIHRoaXMuZGlzcGxheWVkRm9ybWF0Q29tcG9uZW50UmVmcyl7XHJcbiAgICAgICAgby5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3lDb21wb25lbnRSZWZzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgIHN0eWxlczogW2BcclxuICAgICAgLnJlcG9ydC1kZXRhaWxze1xyXG4gICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcclxuICAgICAgfVxyXG5cclxuICAgICAgLmNlbnRlci1yb3d7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMTBweDtcclxuICAgICAgICBtYXJnaW4tbGVmdDogNjB2dztcclxuICAgICAgfVxyXG5cclxuICAgICAgLm1hdC10YWItYm9keS13cmFwcGVye1xyXG4gICAgZmxleC1ncm93OiAxO1xyXG4gIH1cclxuXHJcbi50YWItcGFuZXtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbn1cclxuYF0qL1xyXG59XHJcbiJdfQ==
|
|
@@ -33,17 +33,22 @@ class Report {
|
|
|
33
33
|
class Param {
|
|
34
34
|
constructor() {
|
|
35
35
|
this.activeOnly = true;
|
|
36
|
+
this.sortNumeric = false;
|
|
37
|
+
this.filterField = "";
|
|
36
38
|
this.options = [];
|
|
37
39
|
this.selectedValueList = []; //for multi-select
|
|
38
40
|
}
|
|
39
41
|
calculateDictionaryURL() {
|
|
40
|
-
|
|
42
|
+
let out = "";
|
|
41
43
|
if (this.activeOnly) {
|
|
42
44
|
out = this.dictAPILeadIn + "/" + this.className + "/active-entries";
|
|
43
45
|
}
|
|
44
46
|
else {
|
|
45
47
|
out = this.dictAPILeadIn + "/" + this.className + "/entries";
|
|
46
48
|
}
|
|
49
|
+
if (this.filterField) {
|
|
50
|
+
out = out + "?" + this.filterField;
|
|
51
|
+
}
|
|
47
52
|
return out;
|
|
48
53
|
}
|
|
49
54
|
}
|
|
@@ -171,6 +176,8 @@ class ParameterComponent {
|
|
|
171
176
|
[name]="param.name"
|
|
172
177
|
[idKey]="param.valueXPath"
|
|
173
178
|
[displayKey]="param.displayXPath"
|
|
179
|
+
[sortKey]="param.sortField"
|
|
180
|
+
[sortNumeric]="param.sortNumeric"
|
|
174
181
|
[(ngModel)]="param.selectedValue"
|
|
175
182
|
[url]="param.calculateDictionaryURL()"
|
|
176
183
|
></hci-native-select>
|
|
@@ -187,6 +194,8 @@ class ParameterComponent {
|
|
|
187
194
|
[id]="param.name"
|
|
188
195
|
[name]="param.name"
|
|
189
196
|
[(ngModel)]="param.selectedValue"
|
|
197
|
+
[sortKey]="param.sortField"
|
|
198
|
+
[sortNumeric]="param.sortNumeric"
|
|
190
199
|
[entries] = "entries"
|
|
191
200
|
></hci-native-select>
|
|
192
201
|
</div>
|
|
@@ -203,6 +212,8 @@ class ParameterComponent {
|
|
|
203
212
|
[name]="param.name"
|
|
204
213
|
[idKey]="param.valueXPath"
|
|
205
214
|
[displayKey]="param.displayXPath"
|
|
215
|
+
[sortKey]="param.sortField"
|
|
216
|
+
[sortNumeric]="param.sortNumeric"
|
|
206
217
|
[(ngModel)]="param.selectedValueList"
|
|
207
218
|
[url]="param.calculateDictionaryURL()"
|
|
208
219
|
>
|
|
@@ -220,6 +231,8 @@ class ParameterComponent {
|
|
|
220
231
|
[id]="param.name"
|
|
221
232
|
[name]="param.name"
|
|
222
233
|
[entries] = "entries"
|
|
234
|
+
[sortKey]="param.sortField"
|
|
235
|
+
[sortNumeric]="param.sortNumeric"
|
|
223
236
|
[(ngModel)]="param.selectedValueList"
|
|
224
237
|
>
|
|
225
238
|
</hci-md-multi-select>
|
|
@@ -290,6 +303,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
290
303
|
[name]="param.name"
|
|
291
304
|
[idKey]="param.valueXPath"
|
|
292
305
|
[displayKey]="param.displayXPath"
|
|
306
|
+
[sortKey]="param.sortField"
|
|
307
|
+
[sortNumeric]="param.sortNumeric"
|
|
293
308
|
[(ngModel)]="param.selectedValue"
|
|
294
309
|
[url]="param.calculateDictionaryURL()"
|
|
295
310
|
></hci-native-select>
|
|
@@ -306,6 +321,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
306
321
|
[id]="param.name"
|
|
307
322
|
[name]="param.name"
|
|
308
323
|
[(ngModel)]="param.selectedValue"
|
|
324
|
+
[sortKey]="param.sortField"
|
|
325
|
+
[sortNumeric]="param.sortNumeric"
|
|
309
326
|
[entries] = "entries"
|
|
310
327
|
></hci-native-select>
|
|
311
328
|
</div>
|
|
@@ -322,6 +339,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
322
339
|
[name]="param.name"
|
|
323
340
|
[idKey]="param.valueXPath"
|
|
324
341
|
[displayKey]="param.displayXPath"
|
|
342
|
+
[sortKey]="param.sortField"
|
|
343
|
+
[sortNumeric]="param.sortNumeric"
|
|
325
344
|
[(ngModel)]="param.selectedValueList"
|
|
326
345
|
[url]="param.calculateDictionaryURL()"
|
|
327
346
|
>
|
|
@@ -339,6 +358,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
339
358
|
[id]="param.name"
|
|
340
359
|
[name]="param.name"
|
|
341
360
|
[entries] = "entries"
|
|
361
|
+
[sortKey]="param.sortField"
|
|
362
|
+
[sortNumeric]="param.sortNumeric"
|
|
342
363
|
[(ngModel)]="param.selectedValueList"
|
|
343
364
|
>
|
|
344
365
|
</hci-md-multi-select>
|
|
@@ -863,12 +884,18 @@ class ReportingFrameworkComponent {
|
|
|
863
884
|
newParam.displayXPath = p.displayXPath;
|
|
864
885
|
newParam.displayOrder = p.displayOrder;
|
|
865
886
|
newParam.activeOnly = p.activeOnly;
|
|
887
|
+
newParam.sortField = p.sortField;
|
|
888
|
+
newParam.sortNumeric = p.sortNumeric;
|
|
889
|
+
newParam.filterField = p.filterField;
|
|
866
890
|
if (newParam.valueXPath) {
|
|
867
891
|
newParam.valueXPath = newParam.valueXPath.replace("@", "");
|
|
868
892
|
}
|
|
869
893
|
if (newParam.displayXPath) {
|
|
870
894
|
newParam.displayXPath = newParam.displayXPath.replace("@", "");
|
|
871
895
|
}
|
|
896
|
+
if (newParam.sortField) {
|
|
897
|
+
newParam.sortField = newParam.sortField.replace("@", "");
|
|
898
|
+
}
|
|
872
899
|
let options = p.options;
|
|
873
900
|
if (options) {
|
|
874
901
|
for (let o of options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"huntsman-cancer-institute-reporting-framework.mjs","sources":["../../../projects/reporting-framework/src/model/report.model.ts","../../../projects/reporting-framework/src/model/param.model.ts","../../../projects/reporting-framework/src/datepicker/report-datepicker.component.ts","../../../projects/reporting-framework/src/parameter/parameter.component.ts","../../../projects/reporting-framework/src/model/option.model.ts","../../../projects/reporting-framework/src/model/report-tab.model.ts","../../../projects/reporting-framework/src/model/format.model.ts","../../../projects/reporting-framework/src/format/format.component.ts","../../../projects/reporting-framework/src/spinner/spinner-dialog.component.ts","../../../projects/reporting-framework/src/spinner/dialogs.service.ts","../../../projects/reporting-framework/src/resizable-divider/resizable-section-divider.component.ts","../../../projects/reporting-framework/src/reporting-framework.component.ts","../../../projects/reporting-framework/src/report.module.ts","../../../projects/reporting-framework/src/huntsman-cancer-institute-reporting-framework.ts"],"sourcesContent":["import {Param} from \"./param.model\";\r\nimport {Format} from \"./format.model\";\r\n\r\nexport class Report {\r\n\r\n public name: string;\r\n public title: string;\r\n public description: string;\r\n public className: string;\r\n public fileName: string;\r\n public type: string;\r\n public tab: string;\r\n public datakey: string;\r\n public help: string;\r\n\r\n public params: Param[] = [];\r\n public formats: Format[] = [];\r\n}\r\n","import {Option} from \"./option.model\";\r\n\r\nexport class Param {\r\n\r\n public caption: string;\r\n public name: string;\r\n public type: string;\r\n public className: string;\r\n public valueXPath: string;\r\n public displayXPath: string;\r\n public activeOnly: boolean = true;\r\n public displayOrder: number;\r\n\r\n public options: Option[] = [];\r\n\r\n public selectedValue: any;\r\n public selectedValueList: any[] = []; //for multi-select\r\n public dictAPILeadIn: string;\r\n\r\n public calculateDictionaryURL(): string {\r\n var out: string = \"\";\r\n\r\n if(this.activeOnly) {\r\n out = this.dictAPILeadIn + \"/\" + this.className + \"/active-entries\";\r\n }else {\r\n out = this.dictAPILeadIn + \"/\" + this.className + \"/entries\";\r\n }\r\n return out;\r\n }\r\n}\r\n","import {Component, EventEmitter, Input, Output} from \"@angular/core\";\r\nimport {MAT_DATE_LOCALE} from \"@angular/material/core\";\r\n\r\n@Component({\r\n selector: \"report-datepicker\",\r\n template: `\r\n <div class=\"d-flex\" style=\"width: 100%;\">\r\n <input matInput [matDatepicker]=\"picker\" class=\"form-control\" style=\"cursor: pointer;\" [placeholder]=\"placeholder\" [ngModel]=\"value\" (ngModelChange)=\"onChange($event)\"\r\n (click)=\"picker.open()\" (blur)=\"onBlur()\" [min]=\"minDate\" [max]=\"maxDate\"\r\n [ngStyle]=\"{'background-color':invalid ? 'red' : '#fff'}\" >\r\n <span class=\"input-group-text\" id=\"clearIcon\" (click)=\"clear()\"><i class=\"fas fa-times\"></i></span>\r\n <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"picker.open()\" style=\"height:32px; width:32px;\"><i class=\"fas fa-calendar-alt\"></i></button>\r\n <mat-datepicker #picker ></mat-datepicker>\r\n </div>\r\n `,\r\n styles: [`\r\n #clearIcon {\r\n cursor: pointer;\r\n }\r\n #clearIcon:Hover {\r\n background-color: rgb(73, 80, 87);\r\n color: rgb(233, 236, 239)\r\n }\r\n `],\r\n providers: [\r\n {provide: MAT_DATE_LOCALE, useValue: \"en-GB\"}\r\n ]\r\n})\r\nexport class ReportDatepickerComponent {\r\n @Input() value: Date;\r\n @Input() placeholder: string;\r\n @Input() minDate: Date;\r\n @Input() maxDate: Date;\r\n @Input() invalid: boolean = false;\r\n\r\n @Output() valueChange = new EventEmitter();\r\n\r\n ngOnInit() {\r\n let today = new Date();\r\n // set the minDate to 20 years in the past by default\r\n if (!this.minDate) {\r\n this.minDate = new Date(today.getFullYear() - 20, today.getMonth(), today.getDate());\r\n }\r\n // set max date to 20 years in future by default\r\n if (!this.maxDate) {\r\n this.maxDate = new Date(today.getFullYear() + 20, today.getMonth(), today.getDate());\r\n }\r\n }\r\n\r\n onChange(newValue) {\r\n this.value = newValue;\r\n this.valueChange.emit(newValue);\r\n }\r\n\r\n clear() {\r\n this.value = undefined;\r\n this.valueChange.emit();\r\n }\r\n\r\n // Clear input field if entered data is invalid (Mat library sets value to null if invalid but doesn't clear input)\r\n onBlur() {\r\n if (!this.value) {\r\n this.value = undefined;\r\n this.valueChange.emit();\r\n }\r\n }\r\n}\r\n\r\n","import {Component} from \"@angular/core\";\r\nimport {Param} from \"../model/param.model\";\r\n\r\n\r\n@Component({\r\n selector: \"hci-parameter\",\r\n template: `\r\n\r\n <!--Text Input-->\r\n <ng-container *ngIf=\"param.type === 'input'\">\r\n <div style=\"display: block;\">\r\n <div class=\"row\">\r\n <label class=\"data-label\">{{param.caption}}:</label>\r\n <input type=\"text\" class=\"form-control input-field\"\r\n [id]=\"param.name\"\r\n [name]=\"param.name\"\r\n [(ngModel)]=\"param.selectedValue\"\r\n >\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!--Date-->\r\n <ng-container *ngIf=\"param.type === 'date'\">\r\n <div style=\"display: block;\">\r\n <div class=\"row\">\r\n <label class=\"data-label\">{{param.caption}}:</label>\r\n <report-datepicker class=\"date-input\"\r\n placeholder=\"\"\r\n id=\"{{param.name}}\"\r\n [(value)]=\"param.selectedValue\"\r\n >\r\n </report-datepicker>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!--Select with dictionary-->\r\n <ng-container *ngIf=\"param.type === 'select' && param.className && param.className != ''\">\r\n <div style=\"display: block;\">\r\n <div class=\"row\">\r\n <label class=\"data-label\">{{param.caption}}:</label>\r\n <hci-native-select class=\"report-select\"\r\n [id]=\"param.name\"\r\n [name]=\"param.name\"\r\n [idKey]=\"param.valueXPath\"\r\n [displayKey]=\"param.displayXPath\"\r\n [(ngModel)]=\"param.selectedValue\"\r\n [url]=\"param.calculateDictionaryURL()\"\r\n ></hci-native-select>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!--Select with manual options-->\r\n <ng-container *ngIf=\"param.type === 'select' && (!param.className || param.className === '')\">\r\n <div style=\"display: block;\">\r\n <div class=\"row\">\r\n <label class=\"data-label\">{{param.caption}}:</label>\r\n <hci-native-select class=\"report-select\"\r\n [id]=\"param.name\"\r\n [name]=\"param.name\"\r\n [(ngModel)]=\"param.selectedValue\"\r\n [entries] = \"entries\"\r\n ></hci-native-select>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!--Multi-select with dictionary-->\r\n <ng-container *ngIf=\"param.type === 'multiselect' && param.className && param.className != ''\">\r\n <div style=\"display: block;\">\r\n <div class=\"row\">\r\n <label class=\"data-label\">{{param.caption}}:</label>\r\n <hci-md-multi-select class=\"multi-report-select\"\r\n [id]=\"param.name\"\r\n [name]=\"param.name\"\r\n [idKey]=\"param.valueXPath\"\r\n [displayKey]=\"param.displayXPath\"\r\n [(ngModel)]=\"param.selectedValueList\"\r\n [url]=\"param.calculateDictionaryURL()\"\r\n >\r\n </hci-md-multi-select>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!--Multi-select with manual options-->\r\n <ng-container *ngIf=\"param.type === 'multiselect' && (!param.className || param.className === '')\">\r\n <div style=\"display: block;\">\r\n <div class=\"row\">\r\n <label class=\"data-label\">{{param.caption}}:</label>\r\n <hci-md-multi-select class=\"multi-report-select\"\r\n [id]=\"param.name\"\r\n [name]=\"param.name\"\r\n [entries] = \"entries\"\r\n [(ngModel)]=\"param.selectedValueList\"\r\n >\r\n </hci-md-multi-select>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!--Radio buttons-->\r\n <ng-container *ngIf=\"param.type === 'radio'\">\r\n <div style=\"display: block;\">\r\n <div class=\"row\">\r\n <label class=\"data-label\">{{param.caption}}:</label>\r\n <div class=\"radio-pair\" *ngFor=\"let o of param.options\">\r\n <input type=\"radio\"\r\n style=\"margin-right: 3px;\"\r\n [value]=\"o.value\"\r\n [id]=\"param.name + '-' + o.value\"\r\n [(ngModel)]=\"param.selectedValue\"\r\n [name]=\"param.name\">\r\n <label for=\"{{param.name + '-' + o.value}}\">{{o.display}}</label>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n `,\r\n styles: [`\r\n\r\n .data-label{\r\n width: 270px;\r\n margin-right: 30px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: flex-end;\r\n }\r\n\r\n .date-input{\r\n width: 45%;\r\n }\r\n\r\n .report-select{\r\n flex-grow: unset !important;\r\n width: 45%;\r\n }\r\n\r\n .multi-report-select{\r\n flex-grow: unset !important;\r\n width: 45%;\r\n }\r\n\r\n .radio-pair{\r\n display: flex;\r\n align-items: center;\r\n padding-right: 5px;\r\n margin-right: 15px;\r\n }\r\n\r\n .input-field{\r\n width: 45%\r\n }\r\n `]\r\n})\r\nexport class ParameterComponent {\r\n\r\n param: Param;\r\n entries: any[];\r\n\r\n setParam(p: Param) {\r\n this.param = p;\r\n\r\n if(this.param.type === \"radio\") { //if radio, auto select first option\r\n let o = this.param.options[0];\r\n this.param.selectedValue = o.value;\r\n }\r\n }\r\n\r\n}\r\n","\r\nexport class Option {\r\n\r\n public value: string;\r\n public display: string;\r\n public displayOrder: number;\r\n\r\n}\r\n","\r\nexport class ReportTab {\r\n\r\n public name: string;\r\n public title: string;\r\n public type: string;\r\n public tab: string;\r\n public datakey: string;\r\n\r\n}\r\n","\r\nexport class Format {\r\n\r\n public name: string;\r\n public caption: string;\r\n public displayOrder: number;\r\n\r\n public selected: string;\r\n}\r\n","import {Component, EventEmitter, Input, Output} from \"@angular/core\";\r\nimport {Format} from \"../model/format.model\";\r\n\r\n\r\n@Component({\r\n selector: \"hci-format\",\r\n template: `\r\n <div class=\"radio-pair\">\r\n <input type=\"radio\" #radio\r\n [value]=\"format.name\"\r\n [id]=\"format.name\"\r\n [checked]=\"selectedValue === format.name ? true : false\"\r\n (click)=\"selectFormat(radio.value)\"\r\n name=\"format\">\r\n <label>{{format.caption}}</label>\r\n </div>\r\n `,\r\n styles: [`\r\n .radio-pair{\r\n display: flex;\r\n align-items: center;\r\n padding-right: 5px;\r\n }\r\n `]\r\n})\r\nexport class FormatComponent {\r\n\r\n @Input() selectedValue: string;\r\n @Output() selectedValueChange = new EventEmitter<string>();\r\n\r\n format: Format;\r\n\r\n selectFormat(s: string) {\r\n this.selectedValue = s;\r\n this.selectedValueChange.emit(s);\r\n }\r\n\r\n}\r\n","import {Component, Inject, Input} from \"@angular/core\";\r\nimport {MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA, MatLegacyDialogRef as MatDialogRef} from \"@angular/material/legacy-dialog\";\r\n\r\n@Component({\r\n selector: \"spinner-dialog\",\r\n template: `\r\n <div mat-dialog-content class=\"full-height padded\">\r\n <div class=\"full-width full-height t\">\r\n <div class=\"tr\">\r\n <div class=\"td vertical-center\">\r\n <mat-spinner [hidden]=\"false\" strokeWidth=\"{{strokeWidth}}\" [diameter]=\"diameter\"></mat-spinner>\r\n </div>\r\n <div class=\"td vertical-center\">\r\n {{message}}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div mat-dialog-actions class=\"not-rendered\">\r\n </div>\r\n `,\r\n styles: [`\r\n .t { display: table; }\r\n .tr { display: table-row; }\r\n .td { display: table-cell; }\r\n\r\n .full-height { height: 100%; }\r\n .full-width { width: 100%; }\r\n\r\n .vertical-center { vertical-align: middle; }\r\n\r\n .padded {\r\n padding-top: 0.4em;\r\n padding-bottom: 0.4em;\r\n }\r\n\r\n .not-rendered {\r\n padding: 0;\r\n margin: 0;\r\n\r\n min-height: 0;\r\n max-height: 0;\r\n height: 0;\r\n }\r\n\r\n `]\r\n})\r\nexport class SpinnerDialogComponent {\r\n @Input(\"strokeWidth\") strokeWidth: number = 3;\r\n @Input(\"diameter\") diameter: number = 30;\r\n\r\n @Input(\"message\") message: string = \"Loading...\";\r\n\r\n constructor(private dialogRef: MatDialogRef<SpinnerDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) private data) {\r\n if (this.data) {\r\n if (!!this.data.message) {\r\n this.message = this.data.message;\r\n }\r\n if (!!this.data.diameter) {\r\n this.diameter = this.data.diameter;\r\n }\r\n if (!!this.data.strokeWidth) {\r\n this.strokeWidth = this.data.strokeWidth;\r\n }\r\n }\r\n }\r\n\r\n\r\n}\r\n","import {Injectable, TemplateRef} from \"@angular/core\";\r\nimport { MatLegacyDialogRef as MatDialogRef, MatLegacyDialog as MatDialog, MatLegacyDialogConfig as MatDialogConfig } from \"@angular/material/legacy-dialog\";\r\n\r\nimport { SpinnerDialogComponent } from \"./spinner-dialog.component\";\r\n\r\nexport enum DialogType {\r\n ERROR = \"Error\",\r\n WARNING = \"Warning\",\r\n ALERT = \"Alert\",\r\n SUCCESS = \"Succeed\",\r\n FAILED = \"Failed\",\r\n CONFIRM = \"Confirm\",\r\n INFO = \"Info\",\r\n VALIDATION = \"Validation Error\",\r\n}\r\n\r\n@Injectable()\r\nexport class DialogsService {\r\n\r\n private _spinnerDialogIsOpen: boolean = false;\r\n private spinnerWorkItemCount: number = 0;\r\n private checkingSpinnerWorkItems: boolean = false;\r\n\r\n public spinnerDialogRefs: MatDialogRef<SpinnerDialogComponent>[] = [];\r\n\r\n public get spinnerDialogIsOpen(): boolean {\r\n return this._spinnerDialogIsOpen;\r\n }\r\n\r\n constructor(private dialog: MatDialog) {\r\n }\r\n\r\n public startDefaultSpinnerDialog(): MatDialogRef<SpinnerDialogComponent> {\r\n return this.startSpinnerDialog(\"Please wait...\", 3, 30);\r\n }\r\n\r\n public startSpinnerDialog(message: string, strokeWidth: number, diameter: number): MatDialogRef<SpinnerDialogComponent> {\r\n if (this._spinnerDialogIsOpen) {\r\n return null;\r\n }\r\n\r\n this._spinnerDialogIsOpen = true;\r\n\r\n let configuration: MatDialogConfig = new MatDialogConfig();\r\n configuration.data = {\r\n message: message,\r\n strokeWidth: strokeWidth,\r\n diameter: diameter\r\n };\r\n configuration.width = \"13em\";\r\n configuration.disableClose = true;\r\n\r\n let dialogRef: MatDialogRef<SpinnerDialogComponent> = this.dialog.open(SpinnerDialogComponent, configuration);\r\n\r\n dialogRef.afterClosed().subscribe(() => {\r\n this._spinnerDialogIsOpen = false;\r\n });\r\n\r\n this.spinnerDialogRefs.push(dialogRef);\r\n\r\n return dialogRef;\r\n }\r\n\r\n // Let there be an alternative, global way to stop all active spinner dialogs.\r\n public stopAllSpinnerDialogs(): void {\r\n this.spinnerWorkItemCount = 0;\r\n for (let dialogRef of this.spinnerDialogRefs) {\r\n setTimeout(() => {\r\n dialogRef.close();\r\n });\r\n }\r\n this.spinnerDialogRefs = [];\r\n }\r\n\r\n public addSpinnerWorkItem(): void {\r\n this.spinnerWorkItemCount++;\r\n if (!this.checkingSpinnerWorkItems) {\r\n this.checkingSpinnerWorkItems = true;\r\n setTimeout(() => {\r\n this.checkSpinnerWorkItems();\r\n });\r\n }\r\n }\r\n\r\n public removeSpinnerWorkItem(): void {\r\n this.spinnerWorkItemCount--;\r\n if (this.spinnerWorkItemCount < 0) {\r\n this.spinnerWorkItemCount = 0;\r\n }\r\n if (!this.checkingSpinnerWorkItems) {\r\n this.checkingSpinnerWorkItems = true;\r\n setTimeout(() => {\r\n this.checkSpinnerWorkItems();\r\n });\r\n }\r\n }\r\n\r\n private checkSpinnerWorkItems(): void {\r\n this.checkingSpinnerWorkItems = false;\r\n if (this.spinnerWorkItemCount) {\r\n if (!this._spinnerDialogIsOpen) {\r\n this.startDefaultSpinnerDialog();\r\n }\r\n } else if (this._spinnerDialogIsOpen) {\r\n this.stopAllSpinnerDialogs();\r\n }\r\n }\r\n\r\n}\r\n","import {AfterViewInit, Component, ElementRef, HostListener, Input, OnDestroy, ViewChild} from \"@angular/core\";\r\n\r\n@Component({\r\n selector: \"resizable-section-divider\",\r\n template: `\r\n <div *ngIf=\"isVerticalLayout\" style=\"height: 100%; width: 100%;\" #verticalContainer>\r\n <div class=\"p-1\" style=\"width: 100%;\" [style.min-height.%]=\"minPercentage\" [style.max-height.%]=\"maxPercentage\" [style.height.%]=\"(100 - sectionSize - grabberOffset)\">\r\n <ng-content select=\"[topSection]\"></ng-content>\r\n </div>\r\n <div class=\"d-flex align-items-center justify-content-center\" style=\"height: 20px; width: 100%;\">\r\n <div class=\"rad-grabber-vertical\" (mousedown)=\"dragging = true;\" (touchstart)=\"dragging = true;\">\r\n <i class=\"fas fa-grip-lines\"></i>\r\n </div>\r\n </div>\r\n <div class=\"p-1\" style=\"width: 100%;\" [style.min-height.%]=\"minPercentage\" [style.max-height.%]=\"maxPercentage\" [style.height.%]=\"(sectionSize - grabberOffset)\">\r\n <ng-content select=\"[bottomSection]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!isVerticalLayout\" class=\"d-flex\" style=\"height: 100%; width: 100%;\" #horizontalContainer>\r\n <div class=\"p-1\" style=\"height: 100%;\" [style.min-width.%]=\"minPercentage\" [style.max-width.%]=\"maxPercentage\" [style.width.%]=\"(100 - sectionSize - grabberOffset)\">\r\n <ng-content select=\"[leftSection]\"></ng-content>\r\n </div>\r\n <div class=\"d-flex align-items-center justify-content-center\" style=\"width: 10px; height: 100%;\">\r\n <div class=\"rad-grabber\" (mousedown)=\"dragging = true;\" (touchstart)=\"dragging = true;\">\r\n <i class=\"fas fa-grip-lines-vertical\"></i>\r\n </div>\r\n </div>\r\n <div class=\"p-1\" style=\"height: 100%;\" [style.min-width.%]=\"minPercentage\" [style.max-width.%]=\"maxPercentage\" [style.width.%]=\"sectionSize - grabberOffset\">\r\n <ng-content select=\"[rightSection]\"></ng-content>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n .rad-grabber {\r\n cursor: ew-resize;\r\n }\r\n\r\n .rad-grabber-vertical {\r\n cursor: ns-resize;\r\n }\r\n `]\r\n})\r\nexport class ResizableSectionDividerComponent implements AfterViewInit, OnDestroy {\r\n // Starting width or height % for the right / bottom containers respectively\r\n @Input() initialPercentage: number = 50;\r\n @Input() isVerticalLayout: boolean = false;\r\n @Input() maxPercentage: number = 90;\r\n @Input() minPercentage: number = 10;\r\n\r\n @ViewChild(\"verticalContainer\", {static: false}) verticalContainer: ElementRef;\r\n @ViewChild(\"horizontalContainer\", {static: false}) horizontalContainer: ElementRef;\r\n\r\n public sectionSize: number;\r\n public dragging: boolean = false;\r\n public grabberOffset = 0;\r\n\r\n private verticalTouchFunction: any;\r\n private horizontalTouchFunction: any;\r\n private elementObserver: any;\r\n\r\n ngOnInit() {\r\n this.sectionSize = this.initialPercentage;\r\n\r\n this.verticalTouchFunction = (event) => {\r\n if (this.dragging) {\r\n this.grabberOffset = ((( 20 / this.verticalContainer.nativeElement.offsetHeight) * 100 ) / 2);\r\n this.sectionSize = ((this.verticalContainer.nativeElement.offsetHeight - (event.touches[0].pageY - this.verticalContainer.nativeElement.getBoundingClientRect().top))\r\n / (this.verticalContainer.nativeElement.offsetHeightt) * 100);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n };\r\n\r\n this.horizontalTouchFunction = (event) => {\r\n if (this.dragging) {\r\n this.grabberOffset = ((( 10 / this.horizontalContainer.nativeElement.offsetWidth) * 100 ) / 2);\r\n this.sectionSize = ((this.horizontalContainer.nativeElement.offsetWidth - event.touches[0].pageX - this.horizontalContainer.nativeElement.getBoundingClientRect().left)\r\n / (this.horizontalContainer.nativeElement.offsetWidth) * 100);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n };\r\n }\r\n ngAfterViewInit() {\r\n // Handle initializing grabber size for when elements are initialized as hidden\r\n this.elementObserver = new IntersectionObserver((entries, observable) => {\r\n entries.forEach(entry => {\r\n if(entry.isIntersecting) {\r\n // subtract half the grabber height/width % from each section\r\n if(this.isVerticalLayout) {\r\n this.grabberOffset = ((( 20 / this.verticalContainer.nativeElement.offsetHeight) * 100 ) / 2);\r\n } else {\r\n this.grabberOffset = ((( 10 / this.horizontalContainer.nativeElement.offsetWidth) * 100 ) / 2);\r\n }\r\n observable.disconnect();\r\n }\r\n });\r\n });\r\n\r\n if(this.isVerticalLayout) {\r\n this.elementObserver.observe(this.verticalContainer.nativeElement);\r\n window.addEventListener(\"touchmove\", this.verticalTouchFunction, { passive: false });\r\n } else {\r\n this.elementObserver.observe(this.horizontalContainer.nativeElement);\r\n window.addEventListener(\"touchmove\", this.horizontalTouchFunction, { passive: false });\r\n }\r\n }\r\n\r\n @HostListener(\"document:mousemove\", [\"$event\"])\r\n mouseMove(event: MouseEvent) {\r\n if (this.dragging) {\r\n if(this.isVerticalLayout) {\r\n this.grabberOffset = ((( 20 / this.verticalContainer.nativeElement.offsetHeight) * 100 ) / 2);\r\n this.sectionSize = ((this.verticalContainer.nativeElement.offsetHeight - (event.pageY - this.verticalContainer.nativeElement.getBoundingClientRect().top))\r\n / (this.verticalContainer.nativeElement.offsetHeight) * 100);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n } else {\r\n this.grabberOffset = ((( 10 / this.horizontalContainer.nativeElement.offsetWidth) * 100 ) / 2);\r\n this.sectionSize = ((this.horizontalContainer.nativeElement.offsetWidth - event.pageX - this.horizontalContainer.nativeElement.getBoundingClientRect().left)\r\n / (this.horizontalContainer.nativeElement.offsetWidth) * 100);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n @HostListener(\"document:mouseup\", [\"$event\"])\r\n @HostListener(\"document:touchend\", [\"$event\"])\r\n mouseUp(event: MouseEvent) {\r\n if (this.dragging) {\r\n this.dragging = false;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if(this.isVerticalLayout) {\r\n window.removeEventListener(\"touchmove\", this.verticalTouchFunction);\r\n } else {\r\n window.removeEventListener(\"touchmove\", this.horizontalTouchFunction);\r\n }\r\n }\r\n\r\n}\r\n","import {\r\n Component, ComponentFactory,\r\n ComponentFactoryResolver, ComponentRef,\r\n Input, OnDestroy,\r\n OnInit,\r\n ViewChild,\r\n ViewContainerRef\r\n} from \"@angular/core\";\r\nimport {HttpClient, HttpParams} from \"@angular/common/http\";\r\nimport {Report} from \"./model/report.model\";\r\nimport {Param} from \"./model/param.model\";\r\nimport {ParameterComponent} from \"./parameter/parameter.component\";\r\nimport {Option} from \"./model/option.model\";\r\nimport {ReportTab} from \"./model/report-tab.model\";\r\nimport {Format} from \"./model/format.model\";\r\nimport {FormatComponent} from \"./format/format.component\";\r\nimport * as moment from \"moment\";\r\nimport {DatePipe} from \"@angular/common\";\r\nimport {ModalDismissReasons, NgbModal} from \"@ng-bootstrap/ng-bootstrap\";\r\nimport {DialogsService} from \"./spinner/dialogs.service\";\r\nimport { GridApi } from \"ag-grid-community\";\r\n\r\n@Component({\r\n selector: \"hci-reporting-framework\",\r\n template: `\r\n <div style=\"height: 100vh\">\r\n <resizable-section-divider class=\"flex-grow-1\" [isVerticalLayout]=\"true\">\r\n <div topSection class=\"d-flex flex-column\" style=\"height: 100%; width: 100%; overflow: auto;\">\r\n <!--can wrap just the grid with the tabs-->\r\n <mat-tab-group *ngIf=\"tabList.length > 0\"\r\n class=\"flex-grow-1\">\r\n <mat-tab *ngFor=\"let tab of tabList\"\r\n label=\"{{tab.title}}\"\r\n class=\"flex-grow-1\">\r\n <ng-template matTabContent>\r\n <ag-grid-angular\r\n class=\"ag-theme-balham full-width flex-grow-1\"\r\n style=\"min-height: 200px; height: 100%;\"\r\n (gridReady)=\"this.onTabbedGridReady($event, tab.name)\"\r\n [gridOptions]=\"this.gridOptions\"\r\n [rowSelection]=\"'single'\"\r\n (rowSelected)=\"setSelectedRow($event)\"\r\n [frameworkComponents]=\"frameworkComponents\"\r\n [rowData]=\"tabbedGridList[tab.name]\">\r\n </ag-grid-angular>\r\n </ng-template>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <!--ngb-tabset *ngIf=\"tabList.length > 0\"\r\n destroyOnHide=\"false\"\r\n type=\"tabs\"\r\n class=\"flex-grow-1\"\r\n #reportTabSet=\"ngbTabset\"\r\n >\r\n <ngb-tab *ngFor=\"let tab of tabList\"\r\n id=\"{{tab.name}}\" title=\"{{tab.title}}\"\r\n style=\"border: 5px solid;\" >\r\n <ng-template ngbTabContent >\r\n\r\n <ag-grid-angular\r\n class=\"ag-theme-balham full-width flex-grow-1\"\r\n style=\"min-height: 200px; height: 100%;\"\r\n (gridReady)=\"this.onTabbedGridReady($event, tab.name)\"\r\n [gridOptions]=\"this.gridOptions\"\r\n [rowSelection]=\"'single'\"\r\n (rowSelected)=\"setSelectedRow($event)\"\r\n [frameworkComponents]=\"frameworkComponents\"\r\n [rowData]=\"tabbedGridList[tab.name]\">\r\n </ag-grid-angular>\r\n </ng-template>\r\n </ngb-tab>\r\n\r\n </ngb-tabset-->\r\n\r\n <ag-grid-angular *ngIf=\"tabList.length <= 0\"\r\n class=\"ag-theme-balham full-width flex-grow-1\"\r\n style=\"min-height: 200px; height: 100%;\"\r\n (gridReady)=\"this.onMainGridReady($event)\"\r\n [gridOptions]=\"this.gridOptions\"\r\n [rowSelection]=\"'single'\"\r\n (rowSelected)=\"setSelectedRow($event)\"\r\n [frameworkComponents]=\"frameworkComponents\"\r\n [rowData]=\"fullGridList\">\r\n </ag-grid-angular>\r\n </div>\r\n <div bottomSection class=\"d-flex flex-column\" style=\"height: 80%; width: 100%; overflow: auto;\">\r\n <div style=\"display: block;\">\r\n <div class=\"row\">\r\n <label style=\"margin-left: 25px; font-weight: bold\">{{selectedReport.title}}</label>\r\n <button class=\"btn\" *ngIf=\"selectedReport.help && selectedReport.help != ''\"\r\n (click)=\"openHelp(content)\">\r\n <i class=\"far fa-question-circle\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <template #paramContainer></template>\r\n <div style=\"display: block;\">\r\n <div class=\"row center-row\">\r\n <template #formatContainer></template>\r\n <button *ngIf=\"selectedReport.name\"\r\n class=\"btn btn-success\"\r\n type=\"button\"\r\n (click)=\"onRunReport()\"\r\n >Run Report</button>\r\n </div>\r\n </div>\r\n </div>\r\n </resizable-section-divider>\r\n </div>\r\n <ng-template #content let-modal>\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" id=\"help-model-title\">Report Help</h4>\r\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modal.dismiss('Cross click')\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\" >\r\n <div class=\"container\" [innerHTML]=\"selectedReport.help\">\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"modal.dismiss('Ok click')\">OK</button>\r\n </div>\r\n </ng-template>\r\n\r\n `,\r\n styles: [`\r\n :host ::ng-deep .mat-tab-body-wrapper{\r\n flex-grow: 1;\r\n }\r\n\r\n :host ::ng-deep .mat-tab-label{\r\n background-color: #98c7e0;\r\n }\r\n\r\n :host ::ng-deep .mat-tab-label-active{\r\n background-color: #def4ff;\r\n }\r\n\r\n .report-details{\r\n height: 100%;\r\n width: 100%;\r\n position: absolute\r\n }\r\n\r\n .center-row{\r\n margin-top: 10px;\r\n margin-left: 60vw;\r\n }\r\n `]\r\n})\r\nexport class ReportingFrameworkComponent implements OnInit, OnDestroy {\r\n\r\n @Input() manageReportUrl: string; // /artadmin/legacy/api/hci.artadmin.controller.ManageReports\r\n @Input() commandPrefix: string; // /artadmin/legacy/api/jsp\r\n @Input() dictAPILeadIn: string; // /artadmin/api/dictionaries\r\n @Input() reportsByType: string; //optional. usually \"global\" or \"patient\"\r\n\r\n @ViewChild(\"paramContainer\", {read: ViewContainerRef, static: false}) paramContainer: ViewContainerRef;\r\n @ViewChild(\"formatContainer\", {read: ViewContainerRef, static: false}) formatContainer: ViewContainerRef;\r\n\r\n fullGridList: any[] = [];\r\n tabbedGridList: any = {};\r\n\r\n\r\n gridOptions = {\r\n rowStyle: {\r\n \"font-family\": \"Prompt, sans-serif\"\r\n },\r\n rowHeight: 20,\r\n enableCellTextSelection: true,\r\n ensureDomOrder: true\r\n }; //enableCellTextSelection should be combined with ensureDomOrder\r\n frameworkComponents: any;\r\n\r\n mainGridApi: GridApi;\r\n tabbedGridApiList: any = {}; //a map of GridAPIs to tab names\r\n\r\n reportList: Report[] = [];\r\n tabList: ReportTab[] = [];\r\n tabTypeNameLookup: any = {}; //a kind of dict that maps the tab or type to the tab-name\r\n\r\n selectedReport: Report = new Report();\r\n selectedFormat: string;\r\n displayedParamComponentRefs: ComponentRef<any>[] = [];\r\n displayedFormatComponentRefs: ComponentRef<any>[] = [];\r\n\r\n constructor(private http: HttpClient,\r\n private resolver: ComponentFactoryResolver,\r\n private datePipe: DatePipe,\r\n private dialogsService: DialogsService,\r\n private modalService: NgbModal) {}\r\n\r\n ngOnInit(): void {\r\n\r\n if (this.manageReportUrl != null) {\r\n\r\n this.http.get(this.manageReportUrl,\r\n {\r\n params: new HttpParams().set(\"action\", \"loadWithParams\")\r\n }\r\n ).subscribe(\r\n (resp) => {\r\n console.log(resp);\r\n var templist = [];\r\n var tempTabbedGridList = {};\r\n\r\n var tablist = resp[\"reportTabs\"];\r\n for (let row of tablist) {\r\n var tab: ReportTab = new ReportTab();\r\n tab.name = row.name;\r\n tab.title = row.title;\r\n tab.type = row.type;\r\n tab.tab = row.tab;\r\n tab.datakey = row.datakey;\r\n\r\n if (!this.reportsByType) {\r\n this.tabList.push(tab);\r\n if (tab.tab) {\r\n this.tabTypeNameLookup[tab.tab] = tab.name;\r\n }\r\n if (tab.type) {\r\n this.tabTypeNameLookup[tab.type] = tab.name;\r\n }\r\n }else {\r\n if (this.reportsByType == tab.type) {\r\n this.tabList.push(tab);\r\n this.tabTypeNameLookup[tab.tab] = tab.name;\r\n }\r\n }\r\n\r\n var tabGridList: any[] = [];\r\n this.tabbedGridList[tab.name] = tabGridList;\r\n tempTabbedGridList[tab.name] = [];\r\n }\r\n\r\n\r\n var list = resp[\"reportList\"];\r\n // console.log(list);\r\n for (let row of list) {\r\n var report: Report = new Report();\r\n report.name = row.name;\r\n report.title = row.title;\r\n report.description = row.description;\r\n report.className = row.className;\r\n report.fileName = row.fileName;\r\n report.type = row.type;\r\n report.tab = row.tab;\r\n report.datakey = row.datakey;\r\n report.help = row.help;\r\n\r\n const object = {\r\n name: report.name,\r\n title: report.title,\r\n description: report.description\r\n };\r\n\r\n\r\n var tabname;\r\n if (report.tab) {\r\n tabname = this.tabTypeNameLookup[report.tab];\r\n } else if (!this.reportsByType && report.type) {\r\n tabname = this.tabTypeNameLookup[report.type];\r\n }\r\n\r\n if (tabname) {\r\n var gridlist: any[] = tempTabbedGridList[tabname];\r\n\r\n if(this.reportsByType) {\r\n if (report.type === this.reportsByType ) {\r\n gridlist.push(object);\r\n }\r\n }else {\r\n gridlist.push(object);\r\n }\r\n }\r\n\r\n let params = row.params;\r\n if (params) {\r\n\r\n for (let p of params) {\r\n // console.log(p);\r\n var newParam: Param = new Param();\r\n newParam.dictAPILeadIn = this.dictAPILeadIn;\r\n\r\n newParam.caption = p.caption;\r\n newParam.name = p.name;\r\n newParam.type = p.type;\r\n newParam.className = p.className;\r\n newParam.valueXPath = p.valueXPath;\r\n newParam.displayXPath = p.displayXPath;\r\n newParam.displayOrder = p.displayOrder;\r\n newParam.activeOnly = p.activeOnly;\r\n\r\n if (newParam.valueXPath) {\r\n newParam.valueXPath = newParam.valueXPath.replace(\"@\", \"\");\r\n }\r\n if (newParam.displayXPath) {\r\n newParam.displayXPath = newParam.displayXPath.replace(\"@\", \"\");\r\n }\r\n\r\n let options = p.options;\r\n if (options) {\r\n\r\n for (let o of options) {\r\n var newOption: Option = new Option();\r\n newOption.value = o.value;\r\n newOption.display = o.display;\r\n newOption.displayOrder = o.displayOrder;\r\n\r\n newParam.options.push(newOption);\r\n }\r\n }\r\n\r\n report.params.push(newParam);\r\n }\r\n }\r\n\r\n let formats = row.formats;\r\n if (formats) {\r\n\r\n for (let f of formats) {\r\n var newFormat: Format = new Format();\r\n newFormat.name = f.name;\r\n newFormat.caption = f.caption;\r\n newFormat.displayOrder = f.displayOrder;\r\n\r\n report.formats.push(newFormat);\r\n }\r\n }\r\n\r\n\r\n this.reportList.push(report);\r\n\r\n if (this.reportsByType) {\r\n if(report.type === this.reportsByType) {\r\n templist.push(object);\r\n }\r\n } else {\r\n templist.push(object);\r\n }\r\n }\r\n\r\n this.fullGridList = templist.slice();\r\n console.log(\"gridlist: \");\r\n console.log(this.fullGridList);\r\n\r\n for(let tab of this.tabList){\r\n this.tabbedGridList[tab.name] = tempTabbedGridList[tab.name].slice();\r\n }\r\n\r\n }\r\n );\r\n }\r\n }\r\n\r\n public columnDef() : any[] {\r\n return [\r\n\r\n {\r\n field: \"title\",\r\n headerName: \"Title\",\r\n width: 300,\r\n sortable: true,\r\n resizable: true,\r\n editable: false},\r\n {\r\n field: \"description\",\r\n headerName: \"Description\",\r\n sortable: true,\r\n resizable: true,\r\n editable: false}\r\n ];\r\n\r\n }\r\n\r\n onMainGridReady(params : any) {\r\n\r\n this.mainGridApi = params.api;\r\n this.mainGridApi.setColumnDefs(this.columnDef());\r\n this.mainGridApi.setRowData(this.fullGridList);\r\n this.mainGridApi.sizeColumnsToFit();\r\n }\r\n\r\n onTabbedGridReady(params : any, tabname: string) {\r\n\r\n this.tabbedGridApiList[tabname] = params.api;\r\n this.tabbedGridApiList[tabname].setColumnDefs(this.columnDef());\r\n this.tabbedGridApiList[tabname].setRowData(this.tabbedGridList[tabname]);\r\n this.tabbedGridApiList[tabname].sizeColumnsToFit();\r\n }\r\n\r\n setSelectedRow(event) {\r\n\r\n //console.log(event);\r\n if(event.node.selected) {\r\n let reportName = event.node.data.name;\r\n console.log(event.node.data.name);\r\n\r\n var matchedReport: Report;\r\n for (let r of this.reportList) {\r\n if (r.name == reportName) {\r\n matchedReport = r;\r\n }\r\n }\r\n\r\n if (matchedReport != null) {\r\n this.selectedReport = matchedReport;\r\n } else {\r\n this.selectedReport = new Report();\r\n }\r\n\r\n this.createParamComponents();\r\n }\r\n }\r\n\r\n createParamComponents() {\r\n if(this.paramContainer) {\r\n this.paramContainer.clear();\r\n }\r\n if(this.formatContainer) {\r\n this.formatContainer.clear();\r\n }\r\n\r\n //destroy previous components and clear the displayedRef lists..?\r\n this.destroyComponentRefs();\r\n this.displayedParamComponentRefs = [];\r\n this.displayedFormatComponentRefs = [];\r\n\r\n for(let p of this.selectedReport.params){\r\n\r\n const factory: ComponentFactory<ParameterComponent> = this.resolver.resolveComponentFactory(ParameterComponent);\r\n var componentRef: ComponentRef<ParameterComponent> = this.paramContainer.createComponent(factory);\r\n this.displayedParamComponentRefs.push(componentRef);\r\n\r\n componentRef.instance.setParam(p);\r\n\r\n if(p.options.length > 0) {\r\n var entries: any[] = [];\r\n for(let o of p.options){\r\n var e = {id: o.value, display: o.display};\r\n entries.push(e);\r\n }\r\n componentRef.instance.entries = entries;\r\n }\r\n\r\n }\r\n\r\n var first: boolean = true;\r\n for(let f of this.selectedReport.formats){\r\n\r\n const factory2: ComponentFactory<FormatComponent> = this.resolver.resolveComponentFactory(FormatComponent);\r\n var componentRef2: ComponentRef<FormatComponent> = this.formatContainer.createComponent(factory2);\r\n this.displayedFormatComponentRefs.push(componentRef2);\r\n\r\n componentRef2.instance.format = f;\r\n componentRef2.instance.selectedValueChange.subscribe(\r\n (s) => {\r\n this.selectedFormat = s;\r\n }\r\n );\r\n if(first) {//select the first format in the grouping\r\n componentRef2.instance.selectedValue = f.name;\r\n this.selectedFormat = f.name;\r\n first = false;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n openHelp(content) {\r\n\r\n this.modalService.open(content, {ariaLabelledBy: \"help-modal-title\"})\r\n .result.then((result) => {\r\n // this.closeResult = `Closed with: ${result}`;\r\n console.log(result);\r\n\r\n }, (reason) => {\r\n var closeResult = `Dismissed ${this.getDismissReason(reason)}`;\r\n console.log(closeResult);\r\n\r\n });\r\n\r\n }\r\n\r\n private getDismissReason(reason: any): string {\r\n if (reason === ModalDismissReasons.ESC) {\r\n return \"by pressing ESC\";\r\n } else if (reason === ModalDismissReasons.BACKDROP_CLICK) {\r\n return \"by clicking on a backdrop\";\r\n } else {\r\n return `with: ${reason}`;\r\n }\r\n }\r\n\r\n onRunReport() {\r\n\r\n if(this.selectedReport) {\r\n\r\n this.dialogsService.startDefaultSpinnerDialog();\r\n\r\n console.log(\"format:\" + this.selectedFormat);\r\n if(!this.selectedFormat) {\r\n this.selectedFormat = \"html\";\r\n }\r\n\r\n let runParams = new HttpParams();\r\n runParams = runParams.append(\"format\", this.selectedFormat);\r\n runParams = runParams.append(\"action\", \"show\");\r\n runParams = runParams.append(\"reportName\", this.selectedReport.name);\r\n\r\n runParams = this.getRunParameters(runParams);\r\n\r\n console.log(runParams);\r\n\r\n this.http.get(this.commandPrefix + this.selectedReport.className,\r\n {\r\n params: runParams,\r\n observe: \"response\",\r\n responseType: \"blob\"\r\n }\r\n ).subscribe(\r\n (res) => {\r\n console.log(res);\r\n\r\n var filename;\r\n if(this.selectedFormat != \"html\") {\r\n filename = res.headers.get(\"content-disposition\").split(\";\")[1].split(\"=\")[1].replace(/\\\"/g, \"\");\r\n }\r\n var blob = new Blob([res.body], {type: res.body.type} ); //, {type: \"application/vnd.ms-excel\"}\r\n var fileURL = window.URL.createObjectURL(blob);\r\n console.log(fileURL);\r\n\r\n const a: HTMLAnchorElement = document.createElement(\"a\") as HTMLAnchorElement;\r\n a.href = fileURL;\r\n if(this.selectedFormat == \"html\") {\r\n a.target = \"_blank\";\r\n }else {\r\n a.download = filename;\r\n }\r\n window.document.body.appendChild(a);\r\n a.click();\r\n window.document.body.removeChild(a);\r\n URL.revokeObjectURL(fileURL);\r\n\r\n this.dialogsService.stopAllSpinnerDialogs();\r\n }\r\n );\r\n }\r\n }\r\n\r\n getRunParameters(runParams: HttpParams): HttpParams {\r\n var newParams = runParams;\r\n\r\n for(let o of this.displayedParamComponentRefs){\r\n var param = o.instance.param;\r\n\r\n if(param.type == \"multiselect\") {\r\n var resList = \"\";\r\n for(let v of param.selectedValueList){\r\n if(resList != \"\") {\r\n resList += \",\";\r\n }\r\n resList += v;\r\n }\r\n newParams = newParams.append(param.name, resList);\r\n }else {\r\n var value;\r\n if(param.selectedValue) { //so we don't get \"undefined\" sent back\r\n if(param.type == \"date\") {\r\n value = this.getDateString(param.selectedValue);\r\n }else {\r\n value = param.selectedValue;\r\n }\r\n }else {\r\n value = \"\";\r\n }\r\n newParams = newParams.append(param.name, value);\r\n }\r\n }\r\n return newParams;\r\n }\r\n\r\n getDateString(date: any): string {\r\n\r\n if (date instanceof Date) {\r\n if (!isNaN(date.getTime())) {\r\n return this.datePipe.transform(date, \"MM/dd/yyyy\");\r\n } else {\r\n return \"\";\r\n }\r\n }else if(moment.isMoment(date) ) {\r\n if(date != null) {\r\n return date.format(\"M/D/YYYY\");\r\n }else {\r\n return \"\";\r\n }\r\n }else if(typeof date == \"string\") {\r\n return date;\r\n }else {\r\n return \"\";\r\n }\r\n }\r\n\r\n destroyComponentRefs() {\r\n for(let o of this.displayedParamComponentRefs){\r\n o.destroy();\r\n }\r\n for(let o of this.displayedFormatComponentRefs){\r\n o.destroy();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyComponentRefs();\r\n }\r\n\r\n /*\r\n styles: [`\r\n .report-details{\r\n height: 100%;\r\n width: 100%;\r\n position: absolute\r\n }\r\n\r\n .center-row{\r\n margin-top: 10px;\r\n margin-left: 60vw;\r\n }\r\n\r\n .mat-tab-body-wrapper{\r\n flex-grow: 1;\r\n }\r\n\r\n.tab-pane{\r\n height: 100%;\r\n}\r\n`]*/\r\n}\r\n","import {NgModule} from \"@angular/core\";\r\nimport {CommonModule, DatePipe} from \"@angular/common\";\r\n\r\nimport {ReportingFrameworkComponent} from \"./reporting-framework.component\";\r\nimport {MatDatepickerModule} from \"@angular/material/datepicker\";\r\nimport {NgbModule} from \"@ng-bootstrap/ng-bootstrap\";\r\nimport {ReportDatepickerComponent} from \"./datepicker/report-datepicker.component\";\r\nimport {FormatComponent} from \"./format/format.component\";\r\nimport {ParameterComponent} from \"./parameter/parameter.component\";\r\nimport {FormsModule} from \"@angular/forms\";\r\nimport {SelectModule} from \"@huntsman-cancer-institute/input\";\r\nimport {SpinnerDialogComponent} from \"./spinner/spinner-dialog.component\";\r\nimport {AgGridModule} from \"ag-grid-angular\";\r\nimport {MatLegacyProgressSpinnerModule as MatProgressSpinnerModule} from \"@angular/material/legacy-progress-spinner\";\r\nimport { MatLegacyDialogModule as MatDialogModule } from \"@angular/material/legacy-dialog\";\r\nimport {DialogsService} from \"./spinner/dialogs.service\";\r\nimport {ResizableSectionDividerComponent} from \"./resizable-divider/resizable-section-divider.component\";\r\nimport {MatLegacyTabsModule as MatTabsModule} from \"@angular/material/legacy-tabs\";\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n NgbModule,\r\n MatDatepickerModule,\r\n MatDialogModule,\r\n MatProgressSpinnerModule,\r\n MatTabsModule,\r\n SelectModule,\r\n AgGridModule,\r\n ],\r\n providers: [\r\n DatePipe,\r\n DialogsService\r\n ],\r\n declarations: [\r\n ReportingFrameworkComponent,\r\n ReportDatepickerComponent,\r\n ParameterComponent,\r\n FormatComponent,\r\n SpinnerDialogComponent,\r\n ResizableSectionDividerComponent\r\n ],\r\n exports: [\r\n ReportingFrameworkComponent\r\n ]\r\n})\r\nexport class ReportModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3","i4.ReportDatepickerComponent","MAT_DIALOG_DATA","i1","i2","MatDialogConfig","i3.DialogsService","i7.ResizableSectionDividerComponent","MatDialogModule","MatProgressSpinnerModule","MatTabsModule"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"huntsman-cancer-institute-reporting-framework.mjs","sources":["../../../projects/reporting-framework/src/model/report.model.ts","../../../projects/reporting-framework/src/model/param.model.ts","../../../projects/reporting-framework/src/datepicker/report-datepicker.component.ts","../../../projects/reporting-framework/src/parameter/parameter.component.ts","../../../projects/reporting-framework/src/model/option.model.ts","../../../projects/reporting-framework/src/model/report-tab.model.ts","../../../projects/reporting-framework/src/model/format.model.ts","../../../projects/reporting-framework/src/format/format.component.ts","../../../projects/reporting-framework/src/spinner/spinner-dialog.component.ts","../../../projects/reporting-framework/src/spinner/dialogs.service.ts","../../../projects/reporting-framework/src/resizable-divider/resizable-section-divider.component.ts","../../../projects/reporting-framework/src/reporting-framework.component.ts","../../../projects/reporting-framework/src/report.module.ts","../../../projects/reporting-framework/src/huntsman-cancer-institute-reporting-framework.ts"],"sourcesContent":["import {Param} from \"./param.model\";\r\nimport {Format} from \"./format.model\";\r\n\r\nexport class Report {\r\n\r\n public name: string;\r\n public title: string;\r\n public description: string;\r\n public className: string;\r\n public fileName: string;\r\n public type: string;\r\n public tab: string;\r\n public datakey: string;\r\n public help: string;\r\n\r\n public params: Param[] = [];\r\n public formats: Format[] = [];\r\n}\r\n","import {Option} from \"./option.model\";\r\n\r\nexport class Param {\r\n\r\n public caption: string;\r\n public name: string;\r\n public type: string;\r\n public className: string;\r\n public valueXPath: string;\r\n public displayXPath: string;\r\n public activeOnly: boolean = true;\r\n public displayOrder: number;\r\n public sortField: string;\r\n public sortNumeric: boolean = false;\r\n public filterField: string = \"\";\r\n\r\n public options: Option[] = [];\r\n\r\n public selectedValue: any;\r\n public selectedValueList: any[] = []; //for multi-select\r\n public dictAPILeadIn: string;\r\n\r\n public calculateDictionaryURL(): string {\r\n let out: string = \"\";\r\n\r\n if(this.activeOnly) {\r\n out = this.dictAPILeadIn + \"/\" + this.className + \"/active-entries\";\r\n }else {\r\n out = this.dictAPILeadIn + \"/\" + this.className + \"/entries\";\r\n }\r\n\r\n if(this.filterField) {\r\n out = out + \"?\" + this.filterField;\r\n }\r\n\r\n return out;\r\n }\r\n}\r\n","import {Component, EventEmitter, Input, Output} from \"@angular/core\";\r\nimport {MAT_DATE_LOCALE} from \"@angular/material/core\";\r\n\r\n@Component({\r\n selector: \"report-datepicker\",\r\n template: `\r\n <div class=\"d-flex\" style=\"width: 100%;\">\r\n <input matInput [matDatepicker]=\"picker\" class=\"form-control\" style=\"cursor: pointer;\" [placeholder]=\"placeholder\" [ngModel]=\"value\" (ngModelChange)=\"onChange($event)\"\r\n (click)=\"picker.open()\" (blur)=\"onBlur()\" [min]=\"minDate\" [max]=\"maxDate\"\r\n [ngStyle]=\"{'background-color':invalid ? 'red' : '#fff'}\" >\r\n <span class=\"input-group-text\" id=\"clearIcon\" (click)=\"clear()\"><i class=\"fas fa-times\"></i></span>\r\n <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"picker.open()\" style=\"height:32px; width:32px;\"><i class=\"fas fa-calendar-alt\"></i></button>\r\n <mat-datepicker #picker ></mat-datepicker>\r\n </div>\r\n `,\r\n styles: [`\r\n #clearIcon {\r\n cursor: pointer;\r\n }\r\n #clearIcon:Hover {\r\n background-color: rgb(73, 80, 87);\r\n color: rgb(233, 236, 239)\r\n }\r\n `],\r\n providers: [\r\n {provide: MAT_DATE_LOCALE, useValue: \"en-GB\"}\r\n ]\r\n})\r\nexport class ReportDatepickerComponent {\r\n @Input() value: Date;\r\n @Input() placeholder: string;\r\n @Input() minDate: Date;\r\n @Input() maxDate: Date;\r\n @Input() invalid: boolean = false;\r\n\r\n @Output() valueChange = new EventEmitter();\r\n\r\n ngOnInit() {\r\n let today = new Date();\r\n // set the minDate to 20 years in the past by default\r\n if (!this.minDate) {\r\n this.minDate = new Date(today.getFullYear() - 20, today.getMonth(), today.getDate());\r\n }\r\n // set max date to 20 years in future by default\r\n if (!this.maxDate) {\r\n this.maxDate = new Date(today.getFullYear() + 20, today.getMonth(), today.getDate());\r\n }\r\n }\r\n\r\n onChange(newValue) {\r\n this.value = newValue;\r\n this.valueChange.emit(newValue);\r\n }\r\n\r\n clear() {\r\n this.value = undefined;\r\n this.valueChange.emit();\r\n }\r\n\r\n // Clear input field if entered data is invalid (Mat library sets value to null if invalid but doesn't clear input)\r\n onBlur() {\r\n if (!this.value) {\r\n this.value = undefined;\r\n this.valueChange.emit();\r\n }\r\n }\r\n}\r\n\r\n","import {Component} from \"@angular/core\";\r\nimport {Param} from \"../model/param.model\";\r\n\r\n\r\n@Component({\r\n selector: \"hci-parameter\",\r\n template: `\r\n\r\n <!--Text Input-->\r\n <ng-container *ngIf=\"param.type === 'input'\">\r\n <div style=\"display: block;\">\r\n <div class=\"row\">\r\n <label class=\"data-label\">{{param.caption}}:</label>\r\n <input type=\"text\" class=\"form-control input-field\"\r\n [id]=\"param.name\"\r\n [name]=\"param.name\"\r\n [(ngModel)]=\"param.selectedValue\"\r\n >\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!--Date-->\r\n <ng-container *ngIf=\"param.type === 'date'\">\r\n <div style=\"display: block;\">\r\n <div class=\"row\">\r\n <label class=\"data-label\">{{param.caption}}:</label>\r\n <report-datepicker class=\"date-input\"\r\n placeholder=\"\"\r\n id=\"{{param.name}}\"\r\n [(value)]=\"param.selectedValue\"\r\n >\r\n </report-datepicker>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!--Select with dictionary-->\r\n <ng-container *ngIf=\"param.type === 'select' && param.className && param.className != ''\">\r\n <div style=\"display: block;\">\r\n <div class=\"row\">\r\n <label class=\"data-label\">{{param.caption}}:</label>\r\n <hci-native-select class=\"report-select\"\r\n [id]=\"param.name\"\r\n [name]=\"param.name\"\r\n [idKey]=\"param.valueXPath\"\r\n [displayKey]=\"param.displayXPath\"\r\n [sortKey]=\"param.sortField\"\r\n [sortNumeric]=\"param.sortNumeric\"\r\n [(ngModel)]=\"param.selectedValue\"\r\n [url]=\"param.calculateDictionaryURL()\"\r\n ></hci-native-select>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!--Select with manual options-->\r\n <ng-container *ngIf=\"param.type === 'select' && (!param.className || param.className === '')\">\r\n <div style=\"display: block;\">\r\n <div class=\"row\">\r\n <label class=\"data-label\">{{param.caption}}:</label>\r\n <hci-native-select class=\"report-select\"\r\n [id]=\"param.name\"\r\n [name]=\"param.name\"\r\n [(ngModel)]=\"param.selectedValue\"\r\n [sortKey]=\"param.sortField\"\r\n [sortNumeric]=\"param.sortNumeric\"\r\n [entries] = \"entries\"\r\n ></hci-native-select>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!--Multi-select with dictionary-->\r\n <ng-container *ngIf=\"param.type === 'multiselect' && param.className && param.className != ''\">\r\n <div style=\"display: block;\">\r\n <div class=\"row\">\r\n <label class=\"data-label\">{{param.caption}}:</label>\r\n <hci-md-multi-select class=\"multi-report-select\"\r\n [id]=\"param.name\"\r\n [name]=\"param.name\"\r\n [idKey]=\"param.valueXPath\"\r\n [displayKey]=\"param.displayXPath\"\r\n [sortKey]=\"param.sortField\"\r\n [sortNumeric]=\"param.sortNumeric\"\r\n [(ngModel)]=\"param.selectedValueList\"\r\n [url]=\"param.calculateDictionaryURL()\"\r\n >\r\n </hci-md-multi-select>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!--Multi-select with manual options-->\r\n <ng-container *ngIf=\"param.type === 'multiselect' && (!param.className || param.className === '')\">\r\n <div style=\"display: block;\">\r\n <div class=\"row\">\r\n <label class=\"data-label\">{{param.caption}}:</label>\r\n <hci-md-multi-select class=\"multi-report-select\"\r\n [id]=\"param.name\"\r\n [name]=\"param.name\"\r\n [entries] = \"entries\"\r\n [sortKey]=\"param.sortField\"\r\n [sortNumeric]=\"param.sortNumeric\"\r\n [(ngModel)]=\"param.selectedValueList\"\r\n >\r\n </hci-md-multi-select>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!--Radio buttons-->\r\n <ng-container *ngIf=\"param.type === 'radio'\">\r\n <div style=\"display: block;\">\r\n <div class=\"row\">\r\n <label class=\"data-label\">{{param.caption}}:</label>\r\n <div class=\"radio-pair\" *ngFor=\"let o of param.options\">\r\n <input type=\"radio\"\r\n style=\"margin-right: 3px;\"\r\n [value]=\"o.value\"\r\n [id]=\"param.name + '-' + o.value\"\r\n [(ngModel)]=\"param.selectedValue\"\r\n [name]=\"param.name\">\r\n <label for=\"{{param.name + '-' + o.value}}\">{{o.display}}</label>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n `,\r\n styles: [`\r\n\r\n .data-label{\r\n width: 270px;\r\n margin-right: 30px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: flex-end;\r\n }\r\n\r\n .date-input{\r\n width: 45%;\r\n }\r\n\r\n .report-select{\r\n flex-grow: unset !important;\r\n width: 45%;\r\n }\r\n\r\n .multi-report-select{\r\n flex-grow: unset !important;\r\n width: 45%;\r\n }\r\n\r\n .radio-pair{\r\n display: flex;\r\n align-items: center;\r\n padding-right: 5px;\r\n margin-right: 15px;\r\n }\r\n\r\n .input-field{\r\n width: 45%\r\n }\r\n `]\r\n})\r\nexport class ParameterComponent {\r\n\r\n param: Param;\r\n entries: any[];\r\n\r\n setParam(p: Param) {\r\n this.param = p;\r\n\r\n if(this.param.type === \"radio\") { //if radio, auto select first option\r\n let o = this.param.options[0];\r\n this.param.selectedValue = o.value;\r\n }\r\n }\r\n\r\n}\r\n","\r\nexport class Option {\r\n\r\n public value: string;\r\n public display: string;\r\n public displayOrder: number;\r\n\r\n}\r\n","\r\nexport class ReportTab {\r\n\r\n public name: string;\r\n public title: string;\r\n public type: string;\r\n public tab: string;\r\n public datakey: string;\r\n\r\n}\r\n","\r\nexport class Format {\r\n\r\n public name: string;\r\n public caption: string;\r\n public displayOrder: number;\r\n\r\n public selected: string;\r\n}\r\n","import {Component, EventEmitter, Input, Output} from \"@angular/core\";\r\nimport {Format} from \"../model/format.model\";\r\n\r\n\r\n@Component({\r\n selector: \"hci-format\",\r\n template: `\r\n <div class=\"radio-pair\">\r\n <input type=\"radio\" #radio\r\n [value]=\"format.name\"\r\n [id]=\"format.name\"\r\n [checked]=\"selectedValue === format.name ? true : false\"\r\n (click)=\"selectFormat(radio.value)\"\r\n name=\"format\">\r\n <label>{{format.caption}}</label>\r\n </div>\r\n `,\r\n styles: [`\r\n .radio-pair{\r\n display: flex;\r\n align-items: center;\r\n padding-right: 5px;\r\n }\r\n `]\r\n})\r\nexport class FormatComponent {\r\n\r\n @Input() selectedValue: string;\r\n @Output() selectedValueChange = new EventEmitter<string>();\r\n\r\n format: Format;\r\n\r\n selectFormat(s: string) {\r\n this.selectedValue = s;\r\n this.selectedValueChange.emit(s);\r\n }\r\n\r\n}\r\n","import {Component, Inject, Input} from \"@angular/core\";\r\nimport {MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA, MatLegacyDialogRef as MatDialogRef} from \"@angular/material/legacy-dialog\";\r\n\r\n@Component({\r\n selector: \"spinner-dialog\",\r\n template: `\r\n <div mat-dialog-content class=\"full-height padded\">\r\n <div class=\"full-width full-height t\">\r\n <div class=\"tr\">\r\n <div class=\"td vertical-center\">\r\n <mat-spinner [hidden]=\"false\" strokeWidth=\"{{strokeWidth}}\" [diameter]=\"diameter\"></mat-spinner>\r\n </div>\r\n <div class=\"td vertical-center\">\r\n {{message}}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div mat-dialog-actions class=\"not-rendered\">\r\n </div>\r\n `,\r\n styles: [`\r\n .t { display: table; }\r\n .tr { display: table-row; }\r\n .td { display: table-cell; }\r\n\r\n .full-height { height: 100%; }\r\n .full-width { width: 100%; }\r\n\r\n .vertical-center { vertical-align: middle; }\r\n\r\n .padded {\r\n padding-top: 0.4em;\r\n padding-bottom: 0.4em;\r\n }\r\n\r\n .not-rendered {\r\n padding: 0;\r\n margin: 0;\r\n\r\n min-height: 0;\r\n max-height: 0;\r\n height: 0;\r\n }\r\n\r\n `]\r\n})\r\nexport class SpinnerDialogComponent {\r\n @Input(\"strokeWidth\") strokeWidth: number = 3;\r\n @Input(\"diameter\") diameter: number = 30;\r\n\r\n @Input(\"message\") message: string = \"Loading...\";\r\n\r\n constructor(private dialogRef: MatDialogRef<SpinnerDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) private data) {\r\n if (this.data) {\r\n if (!!this.data.message) {\r\n this.message = this.data.message;\r\n }\r\n if (!!this.data.diameter) {\r\n this.diameter = this.data.diameter;\r\n }\r\n if (!!this.data.strokeWidth) {\r\n this.strokeWidth = this.data.strokeWidth;\r\n }\r\n }\r\n }\r\n\r\n\r\n}\r\n","import {Injectable, TemplateRef} from \"@angular/core\";\r\nimport { MatLegacyDialogRef as MatDialogRef, MatLegacyDialog as MatDialog, MatLegacyDialogConfig as MatDialogConfig } from \"@angular/material/legacy-dialog\";\r\n\r\nimport { SpinnerDialogComponent } from \"./spinner-dialog.component\";\r\n\r\nexport enum DialogType {\r\n ERROR = \"Error\",\r\n WARNING = \"Warning\",\r\n ALERT = \"Alert\",\r\n SUCCESS = \"Succeed\",\r\n FAILED = \"Failed\",\r\n CONFIRM = \"Confirm\",\r\n INFO = \"Info\",\r\n VALIDATION = \"Validation Error\",\r\n}\r\n\r\n@Injectable()\r\nexport class DialogsService {\r\n\r\n private _spinnerDialogIsOpen: boolean = false;\r\n private spinnerWorkItemCount: number = 0;\r\n private checkingSpinnerWorkItems: boolean = false;\r\n\r\n public spinnerDialogRefs: MatDialogRef<SpinnerDialogComponent>[] = [];\r\n\r\n public get spinnerDialogIsOpen(): boolean {\r\n return this._spinnerDialogIsOpen;\r\n }\r\n\r\n constructor(private dialog: MatDialog) {\r\n }\r\n\r\n public startDefaultSpinnerDialog(): MatDialogRef<SpinnerDialogComponent> {\r\n return this.startSpinnerDialog(\"Please wait...\", 3, 30);\r\n }\r\n\r\n public startSpinnerDialog(message: string, strokeWidth: number, diameter: number): MatDialogRef<SpinnerDialogComponent> {\r\n if (this._spinnerDialogIsOpen) {\r\n return null;\r\n }\r\n\r\n this._spinnerDialogIsOpen = true;\r\n\r\n let configuration: MatDialogConfig = new MatDialogConfig();\r\n configuration.data = {\r\n message: message,\r\n strokeWidth: strokeWidth,\r\n diameter: diameter\r\n };\r\n configuration.width = \"13em\";\r\n configuration.disableClose = true;\r\n\r\n let dialogRef: MatDialogRef<SpinnerDialogComponent> = this.dialog.open(SpinnerDialogComponent, configuration);\r\n\r\n dialogRef.afterClosed().subscribe(() => {\r\n this._spinnerDialogIsOpen = false;\r\n });\r\n\r\n this.spinnerDialogRefs.push(dialogRef);\r\n\r\n return dialogRef;\r\n }\r\n\r\n // Let there be an alternative, global way to stop all active spinner dialogs.\r\n public stopAllSpinnerDialogs(): void {\r\n this.spinnerWorkItemCount = 0;\r\n for (let dialogRef of this.spinnerDialogRefs) {\r\n setTimeout(() => {\r\n dialogRef.close();\r\n });\r\n }\r\n this.spinnerDialogRefs = [];\r\n }\r\n\r\n public addSpinnerWorkItem(): void {\r\n this.spinnerWorkItemCount++;\r\n if (!this.checkingSpinnerWorkItems) {\r\n this.checkingSpinnerWorkItems = true;\r\n setTimeout(() => {\r\n this.checkSpinnerWorkItems();\r\n });\r\n }\r\n }\r\n\r\n public removeSpinnerWorkItem(): void {\r\n this.spinnerWorkItemCount--;\r\n if (this.spinnerWorkItemCount < 0) {\r\n this.spinnerWorkItemCount = 0;\r\n }\r\n if (!this.checkingSpinnerWorkItems) {\r\n this.checkingSpinnerWorkItems = true;\r\n setTimeout(() => {\r\n this.checkSpinnerWorkItems();\r\n });\r\n }\r\n }\r\n\r\n private checkSpinnerWorkItems(): void {\r\n this.checkingSpinnerWorkItems = false;\r\n if (this.spinnerWorkItemCount) {\r\n if (!this._spinnerDialogIsOpen) {\r\n this.startDefaultSpinnerDialog();\r\n }\r\n } else if (this._spinnerDialogIsOpen) {\r\n this.stopAllSpinnerDialogs();\r\n }\r\n }\r\n\r\n}\r\n","import {AfterViewInit, Component, ElementRef, HostListener, Input, OnDestroy, ViewChild} from \"@angular/core\";\r\n\r\n@Component({\r\n selector: \"resizable-section-divider\",\r\n template: `\r\n <div *ngIf=\"isVerticalLayout\" style=\"height: 100%; width: 100%;\" #verticalContainer>\r\n <div class=\"p-1\" style=\"width: 100%;\" [style.min-height.%]=\"minPercentage\" [style.max-height.%]=\"maxPercentage\" [style.height.%]=\"(100 - sectionSize - grabberOffset)\">\r\n <ng-content select=\"[topSection]\"></ng-content>\r\n </div>\r\n <div class=\"d-flex align-items-center justify-content-center\" style=\"height: 20px; width: 100%;\">\r\n <div class=\"rad-grabber-vertical\" (mousedown)=\"dragging = true;\" (touchstart)=\"dragging = true;\">\r\n <i class=\"fas fa-grip-lines\"></i>\r\n </div>\r\n </div>\r\n <div class=\"p-1\" style=\"width: 100%;\" [style.min-height.%]=\"minPercentage\" [style.max-height.%]=\"maxPercentage\" [style.height.%]=\"(sectionSize - grabberOffset)\">\r\n <ng-content select=\"[bottomSection]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!isVerticalLayout\" class=\"d-flex\" style=\"height: 100%; width: 100%;\" #horizontalContainer>\r\n <div class=\"p-1\" style=\"height: 100%;\" [style.min-width.%]=\"minPercentage\" [style.max-width.%]=\"maxPercentage\" [style.width.%]=\"(100 - sectionSize - grabberOffset)\">\r\n <ng-content select=\"[leftSection]\"></ng-content>\r\n </div>\r\n <div class=\"d-flex align-items-center justify-content-center\" style=\"width: 10px; height: 100%;\">\r\n <div class=\"rad-grabber\" (mousedown)=\"dragging = true;\" (touchstart)=\"dragging = true;\">\r\n <i class=\"fas fa-grip-lines-vertical\"></i>\r\n </div>\r\n </div>\r\n <div class=\"p-1\" style=\"height: 100%;\" [style.min-width.%]=\"minPercentage\" [style.max-width.%]=\"maxPercentage\" [style.width.%]=\"sectionSize - grabberOffset\">\r\n <ng-content select=\"[rightSection]\"></ng-content>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n .rad-grabber {\r\n cursor: ew-resize;\r\n }\r\n\r\n .rad-grabber-vertical {\r\n cursor: ns-resize;\r\n }\r\n `]\r\n})\r\nexport class ResizableSectionDividerComponent implements AfterViewInit, OnDestroy {\r\n // Starting width or height % for the right / bottom containers respectively\r\n @Input() initialPercentage: number = 50;\r\n @Input() isVerticalLayout: boolean = false;\r\n @Input() maxPercentage: number = 90;\r\n @Input() minPercentage: number = 10;\r\n\r\n @ViewChild(\"verticalContainer\", {static: false}) verticalContainer: ElementRef;\r\n @ViewChild(\"horizontalContainer\", {static: false}) horizontalContainer: ElementRef;\r\n\r\n public sectionSize: number;\r\n public dragging: boolean = false;\r\n public grabberOffset = 0;\r\n\r\n private verticalTouchFunction: any;\r\n private horizontalTouchFunction: any;\r\n private elementObserver: any;\r\n\r\n ngOnInit() {\r\n this.sectionSize = this.initialPercentage;\r\n\r\n this.verticalTouchFunction = (event) => {\r\n if (this.dragging) {\r\n this.grabberOffset = ((( 20 / this.verticalContainer.nativeElement.offsetHeight) * 100 ) / 2);\r\n this.sectionSize = ((this.verticalContainer.nativeElement.offsetHeight - (event.touches[0].pageY - this.verticalContainer.nativeElement.getBoundingClientRect().top))\r\n / (this.verticalContainer.nativeElement.offsetHeightt) * 100);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n };\r\n\r\n this.horizontalTouchFunction = (event) => {\r\n if (this.dragging) {\r\n this.grabberOffset = ((( 10 / this.horizontalContainer.nativeElement.offsetWidth) * 100 ) / 2);\r\n this.sectionSize = ((this.horizontalContainer.nativeElement.offsetWidth - event.touches[0].pageX - this.horizontalContainer.nativeElement.getBoundingClientRect().left)\r\n / (this.horizontalContainer.nativeElement.offsetWidth) * 100);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n };\r\n }\r\n ngAfterViewInit() {\r\n // Handle initializing grabber size for when elements are initialized as hidden\r\n this.elementObserver = new IntersectionObserver((entries, observable) => {\r\n entries.forEach(entry => {\r\n if(entry.isIntersecting) {\r\n // subtract half the grabber height/width % from each section\r\n if(this.isVerticalLayout) {\r\n this.grabberOffset = ((( 20 / this.verticalContainer.nativeElement.offsetHeight) * 100 ) / 2);\r\n } else {\r\n this.grabberOffset = ((( 10 / this.horizontalContainer.nativeElement.offsetWidth) * 100 ) / 2);\r\n }\r\n observable.disconnect();\r\n }\r\n });\r\n });\r\n\r\n if(this.isVerticalLayout) {\r\n this.elementObserver.observe(this.verticalContainer.nativeElement);\r\n window.addEventListener(\"touchmove\", this.verticalTouchFunction, { passive: false });\r\n } else {\r\n this.elementObserver.observe(this.horizontalContainer.nativeElement);\r\n window.addEventListener(\"touchmove\", this.horizontalTouchFunction, { passive: false });\r\n }\r\n }\r\n\r\n @HostListener(\"document:mousemove\", [\"$event\"])\r\n mouseMove(event: MouseEvent) {\r\n if (this.dragging) {\r\n if(this.isVerticalLayout) {\r\n this.grabberOffset = ((( 20 / this.verticalContainer.nativeElement.offsetHeight) * 100 ) / 2);\r\n this.sectionSize = ((this.verticalContainer.nativeElement.offsetHeight - (event.pageY - this.verticalContainer.nativeElement.getBoundingClientRect().top))\r\n / (this.verticalContainer.nativeElement.offsetHeight) * 100);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n } else {\r\n this.grabberOffset = ((( 10 / this.horizontalContainer.nativeElement.offsetWidth) * 100 ) / 2);\r\n this.sectionSize = ((this.horizontalContainer.nativeElement.offsetWidth - event.pageX - this.horizontalContainer.nativeElement.getBoundingClientRect().left)\r\n / (this.horizontalContainer.nativeElement.offsetWidth) * 100);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n @HostListener(\"document:mouseup\", [\"$event\"])\r\n @HostListener(\"document:touchend\", [\"$event\"])\r\n mouseUp(event: MouseEvent) {\r\n if (this.dragging) {\r\n this.dragging = false;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if(this.isVerticalLayout) {\r\n window.removeEventListener(\"touchmove\", this.verticalTouchFunction);\r\n } else {\r\n window.removeEventListener(\"touchmove\", this.horizontalTouchFunction);\r\n }\r\n }\r\n\r\n}\r\n","import {\r\n Component, ComponentFactory,\r\n ComponentFactoryResolver, ComponentRef,\r\n Input, OnDestroy,\r\n OnInit,\r\n ViewChild,\r\n ViewContainerRef\r\n} from \"@angular/core\";\r\nimport {HttpClient, HttpParams} from \"@angular/common/http\";\r\nimport {Report} from \"./model/report.model\";\r\nimport {Param} from \"./model/param.model\";\r\nimport {ParameterComponent} from \"./parameter/parameter.component\";\r\nimport {Option} from \"./model/option.model\";\r\nimport {ReportTab} from \"./model/report-tab.model\";\r\nimport {Format} from \"./model/format.model\";\r\nimport {FormatComponent} from \"./format/format.component\";\r\nimport * as moment from \"moment\";\r\nimport {DatePipe} from \"@angular/common\";\r\nimport {ModalDismissReasons, NgbModal} from \"@ng-bootstrap/ng-bootstrap\";\r\nimport {DialogsService} from \"./spinner/dialogs.service\";\r\nimport { GridApi } from \"ag-grid-community\";\r\n\r\n@Component({\r\n selector: \"hci-reporting-framework\",\r\n template: `\r\n <div style=\"height: 100vh\">\r\n <resizable-section-divider class=\"flex-grow-1\" [isVerticalLayout]=\"true\">\r\n <div topSection class=\"d-flex flex-column\" style=\"height: 100%; width: 100%; overflow: auto;\">\r\n <!--can wrap just the grid with the tabs-->\r\n <mat-tab-group *ngIf=\"tabList.length > 0\"\r\n class=\"flex-grow-1\">\r\n <mat-tab *ngFor=\"let tab of tabList\"\r\n label=\"{{tab.title}}\"\r\n class=\"flex-grow-1\">\r\n <ng-template matTabContent>\r\n <ag-grid-angular\r\n class=\"ag-theme-balham full-width flex-grow-1\"\r\n style=\"min-height: 200px; height: 100%;\"\r\n (gridReady)=\"this.onTabbedGridReady($event, tab.name)\"\r\n [gridOptions]=\"this.gridOptions\"\r\n [rowSelection]=\"'single'\"\r\n (rowSelected)=\"setSelectedRow($event)\"\r\n [frameworkComponents]=\"frameworkComponents\"\r\n [rowData]=\"tabbedGridList[tab.name]\">\r\n </ag-grid-angular>\r\n </ng-template>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <!--ngb-tabset *ngIf=\"tabList.length > 0\"\r\n destroyOnHide=\"false\"\r\n type=\"tabs\"\r\n class=\"flex-grow-1\"\r\n #reportTabSet=\"ngbTabset\"\r\n >\r\n <ngb-tab *ngFor=\"let tab of tabList\"\r\n id=\"{{tab.name}}\" title=\"{{tab.title}}\"\r\n style=\"border: 5px solid;\" >\r\n <ng-template ngbTabContent >\r\n\r\n <ag-grid-angular\r\n class=\"ag-theme-balham full-width flex-grow-1\"\r\n style=\"min-height: 200px; height: 100%;\"\r\n (gridReady)=\"this.onTabbedGridReady($event, tab.name)\"\r\n [gridOptions]=\"this.gridOptions\"\r\n [rowSelection]=\"'single'\"\r\n (rowSelected)=\"setSelectedRow($event)\"\r\n [frameworkComponents]=\"frameworkComponents\"\r\n [rowData]=\"tabbedGridList[tab.name]\">\r\n </ag-grid-angular>\r\n </ng-template>\r\n </ngb-tab>\r\n\r\n </ngb-tabset-->\r\n\r\n <ag-grid-angular *ngIf=\"tabList.length <= 0\"\r\n class=\"ag-theme-balham full-width flex-grow-1\"\r\n style=\"min-height: 200px; height: 100%;\"\r\n (gridReady)=\"this.onMainGridReady($event)\"\r\n [gridOptions]=\"this.gridOptions\"\r\n [rowSelection]=\"'single'\"\r\n (rowSelected)=\"setSelectedRow($event)\"\r\n [frameworkComponents]=\"frameworkComponents\"\r\n [rowData]=\"fullGridList\">\r\n </ag-grid-angular>\r\n </div>\r\n <div bottomSection class=\"d-flex flex-column\" style=\"height: 80%; width: 100%; overflow: auto;\">\r\n <div style=\"display: block;\">\r\n <div class=\"row\">\r\n <label style=\"margin-left: 25px; font-weight: bold\">{{selectedReport.title}}</label>\r\n <button class=\"btn\" *ngIf=\"selectedReport.help && selectedReport.help != ''\"\r\n (click)=\"openHelp(content)\">\r\n <i class=\"far fa-question-circle\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <template #paramContainer></template>\r\n <div style=\"display: block;\">\r\n <div class=\"row center-row\">\r\n <template #formatContainer></template>\r\n <button *ngIf=\"selectedReport.name\"\r\n class=\"btn btn-success\"\r\n type=\"button\"\r\n (click)=\"onRunReport()\"\r\n >Run Report</button>\r\n </div>\r\n </div>\r\n </div>\r\n </resizable-section-divider>\r\n </div>\r\n <ng-template #content let-modal>\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" id=\"help-model-title\">Report Help</h4>\r\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modal.dismiss('Cross click')\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\" >\r\n <div class=\"container\" [innerHTML]=\"selectedReport.help\">\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"modal.dismiss('Ok click')\">OK</button>\r\n </div>\r\n </ng-template>\r\n\r\n `,\r\n styles: [`\r\n :host ::ng-deep .mat-tab-body-wrapper{\r\n flex-grow: 1;\r\n }\r\n\r\n :host ::ng-deep .mat-tab-label{\r\n background-color: #98c7e0;\r\n }\r\n\r\n :host ::ng-deep .mat-tab-label-active{\r\n background-color: #def4ff;\r\n }\r\n\r\n .report-details{\r\n height: 100%;\r\n width: 100%;\r\n position: absolute\r\n }\r\n\r\n .center-row{\r\n margin-top: 10px;\r\n margin-left: 60vw;\r\n }\r\n `]\r\n})\r\nexport class ReportingFrameworkComponent implements OnInit, OnDestroy {\r\n\r\n @Input() manageReportUrl: string; // /artadmin/legacy/api/hci.artadmin.controller.ManageReports\r\n @Input() commandPrefix: string; // /artadmin/legacy/api/jsp\r\n @Input() dictAPILeadIn: string; // /artadmin/api/dictionaries\r\n @Input() reportsByType: string; //optional. usually \"global\" or \"patient\"\r\n\r\n @ViewChild(\"paramContainer\", {read: ViewContainerRef, static: false}) paramContainer: ViewContainerRef;\r\n @ViewChild(\"formatContainer\", {read: ViewContainerRef, static: false}) formatContainer: ViewContainerRef;\r\n\r\n fullGridList: any[] = [];\r\n tabbedGridList: any = {};\r\n\r\n\r\n gridOptions = {\r\n rowStyle: {\r\n \"font-family\": \"Prompt, sans-serif\"\r\n },\r\n rowHeight: 20,\r\n enableCellTextSelection: true,\r\n ensureDomOrder: true\r\n }; //enableCellTextSelection should be combined with ensureDomOrder\r\n frameworkComponents: any;\r\n\r\n mainGridApi: GridApi;\r\n tabbedGridApiList: any = {}; //a map of GridAPIs to tab names\r\n\r\n reportList: Report[] = [];\r\n tabList: ReportTab[] = [];\r\n tabTypeNameLookup: any = {}; //a kind of dict that maps the tab or type to the tab-name\r\n\r\n selectedReport: Report = new Report();\r\n selectedFormat: string;\r\n displayedParamComponentRefs: ComponentRef<any>[] = [];\r\n displayedFormatComponentRefs: ComponentRef<any>[] = [];\r\n\r\n constructor(private http: HttpClient,\r\n private resolver: ComponentFactoryResolver,\r\n private datePipe: DatePipe,\r\n private dialogsService: DialogsService,\r\n private modalService: NgbModal) {}\r\n\r\n ngOnInit(): void {\r\n\r\n if (this.manageReportUrl != null) {\r\n\r\n this.http.get(this.manageReportUrl,\r\n {\r\n params: new HttpParams().set(\"action\", \"loadWithParams\")\r\n }\r\n ).subscribe(\r\n (resp) => {\r\n console.log(resp);\r\n var templist = [];\r\n var tempTabbedGridList = {};\r\n\r\n var tablist = resp[\"reportTabs\"];\r\n for (let row of tablist) {\r\n var tab: ReportTab = new ReportTab();\r\n tab.name = row.name;\r\n tab.title = row.title;\r\n tab.type = row.type;\r\n tab.tab = row.tab;\r\n tab.datakey = row.datakey;\r\n\r\n if (!this.reportsByType) {\r\n this.tabList.push(tab);\r\n if (tab.tab) {\r\n this.tabTypeNameLookup[tab.tab] = tab.name;\r\n }\r\n if (tab.type) {\r\n this.tabTypeNameLookup[tab.type] = tab.name;\r\n }\r\n }else {\r\n if (this.reportsByType == tab.type) {\r\n this.tabList.push(tab);\r\n this.tabTypeNameLookup[tab.tab] = tab.name;\r\n }\r\n }\r\n\r\n var tabGridList: any[] = [];\r\n this.tabbedGridList[tab.name] = tabGridList;\r\n tempTabbedGridList[tab.name] = [];\r\n }\r\n\r\n\r\n var list = resp[\"reportList\"];\r\n // console.log(list);\r\n for (let row of list) {\r\n var report: Report = new Report();\r\n report.name = row.name;\r\n report.title = row.title;\r\n report.description = row.description;\r\n report.className = row.className;\r\n report.fileName = row.fileName;\r\n report.type = row.type;\r\n report.tab = row.tab;\r\n report.datakey = row.datakey;\r\n report.help = row.help;\r\n\r\n const object = {\r\n name: report.name,\r\n title: report.title,\r\n description: report.description\r\n };\r\n\r\n\r\n var tabname;\r\n if (report.tab) {\r\n tabname = this.tabTypeNameLookup[report.tab];\r\n } else if (!this.reportsByType && report.type) {\r\n tabname = this.tabTypeNameLookup[report.type];\r\n }\r\n\r\n if (tabname) {\r\n var gridlist: any[] = tempTabbedGridList[tabname];\r\n\r\n if(this.reportsByType) {\r\n if (report.type === this.reportsByType ) {\r\n gridlist.push(object);\r\n }\r\n }else {\r\n gridlist.push(object);\r\n }\r\n }\r\n\r\n let params = row.params;\r\n if (params) {\r\n\r\n for (let p of params) {\r\n // console.log(p);\r\n var newParam: Param = new Param();\r\n newParam.dictAPILeadIn = this.dictAPILeadIn;\r\n\r\n newParam.caption = p.caption;\r\n newParam.name = p.name;\r\n newParam.type = p.type;\r\n newParam.className = p.className;\r\n newParam.valueXPath = p.valueXPath;\r\n newParam.displayXPath = p.displayXPath;\r\n newParam.displayOrder = p.displayOrder;\r\n newParam.activeOnly = p.activeOnly;\r\n newParam.sortField = p.sortField;\r\n newParam.sortNumeric = p.sortNumeric;\r\n newParam.filterField = p.filterField;\r\n\r\n if (newParam.valueXPath) {\r\n newParam.valueXPath = newParam.valueXPath.replace(\"@\", \"\");\r\n }\r\n if (newParam.displayXPath) {\r\n newParam.displayXPath = newParam.displayXPath.replace(\"@\", \"\");\r\n }\r\n if (newParam.sortField) {\r\n newParam.sortField = newParam.sortField.replace(\"@\", \"\");\r\n }\r\n\r\n let options = p.options;\r\n if (options) {\r\n\r\n for (let o of options) {\r\n var newOption: Option = new Option();\r\n newOption.value = o.value;\r\n newOption.display = o.display;\r\n newOption.displayOrder = o.displayOrder;\r\n\r\n newParam.options.push(newOption);\r\n }\r\n }\r\n\r\n report.params.push(newParam);\r\n }\r\n }\r\n\r\n let formats = row.formats;\r\n if (formats) {\r\n\r\n for (let f of formats) {\r\n var newFormat: Format = new Format();\r\n newFormat.name = f.name;\r\n newFormat.caption = f.caption;\r\n newFormat.displayOrder = f.displayOrder;\r\n\r\n report.formats.push(newFormat);\r\n }\r\n }\r\n\r\n\r\n this.reportList.push(report);\r\n\r\n if (this.reportsByType) {\r\n if(report.type === this.reportsByType) {\r\n templist.push(object);\r\n }\r\n } else {\r\n templist.push(object);\r\n }\r\n }\r\n\r\n this.fullGridList = templist.slice();\r\n console.log(\"gridlist: \");\r\n console.log(this.fullGridList);\r\n\r\n for(let tab of this.tabList){\r\n this.tabbedGridList[tab.name] = tempTabbedGridList[tab.name].slice();\r\n }\r\n\r\n }\r\n );\r\n }\r\n }\r\n\r\n public columnDef() : any[] {\r\n return [\r\n\r\n {\r\n field: \"title\",\r\n headerName: \"Title\",\r\n width: 300,\r\n sortable: true,\r\n resizable: true,\r\n editable: false},\r\n {\r\n field: \"description\",\r\n headerName: \"Description\",\r\n sortable: true,\r\n resizable: true,\r\n editable: false}\r\n ];\r\n\r\n }\r\n\r\n onMainGridReady(params : any) {\r\n\r\n this.mainGridApi = params.api;\r\n this.mainGridApi.setColumnDefs(this.columnDef());\r\n this.mainGridApi.setRowData(this.fullGridList);\r\n this.mainGridApi.sizeColumnsToFit();\r\n }\r\n\r\n onTabbedGridReady(params : any, tabname: string) {\r\n\r\n this.tabbedGridApiList[tabname] = params.api;\r\n this.tabbedGridApiList[tabname].setColumnDefs(this.columnDef());\r\n this.tabbedGridApiList[tabname].setRowData(this.tabbedGridList[tabname]);\r\n this.tabbedGridApiList[tabname].sizeColumnsToFit();\r\n }\r\n\r\n setSelectedRow(event) {\r\n\r\n //console.log(event);\r\n if(event.node.selected) {\r\n let reportName = event.node.data.name;\r\n console.log(event.node.data.name);\r\n\r\n var matchedReport: Report;\r\n for (let r of this.reportList) {\r\n if (r.name == reportName) {\r\n matchedReport = r;\r\n }\r\n }\r\n\r\n if (matchedReport != null) {\r\n this.selectedReport = matchedReport;\r\n } else {\r\n this.selectedReport = new Report();\r\n }\r\n\r\n this.createParamComponents();\r\n }\r\n }\r\n\r\n createParamComponents() {\r\n if(this.paramContainer) {\r\n this.paramContainer.clear();\r\n }\r\n if(this.formatContainer) {\r\n this.formatContainer.clear();\r\n }\r\n\r\n //destroy previous components and clear the displayedRef lists..?\r\n this.destroyComponentRefs();\r\n this.displayedParamComponentRefs = [];\r\n this.displayedFormatComponentRefs = [];\r\n\r\n for(let p of this.selectedReport.params){\r\n\r\n const factory: ComponentFactory<ParameterComponent> = this.resolver.resolveComponentFactory(ParameterComponent);\r\n var componentRef: ComponentRef<ParameterComponent> = this.paramContainer.createComponent(factory);\r\n this.displayedParamComponentRefs.push(componentRef);\r\n\r\n componentRef.instance.setParam(p);\r\n\r\n if(p.options.length > 0) {\r\n var entries: any[] = [];\r\n for(let o of p.options){\r\n var e = {id: o.value, display: o.display};\r\n entries.push(e);\r\n }\r\n componentRef.instance.entries = entries;\r\n }\r\n\r\n }\r\n\r\n var first: boolean = true;\r\n for(let f of this.selectedReport.formats){\r\n\r\n const factory2: ComponentFactory<FormatComponent> = this.resolver.resolveComponentFactory(FormatComponent);\r\n var componentRef2: ComponentRef<FormatComponent> = this.formatContainer.createComponent(factory2);\r\n this.displayedFormatComponentRefs.push(componentRef2);\r\n\r\n componentRef2.instance.format = f;\r\n componentRef2.instance.selectedValueChange.subscribe(\r\n (s) => {\r\n this.selectedFormat = s;\r\n }\r\n );\r\n if(first) {//select the first format in the grouping\r\n componentRef2.instance.selectedValue = f.name;\r\n this.selectedFormat = f.name;\r\n first = false;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n openHelp(content) {\r\n\r\n this.modalService.open(content, {ariaLabelledBy: \"help-modal-title\"})\r\n .result.then((result) => {\r\n // this.closeResult = `Closed with: ${result}`;\r\n console.log(result);\r\n\r\n }, (reason) => {\r\n var closeResult = `Dismissed ${this.getDismissReason(reason)}`;\r\n console.log(closeResult);\r\n\r\n });\r\n\r\n }\r\n\r\n private getDismissReason(reason: any): string {\r\n if (reason === ModalDismissReasons.ESC) {\r\n return \"by pressing ESC\";\r\n } else if (reason === ModalDismissReasons.BACKDROP_CLICK) {\r\n return \"by clicking on a backdrop\";\r\n } else {\r\n return `with: ${reason}`;\r\n }\r\n }\r\n\r\n onRunReport() {\r\n\r\n if(this.selectedReport) {\r\n\r\n this.dialogsService.startDefaultSpinnerDialog();\r\n\r\n console.log(\"format:\" + this.selectedFormat);\r\n if(!this.selectedFormat) {\r\n this.selectedFormat = \"html\";\r\n }\r\n\r\n let runParams = new HttpParams();\r\n runParams = runParams.append(\"format\", this.selectedFormat);\r\n runParams = runParams.append(\"action\", \"show\");\r\n runParams = runParams.append(\"reportName\", this.selectedReport.name);\r\n\r\n runParams = this.getRunParameters(runParams);\r\n\r\n console.log(runParams);\r\n\r\n this.http.get(this.commandPrefix + this.selectedReport.className,\r\n {\r\n params: runParams,\r\n observe: \"response\",\r\n responseType: \"blob\"\r\n }\r\n ).subscribe(\r\n (res) => {\r\n console.log(res);\r\n\r\n var filename;\r\n if(this.selectedFormat != \"html\") {\r\n filename = res.headers.get(\"content-disposition\").split(\";\")[1].split(\"=\")[1].replace(/\\\"/g, \"\");\r\n }\r\n var blob = new Blob([res.body], {type: res.body.type} ); //, {type: \"application/vnd.ms-excel\"}\r\n var fileURL = window.URL.createObjectURL(blob);\r\n console.log(fileURL);\r\n\r\n const a: HTMLAnchorElement = document.createElement(\"a\") as HTMLAnchorElement;\r\n a.href = fileURL;\r\n if(this.selectedFormat == \"html\") {\r\n a.target = \"_blank\";\r\n }else {\r\n a.download = filename;\r\n }\r\n window.document.body.appendChild(a);\r\n a.click();\r\n window.document.body.removeChild(a);\r\n URL.revokeObjectURL(fileURL);\r\n\r\n this.dialogsService.stopAllSpinnerDialogs();\r\n }\r\n );\r\n }\r\n }\r\n\r\n getRunParameters(runParams: HttpParams): HttpParams {\r\n var newParams = runParams;\r\n\r\n for(let o of this.displayedParamComponentRefs){\r\n var param = o.instance.param;\r\n\r\n if(param.type == \"multiselect\") {\r\n var resList = \"\";\r\n for(let v of param.selectedValueList){\r\n if(resList != \"\") {\r\n resList += \",\";\r\n }\r\n resList += v;\r\n }\r\n newParams = newParams.append(param.name, resList);\r\n }else {\r\n var value;\r\n if(param.selectedValue) { //so we don't get \"undefined\" sent back\r\n if(param.type == \"date\") {\r\n value = this.getDateString(param.selectedValue);\r\n }else {\r\n value = param.selectedValue;\r\n }\r\n }else {\r\n value = \"\";\r\n }\r\n newParams = newParams.append(param.name, value);\r\n }\r\n }\r\n return newParams;\r\n }\r\n\r\n getDateString(date: any): string {\r\n\r\n if (date instanceof Date) {\r\n if (!isNaN(date.getTime())) {\r\n return this.datePipe.transform(date, \"MM/dd/yyyy\");\r\n } else {\r\n return \"\";\r\n }\r\n }else if(moment.isMoment(date) ) {\r\n if(date != null) {\r\n return date.format(\"M/D/YYYY\");\r\n }else {\r\n return \"\";\r\n }\r\n }else if(typeof date == \"string\") {\r\n return date;\r\n }else {\r\n return \"\";\r\n }\r\n }\r\n\r\n destroyComponentRefs() {\r\n for(let o of this.displayedParamComponentRefs){\r\n o.destroy();\r\n }\r\n for(let o of this.displayedFormatComponentRefs){\r\n o.destroy();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyComponentRefs();\r\n }\r\n\r\n /*\r\n styles: [`\r\n .report-details{\r\n height: 100%;\r\n width: 100%;\r\n position: absolute\r\n }\r\n\r\n .center-row{\r\n margin-top: 10px;\r\n margin-left: 60vw;\r\n }\r\n\r\n .mat-tab-body-wrapper{\r\n flex-grow: 1;\r\n }\r\n\r\n.tab-pane{\r\n height: 100%;\r\n}\r\n`]*/\r\n}\r\n","import {NgModule} from \"@angular/core\";\r\nimport {CommonModule, DatePipe} from \"@angular/common\";\r\n\r\nimport {ReportingFrameworkComponent} from \"./reporting-framework.component\";\r\nimport {MatDatepickerModule} from \"@angular/material/datepicker\";\r\nimport {NgbModule} from \"@ng-bootstrap/ng-bootstrap\";\r\nimport {ReportDatepickerComponent} from \"./datepicker/report-datepicker.component\";\r\nimport {FormatComponent} from \"./format/format.component\";\r\nimport {ParameterComponent} from \"./parameter/parameter.component\";\r\nimport {FormsModule} from \"@angular/forms\";\r\nimport {SelectModule} from \"@huntsman-cancer-institute/input\";\r\nimport {SpinnerDialogComponent} from \"./spinner/spinner-dialog.component\";\r\nimport {AgGridModule} from \"ag-grid-angular\";\r\nimport {MatLegacyProgressSpinnerModule as MatProgressSpinnerModule} from \"@angular/material/legacy-progress-spinner\";\r\nimport { MatLegacyDialogModule as MatDialogModule } from \"@angular/material/legacy-dialog\";\r\nimport {DialogsService} from \"./spinner/dialogs.service\";\r\nimport {ResizableSectionDividerComponent} from \"./resizable-divider/resizable-section-divider.component\";\r\nimport {MatLegacyTabsModule as MatTabsModule} from \"@angular/material/legacy-tabs\";\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n NgbModule,\r\n MatDatepickerModule,\r\n MatDialogModule,\r\n MatProgressSpinnerModule,\r\n MatTabsModule,\r\n SelectModule,\r\n AgGridModule,\r\n ],\r\n providers: [\r\n DatePipe,\r\n DialogsService\r\n ],\r\n declarations: [\r\n ReportingFrameworkComponent,\r\n ReportDatepickerComponent,\r\n ParameterComponent,\r\n FormatComponent,\r\n SpinnerDialogComponent,\r\n ResizableSectionDividerComponent\r\n ],\r\n exports: [\r\n ReportingFrameworkComponent\r\n ]\r\n})\r\nexport class ReportModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3","i4.ReportDatepickerComponent","MAT_DIALOG_DATA","i1","i2","MatDialogConfig","i3.DialogsService","i7.ResizableSectionDividerComponent","MatDialogModule","MatProgressSpinnerModule","MatTabsModule"],"mappings":"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"}
|
package/model/param.model.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@huntsman-cancer-institute/reporting-framework",
|
|
3
|
-
"version": "17.
|
|
3
|
+
"version": "17.3.0",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git@gitlab.com:huntsman-cancer-institute/risr/ng/hci-ng-lib.git"
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"ag-grid-community": "^28.x"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@huntsman-cancer-institute/dictionary-service": "17.
|
|
23
|
-
"@huntsman-cancer-institute/input": "17.
|
|
22
|
+
"@huntsman-cancer-institute/dictionary-service": "^17.x",
|
|
23
|
+
"@huntsman-cancer-institute/input": "^17.x",
|
|
24
24
|
"tslib": "^2.3.0"
|
|
25
25
|
},
|
|
26
26
|
"module": "fesm2022/huntsman-cancer-institute-reporting-framework.mjs",
|