@stemy/ngx-dynamic-form 10.2.24 → 12.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/stemy-ngx-dynamic-form.umd.js +1781 -901
- package/bundles/stemy-ngx-dynamic-form.umd.js.map +1 -1
- package/esm2015/ngx-dynamic-form/common-types.js +463 -7
- package/esm2015/ngx-dynamic-form/components/base/dynamic-form-base.component.js +87 -0
- package/esm2015/ngx-dynamic-form/components/dynamic-form/dynamic-form.component.js +91 -0
- package/esm2015/ngx-dynamic-form/components/dynamic-form-file/dynamic-form-file.component.js +112 -0
- package/esm2015/ngx-dynamic-form/components/dynamic-form-group/dynamic-form-group.component.js +19 -0
- package/esm2015/ngx-dynamic-form/components/dynamic-form-input/dynamic-form-input.component.js +69 -0
- package/esm2015/ngx-dynamic-form/components/dynamic-form-model/dynamic-form-model.component.js +23 -0
- package/esm2015/ngx-dynamic-form/components/dynamic-form-select/dynamic-form-select.component.js +73 -0
- package/esm2015/ngx-dynamic-form/components/dynamic-form-static/dynamic-form-static.component.js +20 -0
- package/esm2015/ngx-dynamic-form/components/dynamic-forms/dynamic-forms.component.js +134 -0
- package/esm2015/ngx-dynamic-form/directives/async-submit.directive.js +6 -17
- package/esm2015/ngx-dynamic-form/directives/dynamic-form-control.directive.js +32 -0
- package/esm2015/ngx-dynamic-form/directives/dynamic-form-group.directive.js +40 -0
- package/esm2015/ngx-dynamic-form/directives/dynamic-form-template.directive.js +38 -0
- package/esm2015/ngx-dynamic-form/ngx-dynamic-form.module.js +36 -35
- package/esm2015/ngx-dynamic-form/services/dynamic-form.service.js +41 -385
- package/esm2015/ngx-dynamic-form/services/form-utilities.js +108 -0
- package/esm2015/ngx-dynamic-form/services/open-api.service.js +130 -0
- package/esm2015/public_api.js +15 -6
- package/esm2015/stemy-ngx-dynamic-form.js +4 -3
- package/fesm2015/stemy-ngx-dynamic-form.js +1357 -593
- package/fesm2015/stemy-ngx-dynamic-form.js.map +1 -1
- package/ngx-dynamic-form/common-types.d.ts +181 -27
- package/ngx-dynamic-form/components/base/dynamic-form-base.component.d.ts +44 -0
- package/ngx-dynamic-form/components/dynamic-form/dynamic-form.component.d.ts +21 -0
- package/ngx-dynamic-form/components/dynamic-form-file/dynamic-form-file.component.d.ts +16 -0
- package/ngx-dynamic-form/components/dynamic-form-group/dynamic-form-group.component.d.ts +6 -0
- package/ngx-dynamic-form/components/dynamic-form-input/dynamic-form-input.component.d.ts +12 -0
- package/ngx-dynamic-form/components/dynamic-form-model/dynamic-form-model.component.d.ts +6 -0
- package/ngx-dynamic-form/components/dynamic-form-select/dynamic-form-select.component.d.ts +9 -0
- package/ngx-dynamic-form/components/dynamic-form-static/dynamic-form-static.component.d.ts +5 -0
- package/ngx-dynamic-form/components/dynamic-forms/dynamic-forms.component.d.ts +26 -0
- package/ngx-dynamic-form/directives/async-submit.directive.d.ts +1 -5
- package/ngx-dynamic-form/directives/dynamic-form-control.directive.d.ts +12 -0
- package/ngx-dynamic-form/directives/dynamic-form-group.directive.d.ts +14 -0
- package/ngx-dynamic-form/directives/dynamic-form-template.directive.d.ts +16 -0
- package/ngx-dynamic-form/ngx-dynamic-form.module.d.ts +15 -5
- package/ngx-dynamic-form/services/dynamic-form.service.d.ts +11 -39
- package/ngx-dynamic-form/services/form-utilities.d.ts +19 -0
- package/ngx-dynamic-form/services/open-api.service.d.ts +37 -0
- package/package.json +16 -17
- package/public_api.d.ts +14 -5
- package/stemy-ngx-dynamic-form.d.ts +3 -2
- package/stemy-ngx-dynamic-form.metadata.json +1 -1
- package/bundles/stemy-ngx-dynamic-form.umd.min.js +0 -16
- package/bundles/stemy-ngx-dynamic-form.umd.min.js.map +0 -1
- package/esm2015/ngx-dynamic-form/components/base/dynamic-base-form-control-container.component.js +0 -91
- package/esm2015/ngx-dynamic-form/components/base/dynamic-base-form.component.js +0 -129
- package/esm2015/ngx-dynamic-form/services/dynamic-form-validation.service.js +0 -11
- package/esm2015/ngx-dynamic-form/utils/dynamic-form-array.model.js +0 -8
- package/esm2015/ngx-dynamic-form/utils/form-subject.js +0 -18
- package/esm2015/ngx-dynamic-form/utils/validators.js +0 -28
- package/ngx-dynamic-form/components/base/dynamic-base-form-control-container.component.d.ts +0 -37
- package/ngx-dynamic-form/components/base/dynamic-base-form.component.d.ts +0 -37
- package/ngx-dynamic-form/services/dynamic-form-validation.service.d.ts +0 -5
- package/ngx-dynamic-form/utils/dynamic-form-array.model.d.ts +0 -12
- package/ngx-dynamic-form/utils/form-subject.d.ts +0 -8
- package/ngx-dynamic-form/utils/validators.d.ts +0 -4
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { ChangeDetectorRef, ContentChild, ContentChildren, EventEmitter, Input, Output, Directive } from "@angular/core";
|
|
2
|
+
import { ObjectUtils } from "@stemy/ngx-utils";
|
|
3
|
+
import { DynamicFormTemplateDirective } from "../../directives/dynamic-form-template.directive";
|
|
4
|
+
import { DynamicFormService } from "../../services/dynamic-form.service";
|
|
5
|
+
export class DynamicFormBaseComponent {
|
|
6
|
+
constructor(cdr, formService) {
|
|
7
|
+
this.formService = formService;
|
|
8
|
+
this.name = "";
|
|
9
|
+
this.controlTemplates = {};
|
|
10
|
+
this.labelTemplates = {};
|
|
11
|
+
this.inputTemplates = {};
|
|
12
|
+
this.prefixTemplates = {};
|
|
13
|
+
this.suffixTemplates = {};
|
|
14
|
+
this.onChange = new EventEmitter();
|
|
15
|
+
this.onStatusChange = new EventEmitter();
|
|
16
|
+
this.onInit = new EventEmitter();
|
|
17
|
+
this.onSubmit = new EventEmitter();
|
|
18
|
+
this.injector = formService.injector;
|
|
19
|
+
this.cdr = cdr;
|
|
20
|
+
}
|
|
21
|
+
get root() {
|
|
22
|
+
let form = this;
|
|
23
|
+
while (ObjectUtils.isDefined(form.parent)) {
|
|
24
|
+
form = form.parent;
|
|
25
|
+
}
|
|
26
|
+
return form;
|
|
27
|
+
}
|
|
28
|
+
findProvider(control) {
|
|
29
|
+
return this.formService.findProvider(control);
|
|
30
|
+
}
|
|
31
|
+
// --- Lifecycle hooks
|
|
32
|
+
ngAfterContentInit() {
|
|
33
|
+
this.wrapperTemplate = this.wrapperTemplate || this.cWrapperTemplate;
|
|
34
|
+
this.fieldSetTemplate = this.fieldSetTemplate || this.cFieldSetTemplate;
|
|
35
|
+
this.controlTemplate = this.controlTemplate || this.cControlTemplate;
|
|
36
|
+
this.controlTemplates = this.filterTemplates(this.controlTemplates, "control");
|
|
37
|
+
this.labelTemplates = this.filterTemplates(this.labelTemplates, "label");
|
|
38
|
+
this.inputTemplates = this.filterTemplates(this.inputTemplates, "input");
|
|
39
|
+
this.prefixTemplates = this.filterTemplates(this.prefixTemplates, "prefix");
|
|
40
|
+
this.suffixTemplates = this.filterTemplates(this.suffixTemplates, "suffix");
|
|
41
|
+
this.setPrefixTemplates = this.filterTemplates(this.setPrefixTemplates, "setPrefix");
|
|
42
|
+
this.setSuffixTemplates = this.filterTemplates(this.setSuffixTemplates, "setSuffix");
|
|
43
|
+
}
|
|
44
|
+
filterTemplates(templates, type) {
|
|
45
|
+
if (ObjectUtils.isObject(templates) && Object.keys(templates).length > 0)
|
|
46
|
+
return templates;
|
|
47
|
+
return this.templates.filter(t => !!t[type]).reduce((result, directive) => {
|
|
48
|
+
result[directive[type]] = directive.template;
|
|
49
|
+
return result;
|
|
50
|
+
}, {});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
DynamicFormBaseComponent.decorators = [
|
|
54
|
+
{ type: Directive }
|
|
55
|
+
];
|
|
56
|
+
DynamicFormBaseComponent.ctorParameters = () => [
|
|
57
|
+
{ type: ChangeDetectorRef },
|
|
58
|
+
{ type: DynamicFormService }
|
|
59
|
+
];
|
|
60
|
+
DynamicFormBaseComponent.propDecorators = {
|
|
61
|
+
name: [{ type: Input }],
|
|
62
|
+
readonly: [{ type: Input }],
|
|
63
|
+
updateOn: [{ type: Input }],
|
|
64
|
+
classes: [{ type: Input }],
|
|
65
|
+
parent: [{ type: Input }],
|
|
66
|
+
wrapperTemplate: [{ type: Input }],
|
|
67
|
+
fieldSetTemplate: [{ type: Input }],
|
|
68
|
+
controlTemplate: [{ type: Input }],
|
|
69
|
+
controlTemplates: [{ type: Input }],
|
|
70
|
+
labelTemplates: [{ type: Input }],
|
|
71
|
+
inputTemplates: [{ type: Input }],
|
|
72
|
+
prefixTemplates: [{ type: Input }],
|
|
73
|
+
suffixTemplates: [{ type: Input }],
|
|
74
|
+
setPrefixTemplates: [{ type: Input }],
|
|
75
|
+
setSuffixTemplates: [{ type: Input }],
|
|
76
|
+
onChange: [{ type: Output }],
|
|
77
|
+
onStatusChange: [{ type: Output }],
|
|
78
|
+
onInit: [{ type: Output }],
|
|
79
|
+
onSubmit: [{ type: Output }],
|
|
80
|
+
prefixTemplate: [{ type: ContentChild, args: ["prefixTemplate",] }],
|
|
81
|
+
suffixTemplate: [{ type: ContentChild, args: ["suffixTemplate",] }],
|
|
82
|
+
templates: [{ type: ContentChildren, args: [DynamicFormTemplateDirective,] }],
|
|
83
|
+
cWrapperTemplate: [{ type: ContentChild, args: ["wrapperTemplate",] }],
|
|
84
|
+
cFieldSetTemplate: [{ type: ContentChild, args: ["fieldSetTemplate",] }],
|
|
85
|
+
cControlTemplate: [{ type: ContentChild, args: ["controlTemplate",] }]
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLWJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL25neC1keW5hbWljLWZvcm0vY29tcG9uZW50cy9iYXNlL2R5bmFtaWMtZm9ybS1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLGlCQUFpQixFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFZLEtBQUssRUFBRSxNQUFNLEVBQTBCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3SyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFLN0MsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDOUYsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFHdkUsTUFBTSxPQUFnQix3QkFBd0I7SUF1RDFDLFlBQXNCLEdBQXNCLEVBQVUsV0FBK0I7UUFBL0IsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQ2pGLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRWYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUUxQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBQ3ZELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7UUFDM0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBb0IsQ0FBQztRQUNuRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBQ3JELElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQztRQUNyQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNuQixDQUFDO0lBdkNELElBQUksSUFBSTtRQUNKLElBQUksSUFBSSxHQUFxQixJQUFJLENBQUM7UUFDbEMsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN2QyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUN0QjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUEwQ0QsWUFBWSxDQUFDLE9BQTRCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELHNCQUFzQjtJQUV0QixrQkFBa0I7UUFDZCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ3JFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ3hFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDckUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxlQUFlLEdBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMsa0JBQWtCLEdBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVTLGVBQWUsQ0FBQyxTQUFnQyxFQUFFLElBQVk7UUFDcEUsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUMzRixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRTtZQUN0RSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztZQUM3QyxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDWCxDQUFDOzs7WUF6R0osU0FBUzs7O1lBVGlCLGlCQUFpQjtZQU9wQyxrQkFBa0I7OzttQkFLckIsS0FBSzt1QkFDTCxLQUFLO3VCQUNMLEtBQUs7c0JBQ0wsS0FBSztxQkFDTCxLQUFLOzhCQUVMLEtBQUs7K0JBQ0wsS0FBSzs4QkFDTCxLQUFLOytCQUVMLEtBQUs7NkJBQ0wsS0FBSzs2QkFDTCxLQUFLOzhCQUNMLEtBQUs7OEJBQ0wsS0FBSztpQ0FDTCxLQUFLO2lDQUNMLEtBQUs7dUJBRUwsTUFBTTs2QkFDTixNQUFNO3FCQUNOLE1BQU07dUJBQ04sTUFBTTs2QkFFTixZQUFZLFNBQUMsZ0JBQWdCOzZCQUc3QixZQUFZLFNBQUMsZ0JBQWdCO3dCQWU3QixlQUFlLFNBQUMsNEJBQTRCOytCQUc1QyxZQUFZLFNBQUMsaUJBQWlCO2dDQUc5QixZQUFZLFNBQUMsa0JBQWtCOytCQUcvQixZQUFZLFNBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbnRlbnRDaGlsZCwgQ29udGVudENoaWxkcmVuLCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBJbnB1dCwgT3V0cHV0LCBRdWVyeUxpc3QsIFRlbXBsYXRlUmVmLCBEaXJlY3RpdmUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge09iamVjdFV0aWxzfSBmcm9tIFwiQHN0ZW15L25neC11dGlsc1wiO1xyXG5pbXBvcnQge1xyXG4gICAgRHluYW1pY0Zvcm1Db250cm9sLCBEeW5hbWljRm9ybVN0YXRlLCBJRHluYW1pY0Zvcm1CYXNlLCBJRHluYW1pY0Zvcm1Db250cm9sLCBJRHluYW1pY0Zvcm1UZW1wbGF0ZXMsXHJcbiAgICBJRm9ybUNvbnRyb2xQcm92aWRlclxyXG59IGZyb20gXCIuLi8uLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtEeW5hbWljRm9ybVRlbXBsYXRlRGlyZWN0aXZlfSBmcm9tIFwiLi4vLi4vZGlyZWN0aXZlcy9keW5hbWljLWZvcm0tdGVtcGxhdGUuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7RHluYW1pY0Zvcm1TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZHluYW1pYy1mb3JtLnNlcnZpY2VcIjtcclxuXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRHluYW1pY0Zvcm1CYXNlQ29tcG9uZW50IGltcGxlbWVudHMgSUR5bmFtaWNGb3JtQmFzZSwgQWZ0ZXJDb250ZW50SW5pdCB7XHJcblxyXG4gICAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSB1cGRhdGVPbjogXCJjaGFuZ2VcIiB8IFwiYmx1clwiIHwgXCJzdWJtaXRcIjtcclxuICAgIEBJbnB1dCgpIGNsYXNzZXM6IGFueTtcclxuICAgIEBJbnB1dCgpIHBhcmVudDogSUR5bmFtaWNGb3JtQmFzZTtcclxuXHJcbiAgICBASW5wdXQoKSB3cmFwcGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBASW5wdXQoKSBmaWVsZFNldFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQElucHV0KCkgY29udHJvbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIEBJbnB1dCgpIGNvbnRyb2xUZW1wbGF0ZXM6IElEeW5hbWljRm9ybVRlbXBsYXRlcztcclxuICAgIEBJbnB1dCgpIGxhYmVsVGVtcGxhdGVzOiBJRHluYW1pY0Zvcm1UZW1wbGF0ZXM7XHJcbiAgICBASW5wdXQoKSBpbnB1dFRlbXBsYXRlczogSUR5bmFtaWNGb3JtVGVtcGxhdGVzO1xyXG4gICAgQElucHV0KCkgcHJlZml4VGVtcGxhdGVzOiBJRHluYW1pY0Zvcm1UZW1wbGF0ZXM7XHJcbiAgICBASW5wdXQoKSBzdWZmaXhUZW1wbGF0ZXM6IElEeW5hbWljRm9ybVRlbXBsYXRlcztcclxuICAgIEBJbnB1dCgpIHNldFByZWZpeFRlbXBsYXRlczogSUR5bmFtaWNGb3JtVGVtcGxhdGVzO1xyXG4gICAgQElucHV0KCkgc2V0U3VmZml4VGVtcGxhdGVzOiBJRHluYW1pY0Zvcm1UZW1wbGF0ZXM7XHJcblxyXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUR5bmFtaWNGb3JtQ29udHJvbD47XHJcbiAgICBAT3V0cHV0KCkgb25TdGF0dXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJRHluYW1pY0Zvcm1CYXNlPjtcclxuICAgIEBPdXRwdXQoKSBvbkluaXQ6IEV2ZW50RW1pdHRlcjxJRHluYW1pY0Zvcm1CYXNlPjtcclxuICAgIEBPdXRwdXQoKSBvblN1Ym1pdDogRXZlbnRFbWl0dGVyPElEeW5hbWljRm9ybUJhc2U+O1xyXG5cclxuICAgIEBDb250ZW50Q2hpbGQoXCJwcmVmaXhUZW1wbGF0ZVwiKVxyXG4gICAgcHJlZml4VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgQENvbnRlbnRDaGlsZChcInN1ZmZpeFRlbXBsYXRlXCIpXHJcbiAgICBzdWZmaXhUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICBnZXQgcm9vdCgpOiBJRHluYW1pY0Zvcm1CYXNlIHtcclxuICAgICAgICBsZXQgZm9ybTogSUR5bmFtaWNGb3JtQmFzZSA9IHRoaXM7XHJcbiAgICAgICAgd2hpbGUgKE9iamVjdFV0aWxzLmlzRGVmaW5lZChmb3JtLnBhcmVudCkpIHtcclxuICAgICAgICAgICAgZm9ybSA9IGZvcm0ucGFyZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZm9ybTtcclxuICAgIH1cclxuXHJcbiAgICBhYnN0cmFjdCBzdGF0dXM6IER5bmFtaWNGb3JtU3RhdGU7XHJcbiAgICByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3I7XHJcbiAgICByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmO1xyXG5cclxuICAgIEBDb250ZW50Q2hpbGRyZW4oRHluYW1pY0Zvcm1UZW1wbGF0ZURpcmVjdGl2ZSlcclxuICAgIHByb3RlY3RlZCB0ZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxEeW5hbWljRm9ybVRlbXBsYXRlRGlyZWN0aXZlPjtcclxuXHJcbiAgICBAQ29udGVudENoaWxkKFwid3JhcHBlclRlbXBsYXRlXCIpXHJcbiAgICBwcm90ZWN0ZWQgY1dyYXBwZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICBAQ29udGVudENoaWxkKFwiZmllbGRTZXRUZW1wbGF0ZVwiKVxyXG4gICAgcHJvdGVjdGVkIGNGaWVsZFNldFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIEBDb250ZW50Q2hpbGQoXCJjb250cm9sVGVtcGxhdGVcIilcclxuICAgIHByb3RlY3RlZCBjQ29udHJvbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIGZvcm1TZXJ2aWNlOiBEeW5hbWljRm9ybVNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIlwiO1xyXG5cclxuICAgICAgICB0aGlzLmNvbnRyb2xUZW1wbGF0ZXMgPSB7fTtcclxuICAgICAgICB0aGlzLmxhYmVsVGVtcGxhdGVzID0ge307XHJcbiAgICAgICAgdGhpcy5pbnB1dFRlbXBsYXRlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMucHJlZml4VGVtcGxhdGVzID0ge307XHJcbiAgICAgICAgdGhpcy5zdWZmaXhUZW1wbGF0ZXMgPSB7fTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RHluYW1pY0Zvcm1Db250cm9sPigpO1xyXG4gICAgICAgIHRoaXMub25TdGF0dXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElEeW5hbWljRm9ybUJhc2U+KCk7XHJcbiAgICAgICAgdGhpcy5vbkluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPElEeW5hbWljRm9ybUJhc2U+KCk7XHJcbiAgICAgICAgdGhpcy5vblN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8SUR5bmFtaWNGb3JtQmFzZT4oKTtcclxuICAgICAgICB0aGlzLmluamVjdG9yID0gZm9ybVNlcnZpY2UuaW5qZWN0b3I7XHJcbiAgICAgICAgdGhpcy5jZHIgPSBjZHI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tIElEeW5hbWljRm9ybUJhc2VcclxuXHJcbiAgICBhYnN0cmFjdCB2YWxpZGF0ZShzaG93RXJyb3JzPzogYm9vbGVhbik6IFByb21pc2U8YW55PjtcclxuICAgIGFic3RyYWN0IHNlcmlhbGl6ZSh2YWxpZGF0ZT86IGJvb2xlYW4pOiBQcm9taXNlPGFueT47XHJcbiAgICBhYnN0cmFjdCBjaGVjaygpOiBQcm9taXNlPGFueT47XHJcbiAgICBhYnN0cmFjdCBnZXRDb250cm9sKGlkOiBzdHJpbmcpOiBJRHluYW1pY0Zvcm1Db250cm9sO1xyXG5cclxuICAgIGZpbmRQcm92aWRlcihjb250cm9sOiBJRHluYW1pY0Zvcm1Db250cm9sKTogSUZvcm1Db250cm9sUHJvdmlkZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1TZXJ2aWNlLmZpbmRQcm92aWRlcihjb250cm9sKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0gTGlmZWN5Y2xlIGhvb2tzXHJcblxyXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMud3JhcHBlclRlbXBsYXRlID0gdGhpcy53cmFwcGVyVGVtcGxhdGUgfHwgdGhpcy5jV3JhcHBlclRlbXBsYXRlO1xyXG4gICAgICAgIHRoaXMuZmllbGRTZXRUZW1wbGF0ZSA9IHRoaXMuZmllbGRTZXRUZW1wbGF0ZSB8fCB0aGlzLmNGaWVsZFNldFRlbXBsYXRlO1xyXG4gICAgICAgIHRoaXMuY29udHJvbFRlbXBsYXRlID0gdGhpcy5jb250cm9sVGVtcGxhdGUgfHwgdGhpcy5jQ29udHJvbFRlbXBsYXRlO1xyXG4gICAgICAgIHRoaXMuY29udHJvbFRlbXBsYXRlcyA9IHRoaXMuZmlsdGVyVGVtcGxhdGVzKHRoaXMuY29udHJvbFRlbXBsYXRlcywgXCJjb250cm9sXCIpO1xyXG4gICAgICAgIHRoaXMubGFiZWxUZW1wbGF0ZXMgPSB0aGlzLmZpbHRlclRlbXBsYXRlcyh0aGlzLmxhYmVsVGVtcGxhdGVzLCBcImxhYmVsXCIpO1xyXG4gICAgICAgIHRoaXMuaW5wdXRUZW1wbGF0ZXMgPSB0aGlzLmZpbHRlclRlbXBsYXRlcyh0aGlzLmlucHV0VGVtcGxhdGVzICwgXCJpbnB1dFwiKTtcclxuICAgICAgICB0aGlzLnByZWZpeFRlbXBsYXRlcyA9IHRoaXMuZmlsdGVyVGVtcGxhdGVzKHRoaXMucHJlZml4VGVtcGxhdGVzLCBcInByZWZpeFwiKTtcclxuICAgICAgICB0aGlzLnN1ZmZpeFRlbXBsYXRlcyA9ICB0aGlzLmZpbHRlclRlbXBsYXRlcyh0aGlzLnN1ZmZpeFRlbXBsYXRlcywgXCJzdWZmaXhcIik7XHJcbiAgICAgICAgdGhpcy5zZXRQcmVmaXhUZW1wbGF0ZXMgPSB0aGlzLmZpbHRlclRlbXBsYXRlcyh0aGlzLnNldFByZWZpeFRlbXBsYXRlcywgXCJzZXRQcmVmaXhcIik7XHJcbiAgICAgICAgdGhpcy5zZXRTdWZmaXhUZW1wbGF0ZXMgPSAgdGhpcy5maWx0ZXJUZW1wbGF0ZXModGhpcy5zZXRTdWZmaXhUZW1wbGF0ZXMsIFwic2V0U3VmZml4XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBmaWx0ZXJUZW1wbGF0ZXModGVtcGxhdGVzOiBJRHluYW1pY0Zvcm1UZW1wbGF0ZXMsIHR5cGU6IHN0cmluZyk6IElEeW5hbWljRm9ybVRlbXBsYXRlcyB7XHJcbiAgICAgICAgaWYgKE9iamVjdFV0aWxzLmlzT2JqZWN0KHRlbXBsYXRlcykgJiYgT2JqZWN0LmtleXModGVtcGxhdGVzKS5sZW5ndGggPiAwKSByZXR1cm4gdGVtcGxhdGVzO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlcy5maWx0ZXIodCA9PiAhIXRbdHlwZV0pLnJlZHVjZSgocmVzdWx0LCBkaXJlY3RpdmUpID0+IHtcclxuICAgICAgICAgICAgcmVzdWx0W2RpcmVjdGl2ZVt0eXBlXV0gPSBkaXJlY3RpdmUudGVtcGxhdGU7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSwge30pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { ChangeDetectorRef, Component, Input } from "@angular/core";
|
|
2
|
+
import { first } from "rxjs/operators";
|
|
3
|
+
import { DynamicFormGroup } from "../../common-types";
|
|
4
|
+
import { DynamicFormService } from "../../services/dynamic-form.service";
|
|
5
|
+
import { DynamicFormBaseComponent } from "../base/dynamic-form-base.component";
|
|
6
|
+
export class DynamicFormComponent extends DynamicFormBaseComponent {
|
|
7
|
+
constructor(cdr, forms) {
|
|
8
|
+
super(cdr, forms);
|
|
9
|
+
this.group = new DynamicFormGroup(this);
|
|
10
|
+
this.defaultFieldSet = {
|
|
11
|
+
id: "",
|
|
12
|
+
title: "",
|
|
13
|
+
classes: ""
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
get status() {
|
|
17
|
+
return this.group.state;
|
|
18
|
+
}
|
|
19
|
+
get formControls() {
|
|
20
|
+
return this.group.formControls;
|
|
21
|
+
}
|
|
22
|
+
// --- Lifecycle hooks
|
|
23
|
+
ngOnChanges(changes) {
|
|
24
|
+
if (!this.data)
|
|
25
|
+
return;
|
|
26
|
+
if (changes.data || changes.controls || changes.serializers || changes.formGroup) {
|
|
27
|
+
if (this.group.id)
|
|
28
|
+
return;
|
|
29
|
+
this.group.setup(this.data, this);
|
|
30
|
+
this.group.reloadControls();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// --- Custom ---
|
|
34
|
+
onFormSubmit() {
|
|
35
|
+
const root = this.root;
|
|
36
|
+
root.validate().then(() => root.onSubmit.emit(this), () => { });
|
|
37
|
+
}
|
|
38
|
+
// --- IDynamicForm ---
|
|
39
|
+
validate(showErrors = true) {
|
|
40
|
+
return new Promise((resolve, reject) => {
|
|
41
|
+
this.group.statusChanges.pipe(first(status => status == "VALID" || status == "INVALID")).subscribe(status => {
|
|
42
|
+
if (showErrors)
|
|
43
|
+
this.group.showErrors();
|
|
44
|
+
if (status == "VALID") {
|
|
45
|
+
resolve(null);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
reject(null);
|
|
49
|
+
});
|
|
50
|
+
this.group.updateValueAndValidity();
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
serialize(validate) {
|
|
54
|
+
return new Promise((resolve, reject) => {
|
|
55
|
+
const serialize = () => {
|
|
56
|
+
this.group.serialize().then(resolve);
|
|
57
|
+
};
|
|
58
|
+
if (validate) {
|
|
59
|
+
this.validate().then(serialize, reject);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
serialize();
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
check() {
|
|
66
|
+
return this.group.check();
|
|
67
|
+
}
|
|
68
|
+
getControl(id) {
|
|
69
|
+
return this.group.getControl(id);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
DynamicFormComponent.decorators = [
|
|
73
|
+
{ type: Component, args: [{
|
|
74
|
+
moduleId: module.id,
|
|
75
|
+
selector: "dynamic-form, [dynamic-form]",
|
|
76
|
+
template: "<ng-template #defaultFieldSetTemplate let-id=\"id\" let-controls=\"controls\" let-fieldSet=\"fieldSet\">\r\n <div [ngClass]=\"['form-fields', 'form-fields-' + id, fieldSet.classes]\">\r\n <ng-container [ngxTemplateOutlet]=\"setPrefixTemplates[fieldSet.id]\" [context]=\"fieldSet\"></ng-container>\r\n <div *ngIf=\"fieldSet.title\" [ngClass]=\"['form-title', fieldSet.titleClasses || '']\">\r\n {{ group.prefix + fieldSet.title | translate }}\r\n </div>\r\n <ng-template #subControls>\r\n <ng-container *ngFor=\"let control of controls\" [form-group]=\"control\" [visible]=\"control.visible\" [form]=\"this\">\r\n\r\n </ng-container>\r\n </ng-template>\r\n <div *ngIf=\"fieldSet.setClasses; else subControls\" [ngClass]=\"fieldSet.setClasses\">\r\n <div *ngIf=\"fieldSet.controlClasses; else subControls\" [ngClass]=\"fieldSet.controlClasses\">\r\n <ng-container [ngTemplateOutlet]=\"subControls\"></ng-container>\r\n </div>\r\n </div>\r\n <ng-container [ngxTemplateOutlet]=\"setSuffixTemplates[fieldSet.id]\" [context]=\"fieldSet\"></ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #fieldSetsTemplate>\r\n <ng-container *ngFor=\"let fs of formControls | groupBy:'data.fieldSet'\"\r\n [ngxTemplateOutlet]=\"fieldSetTemplate || defaultFieldSetTemplate\"\r\n [context]=\"{form: this, id: fs.group, controls: fs.items, fieldSet: group.formFields[fs.group] || defaultFieldSet}\">\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #defaultWrapperTemplate let-form=\"form\" let-fieldSetsTemplate=\"fieldSetsTemplate\">\r\n <ng-container [ngTemplateOutlet]=\"prefixTemplate\"\r\n [ngTemplateOutletContext]=\"{form: form, fieldSetsTemplate: fieldSetsTemplate}\"></ng-container>\r\n <form class=\"dynamic-form\" [ngClass]=\"form.classes || ''\" [formGroup]=\"group\" (submit)=\"onFormSubmit()\">\r\n <ng-container [ngTemplateOutlet]=\"fieldSetsTemplate\"></ng-container>\r\n <ng-content></ng-content>\r\n <div *ngIf=\"form.status == 'PENDING'\" class=\"dynamic-form-validator\">\r\n {{ group.prefix + 'message.pending' | translate }}\r\n </div>\r\n <button [ngStyle]=\"{display: 'none'}\">Submit</button>\r\n </form>\r\n <ng-container [ngTemplateOutlet]=\"suffixTemplate\"\r\n [ngTemplateOutletContext]=\"{form: form, fieldSetsTemplate: fieldSetsTemplate}\"></ng-container>\r\n</ng-template>\r\n<ng-template #loadingTemplate>\r\n <div *ngIf=\"status == 'LOADING'\" class=\"dynamic-form-loader\">\r\n {{ group.prefix + 'message.loading' | translate }}\r\n </div>\r\n</ng-template>\r\n<ng-container [ngTemplateOutlet]=\"wrapperTemplate || defaultWrapperTemplate\"\r\n [ngTemplateOutletContext]=\"{form: this, fieldSetsTemplate: fieldSetsTemplate}\"\r\n *ngIf=\"status !== 'LOADING'; else loadingTemplate\">\r\n</ng-container>\r\n",
|
|
77
|
+
providers: [{ provide: DynamicFormBaseComponent, useExisting: DynamicFormComponent }]
|
|
78
|
+
},] }
|
|
79
|
+
];
|
|
80
|
+
DynamicFormComponent.ctorParameters = () => [
|
|
81
|
+
{ type: ChangeDetectorRef },
|
|
82
|
+
{ type: DynamicFormService }
|
|
83
|
+
];
|
|
84
|
+
DynamicFormComponent.propDecorators = {
|
|
85
|
+
group: [{ type: Input }],
|
|
86
|
+
controls: [{ type: Input }],
|
|
87
|
+
serializers: [{ type: Input }],
|
|
88
|
+
fieldSets: [{ type: Input }],
|
|
89
|
+
data: [{ type: Input }]
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uZ3gtZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUEyQixNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUNILGdCQUFnQixFQU9uQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBUTdFLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSx3QkFBd0I7SUFrQjlELFlBQVksR0FBc0IsRUFBRSxLQUF5QjtRQUN6RCxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsZUFBZSxHQUFHO1lBQ25CLEVBQUUsRUFBRSxFQUFFO1lBQ04sS0FBSyxFQUFFLEVBQUU7WUFDVCxPQUFPLEVBQUUsRUFBRTtTQUNkLENBQUM7SUFDTixDQUFDO0lBaEJELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUM7SUFDbkMsQ0FBQztJQVlELHNCQUFzQjtJQUV0QixXQUFXLENBQUMsT0FBc0I7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO1lB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Y3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge2ZpcnN0fSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHtcclxuICAgIER5bmFtaWNGb3JtR3JvdXAsXHJcbiAgICBEeW5hbWljRm9ybVN0YXRlLFxyXG4gICAgSUR5bmFtaWNGb3JtLFxyXG4gICAgSUR5bmFtaWNGb3JtQ29udHJvbCxcclxuICAgIElGb3JtQ29udHJvbCxcclxuICAgIElGb3JtRmllbGRTZXQsXHJcbiAgICBJRm9ybVNlcmlhbGl6ZXJzXHJcbn0gZnJvbSBcIi4uLy4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge0R5bmFtaWNGb3JtU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2R5bmFtaWMtZm9ybS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7RHluYW1pY0Zvcm1CYXNlQ29tcG9uZW50fSBmcm9tIFwiLi4vYmFzZS9keW5hbWljLWZvcm0tYmFzZS5jb21wb25lbnRcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcclxuICAgIHNlbGVjdG9yOiBcImR5bmFtaWMtZm9ybSwgW2R5bmFtaWMtZm9ybV1cIixcclxuICAgIHRlbXBsYXRlVXJsOiBcIi4vZHluYW1pYy1mb3JtLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgICBwcm92aWRlcnM6IFt7cHJvdmlkZTogRHluYW1pY0Zvcm1CYXNlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogRHluYW1pY0Zvcm1Db21wb25lbnR9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHluYW1pY0Zvcm1Db21wb25lbnQgZXh0ZW5kcyBEeW5hbWljRm9ybUJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBJRHluYW1pY0Zvcm0sIEFmdGVyQ29udGVudEluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gICAgQElucHV0KCkgZ3JvdXA6IER5bmFtaWNGb3JtR3JvdXA7XHJcbiAgICBASW5wdXQoKSBjb250cm9sczogSUZvcm1Db250cm9sW107XHJcbiAgICBASW5wdXQoKSBzZXJpYWxpemVyczogSUZvcm1TZXJpYWxpemVycztcclxuICAgIEBJbnB1dCgpIGZpZWxkU2V0czogSUZvcm1GaWVsZFNldFtdO1xyXG4gICAgQElucHV0KCkgZGF0YTogYW55O1xyXG5cclxuICAgIGRlZmF1bHRGaWVsZFNldDogSUZvcm1GaWVsZFNldDtcclxuXHJcbiAgICBnZXQgc3RhdHVzKCk6IER5bmFtaWNGb3JtU3RhdGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyb3VwLnN0YXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBmb3JtQ29udHJvbHMoKTogSUR5bmFtaWNGb3JtQ29udHJvbFtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncm91cC5mb3JtQ29udHJvbHM7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgZm9ybXM6IER5bmFtaWNGb3JtU2VydmljZSkge1xyXG4gICAgICAgIHN1cGVyKGNkciwgZm9ybXMpO1xyXG4gICAgICAgIHRoaXMuZ3JvdXAgPSBuZXcgRHluYW1pY0Zvcm1Hcm91cCh0aGlzKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRGaWVsZFNldCA9IHtcclxuICAgICAgICAgICAgaWQ6IFwiXCIsXHJcbiAgICAgICAgICAgIHRpdGxlOiBcIlwiLFxyXG4gICAgICAgICAgICBjbGFzc2VzOiBcIlwiXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0gTGlmZWN5Y2xlIGhvb2tzXHJcblxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5kYXRhKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGNoYW5nZXMuZGF0YSB8fCBjaGFuZ2VzLmNvbnRyb2xzIHx8IGNoYW5nZXMuc2VyaWFsaXplcnMgfHwgY2hhbmdlcy5mb3JtR3JvdXApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXAuaWQpIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5ncm91cC5zZXR1cCh0aGlzLmRhdGEsIHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLnJlbG9hZENvbnRyb2xzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLSBDdXN0b20gLS0tXHJcblxyXG4gICAgb25Gb3JtU3VibWl0KCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3Q7XHJcbiAgICAgICAgcm9vdC52YWxpZGF0ZSgpLnRoZW4oKCkgPT4gcm9vdC5vblN1Ym1pdC5lbWl0KHRoaXMpLCAoKSA9PiB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tIElEeW5hbWljRm9ybSAtLS1cclxuXHJcbiAgICB2YWxpZGF0ZShzaG93RXJyb3JzOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLnN0YXR1c0NoYW5nZXMucGlwZShmaXJzdChzdGF0dXMgPT4gc3RhdHVzID09IFwiVkFMSURcIiB8fCBzdGF0dXMgPT0gXCJJTlZBTElEXCIpKS5zdWJzY3JpYmUoc3RhdHVzID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChzaG93RXJyb3JzKSB0aGlzLmdyb3VwLnNob3dFcnJvcnMoKTtcclxuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gXCJWQUxJRFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXJpYWxpemUodmFsaWRhdGU/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXAuc2VyaWFsaXplKCkudGhlbihyZXNvbHZlKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKHZhbGlkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKCkudGhlbihzZXJpYWxpemUsIHJlamVjdCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2VyaWFsaXplKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2soKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncm91cC5jaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbnRyb2woaWQ6IHN0cmluZyk6IElEeW5hbWljRm9ybUNvbnRyb2wge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyb3VwLmdldENvbnRyb2woaWQpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { Component, Inject } from "@angular/core";
|
|
2
|
+
import { FormControlComponent } from "../../common-types";
|
|
3
|
+
import { ApiService, ArrayUtils, FileUtils, ObjectUtils, TOASTER_SERVICE } from "@stemy/ngx-utils";
|
|
4
|
+
export class DynamicFormFileComponent extends FormControlComponent {
|
|
5
|
+
constructor(api, toaster) {
|
|
6
|
+
super();
|
|
7
|
+
this.api = api;
|
|
8
|
+
this.toaster = toaster;
|
|
9
|
+
this.fileImageCache = [];
|
|
10
|
+
}
|
|
11
|
+
// Acceptor for provider
|
|
12
|
+
static acceptor(control) {
|
|
13
|
+
return control.type == "file";
|
|
14
|
+
}
|
|
15
|
+
// Loader for provider
|
|
16
|
+
static loader() {
|
|
17
|
+
return Promise.resolve();
|
|
18
|
+
}
|
|
19
|
+
onSelect(input) {
|
|
20
|
+
this.processFiles(input.files);
|
|
21
|
+
input.value = "";
|
|
22
|
+
}
|
|
23
|
+
processFiles(fileList) {
|
|
24
|
+
const files = [];
|
|
25
|
+
const accept = this.data.accept;
|
|
26
|
+
const types = ObjectUtils.isString(accept) && accept.length > 0 ? accept.toLowerCase().split(",") : null;
|
|
27
|
+
if (fileList.length == 0)
|
|
28
|
+
return;
|
|
29
|
+
for (let i = 0; i < fileList.length; i++) {
|
|
30
|
+
const file = fileList.item(i);
|
|
31
|
+
const type = file.type.toLowerCase();
|
|
32
|
+
const ext = FileUtils.getExtension(file);
|
|
33
|
+
if (types && !ArrayUtils.has(types, type, ext))
|
|
34
|
+
continue;
|
|
35
|
+
files.push(file);
|
|
36
|
+
}
|
|
37
|
+
if (files.length == 0) {
|
|
38
|
+
this.toaster.error("message.error.wrong-files");
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
this.upload(files);
|
|
42
|
+
}
|
|
43
|
+
upload(files) {
|
|
44
|
+
const single = !this.data.multi;
|
|
45
|
+
if (single)
|
|
46
|
+
files.length = Math.min(files.length, 1);
|
|
47
|
+
const promises = [];
|
|
48
|
+
files.forEach((file, ix) => {
|
|
49
|
+
if (this.data.asDataUrl) {
|
|
50
|
+
promises.push(FileUtils.readFileAsDataURL(file));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (this.data.asFile) {
|
|
54
|
+
promises.push(Promise.resolve(file));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
promises.push(this.api.upload(this.data.uploadUrl, this.data.createUploadData(file), console.log, this.data.uploadOptions).then(asset => asset._id || asset, () => null));
|
|
58
|
+
});
|
|
59
|
+
Promise.all(promises).then(assets => {
|
|
60
|
+
if (single) {
|
|
61
|
+
this.control.setValue(assets[0]);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const current = this.value || [];
|
|
65
|
+
this.control.setValue(current.concat(assets.filter(t => !!t)));
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
delete(index) {
|
|
69
|
+
if (this.data.multi) {
|
|
70
|
+
const current = Array.from(this.value || []);
|
|
71
|
+
current.splice(index, 1);
|
|
72
|
+
this.control.setValue(current);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
this.control.setValue(null);
|
|
76
|
+
}
|
|
77
|
+
getUrl(image) {
|
|
78
|
+
return `url('${this.getImgUrl(image)}')`;
|
|
79
|
+
}
|
|
80
|
+
getImgUrl(image) {
|
|
81
|
+
if (ObjectUtils.isBlob(image)) {
|
|
82
|
+
let cache = this.fileImageCache.find(t => t.file == image);
|
|
83
|
+
if (!cache) {
|
|
84
|
+
cache = { file: image, url: URL.createObjectURL(image) };
|
|
85
|
+
this.fileImageCache.push(cache);
|
|
86
|
+
}
|
|
87
|
+
return cache.url;
|
|
88
|
+
}
|
|
89
|
+
const url = !image ? null : image.imageUrl || image;
|
|
90
|
+
if (!ObjectUtils.isString(url))
|
|
91
|
+
return null;
|
|
92
|
+
if (url.startsWith("data:"))
|
|
93
|
+
return url;
|
|
94
|
+
if (!this.data.baseUrl) {
|
|
95
|
+
const subUrl = url.startsWith("/") ? url.substr(1) : url;
|
|
96
|
+
return this.api.url(subUrl);
|
|
97
|
+
}
|
|
98
|
+
return this.api.url(`${this.data.baseUrl}${url}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
DynamicFormFileComponent.decorators = [
|
|
102
|
+
{ type: Component, args: [{
|
|
103
|
+
selector: "dynamic-form-file",
|
|
104
|
+
template: "<div class=\"upload\">\r\n <input type=\"file\" (change)=\"onSelect($event.target)\" [attr.accept]=\"data.accept\" multiple=\"multiple\"/>\r\n <ul class=\"images\" *ngIf=\"!data.multi\">\r\n <li class=\"image\" *ngIf=\"value\" [ngStyle]=\"{backgroundImage: getUrl(value)}\">\r\n <a class=\"btn btn-delete\" (click)=\"delete()\"></a>\r\n </li>\r\n </ul>\r\n <ul class=\"images\" *ngIf=\"data.multi\">\r\n <li class=\"image\" *ngFor=\"let image of value; let i = index\" [ngStyle]=\"{backgroundImage: getUrl(image)}\">\r\n <a class=\"btn btn-delete\" (click)=\"delete(i)\"></a>\r\n </li>\r\n </ul>\r\n</div>\r\n",
|
|
105
|
+
styles: [".upload{display:inline-block}.upload ul{display:inline-flex;list-style:none;margin:10px 0 0;padding:0}.upload ul li{height:100px;width:100px;background:repeating-linear-gradient(45deg,gray,gray 10px,lightgray 10px,lightgray 20px) center center;background-size:cover;border:1px gray solid;margin-right:5px;position:relative}.upload .btn-delete{background:linear-gradient(to bottom,#c8607a,#a64d5a);border-color:#a64d5a;color:#fff;position:absolute;padding:0;right:5px;top:5px;width:20px;height:20px}.upload .btn-delete:before{color:#fff;display:block;position:absolute;top:0;right:6px;content:\"x\"}\n"]
|
|
106
|
+
},] }
|
|
107
|
+
];
|
|
108
|
+
DynamicFormFileComponent.ctorParameters = () => [
|
|
109
|
+
{ type: ApiService },
|
|
110
|
+
{ type: undefined, decorators: [{ type: Inject, args: [TOASTER_SERVICE,] }] }
|
|
111
|
+
];
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLWZpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL25neC1keW5hbWljLWZvcm0vY29tcG9uZW50cy9keW5hbWljLWZvcm0tZmlsZS9keW5hbWljLWZvcm0tZmlsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFDLG9CQUFvQixFQUFxQyxNQUFNLG9CQUFvQixDQUFDO0FBQzVGLE9BQU8sRUFBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBbUIsV0FBVyxFQUFFLGVBQWUsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBT2xILE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxvQkFBbUM7SUFjN0UsWUFBcUIsR0FBZSxFQUFvQyxPQUF3QjtRQUM1RixLQUFLLEVBQUUsQ0FBQztRQURTLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFBb0MsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFFNUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQWJELHdCQUF3QjtJQUN4QixNQUFNLENBQUMsUUFBUSxDQUFDLE9BQTRCO1FBQ3hDLE9BQU8sT0FBTyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixNQUFNLENBQUMsTUFBTTtRQUNULE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFPRCxRQUFRLENBQUMsS0FBdUI7UUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVTLFlBQVksQ0FBQyxRQUFrQjtRQUNyQyxNQUFNLEtBQUssR0FBVyxFQUFFLENBQUM7UUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDaEMsTUFBTSxLQUFLLEdBQWEsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ25ILElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQUUsT0FBTztRQUNqQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN0QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckMsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxJQUFJLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUM7Z0JBQUUsU0FBUztZQUN6RCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3BCO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQ2hELE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVTLE1BQU0sQ0FBQyxLQUFhO1FBQzFCLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDaEMsSUFBSSxNQUFNO1lBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdEQsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUU7WUFDdkIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDckIsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDakQsT0FBTzthQUNWO1lBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDbEIsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLE9BQU87YUFDVjtZQUNELFFBQVEsQ0FBQyxJQUFJLENBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQ2hDLE9BQU8sQ0FBQyxHQUFHLEVBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQzFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQ2xELENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2hDLElBQUksTUFBTSxFQUFFO2dCQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxPQUFPO2FBQ1Y7WUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25FLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFjO1FBQ2pCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDakIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9CLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBVTtRQUNiLE9BQU8sUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDN0MsQ0FBQztJQUVPLFNBQVMsQ0FBQyxLQUFVO1FBQ3hCLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMzQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDUixLQUFLLEdBQUcsRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ25DO1lBQ0QsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDO1NBQ3BCO1FBQ0QsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7UUFDcEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDNUMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUFFLE9BQU8sR0FBRyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNwQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDekQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvQjtRQUNELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7OztZQS9HSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtnQkFFN0IsOHFCQUFpRDs7YUFDcEQ7OztZQU5PLFVBQVU7NENBcUJ5QixNQUFNLFNBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbmplY3R9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7Rm9ybUNvbnRyb2xDb21wb25lbnQsIElEeW5hbWljRm9ybUNvbnRyb2wsIElGb3JtRmlsZURhdGF9IGZyb20gXCIuLi8uLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtBcGlTZXJ2aWNlLCBBcnJheVV0aWxzLCBGaWxlVXRpbHMsIElUb2FzdGVyU2VydmljZSwgT2JqZWN0VXRpbHMsIFRPQVNURVJfU0VSVklDRX0gZnJvbSBcIkBzdGVteS9uZ3gtdXRpbHNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwiZHluYW1pYy1mb3JtLWZpbGVcIixcclxuICAgIHN0eWxlVXJsczogW1wiLi9keW5hbWljLWZvcm0tZmlsZS5jb21wb25lbnQuc2Nzc1wiXSxcclxuICAgIHRlbXBsYXRlVXJsOiBcIi4vZHluYW1pYy1mb3JtLWZpbGUuY29tcG9uZW50Lmh0bWxcIlxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHluYW1pY0Zvcm1GaWxlQ29tcG9uZW50IGV4dGVuZHMgRm9ybUNvbnRyb2xDb21wb25lbnQ8SUZvcm1GaWxlRGF0YT4ge1xyXG5cclxuICAgIHByaXZhdGUgZmlsZUltYWdlQ2FjaGU6IGFueVtdO1xyXG5cclxuICAgIC8vIEFjY2VwdG9yIGZvciBwcm92aWRlclxyXG4gICAgc3RhdGljIGFjY2VwdG9yKGNvbnRyb2w6IElEeW5hbWljRm9ybUNvbnRyb2wpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gY29udHJvbC50eXBlID09IFwiZmlsZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIExvYWRlciBmb3IgcHJvdmlkZXJcclxuICAgIHN0YXRpYyBsb2FkZXIoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgYXBpOiBBcGlTZXJ2aWNlLCBASW5qZWN0KFRPQVNURVJfU0VSVklDRSkgcmVhZG9ubHkgdG9hc3RlcjogSVRvYXN0ZXJTZXJ2aWNlKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmZpbGVJbWFnZUNhY2hlID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgb25TZWxlY3QoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnByb2Nlc3NGaWxlcyhpbnB1dC5maWxlcyk7XHJcbiAgICAgICAgaW5wdXQudmFsdWUgPSBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBwcm9jZXNzRmlsZXMoZmlsZUxpc3Q6IEZpbGVMaXN0KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZmlsZXM6IEZpbGVbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGFjY2VwdCA9IHRoaXMuZGF0YS5hY2NlcHQ7XHJcbiAgICAgICAgY29uc3QgdHlwZXM6IHN0cmluZ1tdID0gT2JqZWN0VXRpbHMuaXNTdHJpbmcoYWNjZXB0KSAmJiBhY2NlcHQubGVuZ3RoID4gMCA/IGFjY2VwdC50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiLFwiKSA6IG51bGw7XHJcbiAgICAgICAgaWYgKGZpbGVMaXN0Lmxlbmd0aCA9PSAwKSByZXR1cm47XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gZmlsZUxpc3QuaXRlbShpKTtcclxuICAgICAgICAgICAgY29uc3QgdHlwZSA9IGZpbGUudHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBleHQgPSBGaWxlVXRpbHMuZ2V0RXh0ZW5zaW9uKGZpbGUpO1xyXG4gICAgICAgICAgICBpZiAodHlwZXMgJiYgIUFycmF5VXRpbHMuaGFzKHR5cGVzLCB0eXBlLCBleHQpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3Rlci5lcnJvcihcIm1lc3NhZ2UuZXJyb3Iud3JvbmctZmlsZXNcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGxvYWQoZmlsZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB1cGxvYWQoZmlsZXM6IEZpbGVbXSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHNpbmdsZSA9ICF0aGlzLmRhdGEubXVsdGk7XHJcbiAgICAgICAgaWYgKHNpbmdsZSkgZmlsZXMubGVuZ3RoID0gTWF0aC5taW4oZmlsZXMubGVuZ3RoICwgMSk7XHJcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcclxuICAgICAgICBmaWxlcy5mb3JFYWNoKChmaWxlLCBpeCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhLmFzRGF0YVVybCkge1xyXG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChGaWxlVXRpbHMucmVhZEZpbGVBc0RhdGFVUkwoZmlsZSkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEuYXNGaWxlKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKFByb21pc2UucmVzb2x2ZShmaWxlKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBpLnVwbG9hZChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEudXBsb2FkVXJsLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5jcmVhdGVVcGxvYWREYXRhKGZpbGUpLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS51cGxvYWRPcHRpb25zXHJcbiAgICAgICAgICAgICAgICApLnRoZW4oYXNzZXQgPT4gYXNzZXQuX2lkIHx8IGFzc2V0LCAoKSA9PiBudWxsKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKGFzc2V0cyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzaW5nbGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZShhc3NldHNbMF0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnZhbHVlIHx8IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUoY3VycmVudC5jb25jYXQoYXNzZXRzLmZpbHRlcih0ID0+ICEhdCkpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGUoaW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhLm11bHRpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBBcnJheS5mcm9tKHRoaXMudmFsdWUgfHwgW10pO1xyXG4gICAgICAgICAgICBjdXJyZW50LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZShjdXJyZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXJsKGltYWdlOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBgdXJsKCcke3RoaXMuZ2V0SW1nVXJsKGltYWdlKX0nKWA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRJbWdVcmwoaW1hZ2U6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKE9iamVjdFV0aWxzLmlzQmxvYihpbWFnZSkpIHtcclxuICAgICAgICAgICAgbGV0IGNhY2hlID0gdGhpcy5maWxlSW1hZ2VDYWNoZS5maW5kKHQgPT4gdC5maWxlID09IGltYWdlKTtcclxuICAgICAgICAgICAgaWYgKCFjYWNoZSkge1xyXG4gICAgICAgICAgICAgICAgY2FjaGUgPSB7ZmlsZTogaW1hZ2UsIHVybDogVVJMLmNyZWF0ZU9iamVjdFVSTChpbWFnZSl9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWxlSW1hZ2VDYWNoZS5wdXNoKGNhY2hlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gY2FjaGUudXJsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB1cmwgPSAhaW1hZ2UgPyBudWxsIDogaW1hZ2UuaW1hZ2VVcmwgfHwgaW1hZ2U7XHJcbiAgICAgICAgaWYgKCFPYmplY3RVdGlscy5pc1N0cmluZyh1cmwpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoXCJkYXRhOlwiKSkgcmV0dXJuIHVybDtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YS5iYXNlVXJsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1YlVybCA9IHVybC5zdGFydHNXaXRoKFwiL1wiKSA/IHVybC5zdWJzdHIoMSkgOiB1cmw7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFwaS51cmwoc3ViVXJsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnVybChgJHt0aGlzLmRhdGEuYmFzZVVybH0ke3VybH1gKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
package/esm2015/ngx-dynamic-form/components/dynamic-form-group/dynamic-form-group.component.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Component, HostBinding } from "@angular/core";
|
|
2
|
+
export class DynamicFormGroupComponent {
|
|
3
|
+
get classes() {
|
|
4
|
+
if (!this.control)
|
|
5
|
+
return "form-group";
|
|
6
|
+
return ["form-group", "form-group-" + this.control.id, this.control.data.classes, this.control.errors && this.control.touched ? "form-group-invalid" : ""].join(" ");
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
DynamicFormGroupComponent.decorators = [
|
|
10
|
+
{ type: Component, args: [{
|
|
11
|
+
moduleId: module.id,
|
|
12
|
+
selector: "div[dynamic-form-group]",
|
|
13
|
+
template: "<ng-template #labelTemplate>\r\n <label [ngClass]=\"'control-label control-label-' + control.data.labelAlign\" [attr.for]=\"control.formId\">\r\n {{ control.label | translate: control.model }}\r\n </label>\r\n</ng-template>\r\n<ng-template #errorTemplate>\r\n <div class=\"error-message\" *ngIf=\"control.errors && control.touched\">\r\n <span class=\"help-block\" *ngFor=\"let error of control.errors | entries\">\r\n {{ error.key | translate: error.value }}\r\n </span>\r\n </div>\r\n</ng-template>\r\n<ng-template #inputTemplate let-control=\"control\">\r\n <ng-container [form-control]=\"control\"></ng-container>\r\n</ng-template>\r\n<ng-template #defaultControlTemplate\r\n let-context\r\n let-control=\"control\"\r\n let-data=\"control.data\"\r\n let-labelTemplate=\"labelTemplate\"\r\n let-inputTemplate=\"inputTemplate\"\r\n let-prefixTemplate=\"prefixTemplate\"\r\n let-suffixTemplate=\"suffixTemplate\"\r\n let-errorTemplate=\"errorTemplate\">\r\n <ng-container [ngTemplateOutlet]=\"prefixTemplate\"\r\n [ngTemplateOutletContext]=\"context\"></ng-container>\r\n <ng-container *ngIf=\"control.label && data.labelAlign == 'left'\"\r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"context\">\r\n </ng-container>\r\n <ng-container [ngTemplateOutlet]=\"inputTemplate\"\r\n [ngTemplateOutletContext]=\"context\"></ng-container>\r\n <ng-container *ngIf=\"control.label && data.labelAlign == 'right'\"\r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"context\">\r\n </ng-container>\r\n <ng-container [ngTemplateOutlet]=\"suffixTemplate\"\r\n [ngTemplateOutletContext]=\"context\"></ng-container>\r\n <ng-container [ngTemplateOutlet]=\"errorTemplate\"\r\n [ngTemplateOutletContext]=\"context\"></ng-container>\r\n</ng-template>\r\n\r\n<ng-container [ngxTemplateOutlet]=\"form.controlTemplates[control.id] || form.controlTemplate || defaultControlTemplate\"\r\n [context]=\"{\r\n control: control,\r\n labelTemplate: form.labelTemplates[control.id] || labelTemplate,\r\n inputTemplate: form.inputTemplates[control.id] || inputTemplate,\r\n prefixTemplate: form.prefixTemplates[control.id],\r\n suffixTemplate: form.suffixTemplates[control.id],\r\n errorTemplate: errorTemplate\r\n }\">\r\n</ng-container>\r\n"
|
|
14
|
+
},] }
|
|
15
|
+
];
|
|
16
|
+
DynamicFormGroupComponent.propDecorators = {
|
|
17
|
+
classes: [{ type: HostBinding, args: ["class",] }]
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uZ3gtZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtLWdyb3VwL2R5bmFtaWMtZm9ybS1ncm91cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFRckQsTUFBTSxPQUFPLHlCQUF5QjtJQUlsQyxJQUNJLE9BQU87UUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLFlBQVksQ0FBQztRQUN2QyxPQUFPLENBQUMsWUFBWSxFQUFFLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekssQ0FBQzs7O1lBYkosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtnQkFDbkIsUUFBUSxFQUFFLHlCQUF5QjtnQkFDbkMsNHBGQUFrRDthQUNyRDs7O3NCQUtJLFdBQVcsU0FBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEhvc3RCaW5kaW5nfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0lEeW5hbWljRm9ybSwgSUR5bmFtaWNGb3JtQ29udHJvbCwgSUZvcm1Hcm91cENvbXBvbmVudH0gZnJvbSBcIi4uLy4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGVJZDogbW9kdWxlLmlkLFxyXG4gICAgc2VsZWN0b3I6IFwiZGl2W2R5bmFtaWMtZm9ybS1ncm91cF1cIixcclxuICAgIHRlbXBsYXRlVXJsOiBcIi4vZHluYW1pYy1mb3JtLWdyb3VwLmNvbXBvbmVudC5odG1sXCJcclxufSlcclxuZXhwb3J0IGNsYXNzIER5bmFtaWNGb3JtR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBJRm9ybUdyb3VwQ29tcG9uZW50IHtcclxuICAgIGZvcm06IElEeW5hbWljRm9ybTtcclxuICAgIGNvbnRyb2w6IElEeW5hbWljRm9ybUNvbnRyb2w7XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKFwiY2xhc3NcIilcclxuICAgIGdldCBjbGFzc2VzKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wpIHJldHVybiBcImZvcm0tZ3JvdXBcIjtcclxuICAgICAgICByZXR1cm4gW1wiZm9ybS1ncm91cFwiLCBcImZvcm0tZ3JvdXAtXCIgKyB0aGlzLmNvbnRyb2wuaWQsIHRoaXMuY29udHJvbC5kYXRhLmNsYXNzZXMsIHRoaXMuY29udHJvbC5lcnJvcnMgJiYgdGhpcy5jb250cm9sLnRvdWNoZWQgPyBcImZvcm0tZ3JvdXAtaW52YWxpZFwiIDogXCJcIl0uam9pbihcIiBcIik7XHJcbiAgICB9XHJcbn1cclxuIl19
|
package/esm2015/ngx-dynamic-form/components/dynamic-form-input/dynamic-form-input.component.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Component, HostBinding, Inject } from "@angular/core";
|
|
2
|
+
import { LANGUAGE_SERVICE, ObjectUtils } from "@stemy/ngx-utils";
|
|
3
|
+
import { FormControlComponent } from "../../common-types";
|
|
4
|
+
export class DynamicFormInputComponent extends FormControlComponent {
|
|
5
|
+
constructor(language) {
|
|
6
|
+
super();
|
|
7
|
+
this.language = language;
|
|
8
|
+
}
|
|
9
|
+
// Acceptor for provider
|
|
10
|
+
static acceptor(control) {
|
|
11
|
+
return control.type == "input";
|
|
12
|
+
}
|
|
13
|
+
// Loader for provider
|
|
14
|
+
static loader() {
|
|
15
|
+
return Promise.resolve();
|
|
16
|
+
}
|
|
17
|
+
get isChecked() {
|
|
18
|
+
return this.data.type == "checkbox" && this.value;
|
|
19
|
+
}
|
|
20
|
+
onDateChange(value) {
|
|
21
|
+
const date = new Date(value);
|
|
22
|
+
const dateValue = date.valueOf();
|
|
23
|
+
if (isNaN(dateValue) || dateValue < -30610224000000)
|
|
24
|
+
return;
|
|
25
|
+
this.control.setValue(date);
|
|
26
|
+
}
|
|
27
|
+
onTextChange(value) {
|
|
28
|
+
if (!this.data.useLanguage) {
|
|
29
|
+
this.control.setValue(value);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const translations = ObjectUtils.isArray(this.value) ? Array.from(this.value) : [];
|
|
33
|
+
const translation = translations.find(t => t.lang == this.language.editLanguage);
|
|
34
|
+
if (translation) {
|
|
35
|
+
translation.translation = value;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
translations.push({
|
|
39
|
+
lang: this.language.editLanguage,
|
|
40
|
+
translation: value
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
this.control.setValue(translations);
|
|
44
|
+
}
|
|
45
|
+
onNumberBlur() {
|
|
46
|
+
const value = this.value;
|
|
47
|
+
if (ObjectUtils.isNumber(this.data.max) && this.data.max < value) {
|
|
48
|
+
this.control.setValue(this.data.max);
|
|
49
|
+
}
|
|
50
|
+
else if (ObjectUtils.isNumber(this.data.min) && this.data.min > value) {
|
|
51
|
+
this.control.setValue(this.data.min);
|
|
52
|
+
}
|
|
53
|
+
this.control.onBlur();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
DynamicFormInputComponent.decorators = [
|
|
57
|
+
{ type: Component, args: [{
|
|
58
|
+
moduleId: module.id,
|
|
59
|
+
selector: "dynamic-form-input",
|
|
60
|
+
template: "<ng-container [ngSwitch]=\"data.type\">\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <textarea class=\"form-control\"\r\n rows=\"5\"\r\n [attr.autocomplete]=\"data.autocomplete\"\r\n [id]=\"control.formId\"\r\n [name]=\"control.formId\"\r\n [ngClass]=\"{disabled: control.disabled}\"\r\n [disabled]=\"control.disabled\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"control.setValue($event)\"\r\n (blur)=\"control.onBlur()\"\r\n (focus)=\"control.onFocus()\">{{ data.placeholder | translate }}</textarea>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <input class=\"form-control\"\r\n type=\"date\"\r\n [attr.autocomplete]=\"data.autocomplete\"\r\n [id]=\"control.formId\"\r\n [name]=\"control.formId\"\r\n [ngClass]=\"{disabled: control.disabled}\"\r\n [disabled]=\"control.disabled\"\r\n [ngModel]=\"value | date: 'y-MM-dd'\"\r\n (ngModelChange)=\"onDateChange($event)\"\r\n (blur)=\"control.onBlur()\"\r\n (focus)=\"control.onFocus()\"/>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <input class=\"form-control\"\r\n type=\"number\"\r\n [attr.autocomplete]=\"data.autocomplete\"\r\n [min]=\"data.min\"\r\n [max]=\"data.max\"\r\n [step]=\"data.step\"\r\n [id]=\"control.formId\"\r\n [name]=\"control.formId\"\r\n [ngClass]=\"{disabled: control.disabled}\"\r\n [disabled]=\"control.disabled\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"control.setValue($event)\"\r\n (blur)=\"onNumberBlur()\"\r\n (focus)=\"control.onFocus()\"/>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <input class=\"form-control\"\r\n type=\"checkbox\"\r\n [id]=\"control.formId\"\r\n [name]=\"control.formId\"\r\n [ngClass]=\"{disabled: control.disabled}\"\r\n [disabled]=\"control.disabled\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"control.setValue($event)\"\r\n (blur)=\"control.onBlur()\"\r\n (focus)=\"control.onFocus()\"/>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <input class=\"form-control\"\r\n type=\"text\"\r\n [attr.autocomplete]=\"data.autocomplete\"\r\n [minlength]=\"data.min\"\r\n [maxlength]=\"data.max\"\r\n [placeholder]=\"data.placeholder | translate\"\r\n [id]=\"control.formId\"\r\n [name]=\"control.formId\"\r\n [ngClass]=\"{disabled: control.disabled}\"\r\n [disabled]=\"control.disabled\"\r\n [ngModel]=\"data.useLanguage ? (value | translate) : value\"\r\n (ngModelChange)=\"onTextChange($event)\"\r\n (blur)=\"control.onBlur()\"\r\n (focus)=\"control.onFocus()\"/>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <input class=\"form-control\"\r\n [attr.autocomplete]=\"data.autocomplete\"\r\n [minlength]=\"data.min\"\r\n [maxlength]=\"data.max\"\r\n [placeholder]=\"data.placeholder | translate\"\r\n [type]=\"data.type\"\r\n [id]=\"control.formId\"\r\n [name]=\"control.formId\"\r\n [ngClass]=\"{disabled: control.disabled}\"\r\n [disabled]=\"control.disabled\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"control.setValue($event)\"\r\n (blur)=\"control.onBlur()\"\r\n (focus)=\"control.onFocus()\"/>\r\n </ng-container>\r\n</ng-container>\r\n"
|
|
61
|
+
},] }
|
|
62
|
+
];
|
|
63
|
+
DynamicFormInputComponent.ctorParameters = () => [
|
|
64
|
+
{ type: undefined, decorators: [{ type: Inject, args: [LANGUAGE_SERVICE,] }] }
|
|
65
|
+
];
|
|
66
|
+
DynamicFormInputComponent.propDecorators = {
|
|
67
|
+
isChecked: [{ type: HostBinding, args: ["class.checked",] }]
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uZ3gtZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtLWlucHV0L2R5bmFtaWMtZm9ybS1pbnB1dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBaUMsZ0JBQWdCLEVBQUUsV0FBVyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDL0YsT0FBTyxFQUFxQixvQkFBb0IsRUFBaUIsTUFBTSxvQkFBb0IsQ0FBQztBQU81RixNQUFNLE9BQU8seUJBQTBCLFNBQVEsb0JBQW9DO0lBaUIvRSxZQUE4QyxRQUEwQjtRQUNwRSxLQUFLLEVBQUUsQ0FBQztRQURrQyxhQUFRLEdBQVIsUUFBUSxDQUFrQjtJQUV4RSxDQUFDO0lBakJELHdCQUF3QjtJQUN4QixNQUFNLENBQUMsUUFBUSxDQUFDLE9BQTJCO1FBQ3ZDLE9BQU8sT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUM7SUFDbkMsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixNQUFNLENBQUMsTUFBTTtRQUNULE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUNJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RELENBQUM7SUFNRCxZQUFZLENBQUMsS0FBYTtRQUN0QixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixNQUFNLFNBQVMsR0FBVyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxHQUFHLENBQUMsY0FBYztZQUFFLE9BQU87UUFDNUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDL0IsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFhO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixPQUFPO1NBQ1Y7UUFDRCxNQUFNLFlBQVksR0FBbUIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkcsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqRixJQUFJLFdBQVcsRUFBRTtZQUNiLFdBQVcsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1NBQ25DO2FBQU07WUFDSCxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNkLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVk7Z0JBQ2hDLFdBQVcsRUFBRSxLQUFLO2FBQ3JCLENBQUMsQ0FBQztTQUNOO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFlBQVk7UUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3pCLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRTtZQUM5RCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3hDO2FBQU0sSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxFQUFFO1lBQ3JFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDeEM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzFCLENBQUM7OztZQTNESixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO2dCQUNuQixRQUFRLEVBQUUsb0JBQW9CO2dCQUM5QixxaklBQWtEO2FBQ3JEOzs7NENBa0JnQixNQUFNLFNBQUMsZ0JBQWdCOzs7d0JBTG5DLFdBQVcsU0FBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbmplY3R9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7SUxhbmd1YWdlU2VydmljZSwgSVRyYW5zbGF0aW9uLCBMQU5HVUFHRV9TRVJWSUNFLCBPYmplY3RVdGlsc30gZnJvbSBcIkBzdGVteS9uZ3gtdXRpbHNcIjtcclxuaW1wb3J0IHtEeW5hbWljRm9ybUNvbnRyb2wsIEZvcm1Db250cm9sQ29tcG9uZW50LCBJRm9ybUlucHV0RGF0YX0gZnJvbSBcIi4uLy4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGVJZDogbW9kdWxlLmlkLFxyXG4gICAgc2VsZWN0b3I6IFwiZHluYW1pYy1mb3JtLWlucHV0XCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2R5bmFtaWMtZm9ybS1pbnB1dC5jb21wb25lbnQuaHRtbFwiXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljRm9ybUlucHV0Q29tcG9uZW50IGV4dGVuZHMgRm9ybUNvbnRyb2xDb21wb25lbnQ8SUZvcm1JbnB1dERhdGE+IHtcclxuXHJcbiAgICAvLyBBY2NlcHRvciBmb3IgcHJvdmlkZXJcclxuICAgIHN0YXRpYyBhY2NlcHRvcihjb250cm9sOiBEeW5hbWljRm9ybUNvbnRyb2wpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gY29udHJvbC50eXBlID09IFwiaW5wdXRcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBMb2FkZXIgZm9yIHByb3ZpZGVyXHJcbiAgICBzdGF0aWMgbG9hZGVyKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0QmluZGluZyhcImNsYXNzLmNoZWNrZWRcIilcclxuICAgIGdldCBpc0NoZWNrZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS50eXBlID09IFwiY2hlY2tib3hcIiAmJiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoTEFOR1VBR0VfU0VSVklDRSkgcHJpdmF0ZSBsYW5ndWFnZTogSUxhbmd1YWdlU2VydmljZSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25EYXRlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IGRhdGVWYWx1ZSA9IDxudW1iZXI+ZGF0ZS52YWx1ZU9mKCk7XHJcbiAgICAgICAgaWYgKGlzTmFOKGRhdGVWYWx1ZSkgfHwgZGF0ZVZhbHVlIDwgLTMwNjEwMjI0MDAwMDAwKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKGRhdGUpXHJcbiAgICB9XHJcblxyXG4gICAgb25UZXh0Q2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YS51c2VMYW5ndWFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uczogSVRyYW5zbGF0aW9uW10gPSBPYmplY3RVdGlscy5pc0FycmF5KHRoaXMudmFsdWUpID8gQXJyYXkuZnJvbSh0aGlzLnZhbHVlKSA6IFtdO1xyXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25zLmZpbmQodCA9PiB0LmxhbmcgPT0gdGhpcy5sYW5ndWFnZS5lZGl0TGFuZ3VhZ2UpO1xyXG4gICAgICAgIGlmICh0cmFuc2xhdGlvbikge1xyXG4gICAgICAgICAgICB0cmFuc2xhdGlvbi50cmFuc2xhdGlvbiA9IHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGxhbmc6IHRoaXMubGFuZ3VhZ2UuZWRpdExhbmd1YWdlLFxyXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb246IHZhbHVlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUodHJhbnNsYXRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBvbk51bWJlckJsdXIoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIGlmIChPYmplY3RVdGlscy5pc051bWJlcih0aGlzLmRhdGEubWF4KSAmJiB0aGlzLmRhdGEubWF4IDwgdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHRoaXMuZGF0YS5tYXgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoT2JqZWN0VXRpbHMuaXNOdW1iZXIodGhpcy5kYXRhLm1pbikgJiYgdGhpcy5kYXRhLm1pbiA+IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZSh0aGlzLmRhdGEubWluKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb250cm9sLm9uQmx1cigpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
package/esm2015/ngx-dynamic-form/components/dynamic-form-model/dynamic-form-model.component.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Component, ViewChild } from "@angular/core";
|
|
2
|
+
import { FormControlComponent } from "../../common-types";
|
|
3
|
+
export class DynamicFormModelComponent extends FormControlComponent {
|
|
4
|
+
// Acceptor for provider
|
|
5
|
+
static acceptor(control) {
|
|
6
|
+
return control.type == "model";
|
|
7
|
+
}
|
|
8
|
+
// Loader for provider
|
|
9
|
+
static loader() {
|
|
10
|
+
return Promise.resolve();
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
DynamicFormModelComponent.decorators = [
|
|
14
|
+
{ type: Component, args: [{
|
|
15
|
+
moduleId: module.id,
|
|
16
|
+
selector: "dynamic-form-model",
|
|
17
|
+
template: "<dynamic-form [name]=\"data.name || form.name\"\r\n [group]=\"control\"\r\n [data]=\"value\"\r\n [updateOn]=\"control.updateOn\"\r\n [parent]=\"form\"\r\n\r\n [fieldSetTemplate]=\"form.fieldSetTemplate\"\r\n [controlTemplates]=\"form.controlTemplates\"\r\n\r\n [controlTemplate]=\"form.controlTemplate\"\r\n [labelTemplates]=\"form.labelTemplates\"\r\n [inputTemplates]=\"form.inputTemplates\"\r\n [prefixTemplates]=\"form.prefixTemplates\"\r\n [suffixTemplates]=\"form.suffixTemplates\"\r\n [setPrefixTemplates]=\"form.setPrefixTemplates\"\r\n [setSuffixTemplates]=\"form.setSuffixTemplates\"\r\n\r\n #subForm>\r\n <ng-template #wrapperTemplate let-form=\"form\" let-fieldSetsTemplate=\"fieldSetsTemplate\">\r\n <ng-container [ngTemplateOutlet]=\"fieldSetsTemplate\"></ng-container>\r\n </ng-template>\r\n</dynamic-form>\r\n"
|
|
18
|
+
},] }
|
|
19
|
+
];
|
|
20
|
+
DynamicFormModelComponent.propDecorators = {
|
|
21
|
+
subForm: [{ type: ViewChild, args: ["subForm",] }]
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLW1vZGVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uZ3gtZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtLW1vZGVsL2R5bmFtaWMtZm9ybS1tb2RlbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFxQixvQkFBb0IsRUFBK0IsTUFBTSxvQkFBb0IsQ0FBQztBQU8xRyxNQUFNLE9BQU8seUJBQTBCLFNBQVEsb0JBQW9DO0lBSy9FLHdCQUF3QjtJQUN4QixNQUFNLENBQUMsUUFBUSxDQUFDLE9BQTJCO1FBQ3ZDLE9BQU8sT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUM7SUFDbkMsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixNQUFNLENBQUMsTUFBTTtRQUNULE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzdCLENBQUM7OztZQWxCSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO2dCQUNuQixRQUFRLEVBQUUsb0JBQW9CO2dCQUM5Qix3Z0NBQWtEO2FBQ3JEOzs7c0JBR0ksU0FBUyxTQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgVmlld0NoaWxkfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0R5bmFtaWNGb3JtQ29udHJvbCwgRm9ybUNvbnRyb2xDb21wb25lbnQsIElEeW5hbWljRm9ybSwgSUZvcm1Nb2RlbERhdGF9IGZyb20gXCIuLi8uLi9jb21tb24tdHlwZXNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcclxuICAgIHNlbGVjdG9yOiBcImR5bmFtaWMtZm9ybS1tb2RlbFwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9keW5hbWljLWZvcm0tbW9kZWwuY29tcG9uZW50Lmh0bWxcIlxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHluYW1pY0Zvcm1Nb2RlbENvbXBvbmVudCBleHRlbmRzIEZvcm1Db250cm9sQ29tcG9uZW50PElGb3JtTW9kZWxEYXRhPiB7XHJcblxyXG4gICAgQFZpZXdDaGlsZChcInN1YkZvcm1cIilcclxuICAgIHByaXZhdGUgc3ViRm9ybTogSUR5bmFtaWNGb3JtO1xyXG5cclxuICAgIC8vIEFjY2VwdG9yIGZvciBwcm92aWRlclxyXG4gICAgc3RhdGljIGFjY2VwdG9yKGNvbnRyb2w6IER5bmFtaWNGb3JtQ29udHJvbCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBjb250cm9sLnR5cGUgPT0gXCJtb2RlbFwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIExvYWRlciBmb3IgcHJvdmlkZXJcclxuICAgIHN0YXRpYyBsb2FkZXIoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
package/esm2015/ngx-dynamic-form/components/dynamic-form-select/dynamic-form-select.component.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Component } from "@angular/core";
|
|
2
|
+
import { ObjectUtils, ReflectUtils } from "@stemy/ngx-utils";
|
|
3
|
+
import { FormControlComponent } from "../../common-types";
|
|
4
|
+
export class DynamicFormSelectComponent extends FormControlComponent {
|
|
5
|
+
// Acceptor for provider
|
|
6
|
+
static acceptor(control) {
|
|
7
|
+
return control.type == "select";
|
|
8
|
+
}
|
|
9
|
+
// Loader for provider
|
|
10
|
+
static loader(control) {
|
|
11
|
+
const data = control.getData();
|
|
12
|
+
if (data.type == "radio" && data.multi) {
|
|
13
|
+
return Promise.reject("Radio group doesn't support multi select!");
|
|
14
|
+
}
|
|
15
|
+
return new Promise(resolve => {
|
|
16
|
+
const getOptions = ReflectUtils.resolve(data.options, control.form.injector);
|
|
17
|
+
getOptions(control).then(options => {
|
|
18
|
+
if (data.emptyOption)
|
|
19
|
+
options.unshift({ id: null, label: "" });
|
|
20
|
+
control.meta.options = options;
|
|
21
|
+
DynamicFormSelectComponent.fillOptions(control, options);
|
|
22
|
+
resolve(options);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
static fillOptions(control, options) {
|
|
27
|
+
const data = control.getData();
|
|
28
|
+
const selected = control.value;
|
|
29
|
+
if (data.multi || options.length == 0 || options.findIndex(t => t.id == selected) >= 0)
|
|
30
|
+
return;
|
|
31
|
+
control.setValue(options[0].id);
|
|
32
|
+
}
|
|
33
|
+
onSelectChange(value) {
|
|
34
|
+
const isArray = ObjectUtils.isArray(value);
|
|
35
|
+
const current = this.value;
|
|
36
|
+
if (this.data.multi) {
|
|
37
|
+
if (isArray) {
|
|
38
|
+
this.control.setValue(value);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (ObjectUtils.isArray(current)) {
|
|
42
|
+
this.control.setValue(current.indexOf(value) < 0
|
|
43
|
+
? current.concat([value])
|
|
44
|
+
: current.filter(c => c !== value));
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
this.control.setValue([value]);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (isArray)
|
|
51
|
+
value = value[0];
|
|
52
|
+
if (current == value) {
|
|
53
|
+
const option = this.meta.options.find(o => o.id !== value);
|
|
54
|
+
value = option ? option.id : null;
|
|
55
|
+
}
|
|
56
|
+
this.control.setValue(value);
|
|
57
|
+
}
|
|
58
|
+
checkValue(option) {
|
|
59
|
+
const value = this.value;
|
|
60
|
+
return ObjectUtils.isArray(value) ? value.indexOf(option.id) >= 0 : option.id == value;
|
|
61
|
+
}
|
|
62
|
+
findOption(option, index, id) {
|
|
63
|
+
return option.id == id;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
DynamicFormSelectComponent.decorators = [
|
|
67
|
+
{ type: Component, args: [{
|
|
68
|
+
moduleId: module.id,
|
|
69
|
+
selector: "dynamic-form-select",
|
|
70
|
+
template: "<ng-template #selectTemplate let-selected=\"selected\">\r\n <select class=\"form-control\"\r\n [multiple]=\"data.multi\"\r\n [id]=\"control.formId\"\r\n [name]=\"control.formId\"\r\n [ngClass]=\"{disabled: control.disabled}\"\r\n [disabled]=\"control.disabled\"\r\n [ngModel]=\"data.multi ? value : [value]\"\r\n (ngModelChange)=\"onSelectChange($event)\"\r\n (blur)=\"control.onBlur()\"\r\n (focus)=\"control.onFocus()\">\r\n <option *ngFor=\"let option of meta.options\" [value]=\"option.id\" [disabled]=\"option.selectable == false\">\r\n {{ option.label | translate }}\r\n </option>\r\n </select>\r\n <label class=\"form-control-description\" [attr.for]=\"control.formId\" *ngIf=\"!data.multi && selected?.description\">\r\n {{ selected?.description | translate }}\r\n </label>\r\n</ng-template>\r\n<ng-container [ngSwitch]=\"data.type\">\r\n <ng-container *ngSwitchCase=\"'radio'\">\r\n <ul class=\"radio-group\">\r\n <li *ngFor=\"let option of meta.options\" class=\"radio\">\r\n <label [ngClass]=\"{checked: value == option.id}\">\r\n <input type=\"radio\"\r\n [id]=\"control.formId + '-' + option.id\"\r\n [name]=\"control.formId + '-' + option.id\"\r\n [ngClass]=\"{disabled: control.disabled}\"\r\n [disabled]=\"control.disabled || option.selectable == false\"\r\n [value]=\"option.id\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"onSelectChange(option.id)\"\r\n (blur)=\"control.onBlur()\"\r\n (focus)=\"control.onFocus()\">\r\n {{ option.label | translate }}\r\n </label>\r\n </li>\r\n </ul>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <ul class=\"checkbox-group\">\r\n <li *ngFor=\"let option of meta.options\" class=\"checkbox\">\r\n <label [ngClass]=\"{checked: checkValue(option)}\">\r\n <input type=\"checkbox\"\r\n [id]=\"control.formId + '-' + option.id\"\r\n [name]=\"control.formId + '-' + option.id\"\r\n [ngClass]=\"{disabled: control.disabled}\"\r\n [disabled]=\"control.disabled || option.selectable == false\"\r\n [ngModel]=\"checkValue(option)\"\r\n (ngModelChange)=\"onSelectChange(option.id)\"\r\n (blur)=\"control.onBlur()\"\r\n (focus)=\"control.onFocus()\">\r\n {{ option.label | translate }}\r\n </label>\r\n </li>\r\n </ul>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"selectTemplate\" [ngTemplateOutletContext]=\"{selected: meta?.options | find:findOption:value}\">\r\n\r\n </ng-container>\r\n</ng-container>\r\n"
|
|
71
|
+
},] }
|
|
72
|
+
];
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbmd4LWR5bmFtaWMtZm9ybS9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS1zZWxlY3QvZHluYW1pYy1mb3JtLXNlbGVjdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUMsV0FBVyxFQUFFLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzNELE9BQU8sRUFFSCxvQkFBb0IsRUFLdkIsTUFBTSxvQkFBb0IsQ0FBQztBQU81QixNQUFNLE9BQU8sMEJBQTJCLFNBQVEsb0JBQXFDO0lBRWpGLHdCQUF3QjtJQUN4QixNQUFNLENBQUMsUUFBUSxDQUFDLE9BQTJCO1FBQ3ZDLE9BQU8sT0FBTyxDQUFDLElBQUksSUFBSSxRQUFRLENBQUM7SUFDcEMsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixNQUFNLENBQUMsTUFBTSxDQUFDLE9BQTRCO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQW1CLENBQUM7UUFDaEQsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ3BDLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1NBQ3RFO1FBQ0QsT0FBTyxJQUFJLE9BQU8sQ0FBTSxPQUFPLENBQUMsRUFBRTtZQUM5QixNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFzQixJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDL0IsSUFBSSxJQUFJLENBQUMs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QUFDO0lBRUQsVUFBVSxDQUFDLE1BQTBCLEVBQUUsS0FBYSxFQUFFLEVBQVU7UUFDNUQsT0FBTyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDOzs7WUF0RUosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtnQkFDbkIsUUFBUSxFQUFFLHFCQUFxQjtnQkFDL0IsK3BHQUFtRDthQUN0RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge09iamVjdFV0aWxzLCBSZWZsZWN0VXRpbHN9IGZyb20gXCJAc3RlbXkvbmd4LXV0aWxzXCI7XHJcbmltcG9ydCB7XHJcbiAgICBEeW5hbWljRm9ybUNvbnRyb2wsXHJcbiAgICBGb3JtQ29udHJvbENvbXBvbmVudCxcclxuICAgIElEeW5hbWljRm9ybSwgSUR5bmFtaWNGb3JtQ29udHJvbCxcclxuICAgIElGb3JtQ29udHJvbCwgSUZvcm1Db250cm9sT3B0aW9uLFxyXG4gICAgSUZvcm1Db250cm9sT3B0aW9ucyxcclxuICAgIElGb3JtU2VsZWN0RGF0YVxyXG59IGZyb20gXCIuLi8uLi9jb21tb24tdHlwZXNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcclxuICAgIHNlbGVjdG9yOiBcImR5bmFtaWMtZm9ybS1zZWxlY3RcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcIi4vZHluYW1pYy1mb3JtLXNlbGVjdC5jb21wb25lbnQuaHRtbFwiXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljRm9ybVNlbGVjdENvbXBvbmVudCBleHRlbmRzIEZvcm1Db250cm9sQ29tcG9uZW50PElGb3JtU2VsZWN0RGF0YT4ge1xyXG5cclxuICAgIC8vIEFjY2VwdG9yIGZvciBwcm92aWRlclxyXG4gICAgc3RhdGljIGFjY2VwdG9yKGNvbnRyb2w6IER5bmFtaWNGb3JtQ29udHJvbCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBjb250cm9sLnR5cGUgPT0gXCJzZWxlY3RcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBMb2FkZXIgZm9yIHByb3ZpZGVyXHJcbiAgICBzdGF0aWMgbG9hZGVyKGNvbnRyb2w6IElEeW5hbWljRm9ybUNvbnRyb2wpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBjb250cm9sLmdldERhdGE8SUZvcm1TZWxlY3REYXRhPigpO1xyXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT0gXCJyYWRpb1wiICYmIGRhdGEubXVsdGkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiUmFkaW8gZ3JvdXAgZG9lc24ndCBzdXBwb3J0IG11bHRpIHNlbGVjdCFcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBnZXRPcHRpb25zID0gUmVmbGVjdFV0aWxzLnJlc29sdmU8SUZvcm1Db250cm9sT3B0aW9ucz4oZGF0YS5vcHRpb25zLCBjb250cm9sLmZvcm0uaW5qZWN0b3IpO1xyXG4gICAgICAgICAgICBnZXRPcHRpb25zKGNvbnRyb2wpLnRoZW4ob3B0aW9ucyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5lbXB0eU9wdGlvbikgb3B0aW9ucy51bnNoaWZ0KHtpZDogbnVsbCwgbGFiZWw6IFwiXCJ9KTtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wubWV0YS5vcHRpb25zID0gb3B0aW9ucztcclxuICAgICAgICAgICAgICAgIER5bmFtaWNGb3JtU2VsZWN0Q29tcG9uZW50LmZpbGxPcHRpb25zKGNvbnRyb2wsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShvcHRpb25zKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZpbGxPcHRpb25zKGNvbnRyb2w6IElEeW5hbWljRm9ybUNvbnRyb2wsIG9wdGlvbnM6IElGb3JtQ29udHJvbE9wdGlvbltdKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IGNvbnRyb2wuZ2V0RGF0YTxJRm9ybVNlbGVjdERhdGE+KCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBjb250cm9sLnZhbHVlO1xyXG4gICAgICAgIGlmIChkYXRhLm11bHRpIHx8IG9wdGlvbnMubGVuZ3RoID09IDAgfHwgb3B0aW9ucy5maW5kSW5kZXgodCA9PiB0LmlkID09IHNlbGVjdGVkKSA+PSAwKSByZXR1cm47XHJcbiAgICAgICAgY29udHJvbC5zZXRWYWx1ZShvcHRpb25zWzBdLmlkKTtcclxuICAgIH1cclxuXHJcbiAgICBvblNlbGVjdENoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaXNBcnJheSA9IE9iamVjdFV0aWxzLmlzQXJyYXkodmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEubXVsdGkpIHtcclxuICAgICAgICAgICAgaWYgKGlzQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKE9iamVjdFV0aWxzLmlzQXJyYXkoY3VycmVudCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZShcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmluZGV4T2YodmFsdWUpIDwgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGN1cnJlbnQuY29uY2F0KFt2YWx1ZV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudC5maWx0ZXIoYyA9PiBjICE9PSB2YWx1ZSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKFt2YWx1ZV0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc0FycmF5KSB2YWx1ZSA9IHZhbHVlWzBdO1xyXG4gICAgICAgIGlmIChjdXJyZW50ID09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMubWV0YS5vcHRpb25zLmZpbmQobyA9PiBvLmlkICE9PSB2YWx1ZSk7XHJcbiAgICAgICAgICAgIHZhbHVlID0gb3B0aW9uID8gb3B0aW9uLmlkIDogbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja1ZhbHVlKG9wdGlvbjogSUZvcm1Db250cm9sT3B0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHJldHVybiBPYmplY3RVdGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmluZGV4T2Yob3B0aW9uLmlkKSA+PSAwIDogb3B0aW9uLmlkID09IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbmRPcHRpb24ob3B0aW9uOiBJRm9ybUNvbnRyb2xPcHRpb24sIGluZGV4OiBudW1iZXIsIGlkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gb3B0aW9uLmlkID09IGlkO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
package/esm2015/ngx-dynamic-form/components/dynamic-form-static/dynamic-form-static.component.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Component } from "@angular/core";
|
|
2
|
+
import { FormControlComponent } from "../../common-types";
|
|
3
|
+
export class DynamicFormStaticComponent extends FormControlComponent {
|
|
4
|
+
// Acceptor for provider
|
|
5
|
+
static acceptor(control) {
|
|
6
|
+
return control.type == "static";
|
|
7
|
+
}
|
|
8
|
+
// Loader for provider
|
|
9
|
+
static loader() {
|
|
10
|
+
return Promise.resolve();
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
DynamicFormStaticComponent.decorators = [
|
|
14
|
+
{ type: Component, args: [{
|
|
15
|
+
moduleId: module.id,
|
|
16
|
+
selector: "dynamic-form-static",
|
|
17
|
+
template: "<unordered-list [listStyle]=\"data.style\" [ngClass]=\"{disabled: control.disabled}\"\r\n [data]=\"!data.properties ? {value: value} : data.properties | remap: value\">\r\n <ng-template [type]=\"!data.properties ? 'key' : null\" selector=\"level == 0\" let-item=\"item\"></ng-template>\r\n <ng-template type=\"value\" selector=\"valueType == 'date'\" let-item=\"item\">\r\n {{ item.value | date }}\r\n </ng-template>\r\n</unordered-list>\r\n"
|
|
18
|
+
},] }
|
|
19
|
+
];
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLXN0YXRpYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbmd4LWR5bmFtaWMtZm9ybS9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS1zdGF0aWMvZHluYW1pYy1mb3JtLXN0YXRpYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBRUgsb0JBQW9CLEVBSXZCLE1BQU0sb0JBQW9CLENBQUM7QUFPNUIsTUFBTSxPQUFPLDBCQUEyQixTQUFRLG9CQUFxQztJQUVqRix3QkFBd0I7SUFDeEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUEyQjtRQUN2QyxPQUFPLE9BQU8sQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsTUFBTSxDQUFDLE1BQU07UUFDVCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDOzs7WUFmSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO2dCQUNuQixRQUFRLEVBQUUscUJBQXFCO2dCQUMvQixvZUFBbUQ7YUFDdEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICAgIER5bmFtaWNGb3JtQ29udHJvbCxcclxuICAgIEZvcm1Db250cm9sQ29tcG9uZW50LFxyXG4gICAgSUR5bmFtaWNGb3JtLFxyXG4gICAgSUZvcm1Db250cm9sLFxyXG4gICAgSUZvcm1TdGF0aWNEYXRhXHJcbn0gZnJvbSBcIi4uLy4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGVJZDogbW9kdWxlLmlkLFxyXG4gICAgc2VsZWN0b3I6IFwiZHluYW1pYy1mb3JtLXN0YXRpY1wiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9keW5hbWljLWZvcm0tc3RhdGljLmNvbXBvbmVudC5odG1sXCJcclxufSlcclxuZXhwb3J0IGNsYXNzIER5bmFtaWNGb3JtU3RhdGljQ29tcG9uZW50IGV4dGVuZHMgRm9ybUNvbnRyb2xDb21wb25lbnQ8SUZvcm1TdGF0aWNEYXRhPiB7XHJcblxyXG4gICAgLy8gQWNjZXB0b3IgZm9yIHByb3ZpZGVyXHJcbiAgICBzdGF0aWMgYWNjZXB0b3IoY29udHJvbDogRHluYW1pY0Zvcm1Db250cm9sKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRyb2wudHlwZSA9PSBcInN0YXRpY1wiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIExvYWRlciBmb3IgcHJvdmlkZXJcclxuICAgIHN0YXRpYyBsb2FkZXIoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcbn1cclxuIl19
|