@churchillliving/se-ui-toolkit 6.54.369 → 6.54.374
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/lib/components/base/email/email-filter/email-filter.component.mjs +44 -6
- package/esm2022/lib/components/base/email/email-generate-btn/email-generate-btn.component.mjs +52 -11
- package/esm2022/lib/components/base/grid/grid.component.mjs +3 -3
- package/esm2022/lib/models/grid.model.mjs +1 -1
- package/esm2022/lib/services/grid.service.mjs +8 -4
- package/fesm2022/churchillliving-se-ui-toolkit.mjs +94 -21
- package/fesm2022/churchillliving-se-ui-toolkit.mjs.map +1 -1
- package/lib/components/base/email/email-filter/email-filter.component.d.ts +10 -1
- package/lib/components/base/email/email-generate-btn/email-generate-btn.component.d.ts +5 -1
- package/lib/models/grid.model.d.ts +3 -0
- package/lib/services/grid.service.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,11 +1,49 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
1
|
+
import { Component, Optional } from '@angular/core';
|
|
2
|
+
import { EFormControl } from '../../../../models/form.model';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../../../services/grid.service";
|
|
5
|
+
import * as i2 from "primeng/dynamicdialog";
|
|
6
|
+
import * as i3 from "@angular/common";
|
|
7
|
+
import * as i4 from "../../form-util/form-util.component";
|
|
3
8
|
export class EmailFilterComponent {
|
|
4
|
-
|
|
5
|
-
|
|
9
|
+
constructor(gridService, config) {
|
|
10
|
+
this.gridService = gridService;
|
|
11
|
+
this.config = config;
|
|
12
|
+
}
|
|
13
|
+
ngOnInit() {
|
|
14
|
+
this.initializeForm();
|
|
15
|
+
}
|
|
16
|
+
initializeForm() {
|
|
17
|
+
this.dynamicForm = {
|
|
18
|
+
formSections: [
|
|
19
|
+
{
|
|
20
|
+
fields: [
|
|
21
|
+
...this.config.data.formFields,
|
|
22
|
+
{
|
|
23
|
+
label: 'Run',
|
|
24
|
+
control: EFormControl.ADD_BUTTON,
|
|
25
|
+
onClick: () => {
|
|
26
|
+
const formattedObject = JSON.stringify(this.dynamicForm.formSections[0]?.fields
|
|
27
|
+
?.filter(field => field.control !== "add_button")
|
|
28
|
+
?.reduce((acc, field) => {
|
|
29
|
+
acc[field.field] = field.value;
|
|
30
|
+
return acc;
|
|
31
|
+
}, {}));
|
|
32
|
+
this.gridService.generateSendEmailEvent(this.config.data.uniqueKey, formattedObject);
|
|
33
|
+
},
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: EmailFilterComponent, deps: [{ token: i1.GridService }, { token: i2.DynamicDialogConfig, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
41
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: EmailFilterComponent, selector: "se-email-filter", ngImport: i0, template: "<se-form-util *ngIf=\"dynamicForm\" [form]=\"dynamicForm\" [hideSaveButton]=\"true\" [hideCancelButton]=\"true\">\n</se-form-util>", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.FormUtilComponent, selector: "se-form-util", inputs: ["stickyActions", "form", "hideSaveButton", "hideCancelButton", "formButtons", "loading", "activeTestMode"], outputs: ["saveForm", "cancelForm", "dropDownChangeEvent", "sectionClickedEvent"] }] }); }
|
|
6
42
|
}
|
|
7
43
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: EmailFilterComponent, decorators: [{
|
|
8
44
|
type: Component,
|
|
9
|
-
args: [{ selector: 'se-email-filter', template: "<
|
|
10
|
-
}] }
|
|
11
|
-
|
|
45
|
+
args: [{ selector: 'se-email-filter', template: "<se-form-util *ngIf=\"dynamicForm\" [form]=\"dynamicForm\" [hideSaveButton]=\"true\" [hideCancelButton]=\"true\">\n</se-form-util>" }]
|
|
46
|
+
}], ctorParameters: function () { return [{ type: i1.GridService }, { type: i2.DynamicDialogConfig, decorators: [{
|
|
47
|
+
type: Optional
|
|
48
|
+
}] }]; } });
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NlLXVpLXRvb2xraXQvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UvZW1haWwvZW1haWwtZmlsdGVyL2VtYWlsLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2VtYWlsL2VtYWlsLWZpbHRlci9lbWFpbC1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxFQUFFLFlBQVksRUFBZ0IsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7O0FBVTNFLE1BQU0sT0FBTyxvQkFBb0I7SUFDL0IsWUFDVSxXQUF3QixFQUNiLE1BQTJCO1FBRHRDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ2IsV0FBTSxHQUFOLE1BQU0sQ0FBcUI7SUFDNUMsQ0FBQztJQUdMLFFBQVE7UUFDTixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsV0FBVyxHQUFHO1lBQ2pCLFlBQVksRUFBRTtnQkFDWjtvQkFDRSxNQUFNLEVBQUU7d0JBQ04sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVO3dCQUM5Qjs0QkFDRSxLQUFLLEVBQUUsS0FBSzs0QkFDWixPQUFPLEVBQUUsWUFBWSxDQUFDLFVBQVU7NEJBQ2hDLE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0NBQ1osTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNO29DQUM3RSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssWUFBWSxDQUFDO29DQUNqRCxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRTtvQ0FDdEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO29DQUMvQixPQUFPLEdBQUcsQ0FBQztnQ0FDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQ0FDVixJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQzs0QkFDdkYsQ0FBQzt5QkFDRjtxQkFFRjtpQkFDRjthQUNGO1NBRUYsQ0FBQTtJQUNILENBQUM7aUlBcENVLG9CQUFvQjtxSEFBcEIsb0JBQW9CLHVEQ1pqQyxvSUFDZTs7MkZEV0Ysb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGlCQUFpQjs7MEJBT3hCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7IEVGb3JtQ29udHJvbCwgSUR5bmFtaWNGb3JtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgR3JpZFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9ncmlkLnNlcnZpY2UnO1xuXG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2UtZW1haWwtZmlsdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VtYWlsLWZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VtYWlsLWZpbHRlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEVtYWlsRmlsdGVyQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogR3JpZFNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcbiAgKSB7IH1cblxuICBkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtO1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XG4gIH1cblxuICBpbml0aWFsaXplRm9ybSgpIHtcbiAgICB0aGlzLmR5bmFtaWNGb3JtID0ge1xuICAgICAgZm9ybVNlY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIC4uLnRoaXMuY29uZmlnLmRhdGEuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICdSdW4nLFxuICAgICAgICAgICAgICBjb250cm9sOiBFRm9ybUNvbnRyb2wuQUREX0JVVFRPTixcbiAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZE9iamVjdCA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZHluYW1pY0Zvcm0uZm9ybVNlY3Rpb25zWzBdPy5maWVsZHNcbiAgICAgICAgICAgICAgICAgID8uZmlsdGVyKGZpZWxkID0+IGZpZWxkLmNvbnRyb2wgIT09IFwiYWRkX2J1dHRvblwiKVxuICAgICAgICAgICAgICAgICAgPy5yZWR1Y2UoKGFjYywgZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYWNjW2ZpZWxkLmZpZWxkXSA9IGZpZWxkLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgICAgICAgfSwge30pKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLmdlbmVyYXRlU2VuZEVtYWlsRXZlbnQodGhpcy5jb25maWcuZGF0YS51bmlxdWVLZXksIGZvcm1hdHRlZE9iamVjdCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF1cblxuICAgIH1cbiAgfVxufVxuIiwiPHNlLWZvcm0tdXRpbCAqbmdJZj1cImR5bmFtaWNGb3JtXCIgW2Zvcm1dPVwiZHluYW1pY0Zvcm1cIiBbaGlkZVNhdmVCdXR0b25dPVwidHJ1ZVwiIFtoaWRlQ2FuY2VsQnV0dG9uXT1cInRydWVcIj5cbjwvc2UtZm9ybS11dGlsPiJdfQ==
|
package/esm2022/lib/components/base/email/email-generate-btn/email-generate-btn.component.mjs
CHANGED
|
@@ -1,32 +1,73 @@
|
|
|
1
1
|
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { EmailFilterComponent } from '../email-filter/email-filter.component';
|
|
3
|
+
import { autoSetLookupData } from '../../../../services/utilities.service';
|
|
4
|
+
import { EFormControl } from '../../../../models/form.model';
|
|
2
5
|
import * as i0 from "@angular/core";
|
|
3
6
|
import * as i1 from "primeng/dynamicdialog";
|
|
4
|
-
import * as i2 from "../../../../services/
|
|
5
|
-
import * as i3 from "
|
|
7
|
+
import * as i2 from "../../../../services/request.service";
|
|
8
|
+
import * as i3 from "../../../../services/grid.service";
|
|
9
|
+
import * as i4 from "../../../../services/alert.service";
|
|
10
|
+
import * as i5 from "primeng/button";
|
|
6
11
|
export class EmailGenerateBtnComponent {
|
|
7
|
-
constructor(dialogService, gridService) {
|
|
12
|
+
constructor(dialogService, requestService, gridService, alertService) {
|
|
8
13
|
this.dialogService = dialogService;
|
|
14
|
+
this.requestService = requestService;
|
|
9
15
|
this.gridService = gridService;
|
|
16
|
+
this.alertService = alertService;
|
|
10
17
|
this.showDialog = true;
|
|
11
18
|
}
|
|
12
19
|
ngOnInit() {
|
|
13
20
|
}
|
|
14
21
|
onClickGenerateEmailBtn() {
|
|
15
22
|
let data = { ...this.column.data };
|
|
16
|
-
console.log('data:1 ', data);
|
|
17
23
|
if (Object.keys(this.selectedRow)?.length > 0) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
24
|
+
const newData = { ...autoSetLookupData(this.column.data.data, this.selectedRow), selectedRow: this.selectedRow, label: this.label };
|
|
25
|
+
this.requestService.getOne('/EmailConfig/Email', newData.uniqueKey).subscribe((response) => {
|
|
26
|
+
const emailInfo = JSON.parse(response?.emailInfo);
|
|
27
|
+
const emailBody = emailInfo?.body;
|
|
28
|
+
const matchedParams = emailBody?.match(/{(.*?)}/g);
|
|
29
|
+
if (matchedParams && this.column.showDialog) {
|
|
30
|
+
const parameterList = matchedParams.map(params => params.replace(/[{}]/g, ''));
|
|
31
|
+
const formFields = parameterList?.map(field => ({ field: field, label: field, control: EFormControl.INPUT }));
|
|
32
|
+
const ref = this.dialogService.open(EmailFilterComponent, {
|
|
33
|
+
header: "View Email Parameters",
|
|
34
|
+
width: '70%',
|
|
35
|
+
height: '50%',
|
|
36
|
+
data: {
|
|
37
|
+
formFields: formFields,
|
|
38
|
+
uniqueKey: newData.uniqueKey
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
const dialogRef = this.dialogService.dialogComponentRefMap.get(ref);
|
|
42
|
+
const component = dialogRef?.instance;
|
|
43
|
+
const ariaLabelledBy = component.getAriaLabelledBy();
|
|
44
|
+
component.getAriaLabelledBy = () => ariaLabelledBy;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
const matchedData = matchedParams?.reduce((acc, param) => {
|
|
48
|
+
const key = param.replace(/[{}]/g, '');
|
|
49
|
+
const lowerCaseKey = key?.toLowerCase();
|
|
50
|
+
const matchedKey = Object.keys(newData?.selectedRow)?.find(existingKey => existingKey.toLowerCase() === lowerCaseKey);
|
|
51
|
+
if (matchedKey) {
|
|
52
|
+
acc[key] = newData?.selectedRow[matchedKey];
|
|
53
|
+
}
|
|
54
|
+
return acc;
|
|
55
|
+
}, {});
|
|
56
|
+
const formattedObject = JSON.stringify(matchedData);
|
|
57
|
+
this.gridService.generateSendEmailEvent(newData.uniqueKey, formattedObject);
|
|
58
|
+
}
|
|
59
|
+
}, (error) => {
|
|
60
|
+
this.alertService.apiError(error);
|
|
61
|
+
});
|
|
21
62
|
}
|
|
22
63
|
}
|
|
23
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: EmailGenerateBtnComponent, deps: [{ token: i1.DialogService }, { token: i2.GridService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: EmailGenerateBtnComponent, selector: "se-email-generate-btn", inputs: { label: "label", icon: "icon", showDialog: "showDialog", column: "column", selectedRow: "selectedRow" }, ngImport: i0, template: "<button pButton type=\"button\" [icon]=\"icon\" [label]=\"label\" class=\"grid-component-grid-add-btn\"\n (click)=\"onClickGenerateEmailBtn()\"></button>", styles: [""], dependencies: [{ kind: "directive", type:
|
|
64
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: EmailGenerateBtnComponent, deps: [{ token: i1.DialogService }, { token: i2.RequestService }, { token: i3.GridService }, { token: i4.AlertService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
65
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: EmailGenerateBtnComponent, selector: "se-email-generate-btn", inputs: { label: "label", icon: "icon", showDialog: "showDialog", column: "column", selectedRow: "selectedRow" }, ngImport: i0, template: "<button pButton type=\"button\" [icon]=\"icon\" [label]=\"label\" class=\"grid-component-grid-add-btn\"\n (click)=\"onClickGenerateEmailBtn()\"></button>", styles: [""], dependencies: [{ kind: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }] }); }
|
|
25
66
|
}
|
|
26
67
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: EmailGenerateBtnComponent, decorators: [{
|
|
27
68
|
type: Component,
|
|
28
69
|
args: [{ selector: 'se-email-generate-btn', template: "<button pButton type=\"button\" [icon]=\"icon\" [label]=\"label\" class=\"grid-component-grid-add-btn\"\n (click)=\"onClickGenerateEmailBtn()\"></button>" }]
|
|
29
|
-
}], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i2.GridService }]; }, propDecorators: { label: [{
|
|
70
|
+
}], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i2.RequestService }, { type: i3.GridService }, { type: i4.AlertService }]; }, propDecorators: { label: [{
|
|
30
71
|
type: Input
|
|
31
72
|
}], icon: [{
|
|
32
73
|
type: Input
|
|
@@ -37,4 +78,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
|
|
|
37
78
|
}], selectedRow: [{
|
|
38
79
|
type: Input
|
|
39
80
|
}] } });
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtZ2VuZXJhdGUtYnRuLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NlLXVpLXRvb2xraXQvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UvZW1haWwvZW1haWwtZ2VuZXJhdGUtYnRuL2VtYWlsLWdlbmVyYXRlLWJ0bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2VtYWlsL2VtYWlsLWdlbmVyYXRlLWJ0bi9lbWFpbC1nZW5lcmF0ZS1idG4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFJOUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7O0FBTzdELE1BQU0sT0FBTyx5QkFBeUI7SUFPcEMsWUFDUyxhQUE0QixFQUMzQixjQUE4QixFQUM5QixXQUF3QixFQUN4QixZQUEwQjtRQUgzQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUMzQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFSM0IsZUFBVSxHQUFZLElBQUksQ0FBQztJQVVoQyxDQUFDO0lBRUwsUUFBUTtJQUNSLENBQUM7SUFFRCx1QkFBdUI7UUFDckIsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkMsSUFBSSxNQUFNLENBQUMsSUFB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O29CQUNwRCxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7aUJBQzdFO1lBRUgsQ0FBQyxFQUNELENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUNGLENBQUM7U0FDSDtJQUNILENBQUM7aUlBakVVLHlCQUF5QjtxSEFBekIseUJBQXlCLCtLQ2R0Qyw4SkFDaUQ7OzJGRGFwQyx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0UsdUJBQXVCO3NMQUt4QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7IEVtYWlsRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZW1haWwtZmlsdGVyL2VtYWlsLWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3JpZFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9ncmlkLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVxdWVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBhdXRvU2V0TG9va3VwRGF0YSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IEVGb3JtQ29udHJvbCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2UtZW1haWwtZ2VuZXJhdGUtYnRuJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VtYWlsLWdlbmVyYXRlLWJ0bi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VtYWlsLWdlbmVyYXRlLWJ0bi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEVtYWlsR2VuZXJhdGVCdG5Db21wb25lbnQge1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xuICBASW5wdXQoKSBpY29uOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNob3dEaWFsb2c6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBjb2x1bW46IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gIEBJbnB1dCgpIHNlbGVjdGVkUm93OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVxdWVzdFNlcnZpY2U6IFJlcXVlc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ3JpZFNlcnZpY2U6IEdyaWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG5cbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgfVxuXG4gIG9uQ2xpY2tHZW5lcmF0ZUVtYWlsQnRuKCkge1xuICAgIGxldCBkYXRhID0geyAuLi50aGlzLmNvbHVtbi5kYXRhIH07XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuc2VsZWN0ZWRSb3cpPy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBuZXdEYXRhOiBhbnkgPSB7IC4uLmF1dG9TZXRMb29rdXBEYXRhKHRoaXMuY29sdW1uLmRhdGEuZGF0YSwgdGhpcy5zZWxlY3RlZFJvdyksIHNlbGVjdGVkUm93OiB0aGlzLnNlbGVjdGVkUm93LCBsYWJlbDogdGhpcy5sYWJlbCB9O1xuICAgICAgdGhpcy5yZXF1ZXN0U2VydmljZS5nZXRPbmUoJy9FbWFpbENvbmZpZy9FbWFpbCcsIG5ld0RhdGEudW5pcXVlS2V5KS5zdWJzY3JpYmUoXG4gICAgICAgIChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZW1haWxJbmZvID0gSlNPTi5wYXJzZShyZXNwb25zZT8uZW1haWxJbmZvKTtcbiAgICAgICAgICBjb25zdCBlbWFpbEJvZHkgPSBlbWFpbEluZm8/LmJvZHk7XG4gICAgICAgICAgY29uc3QgbWF0Y2hlZFBhcmFtcyA9IGVtYWlsQm9keT8ubWF0Y2goL3soLio/KX0vZyk7XG4gICAgICAgICAgaWYgKG1hdGNoZWRQYXJhbXMgJiYgdGhpcy5jb2x1bW4uc2hvd0RpYWxvZykge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1ldGVyTGlzdCA9IG1hdGNoZWRQYXJhbXMubWFwKHBhcmFtcyA9PiBwYXJhbXMucmVwbGFjZSgvW3t9XS9nLCAnJykpO1xuICAgICAgICAgICAgY29uc3QgZm9ybUZpZWxkcyA9IHBhcmFtZXRlckxpc3Q/Lm1hcChmaWVsZCA9PiAoeyBmaWVsZDogZmllbGQsIGxhYmVsOiBmaWVsZCwgY29udHJvbDogRUZvcm1Db250cm9sLklOUFVUIH0pKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKEVtYWlsRmlsdGVyQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIGhlYWRlcjogXCJWaWV3IEVtYWlsIFBhcmFtZXRlcnNcIixcbiAgICAgICAgICAgICAgd2lkdGg6ICc3MCUnLFxuICAgICAgICAgICAgICBoZWlnaHQ6ICc1MCUnLFxuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkczogZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgICB1bmlxdWVLZXk6IG5ld0RhdGEudW5pcXVlS2V5XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5kaWFsb2dDb21wb25lbnRSZWZNYXAuZ2V0KHJlZik7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBkaWFsb2dSZWY/Lmluc3RhbmNlIGFzIER5bmFtaWNEaWFsb2dDb21wb25lbnQ7XG4gICAgICAgICAgICBjb25zdCBhcmlhTGFiZWxsZWRCeSA9IGNvbXBvbmVudC5nZXRBcmlhTGFiZWxsZWRCeSgpO1xuICAgICAgICAgICAgY29tcG9uZW50LmdldEFyaWFMYWJlbGxlZEJ5ID0gKCkgPT4gYXJpYUxhYmVsbGVkQnk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZERhdGEgPSBtYXRjaGVkUGFyYW1zPy5yZWR1Y2UoKGFjYywgcGFyYW0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qga2V5ID0gcGFyYW0ucmVwbGFjZSgvW3t9XS9nLCAnJyk7XG4gICAgICAgICAgICAgIGNvbnN0IGxvd2VyQ2FzZUtleSA9IGtleT8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZEtleSA9IE9iamVjdC5rZXlzKG5ld0RhdGE/LnNlbGVjdGVkUm93KT8uZmluZChleGlzdGluZ0tleSA9PiBleGlzdGluZ0tleS50b0xvd2VyQ2FzZSgpID09PSBsb3dlckNhc2VLZXkpO1xuICAgICAgICAgICAgICBpZiAobWF0Y2hlZEtleSkge1xuICAgICAgICAgICAgICAgIGFjY1trZXldID0gbmV3RGF0YT8uc2VsZWN0ZWRSb3dbbWF0Y2hlZEtleV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIHt9KTtcblxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkT2JqZWN0ID0gSlNPTi5zdHJpbmdpZnkobWF0Y2hlZERhdGEpO1xuICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5nZW5lcmF0ZVNlbmRFbWFpbEV2ZW50KG5ld0RhdGEudW5pcXVlS2V5LCBmb3JtYXR0ZWRPYmplY3QpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9LFxuICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iLCI8YnV0dG9uIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIFtpY29uXT1cImljb25cIiBbbGFiZWxdPVwibGFiZWxcIiBjbGFzcz1cImdyaWQtY29tcG9uZW50LWdyaWQtYWRkLWJ0blwiXG4gICAgKGNsaWNrKT1cIm9uQ2xpY2tHZW5lcmF0ZUVtYWlsQnRuKClcIj48L2J1dHRvbj4iXX0=
|