client-core-services 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/esm2020/client-core-services.mjs +5 -0
- package/esm2020/lib/my-lib.module.mjs +98 -0
- package/esm2020/lib/services/api/api-call/api-call.service.mjs +766 -0
- package/esm2020/lib/services/api/api-call-responce/api-call-responce.service.mjs +191 -0
- package/esm2020/lib/services/api/api.service.mjs +611 -0
- package/esm2020/lib/services/api/auth/auth-guard.service.mjs +37 -0
- package/esm2020/lib/services/api/auth/auth.service.mjs +500 -0
- package/esm2020/lib/services/api/aws-secret-manager/aws-secret-manager.service.mjs +78 -0
- package/esm2020/lib/services/api/common-api/common-api.service.mjs +97 -0
- package/esm2020/lib/services/api/doc-api/doc-api.service.mjs +221 -0
- package/esm2020/lib/services/api/public-api/public-api.service.mjs +37 -0
- package/esm2020/lib/services/chart/chart.service.mjs +166 -0
- package/esm2020/lib/services/check-if/check-if.service.mjs +830 -0
- package/esm2020/lib/services/common-utils/common-function.service.mjs +1277 -0
- package/esm2020/lib/services/common-utils/core-function/core-function.service.mjs +283 -0
- package/esm2020/lib/services/customvalidation/customvalidation.service.mjs +202 -0
- package/esm2020/lib/services/data-share/auth-data-share/auth-data-share.service.mjs +70 -0
- package/esm2020/lib/services/data-share/common-app-data-share/common-app-data-share.service.mjs +82 -0
- package/esm2020/lib/services/data-share/data-share.service.mjs +370 -0
- package/esm2020/lib/services/data-share/doc-data-share/doc-data-share.service.mjs +81 -0
- package/esm2020/lib/services/data-share/public-data-share/public-data-share.service.mjs +25 -0
- package/esm2020/lib/services/download/download.service.mjs +151 -0
- package/esm2020/lib/services/encryption/encryption.service.mjs +20 -0
- package/esm2020/lib/services/env/env.service.mjs +232 -0
- package/esm2020/lib/services/env/serverHostList.mjs +56 -0
- package/esm2020/lib/services/fileHandler/file-handler.service.mjs +136 -0
- package/esm2020/lib/services/form/form-control/form-control.service.mjs +654 -0
- package/esm2020/lib/services/form/form-creation/form-creation.service.mjs +880 -0
- package/esm2020/lib/services/form/form-value/form-value.service.mjs +464 -0
- package/esm2020/lib/services/form/multiple-form/multiple-form.service.mjs +346 -0
- package/esm2020/lib/services/grid/grid-common-function/grid-common-function.service.mjs +875 -0
- package/esm2020/lib/services/grid/grid-selection/grid-selection.service.mjs +84 -0
- package/esm2020/lib/services/lims-calculations/lims-calculations.service.mjs +2304 -0
- package/esm2020/lib/services/loader/loader.service.mjs +17 -0
- package/esm2020/lib/services/menu-or-module-common/menu-or-module-common.service.mjs +558 -0
- package/esm2020/lib/services/model/model.service.mjs +30 -0
- package/esm2020/lib/services/notify/notification.service.mjs +84 -0
- package/esm2020/lib/services/operator/operator.service.mjs +58 -0
- package/esm2020/lib/services/permission/permission.service.mjs +88 -0
- package/esm2020/lib/services/router/router.service.mjs +78 -0
- package/esm2020/lib/services/storage/cookies.service.mjs +56 -0
- package/esm2020/lib/services/storage/storage.service.mjs +749 -0
- package/esm2020/lib/services/tree-component/interface.mjs +6 -0
- package/esm2020/lib/services/tree-component/tree-component.service.mjs +394 -0
- package/esm2020/lib/services/userPrefrence/user-prefrence.service.mjs +767 -0
- package/esm2020/lib/services/voice-recognition/voice-recognition.service.mjs +97 -0
- package/esm2020/lib/shared/configuration/config.mjs +76 -0
- package/esm2020/lib/shared/configuration/editor-config.mjs +121 -0
- package/esm2020/lib/shared/enums/common.enum.mjs +18 -0
- package/esm2020/lib/shared/enums/config.enum.mjs +56 -0
- package/esm2020/lib/shared/enums/end-point.enum.mjs +69 -0
- package/esm2020/lib/shared/enums/flags.enum.mjs +20 -0
- package/esm2020/lib/shared/enums/keycodes.enum.mjs +122 -0
- package/esm2020/lib/shared/enums/operator_type.enum.mjs +13 -0
- package/esm2020/lib/shared/enums/storage-token-status.enum.mjs +10 -0
- package/esm2020/lib/shared/platform.mjs +2 -0
- package/esm2020/public-api.mjs +53 -0
- package/fesm2015/client-core-services.mjs +15487 -0
- package/fesm2015/client-core-services.mjs.map +1 -0
- package/fesm2020/client-core-services.mjs +15482 -0
- package/fesm2020/client-core-services.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/my-lib.module.d.ts +18 -0
- package/lib/services/api/api-call/api-call.service.d.ts +60 -0
- package/lib/services/api/api-call-responce/api-call-responce.service.d.ts +43 -0
- package/lib/services/api/api.service.d.ts +88 -0
- package/lib/services/api/auth/auth-guard.service.d.ts +13 -0
- package/lib/services/api/auth/auth.service.d.ts +50 -0
- package/lib/services/api/aws-secret-manager/aws-secret-manager.service.d.ts +22 -0
- package/lib/services/api/common-api/common-api.service.d.ts +22 -0
- package/lib/services/api/doc-api/doc-api.service.d.ts +35 -0
- package/lib/services/api/public-api/public-api.service.d.ts +14 -0
- package/lib/services/chart/chart.service.d.ts +21 -0
- package/lib/services/check-if/check-if.service.d.ts +50 -0
- package/lib/services/common-utils/common-function.service.d.ts +84 -0
- package/lib/services/common-utils/core-function/core-function.service.d.ts +21 -0
- package/lib/services/customvalidation/customvalidation.service.d.ts +21 -0
- package/lib/services/data-share/auth-data-share/auth-data-share.service.d.ts +33 -0
- package/lib/services/data-share/common-app-data-share/common-app-data-share.service.d.ts +36 -0
- package/lib/services/data-share/data-share.service.d.ts +174 -0
- package/lib/services/data-share/doc-data-share/doc-data-share.service.d.ts +33 -0
- package/lib/services/data-share/public-data-share/public-data-share.service.d.ts +12 -0
- package/lib/services/download/download.service.d.ts +35 -0
- package/lib/services/encryption/encryption.service.d.ts +8 -0
- package/lib/services/env/env.service.d.ts +44 -0
- package/lib/services/env/serverHostList.d.ts +9 -0
- package/lib/services/fileHandler/file-handler.service.d.ts +17 -0
- package/lib/services/form/form-control/form-control.service.d.ts +44 -0
- package/lib/services/form/form-creation/form-creation.service.d.ts +41 -0
- package/lib/services/form/form-value/form-value.service.d.ts +32 -0
- package/lib/services/form/multiple-form/multiple-form.service.d.ts +54 -0
- package/lib/services/grid/grid-common-function/grid-common-function.service.d.ts +74 -0
- package/lib/services/grid/grid-selection/grid-selection.service.d.ts +16 -0
- package/lib/services/lims-calculations/lims-calculations.service.d.ts +87 -0
- package/lib/services/loader/loader.service.d.ts +8 -0
- package/lib/services/menu-or-module-common/menu-or-module-common.service.d.ts +59 -0
- package/lib/services/model/model.service.d.ts +11 -0
- package/lib/services/notify/notification.service.d.ts +22 -0
- package/lib/services/operator/operator.service.d.ts +27 -0
- package/lib/services/permission/permission.service.d.ts +18 -0
- package/lib/services/router/router.service.d.ts +14 -0
- package/lib/services/storage/cookies.service.d.ts +11 -0
- package/lib/services/storage/storage.service.d.ts +132 -0
- package/lib/services/tree-component/interface.d.ts +13 -0
- package/lib/services/tree-component/tree-component.service.d.ts +38 -0
- package/lib/services/userPrefrence/user-prefrence.service.d.ts +75 -0
- package/lib/services/voice-recognition/voice-recognition.service.d.ts +36 -0
- package/lib/shared/configuration/config.d.ts +144 -0
- package/lib/shared/configuration/editor-config.d.ts +72 -0
- package/lib/shared/enums/common.enum.d.ts +16 -0
- package/lib/shared/enums/config.enum.d.ts +54 -0
- package/lib/shared/enums/end-point.enum.d.ts +66 -0
- package/lib/shared/enums/flags.enum.d.ts +18 -0
- package/lib/shared/enums/keycodes.enum.d.ts +120 -0
- package/lib/shared/enums/operator_type.enum.d.ts +9 -0
- package/lib/shared/enums/storage-token-status.enum.d.ts +8 -0
- package/lib/shared/platform.d.ts +1 -0
- package/package.json +40 -0
- package/public-api.d.ts +49 -0
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../common-utils/common-function.service";
|
|
4
|
+
import * as i2 from "../../common-utils/core-function/core-function.service";
|
|
5
|
+
import * as i3 from "./../../api/api.service";
|
|
6
|
+
import * as i4 from "../../check-if/check-if.service";
|
|
7
|
+
import * as i5 from "./../../grid/grid-common-function/grid-common-function.service";
|
|
8
|
+
import * as i6 from "./../../api/api-call/api-call.service";
|
|
9
|
+
export class MultipleFormService {
|
|
10
|
+
constructor(commonFunctionService, coreFunctionService, apiService, checkIfService, gridCommonFunctionService, apiCallService) {
|
|
11
|
+
this.commonFunctionService = commonFunctionService;
|
|
12
|
+
this.coreFunctionService = coreFunctionService;
|
|
13
|
+
this.apiService = apiService;
|
|
14
|
+
this.checkIfService = checkIfService;
|
|
15
|
+
this.gridCommonFunctionService = gridCommonFunctionService;
|
|
16
|
+
this.apiCallService = apiCallService;
|
|
17
|
+
}
|
|
18
|
+
setPreviousFormTargetFieldData(multipleFormCollection, formValueWithCust) {
|
|
19
|
+
let result = {
|
|
20
|
+
multipleFormCollection: multipleFormCollection
|
|
21
|
+
};
|
|
22
|
+
if (result.multipleFormCollection.length > 0) {
|
|
23
|
+
const previousFormIndex = result.multipleFormCollection.length - 1;
|
|
24
|
+
const previousFormData = result.multipleFormCollection[previousFormIndex];
|
|
25
|
+
const previousFormField = previousFormData.current_field;
|
|
26
|
+
const formData = previousFormData.next_form_data;
|
|
27
|
+
if (previousFormField && previousFormField.add_new_target_field) {
|
|
28
|
+
const targateFieldName = previousFormField.add_new_target_field;
|
|
29
|
+
const currentFormValue = formValueWithCust;
|
|
30
|
+
const currentTargetFieldValue = currentFormValue[targateFieldName];
|
|
31
|
+
formData[targateFieldName] = currentTargetFieldValue;
|
|
32
|
+
}
|
|
33
|
+
result.multipleFormCollection[previousFormIndex]['next_form_data'] = formData;
|
|
34
|
+
}
|
|
35
|
+
return result.multipleFormCollection;
|
|
36
|
+
}
|
|
37
|
+
getNextFormObject(nextFormData, next) {
|
|
38
|
+
const form = nextFormData.formName;
|
|
39
|
+
const field_name = nextFormData.field_name;
|
|
40
|
+
const form_field_name = nextFormData.form_field_name;
|
|
41
|
+
const field = {
|
|
42
|
+
'add_new_form': form,
|
|
43
|
+
'add_next_form_button': next,
|
|
44
|
+
'field_name': field_name,
|
|
45
|
+
'type': 'hidden',
|
|
46
|
+
'form_field_name': form_field_name,
|
|
47
|
+
'form_value_index': 0,
|
|
48
|
+
'moveFieldsToNewForm': ['employee_name#add_assignments.resource_name']
|
|
49
|
+
};
|
|
50
|
+
return field;
|
|
51
|
+
}
|
|
52
|
+
getNextFormData(formData, listOfFieldsUpdateIndex) {
|
|
53
|
+
let result = {
|
|
54
|
+
updateAddNew: false,
|
|
55
|
+
payload: {}
|
|
56
|
+
};
|
|
57
|
+
if (formData) {
|
|
58
|
+
let parent = '';
|
|
59
|
+
let child = '';
|
|
60
|
+
if (formData['parent_field']) {
|
|
61
|
+
parent = formData['parent_field'];
|
|
62
|
+
}
|
|
63
|
+
if (formData['current_field']) {
|
|
64
|
+
child = formData['current_field'];
|
|
65
|
+
}
|
|
66
|
+
let formValue = formData['data'];
|
|
67
|
+
let fieldValue = '';
|
|
68
|
+
if (parent != '') {
|
|
69
|
+
if (parent.type == 'list_of_fields') {
|
|
70
|
+
fieldValue = formValue[parent.field_name][listOfFieldsUpdateIndex][child.field_name];
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
fieldValue = formValue[parent.field_name][child.field_name];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
fieldValue = formValue[child.field_name];
|
|
78
|
+
}
|
|
79
|
+
if (fieldValue && fieldValue._id && fieldValue._id != '') {
|
|
80
|
+
//console.log(fieldValue._id);
|
|
81
|
+
const params = child.api_params;
|
|
82
|
+
if (params && params != '') {
|
|
83
|
+
const criteria = ["_id;eq;" + fieldValue._id + ";STATIC"];
|
|
84
|
+
const crList = this.apiCallService.getCriteriaList(criteria, {});
|
|
85
|
+
const payload = this.apiCallService.getDataForGrid(1, {}, { 'name': params }, [], {}, '');
|
|
86
|
+
payload.data.crList = crList;
|
|
87
|
+
//this.apiService.getGridData(payload);
|
|
88
|
+
result.updateAddNew = true;
|
|
89
|
+
result.payload = payload;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
storeFormDetails(parent_field, field, formValue, formValueWithCustomData, updateMode, nextFormData, lastTypeaheadTypeValue, multipleFormCollection, currentMenu, pForm, listOfFieldUpdateMode, listOfFieldsUpdateIndex, addNewRecord, enableNextButton, index) {
|
|
96
|
+
let result = {
|
|
97
|
+
multipleFormCollection: multipleFormCollection,
|
|
98
|
+
form: {},
|
|
99
|
+
id: "",
|
|
100
|
+
addNewRecord: addNewRecord,
|
|
101
|
+
criteria: [''],
|
|
102
|
+
params: ''
|
|
103
|
+
};
|
|
104
|
+
let targetFieldName = {};
|
|
105
|
+
targetFieldName['form'] = {};
|
|
106
|
+
targetFieldName['custom'] = [];
|
|
107
|
+
let formData = JSON.parse(JSON.stringify(formValueWithCustomData));
|
|
108
|
+
if (field && field.form_field_name) {
|
|
109
|
+
const nextFormReference = {
|
|
110
|
+
'_id': nextFormData._id,
|
|
111
|
+
'name': nextFormData.name
|
|
112
|
+
};
|
|
113
|
+
formData[field.form_field_name] = nextFormReference;
|
|
114
|
+
updateMode = true;
|
|
115
|
+
}
|
|
116
|
+
if (this.coreFunctionService.isNotBlank(field.add_new_target_field)) {
|
|
117
|
+
targetFieldName['form'][field.add_new_target_field] = lastTypeaheadTypeValue;
|
|
118
|
+
}
|
|
119
|
+
else if (field) {
|
|
120
|
+
switch (field.type) {
|
|
121
|
+
case "list_of_fields":
|
|
122
|
+
case "grid_selection":
|
|
123
|
+
let currentFieldData = formData[field.field_name];
|
|
124
|
+
if (currentFieldData && Array.isArray(currentFieldData)) {
|
|
125
|
+
if (index != undefined && index >= 0) {
|
|
126
|
+
targetFieldName['form'] = currentFieldData[index];
|
|
127
|
+
targetFieldName['updataModeInPopupType'] = true;
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
targetFieldName['custom'] = currentFieldData;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
break;
|
|
134
|
+
default:
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (this.coreFunctionService.isNotBlank(field.moveFieldsToNewForm)) {
|
|
139
|
+
if (field.moveFieldsToNewForm && field.moveFieldsToNewForm.length > 0) {
|
|
140
|
+
field.moveFieldsToNewForm.forEach((keyValue) => {
|
|
141
|
+
const sourceTarget = keyValue.split("#");
|
|
142
|
+
let key = sourceTarget[0];
|
|
143
|
+
let valueField = sourceTarget[1];
|
|
144
|
+
let multiCollection = JSON.parse(JSON.stringify(result.multipleFormCollection));
|
|
145
|
+
let formValueWithMulticollection = this.commonFunctionService.getFormDataInMultiformCollection(multiCollection, formValue);
|
|
146
|
+
let value = this.commonFunctionService.getObjectValue(valueField, formValueWithMulticollection);
|
|
147
|
+
targetFieldName['form'][key] = value;
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
let data = {
|
|
152
|
+
"collection_name": currentMenu.name,
|
|
153
|
+
"data": formData,
|
|
154
|
+
"form": pForm,
|
|
155
|
+
"parent_field": parent_field,
|
|
156
|
+
"current_field": field,
|
|
157
|
+
"next_form_data": targetFieldName,
|
|
158
|
+
"updateMode": updateMode,
|
|
159
|
+
"form_value": JSON.parse(JSON.stringify(formValue)),
|
|
160
|
+
"index": -1,
|
|
161
|
+
"listOfFieldUpdateMode": listOfFieldUpdateMode,
|
|
162
|
+
"listOfFieldsUpdateIndex": listOfFieldsUpdateIndex
|
|
163
|
+
};
|
|
164
|
+
if (field) {
|
|
165
|
+
const type = field.type;
|
|
166
|
+
switch (type) {
|
|
167
|
+
case "list_of_fields":
|
|
168
|
+
case "grid_selection":
|
|
169
|
+
if (index != undefined) {
|
|
170
|
+
data['index'] = index;
|
|
171
|
+
}
|
|
172
|
+
break;
|
|
173
|
+
default:
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
result.multipleFormCollection.push(data);
|
|
178
|
+
if (field && field.type == "list_of_fields") {
|
|
179
|
+
let buttonLabel = "";
|
|
180
|
+
if (index != undefined && index >= 0) {
|
|
181
|
+
buttonLabel = 'Update';
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
buttonLabel = 'Add';
|
|
185
|
+
}
|
|
186
|
+
if (field.list_of_fields && field.list_of_fields.length > 0) {
|
|
187
|
+
let fieldList = JSON.parse(JSON.stringify(field.list_of_fields));
|
|
188
|
+
if (fieldList && fieldList.length > 0 && index == undefined) {
|
|
189
|
+
let curField = JSON.parse(JSON.stringify(field));
|
|
190
|
+
curField['add_list_field'] = 'add';
|
|
191
|
+
fieldList.push(curField);
|
|
192
|
+
}
|
|
193
|
+
result.form = {
|
|
194
|
+
"details": {
|
|
195
|
+
"class": "",
|
|
196
|
+
"collection_name": "",
|
|
197
|
+
"bulk_update": false
|
|
198
|
+
},
|
|
199
|
+
"tab_list_buttons": [
|
|
200
|
+
{
|
|
201
|
+
"label": buttonLabel,
|
|
202
|
+
"onclick": {
|
|
203
|
+
"api": "add",
|
|
204
|
+
"action_name": "",
|
|
205
|
+
"close_form_on_succes": false
|
|
206
|
+
},
|
|
207
|
+
"type": "button",
|
|
208
|
+
"field_name": "save",
|
|
209
|
+
"api_params": "",
|
|
210
|
+
"show_if": "",
|
|
211
|
+
"disable_if": ""
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"label": "Ok",
|
|
215
|
+
"onclick": {
|
|
216
|
+
"api": "close",
|
|
217
|
+
"action_name": "",
|
|
218
|
+
"close_form_on_succes": false
|
|
219
|
+
},
|
|
220
|
+
"type": "button",
|
|
221
|
+
"field_name": "",
|
|
222
|
+
"api_params": "",
|
|
223
|
+
"show_if": "",
|
|
224
|
+
"disable_if": ""
|
|
225
|
+
}
|
|
226
|
+
],
|
|
227
|
+
"tableFields": fieldList,
|
|
228
|
+
"api_params": null,
|
|
229
|
+
"label": field.label
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
if (field.form && field.form._id) {
|
|
234
|
+
result.id = field.form._id;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
if (field.add_new_form && field.add_new_form._id) {
|
|
240
|
+
result.id = field.add_new_form._id;
|
|
241
|
+
}
|
|
242
|
+
result.addNewRecord = false;
|
|
243
|
+
if (!enableNextButton && field && field.find_child_form) {
|
|
244
|
+
let cri = "collection.name;eq;" + currentMenu.name + ";STATIC";
|
|
245
|
+
result.criteria = [];
|
|
246
|
+
result.criteria.push(cri);
|
|
247
|
+
result.params = 'scheduled_task_form';
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return result;
|
|
251
|
+
}
|
|
252
|
+
getDataForNextForm(reqParams, reqCriteria) {
|
|
253
|
+
const request = this.apiCallService.getDataForGrid(1, {}, { 'name': reqParams }, [], {}, '');
|
|
254
|
+
const crList = this.apiCallService.getCriteriaList(reqCriteria, {});
|
|
255
|
+
request.data.crList = crList;
|
|
256
|
+
this.apiService.getNextFormData(request);
|
|
257
|
+
}
|
|
258
|
+
getNextFormById(id) {
|
|
259
|
+
const params = "form";
|
|
260
|
+
const criteria = ["_id;eq;" + id + ";STATIC"];
|
|
261
|
+
const payload = this.apiCallService.getPaylodWithCriteria(params, '', criteria, {});
|
|
262
|
+
this.apiService.GetNestedForm(payload);
|
|
263
|
+
}
|
|
264
|
+
updateNextFormData(multipleFormCollection, nextFormUpdateMode, form, custmizedFormValue, editedRowIndex, previousFormFocusField, tableFields) {
|
|
265
|
+
let result = {
|
|
266
|
+
nextFormData: {},
|
|
267
|
+
cdata: {},
|
|
268
|
+
fData: {},
|
|
269
|
+
nextFormUpdateMode: nextFormUpdateMode,
|
|
270
|
+
custmizedFormValue: custmizedFormValue,
|
|
271
|
+
fieldName: "",
|
|
272
|
+
previousFormFocusField: previousFormFocusField,
|
|
273
|
+
editFunction: false,
|
|
274
|
+
updateFormFunction: false,
|
|
275
|
+
getStaticData: false
|
|
276
|
+
};
|
|
277
|
+
let nextFormData = {};
|
|
278
|
+
if (multipleFormCollection.length > 0) {
|
|
279
|
+
nextFormData = multipleFormCollection[multipleFormCollection.length - 1];
|
|
280
|
+
}
|
|
281
|
+
if (nextFormData && nextFormData['next_form_data'] && nextFormData['next_form_data']['custom']) {
|
|
282
|
+
result.cdata = nextFormData['next_form_data']['custom'];
|
|
283
|
+
}
|
|
284
|
+
if (result.nextFormData && nextFormData['next_form_data'] && nextFormData['next_form_data']['form']) {
|
|
285
|
+
result.fData = nextFormData['next_form_data']['form'];
|
|
286
|
+
}
|
|
287
|
+
if (nextFormData['index'] != undefined && nextFormData['index'] >= 0) {
|
|
288
|
+
result.nextFormUpdateMode = true;
|
|
289
|
+
}
|
|
290
|
+
if (nextFormData && nextFormData['current_field'] && nextFormData['current_field']['type'] && (nextFormData['index'] == undefined || nextFormData['index'] == -1)) {
|
|
291
|
+
switch (nextFormData['current_field']['type']) {
|
|
292
|
+
case 'list_of_fields':
|
|
293
|
+
case 'grid_selection':
|
|
294
|
+
if (Array.isArray(result.cdata)) {
|
|
295
|
+
if (form && form.buttons) {
|
|
296
|
+
if (!this.checkIfService.checkAddNewButtonOnGridSelection(form.buttons)) {
|
|
297
|
+
result.fieldName = nextFormData['current_field']['field_name'];
|
|
298
|
+
result.custmizedFormValue[result.fieldName] = result.cdata;
|
|
299
|
+
//this.modifyCustmizedValue(fieldName);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
break;
|
|
304
|
+
default:
|
|
305
|
+
break;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
if (nextFormData && nextFormData['next_form_data'] && nextFormData['next_form_data']['updataModeInPopupType']) {
|
|
309
|
+
result.editFunction = true;
|
|
310
|
+
//this.editedRowData(fData);
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
result.updateFormFunction = true;
|
|
314
|
+
//this.updateDataOnFormField(fData);
|
|
315
|
+
if (editedRowIndex >= 0 || Object.keys(result.fData).length > 0) {
|
|
316
|
+
result.getStaticData = true;
|
|
317
|
+
//this.getStaticDataWithDependentData();
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
let nextFormFocusedFieldname = '';
|
|
321
|
+
for (let key in result.fData) {
|
|
322
|
+
nextFormFocusedFieldname = key;
|
|
323
|
+
break;
|
|
324
|
+
}
|
|
325
|
+
if (tableFields && tableFields.length > 0) {
|
|
326
|
+
for (let i = 0; i < tableFields.length; i++) {
|
|
327
|
+
const element = tableFields[i];
|
|
328
|
+
if (nextFormFocusedFieldname == element.field_name) {
|
|
329
|
+
result.previousFormFocusField = element;
|
|
330
|
+
break;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
result.nextFormData = nextFormData;
|
|
335
|
+
return result;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
MultipleFormService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MultipleFormService, deps: [{ token: i1.CommonFunctionService }, { token: i2.CoreFunctionService }, { token: i3.ApiService }, { token: i4.CheckIfService }, { token: i5.GridCommonFunctionService }, { token: i6.ApiCallService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
339
|
+
MultipleFormService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MultipleFormService, providedIn: 'root' });
|
|
340
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MultipleFormService, decorators: [{
|
|
341
|
+
type: Injectable,
|
|
342
|
+
args: [{
|
|
343
|
+
providedIn: 'root'
|
|
344
|
+
}]
|
|
345
|
+
}], ctorParameters: function () { return [{ type: i1.CommonFunctionService }, { type: i2.CoreFunctionService }, { type: i3.ApiService }, { type: i4.CheckIfService }, { type: i5.GridCommonFunctionService }, { type: i6.ApiCallService }]; } });
|
|
346
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlwbGUtZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9mb3JtL211bHRpcGxlLWZvcm0vbXVsdGlwbGUtZm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7O0FBUTNDLE1BQU0sT0FBTyxtQkFBbUI7SUFFOUIsWUFDVSxxQkFBMkMsRUFDM0MsbUJBQXVDLEVBQ3ZDLFVBQXFCLEVBQ3JCLGNBQTZCLEVBQzdCLHlCQUFtRCxFQUNuRCxjQUE2QjtRQUw3QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXNCO1FBQzNDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBb0I7UUFDdkMsZUFBVSxHQUFWLFVBQVUsQ0FBVztRQUNyQixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3Qiw4QkFBeUIsR0FBekIseUJBQXlCLENBQTBCO1FBQ25ELG1CQUFjLEdBQWQsY0FBYyxDQUFlO0lBQ25DLENBQUM7SUFHTCw4QkFBOEIsQ0FBQyxzQkFBMEIsRUFBQyxpQkFBcUI7UUFDN0UsSUFBSSxNQUFNLEdBQUc7WUFDWCxzQkFBc0IsRUFBQyxzQkFBc0I7U0FDOUMsQ0FBQTtRQUNELElBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUM7WUFDMUMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNuRSxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzFFLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO1lBQ3pELE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztZ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TUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcGlDYWxsU2VydmljZSB9IGZyb20gJy4vLi4vLi4vYXBpL2FwaS1jYWxsL2FwaS1jYWxsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHcmlkQ29tbW9uRnVuY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9ncmlkL2dyaWQtY29tbW9uLWZ1bmN0aW9uL2dyaWQtY29tbW9uLWZ1bmN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcGlTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9hcGkvYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbkZ1bmN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbW1vbi11dGlscy9jb21tb24tZnVuY3Rpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVGdW5jdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tb24tdXRpbHMvY29yZS1mdW5jdGlvbi9jb3JlLWZ1bmN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDaGVja0lmU2VydmljZSB9IGZyb20gJy4uLy4uL2NoZWNrLWlmL2NoZWNrLWlmLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTXVsdGlwbGVGb3JtU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjb21tb25GdW5jdGlvblNlcnZpY2U6Q29tbW9uRnVuY3Rpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlRnVuY3Rpb25TZXJ2aWNlOkNvcmVGdW5jdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwaVNlcnZpY2U6QXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hlY2tJZlNlcnZpY2U6Q2hlY2tJZlNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGdyaWRDb21tb25GdW5jdGlvblNlcnZpY2U6R3JpZENvbW1vbkZ1bmN0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgYXBpQ2FsbFNlcnZpY2U6QXBpQ2FsbFNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuXHJcbiAgc2V0UHJldmlvdXNGb3JtVGFyZ2V0RmllbGREYXRhKG11bHRpcGxlRm9ybUNvbGxlY3Rpb246YW55LGZvcm1WYWx1ZVdpdGhDdXN0OmFueSl7XHJcbiAgICBsZXQgcmVzdWx0ID0ge1xyXG4gICAgICBtdWx0aXBsZUZvcm1Db2xsZWN0aW9uOm11bHRpcGxlRm9ybUNvbGxlY3Rpb25cclxuICAgIH1cclxuICAgIGlmKHJlc3VsdC5tdWx0aXBsZUZvcm1Db2xsZWN0aW9uLmxlbmd0aCA+IDApe1xyXG4gICAgICBjb25zdCBwcmV2aW91c0Zvcm1JbmRleCA9IHJlc3VsdC5tdWx0aXBsZUZvcm1Db2xsZWN0aW9uLmxlbmd0aCAtIDE7XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzRm9ybURhdGEgPSByZXN1bHQubXVsdGlwbGVGb3JtQ29sbGVjdGlvbltwcmV2aW91c0Zvcm1JbmRleF07XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzRm9ybUZpZWxkID0gcHJldmlvdXNGb3JtRGF0YS5jdXJyZW50X2ZpZWxkO1xyXG4gICAgICBjb25zdCBmb3JtRGF0YSA9IHByZXZpb3VzRm9ybURhdGEubmV4dF9mb3JtX2RhdGE7XHJcbiAgICAgIGlmKHByZXZpb3VzRm9ybUZpZWxkICYmIHByZXZpb3VzRm9ybUZpZWxkLmFkZF9uZXdfdGFyZ2V0X2ZpZWxkKXtcclxuICAgICAgICBjb25zdCB0YXJnYXRlRmllbGROYW1lID0gcHJldmlvdXNGb3JtRmllbGQuYWRkX25ld190YXJnZXRfZmllbGQ7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEZvcm1WYWx1ZSA9IGZvcm1WYWx1ZVdpdGhDdXN0O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRUYXJnZXRGaWVsZFZhbHVlID0gY3VycmVudEZvcm1WYWx1ZVt0YXJnYXRlRmllbGROYW1lXVxyXG4gICAgICAgIGZvcm1EYXRhW3RhcmdhdGVGaWVsZE5hbWVdID0gY3VycmVudFRhcmdldEZpZWxkVmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgcmVzdWx0Lm11bHRpcGxlRm9ybUNvbGxlY3Rpb25bcHJldmlvdXNGb3JtSW5kZXhdWyduZXh0X2Zvcm1fZGF0YSddID0gZm9ybURhdGE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0Lm11bHRpcGxlRm9ybUNvbGxlY3Rpb247XHJcbiAgfVxyXG4gIGdldE5leHRGb3JtT2JqZWN0KG5leHRGb3JtRGF0YTphbnksbmV4dDphbnkpe1xyXG4gICAgY29uc3QgZm9ybSA9IG5leHRGb3JtRGF0YS5mb3JtTmFtZTtcclxuICAgIGNvbnN0IGZpZWxkX25hbWUgPSBuZXh0Rm9ybURhdGEuZmllbGRfbmFtZTtcclxuICAgIGNvbnN0IGZvcm1fZmllbGRfbmFtZSA9IG5leHRGb3JtRGF0YS5mb3JtX2ZpZWxkX25hbWU7XHJcbiAgICBjb25zdCBmaWVsZCA9IHtcclxuICAgICAgJ2FkZF9uZXdfZm9ybSc6IGZvcm0sXHJcbiAgICAgICdhZGRfbmV4dF9mb3JtX2J1dHRvbic6IG5leHQsXHJcbiAgICAgICdmaWVsZF9uYW1lJzogZmllbGRfbmFtZSxcclxuICAgICAgJ3R5cGUnOiAnaGlkZGVuJyxcclxuICAgICAgJ2Zvcm1fZmllbGRfbmFtZSc6IGZvcm1fZmllbGRfbmFtZSxcclxuICAgICAgJ2Zvcm1fdmFsdWVfaW5kZXgnIDogMCxcclxuICAgICAgJ21vdmVGaWVsZHNUb05ld0Zvcm0nIDogWydlbXBsb3llZV9uYW1lI2FkZF9hc3NpZ25tZW50cy5yZXNvdXJjZV9uYW1lJ11cclxuICAgIH07XHJcbiAgICByZXR1cm4gZmllbGQ7XHJcbiAgfVxyXG4gIGdldE5leHRGb3JtRGF0YShmb3JtRGF0YTphbnksbGlzdE9mRmllbGRzVXBkYXRlSW5kZXg6YW55KXtcclxuICAgIGxldCByZXN1bHQgPXtcclxuICAgICAgdXBkYXRlQWRkTmV3OmZhbHNlLFxyXG4gICAgICBwYXlsb2FkOnt9XHJcbiAgICB9XHJcbiAgICBpZihmb3JtRGF0YSl7XHJcbiAgICAgIGxldCBwYXJlbnQ6YW55ID0gJyc7XHJcbiAgICAgIGxldCBjaGlsZDphbnkgPSAnJztcclxuICAgICAgaWYoZm9ybURhdGFbJ3BhcmVudF9maWVsZCddKXtcclxuICAgICAgICBwYXJlbnQgPSBmb3JtRGF0YVsncGFyZW50X2ZpZWxkJ107XHJcbiAgICAgIH1cclxuICAgICAgaWYoZm9ybURhdGFbJ2N1cnJlbnRfZmllbGQnXSl7XHJcbiAgICAgICAgY2hpbGQgPSBmb3JtRGF0YVsnY3VycmVudF9maWVsZCddO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBmb3JtVmFsdWUgPSBmb3JtRGF0YVsnZGF0YSddO1xyXG4gICAgICBsZXQgZmllbGRWYWx1ZTphbnkgPSAnJztcclxuICAgICAgaWYocGFyZW50ICE9ICcnKXtcclxuICAgICAgICBpZihwYXJlbnQudHlwZSA9PSAnbGlzdF9vZl9maWVsZHMnKXtcclxuICAgICAgICAgIGZpZWxkVmFsdWUgPSBmb3JtVmFsdWVbcGFyZW50LmZpZWxkX25hbWVdW2xpc3RPZkZpZWxkc1VwZGF0ZUluZGV4XVtjaGlsZC5maWVsZF9uYW1lXTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIGZpZWxkVmFsdWUgPSBmb3JtVmFsdWVbcGFyZW50LmZpZWxkX25hbWVdW2NoaWxkLmZpZWxkX25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgZmllbGRWYWx1ZSA9IGZvcm1WYWx1ZVtjaGlsZC5maWVsZF9uYW1lXTtcclxuICAgICAgfVxyXG4gICAgICBpZihmaWVsZFZhbHVlICYmIGZpZWxkVmFsdWUuX2lkICYmIGZpZWxkVmFsdWUuX2lkICE9ICcnKXtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGZpZWxkVmFsdWUuX2lkKTtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSBjaGlsZC5hcGlfcGFyYW1zO1xyXG4gICAgICAgIGlmKHBhcmFtcyAmJiBwYXJhbXMgIT0gJycpe1xyXG4gICAgICAgICAgY29uc3QgY3JpdGVyaWEgPSBbXCJfaWQ7ZXE7XCIrZmllbGRWYWx1ZS5faWQrXCI7U1RBVElDXCJdXHJcbiAgICAgICAgICBjb25zdCBjckxpc3QgPSB0aGlzLmFwaUNhbGxTZXJ2aWNlLmdldENyaXRlcmlhTGlzdChjcml0ZXJpYSx7fSk7XHJcbiAgICAgICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5hcGlDYWxsU2VydmljZS5nZXREYXRhRm9yR3JpZCgxLHt9LHsnbmFtZSc6cGFyYW1zfSxbXSx7fSwnJyk7XHJcbiAgICAgICAgICBwYXlsb2FkLmRhdGEuY3JMaXN0ID0gY3JMaXN0O1xyXG4gICAgICAgICAgLy90aGlzLmFwaVNlcnZpY2UuZ2V0R3JpZERhdGEocGF5bG9hZCk7XHJcbiAgICAgICAgICByZXN1bHQudXBkYXRlQWRkTmV3ID0gdHJ1ZTtcclxuICAgICAgICAgIHJlc3VsdC5wYXlsb2FkID0gcGF5bG9hZDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG4gIHN0b3JlRm9ybURldGFpbHMocGFyZW50X2ZpZWxkOmFueSxmaWVsZDphbnksZm9ybVZhbHVlOmFueSxmb3JtVmFsdWVXaXRoQ3VzdG9tRGF0YTphbnksdXBkYXRlTW9kZTpib29sZWFuLG5leHRGb3JtRGF0YTphbnksbGFzdFR5cGVhaGVhZFR5cGVWYWx1ZTphbnksbXVsdGlwbGVGb3JtQ29sbGVjdGlvbjphbnksY3VycmVudE1lbnU6YW55LHBGb3JtOmFueSxsaXN0T2ZGaWVsZFVwZGF0ZU1vZGU6YW55LGxpc3RPZkZpZWxkc1VwZGF0ZUluZGV4OmFueSxhZGROZXdSZWNvcmQ6YW55LGVuYWJsZU5leHRCdXR0b246YW55LGluZGV4PzpudW1iZXIpe1xyXG4gICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgbXVsdGlwbGVGb3JtQ29sbGVjdGlvbjptdWx0aXBsZUZvcm1Db2xsZWN0aW9uLFxyXG4gICAgICBmb3JtOnt9LFxyXG4gICAgICBpZDpcIlwiLFxyXG4gICAgICBhZGROZXdSZWNvcmQ6YWRkTmV3UmVjb3JkLFxyXG4gICAgICBjcml0ZXJpYTpbJyddLFxyXG4gICAgICBwYXJhbXM6JydcclxuICAgIH1cclxuICAgIGxldCB0YXJnZXRGaWVsZE5hbWU6YW55ID17fVxyXG4gICAgdGFyZ2V0RmllbGROYW1lWydmb3JtJ10gPSB7fVxyXG4gICAgdGFyZ2V0RmllbGROYW1lWydjdXN0b20nXSA9IFtdO1xyXG4gICAgbGV0IGZvcm1EYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmb3JtVmFsdWVXaXRoQ3VzdG9tRGF0YSkpO1xyXG4gICAgaWYoZmllbGQgJiYgZmllbGQuZm9ybV9maWVsZF9uYW1lKXtcclxuICAgICAgY29uc3QgbmV4dEZvcm1SZWZlcmVuY2UgPSB7XHJcbiAgICAgICAgJ19pZCc6bmV4dEZvcm1EYXRhLl9pZCxcclxuICAgICAgICAnbmFtZSc6bmV4dEZvcm1EYXRhLm5hbWVcclxuICAgICAgfVxyXG4gICAgICBmb3JtRGF0YVtmaWVsZC5mb3JtX2ZpZWxkX25hbWVdID0gbmV4dEZvcm1SZWZlcmVuY2U7XHJcbiAgICAgIHVwZGF0ZU1vZGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5jb3JlRnVuY3Rpb25TZXJ2aWNlLmlzTm90QmxhbmsoZmllbGQuYWRkX25ld190YXJnZXRfZmllbGQpKXtcclxuICAgICAgdGFyZ2V0RmllbGROYW1lWydmb3JtJ11bZmllbGQuYWRkX25ld190YXJnZXRfZmllbGRdID0gbGFzdFR5cGVhaGVhZFR5cGVWYWx1ZVxyXG4gICAgfWVsc2UgaWYoZmllbGQpe1xyXG4gICAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcclxuICAgICAgICBjYXNlIFwibGlzdF9vZl9maWVsZHNcIjpcclxuICAgICAgICBjYXNlIFwiZ3JpZF9zZWxlY3Rpb25cIjpcclxuICAgICAgICAgIGxldCBjdXJyZW50RmllbGREYXRhID0gZm9ybURhdGFbZmllbGQuZmllbGRfbmFtZV07XHJcbiAgICAgICAgICBpZihjdXJyZW50RmllbGREYXRhICYmIEFycmF5LmlzQXJyYXkoY3VycmVudEZpZWxkRGF0YSkpe1xyXG4gICAgICAgICAgICAgIGlmKGluZGV4ICE9IHVuZGVmaW5lZCAmJiBpbmRleCA+PSAwKXtcclxuICAgICAgICAgICAgICAgIHRhcmdldEZpZWxkTmFtZVsnZm9ybSddID0gY3VycmVudEZpZWxkRGF0YVtpbmRleF07XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRGaWVsZE5hbWVbJ3VwZGF0YU1vZGVJblBvcHVwVHlwZSddID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRGaWVsZE5hbWVbJ2N1c3RvbSddID0gY3VycmVudEZpZWxkRGF0YTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKHRoaXMuY29yZUZ1bmN0aW9uU2VydmljZS5pc05vdEJsYW5rKGZpZWxkLm1vdmVGaWVsZHNUb05ld0Zvcm0pKXtcclxuICAgICAgaWYoZmllbGQubW92ZUZpZWxkc1RvTmV3Rm9ybSAmJiBmaWVsZC5tb3ZlRmllbGRzVG9OZXdGb3JtLmxlbmd0aCA+IDApe1xyXG4gICAgICAgIGZpZWxkLm1vdmVGaWVsZHNUb05ld0Zvcm0uZm9yRWFjaCgoa2V5VmFsdWU6YW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBzb3VyY2VUYXJnZXQgPSBrZXlWYWx1ZS5zcGxpdChcIiNcIik7XHJcbiAgICAgICAgICBsZXQga2V5ID0gc291cmNlVGFyZ2V0WzBdO1xyXG4gICAgICAgICAgbGV0IHZhbHVlRmllbGQgPSBzb3VyY2VUYXJnZXRbMV07XHJcbiAgICAgICAgICBsZXQgbXVsdGlDb2xsZWN0aW9uID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZXN1bHQubXVsdGlwbGVGb3JtQ29sbGVjdGlvbikpO1xyXG4gICAgICAgICAgbGV0IGZvcm1WYWx1ZVdpdGhNdWx0aWNvbGxlY3Rpb24gPSB0aGlzLmNvbW1vbkZ1bmN0aW9uU2VydmljZS5nZXRGb3JtRGF0YUluTXVsdGlmb3JtQ29sbGVjdGlvbihtdWx0aUNvbGxlY3Rpb24sZm9ybVZhbHVlKTtcclxuICAgICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuY29tbW9uRnVuY3Rpb25TZXJ2aWNlLmdldE9iamVjdFZhbHVlKHZhbHVlRmllbGQsZm9ybVZhbHVlV2l0aE11bHRpY29sbGVjdGlvbik7XHJcbiAgICAgICAgICB0YXJnZXRGaWVsZE5hbWVbJ2Zvcm0nXVtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBkYXRhID0ge1xyXG4gICAgICBcImNvbGxlY3Rpb25fbmFtZVwiOmN1cnJlbnRNZW51Lm5hbWUsXHJcbiAgICAgIFwiZGF0YVwiOmZvcm1EYXRhLFxyXG4gICAgICBcImZvcm1cIjpwRm9ybSxcclxuICAgICAgXCJwYXJlbnRfZmllbGRcIjpwYXJlbnRfZmllbGQsXHJcbiAgICAgIFwiY3VycmVudF9maWVsZFwiOmZpZWxkLFxyXG4gICAgICBcIm5leHRfZm9ybV9kYXRhXCI6dGFyZ2V0RmllbGROYW1lLFxyXG4gICAgICBcInVwZGF0ZU1vZGVcIiA6IHVwZGF0ZU1vZGUsXHJcbiAgICAgIFwiZm9ybV92YWx1ZVwiIDogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmb3JtVmFsdWUpKSxcclxuICAgICAgXCJpbmRleFwiOiAtMSxcclxuICAgICAgXCJsaXN0T2ZGaWVsZFVwZGF0ZU1vZGVcIjpsaXN0T2ZGaWVsZFVwZGF0ZU1vZGUsXHJcbiAgICAgIFwibGlzdE9mRmllbGRzVXBkYXRlSW5kZXhcIjpsaXN0T2ZGaWVsZHNVcGRhdGVJbmRleFxyXG4gICAgfVxyXG4gICAgaWYoZmllbGQpe1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSBmaWVsZC50eXBlO1xyXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgY2FzZSBcImxpc3Rfb2ZfZmllbGRzXCI6XHJcbiAgICAgICAgICBjYXNlIFwiZ3JpZF9zZWxlY3Rpb25cIjpcclxuICAgICAgICAgICAgaWYoaW5kZXggIT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgICBkYXRhWydpbmRleCddID0gaW5kZXg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgcmVzdWx0Lm11bHRpcGxlRm9ybUNvbGxlY3Rpb24ucHVzaChkYXRhKTtcclxuICAgIGlmKGZpZWxkICYmIGZpZWxkLnR5cGUgPT0gXCJsaXN0X29mX2ZpZWxkc1wiKXtcclxuICAgICAgbGV0IGJ1dHRvbkxhYmVsID0gXCJcIjtcclxuICAgICAgaWYoaW5kZXggIT0gdW5kZWZpbmVkICYmIGluZGV4ID49IDApe1xyXG4gICAgICAgIGJ1dHRvbkxhYmVsID0gJ1VwZGF0ZSc7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIGJ1dHRvbkxhYmVsID0gJ0FkZCc7XHJcbiAgICAgIH1cclxuICAgICAgaWYoZmllbGQubGlzdF9vZl9maWVsZHMgJiYgZmllbGQubGlzdF9vZl9maWVsZHMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgbGV0IGZpZWxkTGlzdDphbnkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZpZWxkLmxpc3Rfb2ZfZmllbGRzKSk7XHJcbiAgICAgICAgaWYoZmllbGRMaXN0ICYmIGZpZWxkTGlzdC5sZW5ndGggPiAwICYmIGluZGV4ID09IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgICBsZXQgY3VyRmllbGQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZpZWxkKSk7XHJcbiAgICAgICAgICBjdXJGaWVsZFsnYWRkX2xpc3RfZmllbGQnXSA9ICdhZGQnO1xyXG4gICAgICAgICAgZmllbGRMaXN0LnB1c2goY3VyRmllbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQuZm9ybSA9IHtcclxuICAgICAgICAgIFwiZGV0YWlsc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJjbGFzc1wiOiBcIlwiLFxyXG4gICAgICAgICAgICAgIFwiY29sbGVjdGlvbl9uYW1lXCI6XCJcIixcclxuICAgICAgICAgICAgICBcImJ1bGtfdXBkYXRlXCI6ZmFsc2VcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0YWJfbGlzdF9idXR0b25zXCI6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIFwibGFiZWxcIjogYnV0dG9uTGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgIFwib25jbGlja1wiOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhcGlcIjogXCJhZGRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImFjdGlvbl9uYW1lXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjbG9zZV9mb3JtX29uX3N1Y2Nlc1wiOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZmllbGRfbmFtZVwiOiBcInNhdmVcIixcclxuICAgICAgICAgICAgICAgICAgXCJhcGlfcGFyYW1zXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwic2hvd19pZlwiOlwiXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZV9pZlwiOlwiXCJcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIFwibGFiZWxcIjogXCJPa1wiLFxyXG4gICAgICAgICAgICAgICAgXCJvbmNsaWNrXCI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhcGlcIjogXCJjbG9zZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFjdGlvbl9uYW1lXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY2xvc2VfZm9ybV9vbl9zdWNjZXNcIjogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICBcImZpZWxkX25hbWVcIjogXCJcIixcclxuICAgICAgICAgICAgICAgIFwiYXBpX3BhcmFtc1wiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgXCJzaG93X2lmXCI6XCJcIixcclxuICAgICAgICAgICAgICAgIFwiZGlzYWJsZV9pZlwiOlwiXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgXSxcclxuICAgICAgICAgIFwidGFibGVGaWVsZHNcIjogZmllbGRMaXN0LFxyXG4gICAgICAgICAgXCJhcGlfcGFyYW1zXCI6IG51bGwsXHJcbiAgICAgICAgICBcImxhYmVsXCI6IGZpZWxkLmxhYmVsXHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIGlmKGZpZWxkLmZvcm0gJiYgZmllbGQuZm9ybS5faWQpe1xyXG4gICAgICAgICAgcmVzdWx0LmlkID0gZmllbGQuZm9ybS5faWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9ZWxzZXtcclxuICAgICAgaWYoZmllbGQuYWRkX25ld19mb3JtICYmIGZpZWxkLmFkZF9uZXdfZm9ybS5faWQpe1xyXG4gICAgICAgIHJlc3VsdC5pZCA9IGZpZWxkLmFkZF9uZXdfZm9ybS5faWQ7XHJcbiAgICAgIH1cclxuICAgICAgcmVzdWx0LmFkZE5ld1JlY29yZCA9IGZhbHNlO1xyXG4gICAgICBpZighZW5hYmxlTmV4dEJ1dHRvbiAmJiBmaWVsZCAmJiBmaWVsZC5maW5kX2NoaWxkX2Zvcm0pe1xyXG4gICAgICAgIGxldCBjcmkgPSBcImNvbGxlY3Rpb24ubmFtZTtlcTtcIiArIGN1cnJlbnRNZW51Lm5hbWUgKyBcIjtTVEFUSUNcIjtcclxuICAgICAgICByZXN1bHQuY3JpdGVyaWEgPSBbXVxyXG4gICAgICAgIHJlc3VsdC5jcml0ZXJpYS5wdXNoKGNyaSk7XHJcbiAgICAgICAgcmVzdWx0LnBhcmFtcyA9ICdzY2hlZHVsZWRfdGFza19mb3JtJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGdldERhdGFGb3JOZXh0Rm9ybShyZXFQYXJhbXM6c3RyaW5nLHJlcUNyaXRlcmlhOmFueSkge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuYXBpQ2FsbFNlcnZpY2UuZ2V0RGF0YUZvckdyaWQoMSwge30sIHsgJ25hbWUnOiByZXFQYXJhbXMgfSwgW10sIHt9LCAnJyk7XHJcbiAgICBjb25zdCBjckxpc3QgPSB0aGlzLmFwaUNhbGxTZXJ2aWNlLmdldENyaXRlcmlhTGlzdChyZXFDcml0ZXJpYSwge30pO1xyXG4gICAgcmVxdWVzdC5kYXRhLmNyTGlzdCA9IGNyTGlzdDtcclxuICAgIHRoaXMuYXBpU2VydmljZS5nZXROZXh0Rm9ybURhdGEocmVxdWVzdCk7XHJcbiAgfVxyXG4gIGdldE5leHRGb3JtQnlJZChpZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBwYXJhbXMgPSBcImZvcm1cIjtcclxuICAgIGNvbnN0IGNyaXRlcmlhID0gW1wiX2lkO2VxO1wiICsgaWQgKyBcIjtTVEFUSUNcIl07XHJcbiAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5hcGlDYWxsU2VydmljZS5nZXRQYXlsb2RXaXRoQ3JpdGVyaWEocGFyYW1zLCAnJywgY3JpdGVyaWEsIHt9KTtcclxuICAgIHRoaXMuYXBpU2VydmljZS5HZXROZXN0ZWRGb3JtKHBheWxvYWQpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTmV4dEZvcm1EYXRhKG11bHRpcGxlRm9ybUNvbGxlY3Rpb246YW55LG5leHRGb3JtVXBkYXRlTW9kZTpib29sZWFuLGZvcm06YW55LGN1c3RtaXplZEZvcm1WYWx1ZTphbnksZWRpdGVkUm93SW5kZXg6YW55LHByZXZpb3VzRm9ybUZvY3VzRmllbGQ6YW55LHRhYmxlRmllbGRzOmFueSl7XHJcbiAgICBsZXQgcmVzdWx0ID0ge1xyXG4gICAgICBuZXh0Rm9ybURhdGE6IHt9LFxyXG4gICAgICBjZGF0YTp7fSxcclxuICAgICAgZkRhdGE6e30sXHJcbiAgICAgIG5leHRGb3JtVXBkYXRlTW9kZTpuZXh0Rm9ybVVwZGF0ZU1vZGUsXHJcbiAgICAgIGN1c3RtaXplZEZvcm1WYWx1ZTpjdXN0bWl6ZWRGb3JtVmFsdWUsXHJcbiAgICAgIGZpZWxkTmFtZTpcIlwiLFxyXG4gICAgICBwcmV2aW91c0Zvcm1Gb2N1c0ZpZWxkOnByZXZpb3VzRm9ybUZvY3VzRmllbGQsXHJcbiAgICAgIGVkaXRGdW5jdGlvbjpmYWxzZSxcclxuICAgICAgdXBkYXRlRm9ybUZ1bmN0aW9uOmZhbHNlLFxyXG4gICAgICBnZXRTdGF0aWNEYXRhOmZhbHNlXHJcbiAgICB9XHJcbiAgICBsZXQgbmV4dEZvcm1EYXRhOmFueSA9IHt9XHJcbiAgICBpZihtdWx0aXBsZUZvcm1Db2xsZWN0aW9uLmxlbmd0aCA+IDApe1xyXG4gICAgICBuZXh0Rm9ybURhdGEgPSBtdWx0aXBsZUZvcm1Db2xsZWN0aW9uW211bHRpcGxlRm9ybUNvbGxlY3Rpb24ubGVuZ3RoIC0xXTtcclxuICAgIH1cclxuICAgIGlmKG5leHRGb3JtRGF0YSAmJiBuZXh0Rm9ybURhdGFbJ25leHRfZm9ybV9kYXRhJ10gJiYgbmV4dEZvcm1EYXRhWyduZXh0X2Zvcm1fZGF0YSddWydjdXN0b20nXSl7XHJcbiAgICAgIHJlc3VsdC5jZGF0YSA9IG5leHRGb3JtRGF0YVsnbmV4dF9mb3JtX2RhdGEnXVsnY3VzdG9tJ107XHJcbiAgICB9XHJcbiAgICBpZihyZXN1bHQubmV4dEZvcm1EYXRhICYmIG5leHRGb3JtRGF0YVsnbmV4dF9mb3JtX2RhdGEnXSAmJiBuZXh0Rm9ybURhdGFbJ25leHRfZm9ybV9kYXRhJ11bJ2Zvcm0nXSl7XHJcbiAgICAgIHJlc3VsdC5mRGF0YSA9IG5leHRGb3JtRGF0YVsnbmV4dF9mb3JtX2RhdGEnXVsnZm9ybSddO1xyXG4gICAgfVxyXG4gICAgaWYobmV4dEZvcm1EYXRhWydpbmRleCddICE9IHVuZGVmaW5lZCAmJiBuZXh0Rm9ybURhdGFbJ2luZGV4J10gPj0gMCl7XHJcbiAgICAgIHJlc3VsdC5uZXh0Rm9ybVVwZGF0ZU1vZGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYobmV4dEZvcm1EYXRhICYmIG5leHRGb3JtRGF0YVsnY3VycmVudF9maWVsZCddICYmIG5leHRGb3JtRGF0YVsnY3VycmVudF9maWVsZCddWyd0eXBlJ10gJiYgKG5leHRGb3JtRGF0YVsnaW5kZXgnXSA9PSB1bmRlZmluZWQgfHwgbmV4dEZvcm1EYXRhWydpbmRleCddID09IC0xKSl7XHJcbiAgICAgIHN3aXRjaCAobmV4dEZvcm1EYXRhWydjdXJyZW50X2ZpZWxkJ11bJ3R5cGUnXSkge1xyXG4gICAgICAgIGNhc2UgJ2xpc3Rfb2ZfZmllbGRzJzpcclxuICAgICAgICBjYXNlICdncmlkX3NlbGVjdGlvbic6XHJcbiAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3VsdC5jZGF0YSkpe1xyXG4gICAgICAgICAgICBpZihmb3JtICYmIGZvcm0uYnV0dG9ucyl7XHJcbiAgICAgICAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlNlcnZpY2UuY2hlY2tBZGROZXdCdXR0b25PbkdyaWRTZWxlY3Rpb24oZm9ybS5idXR0b25zKSl7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuZmllbGROYW1lID0gbmV4dEZvcm1EYXRhWydjdXJyZW50X2ZpZWxkJ11bJ2ZpZWxkX25hbWUnXTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5jdXN0bWl6ZWRGb3JtVmFsdWVbcmVzdWx0LmZpZWxkTmFtZV0gPSByZXN1bHQuY2RhdGE7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMubW9kaWZ5Q3VzdG1pemVkVmFsdWUoZmllbGROYW1lKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYobmV4dEZvcm1EYXRhICYmIG5leHRGb3JtRGF0YVsnbmV4dF9mb3JtX2RhdGEnXSAmJiBuZXh0Rm9ybURhdGFbJ25leHRfZm9ybV9kYXRhJ11bJ3VwZGF0YU1vZGVJblBvcHVwVHlwZSddKXtcclxuICAgICAgcmVzdWx0LmVkaXRGdW5jdGlvbiA9IHRydWU7XHJcbiAgICAgIC8vdGhpcy5lZGl0ZWRSb3dEYXRhKGZEYXRhKTtcclxuICAgIH1lbHNle1xyXG4gICAgICByZXN1bHQudXBkYXRlRm9ybUZ1bmN0aW9uPXRydWU7XHJcbiAgICAgIC8vdGhpcy51cGRhdGVEYXRhT25Gb3JtRmllbGQoZkRhdGEpO1xyXG4gICAgICBpZihlZGl0ZWRSb3dJbmRleCA+PSAwIHx8IE9iamVjdC5rZXlzKHJlc3VsdC5mRGF0YSkubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgcmVzdWx0LmdldFN0YXRpY0RhdGEgPSB0cnVlO1xyXG4gICAgICAgIC8vdGhpcy5nZXRTdGF0aWNEYXRhV2l0aERlcGVuZGVudERhdGEoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IG5leHRGb3JtRm9jdXNlZEZpZWxkbmFtZSA9ICcnO1xyXG4gICAgZm9yIChsZXQga2V5IGluIHJlc3VsdC5mRGF0YSkge1xyXG4gICAgICBuZXh0Rm9ybUZvY3VzZWRGaWVsZG5hbWUgPSBrZXk7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgaWYgKHRhYmxlRmllbGRzICYmIHRhYmxlRmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWJsZUZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0YWJsZUZpZWxkc1tpXTtcclxuICAgICAgICBpZihuZXh0Rm9ybUZvY3VzZWRGaWVsZG5hbWUgPT0gZWxlbWVudC5maWVsZF9uYW1lKXtcclxuICAgICAgICAgIHJlc3VsdC5wcmV2aW91c0Zvcm1Gb2N1c0ZpZWxkID0gZWxlbWVudDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlc3VsdC5uZXh0Rm9ybURhdGEgPSBuZXh0Rm9ybURhdGE7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxufVxyXG4iXX0=
|