mis-crystal-design-system 3.1.9 → 3.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/mis-crystal-design-system-dropdown.umd.js +17 -7
- package/bundles/mis-crystal-design-system-dropdown.umd.js.map +1 -1
- package/bundles/mis-crystal-design-system-dropdown.umd.min.js +2 -2
- package/bundles/mis-crystal-design-system-dropdown.umd.min.js.map +1 -1
- package/bundles/mis-crystal-design-system-dynamic-form.umd.js +51 -32
- package/bundles/mis-crystal-design-system-dynamic-form.umd.js.map +1 -1
- package/bundles/mis-crystal-design-system-dynamic-form.umd.min.js +2 -2
- package/bundles/mis-crystal-design-system-dynamic-form.umd.min.js.map +1 -1
- package/dropdown/dropdown.component.d.ts +5 -0
- package/dropdown/mis-crystal-design-system-dropdown.metadata.json +1 -1
- package/dynamic-form/dynamic-form.component.d.ts +10 -8
- package/dynamic-form/dynamic-form.namespace.d.ts +3 -0
- package/dynamic-form/mis-crystal-design-system-dynamic-form.d.ts +0 -1
- package/dynamic-form/mis-crystal-design-system-dynamic-form.metadata.json +1 -1
- package/dynamic-form/public_api.d.ts +1 -0
- package/esm2015/dropdown/dropdown.component.js +14 -3
- package/esm2015/dynamic-form/dynamic-form.component.js +50 -41
- package/esm2015/dynamic-form/dynamic-form.module.js +12 -2
- package/esm2015/dynamic-form/dynamic-form.namespace.js +1 -1
- package/esm2015/dynamic-form/mis-crystal-design-system-dynamic-form.js +1 -2
- package/esm2015/dynamic-form/public_api.js +2 -1
- package/fesm2015/mis-crystal-design-system-dropdown.js +13 -2
- package/fesm2015/mis-crystal-design-system-dropdown.js.map +1 -1
- package/fesm2015/mis-crystal-design-system-dynamic-form.js +57 -38
- package/fesm2015/mis-crystal-design-system-dynamic-form.js.map +1 -1
- package/package.json +1 -1
|
@@ -17,19 +17,20 @@ class DynamicFormComponent {
|
|
|
17
17
|
* formFields: Dynamic fields recieved from the API metadata to build a dynamic form
|
|
18
18
|
* formValues: Holds the value of the dynamic form with "key" being dynamic field "title"
|
|
19
19
|
* and value being the user input.
|
|
20
|
-
|
|
20
|
+
*/
|
|
21
21
|
this.formFields = [];
|
|
22
22
|
this.formValues = {};
|
|
23
23
|
this.activeBtnIconUrl = "";
|
|
24
|
-
this.
|
|
24
|
+
this.calendarIconUrl = "";
|
|
25
25
|
/**
|
|
26
26
|
* formUpdated: Emits formValues Object whenever there is a change in the dynamic form.
|
|
27
|
-
|
|
27
|
+
*/
|
|
28
28
|
this.formUpdated = new EventEmitter();
|
|
29
|
+
this.initializedDynamicForm = new EventEmitter();
|
|
29
30
|
this.setupFormControls = () => {
|
|
30
31
|
let formArray = new FormArray([]);
|
|
31
32
|
for (let field of this.formFields) {
|
|
32
|
-
let control = this.mapFormValueToFormField(field,
|
|
33
|
+
let control = this.mapFormValueToFormField(field, this.formValues && this.formValues[field.configName] ? this.formValues[field.configName] : null);
|
|
33
34
|
formArray.push(control);
|
|
34
35
|
}
|
|
35
36
|
this.dynamicForm = new FormGroup({
|
|
@@ -41,10 +42,17 @@ class DynamicFormComponent {
|
|
|
41
42
|
// Building the form
|
|
42
43
|
this.setupFormControls();
|
|
43
44
|
// Subscribing to form changes and emiting values.
|
|
44
|
-
this.dynamicForm.valueChanges.subscribe(
|
|
45
|
+
this.dynamicForm.valueChanges.subscribe(formValue => {
|
|
45
46
|
let formValues = this.generateDynamicFieldsValueObject(this.dynamicForm.value.dynamicFields);
|
|
46
47
|
this.formUpdated.emit(formValues);
|
|
47
48
|
});
|
|
49
|
+
//api to expose functions
|
|
50
|
+
this.dynamicFieldsAPI = {
|
|
51
|
+
defaultFormValues: () => {
|
|
52
|
+
return this.generateDynamicFieldsValueObject(this.dynamicForm.value.dynamicFields);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
this.initializedDynamicForm.emit(this.dynamicFieldsAPI);
|
|
48
56
|
}
|
|
49
57
|
generateDynamicFieldsValueObject(formValues) {
|
|
50
58
|
let dynamicFieldsValue = {};
|
|
@@ -54,17 +62,17 @@ class DynamicFormComponent {
|
|
|
54
62
|
return dynamicFieldsValue;
|
|
55
63
|
}
|
|
56
64
|
getDynamicFieldsControls() {
|
|
57
|
-
return this.dynamicForm.get(
|
|
65
|
+
return this.dynamicForm.get("dynamicFields");
|
|
58
66
|
}
|
|
59
67
|
updateSelectedValueForField(index, value) {
|
|
60
|
-
let array = this.dynamicForm.get(
|
|
68
|
+
let array = this.dynamicForm.get("dynamicFields").controls;
|
|
61
69
|
array[index].setValue(value);
|
|
62
70
|
}
|
|
63
71
|
updateSelectedValueForMultiSelect(index, values) {
|
|
64
|
-
let control = this.dynamicForm.get(
|
|
72
|
+
let control = this.dynamicForm.get("dynamicFields").controls[index];
|
|
65
73
|
let selectedValues = control.value;
|
|
66
74
|
for (let value of values) {
|
|
67
|
-
let itemIndex = selectedValues.findIndex(
|
|
75
|
+
let itemIndex = selectedValues.findIndex(item => item.label === value.label);
|
|
68
76
|
if (itemIndex > -1) {
|
|
69
77
|
selectedValues.splice(itemIndex, 1);
|
|
70
78
|
}
|
|
@@ -75,17 +83,17 @@ class DynamicFormComponent {
|
|
|
75
83
|
control.setValue(selectedValues);
|
|
76
84
|
}
|
|
77
85
|
isCheckBoxSelected(value, selectedValues) {
|
|
78
|
-
return selectedValues.findIndex(
|
|
86
|
+
return selectedValues.findIndex(item => item.label === value) > -1;
|
|
79
87
|
}
|
|
80
88
|
mapFormValueToFormField(formField, formValue) {
|
|
81
89
|
let control = new FormControl();
|
|
82
|
-
if (formField.fieldType ===
|
|
83
|
-
if (formField.fieldInputType ===
|
|
84
|
-
control.setValue(formValue ? formValue :
|
|
85
|
-
else if (formField.fieldInputType ===
|
|
86
|
-
control.setValue(formValue ? formValue :
|
|
87
|
-
else if (formField.fieldInputType ===
|
|
88
|
-
if (formValue && typeof formValue ===
|
|
90
|
+
if (formField.fieldType === "input") {
|
|
91
|
+
if (formField.fieldInputType === "text" || formField.fieldInputType === "textarea")
|
|
92
|
+
control.setValue(formValue ? formValue : "");
|
|
93
|
+
else if (formField.fieldInputType === "number")
|
|
94
|
+
control.setValue(formValue ? formValue : "");
|
|
95
|
+
else if (formField.fieldInputType === "date") {
|
|
96
|
+
if (formValue && typeof formValue === "number") {
|
|
89
97
|
control.setValue(moment(formValue).tz(formField.fieldConfig.timezone).format(formField.fieldConfig.format));
|
|
90
98
|
}
|
|
91
99
|
else {
|
|
@@ -93,22 +101,22 @@ class DynamicFormComponent {
|
|
|
93
101
|
}
|
|
94
102
|
}
|
|
95
103
|
}
|
|
96
|
-
else if (formField.fieldType ===
|
|
97
|
-
if (formField.fieldInputType ===
|
|
104
|
+
else if (formField.fieldType === "singleSelect") {
|
|
105
|
+
if (formField.fieldInputType === "dropdown") {
|
|
98
106
|
if (!formValue)
|
|
99
107
|
control.setValue(formField.itemsList[0]);
|
|
100
108
|
else {
|
|
101
|
-
let f = formField.itemsList.filter(
|
|
109
|
+
let f = formField.itemsList.filter(item => item.value === formValue);
|
|
102
110
|
if (f[0])
|
|
103
111
|
control.setValue(f[0]);
|
|
104
112
|
}
|
|
105
113
|
}
|
|
106
114
|
}
|
|
107
|
-
else if (formField.fieldType ===
|
|
115
|
+
else if (formField.fieldType === "multiSelect") {
|
|
108
116
|
if (formValue && Array.isArray(formValue)) {
|
|
109
117
|
let selectedValues = [];
|
|
110
118
|
for (let value of formValue) {
|
|
111
|
-
let index = formField.itemsList.findIndex(
|
|
119
|
+
let index = formField.itemsList.findIndex(item => item.value === value);
|
|
112
120
|
if (index > -1)
|
|
113
121
|
selectedValues.push(Object.assign({}, formField.itemsList[index]));
|
|
114
122
|
}
|
|
@@ -118,7 +126,7 @@ class DynamicFormComponent {
|
|
|
118
126
|
control.setValue([]);
|
|
119
127
|
}
|
|
120
128
|
}
|
|
121
|
-
else if (formField.fieldType ===
|
|
129
|
+
else if (formField.fieldType === "boolean") {
|
|
122
130
|
control.setValue(!!formValue);
|
|
123
131
|
}
|
|
124
132
|
else
|
|
@@ -126,23 +134,23 @@ class DynamicFormComponent {
|
|
|
126
134
|
return control;
|
|
127
135
|
}
|
|
128
136
|
mapFormFieldToFormValue(formField, formValue) {
|
|
129
|
-
if (formField.fieldType ===
|
|
130
|
-
if (formField.fieldInputType ===
|
|
137
|
+
if (formField.fieldType === "input") {
|
|
138
|
+
if (formField.fieldInputType === "text" || formField.fieldInputType === "textarea")
|
|
131
139
|
return formValue;
|
|
132
|
-
else if (formField.fieldInputType ===
|
|
140
|
+
else if (formField.fieldInputType === "number")
|
|
133
141
|
return formValue;
|
|
134
|
-
else if (formField.fieldInputType ===
|
|
142
|
+
else if (formField.fieldInputType === "date") {
|
|
135
143
|
return tz(formValue, formField.fieldConfig.format, formField.fieldConfig.timezone).valueOf();
|
|
136
144
|
}
|
|
137
145
|
}
|
|
138
|
-
else if (formField.fieldType ===
|
|
139
|
-
if (formField.fieldInputType ===
|
|
146
|
+
else if (formField.fieldType === "singleSelect") {
|
|
147
|
+
if (formField.fieldInputType === "dropdown")
|
|
140
148
|
return formValue === null || formValue === void 0 ? void 0 : formValue.value;
|
|
141
149
|
}
|
|
142
|
-
else if (formField.fieldType ===
|
|
143
|
-
return formValue === null || formValue === void 0 ? void 0 : formValue.map(
|
|
150
|
+
else if (formField.fieldType === "multiSelect") {
|
|
151
|
+
return formValue === null || formValue === void 0 ? void 0 : formValue.map(item => item.value);
|
|
144
152
|
}
|
|
145
|
-
else if (formField.fieldType ===
|
|
153
|
+
else if (formField.fieldType === "boolean") {
|
|
146
154
|
return formValue;
|
|
147
155
|
}
|
|
148
156
|
else
|
|
@@ -151,8 +159,8 @@ class DynamicFormComponent {
|
|
|
151
159
|
}
|
|
152
160
|
DynamicFormComponent.decorators = [
|
|
153
161
|
{ type: Component, args: [{
|
|
154
|
-
selector:
|
|
155
|
-
template: "<form [formGroup]=\"dynamicForm\">\n
|
|
162
|
+
selector: "mis-dynamic-form",
|
|
163
|
+
template: "<form [formGroup]=\"dynamicForm\">\n <ng-container formArrayName=\"dynamicFields\">\n <ng-container *ngFor=\"let fieldControl of getDynamicFieldsControls().controls; let i = index\">\n <div\n class=\"dynamic-field multi-line-field-container\"\n *ngIf=\"formFields[i].fieldType === 'input' && (formFields[i].fieldInputType === 'text' || formFields[i].fieldInputType === 'number')\"\n >\n <p class=\"h7 field-title-sm\">\n {{ formFields[i].title }}\n </p>\n <div style=\"flex-basis: 100%\"></div>\n <input\n class=\"input-field ip-text\"\n [type]=\"formFields[i].fieldInputType\"\n [formControl]=\"fieldControl\"\n [placeholder]=\"formFields[i].placeholderText ? formFields[i].placeholderText : 'Input Text'\"\n />\n </div>\n <div\n class=\"dynamic-field single-line-field-container\"\n *ngIf=\"formFields[i].fieldType === 'singleSelect' && formFields[i].fieldInputType === 'dropdown'\"\n >\n <p class=\"h6\">\n {{ formFields[i].title }}\n </p>\n <mis-dropdown\n [searchEnabled]=\"false\"\n [width]=\"'140px'\"\n [data]=\"formFields[i].itemsList\"\n [selectedItem]=\"fieldControl.value\"\n (onChange)=\"updateSelectedValueForField(i, $event)\"\n >\n </mis-dropdown>\n </div>\n <div\n class=\"dynamic-field single-line-field-container\"\n *ngIf=\"formFields[i].fieldType === 'boolean' && formFields[i].fieldInputType === 'toggle'\"\n >\n <p class=\"h6\">\n {{ formFields[i].title }}\n </p>\n <mis-switch [formControl]=\"fieldControl\"></mis-switch>\n </div>\n <div\n class=\"dynamic-field multi-line-field-container\"\n *ngIf=\"formFields[i].fieldType === 'input' && formFields[i].fieldInputType === 'textarea'\"\n >\n <p class=\"h7 field-title-sm\">\n {{ formFields[i].title }}\n </p>\n <div style=\"flex-basis: 100%\"></div>\n <textarea\n class=\"input-field ip-textarea\"\n type=\"text\"\n [placeholder]=\"formFields[i].placeholderText ? formFields[i].placeholderText : 'Input Text'\"\n [formControl]=\"fieldControl\"\n ></textarea>\n </div>\n <div class=\"dynamic-field single-line-field-container\" *ngIf=\"formFields[i].fieldType === 'input' && formFields[i].fieldInputType === 'date'\">\n <p class=\"h6\">\n {{ formFields[i].title }}\n </p>\n <div class=\"date-picker-container\">\n <input\n class=\"date-picker\"\n readonly\n misTzDp\n [dpConfig]=\"formFields[i].fieldConfig\"\n (dateChange)=\"updateSelectedValueForField(i, $event)\"\n [selectedDate]=\"fieldControl.value\"\n [offsetY]=\"0\"\n [value]=\"fieldControl.value\"\n #dp\n />\n <img alt=\"data-picker\" *ngIf=\"calendarIconUrl\" class=\"date-picker-icon\" [src]=\"calendarIconUrl\" (click)=\"dp.click()\" />\n </div>\n </div>\n <div\n class=\"dynamic-field multi-line-field-container\"\n *ngIf=\"formFields[i].fieldType === 'multiSelect' && formFields[i].fieldInputType === 'checkbox'\"\n >\n <p class=\"h7 field-title-sm\">\n {{ formFields[i].title }}\n </p>\n <div style=\"flex-basis: 100%\"></div>\n <div id=\"checkboxes-container\">\n <div\n class=\"radio-checkbox-common\"\n *ngFor=\"let item of formFields[i].itemsList\"\n [ngClass]=\"{ 'checkbox-active': isCheckBoxSelected(item.label, fieldControl.value) }\"\n (click)=\"updateSelectedValueForMultiSelect(i, [item])\"\n >\n <img *ngIf=\"isCheckBoxSelected(item.label, fieldControl.value) && activeBtnIconUrl\" [src]=\"activeBtnIconUrl\" alt=\"\" />\n <p class=\"h6\">{{ item.label }}</p>\n </div>\n </div>\n </div>\n <div\n class=\"dynamic-field single-line-field-container\"\n *ngIf=\"formFields[i].fieldType === 'multiSelect' && formFields[i].fieldInputType === 'dropdown'\"\n >\n <p class=\"h6\">\n {{ formFields[i].title }}\n </p>\n <mis-multi-select-dropdown\n [width]=\"'140px'\"\n [showSelectedCount]=\"true\"\n [dropdownListWidth]=\"'256px'\"\n [searchEnabled]=\"false\"\n [hideApplyButton]=\"true\"\n [data]=\"formFields[i].itemsList\"\n [selectedItems]=\"fieldControl.value\"\n (onChange)=\"fieldControl.setValue($event)\"\n ></mis-multi-select-dropdown>\n </div>\n </ng-container>\n </ng-container>\n</form>\n",
|
|
156
164
|
styles: ["p{margin:0}::ng-deep .main-container{margin:0;max-width:100%}.dynamic-field ::ng-deep .container{height:32px!important}.single-line-field-container{justify-content:space-between;align-items:center}.multi-line-field-container,.single-line-field-container{display:flex;padding:28px 16px;border-bottom:1px solid var(--grey-seperators)}.multi-line-field-container{justify-content:flex-start;align-items:flex-start;flex-wrap:wrap}.field-title-sm{margin-bottom:8px}.input-field{width:100%;background-color:var(--grey-bg-1);border:1px solid var(--grey-seperators);border-radius:6px}.ip-text{height:44px;padding:8px 12px}.ip-textarea{max-height:94px;padding:8px}input:focus{outline:none}input::-moz-placeholder{color:var(--grey-seperators)}input:-ms-input-placeholder{color:var(--grey-seperators)}input::placeholder{color:var(--grey-seperators)}textarea:focus{outline:none}.date-picker-container{position:relative;width:140px}.date-picker-container .date-picker{cursor:pointer;height:32px;width:100%;font-size:14px;border-radius:6px;padding:0 12px;border:1px solid var(--grey-seperators);inset:10px auto auto 80px;background-color:var(--text-white)}.date-picker-container .date-picker:hover{background-color:var(--grey-hover)}.date-picker-container .date-picker-icon{position:absolute;top:50%;right:12px;transform:translateY(-50%);cursor:pointer}form .dynamic-field:last-child{border-bottom:none!important}#checkboxes-container{display:flex;justify-content:flex-start;align-items:center;flex-wrap:wrap}.radio-checkbox-common{display:flex;justify-content:center;align-items:center;cursor:pointer;margin-right:8px;margin-bottom:8px;background-color:var(--text-white);padding:12px 16px;border:1px solid var(--text-muted);border-radius:8px}.radio-checkbox-common p{color:var(--text-muted)}.radio-checkbox-common img{margin-right:8px}.checkbox-active{background-color:var(--pmry-500)}.checkbox-active p{color:var(--text-white)}"]
|
|
157
165
|
},] }
|
|
158
166
|
];
|
|
@@ -161,8 +169,9 @@ DynamicFormComponent.propDecorators = {
|
|
|
161
169
|
formFields: [{ type: Input }],
|
|
162
170
|
formValues: [{ type: Input }],
|
|
163
171
|
activeBtnIconUrl: [{ type: Input }],
|
|
164
|
-
|
|
165
|
-
formUpdated: [{ type: Output }]
|
|
172
|
+
calendarIconUrl: [{ type: Input }],
|
|
173
|
+
formUpdated: [{ type: Output }],
|
|
174
|
+
initializedDynamicForm: [{ type: Output }]
|
|
166
175
|
};
|
|
167
176
|
|
|
168
177
|
class DynamicFormModule {
|
|
@@ -173,7 +182,17 @@ class DynamicFormModule {
|
|
|
173
182
|
DynamicFormModule.decorators = [
|
|
174
183
|
{ type: NgModule, args: [{
|
|
175
184
|
declarations: [DynamicFormComponent],
|
|
176
|
-
imports: [
|
|
185
|
+
imports: [
|
|
186
|
+
CommonModule,
|
|
187
|
+
ReactiveFormsModule,
|
|
188
|
+
FormsModule,
|
|
189
|
+
OverlayModule,
|
|
190
|
+
ScrollingModule,
|
|
191
|
+
DropdownModule,
|
|
192
|
+
SwitchModule,
|
|
193
|
+
MultiSelectDropdownModule,
|
|
194
|
+
DatepickerModuleV2
|
|
195
|
+
],
|
|
177
196
|
exports: [DynamicFormComponent]
|
|
178
197
|
},] }
|
|
179
198
|
];
|
|
@@ -182,5 +201,5 @@ DynamicFormModule.decorators = [
|
|
|
182
201
|
* Generated bundle index. Do not edit.
|
|
183
202
|
*/
|
|
184
203
|
|
|
185
|
-
export {
|
|
204
|
+
export { DynamicFormComponent, DynamicFormModule };
|
|
186
205
|
//# sourceMappingURL=mis-crystal-design-system-dynamic-form.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mis-crystal-design-system-dynamic-form.js","sources":["../../../projects/mis-components/dynamic-form/dynamic-form.component.ts","../../../projects/mis-components/dynamic-form/dynamic-form.module.ts","../../../projects/mis-components/dynamic-form/mis-crystal-design-system-dynamic-form.ts"],"sourcesContent":["import { Component, EventEmitter, Inject, Input, OnInit, Output } from '@angular/core';\nimport { NsDynamicFields } from './dynamic-form.namespace';\nimport * as moment from 'moment';\nimport 'moment-timezone';\nimport { FormArray, FormControl, FormGroup } from '@angular/forms';\n\n@Component({\n selector: 'mis-dynamic-form',\n templateUrl: './dynamic-form.component.html',\n styleUrls: ['./dynamic-form.component.scss']\n})\nexport class DynamicFormComponent implements OnInit {\n\n /** \n * formFields: Dynamic fields recieved from the API metadata to build a dynamic form\n * formValues: Holds the value of the dynamic form with \"key\" being dynamic field \"title\"\n * and value being the user input.\n */\n @Input() formFields: Array<NsDynamicFields.IField> = []\n @Input() formValues: { [key: string]: any } = {}\n @Input() activeBtnIconUrl = \"\";\n @Input() calendarUrl = \"\";\n /** \n * dynamicForm: Constructed using formFields and formValues(in case of edit)\n */\n dynamicForm: FormGroup\n\n /** \n * formUpdated: Emits formValues Object whenever there is a change in the dynamic form.\n */\n @Output() formUpdated = new EventEmitter<{[key: string]: any}>()\n\n constructor() { }\n\n ngOnInit(): void {\n // Building the form\n this.setupFormControls();\n \n // Subscribing to form changes and emiting values.\n this.dynamicForm.valueChanges.subscribe((formValue) => {\n let formValues = this.generateDynamicFieldsValueObject(this.dynamicForm.value.dynamicFields)\n this.formUpdated.emit(formValues)\n })\n }\n generateDynamicFieldsValueObject(formValues: Array<any>): {[key: string]: any} {\n let dynamicFieldsValue = {}\n formValues.forEach((value, index) => {\n dynamicFieldsValue[this.formFields[index].configName] = this.mapFormFieldToFormValue(this.formFields[index], value)\n })\n return dynamicFieldsValue\n }\n setupFormControls = (): void => {\n let formArray = new FormArray([])\n for (let field of this.formFields) {\n let control = this.mapFormValueToFormField(field, (this.formValues && this.formValues[field.configName]) ? this.formValues[field.configName]: null)\n formArray.push(control)\n }\n this.dynamicForm = new FormGroup({\n dynamicFields: formArray\n })\n }\n getDynamicFieldsControls(): FormArray {\n return this.dynamicForm.get('dynamicFields') as FormArray\n }\n updateSelectedValueForField(index: number, value: any): void {\n let array = (this.dynamicForm.get('dynamicFields') as FormArray).controls\n array[index].setValue(value)\n }\n updateSelectedValueForMultiSelect(index: number, values: Array<any>): void {\n let control = (this.dynamicForm.get('dynamicFields') as FormArray).controls[index]\n let selectedValues: Array<{label: string, value: any}> = control.value\n for (let value of values) {\n let itemIndex = selectedValues.findIndex((item) => item.label === value.label)\n if (itemIndex > -1) {\n selectedValues.splice(itemIndex, 1);\n }\n else {\n selectedValues.push({ ...value })\n }\n }\n control.setValue(selectedValues)\n }\n isCheckBoxSelected(value: string, selectedValues: Array<{ label: string, value: string }>): boolean {\n return selectedValues.findIndex((item) => item.label === value) > -1\n }\n mapFormValueToFormField(formField: NsDynamicFields.IField, formValue: any): any {\n let control = new FormControl()\n if (formField.fieldType === 'input') {\n if (formField.fieldInputType === 'text' || formField.fieldInputType === 'textarea') control.setValue(formValue ? formValue : '')\n else if (formField.fieldInputType === 'number') control.setValue(formValue ? formValue : '')\n else if (formField.fieldInputType === 'date') {\n if (formValue && typeof formValue === 'number') {\n control.setValue(moment(formValue).tz(formField.fieldConfig.timezone).format(formField.fieldConfig.format))\n } else {\n control.setValue(moment().tz(formField.fieldConfig.timezone).format(formField.fieldConfig.format))\n }\n }\n }\n else if (formField.fieldType === 'singleSelect') {\n if (formField.fieldInputType === 'dropdown') {\n if (!formValue) control.setValue(formField.itemsList[0])\n else {\n let f = formField.itemsList.filter((item) => item.value === formValue)\n if(f[0]) control.setValue(f[0])\n }\n }\n }\n else if (formField.fieldType === 'multiSelect') {\n if (formValue && Array.isArray(formValue)) {\n let selectedValues = []\n for (let value of formValue) {\n let index = formField.itemsList.findIndex((item) => item.value === value)\n if(index > -1) selectedValues.push({...formField.itemsList[index]})\n }\n control.setValue(selectedValues)\n } else {\n control.setValue([])\n }\n }\n else if (formField.fieldType === 'boolean') {\n control.setValue(!!formValue)\n }\n else control.setValue(null)\n return control;\n }\n mapFormFieldToFormValue(formField: NsDynamicFields.IField, formValue: any): any {\n if (formField.fieldType === 'input') {\n if (formField.fieldInputType === 'text' || formField.fieldInputType === 'textarea') return formValue\n else if (formField.fieldInputType === 'number') return formValue\n else if (formField.fieldInputType === 'date') {\n return moment.tz(formValue, formField.fieldConfig.format, formField.fieldConfig.timezone).valueOf()\n }\n }\n else if (formField.fieldType === 'singleSelect') {\n if (formField.fieldInputType === 'dropdown') return formValue?.value\n }\n else if (formField.fieldType === 'multiSelect') {\n return formValue?.map((item) => item.value)\n }\n else if (formField.fieldType === 'boolean') {\n return formValue\n }\n else return formValue\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { FormsModule } from \"@angular/forms\";\nimport { NgModule, ModuleWithProviders } from \"@angular/core\";\nimport { OverlayModule } from \"@angular/cdk/overlay\";\nimport { ScrollingModule } from \"@angular/cdk-experimental/scrolling\";\nimport { DropdownModule } from \"mis-crystal-design-system/dropdown\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { DynamicFormComponent } from \"./dynamic-form.component\";\nimport { SwitchModule } from \"mis-crystal-design-system/switch\";\nimport { MultiSelectDropdownModule } from \"mis-crystal-design-system/multi-select-dropdown\";\nimport { DatepickerModuleV2 } from \"mis-crystal-design-system/datepicker_v2\";\n\n\n@NgModule({\n declarations: [DynamicFormComponent],\n imports: [CommonModule,ReactiveFormsModule, FormsModule, OverlayModule, ScrollingModule, DropdownModule, SwitchModule, MultiSelectDropdownModule, DatepickerModuleV2],\n exports: [DynamicFormComponent]\n})\nexport class DynamicFormModule {\n static forRoot(): ModuleWithProviders<DynamicFormModule> {\n return { ngModule: DynamicFormModule, providers: [] };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {DynamicFormComponent as ɵa} from './dynamic-form.component';"],"names":["moment.tz"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mis-crystal-design-system-dynamic-form.js","sources":["../../../projects/mis-components/dynamic-form/dynamic-form.component.ts","../../../projects/mis-components/dynamic-form/dynamic-form.module.ts","../../../projects/mis-components/dynamic-form/mis-crystal-design-system-dynamic-form.ts"],"sourcesContent":["import { Component, EventEmitter, Inject, Input, OnInit, Output } from \"@angular/core\";\nimport { NsDynamicFields } from \"./dynamic-form.namespace\";\nimport * as moment from \"moment\";\nimport \"moment-timezone\";\nimport { FormArray, FormControl, FormGroup } from \"@angular/forms\";\n\n@Component({\n selector: \"mis-dynamic-form\",\n templateUrl: \"./dynamic-form.component.html\",\n styleUrls: [\"./dynamic-form.component.scss\"]\n})\nexport class DynamicFormComponent implements OnInit {\n /**\n * formFields: Dynamic fields recieved from the API metadata to build a dynamic form\n * formValues: Holds the value of the dynamic form with \"key\" being dynamic field \"title\"\n * and value being the user input.\n */\n @Input() formFields: Array<NsDynamicFields.IField> = [];\n @Input() formValues: { [key: string]: any } = {};\n @Input() activeBtnIconUrl = \"\";\n @Input() calendarIconUrl = \"\";\n /**\n * dynamicForm: Constructed using formFields and formValues(in case of edit)\n */\n dynamicForm: FormGroup;\n\n /**\n * formUpdated: Emits formValues Object whenever there is a change in the dynamic form.\n */\n @Output() formUpdated = new EventEmitter<{ [key: string]: any }>();\n @Output() initializedDynamicForm = new EventEmitter<any>();\n\n dynamicFieldsAPI: NsDynamicFields.IDynamicFormAPI;\n\n constructor() {}\n\n ngOnInit(): void {\n // Building the form\n this.setupFormControls();\n\n // Subscribing to form changes and emiting values.\n this.dynamicForm.valueChanges.subscribe(formValue => {\n let formValues = this.generateDynamicFieldsValueObject(this.dynamicForm.value.dynamicFields);\n this.formUpdated.emit(formValues);\n });\n\n //api to expose functions\n this.dynamicFieldsAPI = {\n defaultFormValues: () => {\n return this.generateDynamicFieldsValueObject(this.dynamicForm.value.dynamicFields);\n }\n };\n this.initializedDynamicForm.emit(this.dynamicFieldsAPI);\n }\n generateDynamicFieldsValueObject(formValues: Array<any>): { [key: string]: any } {\n let dynamicFieldsValue = {};\n formValues.forEach((value, index) => {\n dynamicFieldsValue[this.formFields[index].configName] = this.mapFormFieldToFormValue(this.formFields[index], value);\n });\n return dynamicFieldsValue;\n }\n setupFormControls = (): void => {\n let formArray = new FormArray([]);\n for (let field of this.formFields) {\n let control = this.mapFormValueToFormField(\n field,\n this.formValues && this.formValues[field.configName] ? this.formValues[field.configName] : null\n );\n formArray.push(control);\n }\n this.dynamicForm = new FormGroup({\n dynamicFields: formArray\n });\n };\n getDynamicFieldsControls(): FormArray {\n return this.dynamicForm.get(\"dynamicFields\") as FormArray;\n }\n updateSelectedValueForField(index: number, value: any): void {\n let array = (this.dynamicForm.get(\"dynamicFields\") as FormArray).controls;\n array[index].setValue(value);\n }\n updateSelectedValueForMultiSelect(index: number, values: Array<any>): void {\n let control = (this.dynamicForm.get(\"dynamicFields\") as FormArray).controls[index];\n let selectedValues: Array<{ label: string; value: any }> = control.value;\n for (let value of values) {\n let itemIndex = selectedValues.findIndex(item => item.label === value.label);\n if (itemIndex > -1) {\n selectedValues.splice(itemIndex, 1);\n } else {\n selectedValues.push({ ...value });\n }\n }\n control.setValue(selectedValues);\n }\n isCheckBoxSelected(value: string, selectedValues: Array<{ label: string; value: string }>): boolean {\n return selectedValues.findIndex(item => item.label === value) > -1;\n }\n mapFormValueToFormField(formField: NsDynamicFields.IField, formValue: any): any {\n let control = new FormControl();\n if (formField.fieldType === \"input\") {\n if (formField.fieldInputType === \"text\" || formField.fieldInputType === \"textarea\") control.setValue(formValue ? formValue : \"\");\n else if (formField.fieldInputType === \"number\") control.setValue(formValue ? formValue : \"\");\n else if (formField.fieldInputType === \"date\") {\n if (formValue && typeof formValue === \"number\") {\n control.setValue(moment(formValue).tz(formField.fieldConfig.timezone).format(formField.fieldConfig.format));\n } else {\n control.setValue(moment().tz(formField.fieldConfig.timezone).format(formField.fieldConfig.format));\n }\n }\n } else if (formField.fieldType === \"singleSelect\") {\n if (formField.fieldInputType === \"dropdown\") {\n if (!formValue) control.setValue(formField.itemsList[0]);\n else {\n let f = formField.itemsList.filter(item => item.value === formValue);\n if (f[0]) control.setValue(f[0]);\n }\n }\n } else if (formField.fieldType === \"multiSelect\") {\n if (formValue && Array.isArray(formValue)) {\n let selectedValues = [];\n for (let value of formValue) {\n let index = formField.itemsList.findIndex(item => item.value === value);\n if (index > -1) selectedValues.push({ ...formField.itemsList[index] });\n }\n control.setValue(selectedValues);\n } else {\n control.setValue([]);\n }\n } else if (formField.fieldType === \"boolean\") {\n control.setValue(!!formValue);\n } else control.setValue(null);\n return control;\n }\n mapFormFieldToFormValue(formField: NsDynamicFields.IField, formValue: any): any {\n if (formField.fieldType === \"input\") {\n if (formField.fieldInputType === \"text\" || formField.fieldInputType === \"textarea\") return formValue;\n else if (formField.fieldInputType === \"number\") return formValue;\n else if (formField.fieldInputType === \"date\") {\n return moment.tz(formValue, formField.fieldConfig.format, formField.fieldConfig.timezone).valueOf();\n }\n } else if (formField.fieldType === \"singleSelect\") {\n if (formField.fieldInputType === \"dropdown\") return formValue?.value;\n } else if (formField.fieldType === \"multiSelect\") {\n return formValue?.map(item => item.value);\n } else if (formField.fieldType === \"boolean\") {\n return formValue;\n } else return formValue;\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { FormsModule } from \"@angular/forms\";\nimport { NgModule, ModuleWithProviders } from \"@angular/core\";\nimport { OverlayModule } from \"@angular/cdk/overlay\";\nimport { ScrollingModule } from \"@angular/cdk-experimental/scrolling\";\nimport { DropdownModule } from \"mis-crystal-design-system/dropdown\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { DynamicFormComponent } from \"./dynamic-form.component\";\nimport { SwitchModule } from \"mis-crystal-design-system/switch\";\nimport { MultiSelectDropdownModule } from \"mis-crystal-design-system/multi-select-dropdown\";\nimport { DatepickerModuleV2 } from \"mis-crystal-design-system/datepicker_v2\";\n\n@NgModule({\n declarations: [DynamicFormComponent],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n OverlayModule,\n ScrollingModule,\n DropdownModule,\n SwitchModule,\n MultiSelectDropdownModule,\n DatepickerModuleV2\n ],\n exports: [DynamicFormComponent]\n})\nexport class DynamicFormModule {\n static forRoot(): ModuleWithProviders<DynamicFormModule> {\n return { ngModule: DynamicFormModule, providers: [] };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["moment.tz"],"mappings":"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"}
|