@stemy/ngx-dynamic-form 10.2.18 → 10.2.22

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.
Files changed (32) hide show
  1. package/README.md +27 -27
  2. package/bundles/stemy-ngx-dynamic-form.umd.js +1400 -1390
  3. package/bundles/stemy-ngx-dynamic-form.umd.js.map +1 -1
  4. package/bundles/stemy-ngx-dynamic-form.umd.min.js +1 -1
  5. package/bundles/stemy-ngx-dynamic-form.umd.min.js.map +1 -1
  6. package/esm2015/ngx-dynamic-form/common-types.js +134 -134
  7. package/esm2015/ngx-dynamic-form/components/base/dynamic-base-form-control-container.component.js +91 -91
  8. package/esm2015/ngx-dynamic-form/components/base/dynamic-base-form.component.js +129 -129
  9. package/esm2015/ngx-dynamic-form/directives/async-submit.directive.js +100 -100
  10. package/esm2015/ngx-dynamic-form/ngx-dynamic-form.module.js +82 -82
  11. package/esm2015/ngx-dynamic-form/services/dynamic-form-validation.service.js +11 -11
  12. package/esm2015/ngx-dynamic-form/services/dynamic-form.service.js +393 -383
  13. package/esm2015/ngx-dynamic-form/utils/dynamic-form-array.model.js +8 -8
  14. package/esm2015/ngx-dynamic-form/utils/form-subject.js +18 -18
  15. package/esm2015/ngx-dynamic-form/utils/validators.js +28 -28
  16. package/esm2015/public_api.js +9 -9
  17. package/esm2015/stemy-ngx-dynamic-form.js +6 -6
  18. package/fesm2015/stemy-ngx-dynamic-form.js +936 -926
  19. package/fesm2015/stemy-ngx-dynamic-form.js.map +1 -1
  20. package/ngx-dynamic-form/common-types.d.ts +148 -148
  21. package/ngx-dynamic-form/components/base/dynamic-base-form-control-container.component.d.ts +37 -37
  22. package/ngx-dynamic-form/components/base/dynamic-base-form.component.d.ts +37 -37
  23. package/ngx-dynamic-form/directives/async-submit.directive.d.ts +27 -27
  24. package/ngx-dynamic-form/ngx-dynamic-form.module.d.ts +10 -10
  25. package/ngx-dynamic-form/services/dynamic-form-validation.service.d.ts +5 -5
  26. package/ngx-dynamic-form/services/dynamic-form.service.d.ts +40 -40
  27. package/ngx-dynamic-form/utils/dynamic-form-array.model.d.ts +12 -12
  28. package/ngx-dynamic-form/utils/form-subject.d.ts +8 -8
  29. package/ngx-dynamic-form/utils/validators.d.ts +4 -4
  30. package/package.json +12 -12
  31. package/public_api.d.ts +8 -8
  32. package/stemy-ngx-dynamic-form.d.ts +6 -6
