@klippa/ngx-enhancy-forms 2.2.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/klippa-ngx-enhancy-forms.umd.js +459 -412
- package/bundles/klippa-ngx-enhancy-forms.umd.js.map +1 -1
- package/bundles/klippa-ngx-enhancy-forms.umd.min.js +2 -3
- package/bundles/klippa-ngx-enhancy-forms.umd.min.js.map +1 -1
- package/esm2015/lib/form/form-element/form-element.component.js +3 -1
- package/esm2015/lib/form/form.component.js +56 -14
- package/fesm2015/klippa-ngx-enhancy-forms.js +94 -51
- package/fesm2015/klippa-ngx-enhancy-forms.js.map +1 -1
- package/klippa-ngx-enhancy-forms.metadata.json +1 -1
- package/lib/form/form.component.d.ts +15 -5
- package/package.json +1 -1
|
@@ -28,6 +28,8 @@ export class FormElementComponent {
|
|
|
28
28
|
}, message);
|
|
29
29
|
}
|
|
30
30
|
registerControl(formControl) {
|
|
31
|
+
// console.log('register');
|
|
32
|
+
// console.log(this.caption);
|
|
31
33
|
this.attachedControl = formControl;
|
|
32
34
|
this.parent.registerControl(formControl, this);
|
|
33
35
|
}
|
|
@@ -97,4 +99,4 @@ FormElementComponent.propDecorators = {
|
|
|
97
99
|
swapInputAndCaption: [{ type: Input }],
|
|
98
100
|
internalComponentRef: [{ type: ViewChild, args: ['internalComponentRef',] }]
|
|
99
101
|
};
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lbGVtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9ydW5uZXIvd29yay9uZ3gtZW5oYW5jeS1mb3Jtcy9uZ3gtZW5oYW5jeS1mb3Jtcy9wcm9qZWN0cy9rbGlwcGEvbmd4LWVuaGFuY3ktZm9ybXMvc3JjLyIsInNvdXJjZXMiOlsibGliL2Zvcm0vZm9ybS1lbGVtZW50L2Zvcm0tZWxlbWVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBYyxJQUFJLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQVUsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV0SCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFHaEQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxjQUFjLENBQXNCLHFCQUFxQixDQUFDLENBQUM7QUFFbEcsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQXNCO0lBQ3hELEdBQUcsRUFBRSxnQ0FBZ0M7SUFDckMsR0FBRyxFQUFFLGlDQUFpQztJQUN0QyxRQUFRLEVBQUUsd0JBQXdCO0lBQ2xDLEtBQUssRUFBRSwyQkFBMkI7SUFDbEMsU0FBUyxFQUFFLGdEQUFnRDtJQUMzRCxTQUFTLEVBQUUsaURBQWlEO0lBQzVELE9BQU8sRUFBRSx5QkFBeUI7SUFDbEMsYUFBYSxFQUFFLHNCQUFzQjtJQUNyQyxJQUFJLEVBQUUsb0JBQW9CO0NBQzFCLENBQUE7QUFPRCxNQUFNLE9BQU8sb0JBQW9CO0lBWWhDLFlBQzZCLE1BQXFCLEVBQ0EsY0FBbUM7UUFEeEQsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNBLG1CQUFjLEdBQWQsY0FBYyxDQUFxQjtRQVhyRSxjQUFTLEdBQThCLFlBQVksQ0FBQztRQUNwRCxtQkFBYyxHQUEyQixhQUFhLENBQUM7UUFDdkQsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBSTlDLGtCQUFh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QUMsR0FBNEI7O1FBQzVDLHlCQUFPLElBQUksQ0FBQyxjQUFjLDBDQUFHLEdBQUcsc0ZBQVMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRSxDQUFDOzs7WUF2RkQsU0FBUyxTQUFDO2dCQUNWLFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLHNwRUFBNEM7O2FBRTVDOzs7WUFyQk8sYUFBYSx1QkFtQ2xCLElBQUksWUFBSSxRQUFROzRDQUNoQixNQUFNLFNBQUMsbUJBQW1CLGNBQUcsUUFBUTs7O3NCQVp0QyxLQUFLO3dCQUNMLEtBQUs7NkJBQ0wsS0FBSztrQ0FDTCxLQUFLO21DQUNMLFNBQVMsU0FBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdCwgSW5qZWN0LCBJbmplY3Rpb25Ub2tlbiwgSW5wdXQsIE9uSW5pdCwgT3B0aW9uYWwsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtGb3JtQ29tcG9uZW50fSBmcm9tIFwiLi4vZm9ybS5jb21wb25lbnRcIjtcbmltcG9ydCB7Q3VzdG9tRXJyb3JNZXNzYWdlcywgRm9ybUVycm9yTWVzc2FnZXN9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgY29uc3QgRk9STV9FUlJPUl9NRVNTQUdFUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDdXN0b21FcnJvck1lc3NhZ2VzPignZm9ybS5lcnJvci5tZXNzYWdlcycpO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9FUlJPUl9NRVNTQUdFUzogRm9ybUVycm9yTWVzc2FnZXMgPSB7XG5cdG1pbjogXCJVc2UgYSBudW1iZXIgbGFyZ2VyIHRoYW4gJW1pbiVcIixcblx0bWF4OiBcIlVzZSBhIG51bWJlciBzbWFsbGVyIHRoYW4gJW1heCVcIixcblx0cmVxdWlyZWQ6IFwiVGhpcyBmaWVsZCBpcyByZXF1aXJlZFwiLFxuXHRlbWFpbDogXCJVc2UgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIsXG5cdG1pbkxlbmd0aDogXCJIYXMgdG8gYmUgbG9uZ2VyIHRoYW4gJW1pbkxlbmd0aCUgY2hhcmFjdGVyKHMpXCIsXG5cdG1heExlbmd0aDogXCJIYXMgdG8gYmUgc2hvcnRlciB0aGFuICVtYXhMZW5ndGglIGNoYXJhY3RlcihzKVwiLFxuXHRwYXR0ZXJuOiBcIlRoaXMgaW5wdXQgaXMgbm90IHZhbGlkXCIsXG5cdG1hdGNoUGFzc3dvcmQ6IFwiUGFzc3dvcmRzIG11c3QgbWF0Y2hcIixcblx0ZGF0ZTogXCJFbnRlciBhIHZhbGlkIGRhdGVcIixcbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAna2xwLWZvcm0tZWxlbWVudCcsXG5cdHRlbXBsYXRlVXJsOiAnLi9mb3JtLWVsZW1lbnQuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi9mb3JtLWVsZW1lbnQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUVsZW1lbnRDb21wb25lbnQge1xuXHRwdWJsaWMgYXR0YWNoZWRDb250cm9sOiBBYnN0cmFjdENvbnRyb2w7XG5cdEBJbnB1dCgpIHB1YmxpYyBjYXB0aW9uOiBTdHJpbmc7XG5cdEBJbnB1dCgpIHB1YmxpYyBkaXJlY3Rpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcgPSAnaG9yaXpvbnRhbCc7XG5cdEBJbnB1dCgpIHB1YmxpYyBjYXB0aW9uU3BhY2luZzogJ3BlcmNlbnRhZ2VzJyB8ICdub25lJyA9ICdwZXJjZW50YWdlcyc7XG5cdEBJbnB1dCgpIHB1YmxpYyBzd2FwSW5wdXRBbmRDYXB0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cdEBWaWV3Q2hpbGQoJ2ludGVybmFsQ29tcG9uZW50UmVmJykgcHVibGljIGludGVybmFsQ29tcG9uZW50UmVmOiBFbGVtZW50UmVmO1xuXG5cdHB1YmxpYyBjYXB0aW9uUmVmOiBFbGVtZW50UmVmO1xuXHRwdWJsaWMgZXJyb3JNZXNzYWdlczogRm9ybUVycm9yTWVzc2FnZXMgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTO1xuXHRwdWJsaWMgY3VzdG9tRXJyb3JIYW5kbGVyczogQXJyYXk8eyBlcnJvcjogc3RyaW5nOyB0ZW1wbGF0ZVJlZjogRWxlbWVudFJlZiB9PiA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdEBIb3N0KCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBwYXJlbnQ6IEZvcm1Db21wb25lbnQsXG5cdFx0QEluamVjdChGT1JNX0VSUk9SX01FU1NBR0VTKSBAT3B0aW9uYWwoKSBwcml2YXRlIGN1c3RvbU1lc3NhZ2VzOiBDdXN0b21FcnJvck1lc3NhZ2VzXG5cdCkge1xuXHR9XG5cblx0cHVibGljIHN1YnN0aXR1dGVQYXJhbWV0ZXJzKG1lc3NhZ2U6IHN0cmluZywgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgYW55Pik6IHN0cmluZyB7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpLnJlZHVjZSgobXNnLCBrZXkpID0+IHtcblx0XHRcdHJldHVybiBtc2cucmVwbGFjZShgJSR7a2V5fSVgLCBwYXJhbWV0ZXJzW2tleV0pO1xuXHRcdH0sIG1lc3NhZ2UpO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyQ29udHJvbChmb3JtQ29udHJvbDogRm9ybUNvbnRyb2wpIHtcblx0XHQvLyBjb25zb2xlLmxvZygncmVnaXN0ZXInKTtcblx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLmNhcHRpb24pO1xuXHRcdHRoaXMuYXR0YWNoZWRDb250cm9sID0gZm9ybUNvbnRyb2w7XG5cdFx0dGhpcy5wYXJlbnQucmVnaXN0ZXJDb250cm9sKGZvcm1Db250cm9sLCB0aGlzKTtcblx0fVxuXG5cdHB1YmxpYyB1bnJlZ2lzdGVyQ29udHJvbChmb3JtQ29udHJvbDogRm9ybUNvbnRyb2wpIHtcblx0XHR0aGlzLmF0dGFjaGVkQ29udHJvbCA9IG51bGw7XG5cdFx0dGhpcy5wYXJlbnQudW5yZWdpc3RlckNvbnRyb2woZm9ybUNvbnRyb2wpO1xuXHR9XG5cblx0cHVibGljIGdldEF0dGFjaGVkQ29udHJvbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5hdHRhY2hlZENvbnRyb2w7XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJFcnJvckhhbmRsZXIoZXJyb3I6IHN0cmluZywgdGVtcGxhdGVSZWY6IEVsZW1lbnRSZWYpIHtcblx0XHR0aGlzLmN1c3RvbUVycm9ySGFuZGxlcnMucHVzaCh7IGVycm9yLCB0ZW1wbGF0ZVJlZiB9KTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlckNhcHRpb24odGVtcGxhdGVSZWY6IEVsZW1lbnRSZWYpIHtcblx0XHR0aGlzLmNhcHRpb25SZWYgPSB0ZW1wbGF0ZVJlZjtcblx0fVxuXG5cdGdldEVycm9yVG9TaG93KCkge1xuXHRcdGlmICh0aGlzLmF0dGFjaGVkQ29udHJvbD8udG91Y2hlZCA9PT0gdHJ1ZSAmJiB0aGlzLmF0dGFjaGVkQ29udHJvbD8uZXJyb3JzKSB7XG5cdFx0XHRyZXR1cm4gT2JqZWN0LmtleXModGhpcy5hdHRhY2hlZENvbnRyb2w/LmVycm9ycylbMF07XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Z2V0Q3VzdG9tRXJyb3JIYW5kbGVyKGVycm9yOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gdGhpcy5jdXN0b21FcnJvckhhbmRsZXJzLmZpbmQoKGUpID0+IGUuZXJyb3IgPT09IGVycm9yKTtcblx0fVxuXG5cdHNob3dEZWZhdWx0RXJyb3IoZXJyb3I6IHN0cmluZykge1xuXHRcdHJldHVybiB0aGlzLmdldEVycm9yVG9TaG93KCkgPT09IGVycm9yICYmICF0aGlzLmN1c3RvbUVycm9ySGFuZGxlcnMuc29tZSgoZSkgPT4gZS5lcnJvciA9PT0gZXJyb3IpO1xuXHR9XG5cblx0Z2V0U2Nyb2xsYWJsZVBhcmVudChub2RlKSB7XG5cdFx0aWYgKG5vZGUgPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdGlmIChub2RlLnNjcm9sbEhlaWdodCA+IG5vZGUuY2xpZW50SGVpZ2h0KSB7XG5cdFx0XHRyZXR1cm4gbm9kZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsYWJsZVBhcmVudChub2RlLnBhcmVudE5vZGUpO1xuXHRcdH1cblx0fVxuXG5cdHNjcm9sbFRvKCkge1xuXHRcdHRoaXMuaW50ZXJuYWxDb21wb25lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldyh0cnVlKTtcblx0XHQvLyB0byBnaXZlIHNvbWUgYnJlYXRoaW5nIHJvb20sIHdlIHNjcm9sbCAxMDBweCBtb3JlIHRvIHRoZSB0b3Bcblx0XHR0aGlzLmdldFNjcm9sbGFibGVQYXJlbnQodGhpcy5pbnRlcm5hbENvbXBvbmVudFJlZi5uYXRpdmVFbGVtZW50KT8uc2Nyb2xsQnkoMCwgLTEwMCk7XG5cdH1cblxuXHRnZXRFcnJvck1lc3NhZ2VzKGtleToga2V5b2YgRm9ybUVycm9yTWVzc2FnZXMpIHtcblx0XHRyZXR1cm4gdGhpcy5jdXN0b21NZXNzYWdlcz8uW2tleV0/LigpID8/IHRoaXMuZXJyb3JNZXNzYWdlc1trZXldO1xuXHR9XG59XG4iXX0=
|
|
@@ -1,43 +1,80 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { FormArray, FormControl, FormGroup } from '@angular/forms';
|
|
1
|
+
import { Component, Input, Optional, SkipSelf } from '@angular/core';
|
|
2
|
+
import { FormArray, FormControl, FormGroup, FormGroupName } from '@angular/forms';
|
|
3
|
+
import { isValueSet } from '../util/values';
|
|
3
4
|
export const invalidFieldsSymbol = Symbol('Not all fields are valid');
|
|
4
|
-
|
|
5
|
+
// Only used as a 'marker' to define a property will be filled in by a sub form
|
|
6
|
+
export class SubForm extends FormGroup {
|
|
5
7
|
constructor() {
|
|
8
|
+
super({}, null);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class FormComponent {
|
|
12
|
+
constructor(parent, surroundingFormGroupName) {
|
|
13
|
+
this.parent = parent;
|
|
14
|
+
this.surroundingFormGroupName = surroundingFormGroupName;
|
|
6
15
|
// we keep track of what form controls are actually rendered. Only those count when looking at form validation
|
|
7
16
|
this.activeControls = [];
|
|
8
17
|
}
|
|
18
|
+
ngOnInit() {
|
|
19
|
+
var _a;
|
|
20
|
+
if (this.parent) {
|
|
21
|
+
if (!isValueSet((_a = this.surroundingFormGroupName) === null || _a === void 0 ? void 0 : _a.name)) {
|
|
22
|
+
throw new Error('No surrounding groupname is found for a nested form');
|
|
23
|
+
}
|
|
24
|
+
const groupName = String(this.surroundingFormGroupName.name);
|
|
25
|
+
const groupToOverwrite = this.parent.formGroup.get(groupName);
|
|
26
|
+
if (!(groupToOverwrite instanceof SubForm)) {
|
|
27
|
+
throw new Error(`Surrounding groupname '${groupName}' is not a subFormSubstitute'`);
|
|
28
|
+
}
|
|
29
|
+
this.parent.formGroup.setControl(groupName, this.formGroup);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
9
32
|
registerControl(formControl, formElement) {
|
|
10
33
|
this.activeControls.push({ formControl, formElement });
|
|
34
|
+
if (this.parent) {
|
|
35
|
+
this.parent.registerControl(formControl, formElement);
|
|
36
|
+
}
|
|
11
37
|
}
|
|
12
38
|
unregisterControl(formControl) {
|
|
13
39
|
this.activeControls = this.activeControls.filter((e) => e.formControl !== formControl);
|
|
40
|
+
if (this.parent) {
|
|
41
|
+
this.parent.unregisterControl(formControl);
|
|
42
|
+
}
|
|
14
43
|
}
|
|
15
|
-
|
|
44
|
+
addFormGroupControls(formGroup, result) {
|
|
16
45
|
Object.values(formGroup.controls).forEach((value) => {
|
|
17
46
|
if (value instanceof FormGroup) {
|
|
18
|
-
this.
|
|
47
|
+
this.addFormGroupControls(value, result);
|
|
19
48
|
}
|
|
20
49
|
else if (value instanceof FormArray) {
|
|
21
|
-
this.
|
|
50
|
+
this.addFormArrayControls(value, result);
|
|
22
51
|
}
|
|
23
52
|
else if (value instanceof FormControl) {
|
|
24
|
-
this.
|
|
53
|
+
this.addFormControl(value, result);
|
|
25
54
|
}
|
|
26
55
|
});
|
|
27
56
|
}
|
|
28
|
-
|
|
57
|
+
addFormArrayControls(formArray, result) {
|
|
29
58
|
formArray.controls.forEach((value) => {
|
|
30
59
|
if (value instanceof FormGroup) {
|
|
31
|
-
this.
|
|
60
|
+
this.addFormGroupControls(value, result);
|
|
32
61
|
}
|
|
33
62
|
else if (value instanceof FormArray) {
|
|
34
|
-
this.
|
|
63
|
+
this.addFormArrayControls(value, result);
|
|
35
64
|
}
|
|
36
65
|
else if (value instanceof FormControl) {
|
|
37
|
-
this.
|
|
66
|
+
this.addFormControl(value, result);
|
|
38
67
|
}
|
|
39
68
|
});
|
|
40
69
|
}
|
|
70
|
+
getAllFormControls() {
|
|
71
|
+
const result = [];
|
|
72
|
+
this.addFormGroupControls(this.formGroup, result);
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
75
|
+
addFormControl(control, result) {
|
|
76
|
+
result.push(control);
|
|
77
|
+
}
|
|
41
78
|
disableInactiveFormControl(control) {
|
|
42
79
|
if (!this.activeControls.some((e) => e.formControl === control)) {
|
|
43
80
|
control.disable();
|
|
@@ -46,10 +83,11 @@ export class FormComponent {
|
|
|
46
83
|
trySubmit() {
|
|
47
84
|
var _a, _b;
|
|
48
85
|
this.formGroup.markAllAsTouched();
|
|
49
|
-
const
|
|
86
|
+
const allControls = this.getAllFormControls();
|
|
87
|
+
const originalDisabledStates = allControls.map(e => {
|
|
50
88
|
return { control: e, disabled: e.disabled };
|
|
51
89
|
});
|
|
52
|
-
|
|
90
|
+
allControls.forEach(e => this.disableInactiveFormControl(e));
|
|
53
91
|
const values = this.formGroup.value;
|
|
54
92
|
if (this.formGroup.valid) {
|
|
55
93
|
this.setDisabledStatesForAllControls(originalDisabledStates);
|
|
@@ -79,7 +117,11 @@ FormComponent.decorators = [
|
|
|
79
117
|
styles: [":host{display:block}:host.row{display:flex}"]
|
|
80
118
|
},] }
|
|
81
119
|
];
|
|
120
|
+
FormComponent.ctorParameters = () => [
|
|
121
|
+
{ type: FormComponent, decorators: [{ type: SkipSelf }, { type: Optional }] },
|
|
122
|
+
{ type: FormGroupName, decorators: [{ type: Optional }] }
|
|
123
|
+
];
|
|
82
124
|
FormComponent.propDecorators = {
|
|
83
125
|
formGroup: [{ type: Input }]
|
|
84
126
|
};
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvbmd4LWVuaGFuY3ktZm9ybXMvbmd4LWVuaGFuY3ktZm9ybXMvcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBa0IsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUdsRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQU90RSxNQUFNLE9BQU8sYUFBYTtJQUwxQjtRQVFDLDhHQUE4RztRQUN0RyxtQkFBYyxHQUdqQixFQUFFLENBQUM7SUFnRVQsQ0FBQztJQTlETyxlQUFlLENBQUMsV0FBd0IsRUFBRSxXQUFpQztRQUNqRixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxXQUF3QjtRQUNoRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFTyxnQ0FBZ0MsQ0FBQyxTQUFvQjtRQUM1RCxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuRCxJQUFJLEtBQUssWUFBWSxTQUFTLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxLQUFLLENB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b21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0Zvcm1FbGVtZW50Q29tcG9uZW50fSBmcm9tIFwiLi9mb3JtLWVsZW1lbnQvZm9ybS1lbGVtZW50LmNvbXBvbmVudFwiO1xuXG5leHBvcnQgY29uc3QgaW52YWxpZEZpZWxkc1N5bWJvbCA9IFN5bWJvbCgnTm90IGFsbCBmaWVsZHMgYXJlIHZhbGlkJyk7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2tscC1mb3JtJyxcblx0dGVtcGxhdGVVcmw6ICcuL2Zvcm0uY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi9mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1Db21wb25lbnQge1xuXHRASW5wdXQoKSBwdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG5cblx0Ly8gd2Uga2VlcCB0cmFjayBvZiB3aGF0IGZvcm0gY29udHJvbHMgYXJlIGFjdHVhbGx5IHJlbmRlcmVkLiBPbmx5IHRob3NlIGNvdW50IHdoZW4gbG9va2luZyBhdCBmb3JtIHZhbGlkYXRpb25cblx0cHJpdmF0ZSBhY3RpdmVDb250cm9sczogQXJyYXk8e1xuXHRcdGZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcblx0XHRmb3JtRWxlbWVudDogRm9ybUVsZW1lbnRDb21wb25lbnQ7XG5cdH0+ID0gW107XG5cblx0cHVibGljIHJlZ2lzdGVyQ29udHJvbChmb3JtQ29udHJvbDogRm9ybUNvbnRyb2wsIGZvcm1FbGVtZW50OiBGb3JtRWxlbWVudENvbXBvbmVudCk6IHZvaWQge1xuXHRcdHRoaXMuYWN0aXZlQ29udHJvbHMucHVzaCh7IGZvcm1Db250cm9sLCBmb3JtRWxlbWVudCB9KTtcblx0fVxuXG5cdHB1YmxpYyB1bnJlZ2lzdGVyQ29udHJvbChmb3JtQ29udHJvbDogRm9ybUNvbnRyb2wpOiB2b2lkIHtcblx0XHR0aGlzLmFjdGl2ZUNvbnRyb2xzID0gdGhpcy5hY3RpdmVDb250cm9scy5maWx0ZXIoKGUpID0+IGUuZm9ybUNvbnRyb2wgIT09IGZvcm1Db250cm9sKTtcblx0fVxuXG5cdHByaXZhdGUgZGlzYWJsZUluYWN0aXZlRm9ybUdyb3VwQ29udHJvbHMoZm9ybUdyb3VwOiBGb3JtR3JvdXApOiB2b2lkIHtcblx0XHRPYmplY3QudmFsdWVzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaCgodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuXHRcdFx0XHR0aGlzLmRpc2FibGVJbmFjdGl2ZUZvcm1Hcm91cENvbnRyb2xzKHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcblx0XHRcdFx0dGhpcy5kaXNhYmxlSW5hY3RpdmVGb3JtQXJyYXlDb250cm9scyh2YWx1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcblx0XHRcdFx0dGhpcy5kaXNhYmxlSW5hY3RpdmVGb3JtQ29udHJvbCh2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cHJpdmF0ZSBkaXNhYmxlSW5hY3RpdmVGb3JtQXJyYXlDb250cm9scyhmb3JtQXJyYXk6IEZvcm1BcnJheSk6IHZvaWQge1xuXHRcdGZvcm1BcnJheS5jb250cm9scy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG5cdFx0XHRcdHRoaXMuZGlzYWJsZUluYWN0aXZlRm9ybUdyb3VwQ29udHJvbHModmFsdWUpO1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuXHRcdFx0XHR0aGlzLmRpc2FibGVJbmFjdGl2ZUZvcm1BcnJheUNvbnRyb2xzKHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xuXHRcdFx0XHR0aGlzLmRpc2FibGVJbmFjdGl2ZUZvcm1Db250cm9sKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRwcml2YXRlIGRpc2FibGVJbmFjdGl2ZUZvcm1Db250cm9sKGNvbnRyb2w6IEZvcm1Db250cm9sKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmFjdGl2ZUNvbnRyb2xzLnNvbWUoKGUpID0+IGUuZm9ybUNvbnRyb2wgPT09IGNvbnRyb2wpKSB7XG5cdFx0XHRjb250cm9sLmRpc2FibGUoKTtcblx0XHR9XG5cdH1cblxuXHR0cnlTdWJtaXQoKTogUHJvbWlzZTxhbnk+IHtcblx0XHR0aGlzLmZvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XG5cdFx0Y29uc3Qgb3JpZ2luYWxEaXNhYmxlZFN0YXRlcyA9IE9iamVjdC52YWx1ZXModGhpcy5mb3JtR3JvdXAuY29udHJvbHMpLm1hcChlID0+IHtcblx0XHRcdHJldHVybiB7IGNvbnRyb2w6IGUsIGRpc2FibGVkOiBlLmRpc2FibGVkfTtcblx0XHR9KTtcblx0XHR0aGlzLmRpc2FibGVJbmFjdGl2ZUZvcm1Hcm91cENvbnRyb2xzKHRoaXMuZm9ybUdyb3VwKTtcblx0XHRjb25zdCB2YWx1ZXMgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZTtcblx0XHRpZiAodGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcblx0XHRcdHRoaXMuc2V0RGlzYWJsZWRTdGF0ZXNGb3JBbGxDb250cm9scyhvcmlnaW5hbERpc2FibGVkU3RhdGVzKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWVzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hY3RpdmVDb250cm9scy5maW5kKChlKSA9PiAhZS5mb3JtQ29udHJvbC52YWxpZCk/LmZvcm1FbGVtZW50Py5zY3JvbGxUbygpO1xuXHRcdFx0dGhpcy5zZXREaXNhYmxlZFN0YXRlc0ZvckFsbENvbnRyb2xzKG9yaWdpbmFsRGlzYWJsZWRTdGF0ZXMpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGludmFsaWRGaWVsZHNTeW1ib2wpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgc2V0RGlzYWJsZWRTdGF0ZXNGb3JBbGxDb250cm9scyhvcmlnaW5hbERpc2FibGVkU3RhdGVzOiBBcnJheTx7IGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDsgZGlzYWJsZWQ6IGJvb2xlYW4gfT4pOiB2b2lkIHtcblx0XHRvcmlnaW5hbERpc2FibGVkU3RhdGVzLmZvckVhY2goKGUpID0+IHtcblx0XHRcdGlmIChlLmRpc2FibGVkKSB7XG5cdFx0XHRcdGUuY29udHJvbC5kaXNhYmxlKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlLmNvbnRyb2wuZW5hYmxlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvbmd4LWVuaGFuY3ktZm9ybXMvbmd4LWVuaGFuY3ktZm9ybXMvcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFVLFFBQVEsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFrQixTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFFdEUsK0VBQStFO0FBQy9FLE1BQU0sT0FBTyxPQUFRLFNBQVEsU0FBUztJQUNyQztRQUNDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakIsQ0FBQztDQUNEO0FBT0QsTUFBTSxPQUFPLGFBQWE7SUFTekIsWUFDaUMsTUFBcUIsRUFDakMsd0JBQXVDO1FBRDNCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDakMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUFlO1FBUjVELDhHQUE4RztRQUN0RyxtQkFBYyxHQUdqQixFQUFFLENBQUM7SUFNUixDQUFDO0lBRUQsUUFBUTs7UUFDUCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFVBQVUsT0FBQyxJQUFJLENBQUMsd0JBQXdCLDBDQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7YUFDdkU7WUFDRCxNQUFNLFNBQVMsR0FBRyxN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T0FBTyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQzNDO0lBQ0YsQ0FBQztJQUVPLCtCQUErQixDQUFDLHNCQUE4RTtRQUNySCxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNwQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2YsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNwQjtpQkFBTTtnQkFDTixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ25CO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOzs7WUFsSEQsU0FBUyxTQUFDO2dCQUNWLFFBQVEsRUFBRSxVQUFVO2dCQUNwQiw4REFBb0M7O2FBRXBDOzs7WUFXeUMsYUFBYSx1QkFBcEQsUUFBUSxZQUFJLFFBQVE7WUE1QnFDLGFBQWEsdUJBNkJ0RSxRQUFROzs7d0JBVlQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCwgU2tpcFNlbGZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybUdyb3VwTmFtZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtGb3JtRWxlbWVudENvbXBvbmVudH0gZnJvbSAnLi9mb3JtLWVsZW1lbnQvZm9ybS1lbGVtZW50LmNvbXBvbmVudCc7XG5pbXBvcnQge2lzVmFsdWVTZXR9IGZyb20gJy4uL3V0aWwvdmFsdWVzJztcblxuZXhwb3J0IGNvbnN0IGludmFsaWRGaWVsZHNTeW1ib2wgPSBTeW1ib2woJ05vdCBhbGwgZmllbGRzIGFyZSB2YWxpZCcpO1xuXG4vLyBPbmx5IHVzZWQgYXMgYSAnbWFya2VyJyB0byBkZWZpbmUgYSBwcm9wZXJ0eSB3aWxsIGJlIGZpbGxlZCBpbiBieSBhIHN1YiBmb3JtXG5leHBvcnQgY2xhc3MgU3ViRm9ybSBleHRlbmRzIEZvcm1Hcm91cCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKHt9LCBudWxsKTtcblx0fVxufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdrbHAtZm9ybScsXG5cdHRlbXBsYXRlVXJsOiAnLi9mb3JtLmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmxzOiBbJy4vZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblx0QElucHV0KCkgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG5cdC8vIHdlIGtlZXAgdHJhY2sgb2Ygd2hhdCBmb3JtIGNvbnRyb2xzIGFyZSBhY3R1YWxseSByZW5kZXJlZC4gT25seSB0aG9zZSBjb3VudCB3aGVuIGxvb2tpbmcgYXQgZm9ybSB2YWxpZGF0aW9uXG5cdHByaXZhdGUgYWN0aXZlQ29udHJvbHM6IEFycmF5PHtcblx0XHRmb3JtQ29udHJvbDogRm9ybUNvbnRyb2w7XG5cdFx0Zm9ybUVsZW1lbnQ6IEZvcm1FbGVtZW50Q29tcG9uZW50O1xuXHR9PiA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdEBTa2lwU2VsZigpIEBPcHRpb25hbCgpIHByaXZhdGUgcGFyZW50OiBGb3JtQ29tcG9uZW50LFxuXHRcdEBPcHRpb25hbCgpIHByaXZhdGUgc3Vycm91bmRpbmdGb3JtR3JvdXBOYW1lOiBGb3JtR3JvdXBOYW1lLFxuXHQpIHtcblx0fVxuXG5cdG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLnBhcmVudCkge1xuXHRcdFx0aWYgKCFpc1ZhbHVlU2V0KHRoaXMuc3Vycm91bmRpbmdGb3JtR3JvdXBOYW1lPy5uYW1lKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ05vIHN1cnJvdW5kaW5nIGdyb3VwbmFtZSBpcyBmb3VuZCBmb3IgYSBuZXN0ZWQgZm9ybScpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZ3JvdXBOYW1lID0gU3RyaW5nKHRoaXMuc3Vycm91bmRpbmdGb3JtR3JvdXBOYW1lLm5hbWUpO1xuXHRcdFx0Y29uc3QgZ3JvdXBUb092ZXJ3cml0ZSA9IHRoaXMucGFyZW50LmZvcm1Hcm91cC5nZXQoZ3JvdXBOYW1lKTtcblx0XHRcdGlmICghKGdyb3VwVG9PdmVyd3JpdGUgaW5zdGFuY2VvZiBTdWJGb3JtKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFN1cnJvdW5kaW5nIGdyb3VwbmFtZSAnJHtncm91cE5hbWV9JyBpcyBub3QgYSBzdWJGb3JtU3Vic3RpdHV0ZSdgKTtcblx0XHRcdH1cblx0XHRcdHRoaXMucGFyZW50LmZvcm1Hcm91cC5zZXRDb250cm9sKGdyb3VwTmFtZSwgdGhpcy5mb3JtR3JvdXApO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlckNvbnRyb2woZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sLCBmb3JtRWxlbWVudDogRm9ybUVsZW1lbnRDb21wb25lbnQpOiB2b2lkIHtcblx0XHR0aGlzLmFjdGl2ZUNvbnRyb2xzLnB1c2goe2Zvcm1Db250cm9sLCBmb3JtRWxlbWVudH0pO1xuXHRcdGlmICh0aGlzLnBhcmVudCkge1xuXHRcdFx0dGhpcy5wYXJlbnQucmVnaXN0ZXJDb250cm9sKGZvcm1Db250cm9sLCBmb3JtRWxlbWVudCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHVucmVnaXN0ZXJDb250cm9sKGZvcm1Db250cm9sOiBGb3JtQ29udHJvbCk6IHZvaWQge1xuXHRcdHRoaXMuYWN0aXZlQ29udHJvbHMgPSB0aGlzLmFjdGl2ZUNvbnRyb2xzLmZpbHRlcigoZSkgPT4gZS5mb3JtQ29udHJvbCAhPT0gZm9ybUNvbnRyb2wpO1xuXHRcdGlmICh0aGlzLnBhcmVudCkge1xuXHRcdFx0dGhpcy5wYXJlbnQudW5yZWdpc3RlckNvbnRyb2woZm9ybUNvbnRyb2wpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYWRkRm9ybUdyb3VwQ29udHJvbHMoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIHJlc3VsdDogQXJyYXk8Rm9ybUNvbnRyb2w+KTogdm9pZCB7XG5cdFx0T2JqZWN0LnZhbHVlcyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcblx0XHRcdFx0dGhpcy5hZGRGb3JtR3JvdXBDb250cm9scyh2YWx1ZSwgcmVzdWx0KTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcblx0XHRcdFx0dGhpcy5hZGRGb3JtQXJyYXlDb250cm9scyh2YWx1ZSwgcmVzdWx0KTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xuXHRcdFx0XHR0aGlzLmFkZEZvcm1Db250cm9sKHZhbHVlLCByZXN1bHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBhZGRGb3JtQXJyYXlDb250cm9scyhmb3JtQXJyYXk6IEZvcm1BcnJheSwgcmVzdWx0OiBBcnJheTxGb3JtQ29udHJvbD4pOiB2b2lkIHtcblx0XHRmb3JtQXJyYXkuY29udHJvbHMuZm9yRWFjaCgodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuXHRcdFx0XHR0aGlzLmFkZEZvcm1Hcm91cENvbnRyb2xzKHZhbHVlLCByZXN1bHQpO1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuXHRcdFx0XHR0aGlzLmFkZEZvcm1BcnJheUNvbnRyb2xzKHZhbHVlLCByZXN1bHQpO1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1Db250cm9sKSB7XG5cdFx0XHRcdHRoaXMuYWRkRm9ybUNvbnRyb2wodmFsdWUsIHJlc3VsdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGdldEFsbEZvcm1Db250cm9scygpOiBBcnJheTxGb3JtQ29udHJvbD4ge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXHRcdHRoaXMuYWRkRm9ybUdyb3VwQ29udHJvbHModGhpcy5mb3JtR3JvdXAsIHJlc3VsdCk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByaXZhdGUgYWRkRm9ybUNvbnRyb2woY29udHJvbDogRm9ybUNvbnRyb2wsIHJlc3VsdDogQXJyYXk8Rm9ybUNvbnRyb2w+KTogdm9pZCB7XG5cdFx0cmVzdWx0LnB1c2goY29udHJvbCk7XG5cdH1cblxuXHRwcml2YXRlIGRpc2FibGVJbmFjdGl2ZUZvcm1Db250cm9sKGNvbnRyb2w6IEZvcm1Db250cm9sKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmFjdGl2ZUNvbnRyb2xzLnNvbWUoKGUpID0+IGUuZm9ybUNvbnRyb2wgPT09IGNvbnRyb2wpKSB7XG5cdFx0XHRjb250cm9sLmRpc2FibGUoKTtcblx0XHR9XG5cdH1cblxuXHR0cnlTdWJtaXQoKTogUHJvbWlzZTxhbnk+IHtcblx0XHR0aGlzLmZvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XG5cdFx0Y29uc3QgYWxsQ29udHJvbHM6IEFycmF5PEZvcm1Db250cm9sPiA9IHRoaXMuZ2V0QWxsRm9ybUNvbnRyb2xzKCk7XG5cdFx0Y29uc3Qgb3JpZ2luYWxEaXNhYmxlZFN0YXRlcyA9IGFsbENvbnRyb2xzLm1hcChlID0+IHtcblx0XHRcdHJldHVybiB7Y29udHJvbDogZSwgZGlzYWJsZWQ6IGUuZGlzYWJsZWR9O1xuXHRcdH0pO1xuXHRcdGFsbENvbnRyb2xzLmZvckVhY2goZSA9PiB0aGlzLmRpc2FibGVJbmFjdGl2ZUZvcm1Db250cm9sKGUpKTtcblx0XHRjb25zdCB2YWx1ZXMgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZTtcblx0XHRpZiAodGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcblx0XHRcdHRoaXMuc2V0RGlzYWJsZWRTdGF0ZXNGb3JBbGxDb250cm9scyhvcmlnaW5hbERpc2FibGVkU3RhdGVzKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWVzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hY3RpdmVDb250cm9scy5maW5kKChlKSA9PiAhZS5mb3JtQ29udHJvbC52YWxpZCk/LmZvcm1FbGVtZW50Py5zY3JvbGxUbygpO1xuXHRcdFx0dGhpcy5zZXREaXNhYmxlZFN0YXRlc0ZvckFsbENvbnRyb2xzKG9yaWdpbmFsRGlzYWJsZWRTdGF0ZXMpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGludmFsaWRGaWVsZHNTeW1ib2wpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgc2V0RGlzYWJsZWRTdGF0ZXNGb3JBbGxDb250cm9scyhvcmlnaW5hbERpc2FibGVkU3RhdGVzOiBBcnJheTx7IGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDsgZGlzYWJsZWQ6IGJvb2xlYW4gfT4pOiB2b2lkIHtcblx0XHRvcmlnaW5hbERpc2FibGVkU3RhdGVzLmZvckVhY2goKGUpID0+IHtcblx0XHRcdGlmIChlLmRpc2FibGVkKSB7XG5cdFx0XHRcdGUuY29udHJvbC5kaXNhYmxlKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlLmNvbnRyb2wuZW5hYmxlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Component, Input, InjectionToken, Host,
|
|
1
|
+
import { Component, SkipSelf, Optional, Input, InjectionToken, Host, Inject, ViewChild, HostBinding, EventEmitter, Output, ContentChild, TemplateRef, NgModule } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { FormGroup, FormArray, FormControl, ControlContainer, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
|
|
3
|
+
import { FormGroup, FormArray, FormControl, FormGroupName, ControlContainer, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
|
|
4
4
|
import { isString } from 'lodash';
|
|
5
5
|
import { SortablejsModule } from 'ngx-sortablejs';
|
|
6
6
|
import { NgSelectModule } from '@ng-select/ng-select';
|
|
@@ -10,44 +10,117 @@ import { MatFormFieldModule } from '@angular/material/form-field';
|
|
|
10
10
|
import { MatInputModule } from '@angular/material/input';
|
|
11
11
|
import { MatButtonModule } from '@angular/material/button';
|
|
12
12
|
|
|
13
|
+
function stringIsSetAndNotEmpty(s) {
|
|
14
|
+
return isString(s) && s.length > 0;
|
|
15
|
+
}
|
|
16
|
+
function isNullOrUndefined(value) {
|
|
17
|
+
return value === null || value === undefined;
|
|
18
|
+
}
|
|
19
|
+
function numberIsSet(value) {
|
|
20
|
+
return isValueSet(value) && typeof value === 'number';
|
|
21
|
+
}
|
|
22
|
+
function isValueSet(value) {
|
|
23
|
+
return value !== null && value !== undefined;
|
|
24
|
+
}
|
|
25
|
+
function stringOrArrayIsSetAndEmpty(value) {
|
|
26
|
+
return value !== null && value !== undefined && value.length === 0;
|
|
27
|
+
}
|
|
28
|
+
function useIfStringIsSet(s) {
|
|
29
|
+
if (stringIsSetAndNotEmpty(s)) {
|
|
30
|
+
return s;
|
|
31
|
+
}
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
function useIfArrayIsSetWithOneItem(a) {
|
|
35
|
+
if (!isNullOrUndefined(a) && a.length === 1) {
|
|
36
|
+
return a[0];
|
|
37
|
+
}
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
function convertParentToChild(originalClass, newClass) {
|
|
41
|
+
return Object.assign(newClass, originalClass);
|
|
42
|
+
}
|
|
43
|
+
function truncateString(s, length) {
|
|
44
|
+
if (s.length < length) {
|
|
45
|
+
return s;
|
|
46
|
+
}
|
|
47
|
+
return s.substring(0, length) + '...';
|
|
48
|
+
}
|
|
49
|
+
|
|
13
50
|
const invalidFieldsSymbol = Symbol('Not all fields are valid');
|
|
14
|
-
|
|
51
|
+
// Only used as a 'marker' to define a property will be filled in by a sub form
|
|
52
|
+
class SubForm extends FormGroup {
|
|
15
53
|
constructor() {
|
|
54
|
+
super({}, null);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
class FormComponent {
|
|
58
|
+
constructor(parent, surroundingFormGroupName) {
|
|
59
|
+
this.parent = parent;
|
|
60
|
+
this.surroundingFormGroupName = surroundingFormGroupName;
|
|
16
61
|
// we keep track of what form controls are actually rendered. Only those count when looking at form validation
|
|
17
62
|
this.activeControls = [];
|
|
18
63
|
}
|
|
64
|
+
ngOnInit() {
|
|
65
|
+
var _a;
|
|
66
|
+
if (this.parent) {
|
|
67
|
+
if (!isValueSet((_a = this.surroundingFormGroupName) === null || _a === void 0 ? void 0 : _a.name)) {
|
|
68
|
+
throw new Error('No surrounding groupname is found for a nested form');
|
|
69
|
+
}
|
|
70
|
+
const groupName = String(this.surroundingFormGroupName.name);
|
|
71
|
+
const groupToOverwrite = this.parent.formGroup.get(groupName);
|
|
72
|
+
if (!(groupToOverwrite instanceof SubForm)) {
|
|
73
|
+
throw new Error(`Surrounding groupname '${groupName}' is not a subFormSubstitute'`);
|
|
74
|
+
}
|
|
75
|
+
this.parent.formGroup.setControl(groupName, this.formGroup);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
19
78
|
registerControl(formControl, formElement) {
|
|
20
79
|
this.activeControls.push({ formControl, formElement });
|
|
80
|
+
if (this.parent) {
|
|
81
|
+
this.parent.registerControl(formControl, formElement);
|
|
82
|
+
}
|
|
21
83
|
}
|
|
22
84
|
unregisterControl(formControl) {
|
|
23
85
|
this.activeControls = this.activeControls.filter((e) => e.formControl !== formControl);
|
|
86
|
+
if (this.parent) {
|
|
87
|
+
this.parent.unregisterControl(formControl);
|
|
88
|
+
}
|
|
24
89
|
}
|
|
25
|
-
|
|
90
|
+
addFormGroupControls(formGroup, result) {
|
|
26
91
|
Object.values(formGroup.controls).forEach((value) => {
|
|
27
92
|
if (value instanceof FormGroup) {
|
|
28
|
-
this.
|
|
93
|
+
this.addFormGroupControls(value, result);
|
|
29
94
|
}
|
|
30
95
|
else if (value instanceof FormArray) {
|
|
31
|
-
this.
|
|
96
|
+
this.addFormArrayControls(value, result);
|
|
32
97
|
}
|
|
33
98
|
else if (value instanceof FormControl) {
|
|
34
|
-
this.
|
|
99
|
+
this.addFormControl(value, result);
|
|
35
100
|
}
|
|
36
101
|
});
|
|
37
102
|
}
|
|
38
|
-
|
|
103
|
+
addFormArrayControls(formArray, result) {
|
|
39
104
|
formArray.controls.forEach((value) => {
|
|
40
105
|
if (value instanceof FormGroup) {
|
|
41
|
-
this.
|
|
106
|
+
this.addFormGroupControls(value, result);
|
|
42
107
|
}
|
|
43
108
|
else if (value instanceof FormArray) {
|
|
44
|
-
this.
|
|
109
|
+
this.addFormArrayControls(value, result);
|
|
45
110
|
}
|
|
46
111
|
else if (value instanceof FormControl) {
|
|
47
|
-
this.
|
|
112
|
+
this.addFormControl(value, result);
|
|
48
113
|
}
|
|
49
114
|
});
|
|
50
115
|
}
|
|
116
|
+
getAllFormControls() {
|
|
117
|
+
const result = [];
|
|
118
|
+
this.addFormGroupControls(this.formGroup, result);
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
addFormControl(control, result) {
|
|
122
|
+
result.push(control);
|
|
123
|
+
}
|
|
51
124
|
disableInactiveFormControl(control) {
|
|
52
125
|
if (!this.activeControls.some((e) => e.formControl === control)) {
|
|
53
126
|
control.disable();
|
|
@@ -56,10 +129,11 @@ class FormComponent {
|
|
|
56
129
|
trySubmit() {
|
|
57
130
|
var _a, _b;
|
|
58
131
|
this.formGroup.markAllAsTouched();
|
|
59
|
-
const
|
|
132
|
+
const allControls = this.getAllFormControls();
|
|
133
|
+
const originalDisabledStates = allControls.map(e => {
|
|
60
134
|
return { control: e, disabled: e.disabled };
|
|
61
135
|
});
|
|
62
|
-
|
|
136
|
+
allControls.forEach(e => this.disableInactiveFormControl(e));
|
|
63
137
|
const values = this.formGroup.value;
|
|
64
138
|
if (this.formGroup.valid) {
|
|
65
139
|
this.setDisabledStatesForAllControls(originalDisabledStates);
|
|
@@ -89,6 +163,10 @@ FormComponent.decorators = [
|
|
|
89
163
|
styles: [":host{display:block}:host.row{display:flex}"]
|
|
90
164
|
},] }
|
|
91
165
|
];
|
|
166
|
+
FormComponent.ctorParameters = () => [
|
|
167
|
+
{ type: FormComponent, decorators: [{ type: SkipSelf }, { type: Optional }] },
|
|
168
|
+
{ type: FormGroupName, decorators: [{ type: Optional }] }
|
|
169
|
+
];
|
|
92
170
|
FormComponent.propDecorators = {
|
|
93
171
|
formGroup: [{ type: Input }]
|
|
94
172
|
};
|
|
@@ -121,6 +199,8 @@ class FormElementComponent {
|
|
|
121
199
|
}, message);
|
|
122
200
|
}
|
|
123
201
|
registerControl(formControl) {
|
|
202
|
+
// console.log('register');
|
|
203
|
+
// console.log(this.caption);
|
|
124
204
|
this.attachedControl = formControl;
|
|
125
205
|
this.parent.registerControl(formControl, this);
|
|
126
206
|
}
|
|
@@ -191,43 +271,6 @@ FormElementComponent.propDecorators = {
|
|
|
191
271
|
internalComponentRef: [{ type: ViewChild, args: ['internalComponentRef',] }]
|
|
192
272
|
};
|
|
193
273
|
|
|
194
|
-
function stringIsSetAndNotEmpty(s) {
|
|
195
|
-
return isString(s) && s.length > 0;
|
|
196
|
-
}
|
|
197
|
-
function isNullOrUndefined(value) {
|
|
198
|
-
return value === null || value === undefined;
|
|
199
|
-
}
|
|
200
|
-
function numberIsSet(value) {
|
|
201
|
-
return isValueSet(value) && typeof value === 'number';
|
|
202
|
-
}
|
|
203
|
-
function isValueSet(value) {
|
|
204
|
-
return value !== null && value !== undefined;
|
|
205
|
-
}
|
|
206
|
-
function stringOrArrayIsSetAndEmpty(value) {
|
|
207
|
-
return value !== null && value !== undefined && value.length === 0;
|
|
208
|
-
}
|
|
209
|
-
function useIfStringIsSet(s) {
|
|
210
|
-
if (stringIsSetAndNotEmpty(s)) {
|
|
211
|
-
return s;
|
|
212
|
-
}
|
|
213
|
-
return undefined;
|
|
214
|
-
}
|
|
215
|
-
function useIfArrayIsSetWithOneItem(a) {
|
|
216
|
-
if (!isNullOrUndefined(a) && a.length === 1) {
|
|
217
|
-
return a[0];
|
|
218
|
-
}
|
|
219
|
-
return undefined;
|
|
220
|
-
}
|
|
221
|
-
function convertParentToChild(originalClass, newClass) {
|
|
222
|
-
return Object.assign(newClass, originalClass);
|
|
223
|
-
}
|
|
224
|
-
function truncateString(s, length) {
|
|
225
|
-
if (s.length < length) {
|
|
226
|
-
return s;
|
|
227
|
-
}
|
|
228
|
-
return s.substring(0, length) + '...';
|
|
229
|
-
}
|
|
230
|
-
|
|
231
274
|
/**
|
|
232
275
|
* This component is a base in order to create a component that supports ngModel.
|
|
233
276
|
* Some important things to know about it:
|
|
@@ -815,5 +858,5 @@ NgxEnhancyFormsModule.decorators = [
|
|
|
815
858
|
* Generated bundle index. Do not edit.
|
|
816
859
|
*/
|
|
817
860
|
|
|
818
|
-
export { ButtonComponent, CheckboxComponent, DEFAULT_ERROR_MESSAGES, DatepickerComponent, EmailInputComponent, FORM_ERROR_MESSAGES, FormCaptionComponent, FormComponent, FormElementComponent, FormErrorComponent, FormSubmitButtonComponent, KLP_DATE_FORMATS, LoadingIndicatorComponent, NgxEnhancyFormsModule, NumberInputComponent, PasswordFieldComponent, SelectComponent, SortableItemsComponent, TextInputComponent, ToggleComponent, ValueAccessorBase, dateValidator, invalidDateKey, invalidFieldsSymbol, matDateFormatsFactory, MaterialModule as ɵa };
|
|
861
|
+
export { ButtonComponent, CheckboxComponent, DEFAULT_ERROR_MESSAGES, DatepickerComponent, EmailInputComponent, FORM_ERROR_MESSAGES, FormCaptionComponent, FormComponent, FormElementComponent, FormErrorComponent, FormSubmitButtonComponent, KLP_DATE_FORMATS, LoadingIndicatorComponent, NgxEnhancyFormsModule, NumberInputComponent, PasswordFieldComponent, SelectComponent, SortableItemsComponent, SubForm, TextInputComponent, ToggleComponent, ValueAccessorBase, dateValidator, invalidDateKey, invalidFieldsSymbol, matDateFormatsFactory, MaterialModule as ɵa };
|
|
819
862
|
//# sourceMappingURL=klippa-ngx-enhancy-forms.js.map
|