@klippa/ngx-enhancy-forms 2.2.0 → 3.0.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 +482 -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 +70 -13
- package/esm2015/lib/ngx-enhancy-forms.module.js +25 -23
- package/fesm2015/klippa-ngx-enhancy-forms.js +110 -50
- 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 +18 -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,95 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
1
|
+
import { Component, Directive, Input, Optional, SkipSelf } from '@angular/core';
|
|
2
2
|
import { FormArray, FormControl, FormGroup } from '@angular/forms';
|
|
3
|
+
import { isValueSet } from '../util/values';
|
|
3
4
|
export const invalidFieldsSymbol = Symbol('Not all fields are valid');
|
|
4
|
-
export class
|
|
5
|
+
export class SubFormDirective {
|
|
6
|
+
}
|
|
7
|
+
SubFormDirective.decorators = [
|
|
8
|
+
{ type: Directive, args: [{
|
|
9
|
+
// tslint:disable-next-line:directive-selector
|
|
10
|
+
selector: 'klp-sub-form',
|
|
11
|
+
},] }
|
|
12
|
+
];
|
|
13
|
+
SubFormDirective.propDecorators = {
|
|
14
|
+
injectInto: [{ type: Input }]
|
|
15
|
+
};
|
|
16
|
+
// Only used as a 'marker' to define a property will be filled in by a sub form
|
|
17
|
+
export class SubForm extends FormGroup {
|
|
5
18
|
constructor() {
|
|
19
|
+
super({}, null);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export class FormComponent {
|
|
23
|
+
constructor(parent, subFormPlaceholder) {
|
|
24
|
+
this.parent = parent;
|
|
25
|
+
this.subFormPlaceholder = subFormPlaceholder;
|
|
6
26
|
// we keep track of what form controls are actually rendered. Only those count when looking at form validation
|
|
7
27
|
this.activeControls = [];
|
|
8
28
|
}
|
|
29
|
+
ngOnInit() {
|
|
30
|
+
if (isValueSet(this.parent) && isValueSet(this.subFormPlaceholder)) {
|
|
31
|
+
const parentOfInjectInto = this.subFormPlaceholder.injectInto.parent;
|
|
32
|
+
if (parentOfInjectInto instanceof FormArray) {
|
|
33
|
+
const i = parentOfInjectInto.controls.findIndex((e) => e === this.subFormPlaceholder.injectInto);
|
|
34
|
+
parentOfInjectInto.setControl(i, this.formGroup);
|
|
35
|
+
}
|
|
36
|
+
else if (parentOfInjectInto instanceof FormGroup) {
|
|
37
|
+
const toReplace = Object.entries(parentOfInjectInto.controls).find(([key, val]) => {
|
|
38
|
+
return val === this.subFormPlaceholder.injectInto;
|
|
39
|
+
});
|
|
40
|
+
if (!((toReplace === null || toReplace === void 0 ? void 0 : toReplace[1]) instanceof SubForm)) {
|
|
41
|
+
throw new Error(`You are trying to inject a subForm ('${toReplace === null || toReplace === void 0 ? void 0 : toReplace[0]}') within something that is not annotated as such.`);
|
|
42
|
+
}
|
|
43
|
+
parentOfInjectInto.setControl(toReplace[0], this.formGroup);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
9
47
|
registerControl(formControl, formElement) {
|
|
10
48
|
this.activeControls.push({ formControl, formElement });
|
|
49
|
+
if (this.parent) {
|
|
50
|
+
this.parent.registerControl(formControl, formElement);
|
|
51
|
+
}
|
|
11
52
|
}
|
|
12
53
|
unregisterControl(formControl) {
|
|
13
54
|
this.activeControls = this.activeControls.filter((e) => e.formControl !== formControl);
|
|
55
|
+
if (this.parent) {
|
|
56
|
+
this.parent.unregisterControl(formControl);
|
|
57
|
+
}
|
|
14
58
|
}
|
|
15
|
-
|
|
59
|
+
addFormGroupControls(formGroup, result) {
|
|
16
60
|
Object.values(formGroup.controls).forEach((value) => {
|
|
17
61
|
if (value instanceof FormGroup) {
|
|
18
|
-
this.
|
|
62
|
+
this.addFormGroupControls(value, result);
|
|
19
63
|
}
|
|
20
64
|
else if (value instanceof FormArray) {
|
|
21
|
-
this.
|
|
65
|
+
this.addFormArrayControls(value, result);
|
|
22
66
|
}
|
|
23
67
|
else if (value instanceof FormControl) {
|
|
24
|
-
this.
|
|
68
|
+
this.addFormControl(value, result);
|
|
25
69
|
}
|
|
26
70
|
});
|
|
27
71
|
}
|
|
28
|
-
|
|
72
|
+
addFormArrayControls(formArray, result) {
|
|
29
73
|
formArray.controls.forEach((value) => {
|
|
30
74
|
if (value instanceof FormGroup) {
|
|
31
|
-
this.
|
|
75
|
+
this.addFormGroupControls(value, result);
|
|
32
76
|
}
|
|
33
77
|
else if (value instanceof FormArray) {
|
|
34
|
-
this.
|
|
78
|
+
this.addFormArrayControls(value, result);
|
|
35
79
|
}
|
|
36
80
|
else if (value instanceof FormControl) {
|
|
37
|
-
this.
|
|
81
|
+
this.addFormControl(value, result);
|
|
38
82
|
}
|
|
39
83
|
});
|
|
40
84
|
}
|
|
85
|
+
getAllFormControls() {
|
|
86
|
+
const result = [];
|
|
87
|
+
this.addFormGroupControls(this.formGroup, result);
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
addFormControl(control, result) {
|
|
91
|
+
result.push(control);
|
|
92
|
+
}
|
|
41
93
|
disableInactiveFormControl(control) {
|
|
42
94
|
if (!this.activeControls.some((e) => e.formControl === control)) {
|
|
43
95
|
control.disable();
|
|
@@ -46,10 +98,11 @@ export class FormComponent {
|
|
|
46
98
|
trySubmit() {
|
|
47
99
|
var _a, _b;
|
|
48
100
|
this.formGroup.markAllAsTouched();
|
|
49
|
-
const
|
|
101
|
+
const allControls = this.getAllFormControls();
|
|
102
|
+
const originalDisabledStates = allControls.map(e => {
|
|
50
103
|
return { control: e, disabled: e.disabled };
|
|
51
104
|
});
|
|
52
|
-
|
|
105
|
+
allControls.forEach(e => this.disableInactiveFormControl(e));
|
|
53
106
|
const values = this.formGroup.value;
|
|
54
107
|
if (this.formGroup.valid) {
|
|
55
108
|
this.setDisabledStatesForAllControls(originalDisabledStates);
|
|
@@ -79,7 +132,11 @@ FormComponent.decorators = [
|
|
|
79
132
|
styles: [":host{display:block}:host.row{display:flex}"]
|
|
80
133
|
},] }
|
|
81
134
|
];
|
|
135
|
+
FormComponent.ctorParameters = () => [
|
|
136
|
+
{ type: FormComponent, decorators: [{ type: SkipSelf }, { type: Optional }] },
|
|
137
|
+
{ type: SubFormDirective, decorators: [{ type: Optional }] }
|
|
138
|
+
];
|
|
82
139
|
FormComponent.propDecorators = {
|
|
83
140
|
formGroup: [{ type: Input }]
|
|
84
141
|
};
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvbmd4LWVuaGFuY3ktZm9ybXMvbmd4LWVuaGFuY3ktZm9ybXMvcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBa0IsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUdsRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQU90RSxNQUFNLE9BQU8sYUFBYTtJQUwxQjtRQVFDLDhHQUE4RztRQUN0RyxtQkFBYyxHQUdqQixFQUFFLENBQUM7SUFnRVQsQ0FBQztJQTlETyxlQUFlLENBQUMsV0FBd0IsRUFBRSxXQUFpQztRQUNqRixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxXQUF3QjtRQUNoRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFTyxnQ0FBZ0MsQ0FBQyxTQUFvQjtRQUM1RCxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuRCxJQUFJLEtBQUssWUFBWSxTQUFTLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxLQUFLLENB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b21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0Zvcm1FbGVtZW50Q29tcG9uZW50fSBmcm9tIFwiLi9mb3JtLWVsZW1lbnQvZm9ybS1lbGVtZW50LmNvbXBvbmVudFwiO1xuXG5leHBvcnQgY29uc3QgaW52YWxpZEZpZWxkc1N5bWJvbCA9IFN5bWJvbCgnTm90IGFsbCBmaWVsZHMgYXJlIHZhbGlkJyk7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2tscC1mb3JtJyxcblx0dGVtcGxhdGVVcmw6ICcuL2Zvcm0uY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi9mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1Db21wb25lbnQge1xuXHRASW5wdXQoKSBwdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG5cblx0Ly8gd2Uga2VlcCB0cmFjayBvZiB3aGF0IGZvcm0gY29udHJvbHMgYXJlIGFjdHVhbGx5IHJlbmRlcmVkLiBPbmx5IHRob3NlIGNvdW50IHdoZW4gbG9va2luZyBhdCBmb3JtIHZhbGlkYXRpb25cblx0cHJpdmF0ZSBhY3RpdmVDb250cm9sczogQXJyYXk8e1xuXHRcdGZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcblx0XHRmb3JtRWxlbWVudDogRm9ybUVsZW1lbnRDb21wb25lbnQ7XG5cdH0+ID0gW107XG5cblx0cHVibGljIHJlZ2lzdGVyQ29udHJvbChmb3JtQ29udHJvbDogRm9ybUNvbnRyb2wsIGZvcm1FbGVtZW50OiBGb3JtRWxlbWVudENvbXBvbmVudCk6IHZvaWQge1xuXHRcdHRoaXMuYWN0aXZlQ29udHJvbHMucHVzaCh7IGZvcm1Db250cm9sLCBmb3JtRWxlbWVudCB9KTtcblx0fVxuXG5cdHB1YmxpYyB1bnJlZ2lzdGVyQ29udHJvbChmb3JtQ29udHJvbDogRm9ybUNvbnRyb2wpOiB2b2lkIHtcblx0XHR0aGlzLmFjdGl2ZUNvbnRyb2xzID0gdGhpcy5hY3RpdmVDb250cm9scy5maWx0ZXIoKGUpID0+IGUuZm9ybUNvbnRyb2wgIT09IGZvcm1Db250cm9sKTtcblx0fVxuXG5cdHByaXZhdGUgZGlzYWJsZUluYWN0aXZlRm9ybUdyb3VwQ29udHJvbHMoZm9ybUdyb3VwOiBGb3JtR3JvdXApOiB2b2lkIHtcblx0XHRPYmplY3QudmFsdWVzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaCgodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuXHRcdFx0XHR0aGlzLmRpc2FibGVJbmFjdGl2ZUZvcm1Hcm91cENvbnRyb2xzKHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcblx0XHRcdFx0dGhpcy5kaXNhYmxlSW5hY3RpdmVGb3JtQXJyYXlDb250cm9scyh2YWx1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcblx0XHRcdFx0dGhpcy5kaXNhYmxlSW5hY3RpdmVGb3JtQ29udHJvbCh2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cHJpdmF0ZSBkaXNhYmxlSW5hY3RpdmVGb3JtQXJyYXlDb250cm9scyhmb3JtQXJyYXk6IEZvcm1BcnJheSk6IHZvaWQge1xuXHRcdGZvcm1BcnJheS5jb250cm9scy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG5cdFx0XHRcdHRoaXMuZGlzYWJsZUluYWN0aXZlRm9ybUdyb3VwQ29udHJvbHModmFsdWUpO1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuXHRcdFx0XHR0aGlzLmRpc2FibGVJbmFjdGl2ZUZvcm1BcnJheUNvbnRyb2xzKHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xuXHRcdFx0XHR0aGlzLmRpc2FibGVJbmFjdGl2ZUZvcm1Db250cm9sKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRwcml2YXRlIGRpc2FibGVJbmFjdGl2ZUZvcm1Db250cm9sKGNvbnRyb2w6IEZvcm1Db250cm9sKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmFjdGl2ZUNvbnRyb2xzLnNvbWUoKGUpID0+IGUuZm9ybUNvbnRyb2wgPT09IGNvbnRyb2wpKSB7XG5cdFx0XHRjb250cm9sLmRpc2FibGUoKTtcblx0XHR9XG5cdH1cblxuXHR0cnlTdWJtaXQoKTogUHJvbWlzZTxhbnk+IHtcblx0XHR0aGlzLmZvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XG5cdFx0Y29uc3Qgb3JpZ2luYWxEaXNhYmxlZFN0YXRlcyA9IE9iamVjdC52YWx1ZXModGhpcy5mb3JtR3JvdXAuY29udHJvbHMpLm1hcChlID0+IHtcblx0XHRcdHJldHVybiB7IGNvbnRyb2w6IGUsIGRpc2FibGVkOiBlLmRpc2FibGVkfTtcblx0XHR9KTtcblx0XHR0aGlzLmRpc2FibGVJbmFjdGl2ZUZvcm1Hcm91cENvbnRyb2xzKHRoaXMuZm9ybUdyb3VwKTtcblx0XHRjb25zdCB2YWx1ZXMgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZTtcblx0XHRpZiAodGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcblx0XHRcdHRoaXMuc2V0RGlzYWJsZWRTdGF0ZXNGb3JBbGxDb250cm9scyhvcmlnaW5hbERpc2FibGVkU3RhdGVzKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWVzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hY3RpdmVDb250cm9scy5maW5kKChlKSA9PiAhZS5mb3JtQ29udHJvbC52YWxpZCk/LmZvcm1FbGVtZW50Py5zY3JvbGxUbygpO1xuXHRcdFx0dGhpcy5zZXREaXNhYmxlZFN0YXRlc0ZvckFsbENvbnRyb2xzKG9yaWdpbmFsRGlzYWJsZWRTdGF0ZXMpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGludmFsaWRGaWVsZHNTeW1ib2wpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgc2V0RGlzYWJsZWRTdGF0ZXNGb3JBbGxDb250cm9scyhvcmlnaW5hbERpc2FibGVkU3RhdGVzOiBBcnJheTx7IGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDsgZGlzYWJsZWQ6IGJvb2xlYW4gfT4pOiB2b2lkIHtcblx0XHRvcmlnaW5hbERpc2FibGVkU3RhdGVzLmZvckVhY2goKGUpID0+IHtcblx0XHRcdGlmIChlLmRpc2FibGVkKSB7XG5cdFx0XHRcdGUuY29udHJvbC5kaXNhYmxlKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlLmNvbnRyb2wuZW5hYmxlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvbmd4LWVuaGFuY3ktZm9ybXMvbmd4LWVuaGFuY3ktZm9ybXMvcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxRQUFRLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBa0IsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQWdCLE1BQU0sZ0JBQWdCLENBQUM7QUFFakcsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTFDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBTXRFLE1BQU0sT0FBTyxnQkFBZ0I7OztZQUo1QixTQUFTLFNBQUM7Z0JBQ1YsOENBQThDO2dCQUM5QyxRQUFRLEVBQUUsY0FBYzthQUN4Qjs7O3lCQUVDLEtBQUs7O0FBR1AsK0VBQStFO0FBQy9FLE1BQU0sT0FBTyxPQUFRLFNBQVEsU0FBUztJQUNyQztRQUNDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakIsQ0FBQztDQUNEO0FBT0QsTUFBTSxPQUFPLGFBQWE7SUFTekIsWUFBNEMsTUFBcUIsRUFBc0Isa0JBQW9DO1FBQS9FLFdBQU0sR0FBTixNQUFNLENBQWU7UUFBc0IsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFrQjtRQU4zSCw4R0FBOEc7UUFDdEcsbUJBQWMsR0FHakIsRUFBRSxDQUFDO0lBRXNILENBQUM7SUFFL0gsUUFBUTtRQUNQLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLGtC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RSxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIERpcmVjdGl2ZSwgSW5wdXQsIE9uSW5pdCwgT3B0aW9uYWwsIFNraXBTZWxmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1Hcm91cE5hbWV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Rm9ybUVsZW1lbnRDb21wb25lbnR9IGZyb20gJy4vZm9ybS1lbGVtZW50L2Zvcm0tZWxlbWVudC5jb21wb25lbnQnO1xuaW1wb3J0IHtpc1ZhbHVlU2V0fSBmcm9tICcuLi91dGlsL3ZhbHVlcyc7XG5cbmV4cG9ydCBjb25zdCBpbnZhbGlkRmllbGRzU3ltYm9sID0gU3ltYm9sKCdOb3QgYWxsIGZpZWxkcyBhcmUgdmFsaWQnKTtcblxuQERpcmVjdGl2ZSh7XG5cdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3Jcblx0c2VsZWN0b3I6ICdrbHAtc3ViLWZvcm0nLFxufSlcbmV4cG9ydCBjbGFzcyBTdWJGb3JtRGlyZWN0aXZlIHtcblx0QElucHV0KCkgaW5qZWN0SW50bzogQWJzdHJhY3RDb250cm9sO1xufVxuXG4vLyBPbmx5IHVzZWQgYXMgYSAnbWFya2VyJyB0byBkZWZpbmUgYSBwcm9wZXJ0eSB3aWxsIGJlIGZpbGxlZCBpbiBieSBhIHN1YiBmb3JtXG5leHBvcnQgY2xhc3MgU3ViRm9ybSBleHRlbmRzIEZvcm1Hcm91cCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKHt9LCBudWxsKTtcblx0fVxufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdrbHAtZm9ybScsXG5cdHRlbXBsYXRlVXJsOiAnLi9mb3JtLmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmxzOiBbJy4vZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblx0QElucHV0KCkgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG5cdC8vIHdlIGtlZXAgdHJhY2sgb2Ygd2hhdCBmb3JtIGNvbnRyb2xzIGFyZSBhY3R1YWxseSByZW5kZXJlZC4gT25seSB0aG9zZSBjb3VudCB3aGVuIGxvb2tpbmcgYXQgZm9ybSB2YWxpZGF0aW9uXG5cdHByaXZhdGUgYWN0aXZlQ29udHJvbHM6IEFycmF5PHtcblx0XHRmb3JtQ29udHJvbDogRm9ybUNvbnRyb2w7XG5cdFx0Zm9ybUVsZW1lbnQ6IEZvcm1FbGVtZW50Q29tcG9uZW50O1xuXHR9PiA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yKEBTa2lwU2VsZigpIEBPcHRpb25hbCgpIHByaXZhdGUgcGFyZW50OiBGb3JtQ29tcG9uZW50LCBAT3B0aW9uYWwoKSBwcml2YXRlIHN1YkZvcm1QbGFjZWhvbGRlcjogU3ViRm9ybURpcmVjdGl2ZSkge31cblxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHRpZiAoaXNWYWx1ZVNldCh0aGlzLnBhcmVudCkgJiYgaXNWYWx1ZVNldCh0aGlzLnN1YkZvcm1QbGFjZWhvbGRlcikpIHtcblx0XHRcdGNvbnN0IHBhcmVudE9mSW5qZWN0SW50byA9IHRoaXMuc3ViRm9ybVBsYWNlaG9sZGVyLmluamVjdEludG8ucGFyZW50O1xuXHRcdFx0aWYgKHBhcmVudE9mSW5qZWN0SW50byBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuXHRcdFx0XHRjb25zdCBpID0gcGFyZW50T2ZJbmplY3RJbnRvLmNvbnRyb2xzLmZpbmRJbmRleCgoZSkgPT4gZSA9PT0gdGhpcy5zdWJGb3JtUGxhY2Vob2xkZXIuaW5qZWN0SW50byk7XG5cdFx0XHRcdHBhcmVudE9mSW5qZWN0SW50by5zZXRDb250cm9sKGksIHRoaXMuZm9ybUdyb3VwKTtcblx0XHRcdH0gZWxzZSBpZiAocGFyZW50T2ZJbmplY3RJbnRvIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG5cdFx0XHRcdGNvbnN0IHRvUmVwbGFjZSA9IE9iamVjdC5lbnRyaWVzKHBhcmVudE9mSW5qZWN0SW50by5jb250cm9scykuZmluZCgoW2tleSwgdmFsXSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB2YWwgPT09IHRoaXMuc3ViRm9ybVBsYWNlaG9sZGVyLmluamVjdEludG87XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoISh0b1JlcGxhY2U/LlsxXSBpbnN0YW5jZW9mIFN1YkZvcm0pKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBZb3UgYXJlIHRyeWluZyB0byBpbmplY3QgYSBzdWJGb3JtICgnJHt0b1JlcGxhY2U/LlswXX0nKSB3aXRoaW4gc29tZXRoaW5nIHRoYXQgaXMgbm90IGFubm90YXRlZCBhcyBzdWNoLmApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHBhcmVudE9mSW5qZWN0SW50by5zZXRDb250cm9sKHRvUmVwbGFjZVswXSwgdGhpcy5mb3JtR3JvdXApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlckNvbnRyb2woZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sLCBmb3JtRWxlbWVudDogRm9ybUVsZW1lbnRDb21wb25lbnQpOiB2b2lkIHtcblx0XHR0aGlzLmFjdGl2ZUNvbnRyb2xzLnB1c2goe2Zvcm1Db250cm9sLCBmb3JtRWxlbWVudH0pO1xuXHRcdGlmICh0aGlzLnBhcmVudCkge1xuXHRcdFx0dGhpcy5wYXJlbnQucmVnaXN0ZXJDb250cm9sKGZvcm1Db250cm9sLCBmb3JtRWxlbWVudCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHVucmVnaXN0ZXJDb250cm9sKGZvcm1Db250cm9sOiBGb3JtQ29udHJvbCk6IHZvaWQge1xuXHRcdHRoaXMuYWN0aXZlQ29udHJvbHMgPSB0aGlzLmFjdGl2ZUNvbnRyb2xzLmZpbHRlcigoZSkgPT4gZS5mb3JtQ29udHJvbCAhPT0gZm9ybUNvbnRyb2wpO1xuXHRcdGlmICh0aGlzLnBhcmVudCkge1xuXHRcdFx0dGhpcy5wYXJlbnQudW5yZWdpc3RlckNvbnRyb2woZm9ybUNvbnRyb2wpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYWRkRm9ybUdyb3VwQ29udHJvbHMoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIHJlc3VsdDogQXJyYXk8Rm9ybUNvbnRyb2w+KTogdm9pZCB7XG5cdFx0T2JqZWN0LnZhbHVlcyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcblx0XHRcdFx0dGhpcy5hZGRGb3JtR3JvdXBDb250cm9scyh2YWx1ZSwgcmVzdWx0KTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcblx0XHRcdFx0dGhpcy5hZGRGb3JtQXJyYXlDb250cm9scyh2YWx1ZSwgcmVzdWx0KTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xuXHRcdFx0XHR0aGlzLmFkZEZvcm1Db250cm9sKHZhbHVlLCByZXN1bHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBhZGRGb3JtQXJyYXlDb250cm9scyhmb3JtQXJyYXk6IEZvcm1BcnJheSwgcmVzdWx0OiBBcnJheTxGb3JtQ29udHJvbD4pOiB2b2lkIHtcblx0XHRmb3JtQXJyYXkuY29udHJvbHMuZm9yRWFjaCgodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuXHRcdFx0XHR0aGlzLmFkZEZvcm1Hcm91cENvbnRyb2xzKHZhbHVlLCByZXN1bHQpO1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuXHRcdFx0XHR0aGlzLmFkZEZvcm1BcnJheUNvbnRyb2xzKHZhbHVlLCByZXN1bHQpO1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1Db250cm9sKSB7XG5cdFx0XHRcdHRoaXMuYWRkRm9ybUNvbnRyb2wodmFsdWUsIHJlc3VsdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGdldEFsbEZvcm1Db250cm9scygpOiBBcnJheTxGb3JtQ29udHJvbD4ge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXHRcdHRoaXMuYWRkRm9ybUdyb3VwQ29udHJvbHModGhpcy5mb3JtR3JvdXAsIHJlc3VsdCk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByaXZhdGUgYWRkRm9ybUNvbnRyb2woY29udHJvbDogRm9ybUNvbnRyb2wsIHJlc3VsdDogQXJyYXk8Rm9ybUNvbnRyb2w+KTogdm9pZCB7XG5cdFx0cmVzdWx0LnB1c2goY29udHJvbCk7XG5cdH1cblxuXHRwcml2YXRlIGRpc2FibGVJbmFjdGl2ZUZvcm1Db250cm9sKGNvbnRyb2w6IEZvcm1Db250cm9sKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmFjdGl2ZUNvbnRyb2xzLnNvbWUoKGUpID0+IGUuZm9ybUNvbnRyb2wgPT09IGNvbnRyb2wpKSB7XG5cdFx0XHRjb250cm9sLmRpc2FibGUoKTtcblx0XHR9XG5cdH1cblxuXHR0cnlTdWJtaXQoKTogUHJvbWlzZTxhbnk+IHtcblx0XHR0aGlzLmZvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XG5cdFx0Y29uc3QgYWxsQ29udHJvbHM6IEFycmF5PEZvcm1Db250cm9sPiA9IHRoaXMuZ2V0QWxsRm9ybUNvbnRyb2xzKCk7XG5cdFx0Y29uc3Qgb3JpZ2luYWxEaXNhYmxlZFN0YXRlcyA9IGFsbENvbnRyb2xzLm1hcChlID0+IHtcblx0XHRcdHJldHVybiB7Y29udHJvbDogZSwgZGlzYWJsZWQ6IGUuZGlzYWJsZWR9O1xuXHRcdH0pO1xuXHRcdGFsbENvbnRyb2xzLmZvckVhY2goZSA9PiB0aGlzLmRpc2FibGVJbmFjdGl2ZUZvcm1Db250cm9sKGUpKTtcblx0XHRjb25zdCB2YWx1ZXMgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZTtcblx0XHRpZiAodGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcblx0XHRcdHRoaXMuc2V0RGlzYWJsZWRTdGF0ZXNGb3JBbGxDb250cm9scyhvcmlnaW5hbERpc2FibGVkU3RhdGVzKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWVzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hY3RpdmVDb250cm9scy5maW5kKChlKSA9PiAhZS5mb3JtQ29udHJvbC52YWxpZCk/LmZvcm1FbGVtZW50Py5zY3JvbGxUbygpO1xuXHRcdFx0dGhpcy5zZXREaXNhYmxlZFN0YXRlc0ZvckFsbENvbnRyb2xzKG9yaWdpbmFsRGlzYWJsZWRTdGF0ZXMpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGludmFsaWRGaWVsZHNTeW1ib2wpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgc2V0RGlzYWJsZWRTdGF0ZXNGb3JBbGxDb250cm9scyhvcmlnaW5hbERpc2FibGVkU3RhdGVzOiBBcnJheTx7IGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDsgZGlzYWJsZWQ6IGJvb2xlYW4gfT4pOiB2b2lkIHtcblx0XHRvcmlnaW5hbERpc2FibGVkU3RhdGVzLmZvckVhY2goKGUpID0+IHtcblx0XHRcdGlmIChlLmRpc2FibGVkKSB7XG5cdFx0XHRcdGUuY29udHJvbC5kaXNhYmxlKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlLmNvbnRyb2wuZW5hYmxlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import { NgModule } from '@angular/core';
|
|
2
|
-
import { CommonModule } from
|
|
3
|
-
import { FormsModule } from
|
|
4
|
-
import { ValueAccessorBase } from
|
|
5
|
-
import { ButtonComponent } from
|
|
6
|
-
import { CheckboxComponent } from
|
|
7
|
-
import { EmailInputComponent } from
|
|
8
|
-
import { LoadingIndicatorComponent } from
|
|
9
|
-
import { NumberInputComponent } from
|
|
10
|
-
import { PasswordFieldComponent } from
|
|
11
|
-
import { SelectComponent } from
|
|
12
|
-
import { SortableItemsComponent } from
|
|
13
|
-
import { TextInputComponent } from
|
|
14
|
-
import { ToggleComponent } from
|
|
15
|
-
import { FormCaptionComponent } from
|
|
16
|
-
import { FormElementComponent } from
|
|
17
|
-
import { FormErrorComponent } from
|
|
18
|
-
import { FormSubmitButtonComponent } from
|
|
19
|
-
import { FormComponent } from
|
|
20
|
-
import { SortablejsModule } from
|
|
21
|
-
import { NgSelectModule } from
|
|
22
|
-
import { DatepickerComponent } from
|
|
23
|
-
import { MaterialModule } from
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { ValueAccessorBase } from './elements/value-accessor-base/value-accessor-base.component';
|
|
5
|
+
import { ButtonComponent } from './elements/button/button.component';
|
|
6
|
+
import { CheckboxComponent } from './elements/checkbox/checkbox.component';
|
|
7
|
+
import { EmailInputComponent } from './elements/email/email-input.component';
|
|
8
|
+
import { LoadingIndicatorComponent } from './elements/loading-indicator/loading-indicator.component';
|
|
9
|
+
import { NumberInputComponent } from './elements/number-input/number-input.component';
|
|
10
|
+
import { PasswordFieldComponent } from './elements/password-field/password-field.component';
|
|
11
|
+
import { SelectComponent } from './elements/select/select.component';
|
|
12
|
+
import { SortableItemsComponent } from './elements/sortable-items/sortable-items.component';
|
|
13
|
+
import { TextInputComponent } from './elements/text-input/text-input.component';
|
|
14
|
+
import { ToggleComponent } from './elements/toggle/toggle.component';
|
|
15
|
+
import { FormCaptionComponent } from './form/form-caption/form-caption.component';
|
|
16
|
+
import { FormElementComponent } from './form/form-element/form-element.component';
|
|
17
|
+
import { FormErrorComponent } from './form/form-error/form-error.component';
|
|
18
|
+
import { FormSubmitButtonComponent } from './form/form-submit-button/form-submit-button.component';
|
|
19
|
+
import { FormComponent, SubFormDirective } from './form/form.component';
|
|
20
|
+
import { SortablejsModule } from 'ngx-sortablejs';
|
|
21
|
+
import { NgSelectModule } from '@ng-select/ng-select';
|
|
22
|
+
import { DatepickerComponent } from './elements/datepicker/datepicker.component';
|
|
23
|
+
import { MaterialModule } from './material.module';
|
|
24
24
|
export class NgxEnhancyFormsModule {
|
|
25
25
|
}
|
|
26
26
|
NgxEnhancyFormsModule.decorators = [
|
|
@@ -50,6 +50,7 @@ NgxEnhancyFormsModule.decorators = [
|
|
|
50
50
|
FormErrorComponent,
|
|
51
51
|
FormSubmitButtonComponent,
|
|
52
52
|
FormComponent,
|
|
53
|
+
SubFormDirective,
|
|
53
54
|
],
|
|
54
55
|
exports: [
|
|
55
56
|
ValueAccessorBase,
|
|
@@ -69,7 +70,8 @@ NgxEnhancyFormsModule.decorators = [
|
|
|
69
70
|
FormErrorComponent,
|
|
70
71
|
FormSubmitButtonComponent,
|
|
71
72
|
FormComponent,
|
|
73
|
+
SubFormDirective,
|
|
72
74
|
]
|
|
73
75
|
},] }
|
|
74
76
|
];
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWVuaGFuY3ktZm9ybXMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3J1bm5lci93b3JrL25neC1lbmhhbmN5LWZvcm1zL25neC1lbmhhbmN5LWZvcm1zL3Byb2plY3RzL2tsaXBwYS9uZ3gtZW5oYW5jeS1mb3Jtcy9zcmMvIiwic291cmNlcyI6WyJsaWIvbmd4LWVuaGFuY3ktZm9ybXMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw4REFBOEQsQ0FBQztBQUMvRixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDekUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDM0UsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sMERBQTBELENBQUM7QUFDbkcsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFDcEYsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sb0RBQW9ELENBQUM7QUFDMUYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBQzFGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUNoRixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUNoRixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRSxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSx3REFBd0QsQ0FBQztBQUNqRyxPQUFPLEVBQUMsYUFBYSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDdEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQy9FLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQW9EakQsTUFBTSxPQUFPLHFCQUFxQjs7O1lBakRqQyxRQUFRLFNBQUM7Z0JBQ1QsT0FBTyxFQUFFO29CQUNSLFlBQVk7b0JBQ1osV0FBVztvQkFDWCxjQUFjO29CQUNkLGdCQUFnQjtvQkFDaEIsY0FBYztpQkFDZDtnQkFDRCxZQUFZLEVBQUU7b0JBQ2IsaUJBQWlCO29CQUNqQixlQUFlO29CQUNmLGlCQUFpQjtvQkFDakIsbUJBQW1CO29CQUNuQixtQkFBbUI7b0JBQ25CLHlCQUF5QjtvQkFDekIsb0JBQW9CO29CQUNwQixzQkFBc0I7b0JBQ3RCLGVBQWU7b0JBQ2Ysc0JBQXNCO29CQUN0QixrQkFBa0I7b0JBQ2xCLGVBQWU7b0JBQ2Ysb0JBQW9CO29CQUNwQixvQkFBb0I7b0JBQ3BCLGtCQUFrQjtvQkFDbEIseUJBQXlCO29CQUN6QixhQUFhO29CQUNiLGdCQUFnQjtpQkFDaEI7Z0JBQ0QsT0FBTyxFQUFFO29CQUNSLGlCQUFpQjtvQkFDakIsZUFBZTtvQkFDZixtQkFBbUI7b0JBQ25CLGlCQUFpQjtvQkFDakIsbUJBQW1CO29CQUNuQix5QkFBeUI7b0JBQ3pCLG9CQUFvQjtvQkFDcEIsc0JBQXNCO29CQUN0QixlQUFlO29CQUNmLHNCQUFzQjtvQkFDdEIsa0JBQWtCO29CQUNsQixlQUFlO29CQUNmLG9CQUFvQjtvQkFDcEIsb0JBQW9CO29CQUNwQixrQkFBa0I7b0JBQ2xCLHlCQUF5QjtvQkFDekIsYUFBYTtvQkFDYixnQkFBZ0I7aUJBQ2hCO2FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtWYWx1ZUFjY2Vzc29yQmFzZX0gZnJvbSAnLi9lbGVtZW50cy92YWx1ZS1hY2Nlc3Nvci1iYXNlL3ZhbHVlLWFjY2Vzc29yLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7QnV0dG9uQ29tcG9uZW50fSBmcm9tICcuL2VsZW1lbnRzL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7Q2hlY2tib3hDb21wb25lbnR9IGZyb20gJy4vZWxlbWVudHMvY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7RW1haWxJbnB1dENvbXBvbmVudH0gZnJvbSAnLi9lbGVtZW50cy9lbWFpbC9lbWFpbC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHtMb2FkaW5nSW5kaWNhdG9yQ29tcG9uZW50fSBmcm9tICcuL2VsZW1lbnRzL2xvYWRpbmctaW5kaWNhdG9yL2xvYWRpbmctaW5kaWNhdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQge051bWJlcklucHV0Q29tcG9uZW50fSBmcm9tICcuL2VsZW1lbnRzL251bWJlci1pbnB1dC9udW1iZXItaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7UGFzc3dvcmRGaWVsZENvbXBvbmVudH0gZnJvbSAnLi9lbGVtZW50cy9wYXNzd29yZC1maWVsZC9wYXNzd29yZC1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHtTZWxlY3RDb21wb25lbnR9IGZyb20gJy4vZWxlbWVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHtTb3J0YWJsZUl0ZW1zQ29tcG9uZW50fSBmcm9tICcuL2VsZW1lbnRzL3NvcnRhYmxlLWl0ZW1zL3NvcnRhYmxlLWl0ZW1zLmNvbXBvbmVudCc7XG5pbXBvcnQge1RleHRJbnB1dENvbXBvbmVudH0gZnJvbSAnLi9lbGVtZW50cy90ZXh0LWlucHV0L3RleHQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7VG9nZ2xlQ29tcG9uZW50fSBmcm9tICcuL2VsZW1lbnRzL3RvZ2dsZS90b2dnbGUuY29tcG9uZW50JztcbmltcG9ydCB7Rm9ybUNhcHRpb25Db21wb25lbnR9IGZyb20gJy4vZm9ybS9mb3JtLWNhcHRpb24vZm9ybS1jYXB0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQge0Zvcm1FbGVtZW50Q29tcG9uZW50fSBmcm9tICcuL2Zvcm0vZm9ybS1lbGVtZW50L2Zvcm0tZWxlbWVudC5jb21wb25lbnQnO1xuaW1wb3J0IHtGb3JtRXJyb3JDb21wb25lbnR9IGZyb20gJy4vZm9ybS9mb3JtLWVycm9yL2Zvcm0tZXJyb3IuY29tcG9uZW50JztcbmltcG9ydCB7Rm9ybVN1Ym1pdEJ1dHRvbkNvbXBvbmVudH0gZnJvbSAnLi9mb3JtL2Zvcm0tc3VibWl0LWJ1dHRvbi9mb3JtLXN1Ym1pdC1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7Rm9ybUNvbXBvbmVudCwgU3ViRm9ybURpcmVjdGl2ZX0gZnJvbSAnLi9mb3JtL2Zvcm0uY29tcG9uZW50JztcbmltcG9ydCB7U29ydGFibGVqc01vZHVsZX0gZnJvbSAnbmd4LXNvcnRhYmxlanMnO1xuaW1wb3J0IHtOZ1NlbGVjdE1vZHVsZX0gZnJvbSAnQG5nLXNlbGVjdC9uZy1zZWxlY3QnO1xuaW1wb3J0IHtEYXRlcGlja2VyQ29tcG9uZW50fSBmcm9tICcuL2VsZW1lbnRzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHtNYXRlcmlhbE1vZHVsZX0gZnJvbSAnLi9tYXRlcmlhbC5tb2R1bGUnO1xuXG5cbkBOZ01vZHVsZSh7XG5cdGltcG9ydHM6IFtcblx0XHRDb21tb25Nb2R1bGUsXG5cdFx0Rm9ybXNNb2R1bGUsXG5cdFx0TmdTZWxlY3RNb2R1bGUsXG5cdFx0U29ydGFibGVqc01vZHVsZSxcblx0XHRNYXRlcmlhbE1vZHVsZSxcblx0XSxcblx0ZGVjbGFyYXRpb25zOiBbXG5cdFx0VmFsdWVBY2Nlc3NvckJhc2UsXG5cdFx0QnV0dG9uQ29tcG9uZW50LFxuXHRcdENoZWNrYm94Q29tcG9uZW50LFxuXHRcdERhdGVwaWNrZXJDb21wb25lbnQsXG5cdFx0RW1haWxJbnB1dENvbXBvbmVudCxcblx0XHRMb2FkaW5nSW5kaWNhdG9yQ29tcG9uZW50LFxuXHRcdE51bWJlcklucHV0Q29tcG9uZW50LFxuXHRcdFBhc3N3b3JkRmllbGRDb21wb25lbnQsXG5cdFx0U2VsZWN0Q29tcG9uZW50LFxuXHRcdFNvcnRhYmxlSXRlbXNDb21wb25lbnQsXG5cdFx0VGV4dElucHV0Q29tcG9uZW50LFxuXHRcdFRvZ2dsZUNvbXBvbmVudCxcblx0XHRGb3JtQ2FwdGlvbkNvbXBvbmVudCxcblx0XHRGb3JtRWxlbWVudENvbXBvbmVudCxcblx0XHRGb3JtRXJyb3JDb21wb25lbnQsXG5cdFx0Rm9ybVN1Ym1pdEJ1dHRvbkNvbXBvbmVudCxcblx0XHRGb3JtQ29tcG9uZW50LFxuXHRcdFN1YkZvcm1EaXJlY3RpdmUsXG5cdF0sXG5cdGV4cG9ydHM6IFtcblx0XHRWYWx1ZUFjY2Vzc29yQmFzZSxcblx0XHRCdXR0b25Db21wb25lbnQsXG5cdFx0RGF0ZXBpY2tlckNvbXBvbmVudCxcblx0XHRDaGVja2JveENvbXBvbmVudCxcblx0XHRFbWFpbElucHV0Q29tcG9uZW50LFxuXHRcdExvYWRpbmdJbmRpY2F0b3JDb21wb25lbnQsXG5cdFx0TnVtYmVySW5wdXRDb21wb25lbnQsXG5cdFx0UGFzc3dvcmRGaWVsZENvbXBvbmVudCxcblx0XHRTZWxlY3RDb21wb25lbnQsXG5cdFx0U29ydGFibGVJdGVtc0NvbXBvbmVudCxcblx0XHRUZXh0SW5wdXRDb21wb25lbnQsXG5cdFx0VG9nZ2xlQ29tcG9uZW50LFxuXHRcdEZvcm1DYXB0aW9uQ29tcG9uZW50LFxuXHRcdEZvcm1FbGVtZW50Q29tcG9uZW50LFxuXHRcdEZvcm1FcnJvckNvbXBvbmVudCxcblx0XHRGb3JtU3VibWl0QnV0dG9uQ29tcG9uZW50LFxuXHRcdEZvcm1Db21wb25lbnQsXG5cdFx0U3ViRm9ybURpcmVjdGl2ZSxcblx0XVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hFbmhhbmN5Rm9ybXNNb2R1bGUge1xufVxuIl19
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Directive, Input, Component, SkipSelf, Optional, InjectionToken, Host, Inject, ViewChild, HostBinding, EventEmitter, Output, ContentChild, TemplateRef, NgModule } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { FormGroup, FormArray, FormControl, ControlContainer, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
|
|
4
4
|
import { isString } from 'lodash';
|
|
@@ -10,44 +10,132 @@ 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
|
-
class
|
|
51
|
+
class SubFormDirective {
|
|
52
|
+
}
|
|
53
|
+
SubFormDirective.decorators = [
|
|
54
|
+
{ type: Directive, args: [{
|
|
55
|
+
// tslint:disable-next-line:directive-selector
|
|
56
|
+
selector: 'klp-sub-form',
|
|
57
|
+
},] }
|
|
58
|
+
];
|
|
59
|
+
SubFormDirective.propDecorators = {
|
|
60
|
+
injectInto: [{ type: Input }]
|
|
61
|
+
};
|
|
62
|
+
// Only used as a 'marker' to define a property will be filled in by a sub form
|
|
63
|
+
class SubForm extends FormGroup {
|
|
15
64
|
constructor() {
|
|
65
|
+
super({}, null);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
class FormComponent {
|
|
69
|
+
constructor(parent, subFormPlaceholder) {
|
|
70
|
+
this.parent = parent;
|
|
71
|
+
this.subFormPlaceholder = subFormPlaceholder;
|
|
16
72
|
// we keep track of what form controls are actually rendered. Only those count when looking at form validation
|
|
17
73
|
this.activeControls = [];
|
|
18
74
|
}
|
|
75
|
+
ngOnInit() {
|
|
76
|
+
if (isValueSet(this.parent) && isValueSet(this.subFormPlaceholder)) {
|
|
77
|
+
const parentOfInjectInto = this.subFormPlaceholder.injectInto.parent;
|
|
78
|
+
if (parentOfInjectInto instanceof FormArray) {
|
|
79
|
+
const i = parentOfInjectInto.controls.findIndex((e) => e === this.subFormPlaceholder.injectInto);
|
|
80
|
+
parentOfInjectInto.setControl(i, this.formGroup);
|
|
81
|
+
}
|
|
82
|
+
else if (parentOfInjectInto instanceof FormGroup) {
|
|
83
|
+
const toReplace = Object.entries(parentOfInjectInto.controls).find(([key, val]) => {
|
|
84
|
+
return val === this.subFormPlaceholder.injectInto;
|
|
85
|
+
});
|
|
86
|
+
if (!((toReplace === null || toReplace === void 0 ? void 0 : toReplace[1]) instanceof SubForm)) {
|
|
87
|
+
throw new Error(`You are trying to inject a subForm ('${toReplace === null || toReplace === void 0 ? void 0 : toReplace[0]}') within something that is not annotated as such.`);
|
|
88
|
+
}
|
|
89
|
+
parentOfInjectInto.setControl(toReplace[0], this.formGroup);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
19
93
|
registerControl(formControl, formElement) {
|
|
20
94
|
this.activeControls.push({ formControl, formElement });
|
|
95
|
+
if (this.parent) {
|
|
96
|
+
this.parent.registerControl(formControl, formElement);
|
|
97
|
+
}
|
|
21
98
|
}
|
|
22
99
|
unregisterControl(formControl) {
|
|
23
100
|
this.activeControls = this.activeControls.filter((e) => e.formControl !== formControl);
|
|
101
|
+
if (this.parent) {
|
|
102
|
+
this.parent.unregisterControl(formControl);
|
|
103
|
+
}
|
|
24
104
|
}
|
|
25
|
-
|
|
105
|
+
addFormGroupControls(formGroup, result) {
|
|
26
106
|
Object.values(formGroup.controls).forEach((value) => {
|
|
27
107
|
if (value instanceof FormGroup) {
|
|
28
|
-
this.
|
|
108
|
+
this.addFormGroupControls(value, result);
|
|
29
109
|
}
|
|
30
110
|
else if (value instanceof FormArray) {
|
|
31
|
-
this.
|
|
111
|
+
this.addFormArrayControls(value, result);
|
|
32
112
|
}
|
|
33
113
|
else if (value instanceof FormControl) {
|
|
34
|
-
this.
|
|
114
|
+
this.addFormControl(value, result);
|
|
35
115
|
}
|
|
36
116
|
});
|
|
37
117
|
}
|
|
38
|
-
|
|
118
|
+
addFormArrayControls(formArray, result) {
|
|
39
119
|
formArray.controls.forEach((value) => {
|
|
40
120
|
if (value instanceof FormGroup) {
|
|
41
|
-
this.
|
|
121
|
+
this.addFormGroupControls(value, result);
|
|
42
122
|
}
|
|
43
123
|
else if (value instanceof FormArray) {
|
|
44
|
-
this.
|
|
124
|
+
this.addFormArrayControls(value, result);
|
|
45
125
|
}
|
|
46
126
|
else if (value instanceof FormControl) {
|
|
47
|
-
this.
|
|
127
|
+
this.addFormControl(value, result);
|
|
48
128
|
}
|
|
49
129
|
});
|
|
50
130
|
}
|
|
131
|
+
getAllFormControls() {
|
|
132
|
+
const result = [];
|
|
133
|
+
this.addFormGroupControls(this.formGroup, result);
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
addFormControl(control, result) {
|
|
137
|
+
result.push(control);
|
|
138
|
+
}
|
|
51
139
|
disableInactiveFormControl(control) {
|
|
52
140
|
if (!this.activeControls.some((e) => e.formControl === control)) {
|
|
53
141
|
control.disable();
|
|
@@ -56,10 +144,11 @@ class FormComponent {
|
|
|
56
144
|
trySubmit() {
|
|
57
145
|
var _a, _b;
|
|
58
146
|
this.formGroup.markAllAsTouched();
|
|
59
|
-
const
|
|
147
|
+
const allControls = this.getAllFormControls();
|
|
148
|
+
const originalDisabledStates = allControls.map(e => {
|
|
60
149
|
return { control: e, disabled: e.disabled };
|
|
61
150
|
});
|
|
62
|
-
|
|
151
|
+
allControls.forEach(e => this.disableInactiveFormControl(e));
|
|
63
152
|
const values = this.formGroup.value;
|
|
64
153
|
if (this.formGroup.valid) {
|
|
65
154
|
this.setDisabledStatesForAllControls(originalDisabledStates);
|
|
@@ -89,6 +178,10 @@ FormComponent.decorators = [
|
|
|
89
178
|
styles: [":host{display:block}:host.row{display:flex}"]
|
|
90
179
|
},] }
|
|
91
180
|
];
|
|
181
|
+
FormComponent.ctorParameters = () => [
|
|
182
|
+
{ type: FormComponent, decorators: [{ type: SkipSelf }, { type: Optional }] },
|
|
183
|
+
{ type: SubFormDirective, decorators: [{ type: Optional }] }
|
|
184
|
+
];
|
|
92
185
|
FormComponent.propDecorators = {
|
|
93
186
|
formGroup: [{ type: Input }]
|
|
94
187
|
};
|
|
@@ -121,6 +214,8 @@ class FormElementComponent {
|
|
|
121
214
|
}, message);
|
|
122
215
|
}
|
|
123
216
|
registerControl(formControl) {
|
|
217
|
+
// console.log('register');
|
|
218
|
+
// console.log(this.caption);
|
|
124
219
|
this.attachedControl = formControl;
|
|
125
220
|
this.parent.registerControl(formControl, this);
|
|
126
221
|
}
|
|
@@ -191,43 +286,6 @@ FormElementComponent.propDecorators = {
|
|
|
191
286
|
internalComponentRef: [{ type: ViewChild, args: ['internalComponentRef',] }]
|
|
192
287
|
};
|
|
193
288
|
|
|
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
289
|
/**
|
|
232
290
|
* This component is a base in order to create a component that supports ngModel.
|
|
233
291
|
* Some important things to know about it:
|
|
@@ -784,6 +842,7 @@ NgxEnhancyFormsModule.decorators = [
|
|
|
784
842
|
FormErrorComponent,
|
|
785
843
|
FormSubmitButtonComponent,
|
|
786
844
|
FormComponent,
|
|
845
|
+
SubFormDirective,
|
|
787
846
|
],
|
|
788
847
|
exports: [
|
|
789
848
|
ValueAccessorBase,
|
|
@@ -803,6 +862,7 @@ NgxEnhancyFormsModule.decorators = [
|
|
|
803
862
|
FormErrorComponent,
|
|
804
863
|
FormSubmitButtonComponent,
|
|
805
864
|
FormComponent,
|
|
865
|
+
SubFormDirective,
|
|
806
866
|
]
|
|
807
867
|
},] }
|
|
808
868
|
];
|
|
@@ -815,5 +875,5 @@ NgxEnhancyFormsModule.decorators = [
|
|
|
815
875
|
* Generated bundle index. Do not edit.
|
|
816
876
|
*/
|
|
817
877
|
|
|
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 };
|
|
878
|
+
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, SubFormDirective, TextInputComponent, ToggleComponent, ValueAccessorBase, dateValidator, invalidDateKey, invalidFieldsSymbol, matDateFormatsFactory, MaterialModule as ɵa };
|
|
819
879
|
//# sourceMappingURL=klippa-ngx-enhancy-forms.js.map
|