@@ -1,129 +1,129 @@
1
- import { __awaiter } from "tslib";
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, EventEmitter, Inject, Input, Output, QueryList, ViewChild, ViewChildren } from "@angular/core";
3
- import { NgForm } from "@angular/forms";
4
- import { Subscription } from "rxjs";
5
- import { first } from "rxjs/operators";
6
- import { DynamicFormComponent, DynamicFormComponentService, DynamicTemplateDirective } from "@ng-dynamic-forms/core";
7
- import { EventsService, ObservableUtils } from "@stemy/ngx-utils";
8
- import { DynamicFormService } from "../../services/dynamic-form.service";
9
- export class DynamicBaseFormComponent extends DynamicFormComponent {
10
- constructor(formService, events, changeDetectorRef, componentService) {
11
- super(changeDetectorRef, componentService);
12
- this.formService = formService;
13
- this.events = events;
14
- this.blur = new EventEmitter();
15
- this.change = new EventEmitter();
16
- this.focus = new EventEmitter();
17
- this.onStatusChange = new EventEmitter();
18
- this.onValueChange = new EventEmitter();
19
- this.onSubmit = new EventEmitter();
20
- this.templates = new QueryList();
21
- this.subscription = new Subscription();
22
- this.groupSubscription = new Subscription();
23
- this.labelPrefix = "label";
24
- }
25
- get status() {
26
- return !this.group ? null : this.group.status;
27
- }
28
- ngOnChanges(changes) {
29
- this.groupSubscription.unsubscribe();
30
- if (this.group) {
31
- this.groupSubscription = ObservableUtils.multiSubscription(this.group.statusChanges.subscribe(() => {
32
- this.onStatusChange.emit(this);
33
- }), this.group.valueChanges.subscribe(() => {
34
- this.onValueChange.emit(this);
35
- this.formService.notifyChanges(this.model, this.group);
36
- }));
37
- }
38
- }
39
- ngAfterViewInit() {
40
- this.subscription = ObservableUtils.multiSubscription(ObservableUtils.subscribe({
41
- subjects: [this.contentTemplates.changes, this.viewTemplates.changes],
42
- cb: () => {
43
- const templates = this.contentTemplates.toArray().concat(this.viewTemplates.toArray());
44
- this.templates.reset(templates);
45
- }
46
- }), this.events.languageChanged.subscribe(() => {
47
- this.formService.detectChanges(this);
48
- }), this.ngForm.ngSubmit.subscribe(() => {
49
- this.onSubmit.emit(this);
50
- }));
51
- }
52
- ngOnDestroy() {
53
- super.ngOnDestroy();
54
- this.subscription.unsubscribe();
55
- this.groupSubscription.unsubscribe();
56
- }
57
- insertFormArrayGroup(index, formArray, formArrayModel) {
58
- this.formService.insertFormArrayGroup(index, formArray, formArrayModel);
59
- this.changeDetectorRef.detectChanges();
60
- }
61
- removeFormArrayGroup(index, formArray, formArrayModel) {
62
- this.formService.removeFormArrayGroup(index, formArray, formArrayModel);
63
- this.changeDetectorRef.detectChanges();
64
- }
65
- moveFormArrayGroup(index, step, formArray, formArrayModel) {
66
- this.formService.moveFormArrayGroup(index, step, formArray, formArrayModel);
67
- this.changeDetectorRef.detectChanges();
68
- }
69
- clearFormArray(formArray, formArrayModel) {
70
- this.formService.clearFormArray(formArray, formArrayModel);
71
- this.changeDetectorRef.detectChanges();
72
- }
73
- validate(showErrors = true) {
74
- if (!this.group)
75
- return Promise.resolve();
76
- return new Promise((resolve, reject) => {
77
- this.group.statusChanges.pipe(first(status => status == "VALID" || status == "INVALID")).subscribe(status => {
78
- if (showErrors) {
79
- this.formService.showErrors(this);
80
- }
81
- if (status == "VALID") {
82
- resolve(null);
83
- return;
84
- }
85
- reject(null);
86
- });
87
- this.group.updateValueAndValidity();
88
- });
89
- }
90
- serialize(validate) {
91
- return __awaiter(this, void 0, void 0, function* () {
92
- if (!this.group)
93
- return null;
94
- if (validate) {
95
- yield this.validate();
96
- }
97
- return yield this.formService.serialize(this.model, this.group);
98
- });
99
- }
100
- }
101
- DynamicBaseFormComponent.decorators = [
102
- { type: Component, args: [{
103
- selector: "dynamic-base-form",
104
- template: "",
105
- changeDetection: ChangeDetectionStrategy.Default
106
- },] }
107
- ];
108
- DynamicBaseFormComponent.ctorParameters = () => [
109
- { type: DynamicFormService, decorators: [{ type: Inject, args: [DynamicFormService,] }] },
110
- { type: EventsService, decorators: [{ type: Inject, args: [EventsService,] }] },
111
- { type: ChangeDetectorRef },
112
- { type: DynamicFormComponentService }
113
- ];
114
- DynamicBaseFormComponent.propDecorators = {
115
- group: [{ type: Input }],
116
- model: [{ type: Input }],
117
- layout: [{ type: Input }],
118
- labelPrefix: [{ type: Input }],
119
- blur: [{ type: Output }],
120
- change: [{ type: Output }],
121
- focus: [{ type: Output }],
122
- contentTemplates: [{ type: ContentChildren, args: [DynamicTemplateDirective,] }],
123
- viewTemplates: [{ type: ViewChildren, args: [DynamicTemplateDirective,] }],
124
- onStatusChange: [{ type: Output }],
125
- onValueChange: [{ type: Output }],
126
- onSubmit: [{ type: Output }],
127
- ngForm: [{ type: ViewChild, args: [NgForm,] }]
128
- };
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1iYXNlLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL25neC1keW5hbWljLWZvcm0vY29tcG9uZW50cy9iYXNlL2R5bmFtaWMtYmFzZS1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFDZixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNNLFNBQVMsRUFDeEIsWUFBWSxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBdUIsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUVILG9CQUFvQixFQUNwQiwyQkFBMkIsRUFJM0Isd0JBQXdCLEVBQzNCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUVoRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQU92RSxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsb0JBQW9CO0lBMkI5RCxZQUFpRCxXQUErQixFQUNwQyxNQUFxQixFQUNyRCxpQkFBb0MsRUFDcEMsZ0JBQTZDO1FBQ3JELEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBSkUsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQ3BDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFJN0QsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFlBQVksRUFBMkIsQ0FBQztRQUN4RCxJQUFJLENBQUMsTUFBTSxHQUFHLElB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QUFZLFNBQUMsd0JBQXdCOzZCQU1yQyxNQUFNOzRCQUNOLE1BQU07dUJBQ04sTUFBTTtxQkFFTixTQUFTLFNBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlblxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtGb3JtQXJyYXksIEZvcm1Hcm91cCwgTmdGb3JtfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtmaXJzdH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQge1xuICAgIER5bmFtaWNGb3JtQXJyYXlNb2RlbCxcbiAgICBEeW5hbWljRm9ybUNvbXBvbmVudCxcbiAgICBEeW5hbWljRm9ybUNvbXBvbmVudFNlcnZpY2UsXG4gICAgRHluYW1pY0Zvcm1Db250cm9sRXZlbnQsXG4gICAgRHluYW1pY0Zvcm1MYXlvdXQsXG4gICAgRHluYW1pY0Zvcm1Nb2RlbCxcbiAgICBEeW5hbWljVGVtcGxhdGVEaXJlY3RpdmVcbn0gZnJvbSBcIkBuZy1keW5hbWljLWZvcm1zL2NvcmVcIjtcbmltcG9ydCB7RXZlbnRzU2VydmljZSwgT2JzZXJ2YWJsZVV0aWxzfSBmcm9tIFwiQHN0ZW15L25neC11dGlsc1wiO1xuaW1wb3J0IHtEeW5hbWljRm9ybVN0YXRlLCBJRHluYW1pY0Zvcm0sIElEeW5hbWljRm9ybUJhc2V9IGZyb20gXCIuLi8uLi9jb21tb24tdHlwZXNcIjtcbmltcG9ydCB7RHluYW1pY0Zvcm1TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZHluYW1pYy1mb3JtLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwiZHluYW1pYy1iYXNlLWZvcm1cIixcbiAgICB0ZW1wbGF0ZTogXCJcIixcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LkRlZmF1bHRcbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY0Jhc2VGb3JtQ29tcG9uZW50IGV4dGVuZHMgRHluYW1pY0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIElEeW5hbWljRm9ybSB7XG5cbiAgICBASW5wdXQoKSBncm91cDogRm9ybUdyb3VwO1xuICAgIEBJbnB1dCgpIG1vZGVsOiBEeW5hbWljRm9ybU1vZGVsO1xuICAgIEBJbnB1dCgpIGxheW91dDogRHluYW1pY0Zvcm1MYXlvdXQ7XG4gICAgQElucHV0KCkgbGFiZWxQcmVmaXg6IHN0cmluZztcblxuICAgIEBPdXRwdXQoKSBibHVyOiBFdmVudEVtaXR0ZXI8RHluYW1pY0Zvcm1Db250cm9sRXZlbnQ+O1xuICAgIEBPdXRwdXQoKSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxEeW5hbWljRm9ybUNvbnRyb2xFdmVudD47XG4gICAgQE91dHB1dCgpIGZvY3VzOiBFdmVudEVtaXR0ZXI8RHluYW1pY0Zvcm1Db250cm9sRXZlbnQ+O1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihEeW5hbWljVGVtcGxhdGVEaXJlY3RpdmUpIGNvbnRlbnRUZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxEeW5hbWljVGVtcGxhdGVEaXJlY3RpdmU+O1xuICAgIEBWaWV3Q2hpbGRyZW4oRHluYW1pY1RlbXBsYXRlRGlyZWN0aXZlKSB2aWV3VGVtcGxhdGVzOiBRdWVyeUxpc3Q8RHluYW1pY1RlbXBsYXRlRGlyZWN0aXZlPjtcblxuICAgIGdldCBzdGF0dXMoKTogRHluYW1pY0Zvcm1TdGF0ZSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5ncm91cCA/IG51bGwgOiB0aGlzLmdyb3VwLnN0YXR1cyBhcyBEeW5hbWljRm9ybVN0YXRlO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKSByZWFkb25seSBvblN0YXR1c0NoYW5nZTogRXZlbnRFbWl0dGVyPElEeW5hbWljRm9ybUJhc2U+O1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBvblZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUR5bmFtaWNGb3JtQmFzZT47XG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IG9uU3VibWl0OiBFdmVudEVtaXR0ZXI8SUR5bmFtaWNGb3JtQmFzZT47XG5cbiAgICBAVmlld0NoaWxkKE5nRm9ybSlcbiAgICBwcm90ZWN0ZWQgbmdGb3JtOiBOZ0Zvcm07XG4gICAgcHJvdGVjdGVkIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIHByb3RlY3RlZCBncm91cFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChEeW5hbWljRm9ybVNlcnZpY2UpIHJlYWRvbmx5IGZvcm1TZXJ2aWNlOiBEeW5hbWljRm9ybVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgQEluamVjdChFdmVudHNTZXJ2aWNlKSByZWFkb25seSBldmVudHM6IEV2ZW50c1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudFNlcnZpY2U6IER5bmFtaWNGb3JtQ29tcG9uZW50U2VydmljZSwpIHtcbiAgICAgICAgc3VwZXIoY2hhbmdlRGV0ZWN0b3JSZWYsIGNvbXBvbmVudFNlcnZpY2UpO1xuICAgICAgICB0aGlzLmJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPER5bmFtaWNGb3JtQ29udHJvbEV2ZW50PigpO1xuICAgICAgICB0aGlzLmNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RHluYW1pY0Zvcm1Db250cm9sRXZlbnQ+KCk7XG4gICAgICAgIHRoaXMuZm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyPER5bmFtaWNGb3JtQ29udHJvbEV2ZW50PigpO1xuICAgICAgICB0aGlzLm9uU3RhdHVzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJRHluYW1pY0Zvcm1CYXNlPigpO1xuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElEeW5hbWljRm9ybUJhc2U+KCk7XG4gICAgICAgIHRoaXMub25TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPElEeW5hbWljRm9ybUJhc2U+KCk7XG4gICAgICAgIHRoaXMudGVtcGxhdGVzID0gbmV3IFF1ZXJ5TGlzdDxEeW5hbWljVGVtcGxhdGVEaXJlY3RpdmU+KCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICB0aGlzLmdyb3VwU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICB0aGlzLmxhYmVsUHJlZml4ID0gXCJsYWJlbFwiO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ncm91cFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAodGhpcy5ncm91cCkge1xuICAgICAgICAgICAgdGhpcy5ncm91cFN1YnNjcmlwdGlvbiA9IE9ic2VydmFibGVVdGlscy5tdWx0aVN1YnNjcmlwdGlvbihcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblN0YXR1c0NoYW5nZS5lbWl0KHRoaXMpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZS5lbWl0KHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLm5vdGlmeUNoYW5nZXModGhpcy5tb2RlbCwgdGhpcy5ncm91cCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gT2JzZXJ2YWJsZVV0aWxzLm11bHRpU3Vic2NyaXB0aW9uKFxuICAgICAgICAgICAgT2JzZXJ2YWJsZVV0aWxzLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN1YmplY3RzOiBbdGhpcy5jb250ZW50VGVtcGxhdGVzLmNoYW5nZXMsIHRoaXMudmlld1RlbXBsYXRlcy5jaGFuZ2VzXSxcbiAgICAgICAgICAgICAgICAgICAgY2I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IHRoaXMuY29udGVudFRlbXBsYXRlcy50b0FycmF5KCkuY29uY2F0KHRoaXMudmlld1RlbXBsYXRlcy50b0FycmF5KCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZXMucmVzZXQodGVtcGxhdGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLmV2ZW50cy5sYW5ndWFnZUNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLmRldGVjdENoYW5nZXModGhpcylcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy5uZ0Zvcm0ubmdTdWJtaXQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uU3VibWl0LmVtaXQodGhpcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmdyb3VwU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0Rm9ybUFycmF5R3JvdXAoaW5kZXg6IG51bWJlciwgZm9ybUFycmF5OiBGb3JtQXJyYXksIGZvcm1BcnJheU1vZGVsOiBEeW5hbWljRm9ybUFycmF5TW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtU2VydmljZS5pbnNlcnRGb3JtQXJyYXlHcm91cChpbmRleCwgZm9ybUFycmF5LCBmb3JtQXJyYXlNb2RlbCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHJlbW92ZUZvcm1BcnJheUdyb3VwKGluZGV4OiBudW1iZXIsIGZvcm1BcnJheTogRm9ybUFycmF5LCBmb3JtQXJyYXlNb2RlbDogRHluYW1pY0Zvcm1BcnJheU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybVNlcnZpY2UucmVtb3ZlRm9ybUFycmF5R3JvdXAoaW5kZXgsIGZvcm1BcnJheSwgZm9ybUFycmF5TW9kZWwpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBtb3ZlRm9ybUFycmF5R3JvdXAoaW5kZXg6IG51bWJlciwgc3RlcDogbnVtYmVyLCBmb3JtQXJyYXk6IEZvcm1BcnJheSwgZm9ybUFycmF5TW9kZWw6IER5bmFtaWNGb3JtQXJyYXlNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLm1vdmVGb3JtQXJyYXlHcm91cChpbmRleCwgc3RlcCwgZm9ybUFycmF5LCBmb3JtQXJyYXlNb2RlbCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIGNsZWFyRm9ybUFycmF5KGZvcm1BcnJheTogRm9ybUFycmF5LCBmb3JtQXJyYXlNb2RlbDogRHluYW1pY0Zvcm1BcnJheU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybVNlcnZpY2UuY2xlYXJGb3JtQXJyYXkoZm9ybUFycmF5LCBmb3JtQXJyYXlNb2RlbCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKHNob3dFcnJvcnM6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgaWYgKCF0aGlzLmdyb3VwKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAuc3RhdHVzQ2hhbmdlcy5waXBlKGZpcnN0KHN0YXR1cyA9PiBzdGF0dXMgPT0gXCJWQUxJRFwiIHx8IHN0YXR1cyA9PSBcIklOVkFMSURcIikpLnN1YnNjcmliZShzdGF0dXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzaG93RXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybVNlcnZpY2Uuc2hvd0Vycm9ycyh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBcIlZBTElEXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZWplY3QobnVsbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBzZXJpYWxpemUodmFsaWRhdGU/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgaWYgKCF0aGlzLmdyb3VwKSByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKHZhbGlkYXRlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZm9ybVNlcnZpY2Uuc2VyaWFsaXplKHRoaXMubW9kZWwsIHRoaXMuZ3JvdXApO1xuICAgIH1cbn1cbiJdfQ==
1
+ import { __awaiter } from "tslib";
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, EventEmitter, Inject, Input, Output, QueryList, ViewChild, ViewChildren } from "@angular/core";
3
+ import { NgForm } from "@angular/forms";
4
+ import { Subscription } from "rxjs";
5
+ import { first } from "rxjs/operators";
6
+ import { DynamicFormComponent, DynamicFormComponentService, DynamicTemplateDirective } from "@ng-dynamic-forms/core";
7
+ import { EventsService, ObservableUtils } from "@stemy/ngx-utils";
8
+ import { DynamicFormService } from "../../services/dynamic-form.service";
9
+ export class DynamicBaseFormComponent extends DynamicFormComponent {
10
+ constructor(formService, events, changeDetectorRef, componentService) {
11
+ super(changeDetectorRef, componentService);
12
+ this.formService = formService;
13
+ this.events = events;
14
+ this.blur = new EventEmitter();
15
+ this.change = new EventEmitter();
16
+ this.focus = new EventEmitter();
17
+ this.onStatusChange = new EventEmitter();
18
+ this.onValueChange = new EventEmitter();
19
+ this.onSubmit = new EventEmitter();
20
+ this.templates = new QueryList();
21
+ this.subscription = new Subscription();
22
+ this.groupSubscription = new Subscription();
23
+ this.labelPrefix = "label";
24
+ }
25
+ get status() {
26
+ return !this.group ? null : this.group.status;
27
+ }
28
+ ngOnChanges(changes) {
29
+ this.groupSubscription.unsubscribe();
30
+ if (this.group) {
31
+ this.groupSubscription = ObservableUtils.multiSubscription(this.group.statusChanges.subscribe(() => {
32
+ this.onStatusChange.emit(this);
33
+ }), this.group.valueChanges.subscribe(() => {
34
+ this.onValueChange.emit(this);
35
+ this.formService.notifyChanges(this.model, this.group);
36
+ }));
37
+ }
38
+ }
39
+ ngAfterViewInit() {
40
+ this.subscription = ObservableUtils.multiSubscription(ObservableUtils.subscribe({
41
+ subjects: [this.contentTemplates.changes, this.viewTemplates.changes],
42
+ cb: () => {
43
+ const templates = this.contentTemplates.toArray().concat(this.viewTemplates.toArray());
44
+ this.templates.reset(templates);
45
+ }
46
+ }), this.events.languageChanged.subscribe(() => {
47
+ this.formService.detectChanges(this);
48
+ }), this.ngForm.ngSubmit.subscribe(() => {
49
+ this.onSubmit.emit(this);
50
+ }));
51
+ }
52
+ ngOnDestroy() {
53
+ super.ngOnDestroy();
54
+ this.subscription.unsubscribe();
55
+ this.groupSubscription.unsubscribe();
56
+ }
57
+ insertFormArrayGroup(index, formArray, formArrayModel) {
58
+ this.formService.insertFormArrayGroup(index, formArray, formArrayModel);
59
+ this.changeDetectorRef.detectChanges();
60
+ }
61
+ removeFormArrayGroup(index, formArray, formArrayModel) {
62
+ this.formService.removeFormArrayGroup(index, formArray, formArrayModel);
63
+ this.changeDetectorRef.detectChanges();
64
+ }
65
+ moveFormArrayGroup(index, step, formArray, formArrayModel) {
66
+ this.formService.moveFormArrayGroup(index, step, formArray, formArrayModel);
67
+ this.changeDetectorRef.detectChanges();
68
+ }
69
+ clearFormArray(formArray, formArrayModel) {
70
+ this.formService.clearFormArray(formArray, formArrayModel);
71
+ this.changeDetectorRef.detectChanges();
72
+ }
73
+ validate(showErrors = true) {
74
+ if (!this.group)
75
+ return Promise.resolve();
76
+ return new Promise((resolve, reject) => {
77
+ this.group.statusChanges.pipe(first(status => status == "VALID" || status == "INVALID")).subscribe(status => {
78
+ if (showErrors) {
79
+ this.formService.showErrors(this);
80
+ }
81
+ if (status == "VALID") {
82
+ resolve(null);
83
+ return;
84
+ }
85
+ reject(null);
86
+ });
87
+ this.group.updateValueAndValidity();
88
+ });
89
+ }
90
+ serialize(validate) {
91
+ return __awaiter(this, void 0, void 0, function* () {
92
+ if (!this.group)
93
+ return null;
94
+ if (validate) {
95
+ yield this.validate();
96
+ }
97
+ return yield this.formService.serialize(this.model, this.group);
98
+ });
99
+ }
100
+ }
101
+ DynamicBaseFormComponent.decorators = [
102
+ { type: Component, args: [{
103
+ selector: "dynamic-base-form",
104
+ template: "",
105
+ changeDetection: ChangeDetectionStrategy.Default
106
+ },] }
107
+ ];
108
+ DynamicBaseFormComponent.ctorParameters = () => [
109
+ { type: DynamicFormService, decorators: [{ type: Inject, args: [DynamicFormService,] }] },
110
+ { type: EventsService, decorators: [{ type: Inject, args: [EventsService,] }] },
111
+ { type: ChangeDetectorRef },
112
+ { type: DynamicFormComponentService }
113
+ ];
114
+ DynamicBaseFormComponent.propDecorators = {
115
+ group: [{ type: Input }],
116
+ model: [{ type: Input }],
117
+ layout: [{ type: Input }],
118
+ labelPrefix: [{ type: Input }],
119
+ blur: [{ type: Output }],
120
+ change: [{ type: Output }],
121
+ focus: [{ type: Output }],
122
+ contentTemplates: [{ type: ContentChildren, args: [DynamicTemplateDirective,] }],
123
+ viewTemplates: [{ type: ViewChildren, args: [DynamicTemplateDirective,] }],
124
+ onStatusChange: [{ type: Output }],
125
+ onValueChange: [{ type: Output }],
126
+ onSubmit: [{ type: Output }],
127
+ ngForm: [{ type: ViewChild, args: [NgForm,] }]
128
+ };
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1iYXNlLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL25neC1keW5hbWljLWZvcm0vY29tcG9uZW50cy9iYXNlL2R5bmFtaWMtYmFzZS1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFDZixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNNLFNBQVMsRUFDeEIsWUFBWSxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBdUIsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUVILG9CQUFvQixFQUNwQiwyQkFBMkIsRUFJM0Isd0JBQXdCLEVBQzNCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUVoRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQU92RSxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsb0JBQW9CO0lBMkI5RCxZQUFpRCxXQUErQixFQUNwQyxNQUFxQixFQUNyRCxpQkFBb0MsRUFDcEMsZ0JBQTZDO1FBQ3JELEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBSkUsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQ3BDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFJN0QsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFlBQVksRUFBMkIsQ0FBQztRQUN4RCxJQUFJLENBQUMsTUFBTSxHQUFHLElB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QUFZLFNBQUMsd0JBQXdCOzZCQU1yQyxNQUFNOzRCQUNOLE1BQU07dUJBQ04sTUFBTTtxQkFFTixTQUFTLFNBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBBZnRlclZpZXdJbml0LFxyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIENvbnRlbnRDaGlsZHJlbixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEluamVjdCxcclxuICAgIElucHV0LFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT3V0cHV0LFxyXG4gICAgUXVlcnlMaXN0LFxyXG4gICAgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLFxyXG4gICAgVmlld0NoaWxkcmVuXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtGb3JtQXJyYXksIEZvcm1Hcm91cCwgTmdGb3JtfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7Zmlyc3R9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQge1xyXG4gICAgRHluYW1pY0Zvcm1BcnJheU1vZGVsLFxyXG4gICAgRHluYW1pY0Zvcm1Db21wb25lbnQsXHJcbiAgICBEeW5hbWljRm9ybUNvbXBvbmVudFNlcnZpY2UsXHJcbiAgICBEeW5hbWljRm9ybUNvbnRyb2xFdmVudCxcclxuICAgIER5bmFtaWNGb3JtTGF5b3V0LFxyXG4gICAgRHluYW1pY0Zvcm1Nb2RlbCxcclxuICAgIER5bmFtaWNUZW1wbGF0ZURpcmVjdGl2ZVxyXG59IGZyb20gXCJAbmctZHluYW1pYy1mb3Jtcy9jb3JlXCI7XHJcbmltcG9ydCB7RXZlbnRzU2VydmljZSwgT2JzZXJ2YWJsZVV0aWxzfSBmcm9tIFwiQHN0ZW15L25neC11dGlsc1wiO1xyXG5pbXBvcnQge0R5bmFtaWNGb3JtU3RhdGUsIElEeW5hbWljRm9ybSwgSUR5bmFtaWNGb3JtQmFzZX0gZnJvbSBcIi4uLy4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge0R5bmFtaWNGb3JtU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2R5bmFtaWMtZm9ybS5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImR5bmFtaWMtYmFzZS1mb3JtXCIsXHJcbiAgICB0ZW1wbGF0ZTogXCJcIixcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHluYW1pY0Jhc2VGb3JtQ29tcG9uZW50IGV4dGVuZHMgRHluYW1pY0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIElEeW5hbWljRm9ybSB7XHJcblxyXG4gICAgQElucHV0KCkgZ3JvdXA6IEZvcm1Hcm91cDtcclxuICAgIEBJbnB1dCgpIG1vZGVsOiBEeW5hbWljRm9ybU1vZGVsO1xyXG4gICAgQElucHV0KCkgbGF5b3V0OiBEeW5hbWljRm9ybUxheW91dDtcclxuICAgIEBJbnB1dCgpIGxhYmVsUHJlZml4OiBzdHJpbmc7XHJcblxyXG4gICAgQE91dHB1dCgpIGJsdXI6IEV2ZW50RW1pdHRlcjxEeW5hbWljRm9ybUNvbnRyb2xFdmVudD47XHJcbiAgICBAT3V0cHV0KCkgY2hhbmdlOiBFdmVudEVtaXR0ZXI8RHluYW1pY0Zvcm1Db250cm9sRXZlbnQ+O1xyXG4gICAgQE91dHB1dCgpIGZvY3VzOiBFdmVudEVtaXR0ZXI8RHluYW1pY0Zvcm1Db250cm9sRXZlbnQ+O1xyXG5cclxuICAgIEBDb250ZW50Q2hpbGRyZW4oRHluYW1pY1RlbXBsYXRlRGlyZWN0aXZlKSBjb250ZW50VGVtcGxhdGVzOiBRdWVyeUxpc3Q8RHluYW1pY1RlbXBsYXRlRGlyZWN0aXZlPjtcclxuICAgIEBWaWV3Q2hpbGRyZW4oRHluYW1pY1RlbXBsYXRlRGlyZWN0aXZlKSB2aWV3VGVtcGxhdGVzOiBRdWVyeUxpc3Q8RHluYW1pY1RlbXBsYXRlRGlyZWN0aXZlPjtcclxuXHJcbiAgICBnZXQgc3RhdHVzKCk6IER5bmFtaWNGb3JtU3RhdGUge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5ncm91cCA/IG51bGwgOiB0aGlzLmdyb3VwLnN0YXR1cyBhcyBEeW5hbWljRm9ybVN0YXRlO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSByZWFkb25seSBvblN0YXR1c0NoYW5nZTogRXZlbnRFbWl0dGVyPElEeW5hbWljRm9ybUJhc2U+O1xyXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IG9uVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJRHluYW1pY0Zvcm1CYXNlPjtcclxuICAgIEBPdXRwdXQoKSByZWFkb25seSBvblN1Ym1pdDogRXZlbnRFbWl0dGVyPElEeW5hbWljRm9ybUJhc2U+O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoTmdGb3JtKVxyXG4gICAgcHJvdGVjdGVkIG5nRm9ybTogTmdGb3JtO1xyXG4gICAgcHJvdGVjdGVkIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gICAgcHJvdGVjdGVkIGdyb3VwU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gICAgY29uc3RydWN0b3IoQEluamVjdChEeW5hbWljRm9ybVNlcnZpY2UpIHJlYWRvbmx5IGZvcm1TZXJ2aWNlOiBEeW5hbWljRm9ybVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBASW5qZWN0KEV2ZW50c1NlcnZpY2UpIHJlYWRvbmx5IGV2ZW50czogRXZlbnRzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudFNlcnZpY2U6IER5bmFtaWNGb3JtQ29tcG9uZW50U2VydmljZSwpIHtcclxuICAgICAgICBzdXBlcihjaGFuZ2VEZXRlY3RvclJlZiwgY29tcG9uZW50U2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5ibHVyID0gbmV3IEV2ZW50RW1pdHRlcjxEeW5hbWljRm9ybUNvbnRyb2xFdmVudD4oKTtcclxuICAgICAgICB0aGlzLmNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RHluYW1pY0Zvcm1Db250cm9sRXZlbnQ+KCk7XHJcbiAgICAgICAgdGhpcy5mb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXI8RHluYW1pY0Zvcm1Db250cm9sRXZlbnQ+KCk7XHJcbiAgICAgICAgdGhpcy5vblN0YXR1c0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SUR5bmFtaWNGb3JtQmFzZT4oKTtcclxuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElEeW5hbWljRm9ybUJhc2U+KCk7XHJcbiAgICAgICAgdGhpcy5vblN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8SUR5bmFtaWNGb3JtQmFzZT4oKTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlcyA9IG5ldyBRdWVyeUxpc3Q8RHluYW1pY1RlbXBsYXRlRGlyZWN0aXZlPigpO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5sYWJlbFByZWZpeCA9IFwibGFiZWxcIjtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ncm91cFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLmdyb3VwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBTdWJzY3JpcHRpb24gPSBPYnNlcnZhYmxlVXRpbHMubXVsdGlTdWJzY3JpcHRpb24oXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU3RhdHVzQ2hhbmdlLmVtaXQodGhpcyk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlLmVtaXQodGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtU2VydmljZS5ub3RpZnlDaGFuZ2VzKHRoaXMubW9kZWwsIHRoaXMuZ3JvdXApO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gT2JzZXJ2YWJsZVV0aWxzLm11bHRpU3Vic2NyaXB0aW9uKFxyXG4gICAgICAgICAgICBPYnNlcnZhYmxlVXRpbHMuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHN1YmplY3RzOiBbdGhpcy5jb250ZW50VGVtcGxhdGVzLmNoYW5nZXMsIHRoaXMudmlld1RlbXBsYXRlcy5jaGFuZ2VzXSxcclxuICAgICAgICAgICAgICAgICAgICBjYjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZXMgPSB0aGlzLmNvbnRlbnRUZW1wbGF0ZXMudG9BcnJheSgpLmNvbmNhdCh0aGlzLnZpZXdUZW1wbGF0ZXMudG9BcnJheSgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZXMucmVzZXQodGVtcGxhdGVzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzLmxhbmd1YWdlQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtU2VydmljZS5kZXRlY3RDaGFuZ2VzKHRoaXMpXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB0aGlzLm5nRm9ybS5uZ1N1Ym1pdC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblN1Ym1pdC5lbWl0KHRoaXMpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBpbnNlcnRGb3JtQXJyYXlHcm91cChpbmRleDogbnVtYmVyLCBmb3JtQXJyYXk6IEZvcm1BcnJheSwgZm9ybUFycmF5TW9kZWw6IER5bmFtaWNGb3JtQXJyYXlNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZm9ybVNlcnZpY2UuaW5zZXJ0Rm9ybUFycmF5R3JvdXAoaW5kZXgsIGZvcm1BcnJheSwgZm9ybUFycmF5TW9kZWwpO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUZvcm1BcnJheUdyb3VwKGluZGV4OiBudW1iZXIsIGZvcm1BcnJheTogRm9ybUFycmF5LCBmb3JtQXJyYXlNb2RlbDogRHluYW1pY0Zvcm1BcnJheU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5mb3JtU2VydmljZS5yZW1vdmVGb3JtQXJyYXlHcm91cChpbmRleCwgZm9ybUFycmF5LCBmb3JtQXJyYXlNb2RlbCk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbW92ZUZvcm1BcnJheUdyb3VwKGluZGV4OiBudW1iZXIsIHN0ZXA6IG51bWJlciwgZm9ybUFycmF5OiBGb3JtQXJyYXksIGZvcm1BcnJheU1vZGVsOiBEeW5hbWljRm9ybUFycmF5TW9kZWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLm1vdmVGb3JtQXJyYXlHcm91cChpbmRleCwgc3RlcCwgZm9ybUFycmF5LCBmb3JtQXJyYXlNb2RlbCk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJGb3JtQXJyYXkoZm9ybUFycmF5OiBGb3JtQXJyYXksIGZvcm1BcnJheU1vZGVsOiBEeW5hbWljRm9ybUFycmF5TW9kZWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLmNsZWFyRm9ybUFycmF5KGZvcm1BcnJheSwgZm9ybUFycmF5TW9kZWwpO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlKHNob3dFcnJvcnM6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBpZiAoIXRoaXMuZ3JvdXApIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAuc3RhdHVzQ2hhbmdlcy5waXBlKGZpcnN0KHN0YXR1cyA9PiBzdGF0dXMgPT0gXCJWQUxJRFwiIHx8IHN0YXR1cyA9PSBcIklOVkFMSURcIikpLnN1YnNjcmliZShzdGF0dXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNob3dFcnJvcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLnNob3dFcnJvcnModGhpcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IFwiVkFMSURcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5ncm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2VyaWFsaXplKHZhbGlkYXRlPzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmdyb3VwKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpZiAodmFsaWRhdGUpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5mb3JtU2VydmljZS5zZXJpYWxpemUodGhpcy5tb2RlbCwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -1,100 +1,100 @@
1
- import { ChangeDetectorRef, Directive, ElementRef, EventEmitter, HostBinding, HostListener, Inject, Input, Output, Renderer2 } from "@angular/core";
2
- import { TOASTER_SERVICE } from "@stemy/ngx-utils";
3
- export class AsyncSubmitDirective {
4
- constructor(toaster, cdr, elem, renderer) {
5
- this.toaster = toaster;
6
- this.cdr = cdr;
7
- this.elem = elem;
8
- this.renderer = renderer;
9
- this.onSuccess = new EventEmitter();
10
- this.onError = new EventEmitter();
11
- if (elem.nativeElement.tagName !== "BUTTON")
12
- return;
13
- renderer.setAttribute(elem.nativeElement, "type", "button");
14
- }
15
- get isDisabled() {
16
- return this.disabled;
17
- }
18
- set isDisabled(value) {
19
- this.disabled = value;
20
- if (value) {
21
- this.renderer.setAttribute(this.elem.nativeElement, "disabled", "disabled");
22
- return;
23
- }
24
- this.renderer.removeAttribute(this.elem.nativeElement, "disabled");
25
- }
26
- get isLoading() {
27
- return this.loading;
28
- }
29
- ngOnInit() {
30
- if (!this.form)
31
- return;
32
- this.isDisabled = this.form.status !== "VALID";
33
- this.cdr.detectChanges();
34
- this.onStatusChange = this.form.onStatusChange.subscribe(() => {
35
- this.isDisabled = this.form.status !== "VALID";
36
- this.cdr.detectChanges();
37
- if (!this.callback || this.form.status == "PENDING")
38
- return;
39
- if (!this.disabled) {
40
- this.callback();
41
- }
42
- this.callback = null;
43
- });
44
- this.onSubmit = this.form.onSubmit.subscribe(() => this.callMethod());
45
- }
46
- ngOnDestroy() {
47
- if (this.onStatusChange)
48
- this.onStatusChange.unsubscribe();
49
- if (this.onSubmit)
50
- this.onSubmit.unsubscribe();
51
- }
52
- click() {
53
- this.callback = () => this.callMethod();
54
- if (this.form.status !== "VALID" && this.form.status !== "INVALID")
55
- return;
56
- this.callback();
57
- this.callback = null;
58
- }
59
- callMethod() {
60
- if (this.loading)
61
- return;
62
- this.loading = true;
63
- this.method(this.form, this.context).then(result => {
64
- this.loading = false;
65
- if (result) {
66
- this.onSuccess.emit(result);
67
- this.toaster.success(result.message, result.context);
68
- }
69
- }, reason => {
70
- if (!reason || !reason.message)
71
- throw new Error("Reason must implement IAsyncMessage interface");
72
- this.loading = false;
73
- this.onError.emit(reason);
74
- this.toaster.error(reason.message, reason.context);
75
- });
76
- }
77
- }
78
- AsyncSubmitDirective.decorators = [
79
- { type: Directive, args: [{
80
- selector: "[async-submit]",
81
- exportAs: "async-submit"
82
- },] }
83
- ];
84
- AsyncSubmitDirective.ctorParameters = () => [
85
- { type: undefined, decorators: [{ type: Inject, args: [TOASTER_SERVICE,] }] },
86
- { type: ChangeDetectorRef },
87
- { type: ElementRef },
88
- { type: Renderer2 }
89
- ];
90
- AsyncSubmitDirective.propDecorators = {
91
- method: [{ type: Input, args: ["async-submit",] }],
92
- form: [{ type: Input }],
93
- context: [{ type: Input }],
94
- onSuccess: [{ type: Output }],
95
- onError: [{ type: Output }],
96
- isDisabled: [{ type: HostBinding, args: ["class.disabled",] }],
97
- isLoading: [{ type: HostBinding, args: ["class.loading",] }],
98
- click: [{ type: HostListener, args: ["click",] }]
99
- };
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtc3VibWl0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZ3gtZHluYW1pYy1mb3JtL2RpcmVjdGl2ZXMvYXN5bmMtc3VibWl0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBaUMsZUFBZSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFPakYsTUFBTSxPQUFPLG9CQUFvQjtJQWtDN0IsWUFBNkMsT0FBd0IsRUFDaEQsR0FBc0IsRUFDdEIsSUFBZ0IsRUFDaEIsUUFBbUI7UUFISyxZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUNoRCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUNuRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBQ2pELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEtBQUssUUFBUTtZQUFFLE9BQU87UUFDcEQsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBM0JELElBQ0ksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsS0FBYztRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLEtBQUssRUFB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QUFDLCtDQUErQyxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzs7WUE3RkosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLFFBQVEsRUFBRSxjQUFjO2FBQzNCOzs7NENBbUNnQixNQUFNLFNBQUMsZUFBZTtZQXZEbkMsaUJBQWlCO1lBRWpCLFVBQVU7WUFTVixTQUFTOzs7cUJBWVIsS0FBSyxTQUFDLGNBQWM7bUJBQ3BCLEtBQUs7c0JBQ0wsS0FBSzt3QkFFTCxNQUFNO3NCQUNOLE1BQU07eUJBUU4sV0FBVyxTQUFDLGdCQUFnQjt3QkFjNUIsV0FBVyxTQUFDLGVBQWU7b0JBb0MzQixZQUFZLFNBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUmVuZGVyZXIyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7SUFzeW5jTWVzc2FnZSwgSVRvYXN0ZXJTZXJ2aWNlLCBUT0FTVEVSX1NFUlZJQ0V9IGZyb20gXCJAc3RlbXkvbmd4LXV0aWxzXCI7XG5pbXBvcnQge0FzeW5jU3VibWl0TWV0aG9kLCBJRHluYW1pY0Zvcm1CYXNlfSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiBcIlthc3luYy1zdWJtaXRdXCIsXG4gICAgZXhwb3J0QXM6IFwiYXN5bmMtc3VibWl0XCJcbn0pXG5leHBvcnQgY2xhc3MgQXN5bmNTdWJtaXREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICBASW5wdXQoXCJhc3luYy1zdWJtaXRcIikgbWV0aG9kOiBBc3luY1N1Ym1pdE1ldGhvZDtcbiAgICBASW5wdXQoKSBmb3JtOiBJRHluYW1pY0Zvcm1CYXNlO1xuICAgIEBJbnB1dCgpIGNvbnRleHQ6IGFueTtcblxuICAgIEBPdXRwdXQoKSBvblN1Y2Nlc3M6IEV2ZW50RW1pdHRlcjxJQXN5bmNNZXNzYWdlPjtcbiAgICBAT3V0cHV0KCkgb25FcnJvcjogRXZlbnRFbWl0dGVyPElBc3luY01lc3NhZ2U+O1xuXG4gICAgcHJpdmF0ZSBsb2FkaW5nOiBib29sZWFuO1xuICAgIHByaXZhdGUgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBjYWxsYmFjazogRnVuY3Rpb247XG4gICAgcHJpdmF0ZSBvblN0YXR1c0NoYW5nZTogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgb25TdWJtaXQ6IFN1YnNjcmlwdGlvbjtcblxuICAgIEBIb3N0QmluZGluZyhcImNsYXNzLmRpc2FibGVkXCIpXG4gICAgZ2V0IGlzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xuICAgIH1cblxuICAgIHNldCBpc0Rpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW0ubmF0aXZlRWxlbWVudCwgXCJkaXNhYmxlZFwiLCBcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxlbS5uYXRpdmVFbGVtZW50LCBcImRpc2FibGVkXCIpO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZyhcImNsYXNzLmxvYWRpbmdcIilcbiAgICBnZXQgaXNMb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoVE9BU1RFUl9TRVJWSUNFKSBwcml2YXRlIHRvYXN0ZXI6IElUb2FzdGVyU2VydmljZSxcbiAgICAgICAgICAgICAgICByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgICAgIHJlYWRvbmx5IGVsZW06IEVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgICAgcmVhZG9ubHkgcmVuZGVyZXI6IFJlbmRlcmVyMikge1xuICAgICAgICB0aGlzLm9uU3VjY2VzcyA9IG5ldyBFdmVudEVtaXR0ZXI8SUFzeW5jTWVzc2FnZT4oKTtcbiAgICAgICAgdGhpcy5vbkVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxJQXN5bmNNZXNzYWdlPigpO1xuICAgICAgICBpZiAoZWxlbS5uYXRpdmVFbGVtZW50LnRhZ05hbWUgIT09IFwiQlVUVE9OXCIpIHJldHVybjtcbiAgICAgICAgcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW0ubmF0aXZlRWxlbWVudCwgXCJ0eXBlXCIsIFwiYnV0dG9uXCIpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSB0aGlzLmZvcm0uc3RhdHVzICE9PSBcIlZBTElEXCI7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5vblN0YXR1c0NoYW5nZSA9IHRoaXMuZm9ybS5vblN0YXR1c0NoYW5nZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gdGhpcy5mb3JtLnN0YXR1cyAhPT0gXCJWQUxJRFwiO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNhbGxiYWNrIHx8IHRoaXMuZm9ybS5zdGF0dXMgPT0gXCJQRU5ESU5HXCIpIHJldHVybjtcbiAgICAgICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vblN1Ym1pdCA9IHRoaXMuZm9ybS5vblN1Ym1pdC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jYWxsTWV0aG9kKCkpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5vblN0YXR1c0NoYW5nZSkgdGhpcy5vblN0YXR1c0NoYW5nZS51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAodGhpcy5vblN1Ym1pdCkgdGhpcy5vblN1Ym1pdC51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoXCJjbGlja1wiKVxuICAgIGNsaWNrKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhbGxiYWNrID0gKCkgPT4gdGhpcy5jYWxsTWV0aG9kKCk7XG4gICAgICAgIGlmICh0aGlzLmZvcm0uc3RhdHVzICE9PSBcIlZBTElEXCIgJiYgdGhpcy5mb3JtLnN0YXR1cyAhPT0gXCJJTlZBTElEXCIpIHJldHVybjtcbiAgICAgICAgdGhpcy5jYWxsYmFjaygpO1xuICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcbiAgICB9XG5cbiAgICBjYWxsTWV0aG9kKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMubWV0aG9kKHRoaXMuZm9ybSwgdGhpcy5jb250ZXh0KS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uU3VjY2Vzcy5lbWl0KHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3MocmVzdWx0Lm1lc3NhZ2UsIHJlc3VsdC5jb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgcmVhc29uID0+IHtcbiAgICAgICAgICAgIGlmICghcmVhc29uIHx8ICFyZWFzb24ubWVzc2FnZSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWFzb24gbXVzdCBpbXBsZW1lbnQgSUFzeW5jTWVzc2FnZSBpbnRlcmZhY2VcIik7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KHJlYXNvbik7XG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXIuZXJyb3IocmVhc29uLm1lc3NhZ2UsIHJlYXNvbi5jb250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
1
+ import { ChangeDetectorRef, Directive, ElementRef, EventEmitter, HostBinding, HostListener, Inject, Input, Output, Renderer2 } from "@angular/core";
2
+ import { TOASTER_SERVICE } from "@stemy/ngx-utils";
3
+ export class AsyncSubmitDirective {
4
+ constructor(toaster, cdr, elem, renderer) {
5
+ this.toaster = toaster;
6
+ this.cdr = cdr;
7
+ this.elem = elem;
8
+ this.renderer = renderer;
9
+ this.onSuccess = new EventEmitter();
10
+ this.onError = new EventEmitter();
11
+ if (elem.nativeElement.tagName !== "BUTTON")
12
+ return;
13
+ renderer.setAttribute(elem.nativeElement, "type", "button");
14
+ }
15
+ get isDisabled() {
16
+ return this.disabled;
17
+ }
18
+ set isDisabled(value) {
19
+ this.disabled = value;
20
+ if (value) {
21
+ this.renderer.setAttribute(this.elem.nativeElement, "disabled", "disabled");
22
+ return;
23
+ }
24
+ this.renderer.removeAttribute(this.elem.nativeElement, "disabled");
25
+ }
26
+ get isLoading() {
27
+ return this.loading;
28
+ }
29
+ ngOnInit() {
30
+ if (!this.form)
31
+ return;
32
+ this.isDisabled = this.form.status !== "VALID";
33
+ this.cdr.detectChanges();
34
+ this.onStatusChange = this.form.onStatusChange.subscribe(() => {
35
+ this.isDisabled = this.form.status !== "VALID";
36
+ this.cdr.detectChanges();
37
+ if (!this.callback || this.form.status == "PENDING")
38
+ return;
39
+ if (!this.disabled) {
40
+ this.callback();
41
+ }
42
+ this.callback = null;
43
+ });
44
+ this.onSubmit = this.form.onSubmit.subscribe(() => this.callMethod());
45
+ }
46
+ ngOnDestroy() {
47
+ if (this.onStatusChange)
48
+ this.onStatusChange.unsubscribe();
49
+ if (this.onSubmit)
50
+ this.onSubmit.unsubscribe();
51
+ }
52
+ click() {
53
+ this.callback = () => this.callMethod();
54
+ if (this.form.status !== "VALID" && this.form.status !== "INVALID")
55
+ return;
56
+ this.callback();
57
+ this.callback = null;
58
+ }
59
+ callMethod() {
60
+ if (this.loading)
61
+ return;
62
+ this.loading = true;
63
+ this.method(this.form, this.context).then(result => {
64
+ this.loading = false;
65
+ if (result) {
66
+ this.onSuccess.emit(result);
67
+ this.toaster.success(result.message, result.context);
68
+ }
69
+ }, reason => {
70
+ if (!reason || !reason.message)
71
+ throw new Error("Reason must implement IAsyncMessage interface");
72
+ this.loading = false;
73
+ this.onError.emit(reason);
74
+ this.toaster.error(reason.message, reason.context);
75
+ });
76
+ }
77
+ }
78
+ AsyncSubmitDirective.decorators = [
79
+ { type: Directive, args: [{
80
+ selector: "[async-submit]",
81
+ exportAs: "async-submit"
82
+ },] }
83
+ ];
84
+ AsyncSubmitDirective.ctorParameters = () => [
85
+ { type: undefined, decorators: [{ type: Inject, args: [TOASTER_SERVICE,] }] },
86
+ { type: ChangeDetectorRef },
87
+ { type: ElementRef },
88
+ { type: Renderer2 }
89
+ ];
90
+ AsyncSubmitDirective.propDecorators = {
91
+ method: [{ type: Input, args: ["async-submit",] }],
92
+ form: [{ type: Input }],
93
+ context: [{ type: Input }],
94
+ onSuccess: [{ type: Output }],
95
+ onError: [{ type: Output }],
96
+ isDisabled: [{ type: HostBinding, args: ["class.disabled",] }],
97
+ isLoading: [{ type: HostBinding, args: ["class.loading",] }],
98
+ click: [{ type: HostListener, args: ["click",] }]
99
+ };
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtc3VibWl0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZ3gtZHluYW1pYy1mb3JtL2RpcmVjdGl2ZXMvYXN5bmMtc3VibWl0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBaUMsZUFBZSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFPakYsTUFBTSxPQUFPLG9CQUFvQjtJQWtDN0IsWUFBNkMsT0FBd0IsRUFDaEQsR0FBc0IsRUFDdEIsSUFBZ0IsRUFDaEIsUUFBbUI7UUFISyxZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUNoRCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUNuRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBQ2pELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEtBQUssUUFBUTtZQUFFLE9BQU87UUFDcEQsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBM0JELElBQ0ksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsS0FBYztRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLEtBQUssRUFBRTtZQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUM1RSxPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsSUFDSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFZRCxRQUFRO1FBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQztRQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUMxRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQztZQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLFNBQVM7Z0JBQUUsT0FBTztZQUM1RCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ25CO1lBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLGNBQWM7WUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzNELElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFHRCxLQUFLO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUztZQUFFLE9BQU87UUFDM0UsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxVQUFVO1FBQ04sSUFBSSxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDL0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxNQUFNLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3hEO1FBQ0wsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ1IsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO2dCQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzs7WUE3RkosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLFFBQVEsRUFBRSxjQUFjO2FBQzNCOzs7NENBbUNnQixNQUFNLFNBQUMsZUFBZTtZQXZEbkMsaUJBQWlCO1lBRWpCLFVBQVU7WUFTVixTQUFTOzs7cUJBWVIsS0FBSyxTQUFDLGNBQWM7bUJBQ3BCLEtBQUs7c0JBQ0wsS0FBSzt3QkFFTCxNQUFNO3NCQUNOLE1BQU07eUJBUU4sV0FBVyxTQUFDLGdCQUFnQjt3QkFjNUIsV0FBVyxTQUFDLGVBQWU7b0JBb0MzQixZQUFZLFNBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIERpcmVjdGl2ZSxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBIb3N0QmluZGluZyxcclxuICAgIEhvc3RMaXN0ZW5lcixcclxuICAgIEluamVjdCxcclxuICAgIElucHV0LFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgUmVuZGVyZXIyXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7SUFzeW5jTWVzc2FnZSwgSVRvYXN0ZXJTZXJ2aWNlLCBUT0FTVEVSX1NFUlZJQ0V9IGZyb20gXCJAc3RlbXkvbmd4LXV0aWxzXCI7XHJcbmltcG9ydCB7QXN5bmNTdWJtaXRNZXRob2QsIElEeW5hbWljRm9ybUJhc2V9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6IFwiW2FzeW5jLXN1Ym1pdF1cIixcclxuICAgIGV4cG9ydEFzOiBcImFzeW5jLXN1Ym1pdFwiXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBc3luY1N1Ym1pdERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgICBASW5wdXQoXCJhc3luYy1zdWJtaXRcIikgbWV0aG9kOiBBc3luY1N1Ym1pdE1ldGhvZDtcclxuICAgIEBJbnB1dCgpIGZvcm06IElEeW5hbWljRm9ybUJhc2U7XHJcbiAgICBASW5wdXQoKSBjb250ZXh0OiBhbnk7XHJcblxyXG4gICAgQE91dHB1dCgpIG9uU3VjY2VzczogRXZlbnRFbWl0dGVyPElBc3luY01lc3NhZ2U+O1xyXG4gICAgQE91dHB1dCgpIG9uRXJyb3I6IEV2ZW50RW1pdHRlcjxJQXN5bmNNZXNzYWdlPjtcclxuXHJcbiAgICBwcml2YXRlIGxvYWRpbmc6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIGRpc2FibGVkOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBjYWxsYmFjazogRnVuY3Rpb247XHJcbiAgICBwcml2YXRlIG9uU3RhdHVzQ2hhbmdlOiBTdWJzY3JpcHRpb247XHJcbiAgICBwcml2YXRlIG9uU3VibWl0OiBTdWJzY3JpcHRpb247XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuZGlzYWJsZWRcIilcclxuICAgIGdldCBpc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBpc0Rpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHZhbHVlO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW0ubmF0aXZlRWxlbWVudCwgXCJkaXNhYmxlZFwiLCBcImRpc2FibGVkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxlbS5uYXRpdmVFbGVtZW50LCBcImRpc2FibGVkXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0QmluZGluZyhcImNsYXNzLmxvYWRpbmdcIilcclxuICAgIGdldCBpc0xvYWRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGluZztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KFRPQVNURVJfU0VSVklDRSkgcHJpdmF0ZSB0b2FzdGVyOiBJVG9hc3RlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgICAgICAgICAgcmVhZG9ubHkgZWxlbTogRWxlbWVudFJlZixcclxuICAgICAgICAgICAgICAgIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjIpIHtcclxuICAgICAgICB0aGlzLm9uU3VjY2VzcyA9IG5ldyBFdmVudEVtaXR0ZXI8SUFzeW5jTWVzc2FnZT4oKTtcclxuICAgICAgICB0aGlzLm9uRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPElBc3luY01lc3NhZ2U+KCk7XHJcbiAgICAgICAgaWYgKGVsZW0ubmF0aXZlRWxlbWVudC50YWdOYW1lICE9PSBcIkJVVFRPTlwiKSByZXR1cm47XHJcbiAgICAgICAgcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW0ubmF0aXZlRWxlbWVudCwgXCJ0eXBlXCIsIFwiYnV0dG9uXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5mb3JtKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gdGhpcy5mb3JtLnN0YXR1cyAhPT0gXCJWQUxJRFwiO1xyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLm9uU3RhdHVzQ2hhbmdlID0gdGhpcy5mb3JtLm9uU3RhdHVzQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IHRoaXMuZm9ybS5zdGF0dXMgIT09IFwiVkFMSURcIjtcclxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FsbGJhY2sgfHwgdGhpcy5mb3JtLnN0YXR1cyA9PSBcIlBFTkRJTkdcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm9uU3VibWl0ID0gdGhpcy5mb3JtLm9uU3VibWl0LnN1YnNjcmliZSgoKSA9PiB0aGlzLmNhbGxNZXRob2QoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMub25TdGF0dXNDaGFuZ2UpIHRoaXMub25TdGF0dXNDaGFuZ2UudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICBpZiAodGhpcy5vblN1Ym1pdCkgdGhpcy5vblN1Ym1pdC51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoXCJjbGlja1wiKVxyXG4gICAgY2xpY2soKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9ICgpID0+IHRoaXMuY2FsbE1ldGhvZCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm0uc3RhdHVzICE9PSBcIlZBTElEXCIgJiYgdGhpcy5mb3JtLnN0YXR1cyAhPT0gXCJJTlZBTElEXCIpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNhbGxiYWNrKCk7XHJcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY2FsbE1ldGhvZCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1ldGhvZCh0aGlzLmZvcm0sIHRoaXMuY29udGV4dCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblN1Y2Nlc3MuZW1pdChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3MocmVzdWx0Lm1lc3NhZ2UsIHJlc3VsdC5jb250ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHJlYXNvbiA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcmVhc29uIHx8ICFyZWFzb24ubWVzc2FnZSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlYXNvbiBtdXN0IGltcGxlbWVudCBJQXN5bmNNZXNzYWdlIGludGVyZmFjZVwiKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KHJlYXNvbik7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3Rlci5lcnJvcihyZWFzb24ubWVzc2FnZSwgcmVhc29uLmNvbnRleHQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==