@ieeesa-npm/groups 0.1.6 → 0.1.7

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.
@@ -131,6 +131,7 @@
131
131
  }
132
132
  },
133
133
  "errors": {
134
+ "ER1000": "Allowed group types are not found for the selected group!",
134
135
  "1001": "Group Name already in use.",
135
136
  "1002": "Group Short Name already in use.",
136
137
  "1003": "Parent Group is inactive for the provided subgroup.",
@@ -8,6 +8,7 @@ import { GroupsValidationPatterns } from "../../assets/form-validations";
8
8
  import { HttpErrorResponse } from "@angular/common/http";
9
9
  import { MatDialogModule } from "@angular/material/dialog";
10
10
  import { Subject, takeUntil } from "rxjs";
11
+ import { FormStatus } from "../../models/form-status.model";
11
12
  import * as i0 from "@angular/core";
12
13
  import * as i1 from "../../services/groups.service";
13
14
  import * as i2 from "@ieeesa-npm/utility";
@@ -62,27 +63,40 @@ export class CreateGroupComponent {
62
63
  .subscribe({
63
64
  next: (res) => {
64
65
  if (res?.status) {
65
- this.groupTypes = Object.entries(res.body.configFieldValue).map(
66
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
67
- ([id, item]) => ({
68
- id: id,
69
- name: item.name,
70
- }));
71
- if (this.groupTypes.length) {
66
+ this.selectedParentGroupInfo = this.groupsService?.getSelectedGroupInfo();
67
+ const configFieldValue = res?.body?.configFieldValue;
68
+ if (this.selectedParentGroupInfo?.groupType) {
69
+ const allowedGroupType = configFieldValue[this.selectedParentGroupInfo?.groupType]
70
+ ?.businessRule?.allowedGroupType;
71
+ if (allowedGroupType?.length) {
72
+ this.groupTypes = allowedGroupType.map((groupTypeId) => ({
73
+ id: groupTypeId,
74
+ name: configFieldValue[groupTypeId]?.name,
75
+ }));
76
+ }
77
+ else {
78
+ this.showAlertMessage(screenTexts?.errors?.ER1000, AlertType.ERROR);
79
+ }
80
+ }
81
+ else {
82
+ this.groupTypes = Object.entries(configFieldValue).map(([id, item]) => ({
83
+ id,
84
+ name: item?.name,
85
+ }));
86
+ }
87
+ if (this.groupTypes?.length) {
72
88
  this.createFormGroup();
73
89
  }
90
+ else {
91
+ this.showAlertMessage(screenTexts?.errors?.["1010"], AlertType.ERROR);
92
+ }
74
93
  }
75
94
  },
76
95
  error: (error) => {
77
96
  const errorCodes = error?.error?.body?.errorCodes;
78
97
  if (Array.isArray(errorCodes)) {
79
98
  const errorMessage = this.groupsService.parseErrorMessage(errorCodes);
80
- this.alertService.showMessage({
81
- status: "custom",
82
- message: errorMessage,
83
- alertType: AlertType.ERROR,
84
- isCloseNeeded: true,
85
- });
99
+ this.showAlertMessage(errorMessage, AlertType.ERROR);
86
100
  }
87
101
  else if (error && error instanceof HttpErrorResponse) {
88
102
  this.globalErrorHandlerService.handleError(error);
@@ -184,7 +198,6 @@ export class CreateGroupComponent {
184
198
  },
185
199
  ],
186
200
  };
187
- this.selectedParentGroupInfo = this.groupsService.getSelectedGroupInfo();
188
201
  if (this.selectedParentGroupInfo?.groupId) {
189
202
  this.updateCreateFormGroup(this.selectedParentGroupInfo);
190
203
  }
@@ -215,7 +228,7 @@ export class CreateGroupComponent {
215
228
  */
216
229
  onFormSubmit(form) {
217
230
  form[0]?.markAllAsTouched();
218
- if (form[0].status === "VALID") {
231
+ if (form[0].status === FormStatus.VALID) {
219
232
  const formResponse = form[0].getRawValue();
220
233
  const createGroupPayload = {
221
234
  payload: {
@@ -223,8 +236,8 @@ export class CreateGroupComponent {
223
236
  groupShortName: formResponse?.shortName,
224
237
  groupType: formResponse?.groupType?.id,
225
238
  groupDesc: formResponse?.groupScope,
226
- groupParentId: this.selectedParentGroupInfo?.groupId ?? null
227
- }
239
+ groupParentId: this.selectedParentGroupInfo?.groupId ?? null,
240
+ },
228
241
  };
229
242
  this.groupsService
230
243
  .createGroup(createGroupPayload)
@@ -239,12 +252,7 @@ export class CreateGroupComponent {
239
252
  const errorCodes = error?.error?.body?.errorCodes;
240
253
  if (Array.isArray(errorCodes)) {
241
254
  const errorMessage = this.groupsService.parseErrorMessage(errorCodes);
242
- this.alertService.showMessage({
243
- status: "custom",
244
- message: errorMessage,
245
- alertType: AlertType.ERROR,
246
- isCloseNeeded: true,
247
- });
255
+ this.showAlertMessage(errorMessage, AlertType.ERROR);
248
256
  }
249
257
  else if (error && error instanceof HttpErrorResponse) {
250
258
  this.globalErrorHandlerService.handleError(error);
@@ -261,6 +269,21 @@ export class CreateGroupComponent {
261
269
  getFormGroupReference(form) {
262
270
  this.form = form[0];
263
271
  }
272
+ /**
273
+ * Handles alerts for error, warning.
274
+ * @param {(string | string[])} message -error or warning message
275
+ * @param {AlertType} alertType
276
+ * @return -returns nothing
277
+ * @memberof CreateGroupComponent
278
+ */
279
+ showAlertMessage(message, alertType) {
280
+ this.alertService.showMessage({
281
+ status: "custom",
282
+ message: message,
283
+ alertType: alertType,
284
+ isCloseNeeded: true,
285
+ });
286
+ }
264
287
  /**
265
288
  * Emits form cancel event.
266
289
  * @return -returns nothing
@@ -288,4 +311,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImpor
288
311
  }], formCancel: [{
289
312
  type: Output
290
313
  }] } });
291
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvY3JlYXRlLWdyb3VwL2NyZWF0ZS1ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL2NyZWF0ZS1ncm91cC9jcmVhdGUtZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBR1osTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFJTCxvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLFNBQVMsR0FDVixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFDTCxhQUFhLEVBQ2IsU0FBUyxHQUVWLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxLQUFLLFdBQVcsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUd6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBSTFDOzs7OztHQUtHO0FBV0gsTUFBTSxPQUFPLG9CQUFvQjtJQXVCL0IsNkRBQTZEO0lBQzdEO0lBQ0UsMENBQTBDO0lBQ2xDLGFBQTRCO0lBQ3BDLDBDQUEwQztJQUNsQyx5QkFBb0Q7SUFDNUQsMENBQTBDO0lBQ25DLFlBQTJCLENBQUMsNkNBQTZDOztRQUp4RSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUU1Qiw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBRXJELGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBN0JwQyxhQUFRLEdBQXFCLElBQUksT0FBTyxFQUFXLENBQUM7UUFDcEQ7OztXQUdHO1FBQ08sdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsRDs7O1dBR0c7UUFDTyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxQyxvQkFBZSxHQUFHLFdBQVcsRUFBRSxXQUFXLENBQUM7UUFDM0Msb0JBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxlQUFlLENBQUM7UUFDL0QscUJBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLENBQUM7UUFDakUsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsdUJBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQzFCLGFBQVEsR0FBYSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBR2hFLHNCQUFpQixHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFXaEMsQ0FBQztJQUVKOzs7O09BSUc7SUFDSCxRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWE7YUFDZixhQUFhLEVBQUU7YUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUM7WUFDVCxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDWixJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHO29CQUM3RCw4REFBOEQ7b0JBQzlELENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFzQixFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUNwQyxFQUFFLEVBQUUsRUFBRTt3QkFDTixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7cUJBQ2hCLENBQUMsQ0FDSCxDQUFDO29CQUNGLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUU7d0JBQzFCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztxQkFDeEI7aUJBQ0Y7WUFDSCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2YsTUFBTSxVQUFVLEdBQWEsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDO2dCQUM1RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQzdCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQ3ZELFVBQVUsQ0FDWCxDQUFDO29CQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO3dCQUM1QixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsT0FBTyxFQUFFLFlBQVk7d0JBQ3JCLFNBQVMsRUFBRSxTQUFTLENBQUMsS0FBSzt3QkFDMUIsYUFBYSxFQUFFLElBQUk7cUJBQ3BCLENBQUMsQ0FBQztpQkFDSjtxQkFBTSxJQUFJLEtBQUssSUFBSSxLQUFLLFlBQVksaUJBQWlCLEVBQUU7b0JBQ3RELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ25EO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFNBQVMsR0FBRztZQUNmLFNBQVMsRUFBRTtnQkFDVDtvQkFDRSxNQUFNLEVBQUUsRUFBRTtvQkFDVixRQUFRLEVBQUU7d0JBQ1I7NEJBQ0UsSUFBSSxFQUFFLGVBQWUsQ0FBQyxNQUFNOzRCQUM1QixLQUFLLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsU0FBUyxHQUFHLEdBQUc7NEJBQ25ELFdBQVcsRUFBRSxXQUFXOzRCQUN4QixvQkFBb0IsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLE9BQU8sRUFBRSxLQUFLO2dDQUN4RCxFQUFFLFFBQVE7NEJBQ1osS0FBSyxFQUFFLEVBQUU7NEJBQ1QsVUFBVSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQzs0QkFDakMsZUFBZSxFQUFFLElBQUksQ0FBQyxVQUFVOzRCQUNoQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUUsU0FBUzs0QkFDNUQsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTOzRCQUM1RCxXQUFXLEVBQUUsRUFBRTs0QkFDZixpQkFBaUIsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxpQkFBaUI7Z0NBQy9ELEVBQUUsU0FBUzt5QkFDZDt3QkFDRDs0QkFDRSxJQUFJLEVBQUUsZUFBZSxDQUFDLEtBQUs7NEJBQzNCLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxTQUFTLEdBQUcsR0FBRzs0QkFDbkQsV0FBVyxFQUFFLFdBQVc7NEJBQ3hCLG9CQUFvQixFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLEtBQUs7Z0NBQ3hELEVBQUUsUUFBUTs0QkFDWixLQUFLLEVBQUUsRUFBRTs0QkFDVCxXQUFXLEVBQUUsRUFBRTs0QkFDZixjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUUsU0FBUzs0QkFDNUQsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU87Z0NBQ2hFLEVBQUUsU0FBUzs0QkFDYixVQUFVLEVBQUU7Z0NBQ1YsVUFBVSxDQUFDLFFBQVE7Z0NBQ25CLFVBQVUsQ0FBQyxTQUFTLENBQ2xCLFdBQVcsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLFlBQVksQ0FDdkQ7Z0NBQ0QsVUFBVSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUM7NkJBQ3ZEOzRCQUNELGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSztnQ0FDMUQsRUFBRSxTQUFTOzRCQUNiLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUzs0QkFDNUQsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsaUJBQWlCO2dDQUMvRCxFQUFFLFNBQVM7eUJBQ2Q7d0JBQ0Q7NEJBQ0UsSUFBSSxFQUFFLGVBQWUsQ0FBQyxLQUFLOzRCQUMzQixLQUFLLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsU0FBUyxHQUFHLEdBQUc7NEJBQ25ELFdBQVcsRUFBRSxXQUFXOzRCQUN4QixvQkFBb0IsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLE9BQU8sRUFBRSxLQUFLO2dDQUN4RCxFQUFFLFFBQVE7NEJBQ1osS0FBSyxFQUFFLEVBQUU7NEJBQ1QsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU87Z0NBQ2hFLEVBQUUsU0FBUzs0QkFDYixXQUFXLEVBQUUsRUFBRTs0QkFDZixjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUUsU0FBUzs0QkFDNUQsVUFBVSxFQUFFO2dDQUNWLFVBQVUsQ0FBQyxRQUFRO2dDQUNuQixVQUFVLENBQUMsU0FBUyxDQUNsQixXQUFXLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxXQUFXLENBQ3REO2dDQUNELFVBQVUsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDOzZCQUN2RDs0QkFDRCxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUs7Z0NBQzFELEVBQUUsU0FBUzs0QkFDYixTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVM7NEJBQzVELGlCQUFpQixFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLGlCQUFpQjtnQ0FDL0QsRUFBRSxTQUFTO3lCQUNkO3dCQUNEOzRCQUNFLElBQUksRUFBRSxlQUFlLENBQUMsU0FBUzs0QkFDL0IsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLFVBQVU7NEJBQzlDLFdBQVcsRUFBRSxZQUFZOzRCQUN6QixtQkFBbUIsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTztnQ0FDaEUsRUFBRSxVQUFVOzRCQUNkLEtBQUssRUFBRSxFQUFFOzRCQUNULFdBQVcsRUFBRSxFQUFFOzRCQUNmLGNBQWMsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLFdBQVcsRUFBRSxVQUFVOzRCQUM3RCxRQUFRLEVBQUUsSUFBSTs0QkFDZCxTQUFTLEVBQ1AsV0FBVyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsYUFBYTs0QkFDekQsVUFBVSxFQUFFO2dDQUNWLFVBQVUsQ0FBQyxTQUFTLENBQ2xCLFdBQVcsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FDeEQ7Z0NBQ0QsVUFBVSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUM7NkJBQ3hEOzRCQUNELGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSztnQ0FDMUQsRUFBRSxVQUFVOzRCQUNkLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVTs0QkFDN0QsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsaUJBQWlCO2dDQUMvRCxFQUFFLFVBQVU7eUJBQ2Y7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGLENBQUM7UUFDRixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3pFLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLE9BQU8sRUFBRTtZQUN6QyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDMUQ7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHFCQUFxQixDQUFDLGVBQTBCO1FBQzlDLE1BQU0sV0FBVyxHQUFHO1lBQ2xCLElBQUksRUFBRSxlQUFlLENBQUMsU0FBUztZQUMvQixLQUFLLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsV0FBVztZQUMvQyxXQUFXLEVBQUUsYUFBYTtZQUMxQixVQUFVLEVBQUUsSUFBSTtZQUNoQixhQUFhLEVBQUUsS0FBSztZQUNwQixLQUFLLEVBQUUsZUFBZSxFQUFFLFNBQVM7WUFDakMsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxXQUFXO1lBQzlELFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUNEOzs7OztPQUtHO0lBQ0gsWUFBWSxDQUFDLElBQWlCO1FBQzVCLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxPQUFPLEVBQUU7WUFDOUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzNDLE1BQU0sa0JBQWtCLEdBQXVCO2dCQUM3QyxPQUFPLEVBQUU7b0JBQ1AsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTO29CQUNsQyxjQUFjLEVBQUUsWUFBWSxFQUFFLFNBQVM7b0JBQ3ZDLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEVBQUU7b0JBQ3RDLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVTtvQkFDbkMsYUFBYSxFQUFFLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxPQUFPLElBQUksSUFBSTtpQkFDN0Q7YUFDRixDQUFDO1lBQ0YsSUFBSSxDQUFDLGFBQWE7aUJBQ2YsV0FBVyxDQUFDLGtCQUFrQixDQUFDO2lCQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDOUIsU0FBUyxDQUFDO2dCQUNULElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNaLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRTt3QkFDZixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUNuQztnQkFDSCxDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNmLE1BQU0sVUFBVSxHQUFhLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQztvQkFDNUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO3dCQUM3QixNQUFNLFlBQVksR0FBYSxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUNqRSxVQUFVLENBQ1gsQ0FBQzt3QkFDRixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQzs0QkFDNUIsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLE9BQU8sRUFBRSxZQUFZOzRCQUNyQixTQUFTLEVBQUUsU0FBUyxDQUFDLEtBQUs7NEJBQzFCLGFBQWEsRUFBRSxJQUFJO3lCQUNwQixDQUFDLENBQUM7cUJBQ0o7eUJBQU0sSUFBSSxLQUFLLElBQUksS0FBSyxZQUFZLGlCQUFpQixFQUFFO3dCQUN0RCxJQUFJLENBQUMseUJBQXlCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUNuRDtnQkFDSCxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1NBQ047SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHFCQUFxQixDQUFDLElBQWlCO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlCLENBQUM7OEdBbFJVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLG1KQUZwQixDQUFDLGFBQWEsQ0FBQywwQkMvQzVCLDBnQkFZdUIsNG1TRCtCWCxZQUFZLG1JQUFFLG9CQUFvQix3bUJBQUUsZUFBZTs7MkZBTWxELG9CQUFvQjtrQkFWaEMsU0FBUzsrQkFFRSxxQkFBcUIsY0FDbkIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG9CQUFvQixFQUFFLGVBQWUsQ0FBQyxpQkFHL0MsaUJBQWlCLENBQUMsSUFBSSxhQUMxQixDQUFDLGFBQWEsQ0FBQzt3S0FRaEIsa0JBQWtCO3NCQUEzQixNQUFNO2dCQUtHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHtcclxuICBGb3JtR3JpZCxcclxuICBGb3JtTW9kZWwsXHJcbiAgU2VsZWN0T3B0aW9uLFxyXG4gIER5bmFtaWNGb3JtQ29tcG9uZW50LFxyXG4gIEZvcm1Db250cm9sVHlwZSxcclxuICBBbGlnblR5cGUsXHJcbn0gZnJvbSBcIkBpZWVlc2EtbnBtL3ByZXNlbnRhdGlvblwiO1xyXG5pbXBvcnQge1xyXG4gIEFsZXJ0c1NlcnZpY2UsXHJcbiAgQWxlcnRUeXBlLFxyXG4gIEdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2UsXHJcbn0gZnJvbSBcIkBpZWVlc2EtbnBtL3V0aWxpdHlcIjtcclxuaW1wb3J0ICogYXMgc2NyZWVuVGV4dHMgZnJvbSBcIi4uLy4uL2Fzc2V0cy9jb25zdGFudHMuanNvblwiO1xyXG5pbXBvcnQgeyBHcm91cHNWYWxpZGF0aW9uUGF0dGVybnMgfSBmcm9tIFwiLi4vLi4vYXNzZXRzL2Zvcm0tdmFsaWRhdGlvbnNcIjtcclxuaW1wb3J0IHsgQ3JlYXRlR3JvdXBQYXlsb2FkIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jcmVhdGUtZ3JvdXAubW9kZWxcIjtcclxuaW1wb3J0IHsgR3JvdXBzU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9ncm91cHMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2dNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEdyb3VwVHlwZSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvZ3JvdXAtdHlwZXMubW9kZWxcIjtcclxuaW1wb3J0IHsgR3JvdXBJbmZvIH0gZnJvbSBcIi4uLy4uL21vZGVscy9ncm91cC1pbmZvLm1vZGVsXCI7XHJcblxyXG4vKipcclxuICogQ3JlYXRlR3JvdXBDb21wb25lbnQgdXNlcyBEeW5hbWljRm9ybUNvbXBvbmVudCB0byBidWlsZCBjcmVhdGUgbmV3IGdyb3VwIGZvcm0gYW5kIGltcGxlbWVudCB0aGUgZnVuY3Rpb25hbGl0aWVzIG9mIHN1Ym1pc3Npb24gb2YgZm9ybSBhbmQgaGFuZGxpbmcgc3VjY2VzcyBhbmQgZXJyb3Igc2NlbmFyaW9zLlxyXG4gKiBAY2xhc3MgQ3JlYXRlR3JvdXBDb21wb25lbnRcclxuICogQGltcGxlbWVudHMge09uSW5pdH1cclxuICogQGltcGxlbWVudHMge09uRGVzdHJveX1cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6IFwiaWVlZXNhLWNyZWF0ZS1ncm91cFwiLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRHluYW1pY0Zvcm1Db21wb25lbnQsIE1hdERpYWxvZ01vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9jcmVhdGUtZ3JvdXAuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vY3JlYXRlLWdyb3VwLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgcHJvdmlkZXJzOiBbQWxlcnRzU2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBmb3JtIGlzIHN1Y2Nlc3NmdWxseSBzdWJtaXR0ZWQuXHJcbiAgICogQG1lbWJlcm9mIENyZWF0ZUdyb3VwQ29tcG9uZW50XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHN1Ym1pdEZvcm1SZXNwb25zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGZvcm0gaXMgY2FuY2VsbGVkLlxyXG4gICAqIEBtZW1iZXJvZiBDcmVhdGVHcm91cENvbXBvbmVudFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBmb3JtQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIGNyZWF0ZUdyb3VwVGV4dCA9IHNjcmVlblRleHRzPy5jcmVhdGVHcm91cDtcclxuICBsZWZ0QnV0dG9uTGFiZWwgPSB0aGlzLmNyZWF0ZUdyb3VwVGV4dD8ubGFiZWw/LmxlZnRCdXR0b25MYWJlbDtcclxuICByaWdodEJ1dHRvbkxhYmVsID0gdGhpcy5jcmVhdGVHcm91cFRleHQ/LmxhYmVsPy5yaWdodEJ1dHRvbkxhYmVsO1xyXG4gIGlzTGVnZW5kVmlzaWJsZSA9IGZhbHNlO1xyXG4gIGlzTGVmdEJ1dHRvbk5lZWRlZCA9IHRydWU7XHJcbiAgY29sV2lkdGg6IEZvcm1HcmlkID0geyB4czogMTIsIHhsOiAxMiwgc206IDEyLCBtZDogMTIsIGxnOiAxMiB9O1xyXG4gIGZvcm1Hcm91cCE6IEZvcm1Nb2RlbDtcclxuICBncm91cFR5cGVzITogU2VsZWN0T3B0aW9uW107XHJcbiAgYWN0aW9uQnV0dG9uQWxpZ24gPSBBbGlnblR5cGUuTEVGVDtcclxuICBmb3JtITogRm9ybUdyb3VwO1xyXG4gIHNlbGVjdGVkUGFyZW50R3JvdXBJbmZvITogR3JvdXBJbmZvIHwgdW5kZWZpbmVkO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycywgbm8tZW1wdHktZnVuY3Rpb25cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBncm91cHNTZXJ2aWNlOiBHcm91cHNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2U6IEdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBhbGVydFNlcnZpY2U6IEFsZXJ0c1NlcnZpY2UgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSBjcmVhdGUgZ3JvdXAgZm9ybSBncm91cCBhcnJheSBhbmQgY29tcG9uZW50LlxyXG4gICAqIEByZXR1cm4gLXJldHVybnMgbm90aGluZ1xyXG4gICAqIEBtZW1iZXJvZiBDcmVhdGVHcm91cENvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cHNTZXJ2aWNlXHJcbiAgICAgIC5nZXRHcm91cFR5cGVzKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzPy5zdGF0dXMpIHtcclxuICAgICAgICAgICAgdGhpcy5ncm91cFR5cGVzID0gT2JqZWN0LmVudHJpZXMocmVzLmJvZHkuY29uZmlnRmllbGRWYWx1ZSkubWFwKFxyXG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICAgICAgKFtpZCwgaXRlbV06IFtzdHJpbmcsIEdyb3VwVHlwZV0pID0+ICh7XHJcbiAgICAgICAgICAgICAgICBpZDogaWQsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXBUeXBlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Hcm91cCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBlcnJvckNvZGVzOiBzdHJpbmdbXSA9IGVycm9yPy5lcnJvcj8uYm9keT8uZXJyb3JDb2RlcztcclxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVycm9yQ29kZXMpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHRoaXMuZ3JvdXBzU2VydmljZS5wYXJzZUVycm9yTWVzc2FnZShcclxuICAgICAgICAgICAgICBlcnJvckNvZGVzXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dNZXNzYWdlKHtcclxuICAgICAgICAgICAgICBzdGF0dXM6IFwiY3VzdG9tXCIsXHJcbiAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxyXG4gICAgICAgICAgICAgIGFsZXJ0VHlwZTogQWxlcnRUeXBlLkVSUk9SLFxyXG4gICAgICAgICAgICAgIGlzQ2xvc2VOZWVkZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChlcnJvciAmJiBlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSBjcmVhdGUgZ3JvdXAgZm9ybSBncm91cCBhcnJheS5cclxuICAgKiBAbWVtYmVyb2YgQ3JlYXRlR3JvdXBDb21wb25lbnRcclxuICAgKi9cclxuICBjcmVhdGVGb3JtR3JvdXAoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHtcclxuICAgICAgZm9ybUdyb3VwOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGVnZW5kOiBcIlwiLFxyXG4gICAgICAgICAgY29udHJvbHM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5TRUxFQ1QsXHJcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5sYWJlbD8uZ3JvdXBUeXBlICsgXCIqXCIsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6IFwiZ3JvdXBUeXBlXCIsXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRFcnJvck1lc3NhZ2U6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5tZXNzYWdlPy5lcnJvclxyXG4gICAgICAgICAgICAgICAgPy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICB2YWx1ZTogXCJcIixcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25zOiB0aGlzLmdyb3VwVHlwZXMsXHJcbiAgICAgICAgICAgICAgc3VwcG9ydE1lc3NhZ2U6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5zdXBwb3J0VGV4dD8uZ3JvdXBUeXBlLFxyXG4gICAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5jcmVhdGVHcm91cFRleHQ/LmxhYmVsPy5hcmlhTGFiZWw/Lmdyb3VwVHlwZSxcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJcIixcclxuICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDogdGhpcy5jcmVhdGVHcm91cFRleHQ/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZFxyXG4gICAgICAgICAgICAgICAgPy5ncm91cFR5cGUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuSU5QVVQsXHJcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5sYWJlbD8uZ3JvdXBOYW1lICsgXCIqXCIsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6IFwiZ3JvdXBOYW1lXCIsXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRFcnJvck1lc3NhZ2U6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5tZXNzYWdlPy5lcnJvclxyXG4gICAgICAgICAgICAgICAgPy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICB2YWx1ZTogXCJcIixcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJcIixcclxuICAgICAgICAgICAgICBzdXBwb3J0TWVzc2FnZTogdGhpcy5jcmVhdGVHcm91cFRleHQ/LnN1cHBvcnRUZXh0Py5ncm91cE5hbWUsXHJcbiAgICAgICAgICAgICAgcGF0dGVybkVycm9yTWVzc2FnZTogdGhpcy5jcmVhdGVHcm91cFRleHQ/Lm1lc3NhZ2U/LmVycm9yPy5wYXR0ZXJuXHJcbiAgICAgICAgICAgICAgICA/Lmdyb3VwTmFtZSxcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbXHJcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoXHJcbiAgICAgICAgICAgICAgICAgIHNjcmVlblRleHRzPy5jcmVhdGVHcm91cD8uY2hhcmFjdGVyTGltaXQ/LmNoYXJhY3RlcjUwMFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihHcm91cHNWYWxpZGF0aW9uUGF0dGVybnMuZ3JvdXBOYW1lKSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIG1heEVycm9yTWVzc2FnZTogdGhpcy5jcmVhdGVHcm91cFRleHQ/Lm1lc3NhZ2U/LmVycm9yPy5saW1pdFxyXG4gICAgICAgICAgICAgICAgPy5ncm91cE5hbWUsXHJcbiAgICAgICAgICAgICAgYXJpYUxhYmVsOiB0aGlzLmNyZWF0ZUdyb3VwVGV4dD8ubGFiZWw/LmFyaWFMYWJlbD8uZ3JvdXBOYW1lLFxyXG4gICAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOiB0aGlzLmNyZWF0ZUdyb3VwVGV4dD8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkXHJcbiAgICAgICAgICAgICAgICA/Lmdyb3VwTmFtZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5JTlBVVCxcclxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy5jcmVhdGVHcm91cFRleHQ/LmxhYmVsPy5zaG9ydE5hbWUgKyBcIipcIixcclxuICAgICAgICAgICAgICBjb250cm9sTmFtZTogXCJzaG9ydE5hbWVcIixcclxuICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTogdGhpcy5jcmVhdGVHcm91cFRleHQ/Lm1lc3NhZ2U/LmVycm9yXHJcbiAgICAgICAgICAgICAgICA/LnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgIHZhbHVlOiBcIlwiLFxyXG4gICAgICAgICAgICAgIHBhdHRlcm5FcnJvck1lc3NhZ2U6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5tZXNzYWdlPy5lcnJvcj8ucGF0dGVyblxyXG4gICAgICAgICAgICAgICAgPy5zaG9ydE5hbWUsXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgc3VwcG9ydE1lc3NhZ2U6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5zdXBwb3J0VGV4dD8uc2hvcnROYW1lLFxyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb246IFtcclxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aChcclxuICAgICAgICAgICAgICAgICAgc2NyZWVuVGV4dHM/LmNyZWF0ZUdyb3VwPy5jaGFyYWN0ZXJMaW1pdD8uY2hhcmFjdGVyMTVcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oR3JvdXBzVmFsaWRhdGlvblBhdHRlcm5zLnNob3J0TmFtZSksXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBtYXhFcnJvck1lc3NhZ2U6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5tZXNzYWdlPy5lcnJvcj8ubGltaXRcclxuICAgICAgICAgICAgICAgID8uc2hvcnROYW1lLFxyXG4gICAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5jcmVhdGVHcm91cFRleHQ/LmxhYmVsPy5hcmlhTGFiZWw/LnNob3J0TmFtZSxcclxuICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDogdGhpcy5jcmVhdGVHcm91cFRleHQ/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZFxyXG4gICAgICAgICAgICAgICAgPy5zaG9ydE5hbWUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuVEVYVF9BUkVBLFxyXG4gICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmNyZWF0ZUdyb3VwVGV4dD8ubGFiZWw/Lmdyb3VwU2NvcGUsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6IFwiZ3JvdXBTY29wZVwiLFxyXG4gICAgICAgICAgICAgIHBhdHRlcm5FcnJvck1lc3NhZ2U6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5tZXNzYWdlPy5lcnJvcj8ucGF0dGVyblxyXG4gICAgICAgICAgICAgICAgPy5ncm91cFNjb3BlLFxyXG4gICAgICAgICAgICAgIHZhbHVlOiBcIlwiLFxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIlwiLFxyXG4gICAgICAgICAgICAgIHN1cHBvcnRNZXNzYWdlOiB0aGlzLmNyZWF0ZUdyb3VwVGV4dD8uc3VwcG9ydFRleHQ/Lmdyb3VwU2NvcGUsXHJcbiAgICAgICAgICAgICAgaXNSZXNpemU6IHRydWUsXHJcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoOlxyXG4gICAgICAgICAgICAgICAgc2NyZWVuVGV4dHM/LmNyZWF0ZUdyb3VwPy5jaGFyYWN0ZXJMaW1pdD8uY2hhcmFjdGVyMjAwMCxcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbXHJcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aChcclxuICAgICAgICAgICAgICAgICAgc2NyZWVuVGV4dHM/LmNyZWF0ZUdyb3VwPy5jaGFyYWN0ZXJMaW1pdD8uY2hhcmFjdGVyMTUwMFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihHcm91cHNWYWxpZGF0aW9uUGF0dGVybnMuZ3JvdXBTY29wZSksXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBtYXhFcnJvck1lc3NhZ2U6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5tZXNzYWdlPy5lcnJvcj8ubGltaXRcclxuICAgICAgICAgICAgICAgID8uZ3JvdXBTY29wZSxcclxuICAgICAgICAgICAgICBhcmlhTGFiZWw6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5sYWJlbD8uYXJpYUxhYmVsPy5ncm91cFNjb3BlLFxyXG4gICAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOiB0aGlzLmNyZWF0ZUdyb3VwVGV4dD8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkXHJcbiAgICAgICAgICAgICAgICA/Lmdyb3VwU2NvcGUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5zZWxlY3RlZFBhcmVudEdyb3VwSW5mbyA9IHRoaXMuZ3JvdXBzU2VydmljZS5nZXRTZWxlY3RlZEdyb3VwSW5mbygpO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRQYXJlbnRHcm91cEluZm8/Lmdyb3VwSWQpIHtcclxuICAgICAgdGhpcy51cGRhdGVDcmVhdGVGb3JtR3JvdXAodGhpcy5zZWxlY3RlZFBhcmVudEdyb3VwSW5mbyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIGNyZWF0ZSBzdWIgZ3JvdXAgZm9ybSBncm91cCBhcnJheS5cclxuICAgKiBAcGFyYW0ge0dyb3VwSW5mb30gcGFyZW50R3JvdXBJbmZvIC1QYXJlbnQgZ3JvdXAgaW5mby5cclxuICAgKiBAbWVtYmVyb2YgQ3JlYXRlR3JvdXBDb21wb25lbnRcclxuICAgKi9cclxuICB1cGRhdGVDcmVhdGVGb3JtR3JvdXAocGFyZW50R3JvdXBJbmZvOiBHcm91cEluZm8pIHtcclxuICAgIGNvbnN0IHBhcmVudEdyb3VwID0ge1xyXG4gICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuVEVYVF9BUkVBLFxyXG4gICAgICBsYWJlbDogdGhpcy5jcmVhdGVHcm91cFRleHQ/LmxhYmVsPy5wYXJlbnRHcm91cCxcclxuICAgICAgY29udHJvbE5hbWU6IFwicGFyZW50R3JvdXBcIixcclxuICAgICAgaXNSZWFkb25seTogdHJ1ZSxcclxuICAgICAgYXJpYU11bHRpbGluZTogZmFsc2UsXHJcbiAgICAgIHZhbHVlOiBwYXJlbnRHcm91cEluZm8/Lmdyb3VwTmFtZSxcclxuICAgICAgYXJpYUxhYmVsOiB0aGlzLmNyZWF0ZUdyb3VwVGV4dD8ubGFiZWw/LmFyaWFMYWJlbD8ucGFyZW50R3JvdXAsXHJcbiAgICAgIGlzUmVzaXplOiB0cnVlLFxyXG4gICAgfTtcclxuICAgIHRoaXMuZm9ybUdyb3VwPy5mb3JtR3JvdXBbMF0/LmNvbnRyb2xzPy51bnNoaWZ0KHBhcmVudEdyb3VwKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBjbGllbnQgc2lkZSB2YWxpZGF0aW9uIGFuZCBlbWl0cyBjcmVhdGUgZ3JvdXAgaW5mb3JtYXRpb24uXHJcbiAgICogQHBhcmFtIHtGb3JtR3JvdXBbXX0gZm9ybSAtQXJyYXkgb2YgZm9ybUdyb3VwXHJcbiAgICogQHJldHVybiAtcmV0dXJucyBub3RoaW5nXHJcbiAgICogQG1lbWJlcm9mIENyZWF0ZUdyb3VwQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25Gb3JtU3VibWl0KGZvcm06IEZvcm1Hcm91cFtdKTogdm9pZCB7XHJcbiAgICBmb3JtWzBdPy5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICBpZiAoZm9ybVswXS5zdGF0dXMgPT09IFwiVkFMSURcIikge1xyXG4gICAgICBjb25zdCBmb3JtUmVzcG9uc2UgPSBmb3JtWzBdLmdldFJhd1ZhbHVlKCk7XHJcbiAgICAgIGNvbnN0IGNyZWF0ZUdyb3VwUGF5bG9hZDogQ3JlYXRlR3JvdXBQYXlsb2FkID0ge1xyXG4gICAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICAgIGdyb3VwTmFtZTogZm9ybVJlc3BvbnNlPy5ncm91cE5hbWUsXHJcbiAgICAgICAgICBncm91cFNob3J0TmFtZTogZm9ybVJlc3BvbnNlPy5zaG9ydE5hbWUsXHJcbiAgICAgICAgICBncm91cFR5cGU6IGZvcm1SZXNwb25zZT8uZ3JvdXBUeXBlPy5pZCxcclxuICAgICAgICAgIGdyb3VwRGVzYzogZm9ybVJlc3BvbnNlPy5ncm91cFNjb3BlLFxyXG4gICAgICAgICAgZ3JvdXBQYXJlbnRJZDogdGhpcy5zZWxlY3RlZFBhcmVudEdyb3VwSW5mbz8uZ3JvdXBJZCA/PyBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmdyb3Vwc1NlcnZpY2VcclxuICAgICAgICAuY3JlYXRlR3JvdXAoY3JlYXRlR3JvdXBQYXlsb2FkKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcz8uc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdWJtaXRGb3JtUmVzcG9uc2UuZW1pdChyZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvckNvZGVzOiBzdHJpbmdbXSA9IGVycm9yPy5lcnJvcj8uYm9keT8uZXJyb3JDb2RlcztcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXJyb3JDb2RlcykpIHtcclxuICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2U6IHN0cmluZ1tdID0gdGhpcy5ncm91cHNTZXJ2aWNlLnBhcnNlRXJyb3JNZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgZXJyb3JDb2Rlc1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd01lc3NhZ2Uoe1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBcImN1c3RvbVwiLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgYWxlcnRUeXBlOiBBbGVydFR5cGUuRVJST1IsXHJcbiAgICAgICAgICAgICAgICBpc0Nsb3NlTmVlZGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yICYmIGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGZvcm0gcmVmZXJlbmNlLlxyXG4gICAqIEBwYXJhbSB7Rm9ybUdyb3VwW119IGZvcm1cclxuICAgKiBAbWVtYmVyb2YgQ3JlYXRlR3JvdXBDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRGb3JtR3JvdXBSZWZlcmVuY2UoZm9ybTogRm9ybUdyb3VwW10pIHtcclxuICAgIHRoaXMuZm9ybSA9IGZvcm1bMF07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyBmb3JtIGNhbmNlbCBldmVudC5cclxuICAgKiBAcmV0dXJuIC1yZXR1cm5zIG5vdGhpbmdcclxuICAgKiBAbWVtYmVyb2YgQ3JlYXRlR3JvdXBDb21wb25lbnRcclxuICAgKi9cclxuICBjcmVhdGVHcm91cENhbmNlbGxlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybUNhbmNlbC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBOZ09uRGVzdHJveSBwZXJmb3JtcyBuZWNlc3NhcnkgY2xlYW51cCB0YXNrcywgc3VjaCBhcyB1bnN1YnNjcmliaW5nIGZyb20gc3Vic2NyaXB0aW9uIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBiZWluZyBkZXN0cm95ZWQuXHJcbiAgICogQG1lbWJlcm9mIENyZWF0ZUdyb3VwQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxpZWVlc2EtZHluYW1pYy1mb3JtXHJcbiAgKm5nSWY9XCJmb3JtR3JvdXBcIlxyXG4gIFtsZWZ0QnV0dG9uTGFiZWxdPVwibGVmdEJ1dHRvbkxhYmVsXCJcclxuICBbcmlnaHRCdXR0b25MYWJlbF09XCJyaWdodEJ1dHRvbkxhYmVsXCJcclxuICBbaXNMZWdlbmRWaXNpYmxlXT1cImlzTGVnZW5kVmlzaWJsZVwiXHJcbiAgW2NvbFdpZHRoXT1cImNvbFdpZHRoXCJcclxuICBbYWN0aW9uQnV0dG9uQWxpZ25dPVwiYWN0aW9uQnV0dG9uQWxpZ25cIlxyXG4gIFtmb3JtR3JvdXBzXT1cImZvcm1Hcm91cFwiXHJcbiAgW2lzTGVmdEJ1dHRvbk5lZWRlZF09XCJpc0xlZnRCdXR0b25OZWVkZWRcIlxyXG4gIChmb3JtU3VibWl0KT1cIm9uRm9ybVN1Ym1pdCgkZXZlbnQpXCJcclxuICAoZm9ybUxlZnRCdXR0b25DbGlja2VkKT1cImNyZWF0ZUdyb3VwQ2FuY2VsbGVkKClcIlxyXG4gIChmb3JtR3JvdXBzUmVmZXJlbmNlKT1cImdldEZvcm1Hcm91cFJlZmVyZW5jZSgkZXZlbnQpXCJcclxuPjwvaWVlZXNhLWR5bmFtaWMtZm9ybT4iXX0=
314
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvY3JlYXRlLWdyb3VwL2NyZWF0ZS1ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL2NyZWF0ZS1ncm91cC9jcmVhdGUtZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBR1osTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFJTCxvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLFNBQVMsR0FDVixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFDTCxhQUFhLEVBQ2IsU0FBUyxHQUVWLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxLQUFLLFdBQVcsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUd6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7OztBQUU1RDs7Ozs7R0FLRztBQVdILE1BQU0sT0FBTyxvQkFBb0I7SUF1Qi9CLDZEQUE2RDtJQUM3RDtJQUNFLDBD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VCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlCLENBQUM7OEdBaFRVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLG1KQUZwQixDQUFDLGFBQWEsQ0FBQywwQkNoRDVCLDBnQkFZdUIsNG1TRGdDWCxZQUFZLG1JQUFFLG9CQUFvQix3bUJBQUUsZUFBZTs7MkZBTWxELG9CQUFvQjtrQkFWaEMsU0FBUzsrQkFFRSxxQkFBcUIsY0FDbkIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG9CQUFvQixFQUFFLGVBQWUsQ0FBQyxpQkFHL0MsaUJBQWlCLENBQUMsSUFBSSxhQUMxQixDQUFDLGFBQWEsQ0FBQzt3S0FRaEIsa0JBQWtCO3NCQUEzQixNQUFNO2dCQUtHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHtcclxuICBGb3JtR3JpZCxcclxuICBGb3JtTW9kZWwsXHJcbiAgU2VsZWN0T3B0aW9uLFxyXG4gIER5bmFtaWNGb3JtQ29tcG9uZW50LFxyXG4gIEZvcm1Db250cm9sVHlwZSxcclxuICBBbGlnblR5cGUsXHJcbn0gZnJvbSBcIkBpZWVlc2EtbnBtL3ByZXNlbnRhdGlvblwiO1xyXG5pbXBvcnQge1xyXG4gIEFsZXJ0c1NlcnZpY2UsXHJcbiAgQWxlcnRUeXBlLFxyXG4gIEdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2UsXHJcbn0gZnJvbSBcIkBpZWVlc2EtbnBtL3V0aWxpdHlcIjtcclxuaW1wb3J0ICogYXMgc2NyZWVuVGV4dHMgZnJvbSBcIi4uLy4uL2Fzc2V0cy9jb25zdGFudHMuanNvblwiO1xyXG5pbXBvcnQgeyBHcm91cHNWYWxpZGF0aW9uUGF0dGVybnMgfSBmcm9tIFwiLi4vLi4vYXNzZXRzL2Zvcm0tdmFsaWRhdGlvbnNcIjtcclxuaW1wb3J0IHsgQ3JlYXRlR3JvdXBQYXlsb2FkIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jcmVhdGUtZ3JvdXAubW9kZWxcIjtcclxuaW1wb3J0IHsgR3JvdXBzU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9ncm91cHMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2dNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEdyb3VwVHlwZSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvZ3JvdXAtdHlwZXMubW9kZWxcIjtcclxuaW1wb3J0IHsgR3JvdXBJbmZvIH0gZnJvbSBcIi4uLy4uL21vZGVscy9ncm91cC1pbmZvLm1vZGVsXCI7XHJcbmltcG9ydCB7IEZvcm1TdGF0dXMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2Zvcm0tc3RhdHVzLm1vZGVsXCI7XHJcblxyXG4vKipcclxuICogQ3JlYXRlR3JvdXBDb21wb25lbnQgdXNlcyBEeW5hbWljRm9ybUNvbXBvbmVudCB0byBidWlsZCBjcmVhdGUgbmV3IGdyb3VwIGZvcm0gYW5kIGltcGxlbWVudCB0aGUgZnVuY3Rpb25hbGl0aWVzIG9mIHN1Ym1pc3Npb24gb2YgZm9ybSBhbmQgaGFuZGxpbmcgc3VjY2VzcyBhbmQgZXJyb3Igc2NlbmFyaW9zLlxyXG4gKiBAY2xhc3MgQ3JlYXRlR3JvdXBDb21wb25lbnRcclxuICogQGltcGxlbWVudHMge09uSW5pdH1cclxuICogQGltcGxlbWVudHMge09uRGVzdHJveX1cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6IFwiaWVlZXNhLWNyZWF0ZS1ncm91cFwiLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRHluYW1pY0Zvcm1Db21wb25lbnQsIE1hdERpYWxvZ01vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9jcmVhdGUtZ3JvdXAuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vY3JlYXRlLWdyb3VwLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgcHJvdmlkZXJzOiBbQWxlcnRzU2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBmb3JtIGlzIHN1Y2Nlc3NmdWxseSBzdWJtaXR0ZWQuXHJcbiAgICogQG1lbWJlcm9mIENyZWF0ZUdyb3VwQ29tcG9uZW50XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHN1Ym1pdEZvcm1SZXNwb25zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGZvcm0gaXMgY2FuY2VsbGVkLlxyXG4gICAqIEBtZW1iZXJvZiBDcmVhdGVHcm91cENvbXBvbmVudFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBmb3JtQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIGNyZWF0ZUdyb3VwVGV4dCA9IHNjcmVlblRleHRzPy5jcmVhdGVHcm91cDtcclxuICBsZWZ0QnV0dG9uTGFiZWwgPSB0aGlzLmNyZWF0ZUdyb3VwVGV4dD8ubGFiZWw/LmxlZnRCdXR0b25MYWJlbDtcclxuICByaWdodEJ1dHRvbkxhYmVsID0gdGhpcy5jcmVhdGVHcm91cFRleHQ/LmxhYmVsPy5yaWdodEJ1dHRvbkxhYmVsO1xyXG4gIGlzTGVnZW5kVmlzaWJsZSA9IGZhbHNlO1xyXG4gIGlzTGVmdEJ1dHRvbk5lZWRlZCA9IHRydWU7XHJcbiAgY29sV2lkdGg6IEZvcm1HcmlkID0geyB4czogMTIsIHhsOiAxMiwgc206IDEyLCBtZDogMTIsIGxnOiAxMiB9O1xyXG4gIGZvcm1Hcm91cCE6IEZvcm1Nb2RlbDtcclxuICBncm91cFR5cGVzITogU2VsZWN0T3B0aW9uW107XHJcbiAgYWN0aW9uQnV0dG9uQWxpZ24gPSBBbGlnblR5cGUuTEVGVDtcclxuICBmb3JtITogRm9ybUdyb3VwO1xyXG4gIHNlbGVjdGVkUGFyZW50R3JvdXBJbmZvITogR3JvdXBJbmZvIHwgdW5kZWZpbmVkO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycywgbm8tZW1wdHktZnVuY3Rpb25cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBncm91cHNTZXJ2aWNlOiBHcm91cHNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2U6IEdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBhbGVydFNlcnZpY2U6IEFsZXJ0c1NlcnZpY2UgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSBjcmVhdGUgZ3JvdXAgZm9ybSBncm91cCBhcnJheSBhbmQgY29tcG9uZW50LlxyXG4gICAqIEByZXR1cm4gLXJldHVybnMgbm90aGluZ1xyXG4gICAqIEBtZW1iZXJvZiBDcmVhdGVHcm91cENvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cHNTZXJ2aWNlXHJcbiAgICAgIC5nZXRHcm91cFR5cGVzKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzPy5zdGF0dXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBhcmVudEdyb3VwSW5mbyA9IHRoaXMuZ3JvdXBzU2VydmljZT8uZ2V0U2VsZWN0ZWRHcm91cEluZm8oKTtcclxuICAgICAgICAgICAgY29uc3QgY29uZmlnRmllbGRWYWx1ZSA9IHJlcz8uYm9keT8uY29uZmlnRmllbGRWYWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRQYXJlbnRHcm91cEluZm8/Lmdyb3VwVHlwZSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGFsbG93ZWRHcm91cFR5cGUgPVxyXG4gICAgICAgICAgICAgICAgY29uZmlnRmllbGRWYWx1ZVt0aGlzLnNlbGVjdGVkUGFyZW50R3JvdXBJbmZvPy5ncm91cFR5cGVdXHJcbiAgICAgICAgICAgICAgICAgID8uYnVzaW5lc3NSdWxlPy5hbGxvd2VkR3JvdXBUeXBlO1xyXG4gICAgICAgICAgICAgIGlmIChhbGxvd2VkR3JvdXBUeXBlPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBUeXBlcyA9IGFsbG93ZWRHcm91cFR5cGUubWFwKFxyXG4gICAgICAgICAgICAgICAgICAoZ3JvdXBUeXBlSWQ6IHN0cmluZykgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogZ3JvdXBUeXBlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogY29uZmlnRmllbGRWYWx1ZVtncm91cFR5cGVJZF0/Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dBbGVydE1lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICAgIHNjcmVlblRleHRzPy5lcnJvcnM/LkVSMTAwMCxcclxuICAgICAgICAgICAgICAgICAgQWxlcnRUeXBlLkVSUk9SXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwVHlwZXMgPSBPYmplY3QuZW50cmllcyhjb25maWdGaWVsZFZhbHVlKS5tYXAoXHJcbiAgICAgICAgICAgICAgICAoW2lkLCBpdGVtXTogW3N0cmluZywgR3JvdXBUeXBlXSkgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0/Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXBUeXBlcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jcmVhdGVGb3JtR3JvdXAoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNob3dBbGVydE1lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICBzY3JlZW5UZXh0cz8uZXJyb3JzPy5bXCIxMDEwXCJdLFxyXG4gICAgICAgICAgICAgICAgQWxlcnRUeXBlLkVSUk9SXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZXJyb3JDb2Rlczogc3RyaW5nW10gPSBlcnJvcj8uZXJyb3I/LmJvZHk/LmVycm9yQ29kZXM7XHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlcnJvckNvZGVzKSkge1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSB0aGlzLmdyb3Vwc1NlcnZpY2UucGFyc2VFcnJvck1lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgZXJyb3JDb2Rlc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dBbGVydE1lc3NhZ2UoZXJyb3JNZXNzYWdlLCBBbGVydFR5cGUuRVJST1IpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChlcnJvciAmJiBlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSBjcmVhdGUgZ3JvdXAgZm9ybSBncm91cCBhcnJheS5cclxuICAgKiBAbWVtYmVyb2YgQ3JlYXRlR3JvdXBDb21wb25lbnRcclxuICAgKi9cclxuICBjcmVhdGVGb3JtR3JvdXAoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHtcclxuICAgICAgZm9ybUdyb3VwOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGVnZW5kOiBcIlwiLFxyXG4gICAgICAgICAgY29udHJvbHM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5TRUxFQ1QsXHJcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5sYWJlbD8uZ3JvdXBUeXBlICsgXCIqXCIsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6IFwiZ3JvdXBUeXBlXCIsXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRFcnJvck1lc3NhZ2U6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5tZXNzYWdlPy5lcnJvclxyXG4gICAgICAgICAgICAgICAgPy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICB2YWx1ZTogXCJcIixcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25zOiB0aGlzLmdyb3VwVHlwZXMsXHJcbiAgICAgICAgICAgICAgc3VwcG9ydE1lc3NhZ2U6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5zdXBwb3J0VGV4dD8uZ3JvdXBUeXBlLFxyXG4gICAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5jcmVhdGVHcm91cFRleHQ/LmxhYmVsPy5hcmlhTGFiZWw/Lmdyb3VwVHlwZSxcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJcIixcclxuICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDogdGhpcy5jcmVhdGVHcm91cFRleHQ/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZFxyXG4gICAgICAgICAgICAgICAgPy5ncm91cFR5cGUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuSU5QVVQsXHJcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5sYWJlbD8uZ3JvdXBOYW1lICsgXCIqXCIsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6IFwiZ3JvdXBOYW1lXCIsXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRFcnJvck1lc3NhZ2U6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5tZXNzYWdlPy5lcnJvclxyXG4gICAgICAgICAgICAgICAgPy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICB2YWx1ZTogXCJcIixcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJcIixcclxuICAgICAgICAgICAgICBzdXBwb3J0TWVzc2FnZTogdGhpcy5jcmVhdGVHcm91cFRleHQ/LnN1cHBvcnRUZXh0Py5ncm91cE5hbWUsXHJcbiAgICAgICAgICAgICAgcGF0dGVybkVycm9yTWVzc2FnZTogdGhpcy5jcmVhdGVHcm91cFRleHQ/Lm1lc3NhZ2U/LmVycm9yPy5wYXR0ZXJuXHJcbiAgICAgICAgICAgICAgICA/Lmdyb3VwTmFtZSxcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbXHJcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoXHJcbiAgICAgICAgICAgICAgICAgIHNjcmVlblRleHRzPy5jcmVhdGVHcm91cD8uY2hhcmFjdGVyTGltaXQ/LmNoYXJhY3RlcjUwMFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihHcm91cHNWYWxpZGF0aW9uUGF0dGVybnMuZ3JvdXBOYW1lKSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIG1heEVycm9yTWVzc2FnZTogdGhpcy5jcmVhdGVHcm91cFRleHQ/Lm1lc3NhZ2U/LmVycm9yPy5saW1pdFxyXG4gICAgICAgICAgICAgICAgPy5ncm91cE5hbWUsXHJcbiAgICAgICAgICAgICAgYXJpYUxhYmVsOiB0aGlzLmNyZWF0ZUdyb3VwVGV4dD8ubGFiZWw/LmFyaWFMYWJlbD8uZ3JvdXBOYW1lLFxyXG4gICAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOiB0aGlzLmNyZWF0ZUdyb3VwVGV4dD8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkXHJcbiAgICAgICAgICAgICAgICA/Lmdyb3VwTmFtZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5JTlBVVCxcclxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy5jcmVhdGVHcm91cFRleHQ/LmxhYmVsPy5zaG9ydE5hbWUgKyBcIipcIixcclxuICAgICAgICAgICAgICBjb250cm9sTmFtZTogXCJzaG9ydE5hbWVcIixcclxuICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTogdGhpcy5jcmVhdGVHcm91cFRleHQ/Lm1lc3NhZ2U/LmVycm9yXHJcbiAgICAgICAgICAgICAgICA/LnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgIHZhbHVlOiBcIlwiLFxyXG4gICAgICAgICAgICAgIHBhdHRlcm5FcnJvck1lc3NhZ2U6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5tZXNzYWdlPy5lcnJvcj8ucGF0dGVyblxyXG4gICAgICAgICAgICAgICAgPy5zaG9ydE5hbWUsXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgc3VwcG9ydE1lc3NhZ2U6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5zdXBwb3J0VGV4dD8uc2hvcnROYW1lLFxyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb246IFtcclxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aChcclxuICAgICAgICAgICAgICAgICAgc2NyZWVuVGV4dHM/LmNyZWF0ZUdyb3VwPy5jaGFyYWN0ZXJMaW1pdD8uY2hhcmFjdGVyMTVcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oR3JvdXBzVmFsaWRhdGlvblBhdHRlcm5zLnNob3J0TmFtZSksXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBtYXhFcnJvck1lc3NhZ2U6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5tZXNzYWdlPy5lcnJvcj8ubGltaXRcclxuICAgICAgICAgICAgICAgID8uc2hvcnROYW1lLFxyXG4gICAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5jcmVhdGVHcm91cFRleHQ/LmxhYmVsPy5hcmlhTGFiZWw/LnNob3J0TmFtZSxcclxuICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDogdGhpcy5jcmVhdGVHcm91cFRleHQ/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZFxyXG4gICAgICAgICAgICAgICAgPy5zaG9ydE5hbWUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuVEVYVF9BUkVBLFxyXG4gICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmNyZWF0ZUdyb3VwVGV4dD8ubGFiZWw/Lmdyb3VwU2NvcGUsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6IFwiZ3JvdXBTY29wZVwiLFxyXG4gICAgICAgICAgICAgIHBhdHRlcm5FcnJvck1lc3NhZ2U6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5tZXNzYWdlPy5lcnJvcj8ucGF0dGVyblxyXG4gICAgICAgICAgICAgICAgPy5ncm91cFNjb3BlLFxyXG4gICAgICAgICAgICAgIHZhbHVlOiBcIlwiLFxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIlwiLFxyXG4gICAgICAgICAgICAgIHN1cHBvcnRNZXNzYWdlOiB0aGlzLmNyZWF0ZUdyb3VwVGV4dD8uc3VwcG9ydFRleHQ/Lmdyb3VwU2NvcGUsXHJcbiAgICAgICAgICAgICAgaXNSZXNpemU6IHRydWUsXHJcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoOlxyXG4gICAgICAgICAgICAgICAgc2NyZWVuVGV4dHM/LmNyZWF0ZUdyb3VwPy5jaGFyYWN0ZXJMaW1pdD8uY2hhcmFjdGVyMjAwMCxcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbXHJcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aChcclxuICAgICAgICAgICAgICAgICAgc2NyZWVuVGV4dHM/LmNyZWF0ZUdyb3VwPy5jaGFyYWN0ZXJMaW1pdD8uY2hhcmFjdGVyMTUwMFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihHcm91cHNWYWxpZGF0aW9uUGF0dGVybnMuZ3JvdXBTY29wZSksXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBtYXhFcnJvck1lc3NhZ2U6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5tZXNzYWdlPy5lcnJvcj8ubGltaXRcclxuICAgICAgICAgICAgICAgID8uZ3JvdXBTY29wZSxcclxuICAgICAgICAgICAgICBhcmlhTGFiZWw6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5sYWJlbD8uYXJpYUxhYmVsPy5ncm91cFNjb3BlLFxyXG4gICAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOiB0aGlzLmNyZWF0ZUdyb3VwVGV4dD8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkXHJcbiAgICAgICAgICAgICAgICA/Lmdyb3VwU2NvcGUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0sXHJcbiAgICB9O1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRQYXJlbnRHcm91cEluZm8/Lmdyb3VwSWQpIHtcclxuICAgICAgdGhpcy51cGRhdGVDcmVhdGVGb3JtR3JvdXAodGhpcy5zZWxlY3RlZFBhcmVudEdyb3VwSW5mbyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIGNyZWF0ZSBzdWIgZ3JvdXAgZm9ybSBncm91cCBhcnJheS5cclxuICAgKiBAcGFyYW0ge0dyb3VwSW5mb30gcGFyZW50R3JvdXBJbmZvIC1QYXJlbnQgZ3JvdXAgaW5mby5cclxuICAgKiBAbWVtYmVyb2YgQ3JlYXRlR3JvdXBDb21wb25lbnRcclxuICAgKi9cclxuICB1cGRhdGVDcmVhdGVGb3JtR3JvdXAocGFyZW50R3JvdXBJbmZvOiBHcm91cEluZm8pIHtcclxuICAgIGNvbnN0IHBhcmVudEdyb3VwID0ge1xyXG4gICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuVEVYVF9BUkVBLFxyXG4gICAgICBsYWJlbDogdGhpcy5jcmVhdGVHcm91cFRleHQ/LmxhYmVsPy5wYXJlbnRHcm91cCxcclxuICAgICAgY29udHJvbE5hbWU6IFwicGFyZW50R3JvdXBcIixcclxuICAgICAgaXNSZWFkb25seTogdHJ1ZSxcclxuICAgICAgYXJpYU11bHRpbGluZTogZmFsc2UsXHJcbiAgICAgIHZhbHVlOiBwYXJlbnRHcm91cEluZm8/Lmdyb3VwTmFtZSxcclxuICAgICAgYXJpYUxhYmVsOiB0aGlzLmNyZWF0ZUdyb3VwVGV4dD8ubGFiZWw/LmFyaWFMYWJlbD8ucGFyZW50R3JvdXAsXHJcbiAgICAgIGlzUmVzaXplOiB0cnVlLFxyXG4gICAgfTtcclxuICAgIHRoaXMuZm9ybUdyb3VwPy5mb3JtR3JvdXBbMF0/LmNvbnRyb2xzPy51bnNoaWZ0KHBhcmVudEdyb3VwKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBjbGllbnQgc2lkZSB2YWxpZGF0aW9uIGFuZCBlbWl0cyBjcmVhdGUgZ3JvdXAgaW5mb3JtYXRpb24uXHJcbiAgICogQHBhcmFtIHtGb3JtR3JvdXBbXX0gZm9ybSAtQXJyYXkgb2YgZm9ybUdyb3VwXHJcbiAgICogQHJldHVybiAtcmV0dXJucyBub3RoaW5nXHJcbiAgICogQG1lbWJlcm9mIENyZWF0ZUdyb3VwQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25Gb3JtU3VibWl0KGZvcm06IEZvcm1Hcm91cFtdKTogdm9pZCB7XHJcbiAgICBmb3JtWzBdPy5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICBpZiAoZm9ybVswXS5zdGF0dXMgPT09IEZvcm1TdGF0dXMuVkFMSUQpIHtcclxuICAgICAgY29uc3QgZm9ybVJlc3BvbnNlID0gZm9ybVswXS5nZXRSYXdWYWx1ZSgpO1xyXG4gICAgICBjb25zdCBjcmVhdGVHcm91cFBheWxvYWQ6IENyZWF0ZUdyb3VwUGF5bG9hZCA9IHtcclxuICAgICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgICBncm91cE5hbWU6IGZvcm1SZXNwb25zZT8uZ3JvdXBOYW1lLFxyXG4gICAgICAgICAgZ3JvdXBTaG9ydE5hbWU6IGZvcm1SZXNwb25zZT8uc2hvcnROYW1lLFxyXG4gICAgICAgICAgZ3JvdXBUeXBlOiBmb3JtUmVzcG9uc2U/Lmdyb3VwVHlwZT8uaWQsXHJcbiAgICAgICAgICBncm91cERlc2M6IGZvcm1SZXNwb25zZT8uZ3JvdXBTY29wZSxcclxuICAgICAgICAgIGdyb3VwUGFyZW50SWQ6IHRoaXMuc2VsZWN0ZWRQYXJlbnRHcm91cEluZm8/Lmdyb3VwSWQgPz8gbnVsbCxcclxuICAgICAgICB9LFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmdyb3Vwc1NlcnZpY2VcclxuICAgICAgICAuY3JlYXRlR3JvdXAoY3JlYXRlR3JvdXBQYXlsb2FkKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcz8uc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdWJtaXRGb3JtUmVzcG9uc2UuZW1pdChyZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvckNvZGVzOiBzdHJpbmdbXSA9IGVycm9yPy5lcnJvcj8uYm9keT8uZXJyb3JDb2RlcztcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXJyb3JDb2RlcykpIHtcclxuICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2U6IHN0cmluZ1tdID0gdGhpcy5ncm91cHNTZXJ2aWNlLnBhcnNlRXJyb3JNZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgZXJyb3JDb2Rlc1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKGVycm9yTWVzc2FnZSwgQWxlcnRUeXBlLkVSUk9SKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvciAmJiBlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nbG9iYWxFcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBmb3JtIHJlZmVyZW5jZS5cclxuICAgKiBAcGFyYW0ge0Zvcm1Hcm91cFtdfSBmb3JtXHJcbiAgICogQG1lbWJlcm9mIENyZWF0ZUdyb3VwQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0Rm9ybUdyb3VwUmVmZXJlbmNlKGZvcm06IEZvcm1Hcm91cFtdKSB7XHJcbiAgICB0aGlzLmZvcm0gPSBmb3JtWzBdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBhbGVydHMgZm9yIGVycm9yLCB3YXJuaW5nLlxyXG4gICAqIEBwYXJhbSB7KHN0cmluZyB8IHN0cmluZ1tdKX0gbWVzc2FnZSAtZXJyb3Igb3Igd2FybmluZyBtZXNzYWdlXHJcbiAgICogQHBhcmFtIHtBbGVydFR5cGV9IGFsZXJ0VHlwZVxyXG4gICAqIEByZXR1cm4gLXJldHVybnMgbm90aGluZ1xyXG4gICAqIEBtZW1iZXJvZiBDcmVhdGVHcm91cENvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNob3dBbGVydE1lc3NhZ2UobWVzc2FnZTogc3RyaW5nIHwgc3RyaW5nW10sIGFsZXJ0VHlwZTogQWxlcnRUeXBlKTogdm9pZCB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93TWVzc2FnZSh7XHJcbiAgICAgIHN0YXR1czogXCJjdXN0b21cIixcclxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcclxuICAgICAgYWxlcnRUeXBlOiBhbGVydFR5cGUsXHJcbiAgICAgIGlzQ2xvc2VOZWVkZWQ6IHRydWUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIGZvcm0gY2FuY2VsIGV2ZW50LlxyXG4gICAqIEByZXR1cm4gLXJldHVybnMgbm90aGluZ1xyXG4gICAqIEBtZW1iZXJvZiBDcmVhdGVHcm91cENvbXBvbmVudFxyXG4gICAqL1xyXG4gIGNyZWF0ZUdyb3VwQ2FuY2VsbGVkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtQ2FuY2VsLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE5nT25EZXN0cm95IHBlcmZvcm1zIG5lY2Vzc2FyeSBjbGVhbnVwIHRhc2tzLCBzdWNoIGFzIHVuc3Vic2NyaWJpbmcgZnJvbSBzdWJzY3JpcHRpb24gd2hlbiB0aGUgY29tcG9uZW50IGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgKiBAbWVtYmVyb2YgQ3JlYXRlR3JvdXBDb21wb25lbnRcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcbn1cclxuIiwiPGllZWVzYS1keW5hbWljLWZvcm1cclxuICAqbmdJZj1cImZvcm1Hcm91cFwiXHJcbiAgW2xlZnRCdXR0b25MYWJlbF09XCJsZWZ0QnV0dG9uTGFiZWxcIlxyXG4gIFtyaWdodEJ1dHRvbkxhYmVsXT1cInJpZ2h0QnV0dG9uTGFiZWxcIlxyXG4gIFtpc0xlZ2VuZFZpc2libGVdPVwiaXNMZWdlbmRWaXNpYmxlXCJcclxuICBbY29sV2lkdGhdPVwiY29sV2lkdGhcIlxyXG4gIFthY3Rpb25CdXR0b25BbGlnbl09XCJhY3Rpb25CdXR0b25BbGlnblwiXHJcbiAgW2Zvcm1Hcm91cHNdPVwiZm9ybUdyb3VwXCJcclxuICBbaXNMZWZ0QnV0dG9uTmVlZGVkXT1cImlzTGVmdEJ1dHRvbk5lZWRlZFwiXHJcbiAgKGZvcm1TdWJtaXQpPVwib25Gb3JtU3VibWl0KCRldmVudClcIlxyXG4gIChmb3JtTGVmdEJ1dHRvbkNsaWNrZWQpPVwiY3JlYXRlR3JvdXBDYW5jZWxsZWQoKVwiXHJcbiAgKGZvcm1Hcm91cHNSZWZlcmVuY2UpPVwiZ2V0Rm9ybUdyb3VwUmVmZXJlbmNlKCRldmVudClcIlxyXG4+PC9pZWVlc2EtZHluYW1pYy1mb3JtPiJdfQ==
@@ -0,0 +1,7 @@
1
+ /* eslint-disable no-unused-vars */
2
+ export var FormStatus;
3
+ (function (FormStatus) {
4
+ FormStatus["VALID"] = "VALID";
5
+ FormStatus["INVALID"] = "INVALID";
6
+ })(FormStatus || (FormStatus = {}));
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zdGF0dXMubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9tb2RlbHMvZm9ybS1zdGF0dXMubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUNBQW1DO0FBQ25DLE1BQU0sQ0FBTixJQUFZLFVBR1g7QUFIRCxXQUFZLFVBQVU7SUFDcEIsNkJBQWUsQ0FBQTtJQUNmLGlDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFIVyxVQUFVLEtBQVYsVUFBVSxRQUdyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXHJcbmV4cG9ydCBlbnVtIEZvcm1TdGF0dXMge1xyXG4gIFZBTElEID0gXCJWQUxJRFwiLFxyXG4gIElOVkFMSUQgPSBcIklOVkFMSURcIixcclxufSJdfQ==
@@ -166,7 +166,8 @@ var errors = {
166
166
  "1015": "Group Name contains invalid characters. Please enter alphanumeric, special characters and whitespace only.",
167
167
  "1016": "Group Name must not be greater than 500 characters long.",
168
168
  "1017": "Group Short Name must not be greater than 15 characters long.",
169
- "1018": "Group Short Name contains invalid characters. Please enter '.',',', '/'', '-', '_' only."
169
+ "1018": "Group Short Name contains invalid characters. Please enter '.',',', '/'', '-', '_' only.",
170
+ ER1000: "Allowed group types are not found for the selected group!"
170
171
  };
171
172
  var constants = {
172
173
  createGroup: createGroup,
@@ -194,6 +195,13 @@ const GroupsValidationPatterns = {
194
195
  groupScope: /^(?=.*[a-zA-Z])[\w\s!"#$%&'()*+,-.\/\:;<=>?@[\]^_`{|}~\\]+$/i
195
196
  };
196
197
 
198
+ /* eslint-disable no-unused-vars */
199
+ var FormStatus;
200
+ (function (FormStatus) {
201
+ FormStatus["VALID"] = "VALID";
202
+ FormStatus["INVALID"] = "INVALID";
203
+ })(FormStatus || (FormStatus = {}));
204
+
197
205
  /**
198
206
  * Groups service is an abstract layer and responsible for managing groups REST API calls.
199
207
  * @class GroupsService
@@ -370,27 +378,40 @@ class CreateGroupComponent {
370
378
  .subscribe({
371
379
  next: (res) => {
372
380
  if (res?.status) {
373
- this.groupTypes = Object.entries(res.body.configFieldValue).map(
374
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
375
- ([id, item]) => ({
376
- id: id,
377
- name: item.name,
378
- }));
379
- if (this.groupTypes.length) {
381
+ this.selectedParentGroupInfo = this.groupsService?.getSelectedGroupInfo();
382
+ const configFieldValue = res?.body?.configFieldValue;
383
+ if (this.selectedParentGroupInfo?.groupType) {
384
+ const allowedGroupType = configFieldValue[this.selectedParentGroupInfo?.groupType]
385
+ ?.businessRule?.allowedGroupType;
386
+ if (allowedGroupType?.length) {
387
+ this.groupTypes = allowedGroupType.map((groupTypeId) => ({
388
+ id: groupTypeId,
389
+ name: configFieldValue[groupTypeId]?.name,
390
+ }));
391
+ }
392
+ else {
393
+ this.showAlertMessage(errors?.ER1000, AlertType.ERROR);
394
+ }
395
+ }
396
+ else {
397
+ this.groupTypes = Object.entries(configFieldValue).map(([id, item]) => ({
398
+ id,
399
+ name: item?.name,
400
+ }));
401
+ }
402
+ if (this.groupTypes?.length) {
380
403
  this.createFormGroup();
381
404
  }
405
+ else {
406
+ this.showAlertMessage(errors?.["1010"], AlertType.ERROR);
407
+ }
382
408
  }
383
409
  },
384
410
  error: (error) => {
385
411
  const errorCodes = error?.error?.body?.errorCodes;
386
412
  if (Array.isArray(errorCodes)) {
387
413
  const errorMessage = this.groupsService.parseErrorMessage(errorCodes);
388
- this.alertService.showMessage({
389
- status: "custom",
390
- message: errorMessage,
391
- alertType: AlertType.ERROR,
392
- isCloseNeeded: true,
393
- });
414
+ this.showAlertMessage(errorMessage, AlertType.ERROR);
394
415
  }
395
416
  else if (error && error instanceof HttpErrorResponse) {
396
417
  this.globalErrorHandlerService.handleError(error);
@@ -492,7 +513,6 @@ class CreateGroupComponent {
492
513
  },
493
514
  ],
494
515
  };
495
- this.selectedParentGroupInfo = this.groupsService.getSelectedGroupInfo();
496
516
  if (this.selectedParentGroupInfo?.groupId) {
497
517
  this.updateCreateFormGroup(this.selectedParentGroupInfo);
498
518
  }
@@ -523,7 +543,7 @@ class CreateGroupComponent {
523
543
  */
524
544
  onFormSubmit(form) {
525
545
  form[0]?.markAllAsTouched();
526
- if (form[0].status === "VALID") {
546
+ if (form[0].status === FormStatus.VALID) {
527
547
  const formResponse = form[0].getRawValue();
528
548
  const createGroupPayload = {
529
549
  payload: {
@@ -531,8 +551,8 @@ class CreateGroupComponent {
531
551
  groupShortName: formResponse?.shortName,
532
552
  groupType: formResponse?.groupType?.id,
533
553
  groupDesc: formResponse?.groupScope,
534
- groupParentId: this.selectedParentGroupInfo?.groupId ?? null
535
- }
554
+ groupParentId: this.selectedParentGroupInfo?.groupId ?? null,
555
+ },
536
556
  };
537
557
  this.groupsService
538
558
  .createGroup(createGroupPayload)
@@ -547,12 +567,7 @@ class CreateGroupComponent {
547
567
  const errorCodes = error?.error?.body?.errorCodes;
548
568
  if (Array.isArray(errorCodes)) {
549
569
  const errorMessage = this.groupsService.parseErrorMessage(errorCodes);
550
- this.alertService.showMessage({
551
- status: "custom",
552
- message: errorMessage,
553
- alertType: AlertType.ERROR,
554
- isCloseNeeded: true,
555
- });
570
+ this.showAlertMessage(errorMessage, AlertType.ERROR);
556
571
  }
557
572
  else if (error && error instanceof HttpErrorResponse) {
558
573
  this.globalErrorHandlerService.handleError(error);
@@ -569,6 +584,21 @@ class CreateGroupComponent {
569
584
  getFormGroupReference(form) {
570
585
  this.form = form[0];
571
586
  }
587
+ /**
588
+ * Handles alerts for error, warning.
589
+ * @param {(string | string[])} message -error or warning message
590
+ * @param {AlertType} alertType
591
+ * @return -returns nothing
592
+ * @memberof CreateGroupComponent
593
+ */
594
+ showAlertMessage(message, alertType) {
595
+ this.alertService.showMessage({
596
+ status: "custom",
597
+ message: message,
598
+ alertType: alertType,
599
+ isCloseNeeded: true,
600
+ });
601
+ }
572
602
  /**
573
603
  * Emits form cancel event.
574
604
  * @return -returns nothing
@@ -1 +1 @@
1
- {"version":3,"file":"ieeesa-npm-groups.mjs","sources":["../../../projects/groups/src/lib/assets/form-validations.ts","../../../projects/groups/src/lib/services/groups.service.ts","../../../projects/groups/src/lib/components/create-group/create-group.component.ts","../../../projects/groups/src/lib/components/create-group/create-group.component.html","../../../projects/groups/src/lib/models/group-action.model.ts","../../../projects/groups/src/lib/components/tree-view/tree-view.component.ts","../../../projects/groups/src/lib/components/tree-view/tree-view.component.html","../../../projects/groups/src/lib/models/group-function-type.model.ts","../../../projects/groups/src/lib/groups.component.ts","../../../projects/groups/src/lib/groups.component.html","../../../projects/groups/src/lib/groups.module.ts","../../../projects/groups/src/public-api.ts","../../../projects/groups/src/ieeesa-npm-groups.ts"],"sourcesContent":["/* eslint-disable no-useless-escape */\r\nexport const GroupsValidationPatterns = {\r\n // Group Name field regular expression, which accept Alpha Numeric, Special Characters (ASCII) and whitespace.\r\n groupName: /^(?=.*[a-zA-Z])[\\w\\s!\"#$%&'()*+,-.\\/\\:;<=>?@[\\]^_`{|}~\\\\]+$/i,\r\n // Group Short Name field regular expression which accept letters, numbers and \".\",\",\" , \"/\", \"-\" , \"_\" characters.\r\n shortName: /^(?=.*[a-zA-Z])[a-zA-Z0-9.,\\/\\-_ ]+$/,\r\n // Group Scope field regular expression which accept Alpha Numeric, Special Characters and whitespace.\r\n groupScope: /^(?=.*[a-zA-Z])[\\w\\s!\"#$%&'()*+,-.\\/\\:;<=>?@[\\]^_`{|}~\\\\]+$/i\r\n};","import { Injectable } from \"@angular/core\";\r\nimport { Observable, map, catchError } from \"rxjs\";\r\nimport {\r\n CreateGroupPayload,\r\n CreateGroupResponse,\r\n} from \"../models/create-group.model\";\r\nimport { GroupTypeResponse } from \"../models/group-types.model\";\r\nimport { AlertsService, HttpService } from \"@ieeesa-npm/utility\";\r\nimport { GetGroupResponse, GetGroupsPayload } from \"../models/view-group.model\";\r\nimport * as screenTexts from \"../assets/constants.json\";\r\nimport { DeleteGroupPayload } from '../models/delete-group.model';\r\nimport { GroupInfo } from \"../models/group-info.model\";\r\n\r\n/**\r\n * Groups service is an abstract layer and responsible for managing groups REST API calls.\r\n * @class GroupsService\r\n */\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class GroupsService {\r\n groupsText = screenTexts?.errors;\r\n apiBaseUrl!: string;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n userPermission: any;\r\n selectedGroupInfo!: GroupInfo | undefined;\r\n // eslint-disable-next-line no-empty-function, no-unused-vars\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private httpService: HttpService,\r\n // eslint-disable-next-line no-unused-vars\r\n public alertService: AlertsService // eslint-disable-next-line no-empty-function\r\n ) {}\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n setAppConfig(apiBaseUrl: string, userPermission: any) {\r\n this.apiBaseUrl = apiBaseUrl;\r\n this.userPermission = userPermission;\r\n }\r\n /**\r\n * Gets application group types from API and returns it as an observable.\r\n * @return {Observable<GroupTypeResponse>} -It returns group types if success else error.\r\n * @memberof GroupsService\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n getGroupTypes(): Observable<GroupTypeResponse> {\r\n return this.httpService\r\n .getData(`${this.apiBaseUrl}/configurations/group_type`)\r\n .pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((error) => {\r\n throw error;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Returns all the groups based on passed group Id and group type.\r\n * @param {GetGroupsPayload} getGroupsPayload\r\n * @return {Observable<GetGroupResponse>}\r\n * @memberof GroupsService\r\n */\r\n getGroups(getGroupsPayload: GetGroupsPayload): Observable<GetGroupResponse> {\r\n let url = \"rootGroups\";\r\n if (getGroupsPayload.groupId)\r\n url = \"immChildGroupsByGroupId/\" + getGroupsPayload.groupId;\r\n else if (getGroupsPayload.groupTypeId)\r\n url = \"groupsByGroupType/\" + getGroupsPayload.groupTypeId;\r\n\r\n return this.httpService.getData(`${this.apiBaseUrl}/groups/${url}`).pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((errorRes) => {\r\n throw errorRes;\r\n })\r\n );\r\n }\r\n /**\r\n * Deletes a group based on the provided information\r\n * @param {groupId} string -groupId of the group which is to be deleted\r\n * @return {*} {Observable<any>} -Observable representing the group deletion response\r\n * @memberof GroupsService\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n deleteGroup(deleteGroupPayload: DeleteGroupPayload): Observable<any> {\r\n return this.httpService\r\n .putData(`${this.apiBaseUrl}/groups/delete`, deleteGroupPayload)\r\n .pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((error) => {\r\n throw error;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Posts create group form data to server using HttpService for creating new group.\r\n * @param {CreateGroupPayload} createGroupPayload -create group form data which includes group name, type, short name, scope.\r\n * @return {Observable<any>} -returns create group API response (success or error) as an observable.\r\n * @memberof GroupsService\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n createGroup(\r\n createGroupPayload: CreateGroupPayload\r\n ): Observable<CreateGroupResponse> {\r\n return this.httpService\r\n .postData(`${this.apiBaseUrl}/groups/create`, createGroupPayload)\r\n .pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((error) => {\r\n throw error;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * This method will parse the error codes and return the respective error message for each code.\r\n * @param {string[]} errorCodes\r\n * @return {string[]} errorMessage\r\n * @memberof GroupsService\r\n */\r\n parseErrorMessage(errorCodes: string[]) {\r\n const errorMessage: string[] = [];\r\n errorCodes.forEach((item: string, index: number) => {\r\n const errorMessageKey = errorCodes[index] as keyof typeof this.groupsText;\r\n errorMessage.push(this.groupsText[errorMessageKey]);\r\n });\r\n return errorMessage;\r\n }\r\n\r\n /**\r\n * Sets selected group info.\r\n * @param {(GroupInfo | undefined)} selectedGroupInfo -selected group info.\r\n * @memberof GroupsService\r\n */\r\n setSelectedGroupInfo(selectedGroupInfo: GroupInfo | undefined) {\r\n this.selectedGroupInfo = selectedGroupInfo;\r\n }\r\n\r\n /**\r\n * Returns the selected group info.\r\n * @return {(GroupInfo | undefined)} -group info.\r\n * @memberof GroupsService\r\n */\r\n getSelectedGroupInfo(): GroupInfo | undefined {\r\n return this.selectedGroupInfo;\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { FormGroup, Validators } from \"@angular/forms\";\r\nimport {\r\n FormGrid,\r\n FormModel,\r\n SelectOption,\r\n DynamicFormComponent,\r\n FormControlType,\r\n AlignType,\r\n} from \"@ieeesa-npm/presentation\";\r\nimport {\r\n AlertsService,\r\n AlertType,\r\n GlobalErrorHandlerService,\r\n} from \"@ieeesa-npm/utility\";\r\nimport * as screenTexts from \"../../assets/constants.json\";\r\nimport { GroupsValidationPatterns } from \"../../assets/form-validations\";\r\nimport { CreateGroupPayload } from \"../../models/create-group.model\";\r\nimport { GroupsService } from \"../../services/groups.service\";\r\nimport { HttpErrorResponse } from \"@angular/common/http\";\r\nimport { MatDialogModule } from \"@angular/material/dialog\";\r\nimport { Subject, takeUntil } from \"rxjs\";\r\nimport { GroupType } from \"../../models/group-types.model\";\r\nimport { GroupInfo } from \"../../models/group-info.model\";\r\n\r\n/**\r\n * CreateGroupComponent uses DynamicFormComponent to build create new group form and implement the functionalities of submission of form and handling success and error scenarios.\r\n * @class CreateGroupComponent\r\n * @implements {OnInit}\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n // eslint-disable-next-line @angular-eslint/component-selector\r\n selector: \"ieeesa-create-group\",\r\n standalone: true,\r\n imports: [CommonModule, DynamicFormComponent, MatDialogModule],\r\n templateUrl: \"./create-group.component.html\",\r\n styleUrls: [\"./create-group.component.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [AlertsService],\r\n})\r\nexport class CreateGroupComponent implements OnInit, OnDestroy {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n /**\r\n * Event emitted when the form is successfully submitted.\r\n * @memberof CreateGroupComponent\r\n */\r\n @Output() submitFormResponse = new EventEmitter();\r\n /**\r\n * Event emitted when the form is cancelled.\r\n * @memberof CreateGroupComponent\r\n */\r\n @Output() formCancel = new EventEmitter();\r\n createGroupText = screenTexts?.createGroup;\r\n leftButtonLabel = this.createGroupText?.label?.leftButtonLabel;\r\n rightButtonLabel = this.createGroupText?.label?.rightButtonLabel;\r\n isLegendVisible = false;\r\n isLeftButtonNeeded = true;\r\n colWidth: FormGrid = { xs: 12, xl: 12, sm: 12, md: 12, lg: 12 };\r\n formGroup!: FormModel;\r\n groupTypes!: SelectOption[];\r\n actionButtonAlign = AlignType.LEFT;\r\n form!: FormGroup;\r\n selectedParentGroupInfo!: GroupInfo | undefined;\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private groupsService: GroupsService,\r\n // eslint-disable-next-line no-unused-vars\r\n private globalErrorHandlerService: GlobalErrorHandlerService,\r\n // eslint-disable-next-line no-unused-vars\r\n public alertService: AlertsService // eslint-disable-next-line no-empty-function\r\n ) {}\r\n\r\n /**\r\n * Initialize the create group form group array and component.\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n ngOnInit(): void {\r\n this.groupsService\r\n .getGroupTypes()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n if (res?.status) {\r\n this.groupTypes = Object.entries(res.body.configFieldValue).map(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n ([id, item]: [string, GroupType]) => ({\r\n id: id,\r\n name: item.name,\r\n })\r\n );\r\n if (this.groupTypes.length) {\r\n this.createFormGroup();\r\n }\r\n }\r\n },\r\n error: (error) => {\r\n const errorCodes: string[] = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes)) {\r\n const errorMessage = this.groupsService.parseErrorMessage(\r\n errorCodes\r\n );\r\n this.alertService.showMessage({\r\n status: \"custom\",\r\n message: errorMessage,\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService.handleError(error);\r\n }\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Initialize the create group form group array.\r\n * @memberof CreateGroupComponent\r\n */\r\n createFormGroup(): void {\r\n this.formGroup = {\r\n formGroup: [\r\n {\r\n legend: \"\",\r\n controls: [\r\n {\r\n type: FormControlType.SELECT,\r\n label: this.createGroupText?.label?.groupType + \"*\",\r\n controlName: \"groupType\",\r\n requiredErrorMessage: this.createGroupText?.message?.error\r\n ?.required,\r\n value: \"\",\r\n validation: [Validators.required],\r\n dropdownOptions: this.groupTypes,\r\n supportMessage: this.createGroupText?.supportText?.groupType,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.groupType,\r\n placeholder: \"\",\r\n ariaDescribedById: this.createGroupText?.label?.ariaDescribedById\r\n ?.groupType,\r\n },\r\n {\r\n type: FormControlType.INPUT,\r\n label: this.createGroupText?.label?.groupName + \"*\",\r\n controlName: \"groupName\",\r\n requiredErrorMessage: this.createGroupText?.message?.error\r\n ?.required,\r\n value: \"\",\r\n placeholder: \"\",\r\n supportMessage: this.createGroupText?.supportText?.groupName,\r\n patternErrorMessage: this.createGroupText?.message?.error?.pattern\r\n ?.groupName,\r\n validation: [\r\n Validators.required,\r\n Validators.maxLength(\r\n screenTexts?.createGroup?.characterLimit?.character500\r\n ),\r\n Validators.pattern(GroupsValidationPatterns.groupName),\r\n ],\r\n maxErrorMessage: this.createGroupText?.message?.error?.limit\r\n ?.groupName,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.groupName,\r\n ariaDescribedById: this.createGroupText?.label?.ariaDescribedById\r\n ?.groupName,\r\n },\r\n {\r\n type: FormControlType.INPUT,\r\n label: this.createGroupText?.label?.shortName + \"*\",\r\n controlName: \"shortName\",\r\n requiredErrorMessage: this.createGroupText?.message?.error\r\n ?.required,\r\n value: \"\",\r\n patternErrorMessage: this.createGroupText?.message?.error?.pattern\r\n ?.shortName,\r\n placeholder: \"\",\r\n supportMessage: this.createGroupText?.supportText?.shortName,\r\n validation: [\r\n Validators.required,\r\n Validators.maxLength(\r\n screenTexts?.createGroup?.characterLimit?.character15\r\n ),\r\n Validators.pattern(GroupsValidationPatterns.shortName),\r\n ],\r\n maxErrorMessage: this.createGroupText?.message?.error?.limit\r\n ?.shortName,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.shortName,\r\n ariaDescribedById: this.createGroupText?.label?.ariaDescribedById\r\n ?.shortName,\r\n },\r\n {\r\n type: FormControlType.TEXT_AREA,\r\n label: this.createGroupText?.label?.groupScope,\r\n controlName: \"groupScope\",\r\n patternErrorMessage: this.createGroupText?.message?.error?.pattern\r\n ?.groupScope,\r\n value: \"\",\r\n placeholder: \"\",\r\n supportMessage: this.createGroupText?.supportText?.groupScope,\r\n isResize: true,\r\n maxLength:\r\n screenTexts?.createGroup?.characterLimit?.character2000,\r\n validation: [\r\n Validators.maxLength(\r\n screenTexts?.createGroup?.characterLimit?.character1500\r\n ),\r\n Validators.pattern(GroupsValidationPatterns.groupScope),\r\n ],\r\n maxErrorMessage: this.createGroupText?.message?.error?.limit\r\n ?.groupScope,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.groupScope,\r\n ariaDescribedById: this.createGroupText?.label?.ariaDescribedById\r\n ?.groupScope,\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n this.selectedParentGroupInfo = this.groupsService.getSelectedGroupInfo();\r\n if (this.selectedParentGroupInfo?.groupId) {\r\n this.updateCreateFormGroup(this.selectedParentGroupInfo);\r\n }\r\n }\r\n\r\n /**\r\n * Update the create sub group form group array.\r\n * @param {GroupInfo} parentGroupInfo -Parent group info.\r\n * @memberof CreateGroupComponent\r\n */\r\n updateCreateFormGroup(parentGroupInfo: GroupInfo) {\r\n const parentGroup = {\r\n type: FormControlType.TEXT_AREA,\r\n label: this.createGroupText?.label?.parentGroup,\r\n controlName: \"parentGroup\",\r\n isReadonly: true,\r\n ariaMultiline: false,\r\n value: parentGroupInfo?.groupName,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.parentGroup,\r\n isResize: true,\r\n };\r\n this.formGroup?.formGroup[0]?.controls?.unshift(parentGroup);\r\n }\r\n /**\r\n * Handles client side validation and emits create group information.\r\n * @param {FormGroup[]} form -Array of formGroup\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n onFormSubmit(form: FormGroup[]): void {\r\n form[0]?.markAllAsTouched();\r\n if (form[0].status === \"VALID\") {\r\n const formResponse = form[0].getRawValue();\r\n const createGroupPayload: CreateGroupPayload = {\r\n payload: {\r\n groupName: formResponse?.groupName,\r\n groupShortName: formResponse?.shortName,\r\n groupType: formResponse?.groupType?.id,\r\n groupDesc: formResponse?.groupScope,\r\n groupParentId: this.selectedParentGroupInfo?.groupId ?? null\r\n }\r\n };\r\n this.groupsService\r\n .createGroup(createGroupPayload)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n if (res?.status) {\r\n this.submitFormResponse.emit(res);\r\n }\r\n },\r\n error: (error) => {\r\n const errorCodes: string[] = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes)) {\r\n const errorMessage: string[] = this.groupsService.parseErrorMessage(\r\n errorCodes\r\n );\r\n this.alertService.showMessage({\r\n status: \"custom\",\r\n message: errorMessage,\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService.handleError(error);\r\n }\r\n },\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Get form reference.\r\n * @param {FormGroup[]} form\r\n * @memberof CreateGroupComponent\r\n */\r\n getFormGroupReference(form: FormGroup[]) {\r\n this.form = form[0];\r\n }\r\n\r\n /**\r\n * Emits form cancel event.\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n createGroupCancelled(): void {\r\n this.formCancel.emit();\r\n }\r\n\r\n /**\r\n * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof CreateGroupComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<ieeesa-dynamic-form\r\n *ngIf=\"formGroup\"\r\n [leftButtonLabel]=\"leftButtonLabel\"\r\n [rightButtonLabel]=\"rightButtonLabel\"\r\n [isLegendVisible]=\"isLegendVisible\"\r\n [colWidth]=\"colWidth\"\r\n [actionButtonAlign]=\"actionButtonAlign\"\r\n [formGroups]=\"formGroup\"\r\n [isLeftButtonNeeded]=\"isLeftButtonNeeded\"\r\n (formSubmit)=\"onFormSubmit($event)\"\r\n (formLeftButtonClicked)=\"createGroupCancelled()\"\r\n (formGroupsReference)=\"getFormGroupReference($event)\"\r\n></ieeesa-dynamic-form>","/* eslint-disable no-unused-vars */\r\nexport enum GroupAction {\r\n VIEW_ROSTER = 1,\r\n CREATE_SUB_GROUP = 2,\r\n EDIT_GROUP = 3,\r\n DELETE_GROUP = 4,\r\n EXPAND_GROUP_VIEW = 5,\r\n COLLAPSE_GROUP_VIEW = 6,\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Injectable,\r\n Input,\r\n OnInit,\r\n Output,\r\n AfterViewInit,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport {\r\n MenuComponent,\r\n Menu,\r\n IconButtonComponent,\r\n IconButton,\r\n} from '@ieeesa-npm/presentation';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { GroupAction } from '../../models/group-action.model';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n CollectionViewer,\r\n SelectionChange,\r\n DataSource,\r\n} from '@angular/cdk/collections';\r\nimport { FlatTreeControl } from '@angular/cdk/tree';\r\nimport { BehaviorSubject, merge, Observable, Subject } from 'rxjs';\r\nimport { map, takeUntil } from 'rxjs/operators';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatTreeModule, MatTreeNodePadding } from '@angular/material/tree';\r\nimport { GroupInfo } from '../../models/group-info.model';\r\n\r\n/**\r\n * Dynamic Flat node creates a node structure\r\n * @export\r\n * @class GroupNode\r\n */\r\nexport class GroupNode {\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n public item: GroupInfo,\r\n // eslint-disable-next-line no-unused-vars\r\n public level = 1,\r\n // eslint-disable-next-line no-unused-vars\r\n public expandable = false,\r\n // eslint-disable-next-line no-unused-vars\r\n public isLoading = false // eslint-disable-next-line no-empty-function\r\n ) {}\r\n}\r\n\r\n/**\r\n * Groups stores the parent nodes and child nodes\r\n * @export\r\n * @class Groups\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class Groups {\r\n rootLevelNodes!: GroupInfo[];\r\n /** Initial data from database */\r\n private childGroups!: GroupInfo[];\r\n /**\r\n * Get the Child groups info\r\n * @return {*} {GroupInfo[]}\r\n * @memberof Groups\r\n */\r\n getChildGroupsInfo(): GroupInfo[] {\r\n return this.childGroups;\r\n }\r\n /**\r\n * Sets the Child groups info\r\n * @param {GroupInfo[]} value\r\n * @memberof Groups\r\n */\r\n setChildGroupsInfo(value: GroupInfo[]): void {\r\n this.childGroups = value;\r\n }\r\n /**\r\n * Initialize the groups data and creates the node structure for mat tree\r\n * @param {GroupInfo[]} data\r\n * @return {*} {GroupNode[]}\r\n * @memberof Groups\r\n */\r\n initialData(data: GroupInfo[]): GroupNode[] {\r\n this.rootLevelNodes = data;\r\n return this.rootLevelNodes.map(\r\n (node) => new GroupNode(node, 0, this.isExpandable(node))\r\n );\r\n }\r\n /**\r\n * Checks the node is expandable or not\r\n * @param {GroupInfo} node\r\n * @return {*} {boolean}\r\n * @memberof Groups\r\n */\r\n isExpandable(node: GroupInfo): boolean {\r\n return (!!node.children && node.children.length > 0) || node.hasChildren;\r\n }\r\n}\r\n/**\r\n * Dynamic Data Source handles the connection with dynamic data base\r\n * @export\r\n * @class GroupsDataSource\r\n * @implements {DataSource<GroupNode>}\r\n */\r\nexport class GroupsDataSource implements DataSource<GroupNode> {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n dataChange = new BehaviorSubject<GroupNode[]>([]);\r\n /**\r\n * Gets the updated tree control data\r\n * @type {GroupNode[]}\r\n * @memberof GroupsDataSource\r\n */\r\n get data(): GroupNode[] {\r\n return this.dataChange.value;\r\n }\r\n /**\r\n * Sets the data to tree control and emit the value to intimate the data change\r\n * @memberof GroupsDataSource\r\n */\r\n set data(value: GroupNode[]) {\r\n this.treeControl.dataNodes = value;\r\n this.dataChange.next(value);\r\n }\r\n\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private treeControl: FlatTreeControl<GroupNode>,\r\n // eslint-disable-next-line no-unused-vars\r\n private database: Groups // eslint-disable-next-line no-empty-function\r\n ) {}\r\n\r\n /**\r\n * Handles the connection between the data base and mat tree\r\n * @param {CollectionViewer} collectionViewer\r\n * @return {*} {Observable<GroupNode[]>}\r\n * @memberof GroupsDataSource\r\n */\r\n connect(collectionViewer: CollectionViewer): Observable<GroupNode[]> {\r\n this.treeControl.expansionModel.changed\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((change) => {\r\n if (\r\n (change as SelectionChange<GroupNode>).added ||\r\n (change as SelectionChange<GroupNode>).removed\r\n ) {\r\n this.handleTreeControl(change as SelectionChange<GroupNode>);\r\n }\r\n });\r\n return merge(collectionViewer.viewChange, this.dataChange).pipe(\r\n map(() => this.data)\r\n );\r\n }\r\n /**\r\n * Disconnect the connection with mat tree\r\n * @param {CollectionViewer} collectionViewer\r\n * @memberof GroupsDataSource\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function, no-empty-function, no-unused-vars, @typescript-eslint/no-unused-vars\r\n disconnect(collectionViewer: CollectionViewer): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n\r\n /**\r\n * Adds/removes the child nodes while expands/collapses the parent node\r\n * @param {SelectionChange<GroupNode>} change\r\n * @memberof GroupsDataSource\r\n */\r\n handleTreeControl(change: SelectionChange<GroupNode>) {\r\n if (change.added) {\r\n change.added.forEach((node) => this.toggleNode(node, true));\r\n }\r\n if (change.removed) {\r\n change.removed\r\n .slice()\r\n .reverse()\r\n .forEach((node) => this.toggleNode(node, false));\r\n }\r\n }\r\n\r\n /**\r\n * Toggle the node, add/removes the node from display\r\n * @param {GroupNode} clickedNode\r\n * @param {boolean} expand\r\n * @return {*}\r\n * @memberof GroupsDataSource\r\n */\r\n toggleNode(clickedNode: GroupNode, expand: boolean) {\r\n const children = this.database.getChildGroupsInfo();\r\n const index = this.data.indexOf(clickedNode);\r\n if (!children || index < 0) {\r\n // If no children, or cannot find the node, no op\r\n return;\r\n }\r\n\r\n if (expand) {\r\n const nodes = children.map(\r\n (node) =>\r\n new GroupNode(\r\n node,\r\n clickedNode.level + 1,\r\n this.database.isExpandable(node)\r\n )\r\n );\r\n this.data.splice(index + 1, 0, ...nodes);\r\n } else {\r\n let count = 0;\r\n for (\r\n let i = index + 1;\r\n i < this.data.length && this.data[i].level > clickedNode.level;\r\n i++, count++ // eslint-disable-next-line no-empty\r\n ) {}\r\n this.data.splice(index + 1, count);\r\n }\r\n\r\n // Notify the change\r\n this.dataChange.next(this.data);\r\n }\r\n}\r\n/**\r\n * Displays the groups where parent/child relationships are represented in a tree view/hierarchy.\r\n * @export\r\n * @class TreeViewComponent\r\n * @implements {OnInit}\r\n */\r\n@Component({\r\n selector: 'ieeesa-tree',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatTreeModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MenuComponent,\r\n IconButtonComponent,\r\n ],\r\n templateUrl: './tree-view.component.html',\r\n styleUrls: ['./tree-view.component.scss'],\r\n})\r\nexport class TreeViewComponent implements OnInit, AfterViewInit, OnDestroy {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n buttons: Menu[] = this.constants?.viewGroups?.buttons;\r\n treePaddingIndent: number = this.constants?.viewGroups?.treePaddingIndent;\r\n selectedGroup!: GroupNode;\r\n selectedGroupAction!: Menu | IconButton;\r\n treeControl!: FlatTreeControl<GroupNode>;\r\n dataSource!: GroupsDataSource;\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n matTreeNodePadding!: MatTreeNodePadding<GroupNode>;\r\n plusCircleIconButton: IconButton = this.buttons[4];\r\n minusCircleIconButton: IconButton = this.buttons[5];\r\n menuItems: Menu[] = this.buttons.filter(\r\n (e) =>\r\n e.id !== GroupAction.EXPAND_GROUP_VIEW &&\r\n e.id !== GroupAction.COLLAPSE_GROUP_VIEW\r\n );\r\n private parentGroups!: GroupInfo[];\r\n @Input()\r\n set parentGroupsInfo(value: GroupInfo[]) {\r\n this.parentGroups = value;\r\n if (value) this.setGroupDataSource();\r\n }\r\n get parentGroupsInfo(): GroupInfo[] {\r\n return this.parentGroups;\r\n }\r\n private childGroups!: GroupInfo[];\r\n @Input()\r\n set childGroupsInfo(value: GroupInfo[]) {\r\n this.childGroups = value;\r\n this.loadChildGroups();\r\n }\r\n get childGroupsInfo(): GroupInfo[] {\r\n return this.childGroups;\r\n }\r\n private isGroupSearchOrFilter = false;\r\n @Input()\r\n set isGroupSearchOrFilterActive(value: boolean) {\r\n this.isGroupSearchOrFilter = value;\r\n }\r\n get isGroupSearchOrFilterActive(): boolean {\r\n return this.isGroupSearchOrFilter;\r\n }\r\n private deletedGroupId!: string | undefined;\r\n @Input()\r\n set deletedGroupIdInfo(id: string) {\r\n this.deletedGroupId = id;\r\n this.deleteGroupNode(this.deletedGroupId);\r\n }\r\n get deletedGroupIdInfo(): string | undefined {\r\n return this.deletedGroupId;\r\n }\r\n\r\n @Output() toggleGroupClick = new EventEmitter<GroupInfo>();\r\n @Output() createGroupClick = new EventEmitter<GroupInfo>();\r\n @Output() editGroupClick = new EventEmitter<GroupInfo>();\r\n @Output() deleteGroupClick = new EventEmitter<GroupInfo>();\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(public database: Groups, public elementRef: ElementRef) {}\r\n /**\r\n * Initializes the tree view component\r\n * @memberof TreeViewComponent\r\n */\r\n ngOnInit(): void {\r\n this.setGroupDataSource();\r\n }\r\n /**\r\n * Assign ARIA role for all mat tree nodes as \"row\"\r\n * @memberof TreeViewComponent\r\n */\r\n ngAfterViewInit(): void {\r\n this.dataSource.dataChange.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n const treeItemNodes =\r\n this.elementRef.nativeElement.querySelectorAll('[role=treeitem]');\r\n treeItemNodes?.forEach((node: HTMLElement) => (node.role = 'row'));\r\n });\r\n }\r\n /**\r\n * Gets the level of the node\r\n * @param {GroupNode} node\r\n * @memberof TreeViewComponent\r\n */\r\n getLevel = (node: GroupNode) => node.level;\r\n\r\n /**\r\n * Checks the node is expandable or not\r\n * @param {GroupNode} node\r\n * @memberof TreeViewComponent\r\n */\r\n isExpandable = (node: GroupNode) => node.expandable;\r\n\r\n /**\r\n * Returns true if passed node has children otherwise false\r\n * @param {number} index\r\n * @param {GroupNode} node\r\n * @return {boolean}\r\n * @memberof TreeViewComponent\r\n */\r\n hasChildGroups = (index: number, _nodeData: GroupNode) =>\r\n _nodeData.expandable;\r\n /**\r\n * Emits the group info when the toggle group is clicked or toggles the group view\r\n * @param {GroupNode} group\r\n * @memberof TreeViewComponent\r\n */\r\n viewChildGroups(node: GroupNode) {\r\n if (!node.item.hasChildren) {\r\n return;\r\n }\r\n if (this.treeControl.isExpanded(node)) {\r\n this.treeControl.toggle(node);\r\n } else {\r\n this.toggleGroupClick.emit(node.item);\r\n this.selectedGroup = node;\r\n }\r\n }\r\n /**\r\n * Sets the box shadow based on the group type legend color\r\n * @param {string} color\r\n * @return {*}\r\n * @memberof TreeViewComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n getBoxShadow(color: string): any {\r\n return {\r\n boxShadow:\r\n '0px 1px 0px 0px #c9cbd0 inset, 6px 0px 0px 0px ' + color + ' inset',\r\n };\r\n }\r\n /**\r\n * Sets the dataSource with parent groups data\r\n * @memberof TreeViewComponent\r\n */\r\n setGroupDataSource(): void {\r\n this.treeControl = new FlatTreeControl<GroupNode>(\r\n this.getLevel,\r\n this.isExpandable\r\n );\r\n this.dataSource = new GroupsDataSource(this.treeControl, this.database);\r\n this.dataSource.data = this.database.initialData(this.parentGroupsInfo);\r\n }\r\n /**\r\n * Loads the child groups and updates the tree view.\r\n * @memberof TreeViewComponent\r\n */\r\n loadChildGroups() {\r\n this.database.setChildGroupsInfo(this.childGroupsInfo);\r\n if (this.selectedGroup) this.treeControl.toggle(this.selectedGroup);\r\n }\r\n /**\r\n * Deletes the selected group and updates the tree view.\r\n * @param {string} deletedGroupId\r\n * @memberof TreeViewComponent\r\n */\r\n deleteGroupNode(deletedGroupId: string): void {\r\n if (this.treeControl && deletedGroupId) {\r\n const groupDataSource: GroupNode[] = this.treeControl.dataNodes.filter(\r\n (e) => e.item.groupId !== deletedGroupId\r\n );\r\n this.dataSource.data = groupDataSource;\r\n this.deletedGroupId = undefined;\r\n }\r\n }\r\n\r\n /**\r\n * Sets the selected menu group action\r\n * @param {Menu} menu\r\n * @memberof TreeViewComponent\r\n */\r\n onGroupActionsClick(menu: Menu | IconButton): void {\r\n this.selectedGroupAction = menu;\r\n }\r\n /**\r\n * Changes the expand/collapse icon based on the toggle\r\n * @param {GroupNode} group\r\n * @return {*} {*}\r\n * @memberof TreeViewComponent\r\n */\r\n getToggleButtonInfo(group: GroupNode): IconButton {\r\n if (this.treeControl.isExpanded(group)) return this.minusCircleIconButton;\r\n return this.plusCircleIconButton;\r\n }\r\n /**\r\n * Handles the emitted group actions event\r\n * @param {GroupInfo} group\r\n * @memberof TreeViewComponent\r\n */\r\n handleGroupActions(group: GroupNode): void {\r\n if (this.selectedGroupAction?.id === GroupAction.VIEW_ROSTER) {\r\n this.viewChildGroups(group);\r\n } else if (this.selectedGroupAction?.id === GroupAction.CREATE_SUB_GROUP) {\r\n this.createGroupClick.emit(group.item);\r\n } else if (this.selectedGroupAction?.id === GroupAction.EDIT_GROUP) {\r\n this.editGroupClick.emit(group.item);\r\n } else if (this.selectedGroupAction?.id === GroupAction.DELETE_GROUP) {\r\n this.deleteGroupClick.emit(group.item);\r\n }\r\n }\r\n /**\r\n * Returns the filtered menu items based on groups hasChildren.\r\n * @param {GroupNode} group\r\n * @return {Menu[]}\r\n * @memberof TreeViewComponent\r\n */\r\n getFilteredGroupActions(group: GroupNode): Menu[] {\r\n const filteredMenu: Menu[] = [];\r\n this.menuItems.forEach((e) => {\r\n e.isToolTipNeeded = false;\r\n if (\r\n e.id === GroupAction.VIEW_ROSTER ||\r\n e.id === GroupAction.EDIT_GROUP ||\r\n (e.id === GroupAction.DELETE_GROUP && !group?.item?.hasChildren) ||\r\n (e.id === GroupAction.CREATE_SUB_GROUP &&\r\n group?.item?.groupTypeInfo?.businessRule?.allowSubGroup)\r\n ) {\r\n filteredMenu.push(e);\r\n }\r\n });\r\n return filteredMenu;\r\n }\r\n /**\r\n * Takes the index and the icon button as arguments and needs to return the unique identifier for this icon button.\r\n * @param {number} index\r\n * @param {IconButton} iconButton\r\n * @return {number}\r\n * @memberof TreeViewComponent\r\n */\r\n trackByFn(index: number, iconButton: IconButton): number {\r\n return iconButton.id;\r\n }\r\n /**\r\n * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof GroupsComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<div class=\"ieeesa-tree\">\r\n <mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"ieeesa-tree__root\"\r\n #rootSelector\r\n role=\"treegrid\"\r\n >\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex justify-content-between gap-3 my-0\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div class=\"d-flex gap-3\">\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n role=\"gridcell\"\r\n ></div>\r\n <div role=\"gridcell\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n <div class=\"d-none gap-3 d-sm-flex d-md-flex d-lg-flex\" role=\"gridcell\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChildGroups\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n [ngClass]=\"\r\n treeControl.isExpanded(node)\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\r\n class=\"ieeesa-tree__node w-100 d-flex my-0 gap-3\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div role=\"gridcell\">\r\n <ieeesa-icon-button\r\n *ngIf=\"!isGroupSearchOrFilterActive\"\r\n (iconButtonClick)=\"viewChildGroups(node)\"\r\n [iconButton]=\"getToggleButtonInfo(node)\"\r\n ></ieeesa-icon-button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n <div\r\n class=\"d-flex d-none gap-3 d-sm-flex d-md-flex d-lg-flex\"\r\n role=\"gridcell\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"w-100\">\r\n <div\r\n class=\"ieeesa-tree__group-info d-flex flex-column flex-sm-row flex-md-row flex-lg-row align-items-start align-items-sm-baseline align-items-md-baseline align-items-lg-baseline gap-2 mb-1\"\r\n >\r\n <p class=\"ieeesa-tree__node-group-name ieeesa-headline-sm-26\">\r\n {{ node.item.groupName }}\r\n </p>\r\n <p class=\"ieeesa-tree__node-group-acronym ieeesa-title-lg-24\">\r\n {{ node.item.groupAcronym }}\r\n </p>\r\n </div>\r\n <div class=\"ieeesa-body-md-16 ieeesa-tree__node-group-desc\">\r\n {{ node.item.groupTypeInfo.name }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #ieeesaGroupActionsOutlet let-node>\r\n <ieeesa-icon-button\r\n *ngFor=\"let item of getFilteredGroupActions(node); trackBy: trackByFn\"\r\n [iconButton]=\"item\"\r\n (iconButtonClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-template>\r\n </mat-tree>\r\n</div>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum GroupFunctionType {\r\n CREATE = \"CREATE\",\r\n EDIT = \"EDIT\"\r\n}","import { CommonModule } from '@angular/common';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport {\r\n Component,\r\n Input,\r\n OnDestroy,\r\n ViewEncapsulation,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\r\nimport { CreateGroupComponent } from './components/create-group/create-group.component';\r\nimport { GroupsService } from './services/groups.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { GroupInfo } from './models/group-info.model';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport {\r\n SearchComponent,\r\n ModalComponent,\r\n SelectOption,\r\n SelectComponent,\r\n Legend,\r\n IconButtonComponent,\r\n IconButton,\r\n AlignType,\r\n ModalConfirmationComponent,\r\n LegendComponent,\r\n} from '@ieeesa-npm/presentation';\r\nimport { TreeViewComponent } from './components/tree-view/tree-view.component';\r\nimport { GroupType } from './models/group-types.model';\r\nimport {\r\n ModalType,\r\n AlertType,\r\n GlobalErrorHandlerService,\r\n BreakpointObserverService,\r\n AlertsService,\r\n} from '@ieeesa-npm/utility';\r\nimport * as screenTexts from './assets/constants.json';\r\nimport { GroupFunctionType } from './models/group-function-type.model';\r\nimport { GetGroupsPayload } from './models/view-group.model';\r\nimport { DeleteGroupPayload } from './models/delete-group.model';\r\n\r\n/**\r\n * Groups component is a wrapper or container component for groups management reusable component and in this component integrates all group management functionalities and this will be entry component for managing groups when it is consumed in other applications.\r\n * @class GroupsComponent\r\n */\r\n@Component({\r\n // eslint-disable-next-line @angular-eslint/component-selector\r\n selector: 'ieeesa-groups',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatDialogModule,\r\n MatButtonModule,\r\n SearchComponent,\r\n SelectComponent,\r\n TreeViewComponent,\r\n LegendComponent,\r\n IconButtonComponent,\r\n ],\r\n templateUrl: './groups.component.html',\r\n styleUrls: ['./groups.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [AlertsService],\r\n})\r\nexport class GroupsComponent implements OnInit, OnDestroy {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n dialogRef: any;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = screenTexts;\r\n viewGroupTexts = this.constants?.viewGroups;\r\n isGroupSearchActive = false;\r\n isGroupFilterActive = false;\r\n isGroupSearchOrFilterActive = false;\r\n isMobileView = false;\r\n childGroupsInfo!: GroupInfo[];\r\n selectedGroupType!: SelectOption;\r\n parentGroupsInfo!: GroupInfo[];\r\n selectGroupOptions!: SelectOption[];\r\n deletedGroupId!: string;\r\n groupTypes!: { [key: string]: GroupType };\r\n searchPlaceHolderText: string = this.viewGroupTexts?.placeholderText?.search;\r\n filterPlaceHolderText: string = this.viewGroupTexts?.placeholderText?.filter;\r\n createGroupIcon: IconButton = {\r\n id: 1,\r\n ariaLabel: this.viewGroupTexts?.ariaLabel.add,\r\n iconURL: this.viewGroupTexts?.createGroupIcon,\r\n toolTip: this.viewGroupTexts?.ariaLabel.add,\r\n };\r\n filterGroupIcon: IconButton = {\r\n id: 2,\r\n ariaLabel: this.viewGroupTexts?.ariaLabel.filter,\r\n iconURL: this.viewGroupTexts?.filterGroupIcon,\r\n toolTip: this.viewGroupTexts?.ariaLabel.filter,\r\n };\r\n groupsLegends: Legend[] = [];\r\n getGroupsPayload: GetGroupsPayload = { groupId: '', groupTypeId: '' };\r\n @Input() groupsPageInfo: {\r\n groupsTitle: string;\r\n groupsDescription: string;\r\n } = {\r\n groupsTitle: this.viewGroupTexts?.groupsTitle,\r\n groupsDescription: this.viewGroupTexts?.groupsDescription,\r\n };\r\n @Input() applicationId!: string;\r\n @Input() apiBaseURL!: string;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Input() permissions!: any;\r\n createGroupText = screenTexts?.createGroup;\r\n functionType!: GroupFunctionType;\r\n alignmentType = AlignType;\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n public dialog: MatDialog,\r\n // eslint-disable-next-line no-unused-vars\r\n private groupsService: GroupsService,\r\n // eslint-disable-next-line no-unused-vars\r\n public alertService: AlertsService,\r\n // eslint-disable-next-line no-unused-vars\r\n private breakpointObserverService: BreakpointObserverService,\r\n // eslint-disable-next-line no-unused-vars\r\n private globalErrorHandlerService: GlobalErrorHandlerService\r\n ) {\r\n this.breakpointObserverService\r\n .getBreakpoint()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result) => {\r\n this.isMobileView = result.matches;\r\n });\r\n }\r\n\r\n /**\r\n * Initialize the groups component.\r\n * @return -returns nothing\r\n * @memberof GroupsComponent\r\n */\r\n ngOnInit(): void {\r\n this.groupsService.setAppConfig(this.apiBaseURL, this.permissions);\r\n this.getGroupTypes();\r\n }\r\n\r\n /**\r\n * Sets the dialog options for create group modal and calls openModal method.\r\n * @param {GroupInfo} [parentGroupInfo] -An optional parameter. Parent group info to be passed for create child group.\r\n * @return -returns nothing\r\n * @memberof GroupsComponent\r\n */\r\n openCreateGroupForm(parentGroupInfo?: GroupInfo): void {\r\n this.groupsService.setSelectedGroupInfo(parentGroupInfo ?? undefined);\r\n const dialogOptions = {\r\n heading: this.createGroupText?.heading,\r\n isCloseNeeded: true,\r\n componentReference: CreateGroupComponent,\r\n modalType: ModalType.FORM,\r\n };\r\n this.functionType = GroupFunctionType.CREATE;\r\n this.openModal(dialogOptions, 'ieeesa-create-group');\r\n }\r\n\r\n /**\r\n * Opens modal component with for received params and handles form submission success and errors.\r\n * @param {*} dialogOptions\r\n * @param {string} [className]\r\n * @return -returns nothing\r\n * @memberof GroupsComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-inferrable-types\r\n openModal(dialogOptions: any, className?: string): void {\r\n className = className ?? '';\r\n this.dialogRef = this.dialog.open(ModalComponent, {\r\n data: dialogOptions,\r\n width: 'auto',\r\n panelClass: ['ieeesa-modal-dialog', className],\r\n ariaModal: true,\r\n });\r\n this.dialogRef?.componentInstance?.submitFormResponse\r\n .pipe(takeUntil(this.destroy$))\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, no-unused-vars\r\n .subscribe((result: any) => {\r\n this.dialogRef.close();\r\n if (this.functionType === GroupFunctionType.CREATE) {\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n alertType: AlertType.SUCCESS,\r\n isCloseNeeded: true,\r\n message: this.createGroupText?.message?.success?.submission,\r\n });\r\n }\r\n });\r\n this.dialogRef?.componentInstance?.formCancel\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.dialogRef.close();\r\n });\r\n }\r\n /**\r\n * Opens the confirmation modal to get user confirmation to delete the selected group.\r\n * @memberof GroupComponent\r\n */\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n openDeleteConfirmationModal(groupInfo: GroupInfo): void {\r\n const confirmationInfo = screenTexts?.deleteGroup?.confirmationInfo;\r\n const deleteGroupModalOptions = {\r\n leftButtonLabel: confirmationInfo?.leftButtonLabel,\r\n rightButtonLabel: confirmationInfo?.rightButtonLabel,\r\n promptMessage:\r\n confirmationInfo?.promptMessage + groupInfo.groupName + '?',\r\n actionButtonAlign: this.alignmentType.MIDDLE,\r\n };\r\n this.dialogRef = this.dialog.open(ModalConfirmationComponent, {\r\n data: deleteGroupModalOptions,\r\n width: 'auto',\r\n autoFocus: 'dialog'\r\n });\r\n this.dialogRef\r\n .afterClosed()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result: boolean) => {\r\n if (result) {\r\n this.deleteGroup(groupInfo);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * This method sends API Request to delete the selected group and handles the success and error response of the http request.\r\n * @memberof GroupComponent\r\n */\r\n deleteGroup(groupInfo: GroupInfo): void {\r\n const deleteGroupText = screenTexts?.deleteGroup;\r\n const deleteGroupPayload: DeleteGroupPayload = {\r\n payload: {\r\n groupId: groupInfo.groupId,\r\n },\r\n };\r\n this.groupsService\r\n .deleteGroup(deleteGroupPayload)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n next: (res: any) => {\r\n this.dialogRef?.close();\r\n if (res?.status) {\r\n this.deletedGroupId = groupInfo.groupId;\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n alertType: AlertType.SUCCESS,\r\n isCloseNeeded: true,\r\n message:\r\n groupInfo.groupName +\r\n deleteGroupText?.message?.success?.deletion,\r\n });\r\n }\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error: (error: any) => {\r\n const errorCodes = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes) && !error?.error?.status) {\r\n const errorMessage =\r\n this.groupsService.parseErrorMessage(errorCodes);\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n message: errorMessage,\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService.handleError(error);\r\n }\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Shows the search field on click of search icon in case of mobile view\r\n * @memberof GroupsComponent\r\n */\r\n onGroupSearch(): void {\r\n this.isGroupSearchActive = true;\r\n this.isGroupFilterActive = false;\r\n }\r\n\r\n /**\r\n * Shows the Filter by dropdown options on click of filter icon in case of mobile view\r\n * @memberof GroupsComponent\r\n */\r\n showGroupFilter(): void {\r\n this.isGroupFilterActive = true;\r\n this.isGroupSearchActive = false;\r\n }\r\n\r\n /**\r\n * Sets isGroupSearchOrFilterActive to true and loads the groups those are configured with selected group type.\r\n * @param {string} searchTerm\r\n * @memberof GroupsComponent\r\n */\r\n onGroupSearchClick(searchTerm: string): void {\r\n this.isGroupSearchOrFilterActive = !!searchTerm;\r\n }\r\n /**\r\n * Sets select group type options from groupTypes response\r\n * @return {*} {SelectOption[]}\r\n * @memberof GroupsComponent\r\n */\r\n getGroupTypeOptions(): SelectOption[] {\r\n this.legendColor();\r\n const groupTypeOptions: SelectOption[] = [];\r\n groupTypeOptions.push({ id:'', name: this.viewGroupTexts?.allGroupTypesOption });\r\n Object.entries(this.groupTypes).forEach((node) => {\r\n groupTypeOptions.push({ id: node[0], name: node[1].name });\r\n });\r\n return groupTypeOptions;\r\n }\r\n /**\r\n * Sets legend color from groupTypes response\r\n * @memberof GroupsComponent\r\n */\r\n legendColor(): void {\r\n Object.entries(this.groupTypes).forEach((node) => {\r\n this.groupsLegends.push({\r\n color: node[1].legendColor,\r\n label: node[1].name,\r\n });\r\n });\r\n }\r\n /**\r\n * Sets the isGroupSearchOrFilterActive flag and loads parent group info as per selected filter option.\r\n * @param {SelectOption} event\r\n * @memberof GroupsComponent\r\n */\r\n onGroupTypeFiltered(event: SelectOption): void {\r\n this.selectedGroupType = event;\r\n this.isGroupSearchOrFilterActive = !!this.selectedGroupType?.id;\r\n this.getGroupsPayload = {\r\n groupId: '',\r\n groupTypeId: this.selectedGroupType?.id as string,\r\n };\r\n this.getGroups();\r\n }\r\n\r\n /**\r\n * Loads all the parent groups information.\r\n * @memberof GroupsComponent\r\n */\r\n getGroups(group?: GroupInfo): void {\r\n if (group) {\r\n this.getGroupsPayload = {\r\n groupId: group?.groupId ?? '',\r\n groupTypeId: '',\r\n };\r\n }\r\n this.groupsService\r\n .getGroups(this.getGroupsPayload)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => {\r\n if (response?.status) {\r\n if (group) {\r\n this.childGroupsInfo = this.viewGroupResponse(response?.body);\r\n } else {\r\n this.parentGroupsInfo = this.viewGroupResponse(response?.body);\r\n }\r\n }\r\n },\r\n error: (error) => {\r\n const errorCodes: string[] = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes)) {\r\n const errorMessage =\r\n this.groupsService.parseErrorMessage(errorCodes);\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n message: errorMessage,\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService.handleError(error);\r\n }\r\n },\r\n });\r\n }\r\n /**\r\n * Sets groupType info with group response from groupType response\r\n * @param {GroupInfo[]} response\r\n * @return {*} {GroupInfo[]}\r\n * @memberof GroupsComponent\r\n */\r\n viewGroupResponse(response: GroupInfo[]): GroupInfo[] {\r\n response.forEach((node) => {\r\n const groupTypeInfo: GroupType = this.groupTypes[node.groupType];\r\n node.groupTypeInfo = groupTypeInfo;\r\n });\r\n return response;\r\n }\r\n\r\n /**\r\n * Loads the group types.\r\n * @memberof GroupsComponent\r\n */\r\n getGroupTypes(): void {\r\n this.groupsService\r\n .getGroupTypes()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n if (res?.status) {\r\n this.groupTypes = res?.body?.configFieldValue;\r\n this.selectGroupOptions = this.getGroupTypeOptions();\r\n this.selectedGroupType = this.selectGroupOptions[0];\r\n this.onGroupTypeFiltered(this.selectedGroupType);\r\n }\r\n },\r\n error: (error) => {\r\n const errorCodes: string[] = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes)) {\r\n const errorMessage =\r\n this.groupsService.parseErrorMessage(errorCodes);\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n message: errorMessage,\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService.handleError(error);\r\n }\r\n },\r\n });\r\n }\r\n /**\r\n * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof GroupsComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<div class=\"ieeesa-groups p-3 p-sm-4 p-md-4 p-lg-4\">\r\n <div\r\n class=\"ieeesa-groups__info d-flex justify-content-between pb-3\"\r\n [ngClass]=\"\r\n isMobileView\r\n ? 'ieeesa-groups__info--white-bg'\r\n : 'ieeesa-groups__info--blue-bg'\r\n \"\r\n >\r\n <p\r\n [ngClass]=\"isMobileView ? 'ieeesa-title-lg-24' : 'ieeesa-headline-lg-34'\"\r\n >\r\n {{ groupsPageInfo.groupsTitle }}\r\n </p>\r\n <div>\r\n <button\r\n mat-button\r\n class=\"ieeesa-groups__create-subgroup mat-tertiary-button d-none d-sm-none d-md-block d-lg-block d-xl-block\"\r\n (click)=\"openCreateGroupForm()\"\r\n [attr.aria-label]=\"constants.viewGroups.ariaLabel.addGroup\"\r\n >\r\n {{ constants.viewGroups.addGroup }}\r\n </button>\r\n </div>\r\n <div\r\n class=\"d-flex d-sm-flex d-md-none d-lg-none d-xl-none ieeesa-groups__mobile-icons gap-2\"\r\n >\r\n <ieeesa-icon-button\r\n [iconButton]=\"createGroupIcon\"\r\n (iconButtonClick)=\"openCreateGroupForm()\"\r\n >\r\n </ieeesa-icon-button>\r\n <ieeesa-icon-button\r\n [iconButton]=\"filterGroupIcon\"\r\n (iconButtonClick)=\"showGroupFilter()\"\r\n >\r\n </ieeesa-icon-button>\r\n <button\r\n mat-button\r\n [attr.aria-label]=\"constants.viewGroups.ariaLabel.search\"\r\n (click)=\"onGroupSearch()\"\r\n type=\"button\"\r\n >\r\n <i class=\"fa-solid fa-magnifying-glass search-group-icon\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div\r\n class=\"ieeesa-groups__actions\"\r\n [ngClass]=\"\r\n isMobileView\r\n ? 'ieeesa-groups__actions--white-bg'\r\n : 'ieeesa-groups__actions--blue-bg'\r\n \"\r\n >\r\n <div class=\"ieeesa-groups__actions--search row\">\r\n <p\r\n class=\"ieeesa-body-md-16 order-2 order-sm-1 col-12 col-md-7 col-lg-7 col-xl-7\"\r\n >\r\n {{ groupsPageInfo.groupsDescription }}\r\n </p>\r\n <div\r\n *ngIf=\"\r\n ((isGroupSearchActive || isGroupFilterActive) && isMobileView) ||\r\n !isMobileView\r\n \"\r\n class=\"order-1 order-sm-2 col-12 col-md-5 col-lg-5 col-xl-5 d-flex flex-column\"\r\n >\r\n <ieeesa-search\r\n *ngIf=\"isGroupSearchActive || !isMobileView\"\r\n (searchValue)=\"onGroupSearchClick($event)\"\r\n [placeholderLabel]=\"searchPlaceHolderText\"\r\n ></ieeesa-search>\r\n <ieeesa-select\r\n *ngIf=\"isGroupFilterActive || !isMobileView\"\r\n class=\"align-self-end pt-lg-4 pt-md-4 pt-xl-4\"\r\n [dropdownOptions]=\"selectGroupOptions\"\r\n [isLabelAlignedLeft]=\"true\"\r\n [selectLabel]=\"constants.viewGroups.filterByLabel\"\r\n (optionSelected)=\"onGroupTypeFiltered($event)\"\r\n [placeholderText]=\"filterPlaceHolderText\"\r\n [selectedOptions]=\"selectedGroupType\"\r\n ></ieeesa-select>\r\n </div>\r\n </div>\r\n <ieeesa-tree\r\n *ngIf=\"parentGroupsInfo && parentGroupsInfo.length > 0\"\r\n [parentGroupsInfo]=\"parentGroupsInfo\"\r\n [childGroupsInfo]=\"childGroupsInfo\"\r\n [deletedGroupIdInfo]=\"deletedGroupId\"\r\n [isGroupSearchOrFilterActive]=\"isGroupSearchOrFilterActive\"\r\n (toggleGroupClick)=\"getGroups($event)\"\r\n (createGroupClick)=\"openCreateGroupForm($event)\"\r\n (deleteGroupClick)=\"openDeleteConfirmationModal($event)\"\r\n ></ieeesa-tree>\r\n <div\r\n *ngIf=\"parentGroupsInfo && parentGroupsInfo.length > 0\"\r\n class=\"d-flex flex-column flex-sm-row flex-md-row mt-4 justify-content-start justify-content-sm-end\"\r\n >\r\n <p class=\"px-sm-3 d-flex align-items-center ieeesa-label-lg-bold-16\">\r\n {{ constants.viewGroups.legend }}\r\n </p>\r\n <ieeesa-legend [legends]=\"groupsLegends\"></ieeesa-legend>\r\n </div>\r\n </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n ],\r\n exports: []\r\n})\r\nexport class GroupsModule { }\r\n","/*\r\n * Public API Surface of groups\r\n */\r\nexport * from './lib/components/create-group/create-group.component';\r\nexport * from './lib/components/tree-view/tree-view.component';\r\nexport * from './lib/groups.component';\r\n\r\nexport * from './lib/models/create-group.model';\r\nexport * from './lib/models/group-action.model';\r\nexport * from './lib/models/group-function-type.model';\r\nexport * from './lib/models/group-info.model';\r\nexport * from './lib/models/group-types.model';\r\nexport * from './lib/models/view-group.model';\r\n\r\nexport * from './lib/services/groups.service';\r\n\r\nexport * from './lib/assets/form-validations';\r\n\r\nexport * from './lib/groups.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["screenTexts?.errors","i1","screenTexts?.createGroup","i1.GroupsService","i2","i3","takeUntil","map","constants","screenTexts?.deleteGroup","i2.GroupsService","i4"],"mappings":"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"}
1
+ {"version":3,"file":"ieeesa-npm-groups.mjs","sources":["../../../projects/groups/src/lib/assets/form-validations.ts","../../../projects/groups/src/lib/models/form-status.model.ts","../../../projects/groups/src/lib/services/groups.service.ts","../../../projects/groups/src/lib/components/create-group/create-group.component.ts","../../../projects/groups/src/lib/components/create-group/create-group.component.html","../../../projects/groups/src/lib/models/group-action.model.ts","../../../projects/groups/src/lib/components/tree-view/tree-view.component.ts","../../../projects/groups/src/lib/components/tree-view/tree-view.component.html","../../../projects/groups/src/lib/models/group-function-type.model.ts","../../../projects/groups/src/lib/groups.component.ts","../../../projects/groups/src/lib/groups.component.html","../../../projects/groups/src/lib/groups.module.ts","../../../projects/groups/src/public-api.ts","../../../projects/groups/src/ieeesa-npm-groups.ts"],"sourcesContent":["/* eslint-disable no-useless-escape */\r\nexport const GroupsValidationPatterns = {\r\n // Group Name field regular expression, which accept Alpha Numeric, Special Characters (ASCII) and whitespace.\r\n groupName: /^(?=.*[a-zA-Z])[\\w\\s!\"#$%&'()*+,-.\\/\\:;<=>?@[\\]^_`{|}~\\\\]+$/i,\r\n // Group Short Name field regular expression which accept letters, numbers and \".\",\",\" , \"/\", \"-\" , \"_\" characters.\r\n shortName: /^(?=.*[a-zA-Z])[a-zA-Z0-9.,\\/\\-_ ]+$/,\r\n // Group Scope field regular expression which accept Alpha Numeric, Special Characters and whitespace.\r\n groupScope: /^(?=.*[a-zA-Z])[\\w\\s!\"#$%&'()*+,-.\\/\\:;<=>?@[\\]^_`{|}~\\\\]+$/i\r\n};","/* eslint-disable no-unused-vars */\r\nexport enum FormStatus {\r\n VALID = \"VALID\",\r\n INVALID = \"INVALID\",\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { Observable, map, catchError } from \"rxjs\";\r\nimport {\r\n CreateGroupPayload,\r\n CreateGroupResponse,\r\n} from \"../models/create-group.model\";\r\nimport { GroupTypeResponse } from \"../models/group-types.model\";\r\nimport { AlertsService, HttpService } from \"@ieeesa-npm/utility\";\r\nimport { GetGroupResponse, GetGroupsPayload } from \"../models/view-group.model\";\r\nimport * as screenTexts from \"../assets/constants.json\";\r\nimport { DeleteGroupPayload } from '../models/delete-group.model';\r\nimport { GroupInfo } from \"../models/group-info.model\";\r\n\r\n/**\r\n * Groups service is an abstract layer and responsible for managing groups REST API calls.\r\n * @class GroupsService\r\n */\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class GroupsService {\r\n groupsText = screenTexts?.errors;\r\n apiBaseUrl!: string;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n userPermission: any;\r\n selectedGroupInfo!: GroupInfo | undefined;\r\n // eslint-disable-next-line no-empty-function, no-unused-vars\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private httpService: HttpService,\r\n // eslint-disable-next-line no-unused-vars\r\n public alertService: AlertsService // eslint-disable-next-line no-empty-function\r\n ) {}\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n setAppConfig(apiBaseUrl: string, userPermission: any) {\r\n this.apiBaseUrl = apiBaseUrl;\r\n this.userPermission = userPermission;\r\n }\r\n /**\r\n * Gets application group types from API and returns it as an observable.\r\n * @return {Observable<GroupTypeResponse>} -It returns group types if success else error.\r\n * @memberof GroupsService\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n getGroupTypes(): Observable<GroupTypeResponse> {\r\n return this.httpService\r\n .getData(`${this.apiBaseUrl}/configurations/group_type`)\r\n .pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((error) => {\r\n throw error;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Returns all the groups based on passed group Id and group type.\r\n * @param {GetGroupsPayload} getGroupsPayload\r\n * @return {Observable<GetGroupResponse>}\r\n * @memberof GroupsService\r\n */\r\n getGroups(getGroupsPayload: GetGroupsPayload): Observable<GetGroupResponse> {\r\n let url = \"rootGroups\";\r\n if (getGroupsPayload.groupId)\r\n url = \"immChildGroupsByGroupId/\" + getGroupsPayload.groupId;\r\n else if (getGroupsPayload.groupTypeId)\r\n url = \"groupsByGroupType/\" + getGroupsPayload.groupTypeId;\r\n\r\n return this.httpService.getData(`${this.apiBaseUrl}/groups/${url}`).pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((errorRes) => {\r\n throw errorRes;\r\n })\r\n );\r\n }\r\n /**\r\n * Deletes a group based on the provided information\r\n * @param {groupId} string -groupId of the group which is to be deleted\r\n * @return {*} {Observable<any>} -Observable representing the group deletion response\r\n * @memberof GroupsService\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n deleteGroup(deleteGroupPayload: DeleteGroupPayload): Observable<any> {\r\n return this.httpService\r\n .putData(`${this.apiBaseUrl}/groups/delete`, deleteGroupPayload)\r\n .pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((error) => {\r\n throw error;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Posts create group form data to server using HttpService for creating new group.\r\n * @param {CreateGroupPayload} createGroupPayload -create group form data which includes group name, type, short name, scope.\r\n * @return {Observable<any>} -returns create group API response (success or error) as an observable.\r\n * @memberof GroupsService\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n createGroup(\r\n createGroupPayload: CreateGroupPayload\r\n ): Observable<CreateGroupResponse> {\r\n return this.httpService\r\n .postData(`${this.apiBaseUrl}/groups/create`, createGroupPayload)\r\n .pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((error) => {\r\n throw error;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * This method will parse the error codes and return the respective error message for each code.\r\n * @param {string[]} errorCodes\r\n * @return {string[]} errorMessage\r\n * @memberof GroupsService\r\n */\r\n parseErrorMessage(errorCodes: string[]) {\r\n const errorMessage: string[] = [];\r\n errorCodes.forEach((item: string, index: number) => {\r\n const errorMessageKey = errorCodes[index] as keyof typeof this.groupsText;\r\n errorMessage.push(this.groupsText[errorMessageKey]);\r\n });\r\n return errorMessage;\r\n }\r\n\r\n /**\r\n * Sets selected group info.\r\n * @param {(GroupInfo | undefined)} selectedGroupInfo -selected group info.\r\n * @memberof GroupsService\r\n */\r\n setSelectedGroupInfo(selectedGroupInfo: GroupInfo | undefined) {\r\n this.selectedGroupInfo = selectedGroupInfo;\r\n }\r\n\r\n /**\r\n * Returns the selected group info.\r\n * @return {(GroupInfo | undefined)} -group info.\r\n * @memberof GroupsService\r\n */\r\n getSelectedGroupInfo(): GroupInfo | undefined {\r\n return this.selectedGroupInfo;\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { FormGroup, Validators } from \"@angular/forms\";\r\nimport {\r\n FormGrid,\r\n FormModel,\r\n SelectOption,\r\n DynamicFormComponent,\r\n FormControlType,\r\n AlignType,\r\n} from \"@ieeesa-npm/presentation\";\r\nimport {\r\n AlertsService,\r\n AlertType,\r\n GlobalErrorHandlerService,\r\n} from \"@ieeesa-npm/utility\";\r\nimport * as screenTexts from \"../../assets/constants.json\";\r\nimport { GroupsValidationPatterns } from \"../../assets/form-validations\";\r\nimport { CreateGroupPayload } from \"../../models/create-group.model\";\r\nimport { GroupsService } from \"../../services/groups.service\";\r\nimport { HttpErrorResponse } from \"@angular/common/http\";\r\nimport { MatDialogModule } from \"@angular/material/dialog\";\r\nimport { Subject, takeUntil } from \"rxjs\";\r\nimport { GroupType } from \"../../models/group-types.model\";\r\nimport { GroupInfo } from \"../../models/group-info.model\";\r\nimport { FormStatus } from \"../../models/form-status.model\";\r\n\r\n/**\r\n * CreateGroupComponent uses DynamicFormComponent to build create new group form and implement the functionalities of submission of form and handling success and error scenarios.\r\n * @class CreateGroupComponent\r\n * @implements {OnInit}\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n // eslint-disable-next-line @angular-eslint/component-selector\r\n selector: \"ieeesa-create-group\",\r\n standalone: true,\r\n imports: [CommonModule, DynamicFormComponent, MatDialogModule],\r\n templateUrl: \"./create-group.component.html\",\r\n styleUrls: [\"./create-group.component.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [AlertsService],\r\n})\r\nexport class CreateGroupComponent implements OnInit, OnDestroy {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n /**\r\n * Event emitted when the form is successfully submitted.\r\n * @memberof CreateGroupComponent\r\n */\r\n @Output() submitFormResponse = new EventEmitter();\r\n /**\r\n * Event emitted when the form is cancelled.\r\n * @memberof CreateGroupComponent\r\n */\r\n @Output() formCancel = new EventEmitter();\r\n createGroupText = screenTexts?.createGroup;\r\n leftButtonLabel = this.createGroupText?.label?.leftButtonLabel;\r\n rightButtonLabel = this.createGroupText?.label?.rightButtonLabel;\r\n isLegendVisible = false;\r\n isLeftButtonNeeded = true;\r\n colWidth: FormGrid = { xs: 12, xl: 12, sm: 12, md: 12, lg: 12 };\r\n formGroup!: FormModel;\r\n groupTypes!: SelectOption[];\r\n actionButtonAlign = AlignType.LEFT;\r\n form!: FormGroup;\r\n selectedParentGroupInfo!: GroupInfo | undefined;\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private groupsService: GroupsService,\r\n // eslint-disable-next-line no-unused-vars\r\n private globalErrorHandlerService: GlobalErrorHandlerService,\r\n // eslint-disable-next-line no-unused-vars\r\n public alertService: AlertsService // eslint-disable-next-line no-empty-function\r\n ) {}\r\n\r\n /**\r\n * Initialize the create group form group array and component.\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n ngOnInit(): void {\r\n this.groupsService\r\n .getGroupTypes()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n if (res?.status) {\r\n this.selectedParentGroupInfo = this.groupsService?.getSelectedGroupInfo();\r\n const configFieldValue = res?.body?.configFieldValue;\r\n if (this.selectedParentGroupInfo?.groupType) {\r\n const allowedGroupType =\r\n configFieldValue[this.selectedParentGroupInfo?.groupType]\r\n ?.businessRule?.allowedGroupType;\r\n if (allowedGroupType?.length) {\r\n this.groupTypes = allowedGroupType.map(\r\n (groupTypeId: string) => ({\r\n id: groupTypeId,\r\n name: configFieldValue[groupTypeId]?.name,\r\n })\r\n );\r\n } else {\r\n this.showAlertMessage(\r\n screenTexts?.errors?.ER1000,\r\n AlertType.ERROR\r\n );\r\n }\r\n } else {\r\n this.groupTypes = Object.entries(configFieldValue).map(\r\n ([id, item]: [string, GroupType]) => ({\r\n id,\r\n name: item?.name,\r\n })\r\n );\r\n }\r\n if (this.groupTypes?.length) {\r\n this.createFormGroup();\r\n } else {\r\n this.showAlertMessage(\r\n screenTexts?.errors?.[\"1010\"],\r\n AlertType.ERROR\r\n );\r\n }\r\n }\r\n },\r\n error: (error) => {\r\n const errorCodes: string[] = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes)) {\r\n const errorMessage = this.groupsService.parseErrorMessage(\r\n errorCodes\r\n );\r\n this.showAlertMessage(errorMessage, AlertType.ERROR);\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService.handleError(error);\r\n }\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Initialize the create group form group array.\r\n * @memberof CreateGroupComponent\r\n */\r\n createFormGroup(): void {\r\n this.formGroup = {\r\n formGroup: [\r\n {\r\n legend: \"\",\r\n controls: [\r\n {\r\n type: FormControlType.SELECT,\r\n label: this.createGroupText?.label?.groupType + \"*\",\r\n controlName: \"groupType\",\r\n requiredErrorMessage: this.createGroupText?.message?.error\r\n ?.required,\r\n value: \"\",\r\n validation: [Validators.required],\r\n dropdownOptions: this.groupTypes,\r\n supportMessage: this.createGroupText?.supportText?.groupType,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.groupType,\r\n placeholder: \"\",\r\n ariaDescribedById: this.createGroupText?.label?.ariaDescribedById\r\n ?.groupType,\r\n },\r\n {\r\n type: FormControlType.INPUT,\r\n label: this.createGroupText?.label?.groupName + \"*\",\r\n controlName: \"groupName\",\r\n requiredErrorMessage: this.createGroupText?.message?.error\r\n ?.required,\r\n value: \"\",\r\n placeholder: \"\",\r\n supportMessage: this.createGroupText?.supportText?.groupName,\r\n patternErrorMessage: this.createGroupText?.message?.error?.pattern\r\n ?.groupName,\r\n validation: [\r\n Validators.required,\r\n Validators.maxLength(\r\n screenTexts?.createGroup?.characterLimit?.character500\r\n ),\r\n Validators.pattern(GroupsValidationPatterns.groupName),\r\n ],\r\n maxErrorMessage: this.createGroupText?.message?.error?.limit\r\n ?.groupName,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.groupName,\r\n ariaDescribedById: this.createGroupText?.label?.ariaDescribedById\r\n ?.groupName,\r\n },\r\n {\r\n type: FormControlType.INPUT,\r\n label: this.createGroupText?.label?.shortName + \"*\",\r\n controlName: \"shortName\",\r\n requiredErrorMessage: this.createGroupText?.message?.error\r\n ?.required,\r\n value: \"\",\r\n patternErrorMessage: this.createGroupText?.message?.error?.pattern\r\n ?.shortName,\r\n placeholder: \"\",\r\n supportMessage: this.createGroupText?.supportText?.shortName,\r\n validation: [\r\n Validators.required,\r\n Validators.maxLength(\r\n screenTexts?.createGroup?.characterLimit?.character15\r\n ),\r\n Validators.pattern(GroupsValidationPatterns.shortName),\r\n ],\r\n maxErrorMessage: this.createGroupText?.message?.error?.limit\r\n ?.shortName,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.shortName,\r\n ariaDescribedById: this.createGroupText?.label?.ariaDescribedById\r\n ?.shortName,\r\n },\r\n {\r\n type: FormControlType.TEXT_AREA,\r\n label: this.createGroupText?.label?.groupScope,\r\n controlName: \"groupScope\",\r\n patternErrorMessage: this.createGroupText?.message?.error?.pattern\r\n ?.groupScope,\r\n value: \"\",\r\n placeholder: \"\",\r\n supportMessage: this.createGroupText?.supportText?.groupScope,\r\n isResize: true,\r\n maxLength:\r\n screenTexts?.createGroup?.characterLimit?.character2000,\r\n validation: [\r\n Validators.maxLength(\r\n screenTexts?.createGroup?.characterLimit?.character1500\r\n ),\r\n Validators.pattern(GroupsValidationPatterns.groupScope),\r\n ],\r\n maxErrorMessage: this.createGroupText?.message?.error?.limit\r\n ?.groupScope,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.groupScope,\r\n ariaDescribedById: this.createGroupText?.label?.ariaDescribedById\r\n ?.groupScope,\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n if (this.selectedParentGroupInfo?.groupId) {\r\n this.updateCreateFormGroup(this.selectedParentGroupInfo);\r\n }\r\n }\r\n\r\n /**\r\n * Update the create sub group form group array.\r\n * @param {GroupInfo} parentGroupInfo -Parent group info.\r\n * @memberof CreateGroupComponent\r\n */\r\n updateCreateFormGroup(parentGroupInfo: GroupInfo) {\r\n const parentGroup = {\r\n type: FormControlType.TEXT_AREA,\r\n label: this.createGroupText?.label?.parentGroup,\r\n controlName: \"parentGroup\",\r\n isReadonly: true,\r\n ariaMultiline: false,\r\n value: parentGroupInfo?.groupName,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.parentGroup,\r\n isResize: true,\r\n };\r\n this.formGroup?.formGroup[0]?.controls?.unshift(parentGroup);\r\n }\r\n /**\r\n * Handles client side validation and emits create group information.\r\n * @param {FormGroup[]} form -Array of formGroup\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n onFormSubmit(form: FormGroup[]): void {\r\n form[0]?.markAllAsTouched();\r\n if (form[0].status === FormStatus.VALID) {\r\n const formResponse = form[0].getRawValue();\r\n const createGroupPayload: CreateGroupPayload = {\r\n payload: {\r\n groupName: formResponse?.groupName,\r\n groupShortName: formResponse?.shortName,\r\n groupType: formResponse?.groupType?.id,\r\n groupDesc: formResponse?.groupScope,\r\n groupParentId: this.selectedParentGroupInfo?.groupId ?? null,\r\n },\r\n };\r\n this.groupsService\r\n .createGroup(createGroupPayload)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n if (res?.status) {\r\n this.submitFormResponse.emit(res);\r\n }\r\n },\r\n error: (error) => {\r\n const errorCodes: string[] = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes)) {\r\n const errorMessage: string[] = this.groupsService.parseErrorMessage(\r\n errorCodes\r\n );\r\n this.showAlertMessage(errorMessage, AlertType.ERROR);\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService.handleError(error);\r\n }\r\n },\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Get form reference.\r\n * @param {FormGroup[]} form\r\n * @memberof CreateGroupComponent\r\n */\r\n getFormGroupReference(form: FormGroup[]) {\r\n this.form = form[0];\r\n }\r\n\r\n /**\r\n * Handles alerts for error, warning.\r\n * @param {(string | string[])} message -error or warning message\r\n * @param {AlertType} alertType\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n showAlertMessage(message: string | string[], alertType: AlertType): void {\r\n this.alertService.showMessage({\r\n status: \"custom\",\r\n message: message,\r\n alertType: alertType,\r\n isCloseNeeded: true,\r\n });\r\n }\r\n\r\n /**\r\n * Emits form cancel event.\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n createGroupCancelled(): void {\r\n this.formCancel.emit();\r\n }\r\n\r\n /**\r\n * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof CreateGroupComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<ieeesa-dynamic-form\r\n *ngIf=\"formGroup\"\r\n [leftButtonLabel]=\"leftButtonLabel\"\r\n [rightButtonLabel]=\"rightButtonLabel\"\r\n [isLegendVisible]=\"isLegendVisible\"\r\n [colWidth]=\"colWidth\"\r\n [actionButtonAlign]=\"actionButtonAlign\"\r\n [formGroups]=\"formGroup\"\r\n [isLeftButtonNeeded]=\"isLeftButtonNeeded\"\r\n (formSubmit)=\"onFormSubmit($event)\"\r\n (formLeftButtonClicked)=\"createGroupCancelled()\"\r\n (formGroupsReference)=\"getFormGroupReference($event)\"\r\n></ieeesa-dynamic-form>","/* eslint-disable no-unused-vars */\r\nexport enum GroupAction {\r\n VIEW_ROSTER = 1,\r\n CREATE_SUB_GROUP = 2,\r\n EDIT_GROUP = 3,\r\n DELETE_GROUP = 4,\r\n EXPAND_GROUP_VIEW = 5,\r\n COLLAPSE_GROUP_VIEW = 6,\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Injectable,\r\n Input,\r\n OnInit,\r\n Output,\r\n AfterViewInit,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport {\r\n MenuComponent,\r\n Menu,\r\n IconButtonComponent,\r\n IconButton,\r\n} from '@ieeesa-npm/presentation';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { GroupAction } from '../../models/group-action.model';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n CollectionViewer,\r\n SelectionChange,\r\n DataSource,\r\n} from '@angular/cdk/collections';\r\nimport { FlatTreeControl } from '@angular/cdk/tree';\r\nimport { BehaviorSubject, merge, Observable, Subject } from 'rxjs';\r\nimport { map, takeUntil } from 'rxjs/operators';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatTreeModule, MatTreeNodePadding } from '@angular/material/tree';\r\nimport { GroupInfo } from '../../models/group-info.model';\r\n\r\n/**\r\n * Dynamic Flat node creates a node structure\r\n * @export\r\n * @class GroupNode\r\n */\r\nexport class GroupNode {\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n public item: GroupInfo,\r\n // eslint-disable-next-line no-unused-vars\r\n public level = 1,\r\n // eslint-disable-next-line no-unused-vars\r\n public expandable = false,\r\n // eslint-disable-next-line no-unused-vars\r\n public isLoading = false // eslint-disable-next-line no-empty-function\r\n ) {}\r\n}\r\n\r\n/**\r\n * Groups stores the parent nodes and child nodes\r\n * @export\r\n * @class Groups\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class Groups {\r\n rootLevelNodes!: GroupInfo[];\r\n /** Initial data from database */\r\n private childGroups!: GroupInfo[];\r\n /**\r\n * Get the Child groups info\r\n * @return {*} {GroupInfo[]}\r\n * @memberof Groups\r\n */\r\n getChildGroupsInfo(): GroupInfo[] {\r\n return this.childGroups;\r\n }\r\n /**\r\n * Sets the Child groups info\r\n * @param {GroupInfo[]} value\r\n * @memberof Groups\r\n */\r\n setChildGroupsInfo(value: GroupInfo[]): void {\r\n this.childGroups = value;\r\n }\r\n /**\r\n * Initialize the groups data and creates the node structure for mat tree\r\n * @param {GroupInfo[]} data\r\n * @return {*} {GroupNode[]}\r\n * @memberof Groups\r\n */\r\n initialData(data: GroupInfo[]): GroupNode[] {\r\n this.rootLevelNodes = data;\r\n return this.rootLevelNodes.map(\r\n (node) => new GroupNode(node, 0, this.isExpandable(node))\r\n );\r\n }\r\n /**\r\n * Checks the node is expandable or not\r\n * @param {GroupInfo} node\r\n * @return {*} {boolean}\r\n * @memberof Groups\r\n */\r\n isExpandable(node: GroupInfo): boolean {\r\n return (!!node.children && node.children.length > 0) || node.hasChildren;\r\n }\r\n}\r\n/**\r\n * Dynamic Data Source handles the connection with dynamic data base\r\n * @export\r\n * @class GroupsDataSource\r\n * @implements {DataSource<GroupNode>}\r\n */\r\nexport class GroupsDataSource implements DataSource<GroupNode> {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n dataChange = new BehaviorSubject<GroupNode[]>([]);\r\n /**\r\n * Gets the updated tree control data\r\n * @type {GroupNode[]}\r\n * @memberof GroupsDataSource\r\n */\r\n get data(): GroupNode[] {\r\n return this.dataChange.value;\r\n }\r\n /**\r\n * Sets the data to tree control and emit the value to intimate the data change\r\n * @memberof GroupsDataSource\r\n */\r\n set data(value: GroupNode[]) {\r\n this.treeControl.dataNodes = value;\r\n this.dataChange.next(value);\r\n }\r\n\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private treeControl: FlatTreeControl<GroupNode>,\r\n // eslint-disable-next-line no-unused-vars\r\n private database: Groups // eslint-disable-next-line no-empty-function\r\n ) {}\r\n\r\n /**\r\n * Handles the connection between the data base and mat tree\r\n * @param {CollectionViewer} collectionViewer\r\n * @return {*} {Observable<GroupNode[]>}\r\n * @memberof GroupsDataSource\r\n */\r\n connect(collectionViewer: CollectionViewer): Observable<GroupNode[]> {\r\n this.treeControl.expansionModel.changed\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((change) => {\r\n if (\r\n (change as SelectionChange<GroupNode>).added ||\r\n (change as SelectionChange<GroupNode>).removed\r\n ) {\r\n this.handleTreeControl(change as SelectionChange<GroupNode>);\r\n }\r\n });\r\n return merge(collectionViewer.viewChange, this.dataChange).pipe(\r\n map(() => this.data)\r\n );\r\n }\r\n /**\r\n * Disconnect the connection with mat tree\r\n * @param {CollectionViewer} collectionViewer\r\n * @memberof GroupsDataSource\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function, no-empty-function, no-unused-vars, @typescript-eslint/no-unused-vars\r\n disconnect(collectionViewer: CollectionViewer): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n\r\n /**\r\n * Adds/removes the child nodes while expands/collapses the parent node\r\n * @param {SelectionChange<GroupNode>} change\r\n * @memberof GroupsDataSource\r\n */\r\n handleTreeControl(change: SelectionChange<GroupNode>) {\r\n if (change.added) {\r\n change.added.forEach((node) => this.toggleNode(node, true));\r\n }\r\n if (change.removed) {\r\n change.removed\r\n .slice()\r\n .reverse()\r\n .forEach((node) => this.toggleNode(node, false));\r\n }\r\n }\r\n\r\n /**\r\n * Toggle the node, add/removes the node from display\r\n * @param {GroupNode} clickedNode\r\n * @param {boolean} expand\r\n * @return {*}\r\n * @memberof GroupsDataSource\r\n */\r\n toggleNode(clickedNode: GroupNode, expand: boolean) {\r\n const children = this.database.getChildGroupsInfo();\r\n const index = this.data.indexOf(clickedNode);\r\n if (!children || index < 0) {\r\n // If no children, or cannot find the node, no op\r\n return;\r\n }\r\n\r\n if (expand) {\r\n const nodes = children.map(\r\n (node) =>\r\n new GroupNode(\r\n node,\r\n clickedNode.level + 1,\r\n this.database.isExpandable(node)\r\n )\r\n );\r\n this.data.splice(index + 1, 0, ...nodes);\r\n } else {\r\n let count = 0;\r\n for (\r\n let i = index + 1;\r\n i < this.data.length && this.data[i].level > clickedNode.level;\r\n i++, count++ // eslint-disable-next-line no-empty\r\n ) {}\r\n this.data.splice(index + 1, count);\r\n }\r\n\r\n // Notify the change\r\n this.dataChange.next(this.data);\r\n }\r\n}\r\n/**\r\n * Displays the groups where parent/child relationships are represented in a tree view/hierarchy.\r\n * @export\r\n * @class TreeViewComponent\r\n * @implements {OnInit}\r\n */\r\n@Component({\r\n selector: 'ieeesa-tree',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatTreeModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MenuComponent,\r\n IconButtonComponent,\r\n ],\r\n templateUrl: './tree-view.component.html',\r\n styleUrls: ['./tree-view.component.scss'],\r\n})\r\nexport class TreeViewComponent implements OnInit, AfterViewInit, OnDestroy {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n buttons: Menu[] = this.constants?.viewGroups?.buttons;\r\n treePaddingIndent: number = this.constants?.viewGroups?.treePaddingIndent;\r\n selectedGroup!: GroupNode;\r\n selectedGroupAction!: Menu | IconButton;\r\n treeControl!: FlatTreeControl<GroupNode>;\r\n dataSource!: GroupsDataSource;\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n matTreeNodePadding!: MatTreeNodePadding<GroupNode>;\r\n plusCircleIconButton: IconButton = this.buttons[4];\r\n minusCircleIconButton: IconButton = this.buttons[5];\r\n menuItems: Menu[] = this.buttons.filter(\r\n (e) =>\r\n e.id !== GroupAction.EXPAND_GROUP_VIEW &&\r\n e.id !== GroupAction.COLLAPSE_GROUP_VIEW\r\n );\r\n private parentGroups!: GroupInfo[];\r\n @Input()\r\n set parentGroupsInfo(value: GroupInfo[]) {\r\n this.parentGroups = value;\r\n if (value) this.setGroupDataSource();\r\n }\r\n get parentGroupsInfo(): GroupInfo[] {\r\n return this.parentGroups;\r\n }\r\n private childGroups!: GroupInfo[];\r\n @Input()\r\n set childGroupsInfo(value: GroupInfo[]) {\r\n this.childGroups = value;\r\n this.loadChildGroups();\r\n }\r\n get childGroupsInfo(): GroupInfo[] {\r\n return this.childGroups;\r\n }\r\n private isGroupSearchOrFilter = false;\r\n @Input()\r\n set isGroupSearchOrFilterActive(value: boolean) {\r\n this.isGroupSearchOrFilter = value;\r\n }\r\n get isGroupSearchOrFilterActive(): boolean {\r\n return this.isGroupSearchOrFilter;\r\n }\r\n private deletedGroupId!: string | undefined;\r\n @Input()\r\n set deletedGroupIdInfo(id: string) {\r\n this.deletedGroupId = id;\r\n this.deleteGroupNode(this.deletedGroupId);\r\n }\r\n get deletedGroupIdInfo(): string | undefined {\r\n return this.deletedGroupId;\r\n }\r\n\r\n @Output() toggleGroupClick = new EventEmitter<GroupInfo>();\r\n @Output() createGroupClick = new EventEmitter<GroupInfo>();\r\n @Output() editGroupClick = new EventEmitter<GroupInfo>();\r\n @Output() deleteGroupClick = new EventEmitter<GroupInfo>();\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(public database: Groups, public elementRef: ElementRef) {}\r\n /**\r\n * Initializes the tree view component\r\n * @memberof TreeViewComponent\r\n */\r\n ngOnInit(): void {\r\n this.setGroupDataSource();\r\n }\r\n /**\r\n * Assign ARIA role for all mat tree nodes as \"row\"\r\n * @memberof TreeViewComponent\r\n */\r\n ngAfterViewInit(): void {\r\n this.dataSource.dataChange.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n const treeItemNodes =\r\n this.elementRef.nativeElement.querySelectorAll('[role=treeitem]');\r\n treeItemNodes?.forEach((node: HTMLElement) => (node.role = 'row'));\r\n });\r\n }\r\n /**\r\n * Gets the level of the node\r\n * @param {GroupNode} node\r\n * @memberof TreeViewComponent\r\n */\r\n getLevel = (node: GroupNode) => node.level;\r\n\r\n /**\r\n * Checks the node is expandable or not\r\n * @param {GroupNode} node\r\n * @memberof TreeViewComponent\r\n */\r\n isExpandable = (node: GroupNode) => node.expandable;\r\n\r\n /**\r\n * Returns true if passed node has children otherwise false\r\n * @param {number} index\r\n * @param {GroupNode} node\r\n * @return {boolean}\r\n * @memberof TreeViewComponent\r\n */\r\n hasChildGroups = (index: number, _nodeData: GroupNode) =>\r\n _nodeData.expandable;\r\n /**\r\n * Emits the group info when the toggle group is clicked or toggles the group view\r\n * @param {GroupNode} group\r\n * @memberof TreeViewComponent\r\n */\r\n viewChildGroups(node: GroupNode) {\r\n if (!node.item.hasChildren) {\r\n return;\r\n }\r\n if (this.treeControl.isExpanded(node)) {\r\n this.treeControl.toggle(node);\r\n } else {\r\n this.toggleGroupClick.emit(node.item);\r\n this.selectedGroup = node;\r\n }\r\n }\r\n /**\r\n * Sets the box shadow based on the group type legend color\r\n * @param {string} color\r\n * @return {*}\r\n * @memberof TreeViewComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n getBoxShadow(color: string): any {\r\n return {\r\n boxShadow:\r\n '0px 1px 0px 0px #c9cbd0 inset, 6px 0px 0px 0px ' + color + ' inset',\r\n };\r\n }\r\n /**\r\n * Sets the dataSource with parent groups data\r\n * @memberof TreeViewComponent\r\n */\r\n setGroupDataSource(): void {\r\n this.treeControl = new FlatTreeControl<GroupNode>(\r\n this.getLevel,\r\n this.isExpandable\r\n );\r\n this.dataSource = new GroupsDataSource(this.treeControl, this.database);\r\n this.dataSource.data = this.database.initialData(this.parentGroupsInfo);\r\n }\r\n /**\r\n * Loads the child groups and updates the tree view.\r\n * @memberof TreeViewComponent\r\n */\r\n loadChildGroups() {\r\n this.database.setChildGroupsInfo(this.childGroupsInfo);\r\n if (this.selectedGroup) this.treeControl.toggle(this.selectedGroup);\r\n }\r\n /**\r\n * Deletes the selected group and updates the tree view.\r\n * @param {string} deletedGroupId\r\n * @memberof TreeViewComponent\r\n */\r\n deleteGroupNode(deletedGroupId: string): void {\r\n if (this.treeControl && deletedGroupId) {\r\n const groupDataSource: GroupNode[] = this.treeControl.dataNodes.filter(\r\n (e) => e.item.groupId !== deletedGroupId\r\n );\r\n this.dataSource.data = groupDataSource;\r\n this.deletedGroupId = undefined;\r\n }\r\n }\r\n\r\n /**\r\n * Sets the selected menu group action\r\n * @param {Menu} menu\r\n * @memberof TreeViewComponent\r\n */\r\n onGroupActionsClick(menu: Menu | IconButton): void {\r\n this.selectedGroupAction = menu;\r\n }\r\n /**\r\n * Changes the expand/collapse icon based on the toggle\r\n * @param {GroupNode} group\r\n * @return {*} {*}\r\n * @memberof TreeViewComponent\r\n */\r\n getToggleButtonInfo(group: GroupNode): IconButton {\r\n if (this.treeControl.isExpanded(group)) return this.minusCircleIconButton;\r\n return this.plusCircleIconButton;\r\n }\r\n /**\r\n * Handles the emitted group actions event\r\n * @param {GroupInfo} group\r\n * @memberof TreeViewComponent\r\n */\r\n handleGroupActions(group: GroupNode): void {\r\n if (this.selectedGroupAction?.id === GroupAction.VIEW_ROSTER) {\r\n this.viewChildGroups(group);\r\n } else if (this.selectedGroupAction?.id === GroupAction.CREATE_SUB_GROUP) {\r\n this.createGroupClick.emit(group.item);\r\n } else if (this.selectedGroupAction?.id === GroupAction.EDIT_GROUP) {\r\n this.editGroupClick.emit(group.item);\r\n } else if (this.selectedGroupAction?.id === GroupAction.DELETE_GROUP) {\r\n this.deleteGroupClick.emit(group.item);\r\n }\r\n }\r\n /**\r\n * Returns the filtered menu items based on groups hasChildren.\r\n * @param {GroupNode} group\r\n * @return {Menu[]}\r\n * @memberof TreeViewComponent\r\n */\r\n getFilteredGroupActions(group: GroupNode): Menu[] {\r\n const filteredMenu: Menu[] = [];\r\n this.menuItems.forEach((e) => {\r\n e.isToolTipNeeded = false;\r\n if (\r\n e.id === GroupAction.VIEW_ROSTER ||\r\n e.id === GroupAction.EDIT_GROUP ||\r\n (e.id === GroupAction.DELETE_GROUP && !group?.item?.hasChildren) ||\r\n (e.id === GroupAction.CREATE_SUB_GROUP &&\r\n group?.item?.groupTypeInfo?.businessRule?.allowSubGroup)\r\n ) {\r\n filteredMenu.push(e);\r\n }\r\n });\r\n return filteredMenu;\r\n }\r\n /**\r\n * Takes the index and the icon button as arguments and needs to return the unique identifier for this icon button.\r\n * @param {number} index\r\n * @param {IconButton} iconButton\r\n * @return {number}\r\n * @memberof TreeViewComponent\r\n */\r\n trackByFn(index: number, iconButton: IconButton): number {\r\n return iconButton.id;\r\n }\r\n /**\r\n * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof GroupsComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<div class=\"ieeesa-tree\">\r\n <mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"ieeesa-tree__root\"\r\n #rootSelector\r\n role=\"treegrid\"\r\n >\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex justify-content-between gap-3 my-0\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div class=\"d-flex gap-3\">\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n role=\"gridcell\"\r\n ></div>\r\n <div role=\"gridcell\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n <div class=\"d-none gap-3 d-sm-flex d-md-flex d-lg-flex\" role=\"gridcell\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChildGroups\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n [ngClass]=\"\r\n treeControl.isExpanded(node)\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\r\n class=\"ieeesa-tree__node w-100 d-flex my-0 gap-3\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div role=\"gridcell\">\r\n <ieeesa-icon-button\r\n *ngIf=\"!isGroupSearchOrFilterActive\"\r\n (iconButtonClick)=\"viewChildGroups(node)\"\r\n [iconButton]=\"getToggleButtonInfo(node)\"\r\n ></ieeesa-icon-button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n <div\r\n class=\"d-flex d-none gap-3 d-sm-flex d-md-flex d-lg-flex\"\r\n role=\"gridcell\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"w-100\">\r\n <div\r\n class=\"ieeesa-tree__group-info d-flex flex-column flex-sm-row flex-md-row flex-lg-row align-items-start align-items-sm-baseline align-items-md-baseline align-items-lg-baseline gap-2 mb-1\"\r\n >\r\n <p class=\"ieeesa-tree__node-group-name ieeesa-headline-sm-26\">\r\n {{ node.item.groupName }}\r\n </p>\r\n <p class=\"ieeesa-tree__node-group-acronym ieeesa-title-lg-24\">\r\n {{ node.item.groupAcronym }}\r\n </p>\r\n </div>\r\n <div class=\"ieeesa-body-md-16 ieeesa-tree__node-group-desc\">\r\n {{ node.item.groupTypeInfo.name }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #ieeesaGroupActionsOutlet let-node>\r\n <ieeesa-icon-button\r\n *ngFor=\"let item of getFilteredGroupActions(node); trackBy: trackByFn\"\r\n [iconButton]=\"item\"\r\n (iconButtonClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-template>\r\n </mat-tree>\r\n</div>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum GroupFunctionType {\r\n CREATE = \"CREATE\",\r\n EDIT = \"EDIT\"\r\n}","import { CommonModule } from '@angular/common';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport {\r\n Component,\r\n Input,\r\n OnDestroy,\r\n ViewEncapsulation,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\r\nimport { CreateGroupComponent } from './components/create-group/create-group.component';\r\nimport { GroupsService } from './services/groups.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { GroupInfo } from './models/group-info.model';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport {\r\n SearchComponent,\r\n ModalComponent,\r\n SelectOption,\r\n SelectComponent,\r\n Legend,\r\n IconButtonComponent,\r\n IconButton,\r\n AlignType,\r\n ModalConfirmationComponent,\r\n LegendComponent,\r\n} from '@ieeesa-npm/presentation';\r\nimport { TreeViewComponent } from './components/tree-view/tree-view.component';\r\nimport { GroupType } from './models/group-types.model';\r\nimport {\r\n ModalType,\r\n AlertType,\r\n GlobalErrorHandlerService,\r\n BreakpointObserverService,\r\n AlertsService,\r\n} from '@ieeesa-npm/utility';\r\nimport * as screenTexts from './assets/constants.json';\r\nimport { GroupFunctionType } from './models/group-function-type.model';\r\nimport { GetGroupsPayload } from './models/view-group.model';\r\nimport { DeleteGroupPayload } from './models/delete-group.model';\r\n\r\n/**\r\n * Groups component is a wrapper or container component for groups management reusable component and in this component integrates all group management functionalities and this will be entry component for managing groups when it is consumed in other applications.\r\n * @class GroupsComponent\r\n */\r\n@Component({\r\n // eslint-disable-next-line @angular-eslint/component-selector\r\n selector: 'ieeesa-groups',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatDialogModule,\r\n MatButtonModule,\r\n SearchComponent,\r\n SelectComponent,\r\n TreeViewComponent,\r\n LegendComponent,\r\n IconButtonComponent,\r\n ],\r\n templateUrl: './groups.component.html',\r\n styleUrls: ['./groups.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [AlertsService],\r\n})\r\nexport class GroupsComponent implements OnInit, OnDestroy {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n dialogRef: any;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = screenTexts;\r\n viewGroupTexts = this.constants?.viewGroups;\r\n isGroupSearchActive = false;\r\n isGroupFilterActive = false;\r\n isGroupSearchOrFilterActive = false;\r\n isMobileView = false;\r\n childGroupsInfo!: GroupInfo[];\r\n selectedGroupType!: SelectOption;\r\n parentGroupsInfo!: GroupInfo[];\r\n selectGroupOptions!: SelectOption[];\r\n deletedGroupId!: string;\r\n groupTypes!: { [key: string]: GroupType };\r\n searchPlaceHolderText: string = this.viewGroupTexts?.placeholderText?.search;\r\n filterPlaceHolderText: string = this.viewGroupTexts?.placeholderText?.filter;\r\n createGroupIcon: IconButton = {\r\n id: 1,\r\n ariaLabel: this.viewGroupTexts?.ariaLabel.add,\r\n iconURL: this.viewGroupTexts?.createGroupIcon,\r\n toolTip: this.viewGroupTexts?.ariaLabel.add,\r\n };\r\n filterGroupIcon: IconButton = {\r\n id: 2,\r\n ariaLabel: this.viewGroupTexts?.ariaLabel.filter,\r\n iconURL: this.viewGroupTexts?.filterGroupIcon,\r\n toolTip: this.viewGroupTexts?.ariaLabel.filter,\r\n };\r\n groupsLegends: Legend[] = [];\r\n getGroupsPayload: GetGroupsPayload = { groupId: '', groupTypeId: '' };\r\n @Input() groupsPageInfo: {\r\n groupsTitle: string;\r\n groupsDescription: string;\r\n } = {\r\n groupsTitle: this.viewGroupTexts?.groupsTitle,\r\n groupsDescription: this.viewGroupTexts?.groupsDescription,\r\n };\r\n @Input() applicationId!: string;\r\n @Input() apiBaseURL!: string;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Input() permissions!: any;\r\n createGroupText = screenTexts?.createGroup;\r\n functionType!: GroupFunctionType;\r\n alignmentType = AlignType;\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n public dialog: MatDialog,\r\n // eslint-disable-next-line no-unused-vars\r\n private groupsService: GroupsService,\r\n // eslint-disable-next-line no-unused-vars\r\n public alertService: AlertsService,\r\n // eslint-disable-next-line no-unused-vars\r\n private breakpointObserverService: BreakpointObserverService,\r\n // eslint-disable-next-line no-unused-vars\r\n private globalErrorHandlerService: GlobalErrorHandlerService\r\n ) {\r\n this.breakpointObserverService\r\n .getBreakpoint()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result) => {\r\n this.isMobileView = result.matches;\r\n });\r\n }\r\n\r\n /**\r\n * Initialize the groups component.\r\n * @return -returns nothing\r\n * @memberof GroupsComponent\r\n */\r\n ngOnInit(): void {\r\n this.groupsService.setAppConfig(this.apiBaseURL, this.permissions);\r\n this.getGroupTypes();\r\n }\r\n\r\n /**\r\n * Sets the dialog options for create group modal and calls openModal method.\r\n * @param {GroupInfo} [parentGroupInfo] -An optional parameter. Parent group info to be passed for create child group.\r\n * @return -returns nothing\r\n * @memberof GroupsComponent\r\n */\r\n openCreateGroupForm(parentGroupInfo?: GroupInfo): void {\r\n this.groupsService.setSelectedGroupInfo(parentGroupInfo ?? undefined);\r\n const dialogOptions = {\r\n heading: this.createGroupText?.heading,\r\n isCloseNeeded: true,\r\n componentReference: CreateGroupComponent,\r\n modalType: ModalType.FORM,\r\n };\r\n this.functionType = GroupFunctionType.CREATE;\r\n this.openModal(dialogOptions, 'ieeesa-create-group');\r\n }\r\n\r\n /**\r\n * Opens modal component with for received params and handles form submission success and errors.\r\n * @param {*} dialogOptions\r\n * @param {string} [className]\r\n * @return -returns nothing\r\n * @memberof GroupsComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-inferrable-types\r\n openModal(dialogOptions: any, className?: string): void {\r\n className = className ?? '';\r\n this.dialogRef = this.dialog.open(ModalComponent, {\r\n data: dialogOptions,\r\n width: 'auto',\r\n panelClass: ['ieeesa-modal-dialog', className],\r\n ariaModal: true,\r\n });\r\n this.dialogRef?.componentInstance?.submitFormResponse\r\n .pipe(takeUntil(this.destroy$))\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, no-unused-vars\r\n .subscribe((result: any) => {\r\n this.dialogRef.close();\r\n if (this.functionType === GroupFunctionType.CREATE) {\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n alertType: AlertType.SUCCESS,\r\n isCloseNeeded: true,\r\n message: this.createGroupText?.message?.success?.submission,\r\n });\r\n }\r\n });\r\n this.dialogRef?.componentInstance?.formCancel\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.dialogRef.close();\r\n });\r\n }\r\n /**\r\n * Opens the confirmation modal to get user confirmation to delete the selected group.\r\n * @memberof GroupComponent\r\n */\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n openDeleteConfirmationModal(groupInfo: GroupInfo): void {\r\n const confirmationInfo = screenTexts?.deleteGroup?.confirmationInfo;\r\n const deleteGroupModalOptions = {\r\n leftButtonLabel: confirmationInfo?.leftButtonLabel,\r\n rightButtonLabel: confirmationInfo?.rightButtonLabel,\r\n promptMessage:\r\n confirmationInfo?.promptMessage + groupInfo.groupName + '?',\r\n actionButtonAlign: this.alignmentType.MIDDLE,\r\n };\r\n this.dialogRef = this.dialog.open(ModalConfirmationComponent, {\r\n data: deleteGroupModalOptions,\r\n width: 'auto',\r\n autoFocus: 'dialog'\r\n });\r\n this.dialogRef\r\n .afterClosed()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result: boolean) => {\r\n if (result) {\r\n this.deleteGroup(groupInfo);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * This method sends API Request to delete the selected group and handles the success and error response of the http request.\r\n * @memberof GroupComponent\r\n */\r\n deleteGroup(groupInfo: GroupInfo): void {\r\n const deleteGroupText = screenTexts?.deleteGroup;\r\n const deleteGroupPayload: DeleteGroupPayload = {\r\n payload: {\r\n groupId: groupInfo.groupId,\r\n },\r\n };\r\n this.groupsService\r\n .deleteGroup(deleteGroupPayload)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n next: (res: any) => {\r\n this.dialogRef?.close();\r\n if (res?.status) {\r\n this.deletedGroupId = groupInfo.groupId;\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n alertType: AlertType.SUCCESS,\r\n isCloseNeeded: true,\r\n message:\r\n groupInfo.groupName +\r\n deleteGroupText?.message?.success?.deletion,\r\n });\r\n }\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error: (error: any) => {\r\n const errorCodes = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes) && !error?.error?.status) {\r\n const errorMessage =\r\n this.groupsService.parseErrorMessage(errorCodes);\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n message: errorMessage,\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService.handleError(error);\r\n }\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Shows the search field on click of search icon in case of mobile view\r\n * @memberof GroupsComponent\r\n */\r\n onGroupSearch(): void {\r\n this.isGroupSearchActive = true;\r\n this.isGroupFilterActive = false;\r\n }\r\n\r\n /**\r\n * Shows the Filter by dropdown options on click of filter icon in case of mobile view\r\n * @memberof GroupsComponent\r\n */\r\n showGroupFilter(): void {\r\n this.isGroupFilterActive = true;\r\n this.isGroupSearchActive = false;\r\n }\r\n\r\n /**\r\n * Sets isGroupSearchOrFilterActive to true and loads the groups those are configured with selected group type.\r\n * @param {string} searchTerm\r\n * @memberof GroupsComponent\r\n */\r\n onGroupSearchClick(searchTerm: string): void {\r\n this.isGroupSearchOrFilterActive = !!searchTerm;\r\n }\r\n /**\r\n * Sets select group type options from groupTypes response\r\n * @return {*} {SelectOption[]}\r\n * @memberof GroupsComponent\r\n */\r\n getGroupTypeOptions(): SelectOption[] {\r\n this.legendColor();\r\n const groupTypeOptions: SelectOption[] = [];\r\n groupTypeOptions.push({ id:'', name: this.viewGroupTexts?.allGroupTypesOption });\r\n Object.entries(this.groupTypes).forEach((node) => {\r\n groupTypeOptions.push({ id: node[0], name: node[1].name });\r\n });\r\n return groupTypeOptions;\r\n }\r\n /**\r\n * Sets legend color from groupTypes response\r\n * @memberof GroupsComponent\r\n */\r\n legendColor(): void {\r\n Object.entries(this.groupTypes).forEach((node) => {\r\n this.groupsLegends.push({\r\n color: node[1].legendColor,\r\n label: node[1].name,\r\n });\r\n });\r\n }\r\n /**\r\n * Sets the isGroupSearchOrFilterActive flag and loads parent group info as per selected filter option.\r\n * @param {SelectOption} event\r\n * @memberof GroupsComponent\r\n */\r\n onGroupTypeFiltered(event: SelectOption): void {\r\n this.selectedGroupType = event;\r\n this.isGroupSearchOrFilterActive = !!this.selectedGroupType?.id;\r\n this.getGroupsPayload = {\r\n groupId: '',\r\n groupTypeId: this.selectedGroupType?.id as string,\r\n };\r\n this.getGroups();\r\n }\r\n\r\n /**\r\n * Loads all the parent groups information.\r\n * @memberof GroupsComponent\r\n */\r\n getGroups(group?: GroupInfo): void {\r\n if (group) {\r\n this.getGroupsPayload = {\r\n groupId: group?.groupId ?? '',\r\n groupTypeId: '',\r\n };\r\n }\r\n this.groupsService\r\n .getGroups(this.getGroupsPayload)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => {\r\n if (response?.status) {\r\n if (group) {\r\n this.childGroupsInfo = this.viewGroupResponse(response?.body);\r\n } else {\r\n this.parentGroupsInfo = this.viewGroupResponse(response?.body);\r\n }\r\n }\r\n },\r\n error: (error) => {\r\n const errorCodes: string[] = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes)) {\r\n const errorMessage =\r\n this.groupsService.parseErrorMessage(errorCodes);\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n message: errorMessage,\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService.handleError(error);\r\n }\r\n },\r\n });\r\n }\r\n /**\r\n * Sets groupType info with group response from groupType response\r\n * @param {GroupInfo[]} response\r\n * @return {*} {GroupInfo[]}\r\n * @memberof GroupsComponent\r\n */\r\n viewGroupResponse(response: GroupInfo[]): GroupInfo[] {\r\n response.forEach((node) => {\r\n const groupTypeInfo: GroupType = this.groupTypes[node.groupType];\r\n node.groupTypeInfo = groupTypeInfo;\r\n });\r\n return response;\r\n }\r\n\r\n /**\r\n * Loads the group types.\r\n * @memberof GroupsComponent\r\n */\r\n getGroupTypes(): void {\r\n this.groupsService\r\n .getGroupTypes()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n if (res?.status) {\r\n this.groupTypes = res?.body?.configFieldValue;\r\n this.selectGroupOptions = this.getGroupTypeOptions();\r\n this.selectedGroupType = this.selectGroupOptions[0];\r\n this.onGroupTypeFiltered(this.selectedGroupType);\r\n }\r\n },\r\n error: (error) => {\r\n const errorCodes: string[] = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes)) {\r\n const errorMessage =\r\n this.groupsService.parseErrorMessage(errorCodes);\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n message: errorMessage,\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService.handleError(error);\r\n }\r\n },\r\n });\r\n }\r\n /**\r\n * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof GroupsComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<div class=\"ieeesa-groups p-3 p-sm-4 p-md-4 p-lg-4\">\r\n <div\r\n class=\"ieeesa-groups__info d-flex justify-content-between pb-3\"\r\n [ngClass]=\"\r\n isMobileView\r\n ? 'ieeesa-groups__info--white-bg'\r\n : 'ieeesa-groups__info--blue-bg'\r\n \"\r\n >\r\n <p\r\n [ngClass]=\"isMobileView ? 'ieeesa-title-lg-24' : 'ieeesa-headline-lg-34'\"\r\n >\r\n {{ groupsPageInfo.groupsTitle }}\r\n </p>\r\n <div>\r\n <button\r\n mat-button\r\n class=\"ieeesa-groups__create-subgroup mat-tertiary-button d-none d-sm-none d-md-block d-lg-block d-xl-block\"\r\n (click)=\"openCreateGroupForm()\"\r\n [attr.aria-label]=\"constants.viewGroups.ariaLabel.addGroup\"\r\n >\r\n {{ constants.viewGroups.addGroup }}\r\n </button>\r\n </div>\r\n <div\r\n class=\"d-flex d-sm-flex d-md-none d-lg-none d-xl-none ieeesa-groups__mobile-icons gap-2\"\r\n >\r\n <ieeesa-icon-button\r\n [iconButton]=\"createGroupIcon\"\r\n (iconButtonClick)=\"openCreateGroupForm()\"\r\n >\r\n </ieeesa-icon-button>\r\n <ieeesa-icon-button\r\n [iconButton]=\"filterGroupIcon\"\r\n (iconButtonClick)=\"showGroupFilter()\"\r\n >\r\n </ieeesa-icon-button>\r\n <button\r\n mat-button\r\n [attr.aria-label]=\"constants.viewGroups.ariaLabel.search\"\r\n (click)=\"onGroupSearch()\"\r\n type=\"button\"\r\n >\r\n <i class=\"fa-solid fa-magnifying-glass search-group-icon\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div\r\n class=\"ieeesa-groups__actions\"\r\n [ngClass]=\"\r\n isMobileView\r\n ? 'ieeesa-groups__actions--white-bg'\r\n : 'ieeesa-groups__actions--blue-bg'\r\n \"\r\n >\r\n <div class=\"ieeesa-groups__actions--search row\">\r\n <p\r\n class=\"ieeesa-body-md-16 order-2 order-sm-1 col-12 col-md-7 col-lg-7 col-xl-7\"\r\n >\r\n {{ groupsPageInfo.groupsDescription }}\r\n </p>\r\n <div\r\n *ngIf=\"\r\n ((isGroupSearchActive || isGroupFilterActive) && isMobileView) ||\r\n !isMobileView\r\n \"\r\n class=\"order-1 order-sm-2 col-12 col-md-5 col-lg-5 col-xl-5 d-flex flex-column\"\r\n >\r\n <ieeesa-search\r\n *ngIf=\"isGroupSearchActive || !isMobileView\"\r\n (searchValue)=\"onGroupSearchClick($event)\"\r\n [placeholderLabel]=\"searchPlaceHolderText\"\r\n ></ieeesa-search>\r\n <ieeesa-select\r\n *ngIf=\"isGroupFilterActive || !isMobileView\"\r\n class=\"align-self-end pt-lg-4 pt-md-4 pt-xl-4\"\r\n [dropdownOptions]=\"selectGroupOptions\"\r\n [isLabelAlignedLeft]=\"true\"\r\n [selectLabel]=\"constants.viewGroups.filterByLabel\"\r\n (optionSelected)=\"onGroupTypeFiltered($event)\"\r\n [placeholderText]=\"filterPlaceHolderText\"\r\n [selectedOptions]=\"selectedGroupType\"\r\n ></ieeesa-select>\r\n </div>\r\n </div>\r\n <ieeesa-tree\r\n *ngIf=\"parentGroupsInfo && parentGroupsInfo.length > 0\"\r\n [parentGroupsInfo]=\"parentGroupsInfo\"\r\n [childGroupsInfo]=\"childGroupsInfo\"\r\n [deletedGroupIdInfo]=\"deletedGroupId\"\r\n [isGroupSearchOrFilterActive]=\"isGroupSearchOrFilterActive\"\r\n (toggleGroupClick)=\"getGroups($event)\"\r\n (createGroupClick)=\"openCreateGroupForm($event)\"\r\n (deleteGroupClick)=\"openDeleteConfirmationModal($event)\"\r\n ></ieeesa-tree>\r\n <div\r\n *ngIf=\"parentGroupsInfo && parentGroupsInfo.length > 0\"\r\n class=\"d-flex flex-column flex-sm-row flex-md-row mt-4 justify-content-start justify-content-sm-end\"\r\n >\r\n <p class=\"px-sm-3 d-flex align-items-center ieeesa-label-lg-bold-16\">\r\n {{ constants.viewGroups.legend }}\r\n </p>\r\n <ieeesa-legend [legends]=\"groupsLegends\"></ieeesa-legend>\r\n </div>\r\n </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n ],\r\n exports: []\r\n})\r\nexport class GroupsModule { }\r\n","/*\r\n * Public API Surface of groups\r\n */\r\nexport * from './lib/components/create-group/create-group.component';\r\nexport * from './lib/components/tree-view/tree-view.component';\r\nexport * from './lib/groups.component';\r\n\r\nexport * from './lib/models/create-group.model';\r\nexport * from './lib/models/group-action.model';\r\nexport * from './lib/models/group-function-type.model';\r\nexport * from './lib/models/group-info.model';\r\nexport * from './lib/models/group-types.model';\r\nexport * from './lib/models/view-group.model';\r\n\r\nexport * from './lib/services/groups.service';\r\n\r\nexport * from './lib/assets/form-validations';\r\n\r\nexport * from './lib/groups.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["screenTexts?.errors","i1","screenTexts?.createGroup","i1.GroupsService","i2","i3","takeUntil","map","constants","screenTexts?.deleteGroup","i2.GroupsService","i4"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { EventEmitter, OnDestroy, OnInit } from "@angular/core";
2
2
  import { FormGroup } from "@angular/forms";
3
3
  import { FormGrid, FormModel, SelectOption, AlignType } from "@ieeesa-npm/presentation";
4
- import { AlertsService, GlobalErrorHandlerService } from "@ieeesa-npm/utility";
4
+ import { AlertsService, AlertType, GlobalErrorHandlerService } from "@ieeesa-npm/utility";
5
5
  import { GroupsService } from "../../services/groups.service";
6
6
  import { Subject } from "rxjs";
7
7
  import { GroupInfo } from "../../models/group-info.model";
@@ -74,10 +74,7 @@ export declare class CreateGroupComponent implements OnInit, OnDestroy {
74
74
  success: {
75
75
  submission: string;
76
76
  };
77
- }; /**
78
- * Event emitted when the form is successfully submitted.
79
- * @memberof CreateGroupComponent
80
- */
77
+ };
81
78
  supportText: {
82
79
  groupType: string;
83
80
  groupName: string;
@@ -126,6 +123,14 @@ export declare class CreateGroupComponent implements OnInit, OnDestroy {
126
123
  * @memberof CreateGroupComponent
127
124
  */
128
125
  getFormGroupReference(form: FormGroup[]): void;
126
+ /**
127
+ * Handles alerts for error, warning.
128
+ * @param {(string | string[])} message -error or warning message
129
+ * @param {AlertType} alertType
130
+ * @return -returns nothing
131
+ * @memberof CreateGroupComponent
132
+ */
133
+ showAlertMessage(message: string | string[], alertType: AlertType): void;
129
134
  /**
130
135
  * Emits form cancel event.
131
136
  * @return -returns nothing
@@ -0,0 +1,4 @@
1
+ export declare enum FormStatus {
2
+ VALID = "VALID",
3
+ INVALID = "INVALID"
4
+ }
@@ -14,23 +14,16 @@ export declare class GroupsService {
14
14
  private httpService;
15
15
  alertService: AlertsService;
16
16
  groupsText: {
17
+ ER1000: string;
17
18
  "1001": string;
18
19
  "1002": string;
19
20
  "1003": string;
20
21
  "1004": string;
21
- "1005": string; /**
22
- * Sets selected group info.
23
- * @param {(GroupInfo | undefined)} selectedGroupInfo -selected group info.
24
- * @memberof GroupsService
25
- */
22
+ "1005": string;
26
23
  "1006": string;
27
24
  "1008": string;
28
25
  "1009": string;
29
- "1010": string; /**
30
- * Returns the selected group info.
31
- * @return {(GroupInfo | undefined)} -group info.
32
- * @memberof GroupsService
33
- */
26
+ "1010": string;
34
27
  "1011": string;
35
28
  "1012": string;
36
29
  "1013": string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ieeesa-npm/groups",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^16.1.0",
6
6
  "@angular/core": "^16.1.0",