@mtna/web-form-angular 0.0.1
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/_index.scss +25 -0
- package/bundles/mtna-web-form-angular.umd.js +4982 -0
- package/bundles/mtna-web-form-angular.umd.js.map +1 -0
- package/esm2015/lib/core/animations.js +8 -0
- package/esm2015/lib/core/api-config.js +3 -0
- package/esm2015/lib/core/index.js +7 -0
- package/esm2015/lib/core/pipes/coerce-date-item.pipe.js +23 -0
- package/esm2015/lib/core/pipes/coerce-form-group.pipe.js +35 -0
- package/esm2015/lib/core/pipes/date-quarter.pipe.js +43 -0
- package/esm2015/lib/core/pipes/get-auto-complete.pipe.js +42 -0
- package/esm2015/lib/core/pipes/get-available-quarters.pipe.js +29 -0
- package/esm2015/lib/core/pipes/get-form-control-error.pipe.js +20 -0
- package/esm2015/lib/core/pipes/get-list-icon.pipe.js +53 -0
- package/esm2015/lib/core/pipes/get-object-type.pipe.js +17 -0
- package/esm2015/lib/core/pipes/get-selected-option.pipe.js +20 -0
- package/esm2015/lib/core/pipes/index.js +71 -0
- package/esm2015/lib/core/pipes/items-with-value.pipe.js +30 -0
- package/esm2015/lib/core/pipes/sanitize-html.pipe.js +23 -0
- package/esm2015/lib/core/services/api.service.js +67 -0
- package/esm2015/lib/core/services/form-manager.service.js +465 -0
- package/esm2015/lib/core/services/index.js +5 -0
- package/esm2015/lib/core/services/ng-form.service.js +150 -0
- package/esm2015/lib/core/services/ui.service.js +333 -0
- package/esm2015/lib/core/utilities/find-form-control.js +29 -0
- package/esm2015/lib/core/utilities/find-form-item.js +25 -0
- package/esm2015/lib/core/utilities/flatten-steps.js +10 -0
- package/esm2015/lib/core/utilities/generate-form-steps.js +25 -0
- package/esm2015/lib/core/utilities/index.js +9 -0
- package/esm2015/lib/core/utilities/is-form-group.js +6 -0
- package/esm2015/lib/core/utilities/serializer-util.js +358 -0
- package/esm2015/lib/core/utilities/update-step-status.js +38 -0
- package/esm2015/lib/core/validators/index.js +3 -0
- package/esm2015/lib/core/validators/instant-validation-result-error-state-matcher.js +23 -0
- package/esm2015/lib/core/validators/validation-result-validator.js +19 -0
- package/esm2015/lib/file-upload/file-upload.component.js +66 -0
- package/esm2015/lib/file-upload/index.js +2 -0
- package/esm2015/lib/form/base-form-item.model.js +2 -0
- package/esm2015/lib/form/form-disabler.component.js +38 -0
- package/esm2015/lib/form/form-item.directive.js +22 -0
- package/esm2015/lib/form/form.component.js +250 -0
- package/esm2015/lib/form/form.module.js +214 -0
- package/esm2015/lib/form/index.js +5 -0
- package/esm2015/lib/form/white-list.model.js +11 -0
- package/esm2015/lib/form-item-controls/base-form-item-control.directive.js +58 -0
- package/esm2015/lib/form-item-controls/base-parent-item-control.directive.js +42 -0
- package/esm2015/lib/form-item-controls/base-single-selection-parent.directive.js +53 -0
- package/esm2015/lib/form-item-controls/date-range.component.js +84 -0
- package/esm2015/lib/form-item-controls/date.component.js +134 -0
- package/esm2015/lib/form-item-controls/dropdown.component.js +109 -0
- package/esm2015/lib/form-item-controls/index.js +8 -0
- package/esm2015/lib/form-item-controls/input.component.js +149 -0
- package/esm2015/lib/form-item-controls/year-quarter-range.component.js +75 -0
- package/esm2015/lib/form-item-controls/year-quarter.component.js +228 -0
- package/esm2015/lib/form-stepper/form-step-group.component.js +95 -0
- package/esm2015/lib/form-stepper/form-step-group.pipe.js +20 -0
- package/esm2015/lib/form-stepper/form-step.component.js +110 -0
- package/esm2015/lib/form-stepper/form-step.util.js +28 -0
- package/esm2015/lib/form-stepper/form-stepper.component.js +115 -0
- package/esm2015/lib/form-stepper/form-stepper.module.js +53 -0
- package/esm2015/lib/form-stepper/index.js +8 -0
- package/esm2015/lib/form-stepper/models/base-form-step.model.js +6 -0
- package/esm2015/lib/form-stepper/models/form-step-group.model.js +13 -0
- package/esm2015/lib/form-stepper/models/form-step.model.js +12 -0
- package/esm2015/lib/form-stepper/models/index.js +4 -0
- package/esm2015/lib/groups/form-item-dialog-data.model.js +14 -0
- package/esm2015/lib/groups/group-components.js +646 -0
- package/esm2015/lib/groups/index.js +3 -0
- package/esm2015/lib/groups/repeatable-item.component.js +23 -0
- package/esm2015/lib/item-header/index.js +2 -0
- package/esm2015/lib/item-header/item-header.component.js +108 -0
- package/esm2015/lib/static-form-items/index.js +3 -0
- package/esm2015/lib/static-form-items/ordered-list-item.js +50 -0
- package/esm2015/lib/static-form-items/unordered-list-item.js +52 -0
- package/esm2015/lib/step-card/index.js +2 -0
- package/esm2015/lib/step-card/step-card.component.js +53 -0
- package/esm2015/mtna-web-form-angular.js +5 -0
- package/esm2015/public-api.js +10 -0
- package/fesm2015/mtna-web-form-angular.js +4614 -0
- package/fesm2015/mtna-web-form-angular.js.map +1 -0
- package/lib/_index.scss +25 -0
- package/lib/core/_all-color.scss +25 -0
- package/lib/core/_all-theme.scss +28 -0
- package/lib/core/_all-typography.scss +25 -0
- package/lib/core/_core-theme.scss +43 -0
- package/lib/core/animations.d.ts +2 -0
- package/lib/core/api-config.d.ts +5 -0
- package/lib/core/index.d.ts +6 -0
- package/lib/core/pipes/coerce-date-item.pipe.d.ts +11 -0
- package/lib/core/pipes/coerce-form-group.pipe.d.ts +23 -0
- package/lib/core/pipes/date-quarter.pipe.d.ts +7 -0
- package/lib/core/pipes/get-auto-complete.pipe.d.ts +7 -0
- package/lib/core/pipes/get-available-quarters.pipe.d.ts +8 -0
- package/lib/core/pipes/get-form-control-error.pipe.d.ts +14 -0
- package/lib/core/pipes/get-list-icon.pipe.d.ts +7 -0
- package/lib/core/pipes/get-object-type.pipe.d.ts +7 -0
- package/lib/core/pipes/get-selected-option.pipe.d.ts +8 -0
- package/lib/core/pipes/index.d.ts +28 -0
- package/lib/core/pipes/items-with-value.pipe.d.ts +13 -0
- package/lib/core/pipes/sanitize-html.pipe.d.ts +10 -0
- package/lib/core/services/api.service.d.ts +41 -0
- package/lib/core/services/form-manager.service.d.ts +184 -0
- package/lib/core/services/index.d.ts +4 -0
- package/lib/core/services/ng-form.service.d.ts +76 -0
- package/lib/core/services/ui.service.d.ts +123 -0
- package/lib/core/utilities/find-form-control.d.ts +11 -0
- package/lib/core/utilities/find-form-item.d.ts +10 -0
- package/lib/core/utilities/flatten-steps.d.ts +7 -0
- package/lib/core/utilities/generate-form-steps.d.ts +3 -0
- package/lib/core/utilities/index.d.ts +8 -0
- package/lib/core/utilities/is-form-group.d.ts +3 -0
- package/lib/core/utilities/serializer-util.d.ts +81 -0
- package/lib/core/utilities/update-step-status.d.ts +14 -0
- package/lib/core/validators/index.d.ts +2 -0
- package/lib/core/validators/instant-validation-result-error-state-matcher.d.ts +13 -0
- package/lib/core/validators/validation-result-validator.d.ts +12 -0
- package/lib/file-upload/file-upload.component.d.ts +23 -0
- package/lib/file-upload/index.d.ts +1 -0
- package/lib/form/base-form-item.model.d.ts +15 -0
- package/lib/form/form-disabler.component.d.ts +6 -0
- package/lib/form/form-item.directive.d.ts +13 -0
- package/lib/form/form.component.d.ts +89 -0
- package/lib/form/form.module.d.ts +52 -0
- package/lib/form/index.d.ts +4 -0
- package/lib/form/white-list.model.d.ts +6 -0
- package/lib/form-item-controls/_date-item-theme.scss +29 -0
- package/lib/form-item-controls/_form-control-theme.scss +28 -0
- package/lib/form-item-controls/_year-quarter-item-theme.scss +28 -0
- package/lib/form-item-controls/base-form-item-control.directive.d.ts +26 -0
- package/lib/form-item-controls/base-parent-item-control.directive.d.ts +19 -0
- package/lib/form-item-controls/base-single-selection-parent.directive.d.ts +26 -0
- package/lib/form-item-controls/date-range.component.d.ts +12 -0
- package/lib/form-item-controls/date.component.d.ts +24 -0
- package/lib/form-item-controls/dropdown.component.d.ts +9 -0
- package/lib/form-item-controls/index.d.ts +7 -0
- package/lib/form-item-controls/input.component.d.ts +14 -0
- package/lib/form-item-controls/year-quarter-range.component.d.ts +9 -0
- package/lib/form-item-controls/year-quarter.component.d.ts +33 -0
- package/lib/form-stepper/_form-step-group-theme.scss +43 -0
- package/lib/form-stepper/_form-stepper-theme.scss +72 -0
- package/lib/form-stepper/form-step-group.component.d.ts +23 -0
- package/lib/form-stepper/form-step-group.pipe.d.ts +11 -0
- package/lib/form-stepper/form-step.component.d.ts +27 -0
- package/lib/form-stepper/form-step.util.d.ts +27 -0
- package/lib/form-stepper/form-stepper.component.d.ts +35 -0
- package/lib/form-stepper/form-stepper.module.d.ts +18 -0
- package/lib/form-stepper/index.d.ts +7 -0
- package/lib/form-stepper/models/base-form-step.model.d.ts +4 -0
- package/lib/form-stepper/models/form-step-group.model.d.ts +8 -0
- package/lib/form-stepper/models/form-step.model.d.ts +11 -0
- package/lib/form-stepper/models/index.d.ts +3 -0
- package/lib/groups/_checkbox-theme.scss +62 -0
- package/lib/groups/_form-group-theme.scss +32 -0
- package/lib/groups/_multiple-choice-theme.scss +65 -0
- package/lib/groups/_repeatable-item-theme.scss +28 -0
- package/lib/groups/form-item-dialog-data.model.d.ts +13 -0
- package/lib/groups/group-components.d.ts +221 -0
- package/lib/groups/index.d.ts +2 -0
- package/lib/groups/repeatable-item.component.d.ts +5 -0
- package/lib/item-header/_item-header-theme.scss +28 -0
- package/lib/item-header/index.d.ts +1 -0
- package/lib/item-header/item-header.component.d.ts +35 -0
- package/lib/static-form-items/index.d.ts +2 -0
- package/lib/static-form-items/ordered-list-item.d.ts +11 -0
- package/lib/static-form-items/unordered-list-item.d.ts +11 -0
- package/lib/step-card/_step-card-theme.scss +42 -0
- package/lib/step-card/index.d.ts +1 -0
- package/lib/step-card/step-card.component.d.ts +21 -0
- package/mtna-web-form-angular.d.ts +5 -0
- package/package.json +43 -0
- package/public-api.d.ts +9 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@mtna/file-manager-angular";
|
|
4
|
+
import * as i2 from "@angular/material/button";
|
|
5
|
+
import * as i3 from "@angular/material/icon";
|
|
6
|
+
import * as i4 from "@angular/material/progress-spinner";
|
|
7
|
+
import * as i5 from "@angular/common";
|
|
8
|
+
import * as i6 from "@mtna/core-angular";
|
|
9
|
+
export class MtnaWfFileUploadComponent {
|
|
10
|
+
constructor(fileService) {
|
|
11
|
+
this.fileService = fileService;
|
|
12
|
+
this.header = null;
|
|
13
|
+
this.indicatorStatus = 'INACTIVE';
|
|
14
|
+
this.readonly = false;
|
|
15
|
+
this.file = new EventEmitter();
|
|
16
|
+
this.loading = false;
|
|
17
|
+
}
|
|
18
|
+
fileToUpload(file) {
|
|
19
|
+
this.loading = true;
|
|
20
|
+
this.fileService.uploadFile(file).subscribe((fileInfo) => {
|
|
21
|
+
this.loading = false;
|
|
22
|
+
this.fileInfo = fileInfo;
|
|
23
|
+
this.file.emit(fileInfo);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
handleDownload(template) {
|
|
27
|
+
this.fileService.downloadFileGET(template.key, template.fileName, template.contentType);
|
|
28
|
+
}
|
|
29
|
+
ngOnInit() {
|
|
30
|
+
var _a;
|
|
31
|
+
if ((_a = this.item) === null || _a === void 0 ? void 0 : _a.value) {
|
|
32
|
+
this.fileInfo = this.item.value;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
removeFile() {
|
|
36
|
+
if (this.fileInfo) {
|
|
37
|
+
this.loading = true;
|
|
38
|
+
this.fileService.deleteFile(this.fileInfo).subscribe(() => {
|
|
39
|
+
this.loading = false;
|
|
40
|
+
this.fileInfo = undefined;
|
|
41
|
+
this.file.emit(undefined);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
MtnaWfFileUploadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfFileUploadComponent, deps: [{ token: i1.FileService }], target: i0.ɵɵFactoryTarget.Component });
|
|
47
|
+
MtnaWfFileUploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MtnaWfFileUploadComponent, selector: "mtna-wf-file-upload-item", inputs: { header: "header", indicatorStatus: "indicatorStatus", item: "item", readonly: "readonly" }, outputs: { file: "file" }, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"header\"></ng-container>\n\n<div class=\"content\" [mtnaHighlight]=\"indicatorStatus === 'ACTIVE' && !item?.questionText && !item?.descriptiveText\">\n <ng-container *ngIf=\"!readonly; else readOnly\">\n <ng-container *ngIf=\"!loading; else loader\">\n <mtna-file-download\n *ngIf=\"!!fileInfo; else fileUpload\"\n [fileInfo]=\"fileInfo\"\n [canRemove]=\"true\"\n color=\"primary\"\n [canDownload]=\"true\"\n (download)=\"handleDownload($event)\"\n (remove)=\"removeFile()\"\n ></mtna-file-download>\n\n <ng-template #fileUpload>\n <mtna-file-upload\n [automaticUpload]=\"false\"\n color=\"primary\"\n [buttonText]=\"'CHOOSE A FILE'\"\n (fileToUpload)=\"fileToUpload($event)\"\n ></mtna-file-upload>\n </ng-template>\n </ng-container>\n </ng-container>\n\n <!-- READONLY -->\n <ng-template #readOnly>\n <!-- anchor being used, due to <fieldset disabled> blocking a <button>'s click event -->\n <a\n *ngIf=\"!!item && !!item.value\"\n class=\"single-icon-button\"\n color=\"primary\"\n mat-stroked-button\n role=\"button\"\n (click)=\"handleDownload(item.value)\"\n >\n <mat-icon color=\"primary\">file_download</mat-icon>\n {{ (item!.value!.fileName ? item!.value!.fileName : '') | uppercase }}\n </a>\n </ng-template>\n</div>\n\n<!-- PROGRESS SPINNER -->\n<ng-template #loader>\n <mat-spinner diameter=\"125\" strokeWidth=\"10\" mode=\"indeterminate\"></mat-spinner>\n</ng-template>\n", styles: [":host{display:block;margin:1rem 0}mtna-file-download{margin:37px 0}mat-spinner{margin:0 87.5px}\n"], components: [{ type: i1.MtnaFileDownloadComponent, selector: "mtna-file-download", inputs: ["color", "canDownload", "canRemove", "fileInfo", "loading"], outputs: ["download", "remove"] }, { type: i1.MtnaFileUploadComponent, selector: "mtna-file-upload", inputs: ["automaticUpload", "buttonText", "buttonColor", "disabled", "fileUploadUrl", "isProd", "maxUploadSize", "uploading"], outputs: ["uploaded", "fileToUpload", "uploadStatus"] }, { type: i2.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i4.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.MtnaHighlightDirective, selector: "[mtnaHighlight]", inputs: ["mtnaHighlight", "mtnaHighlightColor"], exportAs: ["mtnaHighlight"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "uppercase": i5.UpperCasePipe } });
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfFileUploadComponent, decorators: [{
|
|
49
|
+
type: Component,
|
|
50
|
+
args: [{
|
|
51
|
+
selector: 'mtna-wf-file-upload-item',
|
|
52
|
+
templateUrl: './file-upload.component.html',
|
|
53
|
+
styleUrls: ['./file-upload.component.scss'],
|
|
54
|
+
}]
|
|
55
|
+
}], ctorParameters: function () { return [{ type: i1.FileService }]; }, propDecorators: { header: [{
|
|
56
|
+
type: Input
|
|
57
|
+
}], indicatorStatus: [{
|
|
58
|
+
type: Input
|
|
59
|
+
}], item: [{
|
|
60
|
+
type: Input
|
|
61
|
+
}], readonly: [{
|
|
62
|
+
type: Input
|
|
63
|
+
}], file: [{
|
|
64
|
+
type: Output
|
|
65
|
+
}] } });
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFlLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVk1RixNQUFNLE9BQU8seUJBQXlCO0lBV3BDLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBVm5DLFdBQU0sR0FBZ0MsSUFBSSxDQUFDO1FBQzNDLG9CQUFlLEdBQThCLFVBQVUsQ0FBQztRQUV4RCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWhCLFNBQUksR0FBRyxJQUFJLFlBQVksRUFBK0IsQ0FBQztRQUdqRSxZQUFPLEdBQUcsS0FBSyxDQUFDO0lBRStCLENBQUM7SUFFaEQsWUFBWSxDQUFDLElBQWM7UUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBeUIsRUFBRSxFQUFFO1lBQ3hFLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxRQUF5QjtRQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxRQUFROztRQUNOLElBQUksTUFBQSxJQUFJLENBQUMsSUFBSSwwQ0FBRSxLQUFLLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUNqQztJQUNILENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUN4RCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOzt1SEF6Q1UseUJBQXlCOzJHQUF6Qix5QkFBeUIsaU1DWnRDLG9rREErQ0E7NEZEbkNhLHlCQUF5QjtrQkFMckMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsMEJBQTBCO29CQUNwQyxXQUFXLEVBQUUsOEJBQThCO29CQUMzQyxTQUFTLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztpQkFDNUM7a0dBRVUsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUksSUFBSTtzQkFBYixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRmlsZUluZm9ybWF0aW9uIH0gZnJvbSAnQG10bmEvZmlsZS1tYW5hZ2VyLXRzJztcbmltcG9ydCB7IEZpbGVTZXJ2aWNlIH0gZnJvbSAnQG10bmEvZmlsZS1tYW5hZ2VyLWFuZ3VsYXInO1xuaW1wb3J0IHsgQW5ub3RhdGlvbkluZGljYXRvclN0YXR1cywgSW5kaWNhdG9yU3RhdHVzUmVwZWF0ZXIgfSBmcm9tICdAbXRuYS9wb2pvLXNvY2lhbC1hbmd1bGFyJztcbmltcG9ydCB7IEZpbGVVcGxvYWRJdGVtIH0gZnJvbSAnQG10bmEvd2ViLWZvcm0tdHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdG5hLXdmLWZpbGUtdXBsb2FkLWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZS11cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWxlLXVwbG9hZC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBNdG5hV2ZGaWxlVXBsb2FkQ29tcG9uZW50IGltcGxlbWVudHMgSW5kaWNhdG9yU3RhdHVzUmVwZWF0ZXIsIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGhlYWRlcjogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgaW5kaWNhdG9yU3RhdHVzOiBBbm5vdGF0aW9uSW5kaWNhdG9yU3RhdHVzID0gJ0lOQUNUSVZFJztcbiAgQElucHV0KCkgaXRlbTogRmlsZVVwbG9hZEl0ZW0gfCB1bmRlZmluZWQgfCBudWxsO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBmaWxlID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlSW5mb3JtYXRpb24gfCB1bmRlZmluZWQ+KCk7XG5cbiAgZmlsZUluZm8/OiBGaWxlSW5mb3JtYXRpb247XG4gIGxvYWRpbmcgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZpbGVTZXJ2aWNlOiBGaWxlU2VydmljZSkge31cblxuICBmaWxlVG9VcGxvYWQoZmlsZTogRmlsZUxpc3QpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsZVNlcnZpY2UudXBsb2FkRmlsZShmaWxlKS5zdWJzY3JpYmUoKGZpbGVJbmZvOiBGaWxlSW5mb3JtYXRpb24pID0+IHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5maWxlSW5mbyA9IGZpbGVJbmZvO1xuICAgICAgdGhpcy5maWxlLmVtaXQoZmlsZUluZm8pO1xuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlRG93bmxvYWQodGVtcGxhdGU6IEZpbGVJbmZvcm1hdGlvbikge1xuICAgIHRoaXMuZmlsZVNlcnZpY2UuZG93bmxvYWRGaWxlR0VUKHRlbXBsYXRlLmtleSwgdGVtcGxhdGUuZmlsZU5hbWUsIHRlbXBsYXRlLmNvbnRlbnRUeXBlKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLml0ZW0/LnZhbHVlKSB7XG4gICAgICB0aGlzLmZpbGVJbmZvID0gdGhpcy5pdGVtLnZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUZpbGUoKSB7XG4gICAgaWYgKHRoaXMuZmlsZUluZm8pIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmZpbGVTZXJ2aWNlLmRlbGV0ZUZpbGUodGhpcy5maWxlSW5mbykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlsZUluZm8gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZmlsZS5lbWl0KHVuZGVmaW5lZCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJcIj48L25nLWNvbnRhaW5lcj5cblxuPGRpdiBjbGFzcz1cImNvbnRlbnRcIiBbbXRuYUhpZ2hsaWdodF09XCJpbmRpY2F0b3JTdGF0dXMgPT09ICdBQ1RJVkUnICYmICFpdGVtPy5xdWVzdGlvblRleHQgJiYgIWl0ZW0/LmRlc2NyaXB0aXZlVGV4dFwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJlYWRvbmx5OyBlbHNlIHJlYWRPbmx5XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsb2FkaW5nOyBlbHNlIGxvYWRlclwiPlxuICAgICAgPG10bmEtZmlsZS1kb3dubG9hZFxuICAgICAgICAqbmdJZj1cIiEhZmlsZUluZm87IGVsc2UgZmlsZVVwbG9hZFwiXG4gICAgICAgIFtmaWxlSW5mb109XCJmaWxlSW5mb1wiXG4gICAgICAgIFtjYW5SZW1vdmVdPVwidHJ1ZVwiXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIFtjYW5Eb3dubG9hZF09XCJ0cnVlXCJcbiAgICAgICAgKGRvd25sb2FkKT1cImhhbmRsZURvd25sb2FkKCRldmVudClcIlxuICAgICAgICAocmVtb3ZlKT1cInJlbW92ZUZpbGUoKVwiXG4gICAgICA+PC9tdG5hLWZpbGUtZG93bmxvYWQ+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZmlsZVVwbG9hZD5cbiAgICAgICAgPG10bmEtZmlsZS11cGxvYWRcbiAgICAgICAgICBbYXV0b21hdGljVXBsb2FkXT1cImZhbHNlXCJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgIFtidXR0b25UZXh0XT1cIidDSE9PU0UgQSBGSUxFJ1wiXG4gICAgICAgICAgKGZpbGVUb1VwbG9hZCk9XCJmaWxlVG9VcGxvYWQoJGV2ZW50KVwiXG4gICAgICAgID48L210bmEtZmlsZS11cGxvYWQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIFJFQURPTkxZIC0tPlxuICA8bmctdGVtcGxhdGUgI3JlYWRPbmx5PlxuICAgIDwhLS0gYW5jaG9yIGJlaW5nIHVzZWQsIGR1ZSB0byA8ZmllbGRzZXQgZGlzYWJsZWQ+IGJsb2NraW5nIGEgPGJ1dHRvbj4ncyBjbGljayBldmVudCAtLT5cbiAgICA8YVxuICAgICAgKm5nSWY9XCIhIWl0ZW0gJiYgISFpdGVtLnZhbHVlXCJcbiAgICAgIGNsYXNzPVwic2luZ2xlLWljb24tYnV0dG9uXCJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICBtYXQtc3Ryb2tlZC1idXR0b25cbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cImhhbmRsZURvd25sb2FkKGl0ZW0udmFsdWUpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCI+ZmlsZV9kb3dubG9hZDwvbWF0LWljb24+XG4gICAgICB7eyAoaXRlbSEudmFsdWUhLmZpbGVOYW1lID8gaXRlbSEudmFsdWUhLmZpbGVOYW1lIDogJycpIHwgdXBwZXJjYXNlIH19XG4gICAgPC9hPlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG5cbjwhLS0gUFJPR1JFU1MgU1BJTk5FUiAtLT5cbjxuZy10ZW1wbGF0ZSAjbG9hZGVyPlxuICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCIxMjVcIiBzdHJva2VXaWR0aD1cIjEwXCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj48L21hdC1zcGlubmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './file-upload.component';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvZmlsZS11cGxvYWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZmlsZS11cGxvYWQuY29tcG9uZW50JztcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1mb3JtLWl0ZW0ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvZm9ybS9iYXNlLWZvcm0taXRlbS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBGb3JtSXRlbSB9IGZyb20gJ0BtdG5hL3dlYi1mb3JtLXRzJztcblxuLyoqXG4gKiBUaGUgQmFzaWMgc2V0dXAgZm9yIGEgRm9ybUl0ZW0uIEFueSBkeW5hbWljIGNvbXBvbmVudHMgdG8gYmUgcmVuZGVyZWQgc2hvdWxkXG4gKiBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UgdG8gZW5zdXJlIHRoZXkgY29udGFpbiB0aGUgbmVjZXNzYXJ5IGlucHV0cy5cbiAqXG4gKiBAcHJvcCBjb250cm9sIC0gQWJzdHJhY3RDb250cm9sIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAqIEBwcm9wIGl0ZW0gLSBGb3JtSXRlbVxuICogQHByb3AgcmVhZG9ubHkgLSBib29sZWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUZvcm1JdGVtIHtcbiAgY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgaXRlbTogRm9ybUl0ZW07XG4gIHJlYWRvbmx5OiBib29sZWFuO1xufVxuIl19
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/* eslint-disable @angular-eslint/component-selector */
|
|
2
|
+
import { Component, Input } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class MtnaWfFormDisablerComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.formDisabled = false;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
MtnaWfFormDisablerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfFormDisablerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10
|
+
MtnaWfFormDisablerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MtnaWfFormDisablerComponent, selector: "[formDisabled]", inputs: { formDisabled: "formDisabled" }, ngImport: i0, template: `
|
|
11
|
+
<fieldset [disabled]="formDisabled">
|
|
12
|
+
<ng-content></ng-content>
|
|
13
|
+
</fieldset>
|
|
14
|
+
`, isInline: true, styles: ["\n fieldset {\n display: block;\n margin: unset;\n padding: unset;\n border: unset;\n }\n "] });
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfFormDisablerComponent, decorators: [{
|
|
16
|
+
type: Component,
|
|
17
|
+
args: [{
|
|
18
|
+
selector: '[formDisabled]',
|
|
19
|
+
template: `
|
|
20
|
+
<fieldset [disabled]="formDisabled">
|
|
21
|
+
<ng-content></ng-content>
|
|
22
|
+
</fieldset>
|
|
23
|
+
`,
|
|
24
|
+
styles: [
|
|
25
|
+
`
|
|
26
|
+
fieldset {
|
|
27
|
+
display: block;
|
|
28
|
+
margin: unset;
|
|
29
|
+
padding: unset;
|
|
30
|
+
border: unset;
|
|
31
|
+
}
|
|
32
|
+
`,
|
|
33
|
+
],
|
|
34
|
+
}]
|
|
35
|
+
}], propDecorators: { formDisabled: [{
|
|
36
|
+
type: Input
|
|
37
|
+
}] } });
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kaXNhYmxlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvZm9ybS9mb3JtLWRpc2FibGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBb0JqRCxNQUFNLE9BQU8sMkJBQTJCO0lBbEJ4QztRQW1CVyxpQkFBWSxHQUFHLEtBQUssQ0FBQztLQUMvQjs7eUhBRlksMkJBQTJCOzZHQUEzQiwyQkFBMkIsZ0dBaEI1Qjs7OztHQUlUOzRGQVlVLDJCQUEyQjtrQkFsQnZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsUUFBUSxFQUFFOzs7O0dBSVQ7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOOzs7Ozs7O0tBT0M7cUJBQ0Y7aUJBQ0Y7OEJBRVUsWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3IgKi9cbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnW2Zvcm1EaXNhYmxlZF0nLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxmaWVsZHNldCBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCI+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9maWVsZHNldD5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgZmllbGRzZXQge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWFyZ2luOiB1bnNldDtcbiAgICAgICAgcGFkZGluZzogdW5zZXQ7XG4gICAgICAgIGJvcmRlcjogdW5zZXQ7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTXRuYVdmRm9ybURpc2FibGVyQ29tcG9uZW50IHtcbiAgQElucHV0KCkgZm9ybURpc2FibGVkID0gZmFsc2U7XG59XG4iXX0=
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Directive } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/* eslint-disable @angular-eslint/directive-selector */
|
|
4
|
+
/**
|
|
5
|
+
* Used to retrieve the host container for a dynamically rendered component.
|
|
6
|
+
*
|
|
7
|
+
* @export
|
|
8
|
+
*/
|
|
9
|
+
export class MtnaWfFormItemDirective {
|
|
10
|
+
constructor(viewContainerRef) {
|
|
11
|
+
this.viewContainerRef = viewContainerRef;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
MtnaWfFormItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfFormItemDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
15
|
+
MtnaWfFormItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: MtnaWfFormItemDirective, selector: "[formItemHost]", ngImport: i0 });
|
|
16
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfFormItemDirective, decorators: [{
|
|
17
|
+
type: Directive,
|
|
18
|
+
args: [{
|
|
19
|
+
selector: '[formItemHost]',
|
|
20
|
+
}]
|
|
21
|
+
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; } });
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pdGVtLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi9mb3JtL2Zvcm0taXRlbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxlQUFlLENBQUM7O0FBRTVELHVEQUF1RDtBQUN2RDs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLHVCQUF1QjtJQUNsQyxZQUFtQixnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtJQUFHLENBQUM7O3FIQUQ5Qyx1QkFBdUI7eUdBQXZCLHVCQUF1Qjs0RkFBdkIsdUJBQXVCO2tCQUhuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7aUJBQzNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3IgKi9cbi8qKlxuICogVXNlZCB0byByZXRyaWV2ZSB0aGUgaG9zdCBjb250YWluZXIgZm9yIGEgZHluYW1pY2FsbHkgcmVuZGVyZWQgY29tcG9uZW50LlxuICpcbiAqIEBleHBvcnRcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2Zvcm1JdGVtSG9zdF0nLFxufSlcbmV4cG9ydCBjbGFzcyBNdG5hV2ZGb3JtSXRlbURpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7fVxufVxuIl19
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation, } from '@angular/core';
|
|
3
|
+
import { mixinDestroyNotifier } from '@mtna/core-angular';
|
|
4
|
+
import { BehaviorSubject, Subscription } from 'rxjs';
|
|
5
|
+
import { distinctUntilChanged, skipWhile, takeUntil } from 'rxjs/operators';
|
|
6
|
+
import { findFormControl } from '../core/utilities/find-form-control';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "../core/services";
|
|
9
|
+
import * as i2 from "./form-disabler.component";
|
|
10
|
+
import * as i3 from "../groups/group-components";
|
|
11
|
+
import * as i4 from "@angular/common";
|
|
12
|
+
import * as i5 from "@angular/forms";
|
|
13
|
+
export class MtnaWfFormComponent extends mixinDestroyNotifier(class {
|
|
14
|
+
}) {
|
|
15
|
+
constructor(mtnaFormManager, ngFormService, uiService) {
|
|
16
|
+
super();
|
|
17
|
+
this.mtnaFormManager = mtnaFormManager;
|
|
18
|
+
this.ngFormService = ngFormService;
|
|
19
|
+
this.uiService = uiService;
|
|
20
|
+
this._emitStatusOnMtnaFormChange = false;
|
|
21
|
+
this.readonly$ = new BehaviorSubject(true);
|
|
22
|
+
/**
|
|
23
|
+
* Emitted every time a form control's validation status changes.
|
|
24
|
+
* The `id` is the form control's name and the `status` is the new validation status for the control.
|
|
25
|
+
*/
|
|
26
|
+
this.status = new EventEmitter();
|
|
27
|
+
this.focusedSection = new EventEmitter();
|
|
28
|
+
this.mtnaFormChange = new EventEmitter();
|
|
29
|
+
this.componentIds = [];
|
|
30
|
+
this._hasPreviousForm = false;
|
|
31
|
+
this._initialStatusEmitted = false;
|
|
32
|
+
this._constructionDate = new Date();
|
|
33
|
+
// Initialize the subscription to observe input changes
|
|
34
|
+
this._subscribeAndEmitMtnaFormChanges();
|
|
35
|
+
}
|
|
36
|
+
set annotations(map) {
|
|
37
|
+
this.uiService.registerAnnotations(map);
|
|
38
|
+
}
|
|
39
|
+
/** Whether to emit the status of each step each time the {@link mtnaForm} is set to a new value. Defaults to false.*/
|
|
40
|
+
get emitStatusOnMtnaFormChange() {
|
|
41
|
+
return this._emitStatusOnMtnaFormChange;
|
|
42
|
+
}
|
|
43
|
+
set emitStatusOnMtnaFormChange(emitStatusOnMtnaFormChange) {
|
|
44
|
+
this._emitStatusOnMtnaFormChange = coerceBooleanProperty(emitStatusOnMtnaFormChange);
|
|
45
|
+
}
|
|
46
|
+
get mtnaForm() {
|
|
47
|
+
return this._mtnaForm;
|
|
48
|
+
}
|
|
49
|
+
set mtnaForm(form) {
|
|
50
|
+
if (!!form && !this.ngForm) {
|
|
51
|
+
// serialize the form when input is set the first time
|
|
52
|
+
this._handleFormSerialization(form);
|
|
53
|
+
this._checkAndSubscribeToFormStatus();
|
|
54
|
+
}
|
|
55
|
+
this._mtnaForm = form;
|
|
56
|
+
if (form) {
|
|
57
|
+
this.mtnaFormManager.setMtnaForm(form);
|
|
58
|
+
// If indicated, re-emit the status of each step when there is a new form
|
|
59
|
+
if (this.emitStatusOnMtnaFormChange && this.ngForm) {
|
|
60
|
+
for (const key in this._steps) {
|
|
61
|
+
if (Object.prototype.hasOwnProperty.call(this._steps, key)) {
|
|
62
|
+
this._emitFormControlStatus(key);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* The form can contain sections not included in the steps.
|
|
70
|
+
* To avoid misalignment of steps-to-sections, we map each step to
|
|
71
|
+
* its instanceId
|
|
72
|
+
*/
|
|
73
|
+
set steps(newSteps) {
|
|
74
|
+
if (!!newSteps && !!newSteps.length) {
|
|
75
|
+
if (!this._steps) {
|
|
76
|
+
this._steps = {};
|
|
77
|
+
}
|
|
78
|
+
for (const step of newSteps) {
|
|
79
|
+
this._steps[step.instanceId] = step;
|
|
80
|
+
}
|
|
81
|
+
this._checkAndSubscribeToFormStatus();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
get readonly() {
|
|
85
|
+
return this.readonly$.value;
|
|
86
|
+
}
|
|
87
|
+
set readonly(r) {
|
|
88
|
+
const newValue = coerceBooleanProperty(r);
|
|
89
|
+
if (newValue !== this.readonly$.value) {
|
|
90
|
+
this.readonly$.next(r);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
ngAfterViewInit() {
|
|
94
|
+
const afterViewInitDate = new Date();
|
|
95
|
+
const secondsToRender = (afterViewInitDate.getTime() - this._constructionDate.getTime()) / 1000;
|
|
96
|
+
console.warn('[MtnaFormComponent] afterViewInit - took ', secondsToRender, ' to render');
|
|
97
|
+
}
|
|
98
|
+
ngOnDestroy() {
|
|
99
|
+
super.ngOnDestroy();
|
|
100
|
+
this.uiService.resetComponentMap();
|
|
101
|
+
}
|
|
102
|
+
_trackByInstanceId(index, formItem) {
|
|
103
|
+
return formItem.instanceId;
|
|
104
|
+
}
|
|
105
|
+
/** Subscribe and emit form status changes for the steps. */
|
|
106
|
+
_checkAndSubscribeToFormStatus() {
|
|
107
|
+
// Only subscribe once both the steps and the angular have been initialized
|
|
108
|
+
if (this.ngForm && this._steps) {
|
|
109
|
+
// Update form status subscriptions anytime the readonly input changes
|
|
110
|
+
this.readonly$.pipe(takeUntil(this.destroyed$), distinctUntilChanged()).subscribe((readonly) => {
|
|
111
|
+
if (readonly) {
|
|
112
|
+
// Don't emit statuses while form is in readonly
|
|
113
|
+
this._unsubscribeFromNgFormChanges();
|
|
114
|
+
}
|
|
115
|
+
else if (!this._ngFormStatusChangeSub || this._ngFormStatusChangeSub.closed) {
|
|
116
|
+
// For performance, subscribe should only trigger again if the subscription didn't previously exist
|
|
117
|
+
this._emitInitialStepsStatusAndSubscribeToChanges(!this._initialStatusEmitted);
|
|
118
|
+
this._initialStatusEmitted = true;
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Find a form control with the given name, then emit it's status.
|
|
125
|
+
*
|
|
126
|
+
* @param name — The unique name of the form cotrol to find and emit the status for.
|
|
127
|
+
*/
|
|
128
|
+
_emitFormControlStatus(name) {
|
|
129
|
+
if (this.ngForm) {
|
|
130
|
+
const control = findFormControl(name, this.ngForm);
|
|
131
|
+
if (control) {
|
|
132
|
+
this.status.emit({
|
|
133
|
+
id: name,
|
|
134
|
+
status: control.status,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* @param emitInitialValues Whether to emit initial step values or just listen for future changes
|
|
141
|
+
*/
|
|
142
|
+
_emitInitialStepsStatusAndSubscribeToChanges(emitInitialValues) {
|
|
143
|
+
if (this._steps && this.ngForm) {
|
|
144
|
+
this._unsubscribeFromNgFormChanges();
|
|
145
|
+
this._ngFormStatusChangeSub = new Subscription();
|
|
146
|
+
// Find the form control for each step and only subscribe to those.
|
|
147
|
+
for (const key in this._steps) {
|
|
148
|
+
if (Object.prototype.hasOwnProperty.call(this._steps, key)) {
|
|
149
|
+
const control = findFormControl(key, this.ngForm);
|
|
150
|
+
if (control) {
|
|
151
|
+
if (emitInitialValues) {
|
|
152
|
+
this.status.emit({
|
|
153
|
+
id: key,
|
|
154
|
+
// Angular introduced this status in v13, once we update, this type cast can be removed.
|
|
155
|
+
status: control.status,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
// Subscribe to status changes of each step & emit on change
|
|
159
|
+
this._ngFormStatusChangeSub.add(control.statusChanges
|
|
160
|
+
.pipe(takeUntil(this.destroyed$), distinctUntilChanged())
|
|
161
|
+
.subscribe((status) => this.status.emit({ id: key, status })));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Observes input changes for readOnly, in order to handle internal change subscriptions.
|
|
169
|
+
* When the form is not readonly, we subscribe to form status & form item changes, so we can emit them.
|
|
170
|
+
* When the form is readonly, we do not want to emit any changes, so we unsubscribe.
|
|
171
|
+
*/
|
|
172
|
+
_subscribeAndEmitMtnaFormChanges() {
|
|
173
|
+
this.readonly$
|
|
174
|
+
.pipe(takeUntil(this.destroyed$),
|
|
175
|
+
// we don't want to create subscriptions until we have a form to subscribe to
|
|
176
|
+
skipWhile(() => !this.mtnaForm), distinctUntilChanged())
|
|
177
|
+
.subscribe((readonly) => {
|
|
178
|
+
if (readonly) {
|
|
179
|
+
this._unsubscribeFromMtnaFormChanges();
|
|
180
|
+
}
|
|
181
|
+
else if (!this._mtnaFormItemChangeSub || this._mtnaFormItemChangeSub.closed) {
|
|
182
|
+
// For performance, subscribe should only trigger again if one of the subscriptions didn't previously exist
|
|
183
|
+
this._subscribeToMtnaFormItemChanges();
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
_handleFormSerialization(form) {
|
|
188
|
+
// Get the registered form from the service if it exists
|
|
189
|
+
this._hasPreviousForm = this.ngFormService.hasForm();
|
|
190
|
+
if (this._hasPreviousForm) {
|
|
191
|
+
this.ngForm = this.ngFormService.getForm();
|
|
192
|
+
// FIXME this is necessary because the initial visiblity is based on the mtnaForm item's disable property
|
|
193
|
+
// If the user changes a value, goes to another tab (destroying form) and comes back, the initial values are incorrect
|
|
194
|
+
this.mtnaForm = this.mtnaFormManager.insertNewValues(form, this.ngFormService.getFormValue());
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
this.ngForm = this.mtnaFormManager.serializeMtnaFormItem(form);
|
|
198
|
+
this.ngFormService.setForm(this.ngForm);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Adds or removes a FormItem whenever a new MtnaWfFormItemChange occurs,
|
|
203
|
+
* and emits a new MtnaForm.
|
|
204
|
+
*/
|
|
205
|
+
_subscribeToMtnaFormItemChanges() {
|
|
206
|
+
this._unsubscribeFromMtnaFormChanges();
|
|
207
|
+
this._mtnaFormItemChangeSub = this.mtnaFormManager.formChanges
|
|
208
|
+
.pipe(takeUntil(this.destroyed$), skipWhile((change) => !change))
|
|
209
|
+
.subscribe((newForm) => this.mtnaFormChange.emit(newForm));
|
|
210
|
+
}
|
|
211
|
+
_unsubscribeFromNgFormChanges() {
|
|
212
|
+
if (!!this._ngFormStatusChangeSub && !this._ngFormStatusChangeSub.closed) {
|
|
213
|
+
this._ngFormStatusChangeSub.unsubscribe();
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
_unsubscribeFromMtnaFormChanges() {
|
|
217
|
+
if (!!this._mtnaFormItemChangeSub && !this._mtnaFormItemChangeSub.closed) {
|
|
218
|
+
this._mtnaFormItemChangeSub.unsubscribe();
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
MtnaWfFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfFormComponent, deps: [{ token: i1.MtnaWfManagerService }, { token: i1.MtnaWfNgFormService }, { token: i1.MtnaWfUIService }], target: i0.ɵɵFactoryTarget.Component });
|
|
223
|
+
MtnaWfFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MtnaWfFormComponent, selector: "mtna-form", inputs: { annotations: "annotations", emitStatusOnMtnaFormChange: "emitStatusOnMtnaFormChange", mtnaForm: "mtnaForm", steps: "steps", readonly: "readonly" }, outputs: { status: "status", focusedSection: "focusedSection", mtnaFormChange: "mtnaFormChange" }, usesInheritance: true, ngImport: i0, template: "<form *ngIf=\"ngForm\" [formGroup]=\"ngForm\" [formDisabled]=\"readonly\">\n <mtna-wf-item\n *ngFor=\"let item of mtnaForm?.items; let index = index; trackBy: _trackByInstanceId\"\n [item]=\"item\"\n [control]=\"ngForm.controls[item.instanceId]\"\n [readonly]=\"readonly\"\n [parentIds]=\"componentIds\"\n [step]=\"_steps?.[item.instanceId]\"\n (focusedSection)=\"focusedSection.emit($event)\"\n ></mtna-wf-item>\n</form>\n", styles: ["mtna-form form{display:block}mtna-form form .mtna-wf-section{display:block;margin:32px 0}mtna-form form fieldset[disabled] .mtna-wf-item .mtna-wf-date-item .mat-form-field.mat-form-field-appearance-outline .mat-form-field-flex:hover .mat-form-field-outline{opacity:0}mtna-form form fieldset[disabled] .mtna-wf-item .mtna-wf-date-item .mat-form-field.mat-form-field-appearance-outline .mat-form-field-flex:hover .mat-form-field-outline-thick{opacity:1}mtna-form form fieldset[disabled] .mtna-wf-item .mtna-wf-date-item .mat-form-field.mat-form-field-appearance-outline .mat-form-field-flex:hover .mat-form-field-outline-thick .mat-form-field-outline-end,mtna-form form fieldset[disabled] .mtna-wf-item .mtna-wf-date-item .mat-form-field.mat-form-field-appearance-outline .mat-form-field-flex:hover .mat-form-field-outline-thick .mat-form-field-outline-gap,mtna-form form fieldset[disabled] .mtna-wf-item .mtna-wf-date-item .mat-form-field.mat-form-field-appearance-outline .mat-form-field-flex:hover .mat-form-field-outline-thick .mat-form-field-outline-start{border-width:1px}mtna-form form fieldset[disabled] .mtna-wf-item .mtna-wf-date-item .mat-form-field.mat-form-field-appearance-outline .mat-form-field-suffix .mat-datepicker-toggle .mat-icon-button{cursor:default}mtna-form .mtna-wf-item,mtna-form .mtna-wf-title{margin-top:1rem}mtna-form .mtna-wf-text{margin:.5rem 0;font-size:.9rem}mtna-form .mtna-wf-title-item,mtna-form .mtna-wf-text-item{margin:0}mtna-form mtna-annotations-indicator+mtna-wf-value-item .mtna-wf-title-item,mtna-form mtna-annotations-indicator+mtna-wf-value-item .mtna-wf-text-item{padding-right:24px}\n"], components: [{ type: i2.MtnaWfFormDisablerComponent, selector: "[formDisabled]", inputs: ["formDisabled"] }, { type: i3.MtnaWfFormItemComponent, selector: "mtna-wf-item", inputs: ["item", "readonly", "control", "parentIds", "step"], outputs: ["focusedSection"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
224
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfFormComponent, decorators: [{
|
|
225
|
+
type: Component,
|
|
226
|
+
args: [{
|
|
227
|
+
selector: 'mtna-form',
|
|
228
|
+
templateUrl: './form.component.html',
|
|
229
|
+
styleUrls: ['./form.component.scss'],
|
|
230
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
231
|
+
encapsulation: ViewEncapsulation.None,
|
|
232
|
+
}]
|
|
233
|
+
}], ctorParameters: function () { return [{ type: i1.MtnaWfManagerService }, { type: i1.MtnaWfNgFormService }, { type: i1.MtnaWfUIService }]; }, propDecorators: { annotations: [{
|
|
234
|
+
type: Input
|
|
235
|
+
}], emitStatusOnMtnaFormChange: [{
|
|
236
|
+
type: Input
|
|
237
|
+
}], mtnaForm: [{
|
|
238
|
+
type: Input
|
|
239
|
+
}], steps: [{
|
|
240
|
+
type: Input
|
|
241
|
+
}], readonly: [{
|
|
242
|
+
type: Input
|
|
243
|
+
}], status: [{
|
|
244
|
+
type: Output
|
|
245
|
+
}], focusedSection: [{
|
|
246
|
+
type: Output
|
|
247
|
+
}], mtnaFormChange: [{
|
|
248
|
+
type: Output
|
|
249
|
+
}] } });
|
|
250
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvZm9ybS9mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi9mb3JtL2Zvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQW9CLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7Ozs7QUFXdEUsTUFBTSxPQUFPLG1CQUFvQixTQUFRLG9CQUFvQixDQUFDO0NBQVEsQ0FBQztJQTZGckUsWUFDVSxlQUFxQyxFQUNyQyxhQUFrQyxFQUNsQyxTQUEwQjtRQUVsQyxLQUFLLEVBQUUsQ0FBQztRQUpBLG9CQUFlLEdBQWYsZUFBZSxDQUFzQjtRQUNyQyxrQkFBYSxHQUFiLGFBQWEsQ0FBcUI7UUFDbEMsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUEvRTVCLGdDQUEyQixHQUFHLEtBQUssQ0FBQztRQXdEcEMsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO1FBRXZEOzs7V0FHRztRQUNPLFdBQU0sR0FBRyxJ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L0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsV0FBVztvQkFDckIsV0FBVyxFQUFFLHVCQUF1QjtvQkFDcEMsU0FBUyxFQUFFLENBQUMsdUJBQXVCLENBQUM7b0JBQ3BDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtpQkFDdEM7MktBTUssV0FBVztzQkFEZCxLQUFLO2dCQU9GLDBCQUEwQjtzQkFEN0IsS0FBSztnQkFVRixRQUFRO3NCQURYLEtBQUs7Z0JBZ0NGLEtBQUs7c0JBRFIsS0FBSztnQkFjRixRQUFRO3NCQURYLEtBQUs7Z0JBZ0JJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBDYW5EZXN0cm95Tm90aWZ5LCBtaXhpbkRlc3Ryb3lOb3RpZmllciB9IGZyb20gJ0BtdG5hL2NvcmUtYW5ndWxhcic7XG5pbXBvcnQgeyBBbm5vdGF0YWJsZU51bWJlck1hcCB9IGZyb20gJ0BtdG5hL3Bvam8tc29jaWFsLWFuZ3VsYXInO1xuaW1wb3J0IHsgRm9ybSwgRm9ybUNvbnRyb2xTdGF0dXMsIEZvcm1JdGVtIH0gZnJvbSAnQG10bmEvd2ViLWZvcm0tdHMnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIHNraXBXaGlsZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBmaW5kRm9ybUNvbnRyb2wgfSBmcm9tICcuLi9jb3JlL3V0aWxpdGllcy9maW5kLWZvcm0tY29udHJvbCc7XG5pbXBvcnQgeyBNdG5hV2ZNYW5hZ2VyU2VydmljZSwgTXRuYVdmTmdGb3JtU2VydmljZSwgTXRuYVdmVUlTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBGb3JtU3RlcCB9IGZyb20gJy4uL2Zvcm0tc3RlcHBlci9tb2RlbHMvZm9ybS1zdGVwLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXRuYS1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBNdG5hV2ZGb3JtQ29tcG9uZW50IGV4dGVuZHMgbWl4aW5EZXN0cm95Tm90aWZpZXIoY2xhc3Mge30pIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgQ2FuRGVzdHJveU5vdGlmeSwgT25EZXN0cm95IHtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2VtaXRTdGF0dXNPbk10bmFGb3JtQ2hhbmdlOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZXNfcmVhZG9ubHk6IEJvb2xlYW5JbnB1dDtcblxuICBASW5wdXQoKVxuICBzZXQgYW5ub3RhdGlvbnMobWFwOiBBbm5vdGF0YWJsZU51bWJlck1hcCkge1xuICAgIHRoaXMudWlTZXJ2aWNlLnJlZ2lzdGVyQW5ub3RhdGlvbnMobWFwKTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRvIGVtaXQgdGhlIHN0YXR1cyBvZiBlYWNoIHN0ZXAgZWFjaCB0aW1lIHRoZSB7QGxpbmsgbXRuYUZvcm19IGlzIHNldCB0byBhIG5ldyB2YWx1ZS4gRGVmYXVsdHMgdG8gZmFsc2UuKi9cbiAgQElucHV0KClcbiAgZ2V0IGVtaXRTdGF0dXNPbk10bmFGb3JtQ2hhbmdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lbWl0U3RhdHVzT25NdG5hRm9ybUNoYW5nZTtcbiAgfVxuICBzZXQgZW1pdFN0YXR1c09uTXRuYUZvcm1DaGFuZ2UoZW1pdFN0YXR1c09uTXRuYUZvcm1DaGFuZ2U6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9lbWl0U3RhdHVzT25NdG5hRm9ybUNoYW5nZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShlbWl0U3RhdHVzT25NdG5hRm9ybUNoYW5nZSk7XG4gIH1cbiAgcHJpdmF0ZSBfZW1pdFN0YXR1c09uTXRuYUZvcm1DaGFuZ2UgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBnZXQgbXRuYUZvcm0oKTogRm9ybSB8IG51bGwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9tdG5hRm9ybTtcbiAgfVxuICBzZXQgbXRuYUZvcm0oZm9ybTogRm9ybSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoISFmb3JtICYmICF0aGlzLm5nRm9ybSkge1xuICAgICAgLy8gc2VyaWFsaXplIHRoZSBmb3JtIHdoZW4gaW5wdXQgaXMgc2V0IHRoZSBmaXJzdCB0aW1lXG4gICAgICB0aGlzLl9oYW5kbGVGb3JtU2VyaWFsaXphdGlvbihmb3JtKTtcbiAgICAgIHRoaXMuX2NoZWNrQW5kU3Vic2NyaWJlVG9Gb3JtU3RhdHVzKCk7XG4gICAgfVxuICAgIHRoaXMuX210bmFGb3JtID0gZm9ybTtcbiAgICBpZiAoZm9ybSkge1xuICAgICAgdGhpcy5tdG5hRm9ybU1hbmFnZXIuc2V0TXRuYUZvcm0oZm9ybSk7XG5cbiAgICAgIC8vIElmIGluZGljYXRlZCwgcmUtZW1pdCB0aGUgc3RhdHVzIG9mIGVhY2ggc3RlcCB3aGVuIHRoZXJlIGlzIGEgbmV3IGZvcm1cbiAgICAgIGlmICh0aGlzLmVtaXRTdGF0dXNPbk10bmFGb3JtQ2hhbmdlICYmIHRoaXMubmdGb3JtKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuX3N0ZXBzKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9zdGVwcywga2V5KSkge1xuICAgICAgICAgICAgdGhpcy5fZW1pdEZvcm1Db250cm9sU3RhdHVzKGtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX210bmFGb3JtOiBGb3JtIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGZvcm0gY2FuIGNvbnRhaW4gc2VjdGlvbnMgbm90IGluY2x1ZGVkIGluIHRoZSBzdGVwcy5cbiAgICogVG8gYXZvaWQgbWlzYWxpZ25tZW50IG9mIHN0ZXBzLXRvLXNlY3Rpb25zLCB3ZSBtYXAgZWFjaCBzdGVwIHRvXG4gICAqIGl0cyBpbnN0YW5jZUlkXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgc3RlcHMobmV3U3RlcHM6IEFycmF5PEZvcm1TdGVwPiB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoISFuZXdTdGVwcyAmJiAhIW5ld1N0ZXBzLmxlbmd0aCkge1xuICAgICAgaWYgKCF0aGlzLl9zdGVwcykge1xuICAgICAgICB0aGlzLl9zdGVwcyA9IHt9O1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBzdGVwIG9mIG5ld1N0ZXBzKSB7XG4gICAgICAgIHRoaXMuX3N0ZXBzW3N0ZXAuaW5zdGFuY2VJZF0gPSBzdGVwO1xuICAgICAgfVxuICAgICAgdGhpcy5fY2hlY2tBbmRTdWJzY3JpYmVUb0Zvcm1TdGF0dXMoKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHkkLnZhbHVlO1xuICB9XG4gIHNldCByZWFkb25seShyOiBib29sZWFuKSB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkocik7XG4gICAgaWYgKG5ld1ZhbHVlICE9PSB0aGlzLnJlYWRvbmx5JC52YWx1ZSkge1xuICAgICAgdGhpcy5yZWFkb25seSQubmV4dChyKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuXG4gIC8qKlxuICAgKiBFbWl0dGVkIGV2ZXJ5IHRpbWUgYSBmb3JtIGNvbnRyb2wncyB2YWxpZGF0aW9uIHN0YXR1cyBjaGFuZ2VzLlxuICAgKiBUaGUgYGlkYCBpcyB0aGUgZm9ybSBjb250cm9sJ3MgbmFtZSBhbmQgdGhlIGBzdGF0dXNgIGlzIHRoZSBuZXcgdmFsaWRhdGlvbiBzdGF0dXMgZm9yIHRoZSBjb250cm9sLlxuICAgKi9cbiAgQE91dHB1dCgpIHN0YXR1cyA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpZDogc3RyaW5nOyBzdGF0dXM6IEZvcm1Db250cm9sU3RhdHVzIH0+KCk7XG4gIEBPdXRwdXQoKSBmb2N1c2VkU2VjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybVN0ZXA+KCk7XG4gIEBPdXRwdXQoKSBtdG5hRm9ybUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybT4oKTtcblxuICBuZ0Zvcm06IEZvcm1Hcm91cCB8IHVuZGVmaW5lZDtcbiAgY29tcG9uZW50SWRzID0gW107XG4gIF9zdGVwczogeyBbaWQ6IHN0cmluZ106IEZvcm1TdGVwIH0gfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBfY29uc3RydWN0aW9uRGF0ZTogRGF0ZTtcbiAgcHJpdmF0ZSBfaGFzUHJldmlvdXNGb3JtID0gZmFsc2U7XG4gIHByaXZhdGUgX25nRm9ybVN0YXR1c0NoYW5nZVN1Yj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfbXRuYUZvcm1JdGVtQ2hhbmdlU3ViPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9pbml0aWFsU3RhdHVzRW1pdHRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbXRuYUZvcm1NYW5hZ2VyOiBNdG5hV2ZNYW5hZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIG5nRm9ybVNlcnZpY2U6IE10bmFXZk5nRm9ybVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1aVNlcnZpY2U6IE10bmFXZlVJU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2NvbnN0cnVjdGlvbkRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIC8vIEluaXRpYWxpemUgdGhlIHN1YnNjcmlwdGlvbiB0byBvYnNlcnZlIGlucHV0IGNoYW5nZXNcbiAgICB0aGlzLl9zdWJzY3JpYmVBbmRFbWl0TXRuYUZvcm1DaGFuZ2VzKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29uc3QgYWZ0ZXJWaWV3SW5pdERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IHNlY29uZHNUb1JlbmRlciA9IChhZnRlclZpZXdJbml0RGF0ZS5nZXRUaW1lKCkgLSB0aGlzLl9jb25zdHJ1Y3Rpb25EYXRlLmdldFRpbWUoKSkgLyAxMDAwO1xuICAgIGNvbnNvbGUud2FybignW010bmFGb3JtQ29tcG9uZW50XSBhZnRlclZpZXdJbml0IC0gdG9vayAnLCBzZWNvbmRzVG9SZW5kZXIsICcgdG8gcmVuZGVyJyk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMudWlTZXJ2aWNlLnJlc2V0Q29tcG9uZW50TWFwKCk7XG4gIH1cblxuICBfdHJhY2tCeUluc3RhbmNlSWQoaW5kZXg6IG51bWJlciwgZm9ybUl0ZW06IEZvcm1JdGVtKSB7XG4gICAgcmV0dXJuIGZvcm1JdGVtLmluc3RhbmNlSWQ7XG4gIH1cblxuICAvKiogU3Vic2NyaWJlIGFuZCBlbWl0IGZvcm0gc3RhdHVzIGNoYW5nZXMgZm9yIHRoZSBzdGVwcy4gKi9cbiAgcHJpdmF0ZSBfY2hlY2tBbmRTdWJzY3JpYmVUb0Zvcm1TdGF0dXMoKSB7XG4gICAgLy8gT25seSBzdWJzY3JpYmUgb25jZSBib3RoIHRoZSBzdGVwcyBhbmQgdGhlIGFuZ3VsYXIgaGF2ZSBiZWVuIGluaXRpYWxpemVkXG4gICAgaWYgKHRoaXMubmdGb3JtICYmIHRoaXMuX3N0ZXBzKSB7XG4gICAgICAvLyBVcGRhdGUgZm9ybSBzdGF0dXMgc3Vic2NyaXB0aW9ucyBhbnl0aW1lIHRoZSByZWFkb25seSBpbnB1dCBjaGFuZ2VzXG4gICAgICB0aGlzLnJlYWRvbmx5JC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKS5zdWJzY3JpYmUoKHJlYWRvbmx5KSA9PiB7XG4gICAgICAgIGlmIChyZWFkb25seSkge1xuICAgICAgICAgIC8vIERvbid0IGVtaXQgc3RhdHVzZXMgd2hpbGUgZm9ybSBpcyBpbiByZWFkb25seVxuICAgICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRnJvbU5nRm9ybUNoYW5nZXMoKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5fbmdGb3JtU3RhdHVzQ2hhbmdlU3ViIHx8IHRoaXMuX25nRm9ybVN0YXR1c0NoYW5nZVN1Yi5jbG9zZWQpIHtcbiAgICAgICAgICAvLyBGb3IgcGVyZm9ybWFuY2UsIHN1YnNjcmliZSBzaG91bGQgb25seSB0cmlnZ2VyIGFnYWluIGlmIHRoZSBzdWJzY3JpcHRpb24gZGlkbid0IHByZXZpb3VzbHkgZXhpc3RcbiAgICAgICAgICB0aGlzLl9lbWl0SW5pdGlhbFN0ZXBzU3RhdHVzQW5kU3Vic2NyaWJlVG9DaGFuZ2VzKCF0aGlzLl9pbml0aWFsU3RhdHVzRW1pdHRlZCk7XG4gICAgICAgICAgdGhpcy5faW5pdGlhbFN0YXR1c0VtaXR0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIGZvcm0gY29udHJvbCB3aXRoIHRoZSBnaXZlbiBuYW1lLCB0aGVuIGVtaXQgaXQncyBzdGF0dXMuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIOKAlCBUaGUgdW5pcXVlIG5hbWUgb2YgdGhlIGZvcm0gY290cm9sIHRvIGZpbmQgYW5kIGVtaXQgdGhlIHN0YXR1cyBmb3IuXG4gICAqL1xuICBwcml2YXRlIF9lbWl0Rm9ybUNvbnRyb2xTdGF0dXMobmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMubmdGb3JtKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gZmluZEZvcm1Db250cm9sKG5hbWUsIHRoaXMubmdGb3JtKTtcbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgIHRoaXMuc3RhdHVzLmVtaXQoe1xuICAgICAgICAgIGlkOiBuYW1lLFxuICAgICAgICAgIHN0YXR1czogY29udHJvbC5zdGF0dXMgYXMgRm9ybUNvbnRyb2xTdGF0dXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gZW1pdEluaXRpYWxWYWx1ZXMgV2hldGhlciB0byBlbWl0IGluaXRpYWwgc3RlcCB2YWx1ZXMgb3IganVzdCBsaXN0ZW4gZm9yIGZ1dHVyZSBjaGFuZ2VzXG4gICAqL1xuICBwcml2YXRlIF9lbWl0SW5pdGlhbFN0ZXBzU3RhdHVzQW5kU3Vic2NyaWJlVG9DaGFuZ2VzKGVtaXRJbml0aWFsVmFsdWVzOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuX3N0ZXBzICYmIHRoaXMubmdGb3JtKSB7XG4gICAgICB0aGlzLl91bnN1YnNjcmliZUZyb21OZ0Zvcm1DaGFuZ2VzKCk7XG4gICAgICB0aGlzLl9uZ0Zvcm1TdGF0dXNDaGFuZ2VTdWIgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAgIC8vIEZpbmQgdGhlIGZvcm0gY29udHJvbCBmb3IgZWFjaCBzdGVwIGFuZCBvbmx5IHN1YnNjcmliZSB0byB0aG9zZS5cbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuX3N0ZXBzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fc3RlcHMsIGtleSkpIHtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gZmluZEZvcm1Db250cm9sKGtleSwgdGhpcy5uZ0Zvcm0pO1xuICAgICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICBpZiAoZW1pdEluaXRpYWxWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgdGhpcy5zdGF0dXMuZW1pdCh7XG4gICAgICAgICAgICAgICAgaWQ6IGtleSxcbiAgICAgICAgICAgICAgICAvLyBBbmd1bGFyIGludHJvZHVjZWQgdGhpcyBzdGF0dXMgaW4gdjEzLCBvbmNlIHdlIHVwZGF0ZSwgdGhpcyB0eXBlIGNhc3QgY2FuIGJlIHJlbW92ZWQuXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBjb250cm9sLnN0YXR1cyBhcyBGb3JtQ29udHJvbFN0YXR1cyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gc3RhdHVzIGNoYW5nZXMgb2YgZWFjaCBzdGVwICYgZW1pdCBvbiBjaGFuZ2VcbiAgICAgICAgICAgIHRoaXMuX25nRm9ybVN0YXR1c0NoYW5nZVN1Yi5hZGQoXG4gICAgICAgICAgICAgIGNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHN0YXR1cykgPT4gdGhpcy5zdGF0dXMuZW1pdCh7IGlkOiBrZXksIHN0YXR1cyB9KSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9ic2VydmVzIGlucHV0IGNoYW5nZXMgZm9yIHJlYWRPbmx5LCBpbiBvcmRlciB0byBoYW5kbGUgaW50ZXJuYWwgY2hhbmdlIHN1YnNjcmlwdGlvbnMuXG4gICAqIFdoZW4gdGhlIGZvcm0gaXMgbm90IHJlYWRvbmx5LCB3ZSBzdWJzY3JpYmUgdG8gZm9ybSBzdGF0dXMgJiBmb3JtIGl0ZW0gY2hhbmdlcywgc28gd2UgY2FuIGVtaXQgdGhlbS5cbiAgICogV2hlbiB0aGUgZm9ybSBpcyByZWFkb25seSwgd2UgZG8gbm90IHdhbnQgdG8gZW1pdCBhbnkgY2hhbmdlcywgc28gd2UgdW5zdWJzY3JpYmUuXG4gICAqL1xuICBwcml2YXRlIF9zdWJzY3JpYmVBbmRFbWl0TXRuYUZvcm1DaGFuZ2VzKCkge1xuICAgIHRoaXMucmVhZG9ubHkkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksXG4gICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gY3JlYXRlIHN1YnNjcmlwdGlvbnMgdW50aWwgd2UgaGF2ZSBhIGZvcm0gdG8gc3Vic2NyaWJlIHRvXG4gICAgICAgIHNraXBXaGlsZSgoKSA9PiAhdGhpcy5tdG5hRm9ybSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHJlYWRvbmx5KSA9PiB7XG4gICAgICAgIGlmIChyZWFkb25seSkge1xuICAgICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRnJvbU10bmFGb3JtQ2hhbmdlcygpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9tdG5hRm9ybUl0ZW1DaGFuZ2VTdWIgfHwgdGhpcy5fbXRuYUZvcm1JdGVtQ2hhbmdlU3ViLmNsb3NlZCkge1xuICAgICAgICAgIC8vIEZvciBwZXJmb3JtYW5jZSwgc3Vic2NyaWJlIHNob3VsZCBvbmx5IHRyaWdnZXIgYWdhaW4gaWYgb25lIG9mIHRoZSBzdWJzY3JpcHRpb25zIGRpZG4ndCBwcmV2aW91c2x5IGV4aXN0XG4gICAgICAgICAgdGhpcy5fc3Vic2NyaWJlVG9NdG5hRm9ybUl0ZW1DaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlRm9ybVNlcmlhbGl6YXRpb24oZm9ybTogRm9ybSkge1xuICAgIC8vIEdldCB0aGUgcmVnaXN0ZXJlZCBmb3JtIGZyb20gdGhlIHNlcnZpY2UgaWYgaXQgZXhpc3RzXG4gICAgdGhpcy5faGFzUHJldmlvdXNGb3JtID0gdGhpcy5uZ0Zvcm1TZXJ2aWNlLmhhc0Zvcm0oKTtcbiAgICBpZiAodGhpcy5faGFzUHJldmlvdXNGb3JtKSB7XG4gICAgICB0aGlzLm5nRm9ybSA9IHRoaXMubmdGb3JtU2VydmljZS5nZXRGb3JtKCk7XG4gICAgICAvLyBGSVhNRSB0aGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBpbml0aWFsIHZpc2libGl0eSBpcyBiYXNlZCBvbiB0aGUgbXRuYUZvcm0gaXRlbSdzIGRpc2FibGUgcHJvcGVydHlcbiAgICAgIC8vIElmIHRoZSB1c2VyIGNoYW5nZXMgYSB2YWx1ZSwgZ29lcyB0byBhbm90aGVyIHRhYiAoZGVzdHJveWluZyBmb3JtKSBhbmQgY29tZXMgYmFjaywgdGhlIGluaXRpYWwgdmFsdWVzIGFyZSBpbmNvcnJlY3RcbiAgICAgIHRoaXMubXRuYUZvcm0gPSB0aGlzLm10bmFGb3JtTWFuYWdlci5pbnNlcnROZXdWYWx1ZXMoZm9ybSwgdGhpcy5uZ0Zvcm1TZXJ2aWNlLmdldEZvcm1WYWx1ZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uZ0Zvcm0gPSB0aGlzLm10bmFGb3JtTWFuYWdlci5zZXJpYWxpemVNdG5hRm9ybUl0ZW0oZm9ybSkgYXMgRm9ybUdyb3VwO1xuICAgICAgdGhpcy5uZ0Zvcm1TZXJ2aWNlLnNldEZvcm0odGhpcy5uZ0Zvcm0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIG9yIHJlbW92ZXMgYSBGb3JtSXRlbSB3aGVuZXZlciBhIG5ldyBNdG5hV2ZGb3JtSXRlbUNoYW5nZSBvY2N1cnMsXG4gICAqIGFuZCBlbWl0cyBhIG5ldyBNdG5hRm9ybS5cbiAgICovXG4gIHByaXZhdGUgX3N1YnNjcmliZVRvTXRuYUZvcm1JdGVtQ2hhbmdlcygpIHtcbiAgICB0aGlzLl91bnN1YnNjcmliZUZyb21NdG5hRm9ybUNoYW5nZXMoKTtcbiAgICB0aGlzLl9tdG5hRm9ybUl0ZW1DaGFuZ2VTdWIgPSB0aGlzLm10bmFGb3JtTWFuYWdlci5mb3JtQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLFxuICAgICAgICBza2lwV2hpbGUoKGNoYW5nZSkgPT4gIWNoYW5nZSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKG5ld0Zvcm06IEZvcm0pID0+IHRoaXMubXRuYUZvcm1DaGFuZ2UuZW1pdChuZXdGb3JtKSk7XG4gIH1cblxuICBwcml2YXRlIF91bnN1YnNjcmliZUZyb21OZ0Zvcm1DaGFuZ2VzKCkge1xuICAgIGlmICghIXRoaXMuX25nRm9ybVN0YXR1c0NoYW5nZVN1YiAmJiAhdGhpcy5fbmdGb3JtU3RhdHVzQ2hhbmdlU3ViLmNsb3NlZCkge1xuICAgICAgdGhpcy5fbmdGb3JtU3RhdHVzQ2hhbmdlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVGcm9tTXRuYUZvcm1DaGFuZ2VzKCkge1xuICAgIGlmICghIXRoaXMuX210bmFGb3JtSXRlbUNoYW5nZVN1YiAmJiAhdGhpcy5fbXRuYUZvcm1JdGVtQ2hhbmdlU3ViLmNsb3NlZCkge1xuICAgICAgdGhpcy5fbXRuYUZvcm1JdGVtQ2hhbmdlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59XG4iLCI8Zm9ybSAqbmdJZj1cIm5nRm9ybVwiIFtmb3JtR3JvdXBdPVwibmdGb3JtXCIgW2Zvcm1EaXNhYmxlZF09XCJyZWFkb25seVwiPlxuICA8bXRuYS13Zi1pdGVtXG4gICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbXRuYUZvcm0/Lml0ZW1zOyBsZXQgaW5kZXggPSBpbmRleDsgdHJhY2tCeTogX3RyYWNrQnlJbnN0YW5jZUlkXCJcbiAgICBbaXRlbV09XCJpdGVtXCJcbiAgICBbY29udHJvbF09XCJuZ0Zvcm0uY29udHJvbHNbaXRlbS5pbnN0YW5jZUlkXVwiXG4gICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICBbcGFyZW50SWRzXT1cImNvbXBvbmVudElkc1wiXG4gICAgW3N0ZXBdPVwiX3N0ZXBzPy5baXRlbS5pbnN0YW5jZUlkXVwiXG4gICAgKGZvY3VzZWRTZWN0aW9uKT1cImZvY3VzZWRTZWN0aW9uLmVtaXQoJGV2ZW50KVwiXG4gID48L210bmEtd2YtaXRlbT5cbjwvZm9ybT5cbiJdfQ==
|