kitsng-form-factory 0.4.34
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/README.md +24 -0
- package/esm2022/kitsng-form-factory.mjs +5 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-array/kitsng-form-array.component.mjs +176 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-element/kitsng-form-element.component.mjs +67 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-factory/kitsng-form-factory.component.mjs +94 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-factory-core/kitsng-form-factory-core.component.mjs +65 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/auto-complete/auto-complete.component.mjs +156 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/button/button.component.mjs +42 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/calendar-picker/calendar-picker.component.mjs +50 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/checkbox/checkbox.component.mjs +58 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/checkbox-group/checkbox-group.component.mjs +48 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/chips/chips.component.mjs +37 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/color-picker/color-picker.component.mjs +114 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/divider/divider.component.mjs +22 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/dropdown/dropdown.component.mjs +58 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/editor/editor.component.mjs +51 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/field-errors/field-errors.component.mjs +143 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/file-upload/file-type-url.pipe.mjs +18 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/file-upload/file-upload.component.mjs +120 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/form-element-layout/form-element-layout.component.mjs +179 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/google-map/google-map.component.mjs +113 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/icon-picker/icon-data.mjs +179 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/icon-picker/icon-picker.component.mjs +74 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/input/input.component.mjs +50 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/input-group/input-group.component.mjs +50 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/input-mask/input-mask.component.mjs +37 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/input-number/input-number.component.mjs +50 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/input-phone/input-phone.component.mjs +174 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/lookup-multi-select/lookup-multi-select.component.mjs +263 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/lookup-select/lookup-select.component.mjs +332 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/multi-select/multi-select.component.mjs +60 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/password/password.component.mjs +37 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/radio-button/radio-button.component.mjs +48 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/rating/rating.component.mjs +37 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/select-button/select-button.component.mjs +50 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/slider/slider.component.mjs +49 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/switch-button/switch-button.component.mjs +58 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/textarea/textarea.component.mjs +50 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/title/title.component.mjs +23 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/tree-select/tree-select.component.mjs +122 -0
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-group/kitsng-form-group.component.mjs +54 -0
- package/esm2022/lib/kitsng-form-factory/core/directives/kitsng-form-control-template.directive.mjs +19 -0
- package/esm2022/lib/kitsng-form-factory/core/models/kitsng-dynamic-field.mjs +2 -0
- package/esm2022/lib/kitsng-form-factory/core/models/kitsng-field-type.mjs +2 -0
- package/esm2022/lib/kitsng-form-factory/core/models/kitsng-form-factory.mjs +14 -0
- package/esm2022/lib/kitsng-form-factory/core/services/kitsng-form-control-template-registry.service.mjs +22 -0
- package/esm2022/lib/kitsng-form-factory/core/services/kitsng-form-factory.service.mjs +340 -0
- package/esm2022/lib/kitsng-form-factory/core/services/kitsng-form-helper.service.mjs +67 -0
- package/esm2022/lib/kitsng-form-factory/core/services/lookup-list.service.mjs +132 -0
- package/esm2022/lib/kitsng-form-factory/core/services/overlay.service.mjs +30 -0
- package/esm2022/lib/kitsng-form-factory/kitsng-form-factory.module.mjs +279 -0
- package/esm2022/public-api.mjs +15 -0
- package/fesm2022/kitsng-form-factory.mjs +3956 -0
- package/fesm2022/kitsng-form-factory.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/kitsng-form-factory/components/kitsng-form-array/kitsng-form-array.component.d.ts +31 -0
- package/lib/kitsng-form-factory/components/kitsng-form-element/kitsng-form-element.component.d.ts +38 -0
- package/lib/kitsng-form-factory/components/kitsng-form-factory/kitsng-form-factory.component.d.ts +31 -0
- package/lib/kitsng-form-factory/components/kitsng-form-factory-core/kitsng-form-factory-core.component.d.ts +29 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/auto-complete/auto-complete.component.d.ts +49 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/button/button.component.d.ts +14 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/calendar-picker/calendar-picker.component.d.ts +31 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/checkbox/checkbox.component.d.ts +34 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/checkbox-group/checkbox-group.component.d.ts +30 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/chips/chips.component.d.ts +13 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/color-picker/color-picker.component.d.ts +40 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/divider/divider.component.d.ts +9 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/dropdown/dropdown.component.d.ts +35 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/editor/editor.component.d.ts +30 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/field-errors/field-errors.component.d.ts +22 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/file-upload/file-type-url.pipe.d.ts +7 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/file-upload/file-upload.component.d.ts +40 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/form-element-layout/form-element-layout.component.d.ts +25 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/google-map/google-map.component.d.ts +41 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/icon-picker/icon-data.d.ts +1 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/icon-picker/icon-picker.component.d.ts +41 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/input/input.component.d.ts +31 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/input-group/input-group.component.d.ts +30 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/input-mask/input-mask.component.d.ts +13 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/input-number/input-number.component.d.ts +30 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/input-phone/input-phone.component.d.ts +48 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/lookup-multi-select/lookup-multi-select.component.d.ts +66 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/lookup-select/lookup-select.component.d.ts +71 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/multi-select/multi-select.component.d.ts +35 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/password/password.component.d.ts +13 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/radio-button/radio-button.component.d.ts +30 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/rating/rating.component.d.ts +13 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/select-button/select-button.component.d.ts +30 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/slider/slider.component.d.ts +30 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/switch-button/switch-button.component.d.ts +34 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/textarea/textarea.component.d.ts +30 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/title/title.component.d.ts +9 -0
- package/lib/kitsng-form-factory/components/kitsng-form-fields/tree-select/tree-select.component.d.ts +43 -0
- package/lib/kitsng-form-factory/components/kitsng-form-group/kitsng-form-group.component.d.ts +18 -0
- package/lib/kitsng-form-factory/core/directives/kitsng-form-control-template.directive.d.ts +9 -0
- package/lib/kitsng-form-factory/core/models/kitsng-dynamic-field.d.ts +5 -0
- package/lib/kitsng-form-factory/core/models/kitsng-field-type.d.ts +7 -0
- package/lib/kitsng-form-factory/core/models/kitsng-form-factory.d.ts +339 -0
- package/lib/kitsng-form-factory/core/services/kitsng-form-control-template-registry.service.d.ts +9 -0
- package/lib/kitsng-form-factory/core/services/kitsng-form-factory.service.d.ts +23 -0
- package/lib/kitsng-form-factory/core/services/kitsng-form-helper.service.d.ts +16 -0
- package/lib/kitsng-form-factory/core/services/lookup-list.service.d.ts +23 -0
- package/lib/kitsng-form-factory/core/services/overlay.service.d.ts +7 -0
- package/lib/kitsng-form-factory/kitsng-form-factory.module.d.ts +79 -0
- package/package.json +32 -0
- package/public-api.d.ts +8 -0
package/README.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# KitsngFormFactory
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.2.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project kitsng-form-factory` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project kitsng-form-factory`.
|
|
8
|
+
> Note: Don't forget to add `--project kitsng-form-factory` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
+
|
|
10
|
+
## Build
|
|
11
|
+
|
|
12
|
+
Run `ng build kitsng-form-factory` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
+
|
|
14
|
+
## Publishing
|
|
15
|
+
|
|
16
|
+
After building your library with `ng build kitsng-form-factory`, go to the dist folder `cd dist/kitsng-form-factory` and run `npm publish`.
|
|
17
|
+
|
|
18
|
+
## Running unit tests
|
|
19
|
+
|
|
20
|
+
Run `ng test kitsng-form-factory` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
+
|
|
22
|
+
## Further help
|
|
23
|
+
|
|
24
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2l0c25nLWZvcm0tZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2tpdHNuZy1mb3JtLWZhY3Rvcnkvc3JjL2tpdHNuZy1mb3JtLWZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
package/esm2022/lib/kitsng-form-factory/components/kitsng-form-array/kitsng-form-array.component.mjs
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { Component, Input, Optional, SkipSelf } from '@angular/core';
|
|
2
|
+
import { ControlContainer, FormControl, FormGroup, FormGroupDirective, Validators } from '@angular/forms';
|
|
3
|
+
import { cloneDeep } from 'lodash';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/forms";
|
|
6
|
+
import * as i2 from "../../core/services/kitsng-form-control-template-registry.service";
|
|
7
|
+
import * as i3 from "@angular/common";
|
|
8
|
+
import * as i4 from "primeng/api";
|
|
9
|
+
import * as i5 from "primeng/button";
|
|
10
|
+
import * as i6 from "primeng/table";
|
|
11
|
+
import * as i7 from "../kitsng-form-factory-core/kitsng-form-factory-core.component";
|
|
12
|
+
import * as i8 from "@ngx-translate/core";
|
|
13
|
+
export class KitsngFormArrayComponent {
|
|
14
|
+
constructor(controlContainer, templateRegistry, parentRegistry) {
|
|
15
|
+
this.controlContainer = controlContainer;
|
|
16
|
+
this.templateRegistry = templateRegistry;
|
|
17
|
+
this.parentRegistry = parentRegistry;
|
|
18
|
+
}
|
|
19
|
+
ngOnInit() {
|
|
20
|
+
this.formGroup = this.controlContainer.control;
|
|
21
|
+
this._formControl = this.formGroup.controls[this.field?.options?.formControlName];
|
|
22
|
+
const controlName = this.field.options?.formControlName;
|
|
23
|
+
this.customTemplate = this.templateRegistry.getTemplate(controlName) || this.parentRegistry?.getTemplate(controlName);
|
|
24
|
+
}
|
|
25
|
+
getFormGroupFromArray(arrayName, index) {
|
|
26
|
+
const array = this.getArrayControl(arrayName);
|
|
27
|
+
return array.at(index);
|
|
28
|
+
}
|
|
29
|
+
addNewGroup() {
|
|
30
|
+
const arrayForm = this.getArrayControl(this.field?.options?.formControlName);
|
|
31
|
+
const index = this.getArrayIndex(this.field?.options?.formControlName);
|
|
32
|
+
let defaultField = cloneDeep(this.field?.options?.defaultArrayGroup ?? this.field.array[0]);
|
|
33
|
+
this.fields[index].array.push(defaultField);
|
|
34
|
+
this.fields = this.updateFieldsWithParents(this.fields);
|
|
35
|
+
const item = defaultField;
|
|
36
|
+
arrayForm.push(this.createFormGroup(defaultField));
|
|
37
|
+
if (this.fields[index]?.options?.showClientPaginator) {
|
|
38
|
+
const targetPage = Math.floor((this.fields[index].array.length - 1) / this.fields[index]?.options?.pageSize);
|
|
39
|
+
this.fields[index].options.first = targetPage * this.fields[index]?.options?.pageSize;
|
|
40
|
+
}
|
|
41
|
+
if (this.fields[index]?.options?.onAddArrayItem) {
|
|
42
|
+
this.fields[index]?.options?.onAddArrayItem(this.field, item, arrayForm);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
getArrayControl(arrayName) {
|
|
46
|
+
return this.formGroup.get(arrayName);
|
|
47
|
+
}
|
|
48
|
+
getArrayIndex(arrayName) {
|
|
49
|
+
return this.fields.findIndex((f) => f?.options?.formControlName == arrayName);
|
|
50
|
+
}
|
|
51
|
+
createFormGroup(field) {
|
|
52
|
+
const groupForm = new FormGroup({});
|
|
53
|
+
field.group?.forEach((field) => {
|
|
54
|
+
groupForm.addControl(field.options?.formControlName, this.createControl(field));
|
|
55
|
+
});
|
|
56
|
+
return groupForm;
|
|
57
|
+
}
|
|
58
|
+
createControl(field) {
|
|
59
|
+
let validators = [];
|
|
60
|
+
const newControl = new FormControl({
|
|
61
|
+
value: field.options?.value ?? "",
|
|
62
|
+
disabled: field.options?.disabled && true,
|
|
63
|
+
});
|
|
64
|
+
// Add validators to control
|
|
65
|
+
if (field.options?.validators?.pattern) {
|
|
66
|
+
validators.push(Validators.pattern(field.options?.validators?.pattern));
|
|
67
|
+
}
|
|
68
|
+
if (field.options?.validators?.required) {
|
|
69
|
+
validators.push(Validators.required);
|
|
70
|
+
}
|
|
71
|
+
if (field.options?.validators?.maxLength) {
|
|
72
|
+
validators.push(Validators.maxLength(field.options?.validators?.maxLength));
|
|
73
|
+
}
|
|
74
|
+
if (field.options?.validators?.minLength) {
|
|
75
|
+
validators.push(Validators.minLength(field.options?.validators?.minLength));
|
|
76
|
+
}
|
|
77
|
+
if (field.options?.validators?.min) {
|
|
78
|
+
validators.push(Validators.min(field.options?.validators?.min));
|
|
79
|
+
}
|
|
80
|
+
if (field.options?.validators?.max) {
|
|
81
|
+
validators.push(Validators.max(field.options?.validators?.max));
|
|
82
|
+
}
|
|
83
|
+
if (field.options?.validators?.email) {
|
|
84
|
+
validators.push(Validators.email);
|
|
85
|
+
}
|
|
86
|
+
if (field.options?.validators?.nullValidator) {
|
|
87
|
+
validators.push(Validators.nullValidator);
|
|
88
|
+
}
|
|
89
|
+
if (field.options?.validators?.requiredTrue) {
|
|
90
|
+
validators.push(Validators.requiredTrue);
|
|
91
|
+
}
|
|
92
|
+
if (field.options?.validators?.customValidators?.length > 0) {
|
|
93
|
+
const custom = field.options.validators.customValidators;
|
|
94
|
+
validators.push(...custom);
|
|
95
|
+
}
|
|
96
|
+
// Set validators
|
|
97
|
+
newControl.setValidators(validators);
|
|
98
|
+
return newControl;
|
|
99
|
+
}
|
|
100
|
+
removeGroup(index) {
|
|
101
|
+
const arrayForm = this.getArrayControl(this.field?.options?.formControlName);
|
|
102
|
+
const arrayIndex = this.getArrayIndex(this.field?.options?.formControlName);
|
|
103
|
+
const item = this.fields[arrayIndex].array[index];
|
|
104
|
+
this.fields[arrayIndex].array.splice(index, 1);
|
|
105
|
+
arrayForm.removeAt(index);
|
|
106
|
+
if (this.fields[index]?.options?.showClientPaginator) {
|
|
107
|
+
const targetPage = Math.floor((this.fields[index].array.length - 1) / this.fields[index]?.options?.pageSize);
|
|
108
|
+
const lastPage = targetPage * this.fields[index]?.options?.pageSize;
|
|
109
|
+
if (this.fields[index].options.first > lastPage) {
|
|
110
|
+
this.fields[index].options.first = lastPage;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (this.fields[arrayIndex]?.options?.onRemoveArrayItem) {
|
|
114
|
+
this.fields[arrayIndex]?.options?.onRemoveArrayItem(this.field, item, index, arrayForm);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
getArrayTableColumns() {
|
|
118
|
+
let columns = this.field?.options?.arrayTableColumns ?? [];
|
|
119
|
+
if (columns.length <= 0) {
|
|
120
|
+
const defaultField = this.field?.options?.defaultArrayGroup ?? this.field.array[0];
|
|
121
|
+
columns = defaultField?.group?.map((field) => {
|
|
122
|
+
const label = field?.options?.label ?? field?.options?.formControlName;
|
|
123
|
+
if (field?.options?.label && field.controlType != "title") {
|
|
124
|
+
delete field.options.label;
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
field: field?.options?.formControlName ?? label,
|
|
128
|
+
header: label,
|
|
129
|
+
};
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
return columns;
|
|
133
|
+
}
|
|
134
|
+
updateFieldsWithParents(formFields) {
|
|
135
|
+
const updateFieldWithParent = (field, parent = undefined) => {
|
|
136
|
+
field.parent = parent;
|
|
137
|
+
// If the field has nested fields in a group, recursively update each child field
|
|
138
|
+
if (field.group && Array.isArray(field.group)) {
|
|
139
|
+
field.group.forEach((childField) => updateFieldWithParent(childField, field));
|
|
140
|
+
}
|
|
141
|
+
// If the field has nested fields in an array, recursively update each child field
|
|
142
|
+
if (field.array && Array.isArray(field.array)) {
|
|
143
|
+
field.array.forEach((childField) => updateFieldWithParent(childField, field));
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
formFields.forEach((field) => updateFieldWithParent(field));
|
|
147
|
+
return formFields;
|
|
148
|
+
}
|
|
149
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: KitsngFormArrayComponent, deps: [{ token: i1.ControlContainer }, { token: i2.KitsngFormControlTemplateRegistryService }, { token: i2.KitsngFormControlTemplateRegistryService, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
150
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: KitsngFormArrayComponent, selector: "kitsng-form-array", inputs: { field: "field", fields: "fields" }, ngImport: i0, template: "<ng-container *ngIf=\"customTemplate; else defaultArrayTemplate\">\n <ng-template\n [ngTemplateOutlet]=\"customTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: field,\n formControl: _formControl,\n options: field?.options,\n formGroup: formGroup,\n defaultTemplate: defaultArrayTemplate\n }\">\n </ng-template>\n</ng-container>\n<ng-template #defaultArrayTemplate>\n <div class=\"w-full {{field?.options?.class ?? 'mb-2 px-3 py-2'}}\">\n <div class=\"flex d-flex mb-2 justify-content-between\" *ngIf=\"field?.options?.label || field?.options?.showArrayAddButton != false\">\n <div class=\"\">\n <h5 *ngIf=\"field?.options?.label\" class=\"\">{{ field.options.label| translate }}</h5>\n </div>\n <div class=\"\" *ngIf=\"field?.options?.showArrayAddButton != false\">\n <button pButton [icon]=\"field?.options?.addButtonIcon ?? 'pi pi-plus'\"\n class=\"{{field?.options?.addButtonClass ?? ''}}\"\n [label]=\"field?.options?.addButtonLabel ?? 'Add'\" (click)=\"addNewGroup()\"></button>\n </div>\n </div>\n <ng-container *ngIf=\"field?.options?.arrayLayout == 'table';else defaultTemplate\">\n <p-table [value]=\"field.array??[]\"\n [columns]=\"getArrayTableColumns()\"\n [rows]=\"field?.options?.pageSize\"\n [first]=\"field?.options?.first || 0\"\n [rowsPerPageOptions]=\"field?.options?.rowsPerPageOptions ?? [5, 10, 25, 50, 100]\"\n [paginator]=\"field?.options?.showClientPaginator ?? false\"\n [totalRecords]=\"field?.array?.length\"\n styleClass=\"{{field?.options?.arrayTableClass}}\"\n [tableStyle]=\"field?.options?.arrayTableStyle ?? {'min-width': '60rem'}\" dataKey=\"options.formControlName\" [formArrayName]=\"field?.options?.formControlName\">\n <ng-template pTemplate=\"header\" let-columns>\n <tr [class]=\"field?.options?.tableHeaderClass\">\n <ng-container *ngFor=\"let item of columns\">\n <th class=\"{{item?.cellClass}}\" [ngStyle]=\"item?.cellStyle?? {}\">\n {{(item.header||'')|translate}}\n </th>\n </ng-container>\n <th *ngIf=\"field?.options?.showArrayRemoveButton != false\">\n {{'Actions'|translate}}\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-item let-i=\"rowIndex\">\n <tr [formGroup]=\"getFormGroupFromArray(field?.options?.formControlName,i)\">\n <ng-container *ngFor=\"let element of item.group\">\n <td *ngIf=\"!element?.options?.isHidden\">\n <div class=\"w-full\" *ngIf=\"element?.options?.isVisible != false\">\n <kitsng-form-factory-core [field]=\"element\"></kitsng-form-factory-core>\n </div>\n </td>\n </ng-container>\n <td *ngIf=\"(i != 0 || field?.options?.defaultArrayGroup) && field?.options?.showArrayRemoveButton != false && item?.options?.showArrayRemoveButton != false\">\n <ng-container *ngTemplateOutlet=\"removeButtonTemplate; context: { $implicit: i, first: i == 0, item: item }\"></ng-container>\n </td>\n </tr>\n </ng-template>\n </p-table>\n\n </ng-container>\n <ng-template #defaultTemplate>\n <div class=\"p-fluid p-formgrid grid row grid-nogutter {{field?.options?.containerClass}}\" [formArrayName]=\"field?.options?.formControlName\">\n <ng-container *ngFor=\"let subfield of field.array; let i = index; let first = first\">\n <div [class]=\"subfield.colSize\" *ngIf=\"subfield?.options?.isVisible != false\">\n <div class=\"card w-full shadow-none {{subfield?.options?.class ?? 'mb-2'}}\">\n <!-- remove button -->\n <ng-container *ngIf=\"field?.options?.removeButtonPosition == 'top' || !field?.options?.removeButtonPosition\">\n <ng-container *ngTemplateOutlet=\"removeButtonTemplate; context: { $implicit: i, first: first, item: subfield }\"></ng-container>\n </ng-container>\n <!-- <h5 *ngIf=\"subfield?.options?.label\" class=\"\">{{ subfield.options.label }}</h5> -->\n <div class=\"p-fluid p-formgrid grid row grid-nogutter {{subfield?.options?.containerClass}}\" [formGroup]=\"getFormGroupFromArray(field?.options?.formControlName,i)\">\n <ng-container *ngIf=\"subfield.group; else nestedControlTemplate\">\n <!-- * Define column size -->\n <ng-container *ngFor=\"let subSubfield of subfield.group\">\n <!-- * Find and use type of control -->\n <div [class]=\"'py-2 '+subSubfield.colSize\" *ngIf=\"subSubfield?.options?.isVisible != false\">\n <kitsng-form-factory-core [field]=\"subSubfield\"></kitsng-form-factory-core>\n </div>\n </ng-container>\n </ng-container>\n <ng-template #nestedControlTemplate>\n <div [class]=\"subfield.colSize\" *ngIf=\"subfield?.options?.isVisible != false\">\n <kitsng-form-factory-core [field]=\"subfield\"></kitsng-form-factory-core>\n </div>\n </ng-template>\n <!-- remove button -->\n <ng-container *ngIf=\"field?.options?.removeButtonPosition == 'side' && (!first || field?.options?.defaultArrayGroup) && field?.options?.showArrayRemoveButton != false && subfield?.options?.showArrayRemoveButton != false\">\n <div class=\"{{field?.options?.removeButtonColSize ?? 'col-1'}}\">\n <ng-container *ngTemplateOutlet=\"removeButtonTemplate; context: { $implicit: i, first: first, item: subfield }\"></ng-container>\n </div>\n </ng-container>\n </div>\n <!-- remove button -->\n <ng-container *ngIf=\"field?.options?.removeButtonPosition == 'bottom'\">\n <ng-container *ngTemplateOutlet=\"removeButtonTemplate; context: { $implicit: i, first: first, item: subfield }\"></ng-container>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </div>\n </ng-template>\n </div>\n\n <ng-template #removeButtonTemplate let-i let-first=\"first\" let-item=\"item\">\n <div class=\"flex d-flex justify-content-end\" *ngIf=\"(!first || field?.options?.defaultArrayGroup) && field?.options?.showArrayRemoveButton != false && item?.options?.showArrayRemoveButton != false\">\n <div>\n <button pButton [icon]=\"field?.options?.removeButtonIcon ?? 'pi pi-times'\"\n class=\"{{field?.options?.removeButtonClass ?? 'p-button-outlined p-button-danger'}}\"\n [label]=\"field?.options?.removeButtonLabel ?? 'Remove'\" (click)=\"removeGroup(i)\"></button>\n </div>\n </div>\n </ng-template>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i6.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "component", type: i7.KitsngFormFactoryCoreComponent, selector: "kitsng-form-factory-core", inputs: ["field"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], viewProviders: [
|
|
151
|
+
{
|
|
152
|
+
provide: ControlContainer,
|
|
153
|
+
useExisting: FormGroupDirective,
|
|
154
|
+
},
|
|
155
|
+
] }); }
|
|
156
|
+
}
|
|
157
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: KitsngFormArrayComponent, decorators: [{
|
|
158
|
+
type: Component,
|
|
159
|
+
args: [{ selector: 'kitsng-form-array', viewProviders: [
|
|
160
|
+
{
|
|
161
|
+
provide: ControlContainer,
|
|
162
|
+
useExisting: FormGroupDirective,
|
|
163
|
+
},
|
|
164
|
+
], template: "<ng-container *ngIf=\"customTemplate; else defaultArrayTemplate\">\n <ng-template\n [ngTemplateOutlet]=\"customTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: field,\n formControl: _formControl,\n options: field?.options,\n formGroup: formGroup,\n defaultTemplate: defaultArrayTemplate\n }\">\n </ng-template>\n</ng-container>\n<ng-template #defaultArrayTemplate>\n <div class=\"w-full {{field?.options?.class ?? 'mb-2 px-3 py-2'}}\">\n <div class=\"flex d-flex mb-2 justify-content-between\" *ngIf=\"field?.options?.label || field?.options?.showArrayAddButton != false\">\n <div class=\"\">\n <h5 *ngIf=\"field?.options?.label\" class=\"\">{{ field.options.label| translate }}</h5>\n </div>\n <div class=\"\" *ngIf=\"field?.options?.showArrayAddButton != false\">\n <button pButton [icon]=\"field?.options?.addButtonIcon ?? 'pi pi-plus'\"\n class=\"{{field?.options?.addButtonClass ?? ''}}\"\n [label]=\"field?.options?.addButtonLabel ?? 'Add'\" (click)=\"addNewGroup()\"></button>\n </div>\n </div>\n <ng-container *ngIf=\"field?.options?.arrayLayout == 'table';else defaultTemplate\">\n <p-table [value]=\"field.array??[]\"\n [columns]=\"getArrayTableColumns()\"\n [rows]=\"field?.options?.pageSize\"\n [first]=\"field?.options?.first || 0\"\n [rowsPerPageOptions]=\"field?.options?.rowsPerPageOptions ?? [5, 10, 25, 50, 100]\"\n [paginator]=\"field?.options?.showClientPaginator ?? false\"\n [totalRecords]=\"field?.array?.length\"\n styleClass=\"{{field?.options?.arrayTableClass}}\"\n [tableStyle]=\"field?.options?.arrayTableStyle ?? {'min-width': '60rem'}\" dataKey=\"options.formControlName\" [formArrayName]=\"field?.options?.formControlName\">\n <ng-template pTemplate=\"header\" let-columns>\n <tr [class]=\"field?.options?.tableHeaderClass\">\n <ng-container *ngFor=\"let item of columns\">\n <th class=\"{{item?.cellClass}}\" [ngStyle]=\"item?.cellStyle?? {}\">\n {{(item.header||'')|translate}}\n </th>\n </ng-container>\n <th *ngIf=\"field?.options?.showArrayRemoveButton != false\">\n {{'Actions'|translate}}\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-item let-i=\"rowIndex\">\n <tr [formGroup]=\"getFormGroupFromArray(field?.options?.formControlName,i)\">\n <ng-container *ngFor=\"let element of item.group\">\n <td *ngIf=\"!element?.options?.isHidden\">\n <div class=\"w-full\" *ngIf=\"element?.options?.isVisible != false\">\n <kitsng-form-factory-core [field]=\"element\"></kitsng-form-factory-core>\n </div>\n </td>\n </ng-container>\n <td *ngIf=\"(i != 0 || field?.options?.defaultArrayGroup) && field?.options?.showArrayRemoveButton != false && item?.options?.showArrayRemoveButton != false\">\n <ng-container *ngTemplateOutlet=\"removeButtonTemplate; context: { $implicit: i, first: i == 0, item: item }\"></ng-container>\n </td>\n </tr>\n </ng-template>\n </p-table>\n\n </ng-container>\n <ng-template #defaultTemplate>\n <div class=\"p-fluid p-formgrid grid row grid-nogutter {{field?.options?.containerClass}}\" [formArrayName]=\"field?.options?.formControlName\">\n <ng-container *ngFor=\"let subfield of field.array; let i = index; let first = first\">\n <div [class]=\"subfield.colSize\" *ngIf=\"subfield?.options?.isVisible != false\">\n <div class=\"card w-full shadow-none {{subfield?.options?.class ?? 'mb-2'}}\">\n <!-- remove button -->\n <ng-container *ngIf=\"field?.options?.removeButtonPosition == 'top' || !field?.options?.removeButtonPosition\">\n <ng-container *ngTemplateOutlet=\"removeButtonTemplate; context: { $implicit: i, first: first, item: subfield }\"></ng-container>\n </ng-container>\n <!-- <h5 *ngIf=\"subfield?.options?.label\" class=\"\">{{ subfield.options.label }}</h5> -->\n <div class=\"p-fluid p-formgrid grid row grid-nogutter {{subfield?.options?.containerClass}}\" [formGroup]=\"getFormGroupFromArray(field?.options?.formControlName,i)\">\n <ng-container *ngIf=\"subfield.group; else nestedControlTemplate\">\n <!-- * Define column size -->\n <ng-container *ngFor=\"let subSubfield of subfield.group\">\n <!-- * Find and use type of control -->\n <div [class]=\"'py-2 '+subSubfield.colSize\" *ngIf=\"subSubfield?.options?.isVisible != false\">\n <kitsng-form-factory-core [field]=\"subSubfield\"></kitsng-form-factory-core>\n </div>\n </ng-container>\n </ng-container>\n <ng-template #nestedControlTemplate>\n <div [class]=\"subfield.colSize\" *ngIf=\"subfield?.options?.isVisible != false\">\n <kitsng-form-factory-core [field]=\"subfield\"></kitsng-form-factory-core>\n </div>\n </ng-template>\n <!-- remove button -->\n <ng-container *ngIf=\"field?.options?.removeButtonPosition == 'side' && (!first || field?.options?.defaultArrayGroup) && field?.options?.showArrayRemoveButton != false && subfield?.options?.showArrayRemoveButton != false\">\n <div class=\"{{field?.options?.removeButtonColSize ?? 'col-1'}}\">\n <ng-container *ngTemplateOutlet=\"removeButtonTemplate; context: { $implicit: i, first: first, item: subfield }\"></ng-container>\n </div>\n </ng-container>\n </div>\n <!-- remove button -->\n <ng-container *ngIf=\"field?.options?.removeButtonPosition == 'bottom'\">\n <ng-container *ngTemplateOutlet=\"removeButtonTemplate; context: { $implicit: i, first: first, item: subfield }\"></ng-container>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </div>\n </ng-template>\n </div>\n\n <ng-template #removeButtonTemplate let-i let-first=\"first\" let-item=\"item\">\n <div class=\"flex d-flex justify-content-end\" *ngIf=\"(!first || field?.options?.defaultArrayGroup) && field?.options?.showArrayRemoveButton != false && item?.options?.showArrayRemoveButton != false\">\n <div>\n <button pButton [icon]=\"field?.options?.removeButtonIcon ?? 'pi pi-times'\"\n class=\"{{field?.options?.removeButtonClass ?? 'p-button-outlined p-button-danger'}}\"\n [label]=\"field?.options?.removeButtonLabel ?? 'Remove'\" (click)=\"removeGroup(i)\"></button>\n </div>\n </div>\n </ng-template>\n</ng-template>\n" }]
|
|
165
|
+
}], ctorParameters: () => [{ type: i1.ControlContainer }, { type: i2.KitsngFormControlTemplateRegistryService }, { type: i2.KitsngFormControlTemplateRegistryService, decorators: [{
|
|
166
|
+
type: Optional
|
|
167
|
+
}, {
|
|
168
|
+
type: SkipSelf
|
|
169
|
+
}] }], propDecorators: { field: [{
|
|
170
|
+
type: Input,
|
|
171
|
+
args: [{ required: true }]
|
|
172
|
+
}], fields: [{
|
|
173
|
+
type: Input,
|
|
174
|
+
args: [{ required: true }]
|
|
175
|
+
}] } });
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2l0c25nLWZvcm0tYXJyYXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0c25nLWZvcm0tZmFjdG9yeS9zcmMvbGliL2tpdHNuZy1mb3JtLWZhY3RvcnkvY29tcG9uZW50cy9raXRzbmctZm9ybS1hcnJheS9raXRzbmctZm9ybS1hcnJheS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXRzbmctZm9ybS1mYWN0b3J5L3NyYy9saWIva2l0c25nLWZvcm0tZmFjdG9yeS9jb21wb25lbnRzL2tpdHNuZy1mb3JtLWFycmF5L2tpdHNuZy1mb3JtLWFycmF5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFtQixnQkFBZ0IsRUFBYSxXQUFXLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFlLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25KLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFnQm5DLE1BQU0sT0FBTyx3QkFBd0I7SUFNakMsWUFDUyxnQkFBa0MsRUFDakMsZ0JBQTBELEVBQ2xDLGNBQXlEO1FBRmxGLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDakMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUEwQztRQUNsQyxtQkFBYyxHQUFkLGNBQWMsQ0FBMkM7SUFDM0YsQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFvQixDQUFDO1FBQzVELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDbEYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDO1FBQ3hELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4SCxDQUFDO0lBQ0QscUJBQXFCLENBQUMsU0FBaUIsRUFBRSxLQUFhO1FBQ3BELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBYyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxXQUFXO1FBQ1QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQztRQUM3RSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksWUFBWSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVGLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEQsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDO1FBQzFCLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ25ELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztZQUNyRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzdHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDO1FBQ3hGLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM3RSxDQUFDO0lBQ0gsQ0FBQztJQUNELGVBQWUsQ0FBQyxTQUFpQjtRQUMvQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUNyQixTQUFTLENBQ0csQ0FBQztJQUNuQixDQUFDO0lBQ0QsYUFBYSxDQUFDLFNBQWlCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQ3hCLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLGVBQWUsSUFBSSxTQUFTLENBQ3JELENBQUM7SUFDTixDQUFDO0lBQ0QsZUFBZSxDQUFDLEtBQVU7UUFDeEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEMsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNsQyxTQUFTLENBQUMsVUFBVSxDQUNsQixLQUFLLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFDOUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FDMUIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELGFBQWEsQ0FBQyxLQUFVO1FBQ3RCLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNwQixNQUFNLFVBQVUsR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUNqQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRTtZQUNqQyxRQUFRLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLElBQUksSUFBSTtTQUMxQyxDQUFDLENBQUM7UUFDSCw0QkFBNEI7UUFDNUIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUN2QyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUN4QyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQztZQUN6QyxVQUFVLENBQUMsSUFBSSxDQUNiLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQzNELENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQztZQUN6QyxVQUFVLENBQUMsSUFBSSxDQUNiLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQzNELENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNuQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNuQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNyQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUM3QyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUM1QyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEdBQUMsQ0FBQyxFQUFFLENBQUM7WUFDMUQsTUFBTSxNQUFN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R2lCO1lBQ2I7Z0JBQ0UsT0FBTyxFQUFFLGdCQUFnQjtnQkFDekIsV0FBVyxFQUFFLGtCQUFrQjthQUNoQztTQUNGOzsyRkFFVSx3QkFBd0I7a0JBWnBDLFNBQVM7K0JBQ0UsbUJBQW1CLGlCQUlkO3dCQUNiOzRCQUNFLE9BQU8sRUFBRSxnQkFBZ0I7NEJBQ3pCLFdBQVcsRUFBRSxrQkFBa0I7eUJBQ2hDO3FCQUNGOzswQkFXSSxRQUFROzswQkFBSSxRQUFRO3lDQVJFLEtBQUs7c0JBQTdCLEtBQUs7dUJBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDO2dCQUNFLE1BQU07c0JBQTlCLEtBQUs7dUJBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3B0aW9uYWwsIFNraXBTZWxmLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1Hcm91cERpcmVjdGl2ZSwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgS2l0c25nRm9ybUZhY3RvcnlNb2RlbCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL2tpdHNuZy1mb3JtLWZhY3RvcnknO1xuaW1wb3J0IHsgS2l0c25nRm9ybUNvbnRyb2xUZW1wbGF0ZVJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMva2l0c25nLWZvcm0tY29udHJvbC10ZW1wbGF0ZS1yZWdpc3RyeS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna2l0c25nLWZvcm0tYXJyYXknLFxuICB0ZW1wbGF0ZVVybDogJy4va2l0c25nLWZvcm0tYXJyYXkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtcbiAgXSxcbiAgdmlld1Byb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsXG4gICAgICB1c2VFeGlzdGluZzogRm9ybUdyb3VwRGlyZWN0aXZlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEtpdHNuZ0Zvcm1BcnJheUNvbXBvbmVudCB7XG4gICAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZX0pIGZpZWxkOiBhbnk7XG4gICAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZX0pIGZpZWxkczogYW55O1xuICAgIF9mb3JtQ29udHJvbCE6IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT47XG4gICAgZm9ybUdyb3VwITogRm9ybUdyb3VwO1xuICAgICAgY3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgcHVibGljIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgICBwcml2YXRlIHRlbXBsYXRlUmVnaXN0cnk6IEtpdHNuZ0Zvcm1Db250cm9sVGVtcGxhdGVSZWdpc3RyeVNlcnZpY2UsXG4gICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBwcml2YXRlIHBhcmVudFJlZ2lzdHJ5PzogS2l0c25nRm9ybUNvbnRyb2xUZW1wbGF0ZVJlZ2lzdHJ5U2VydmljZSkge1xuICAgIH1cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5jb250cm9sQ29udGFpbmVyLmNvbnRyb2wgYXMgRm9ybUdyb3VwO1xuICAgICAgdGhpcy5fZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1t0aGlzLmZpZWxkPy5vcHRpb25zPy5mb3JtQ29udHJvbE5hbWVdO1xuICAgICAgY29uc3QgY29udHJvbE5hbWUgPSB0aGlzLmZpZWxkLm9wdGlvbnM/LmZvcm1Db250cm9sTmFtZTtcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlUmVnaXN0cnkuZ2V0VGVtcGxhdGUoY29udHJvbE5hbWUpIHx8IHRoaXMucGFyZW50UmVnaXN0cnk/LmdldFRlbXBsYXRlKGNvbnRyb2xOYW1lKTtcbiAgICB9XG4gICAgZ2V0Rm9ybUdyb3VwRnJvbUFycmF5KGFycmF5TmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKXtcbiAgICAgIGNvbnN0IGFycmF5ID0gdGhpcy5nZXRBcnJheUNvbnRyb2woYXJyYXlOYW1lKTtcbiAgICAgIHJldHVybiBhcnJheS5hdChpbmRleCkgYXMgRm9ybUdyb3VwO1xuICAgIH1cbiAgICBhZGROZXdHcm91cCgpIHtcbiAgICAgIGNvbnN0IGFycmF5Rm9ybSA9IHRoaXMuZ2V0QXJyYXlDb250cm9sKHRoaXMuZmllbGQ/Lm9wdGlvbnM/LmZvcm1Db250cm9sTmFtZSk7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0QXJyYXlJbmRleCh0aGlzLmZpZWxkPy5vcHRpb25zPy5mb3JtQ29udHJvbE5hbWUpO1xuICAgICAgbGV0IGRlZmF1bHRGaWVsZCA9IGNsb25lRGVlcCh0aGlzLmZpZWxkPy5vcHRpb25zPy5kZWZhdWx0QXJyYXlHcm91cCA/PyB0aGlzLmZpZWxkLmFycmF5WzBdKTtcbiAgICAgIHRoaXMuZmllbGRzW2luZGV4XS5hcnJheS5wdXNoKGRlZmF1bHRGaWVsZCk7XG4gICAgICB0aGlzLmZpZWxkcyA9IHRoaXMudXBkYXRlRmllbGRzV2l0aFBhcmVudHModGhpcy5maWVsZHMpO1xuICAgICAgY29uc3QgaXRlbSA9IGRlZmF1bHRGaWVsZDtcbiAgICAgIGFycmF5Rm9ybS5wdXNoKHRoaXMuY3JlYXRlRm9ybUdyb3VwKGRlZmF1bHRGaWVsZCkpO1xuICAgICAgaWYgKHRoaXMuZmllbGRzW2luZGV4XT8ub3B0aW9ucz8uc2hvd0NsaWVudFBhZ2luYXRvcikge1xuICAgICAgICBjb25zdCB0YXJnZXRQYWdlID0gTWF0aC5mbG9vcigodGhpcy5maWVsZHNbaW5kZXhdLmFycmF5Lmxlbmd0aCAtIDEpIC8gdGhpcy5maWVsZHNbaW5kZXhdPy5vcHRpb25zPy5wYWdlU2l6ZSk7XG4gICAgICAgIHRoaXMuZmllbGRzW2luZGV4XS5vcHRpb25zLmZpcnN0ID0gdGFyZ2V0UGFnZSAqIHRoaXMuZmllbGRzW2luZGV4XT8ub3B0aW9ucz8ucGFnZVNpemU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5maWVsZHNbaW5kZXhdPy5vcHRpb25zPy5vbkFkZEFycmF5SXRlbSkge1xuICAgICAgICAgIHRoaXMuZmllbGRzW2luZGV4XT8ub3B0aW9ucz8ub25BZGRBcnJheUl0ZW0odGhpcy5maWVsZCwgaXRlbSwgYXJyYXlGb3JtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2V0QXJyYXlDb250cm9sKGFycmF5TmFtZTogc3RyaW5nKXtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoXG4gICAgICAgICAgYXJyYXlOYW1lXG4gICAgICAgICkgYXMgRm9ybUFycmF5O1xuICAgIH1cbiAgICBnZXRBcnJheUluZGV4KGFycmF5TmFtZTogc3RyaW5nKXtcbiAgICAgIHJldHVybiB0aGlzLmZpZWxkcy5maW5kSW5kZXgoXG4gICAgICAgICAgKGY6IGFueSkgPT4gZj8ub3B0aW9ucz8uZm9ybUNvbnRyb2xOYW1lID09IGFycmF5TmFtZVxuICAgICAgICApO1xuICAgIH1cbiAgICBjcmVhdGVGb3JtR3JvdXAoZmllbGQ6IGFueSkge1xuICAgICAgY29uc3QgZ3JvdXBGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgICBmaWVsZC5ncm91cD8uZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICBncm91cEZvcm0uYWRkQ29udHJvbChcbiAgICAgICAgICBmaWVsZC5vcHRpb25zPy5mb3JtQ29udHJvbE5hbWUsXG4gICAgICAgICAgdGhpcy5jcmVhdGVDb250cm9sKGZpZWxkKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZ3JvdXBGb3JtO1xuICAgIH1cbiAgICBjcmVhdGVDb250cm9sKGZpZWxkOiBhbnkpIHtcbiAgICAgIGxldCB2YWxpZGF0b3JzID0gW107XG4gICAgICBjb25zdCBuZXdDb250cm9sID0gbmV3IEZvcm1Db250cm9sKHtcbiAgICAgICAgdmFsdWU6IGZpZWxkLm9wdGlvbnM/LnZhbHVlID8/IFwiXCIsXG4gICAgICAgIGRpc2FibGVkOiBmaWVsZC5vcHRpb25zPy5kaXNhYmxlZCAmJiB0cnVlLFxuICAgICAgfSk7XG4gICAgICAvLyBBZGQgdmFsaWRhdG9ycyB0byBjb250cm9sXG4gICAgICBpZiAoZmllbGQub3B0aW9ucz8udmFsaWRhdG9ycz8ucGF0dGVybikge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKGZpZWxkLm9wdGlvbnM/LnZhbGlkYXRvcnM/LnBhdHRlcm4pKTtcbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC5vcHRpb25zPy52YWxpZGF0b3JzPy5yZXF1aXJlZCkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQub3B0aW9ucz8udmFsaWRhdG9ycz8ubWF4TGVuZ3RoKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChcbiAgICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aChmaWVsZC5vcHRpb25zPy52YWxpZGF0b3JzPy5tYXhMZW5ndGgpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQub3B0aW9ucz8udmFsaWRhdG9ycz8ubWluTGVuZ3RoKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChcbiAgICAgICAgICBWYWxpZGF0b3JzLm1pbkxlbmd0aChmaWVsZC5vcHRpb25zPy52YWxpZGF0b3JzPy5taW5MZW5ndGgpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQub3B0aW9ucz8udmFsaWRhdG9ycz8ubWluKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbihmaWVsZC5vcHRpb25zPy52YWxpZGF0b3JzPy5taW4pKTtcbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC5vcHRpb25zPy52YWxpZGF0b3JzPy5tYXgpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4KGZpZWxkLm9wdGlvbnM/LnZhbGlkYXRvcnM/Lm1heCkpO1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLm9wdGlvbnM/LnZhbGlkYXRvcnM/LmVtYWlsKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLmVtYWlsKTtcbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC5vcHRpb25zPy52YWxpZGF0b3JzPy5udWxsVmFsaWRhdG9yKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm51bGxWYWxpZGF0b3IpO1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLm9wdGlvbnM/LnZhbGlkYXRvcnM/LnJlcXVpcmVkVHJ1ZSkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZFRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLm9wdGlvbnM/LnZhbGlkYXRvcnM/LmN1c3RvbVZhbGlkYXRvcnM/Lmxlbmd0aD4wKSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbSA6YW55W10gPSBmaWVsZC5vcHRpb25zLnZhbGlkYXRvcnMuY3VzdG9tVmFsaWRhdG9ycztcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKC4uLmN1c3RvbSk7XG4gICAgICB9XG4gICAgICAvLyBTZXQgdmFsaWRhdG9yc1xuICAgICAgbmV3Q29udHJvbC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuICAgICAgcmV0dXJuIG5ld0NvbnRyb2w7XG4gICAgfVxuICAgIHJlbW92ZUdyb3VwKGluZGV4OiBudW1iZXIpe1xuICAgICAgY29uc3QgYXJyYXlGb3JtID0gdGhpcy5nZXRBcnJheUNvbnRyb2wodGhpcy5maWVsZD8ub3B0aW9ucz8uZm9ybUNvbnRyb2xOYW1lKTtcbiAgICAgIGNvbnN0IGFycmF5SW5kZXggPSB0aGlzLmdldEFycmF5SW5kZXgodGhpcy5maWVsZD8ub3B0aW9ucz8uZm9ybUNvbnRyb2xOYW1lKTtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmZpZWxkc1thcnJheUluZGV4XS5hcnJheVtpbmRleF07XG4gICAgICB0aGlzLmZpZWxkc1thcnJheUluZGV4XS5hcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgYXJyYXlGb3JtLnJlbW92ZUF0KGluZGV4KTtcbiAgICAgIGlmICh0aGlzLmZpZWxkc1tpbmRleF0/Lm9wdGlvbnM/LnNob3dDbGllbnRQYWdpbmF0b3IpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0UGFnZSA9IE1hdGguZmxvb3IoKHRoaXMuZmllbGRzW2luZGV4XS5hcnJheS5sZW5ndGggLSAxKSAvIHRoaXMuZmllbGRzW2luZGV4XT8ub3B0aW9ucz8ucGFnZVNpemUpO1xuICAgICAgICBjb25zdCBsYXN0UGFnZSA9IHRhcmdldFBhZ2UgKiB0aGlzLmZpZWxkc1tpbmRleF0/Lm9wdGlvbnM/LnBhZ2VTaXplO1xuICAgICAgICBpZiAodGhpcy5maWVsZHNbaW5kZXhdLm9wdGlvbnMuZmlyc3QgPiBsYXN0UGFnZSkge1xuICAgICAgICAgICAgdGhpcy5maWVsZHNbaW5kZXhdLm9wdGlvbnMuZmlyc3QgPSBsYXN0UGFnZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZmllbGRzW2FycmF5SW5kZXhdPy5vcHRpb25zPy5vblJlbW92ZUFycmF5SXRlbSkge1xuICAgICAgICAgIHRoaXMuZmllbGRzW2FycmF5SW5kZXhdPy5vcHRpb25zPy5vblJlbW92ZUFycmF5SXRlbSh0aGlzLmZpZWxkLCBpdGVtLCBpbmRleCwgYXJyYXlGb3JtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2V0QXJyYXlUYWJsZUNvbHVtbnMoKXtcbiAgICAgICAgbGV0IGNvbHVtbnM6IHtmaWVsZDogc3RyaW5nLCBoZWFkZXI6IHN0cmluZ31bXSA9IHRoaXMuZmllbGQ/Lm9wdGlvbnM/LmFycmF5VGFibGVDb2x1bW5zID8/IFtdO1xuICAgICAgICBpZiAoY29sdW1ucy5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEZpZWxkID0gdGhpcy5maWVsZD8ub3B0aW9ucz8uZGVmYXVsdEFycmF5R3JvdXAgPz8gdGhpcy5maWVsZC5hcnJheVswXTtcbiAgICAgICAgICAgIGNvbHVtbnMgPSBkZWZhdWx0RmllbGQ/Lmdyb3VwPy5tYXAoKGZpZWxkOmFueSk9PntcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IGZpZWxkPy5vcHRpb25zPy5sYWJlbCA/PyBmaWVsZD8ub3B0aW9ucz8uZm9ybUNvbnRyb2xOYW1lO1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZD8ub3B0aW9ucz8ubGFiZWwgJiYgZmllbGQuY29udHJvbFR5cGUgIT0gXCJ0aXRsZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC5vcHRpb25zLmxhYmVsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogZmllbGQ/Lm9wdGlvbnM/LmZvcm1Db250cm9sTmFtZSA/PyBsYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiBsYWJlbCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbHVtbnM7XG4gICAgfVxuICAgIHVwZGF0ZUZpZWxkc1dpdGhQYXJlbnRzKGZvcm1GaWVsZHM6IEtpdHNuZ0Zvcm1GYWN0b3J5TW9kZWxbXSk6IEtpdHNuZ0Zvcm1GYWN0b3J5TW9kZWxbXSB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZUZpZWxkV2l0aFBhcmVudCA9IChmaWVsZDogS2l0c25nRm9ybUZhY3RvcnlNb2RlbCwgcGFyZW50OiBLaXRzbmdGb3JtRmFjdG9yeU1vZGVsIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkKSA9PiB7XG4gICAgICAgICAgZmllbGQucGFyZW50ID0gcGFyZW50O1xuXG4gICAgICAgICAgLy8gSWYgdGhlIGZpZWxkIGhhcyBuZXN0ZWQgZmllbGRzIGluIGEgZ3JvdXAsIHJlY3Vyc2l2ZWx5IHVwZGF0ZSBlYWNoIGNoaWxkIGZpZWxkXG4gICAgICAgICAgaWYgKGZpZWxkLmdyb3VwICYmIEFycmF5LmlzQXJyYXkoZmllbGQuZ3JvdXApKSB7XG4gICAgICAgICAgICBmaWVsZC5ncm91cC5mb3JFYWNoKChjaGlsZEZpZWxkKSA9PiB1cGRhdGVGaWVsZFdpdGhQYXJlbnQoY2hpbGRGaWVsZCwgZmllbGQpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBJZiB0aGUgZmllbGQgaGFzIG5lc3RlZCBmaWVsZHMgaW4gYW4gYXJyYXksIHJlY3Vyc2l2ZWx5IHVwZGF0ZSBlYWNoIGNoaWxkIGZpZWxkXG4gICAgICAgICAgaWYgKGZpZWxkLmFycmF5ICYmIEFycmF5LmlzQXJyYXkoZmllbGQuYXJyYXkpKSB7XG4gICAgICAgICAgICBmaWVsZC5hcnJheS5mb3JFYWNoKChjaGlsZEZpZWxkKSA9PiB1cGRhdGVGaWVsZFdpdGhQYXJlbnQoY2hpbGRGaWVsZCwgZmllbGQpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZm9ybUZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4gdXBkYXRlRmllbGRXaXRoUGFyZW50KGZpZWxkKSk7XG4gICAgICAgIHJldHVybiBmb3JtRmllbGRzO1xuICAgIH1cblxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbVRlbXBsYXRlOyBlbHNlIGRlZmF1bHRBcnJheVRlbXBsYXRlXCI+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjdXN0b21UZW1wbGF0ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAkaW1wbGljaXQ6IGZpZWxkLFxuICAgICAgICBmb3JtQ29udHJvbDogX2Zvcm1Db250cm9sLFxuICAgICAgICBvcHRpb25zOiBmaWVsZD8ub3B0aW9ucyxcbiAgICAgICAgZm9ybUdyb3VwOiBmb3JtR3JvdXAsXG4gICAgICAgIGRlZmF1bHRUZW1wbGF0ZTogZGVmYXVsdEFycmF5VGVtcGxhdGVcbiAgICAgIH1cIj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy1jb250YWluZXI+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRBcnJheVRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgIHt7ZmllbGQ/Lm9wdGlvbnM/LmNsYXNzID8/ICdtYi0yIHB4LTMgcHktMid9fVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZC1mbGV4IG1iLTIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIiAqbmdJZj1cImZpZWxkPy5vcHRpb25zPy5sYWJlbCB8fCBmaWVsZD8ub3B0aW9ucz8uc2hvd0FycmF5QWRkQnV0dG9uICE9IGZhbHNlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICA8aDUgICpuZ0lmPVwiZmllbGQ/Lm9wdGlvbnM/LmxhYmVsXCIgY2xhc3M9XCJcIj57eyBmaWVsZC5vcHRpb25zLmxhYmVsfCB0cmFuc2xhdGUgfX08L2g1PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIiAqbmdJZj1cImZpZWxkPy5vcHRpb25zPy5zaG93QXJyYXlBZGRCdXR0b24gIT0gZmFsc2VcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIFtpY29uXT1cImZpZWxkPy5vcHRpb25zPy5hZGRCdXR0b25JY29uID8/ICdwaSBwaS1wbHVzJ1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwie3tmaWVsZD8ub3B0aW9ucz8uYWRkQnV0dG9uQ2xhc3MgPz8gJyd9fVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ub3B0aW9ucz8uYWRkQnV0dG9uTGFiZWwgPz8gJ0FkZCdcIiAoY2xpY2spPVwiYWRkTmV3R3JvdXAoKVwiPjwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGQ/Lm9wdGlvbnM/LmFycmF5TGF5b3V0ID09ICd0YWJsZSc7ZWxzZSBkZWZhdWx0VGVtcGxhdGVcIj5cbiAgICAgICAgICA8cC10YWJsZSBbdmFsdWVdPVwiZmllbGQuYXJyYXk/P1tdXCJcbiAgICAgICAgICBbY29sdW1uc109XCJnZXRBcnJheVRhYmxlQ29sdW1ucygpXCJcbiAgICAgICAgICBbcm93c109XCJmaWVsZD8ub3B0aW9ucz8ucGFnZVNpemVcIlxuICAgICAgICAgIFtmaXJzdF09XCJmaWVsZD8ub3B0aW9ucz8uZmlyc3QgfHwgMFwiXG4gICAgICAgICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJmaWVsZD8ub3B0aW9ucz8ucm93c1BlclBhZ2VPcHRpb25zID8/IFs1LCAxMCwgMjUsIDUwLCAxMDBdXCJcbiAgICAgICAgICBbcGFnaW5hdG9yXT1cImZpZWxkPy5vcHRpb25zPy5zaG93Q2xpZW50UGFnaW5hdG9yID8/IGZhbHNlXCJcbiAgICAgICAgICBbdG90YWxSZWNvcmRzXT1cImZpZWxkPy5hcnJheT8ubGVuZ3RoXCJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwie3tmaWVsZD8ub3B0aW9ucz8uYXJyYXlUYWJsZUNsYXNzfX1cIlxuICAgICAgICAgICAgICBbdGFibGVTdHlsZV09XCJmaWVsZD8ub3B0aW9ucz8uYXJyYXlUYWJsZVN0eWxlID8/IHsnbWluLXdpZHRoJzogJzYwcmVtJ31cIiBkYXRhS2V5PVwib3B0aW9ucy5mb3JtQ29udHJvbE5hbWVcIiAgW2Zvcm1BcnJheU5hbWVdPVwiZmllbGQ/Lm9wdGlvbnM/LmZvcm1Db250cm9sTmFtZVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHVtbnM+XG4gICAgICAgICAgICAgICAgICA8dHIgW2NsYXNzXT1cImZpZWxkPy5vcHRpb25zPy50YWJsZUhlYWRlckNsYXNzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb2x1bW5zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ7e2l0ZW0/LmNlbGxDbGFzc319XCIgW25nU3R5bGVdPVwiaXRlbT8uY2VsbFN0eWxlPz8ge31cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyhpdGVtLmhlYWRlcnx8JycpfHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cImZpZWxkPy5vcHRpb25zPy5zaG93QXJyYXlSZW1vdmVCdXR0b24gIT0gZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3snQWN0aW9ucyd8dHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1pdGVtIGxldC1pPVwicm93SW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRyIFtmb3JtR3JvdXBdPVwiZ2V0Rm9ybUdyb3VwRnJvbUFycmF5KGZpZWxkPy5vcHRpb25zPy5mb3JtQ29udHJvbE5hbWUsaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIGl0ZW0uZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiIWVsZW1lbnQ/Lm9wdGlvbnM/LmlzSGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJlbGVtZW50Py5vcHRpb25zPy5pc1Zpc2libGUgIT0gZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8a2l0c25nLWZvcm0tZmFjdG9yeS1jb3JlIFtmaWVsZF09XCJlbGVtZW50XCI+PC9raXRzbmctZm9ybS1mYWN0b3J5LWNvcmU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCIoaSAhPSAwIHx8IGZpZWxkPy5vcHRpb25zPy5kZWZhdWx0QXJyYXlHcm91cCkgJiYgZmllbGQ/Lm9wdGlvbnM/LnNob3dBcnJheVJlbW92ZUJ1dHRvbiAhPSBmYWxzZSAmJiBpdGVtPy5vcHRpb25zPy5zaG93QXJyYXlSZW1vdmVCdXR0b24gIT0gZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJlbW92ZUJ1dHRvblRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaSwgZmlyc3Q6IGkgPT0gMCwgaXRlbTogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLXRhYmxlPlxuXG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWZsdWlkIHAtZm9ybWdyaWQgZ3JpZCByb3cgZ3JpZC1ub2d1dHRlciB7e2ZpZWxkPy5vcHRpb25zPy5jb250YWluZXJDbGFzc319XCIgW2Zvcm1BcnJheU5hbWVdPVwiZmllbGQ/Lm9wdGlvbnM/LmZvcm1Db250cm9sTmFtZVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdWJmaWVsZCBvZiBmaWVsZC5hcnJheTsgbGV0IGkgPSBpbmRleDsgbGV0IGZpcnN0ID0gZmlyc3RcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cInN1YmZpZWxkLmNvbFNpemVcIiAqbmdJZj1cInN1YmZpZWxkPy5vcHRpb25zPy5pc1Zpc2libGUgIT0gZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCB3LWZ1bGwgc2hhZG93LW5vbmUge3tzdWJmaWVsZD8ub3B0aW9ucz8uY2xhc3MgPz8gJ21iLTInfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSByZW1vdmUgYnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkPy5vcHRpb25zPy5yZW1vdmVCdXR0b25Qb3NpdGlvbiA9PSAndG9wJyB8fCAhZmllbGQ/Lm9wdGlvbnM/LnJlbW92ZUJ1dHRvblBvc2l0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJlbW92ZUJ1dHRvblRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaSwgZmlyc3Q6IGZpcnN0LCBpdGVtOiBzdWJmaWVsZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8aDUgICpuZ0lmPVwic3ViZmllbGQ/Lm9wdGlvbnM/LmxhYmVsXCIgY2xhc3M9XCJcIj57eyBzdWJmaWVsZC5vcHRpb25zLmxhYmVsIH19PC9oNT4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWZsdWlkIHAtZm9ybWdyaWQgZ3JpZCByb3cgZ3JpZC1ub2d1dHRlciB7e3N1YmZpZWxkPy5vcHRpb25zPy5jb250YWluZXJDbGFzc319XCIgIFtmb3JtR3JvdXBdPVwiZ2V0Rm9ybUdyb3VwRnJvbUFycmF5KGZpZWxkPy5vcHRpb25zPy5mb3JtQ29udHJvbE5hbWUsaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdWJmaWVsZC5ncm91cDsgZWxzZSBuZXN0ZWRDb250cm9sVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tICogRGVmaW5lIGNvbHVtbiBzaXplIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN1YlN1YmZpZWxkIG9mIHN1YmZpZWxkLmdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gKiBGaW5kIGFuZCB1c2UgdHlwZSBvZiBjb250cm9sIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCIncHktMiAnK3N1YlN1YmZpZWxkLmNvbFNpemVcIiAqbmdJZj1cInN1YlN1YmZpZWxkPy5vcHRpb25zPy5pc1Zpc2libGUgIT0gZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxraXRzbmctZm9ybS1mYWN0b3J5LWNvcmUgW2ZpZWxkXT1cInN1YlN1YmZpZWxkXCI+PC9raXRzbmctZm9ybS1mYWN0b3J5LWNvcmU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25lc3RlZENvbnRyb2xUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJzdWJmaWVsZC5jb2xTaXplXCIgKm5nSWY9XCJzdWJmaWVsZD8ub3B0aW9ucz8uaXNWaXNpYmxlICE9IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGtpdHNuZy1mb3JtLWZhY3RvcnktY29yZSBbZmllbGRdPVwic3ViZmllbGRcIj48L2tpdHNuZy1mb3JtLWZhY3RvcnktY29yZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHJlbW92ZSBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGQ/Lm9wdGlvbnM/LnJlbW92ZUJ1dHRvblBvc2l0aW9uID09ICdzaWRlJyAmJiAoIWZpcnN0IHx8IGZpZWxkPy5vcHRpb25zPy5kZWZhdWx0QXJyYXlHcm91cCkgJiYgZmllbGQ/Lm9wdGlvbnM/LnNob3dBcnJheVJlbW92ZUJ1dHRvbiAhPSBmYWxzZSAmJiBzdWJmaWVsZD8ub3B0aW9ucz8uc2hvd0FycmF5UmVtb3ZlQnV0dG9uICE9IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInt7ZmllbGQ/Lm9wdGlvbnM/LnJlbW92ZUJ1dHRvbkNvbFNpemUgPz8gJ2NvbC0xJ319XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZW1vdmVCdXR0b25UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGksIGZpcnN0OiBmaXJzdCwgaXRlbTogc3ViZmllbGQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHJlbW92ZSBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZD8ub3B0aW9ucz8ucmVtb3ZlQnV0dG9uUG9zaXRpb24gPT0gJ2JvdHRvbSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZW1vdmVCdXR0b25UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGksIGZpcnN0OiBmaXJzdCwgaXRlbTogc3ViZmllbGQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctdGVtcGxhdGUgI3JlbW92ZUJ1dHRvblRlbXBsYXRlIGxldC1pIGxldC1maXJzdD1cImZpcnN0XCIgbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiICpuZ0lmPVwiKCFmaXJzdCB8fCBmaWVsZD8ub3B0aW9ucz8uZGVmYXVsdEFycmF5R3JvdXApICYmIGZpZWxkPy5vcHRpb25zPy5zaG93QXJyYXlSZW1vdmVCdXR0b24gIT0gZmFsc2UgJiYgaXRlbT8ub3B0aW9ucz8uc2hvd0FycmF5UmVtb3ZlQnV0dG9uICE9IGZhbHNlXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIFtpY29uXT1cImZpZWxkPy5vcHRpb25zPy5yZW1vdmVCdXR0b25JY29uID8/ICdwaSBwaS10aW1lcydcIlxuICAgICAgICAgICAgICBjbGFzcz1cInt7ZmllbGQ/Lm9wdGlvbnM/LnJlbW92ZUJ1dHRvbkNsYXNzID8/ICdwLWJ1dHRvbi1vdXRsaW5lZCBwLWJ1dHRvbi1kYW5nZXInfX1cIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/Lm9wdGlvbnM/LnJlbW92ZUJ1dHRvbkxhYmVsID8/ICdSZW1vdmUnXCIgKGNsaWNrKT1cInJlbW92ZUdyb3VwKGkpXCI+PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Component, ContentChildren, input, output, ViewChild, ViewContainerRef, } from '@angular/core';
|
|
2
|
+
import { KitsngFormControlTemplateRegistryService } from '../../core/services/kitsng-form-control-template-registry.service';
|
|
3
|
+
import { KitsngFormControlTemplateDirective } from '../../core/directives/kitsng-form-control-template.directive';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../../core/services/kitsng-form-control-template-registry.service";
|
|
6
|
+
import * as i2 from "../../core/services/kitsng-form-factory.service";
|
|
7
|
+
export class KitsngFormFactoryElement {
|
|
8
|
+
set templateDirectives(directives) {
|
|
9
|
+
directives.forEach(d => {
|
|
10
|
+
this.templateRegistry.register(d.controlName, d.template);
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
constructor(templateRegistry, formFactoryService) {
|
|
14
|
+
this.templateRegistry = templateRegistry;
|
|
15
|
+
this.formFactoryService = formFactoryService;
|
|
16
|
+
/**
|
|
17
|
+
* Form field options
|
|
18
|
+
*/
|
|
19
|
+
this.field = input.required();
|
|
20
|
+
this.control = input.required();
|
|
21
|
+
this.modelChange = output();
|
|
22
|
+
}
|
|
23
|
+
ngOnInit() {
|
|
24
|
+
this.loadComponent();
|
|
25
|
+
}
|
|
26
|
+
loadComponent() {
|
|
27
|
+
if (this.field().dummyFields) {
|
|
28
|
+
/**
|
|
29
|
+
* If field is dummy fields (Fields that don`t have UI), then
|
|
30
|
+
* don`t load component
|
|
31
|
+
*/
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
this.dynamicHost.clear();
|
|
35
|
+
const componentRef = this.dynamicHost?.createComponent(this.componentTypeFactory(this.field()?.controlType));
|
|
36
|
+
componentRef.setInput("field", this.field());
|
|
37
|
+
componentRef.setInput("options", this.field()?.options);
|
|
38
|
+
if (this.control()) {
|
|
39
|
+
componentRef.setInput("_formControl", this.control());
|
|
40
|
+
}
|
|
41
|
+
if (componentRef?.instance?.modelChange) {
|
|
42
|
+
componentRef.instance.modelChange = this.modelChange;
|
|
43
|
+
}
|
|
44
|
+
// componentRef.instance.options = this.field.options;
|
|
45
|
+
}
|
|
46
|
+
componentTypeFactory(type) {
|
|
47
|
+
const field = this.formFactoryService.fields.find((field) => field.type === type);
|
|
48
|
+
return field?.component ?? this.componentTypeFactory("undefined");
|
|
49
|
+
}
|
|
50
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: KitsngFormFactoryElement, deps: [{ token: i1.KitsngFormControlTemplateRegistryService }, { token: i2.KitsngFormFactoryService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
51
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.8", type: KitsngFormFactoryElement, selector: "kitsng-form-element", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { modelChange: "modelChange" }, providers: [KitsngFormControlTemplateRegistryService], queries: [{ propertyName: "templateDirectives", predicate: KitsngFormControlTemplateDirective }], viewQueries: [{ propertyName: "dynamicHost", first: true, predicate: ["appDynamic"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: `<ng-template #appDynamic></ng-template>`, isInline: true }); }
|
|
52
|
+
}
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: KitsngFormFactoryElement, decorators: [{
|
|
54
|
+
type: Component,
|
|
55
|
+
args: [{
|
|
56
|
+
selector: 'kitsng-form-element',
|
|
57
|
+
template: `<ng-template #appDynamic></ng-template>`,
|
|
58
|
+
providers: [KitsngFormControlTemplateRegistryService]
|
|
59
|
+
}]
|
|
60
|
+
}], ctorParameters: () => [{ type: i1.KitsngFormControlTemplateRegistryService }, { type: i2.KitsngFormFactoryService }], propDecorators: { dynamicHost: [{
|
|
61
|
+
type: ViewChild,
|
|
62
|
+
args: ['appDynamic', { read: ViewContainerRef, static: true }]
|
|
63
|
+
}], templateDirectives: [{
|
|
64
|
+
type: ContentChildren,
|
|
65
|
+
args: [KitsngFormControlTemplateDirective]
|
|
66
|
+
}] } });
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2l0c25nLWZvcm0tZWxlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXRzbmctZm9ybS1mYWN0b3J5L3NyYy9saWIva2l0c25nLWZvcm0tZmFjdG9yeS9jb21wb25lbnRzL2tpdHNuZy1mb3JtLWVsZW1lbnQva2l0c25nLWZvcm0tZWxlbWVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsS0FBSyxFQUVMLE1BQU0sRUFHTixTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLG1FQUFtRSxDQUFDO0FBQzdILE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLDhEQUE4RCxDQUFDOzs7O0FBT2xILE1BQU0sT0FBTyx3QkFBd0I7SUFZbkMsSUFDSSxrQkFBa0IsQ0FBQyxVQUF5RDtRQUM5RSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBT0QsWUFDVSxnQkFBMEQsRUFDMUQsa0JBQTRDO1FBRDVDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBMEM7UUFDMUQsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUEwQjtRQVJ0RDs7V0FFRztRQUNILFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUEwQixDQUFDO1FBQ2pELFlBQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFvQixDQUFDO1FBQzdDLGdCQUFXLEdBQUcsTUFBTSxFQUFnSSxDQUFDO0lBRzVGLENBQUM7SUFFMUQsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM3Qjs7O2VBR0c7WUFDSCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQ3BELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsV0FBcUIsQ0FBQyxDQUMvRCxDQUFDO1FBQ0YsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDNUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDakIsWUFBWSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELElBQUksWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUN0QyxZQUFZLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3pELENBQUM7UUFDRCxzREFBc0Q7SUFDeEQsQ0FBQztJQUVPLG9CQUFvQixDQUFDLElBQVk7UUFDdkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQy9DLENBQUMsS0FBMkIsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLENBQ3JELENBQUM7UUFDRixPQUFPLEtBQUssRUFBRSxTQUFTLElBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7OEdBNURVLHdCQUF3QjtrR0FBeEIsd0JBQXdCLHVWQUZ0QixDQUFDLHdDQUF3QyxDQUFDLDZEQWN0QyxrQ0FBa0MsbUhBRmxCLGdCQUFnQiwyQ0FidkMseUNBQXlDOzsyRkFHeEMsd0JBQXdCO2tCQUxwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFFBQVEsRUFBRSx5Q0FBeUM7b0JBQ2pELFNBQVMsRUFBRSxDQUFDLHdDQUF3QyxDQUFDO2lCQUN4RDtvSkFZUyxXQUFXO3NCQURsQixTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUc3RCxrQkFBa0I7c0JBRHJCLGVBQWU7dUJBQUMsa0NBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS2l0c25nRmllbGRUeXBlTW9kZWwgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9raXRzbmctZmllbGQtdHlwZSc7XG5pbXBvcnQgeyBLaXRzbmdEeW5hbWljRmllbGQgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9raXRzbmctZHluYW1pYy1maWVsZCc7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgaW5wdXQsXG4gIE9uSW5pdCxcbiAgb3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFR5cGUsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBLaXRzbmdGb3JtRmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2tpdHNuZy1mb3JtLWZhY3Rvcnkuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBLaXRzbmdGb3JtRmFjdG9yeU1vZGVsIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMva2l0c25nLWZvcm0tZmFjdG9yeSc7XG5pbXBvcnQgeyBLaXRzbmdGb3JtQ29udHJvbFRlbXBsYXRlUmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9raXRzbmctZm9ybS1jb250cm9sLXRlbXBsYXRlLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgS2l0c25nRm9ybUNvbnRyb2xUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2NvcmUvZGlyZWN0aXZlcy9raXRzbmctZm9ybS1jb250cm9sLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tpdHNuZy1mb3JtLWVsZW1lbnQnLFxuICB0ZW1wbGF0ZTogYDxuZy10ZW1wbGF0ZSAjYXBwRHluYW1pYz48L25nLXRlbXBsYXRlPmAsXG4gICAgcHJvdmlkZXJzOiBbS2l0c25nRm9ybUNvbnRyb2xUZW1wbGF0ZVJlZ2lzdHJ5U2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgS2l0c25nRm9ybUZhY3RvcnlFbGVtZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGlzIGNvbXBvbmVudCBkeW5hbWljYWxseSBjcmVhdGVzIGEgZm9ybSBmaWVsZFxuICAgKiBkZXBlbmRpbmcgb24gdGhlIGZpZWxkIHR5cGUgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvblxuICAgKi9cblxuICAvKipcbiAgICogRm9ybSBmaWVsZCBjb250YWluZXJcbiAgICovXG4gIEBWaWV3Q2hpbGQoJ2FwcER5bmFtaWMnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICBwcml2YXRlIGR5bmFtaWNIb3N0ITogVmlld0NvbnRhaW5lclJlZjtcbiAgQENvbnRlbnRDaGlsZHJlbihLaXRzbmdGb3JtQ29udHJvbFRlbXBsYXRlRGlyZWN0aXZlKVxuICBzZXQgdGVtcGxhdGVEaXJlY3RpdmVzKGRpcmVjdGl2ZXM6IFF1ZXJ5TGlzdDxLaXRzbmdGb3JtQ29udHJvbFRlbXBsYXRlRGlyZWN0aXZlPikge1xuICAgIGRpcmVjdGl2ZXMuZm9yRWFjaChkID0+IHtcbiAgICAgIHRoaXMudGVtcGxhdGVSZWdpc3RyeS5yZWdpc3RlcihkLmNvbnRyb2xOYW1lLCBkLnRlbXBsYXRlKTtcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogRm9ybSBmaWVsZCBvcHRpb25zXG4gICAqL1xuICBmaWVsZCA9IGlucHV0LnJlcXVpcmVkPEtpdHNuZ0Zvcm1GYWN0b3J5TW9kZWw+KCk7XG4gIGNvbnRyb2wgPSBpbnB1dC5yZXF1aXJlZDxGb3JtQ29udHJvbDxhbnk+PigpO1xuICBtb2RlbENoYW5nZSA9IG91dHB1dDx7ZXZlbnQ6IGFueSwgcGFyZW50Rm9ybUdyb3VwPzogRm9ybUdyb3VwPGFueT4gfCBGb3JtQXJyYXk8YW55PiB8IG51bGwsIHNlbGVjdGVkT3B0aW9uPzogYW55LCBmaWVsZD86IEtpdHNuZ0Zvcm1GYWN0b3J5TW9kZWx9PigpO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRlbXBsYXRlUmVnaXN0cnk6IEtpdHNuZ0Zvcm1Db250cm9sVGVtcGxhdGVSZWdpc3RyeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtRmFjdG9yeVNlcnZpY2U6IEtpdHNuZ0Zvcm1GYWN0b3J5U2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRDb21wb25lbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZENvbXBvbmVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5maWVsZCgpLmR1bW15RmllbGRzKSB7XG4gICAgICAvKipcbiAgICAgICAqIElmIGZpZWxkIGlzIGR1bW15IGZpZWxkcyAoRmllbGRzIHRoYXQgZG9uYHQgaGF2ZSBVSSksIHRoZW5cbiAgICAgICAqIGRvbmB0IGxvYWQgY29tcG9uZW50XG4gICAgICAgKi9cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5keW5hbWljSG9zdC5jbGVhcigpO1xuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuZHluYW1pY0hvc3Q/LmNyZWF0ZUNvbXBvbmVudDxhbnk+KFxuICAgICAgdGhpcy5jb21wb25lbnRUeXBlRmFjdG9yeSh0aGlzLmZpZWxkKCk/LmNvbnRyb2xUeXBlIGFzIHN0cmluZylcbiAgICApO1xuICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dChcImZpZWxkXCIsdGhpcy5maWVsZCgpKTtcbiAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoXCJvcHRpb25zXCIsdGhpcy5maWVsZCgpPy5vcHRpb25zKTtcbiAgICBpZiAodGhpcy5jb250cm9sKCkpIHtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KFwiX2Zvcm1Db250cm9sXCIsdGhpcy5jb250cm9sKCkpO1xuICAgIH1cbiAgICBpZiAoY29tcG9uZW50UmVmPy5pbnN0YW5jZT8ubW9kZWxDaGFuZ2UpIHtcbiAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLm1vZGVsQ2hhbmdlID0gdGhpcy5tb2RlbENoYW5nZTtcbiAgICB9XG4gICAgLy8gY29tcG9uZW50UmVmLmluc3RhbmNlLm9wdGlvbnMgPSB0aGlzLmZpZWxkLm9wdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGNvbXBvbmVudFR5cGVGYWN0b3J5KHR5cGU6IHN0cmluZyk6IFR5cGU8S2l0c25nRHluYW1pY0ZpZWxkPiB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmZvcm1GYWN0b3J5U2VydmljZS5maWVsZHMuZmluZChcbiAgICAgIChmaWVsZDogS2l0c25nRmllbGRUeXBlTW9kZWwpID0+IGZpZWxkLnR5cGUgPT09IHR5cGVcbiAgICApO1xuICAgIHJldHVybiBmaWVsZD8uY29tcG9uZW50Pz90aGlzLmNvbXBvbmVudFR5cGVGYWN0b3J5KFwidW5kZWZpbmVkXCIpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { Component, ContentChildren, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { KitsngFormControlTemplateRegistryService } from '../../core/services/kitsng-form-control-template-registry.service';
|
|
3
|
+
import { KitsngFormControlTemplateDirective } from '../../core/directives/kitsng-form-control-template.directive';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../../core/services/kitsng-form-control-template-registry.service";
|
|
6
|
+
import * as i2 from "@angular/common";
|
|
7
|
+
import * as i3 from "@angular/forms";
|
|
8
|
+
import * as i4 from "../kitsng-form-factory-core/kitsng-form-factory-core.component";
|
|
9
|
+
import * as i5 from "../kitsng-form-array/kitsng-form-array.component";
|
|
10
|
+
import * as i6 from "../kitsng-form-group/kitsng-form-group.component";
|
|
11
|
+
export class KitsngFormFactoryComponent {
|
|
12
|
+
set templateDirectives(directives) {
|
|
13
|
+
directives.forEach(d => {
|
|
14
|
+
this.templateRegistry.register(d.controlName, d.template);
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
constructor(templateRegistry) {
|
|
18
|
+
this.templateRegistry = templateRegistry;
|
|
19
|
+
this.submit = new EventEmitter();
|
|
20
|
+
}
|
|
21
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: KitsngFormFactoryComponent, deps: [{ token: i1.KitsngFormControlTemplateRegistryService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
22
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: KitsngFormFactoryComponent, selector: "kitsng-form-factory", inputs: { form: "form", fields: "fields", styleClass: "styleClass" }, outputs: { submit: "submit" }, providers: [KitsngFormControlTemplateRegistryService], queries: [{ propertyName: "templateDirectives", predicate: KitsngFormControlTemplateDirective }], viewQueries: [{ propertyName: "formRef", first: true, predicate: ["formRef"], descendants: true }], ngImport: i0, template: ` <!-- * MAIN FORM -->
|
|
23
|
+
<form class="grid row grid-gutter-2" [ngClass]="styleClass" [formGroup]="form" #formRef="ngForm" (ngSubmit)="submit.next()">
|
|
24
|
+
<ng-container *ngFor="let field of fields">
|
|
25
|
+
<!-- * IF - group of fields -->
|
|
26
|
+
<ng-container *ngIf="field.group; else elseTemplate">
|
|
27
|
+
<!-- * Define column size -->
|
|
28
|
+
<div [class]="field.colSize" *ngIf="field?.options?.isVisible != false">
|
|
29
|
+
<kitsng-form-group [field]="field"></kitsng-form-group>
|
|
30
|
+
</div>
|
|
31
|
+
</ng-container>
|
|
32
|
+
<!-- * IF - single field -->
|
|
33
|
+
<ng-template #elseTemplate>
|
|
34
|
+
<!-- * Define column size -->
|
|
35
|
+
<ng-container *ngIf="field.array;else formControlTemplate">
|
|
36
|
+
<div [class]="field.colSize" *ngIf="field?.options?.isVisible != false">
|
|
37
|
+
<kitsng-form-array [field]="field" [fields]="fields"></kitsng-form-array>
|
|
38
|
+
</div>
|
|
39
|
+
</ng-container>
|
|
40
|
+
<ng-template #formControlTemplate>
|
|
41
|
+
<div [class]="field.colSize" *ngIf="field?.options?.isVisible != false">
|
|
42
|
+
<kitsng-form-factory-core [field]="field"></kitsng-form-factory-core>
|
|
43
|
+
</div>
|
|
44
|
+
</ng-template>
|
|
45
|
+
</ng-template>
|
|
46
|
+
</ng-container>
|
|
47
|
+
<ng-content></ng-content>
|
|
48
|
+
</form>`, isInline: true, styles: ["::ng-deep app-form-builder{width:100%}::ng-deep .required:after{content:\"*\";color:#bf524d;font-size:1.2rem;display:inline;line-height:1;margin:0 2px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.KitsngFormFactoryCoreComponent, selector: "kitsng-form-factory-core", inputs: ["field"] }, { kind: "component", type: i5.KitsngFormArrayComponent, selector: "kitsng-form-array", inputs: ["field", "fields"] }, { kind: "component", type: i6.KitsngFormGroupComponent, selector: "kitsng-form-group", inputs: ["field"] }] }); }
|
|
49
|
+
}
|
|
50
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: KitsngFormFactoryComponent, decorators: [{
|
|
51
|
+
type: Component,
|
|
52
|
+
args: [{ selector: 'kitsng-form-factory', template: ` <!-- * MAIN FORM -->
|
|
53
|
+
<form class="grid row grid-gutter-2" [ngClass]="styleClass" [formGroup]="form" #formRef="ngForm" (ngSubmit)="submit.next()">
|
|
54
|
+
<ng-container *ngFor="let field of fields">
|
|
55
|
+
<!-- * IF - group of fields -->
|
|
56
|
+
<ng-container *ngIf="field.group; else elseTemplate">
|
|
57
|
+
<!-- * Define column size -->
|
|
58
|
+
<div [class]="field.colSize" *ngIf="field?.options?.isVisible != false">
|
|
59
|
+
<kitsng-form-group [field]="field"></kitsng-form-group>
|
|
60
|
+
</div>
|
|
61
|
+
</ng-container>
|
|
62
|
+
<!-- * IF - single field -->
|
|
63
|
+
<ng-template #elseTemplate>
|
|
64
|
+
<!-- * Define column size -->
|
|
65
|
+
<ng-container *ngIf="field.array;else formControlTemplate">
|
|
66
|
+
<div [class]="field.colSize" *ngIf="field?.options?.isVisible != false">
|
|
67
|
+
<kitsng-form-array [field]="field" [fields]="fields"></kitsng-form-array>
|
|
68
|
+
</div>
|
|
69
|
+
</ng-container>
|
|
70
|
+
<ng-template #formControlTemplate>
|
|
71
|
+
<div [class]="field.colSize" *ngIf="field?.options?.isVisible != false">
|
|
72
|
+
<kitsng-form-factory-core [field]="field"></kitsng-form-factory-core>
|
|
73
|
+
</div>
|
|
74
|
+
</ng-template>
|
|
75
|
+
</ng-template>
|
|
76
|
+
</ng-container>
|
|
77
|
+
<ng-content></ng-content>
|
|
78
|
+
</form>`, providers: [KitsngFormControlTemplateRegistryService], styles: ["::ng-deep app-form-builder{width:100%}::ng-deep .required:after{content:\"*\";color:#bf524d;font-size:1.2rem;display:inline;line-height:1;margin:0 2px}\n"] }]
|
|
79
|
+
}], ctorParameters: () => [{ type: i1.KitsngFormControlTemplateRegistryService }], propDecorators: { form: [{
|
|
80
|
+
type: Input
|
|
81
|
+
}], fields: [{
|
|
82
|
+
type: Input
|
|
83
|
+
}], styleClass: [{
|
|
84
|
+
type: Input
|
|
85
|
+
}], submit: [{
|
|
86
|
+
type: Output
|
|
87
|
+
}], formRef: [{
|
|
88
|
+
type: ViewChild,
|
|
89
|
+
args: ['formRef', { static: false }]
|
|
90
|
+
}], templateDirectives: [{
|
|
91
|
+
type: ContentChildren,
|
|
92
|
+
args: [KitsngFormControlTemplateDirective]
|
|
93
|
+
}] } });
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2l0c25nLWZvcm0tZmFjdG9yeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXRzbmctZm9ybS1mYWN0b3J5L3NyYy9saWIva2l0c25nLWZvcm0tZmFjdG9yeS9jb21wb25lbnRzL2tpdHNuZy1mb3JtLWZhY3Rvcnkva2l0c25nLWZvcm0tZmFjdG9yeS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWEsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRILE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLG1FQUFtRSxDQUFDO0FBQzdILE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLDhEQUE4RCxDQUFDOzs7Ozs7OztBQWlEbEgsTUFBTSxPQUFPLDBCQUEwQjtJQXFCckMsSUFDSSxrQkFBa0IsQ0FBQyxVQUF5RDtRQUM5RSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsWUFDVSxnQkFBMEQ7UUFBMUQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUEwQztRQVQxRCxXQUFNLEdBQXVCLElBQUksWUFBWSxFQUFFLENBQUM7SUFZMUQsQ0FBQzs4R0EvQlUsMEJBQTBCO2tHQUExQiwwQkFBMEIsbUpBRjFCLENBQUMsd0NBQXdDLENBQUMsNkRBdUJwQyxrQ0FBa0MsaUlBbEV6Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7WUEwQkE7OzJGQW1CQywwQkFBMEI7a0JBL0N0QyxTQUFTOytCQUNFLHFCQUFxQixZQUNyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7WUEwQkEsYUFpQkMsQ0FBQyx3Q0FBd0MsQ0FBQzs2R0FrQjVDLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ2tDLE9BQU87c0JBQS9DLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFFbkMsa0JBQWtCO3NCQURyQixlQUFlO3VCQUFDLGtDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgTmdGb3JtLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgS2l0c25nRm9ybUNvbnRyb2xUZW1wbGF0ZVJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMva2l0c25nLWZvcm0tY29udHJvbC10ZW1wbGF0ZS1yZWdpc3RyeS5zZXJ2aWNlJztcbmltcG9ydCB7IEtpdHNuZ0Zvcm1Db250cm9sVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9jb3JlL2RpcmVjdGl2ZXMva2l0c25nLWZvcm0tY29udHJvbC10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdraXRzbmctZm9ybS1mYWN0b3J5JyxcbiAgdGVtcGxhdGU6IGAgPCEtLSAqIE1BSU4gRk9STSAtLT5cbiAgICA8Zm9ybSBjbGFzcz1cImdyaWQgcm93IGdyaWQtZ3V0dGVyLTJcIiBbbmdDbGFzc109XCJzdHlsZUNsYXNzXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgI2Zvcm1SZWY9XCJuZ0Zvcm1cIiAobmdTdWJtaXQpPVwic3VibWl0Lm5leHQoKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmllbGRzXCI+XG4gICAgICAgIDwhLS0gKiBJRiAtIGdyb3VwIG9mIGZpZWxkcyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLmdyb3VwOyBlbHNlIGVsc2VUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPCEtLSAqIERlZmluZSBjb2x1bW4gc2l6ZSAtLT5cbiAgICAgICAgICA8ZGl2IFtjbGFzc109XCJmaWVsZC5jb2xTaXplXCIgKm5nSWY9XCJmaWVsZD8ub3B0aW9ucz8uaXNWaXNpYmxlICE9IGZhbHNlXCI+XG4gICAgICAgICAgICA8a2l0c25nLWZvcm0tZ3JvdXAgW2ZpZWxkXT1cImZpZWxkXCI+PC9raXRzbmctZm9ybS1ncm91cD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gKiBJRiAtIHNpbmdsZSBmaWVsZCAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNlbHNlVGVtcGxhdGU+XG4gICAgICAgICAgPCEtLSAqIERlZmluZSBjb2x1bW4gc2l6ZSAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZC5hcnJheTtlbHNlIGZvcm1Db250cm9sVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJmaWVsZC5jb2xTaXplXCIgKm5nSWY9XCJmaWVsZD8ub3B0aW9ucz8uaXNWaXNpYmxlICE9IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxraXRzbmctZm9ybS1hcnJheSBbZmllbGRdPVwiZmllbGRcIiBbZmllbGRzXT1cImZpZWxkc1wiPjwva2l0c25nLWZvcm0tYXJyYXk+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZm9ybUNvbnRyb2xUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJmaWVsZC5jb2xTaXplXCIgKm5nSWY9XCJmaWVsZD8ub3B0aW9ucz8uaXNWaXNpYmxlICE9IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICA8a2l0c25nLWZvcm0tZmFjdG9yeS1jb3JlIFtmaWVsZF09XCJmaWVsZFwiPjwva2l0c25nLWZvcm0tZmFjdG9yeS1jb3JlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZm9ybT5gLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6Om5nLWRlZXAgYXBwLWZvcm0tYnVpbGRlciB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICA6Om5nLWRlZXAgLnJlcXVpcmVkOmFmdGVyIHtcbiAgICAgICAgY29udGVudDogXCIqXCI7XG4gICAgICAgIGNvbG9yOiAjQkY1MjREO1xuICAgICAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgICAgICAgZGlzcGxheTogaW5saW5lO1xuICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgfVxuICAgIGAsXG4gIF0sXG4gIHByb3ZpZGVyczogW0tpdHNuZ0Zvcm1Db250cm9sVGVtcGxhdGVSZWdpc3RyeVNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEtpdHNuZ0Zvcm1GYWN0b3J5Q29tcG9uZW50IHtcbiAgLyoqXG4gICAqIEBkZWNyaXB0aW9uXG4gICAqIEZvcm0gZmFjdG9yeSBpcyBhIGNvbXBvbmVudCB0aGF0IHdvcmtzIGJ5IHBhc3NpbmcgaXQgdGhlIEpTT04gY29uZmlndXJhdGlvblxuICAgKiBmb3IgdGhlIGZvcm1hbmQgaXQgaXRzZWxmIGNyZWF0ZXMgdGhlIGVudGlyZSBsYXlvdXQgb2YgdGhlIGZvcm0gYW5kIGFsbCB0aGUgZmllbGRzLlxuICAgKiBNb3JlIGFib3V0IGZvcm0gZmFjdG9yeSBzeXN0ZW0geW91IGNhbiBmaW5kIGhlcmU6XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJ0aW5zdGVmYW5vdmljL2FuZ3VsYXItZHluYW1pYy1mb3Jtc1xuICAgKi9cblxuICAvKipcbiAgICogSW5wdXRzXG4gICAqXG4gICAqIEBmb3JtIFRoaXMgaXMgbWFpbiBGb3JtR3JvdXBcbiAgICogQGZpZWxkcyBBbGwgZm9ybSBmaWVsZHNcbiAgICogQHN0eWxlQ2xhc3MgQ1NTIGNsYXNzZXMgZm9yIG1haW4gZ3JpZCByb3cgY29udGFpbmVyXG4gICAqL1xuICBASW5wdXQoKSBmb3JtITogRm9ybUdyb3VwO1xuICBASW5wdXQoKSBmaWVsZHM6IGFueTtcbiAgQElucHV0KCkgc3R5bGVDbGFzcyE6IHN0cmluZztcbiAgQE91dHB1dCgpIHN1Ym1pdDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAVmlld0NoaWxkKCdmb3JtUmVmJywgeyBzdGF0aWM6IGZhbHNlIH0pIGZvcm1SZWYhOiBOZ0Zvcm07XG4gIEBDb250ZW50Q2hpbGRyZW4oS2l0c25nRm9ybUNvbnRyb2xUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgc2V0IHRlbXBsYXRlRGlyZWN0aXZlcyhkaXJlY3RpdmVzOiBRdWVyeUxpc3Q8S2l0c25nRm9ybUNvbnRyb2xUZW1wbGF0ZURpcmVjdGl2ZT4pIHtcbiAgICBkaXJlY3RpdmVzLmZvckVhY2goZCA9PiB7XG4gICAgICB0aGlzLnRlbXBsYXRlUmVnaXN0cnkucmVnaXN0ZXIoZC5jb250cm9sTmFtZSwgZC50ZW1wbGF0ZSk7XG4gICAgfSk7XG4gIH1cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0ZW1wbGF0ZVJlZ2lzdHJ5OiBLaXRzbmdGb3JtQ29udHJvbFRlbXBsYXRlUmVnaXN0cnlTZXJ2aWNlXG4gICkge1xuXG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Component, Input, ViewChild, ViewContainerRef, } from '@angular/core';
|
|
2
|
+
import { ControlContainer, FormGroupDirective } from '@angular/forms';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../core/services/kitsng-form-factory.service";
|
|
5
|
+
import * as i2 from "@angular/forms";
|
|
6
|
+
export class KitsngFormFactoryCoreComponent {
|
|
7
|
+
constructor(formFactoryService, controlContainer) {
|
|
8
|
+
this.formFactoryService = formFactoryService;
|
|
9
|
+
this.controlContainer = controlContainer;
|
|
10
|
+
}
|
|
11
|
+
ngOnInit() {
|
|
12
|
+
if (this.field?.options?.formControlName) {
|
|
13
|
+
this.formGroup = this.controlContainer.control;
|
|
14
|
+
this._formControl = this.formGroup.controls[this.field.options.formControlName];
|
|
15
|
+
}
|
|
16
|
+
this.loadComponent();
|
|
17
|
+
}
|
|
18
|
+
loadComponent() {
|
|
19
|
+
if (this.field.dummyFields) {
|
|
20
|
+
/**
|
|
21
|
+
* If field is dummy fields (Fields that don`t have UI), then
|
|
22
|
+
* don`t load component
|
|
23
|
+
*/
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
this.dynamicHost.clear();
|
|
27
|
+
const componentRef = this.dynamicHost?.createComponent(this.componentTypeFactory(this.field.controlType));
|
|
28
|
+
componentRef.setInput("field", this.field);
|
|
29
|
+
componentRef.setInput("options", this.field.options);
|
|
30
|
+
if (this._formControl) {
|
|
31
|
+
componentRef.setInput("_formControl", this._formControl);
|
|
32
|
+
}
|
|
33
|
+
// componentRef.instance.options = this.field.options;
|
|
34
|
+
}
|
|
35
|
+
componentTypeFactory(type) {
|
|
36
|
+
const field = this.formFactoryService.fields.find((field) => field.type === type);
|
|
37
|
+
return field?.component ?? this.componentTypeFactory("undefined");
|
|
38
|
+
}
|
|
39
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: KitsngFormFactoryCoreComponent, deps: [{ token: i1.KitsngFormFactoryService }, { token: i2.ControlContainer }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
40
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: KitsngFormFactoryCoreComponent, selector: "kitsng-form-factory-core", inputs: { field: "field" }, viewQueries: [{ propertyName: "dynamicHost", first: true, predicate: ["appDynamic"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: `<ng-template #appDynamic></ng-template>`, isInline: true, viewProviders: [
|
|
41
|
+
{
|
|
42
|
+
provide: ControlContainer,
|
|
43
|
+
useExisting: FormGroupDirective,
|
|
44
|
+
},
|
|
45
|
+
] }); }
|
|
46
|
+
}
|
|
47
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: KitsngFormFactoryCoreComponent, decorators: [{
|
|
48
|
+
type: Component,
|
|
49
|
+
args: [{
|
|
50
|
+
selector: 'kitsng-form-factory-core',
|
|
51
|
+
template: `<ng-template #appDynamic></ng-template>`,
|
|
52
|
+
viewProviders: [
|
|
53
|
+
{
|
|
54
|
+
provide: ControlContainer,
|
|
55
|
+
useExisting: FormGroupDirective,
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
}]
|
|
59
|
+
}], ctorParameters: () => [{ type: i1.KitsngFormFactoryService }, { type: i2.ControlContainer }], propDecorators: { dynamicHost: [{
|
|
60
|
+
type: ViewChild,
|
|
61
|
+
args: ['appDynamic', { read: ViewContainerRef, static: true }]
|
|
62
|
+
}], field: [{
|
|
63
|
+
type: Input
|
|
64
|
+
}] } });
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2l0c25nLWZvcm0tZmFjdG9yeS1jb3JlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdHNuZy1mb3JtLWZhY3Rvcnkvc3JjL2xpYi9raXRzbmctZm9ybS1mYWN0b3J5L2NvbXBvbmVudHMva2l0c25nLWZvcm0tZmFjdG9yeS1jb3JlL2tpdHNuZy1mb3JtLWZhY3RvcnktY29yZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBR0wsU0FBUyxFQUNULGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQW1CLGdCQUFnQixFQUFhLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFZbEcsTUFBTSxPQUFPLDhCQUE4QjtJQWtCekMsWUFBb0Isa0JBQTRDLEVBQVMsZ0JBQWtDO1FBQXZGLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBMEI7UUFBUyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO0lBQUcsQ0FBQztJQUUvRyxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFvQixDQUFDO1lBQzVELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDcEYsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0I7OztlQUdHO1lBQ0gsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUNwRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FDbEQsQ0FBQztRQUNGLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLFlBQVksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0Qsc0RBQXNEO0lBQ3hELENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxJQUFZO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUMvQyxDQUFDLEtBQTJCLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUNyRCxDQUFDO1FBQ0YsT0FBTyxLQUFLLEVBQUUsU0FBUyxJQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRSxDQUFDOzhHQXJEVSw4QkFBOEI7a0dBQTlCLDhCQUE4QixrTEFVUixnQkFBZ0IsMkNBbEJ2Qyx5Q0FBeUMsaUNBQ3BDO1lBQ2I7Z0JBQ0UsT0FBTyxFQUFFLGdCQUFnQjtnQkFDekIsV0FBVyxFQUFFLGtCQUFrQjthQUNoQztTQUNGOzsyRkFFVSw4QkFBOEI7a0JBVjFDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDBCQUEwQjtvQkFDcEMsUUFBUSxFQUFFLHlDQUF5QztvQkFDbkQsYUFBYSxFQUFFO3dCQUNiOzRCQUNFLE9BQU8sRUFBRSxnQkFBZ0I7NEJBQ3pCLFdBQVcsRUFBRSxrQkFBa0I7eUJBQ2hDO3FCQUNGO2lCQUNGOzRIQVlTLFdBQVc7c0JBRGxCLFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBS3hELEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEtpdHNuZ0ZpZWxkVHlwZU1vZGVsIH0gZnJvbSAnLi8uLi8uLi9jb3JlL21vZGVscy9raXRzbmctZmllbGQtdHlwZSc7XG5pbXBvcnQgeyBLaXRzbmdEeW5hbWljRmllbGQgfSBmcm9tICcuLy4uLy4uL2NvcmUvbW9kZWxzL2tpdHNuZy1keW5hbWljLWZpZWxkJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVHlwZSxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEtpdHNuZ0Zvcm1GYWN0b3J5U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMva2l0c25nLWZvcm0tZmFjdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQ29udHJvbENvbnRhaW5lciwgRm9ybUdyb3VwLCBGb3JtR3JvdXBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tpdHNuZy1mb3JtLWZhY3RvcnktY29yZScsXG4gIHRlbXBsYXRlOiBgPG5nLXRlbXBsYXRlICNhcHBEeW5hbWljPjwvbmctdGVtcGxhdGU+YCxcbiAgdmlld1Byb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsXG4gICAgICB1c2VFeGlzdGluZzogRm9ybUdyb3VwRGlyZWN0aXZlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEtpdHNuZ0Zvcm1GYWN0b3J5Q29yZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhpcyBjb21wb25lbnQgZHluYW1pY2FsbHkgY3JlYXRlcyBhIGZvcm0gZmllbGRcbiAgICogZGVwZW5kaW5nIG9uIHRoZSBmaWVsZCB0eXBlIGRlZmluZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb25cbiAgICovXG5cbiAgLyoqXG4gICAqIEZvcm0gZmllbGQgY29udGFpbmVyXG4gICAqL1xuICBAVmlld0NoaWxkKCdhcHBEeW5hbWljJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSBkeW5hbWljSG9zdCE6IFZpZXdDb250YWluZXJSZWY7XG4gIC8qKlxuICAgKiBGb3JtIGZpZWxkIG9wdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpIGZpZWxkITogYW55O1xuICBfZm9ybUNvbnRyb2whOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+O1xuICBmb3JtR3JvdXAhOiBGb3JtR3JvdXA7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUZhY3RvcnlTZXJ2aWNlOiBLaXRzbmdGb3JtRmFjdG9yeVNlcnZpY2UsIHB1YmxpYyBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZpZWxkPy5vcHRpb25zPy5mb3JtQ29udHJvbE5hbWUpIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmNvbnRyb2xDb250YWluZXIuY29udHJvbCBhcyBGb3JtR3JvdXA7XG4gICAgICAgIHRoaXMuX2Zvcm1Db250cm9sID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5vcHRpb25zLmZvcm1Db250cm9sTmFtZV07XG4gICAgfVxuICAgIHRoaXMubG9hZENvbXBvbmVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQ29tcG9uZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZpZWxkLmR1bW15RmllbGRzKSB7XG4gICAgICAvKipcbiAgICAgICAqIElmIGZpZWxkIGlzIGR1bW15IGZpZWxkcyAoRmllbGRzIHRoYXQgZG9uYHQgaGF2ZSBVSSksIHRoZW5cbiAgICAgICAqIGRvbmB0IGxvYWQgY29tcG9uZW50XG4gICAgICAgKi9cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5keW5hbWljSG9zdC5jbGVhcigpO1xuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuZHluYW1pY0hvc3Q/LmNyZWF0ZUNvbXBvbmVudDxhbnk+KFxuICAgICAgdGhpcy5jb21wb25lbnRUeXBlRmFjdG9yeSh0aGlzLmZpZWxkLmNvbnRyb2xUeXBlKVxuICAgICk7XG4gICAgY29tcG9uZW50UmVmLnNldElucHV0KFwiZmllbGRcIix0aGlzLmZpZWxkKTtcbiAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoXCJvcHRpb25zXCIsdGhpcy5maWVsZC5vcHRpb25zKTtcbiAgICBpZiAodGhpcy5fZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KFwiX2Zvcm1Db250cm9sXCIsdGhpcy5fZm9ybUNvbnRyb2wpO1xuICAgIH1cbiAgICAvLyBjb21wb25lbnRSZWYuaW5zdGFuY2Uub3B0aW9ucyA9IHRoaXMuZmllbGQub3B0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgY29tcG9uZW50VHlwZUZhY3RvcnkodHlwZTogc3RyaW5nKTogVHlwZTxLaXRzbmdEeW5hbWljRmllbGQ+IHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuZm9ybUZhY3RvcnlTZXJ2aWNlLmZpZWxkcy5maW5kKFxuICAgICAgKGZpZWxkOiBLaXRzbmdGaWVsZFR5cGVNb2RlbCkgPT4gZmllbGQudHlwZSA9PT0gdHlwZVxuICAgICk7XG4gICAgcmV0dXJuIGZpZWxkPy5jb21wb25lbnQ/P3RoaXMuY29tcG9uZW50VHlwZUZhY3RvcnkoXCJ1bmRlZmluZWRcIik7XG4gIH1cbn1cbiJdfQ==
|