@ieeesa-npm/groups 0.2.2 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/assets/constants.json +20 -1
- package/esm2022/lib/components/tree-view/tree-view.component.mjs +6 -3
- package/esm2022/lib/components/view-roster/view-roster.component.mjs +214 -0
- package/esm2022/lib/groups.component.mjs +23 -4
- package/esm2022/lib/models/group-function-type.model.mjs +2 -1
- package/esm2022/lib/models/role.model.mjs +2 -0
- package/esm2022/lib/models/user.model.mjs +2 -0
- package/esm2022/lib/services/groups.service.mjs +90 -1
- package/fesm2022/ieeesa-npm-groups.mjs +352 -16
- package/fesm2022/ieeesa-npm-groups.mjs.map +1 -1
- package/lib/components/tree-view/tree-view.component.d.ts +2 -1
- package/lib/components/view-roster/view-roster.component.d.ts +66 -0
- package/lib/groups.component.d.ts +6 -0
- package/lib/models/group-function-type.model.d.ts +2 -1
- package/lib/models/role.model.d.ts +4 -0
- package/lib/models/user.model.d.ts +30 -0
- package/lib/services/groups.service.d.ts +47 -0
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
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/models/group-function-type.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/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}","/* eslint-disable no-unused-vars */\r\nexport enum GroupFunctionType {\r\n CREATE = \"CREATE\",\r\n EDIT = \"EDIT\"\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 {\r\n GroupTypeConfiguration,\r\n GroupTypeConfigValue,\r\n GroupTypeResponse\r\n} 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\nimport { EditGroupPayload } from '../models/edit-group.model';\r\nimport { GroupFunctionType } from '../models/group-function-type.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 groupFunctionType!: GroupFunctionType;\r\n selectedGroupParentInfo!: 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<CreateGroupResponse>} -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 * Updates group form data to server using HttpService.\r\n * @param {EditGroupPayload} editGroupPayload -edit group form data which includes group name, short name, scope.\r\n * @return {Observable<EditGroupPayload>} -returns edit group API response (success or error) as an observable.\r\n * @memberof GroupsService\r\n */\r\n editGroup(\r\n editGroupPayload: EditGroupPayload\r\n ): Observable<CreateGroupResponse> {\r\n return this.httpService\r\n .putData(`${this.apiBaseUrl}/groups/edit`, editGroupPayload)\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 * @param {(GroupInfo | undefined)} [selectedGroupParentInfo] -selected parent group info.\r\n * @memberof GroupsService\r\n */\r\n setSelectedGroupInfo(\r\n selectedGroupInfo: GroupInfo | undefined,\r\n selectedGroupParentInfo?: GroupInfo | undefined\r\n ) {\r\n this.selectedGroupInfo = selectedGroupInfo;\r\n this.selectedGroupParentInfo = selectedGroupParentInfo;\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 /**\r\n * Returns the selected group parent group info.\r\n * @return {(GroupInfo | undefined)} -group info.\r\n * @memberof GroupsService\r\n */\r\n getSelectedGroupParentInfo(): GroupInfo | undefined {\r\n return this.selectedGroupParentInfo;\r\n }\r\n\r\n /**\r\n * Sets group function type.\r\n * @param {GroupFunctionType} groupFunctionType -group function type.\r\n * @memberof GroupsService\r\n */\r\n setGroupFunctionType(groupFunctionType: GroupFunctionType): void {\r\n this.groupFunctionType = groupFunctionType;\r\n }\r\n\r\n /**\r\n * Returns group function type.\r\n * @return {GroupFunctionType} -group function type.\r\n * @memberof GroupsService\r\n */\r\n getGroupFunctionType(): GroupFunctionType {\r\n return this.groupFunctionType;\r\n }\r\n\r\n /**\r\n * Returns formatted group types.\r\n * @param {GroupTypeConfiguration[]} groupTypeResponse\r\n * @return {GroupTypeConfigValue}\r\n * @memberof GroupsService\r\n */\r\n getFormattedGroupTypes(\r\n groupTypeResponse: GroupTypeConfiguration[]\r\n ): GroupTypeConfigValue {\r\n const groupTypes: GroupTypeConfigValue = {};\r\n groupTypeResponse.forEach((item) => {\r\n groupTypes[item.configFieldId] = item.configFieldValue;\r\n });\r\n return groupTypes;\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 FieldConfig,\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 { EditGroupPayload } from '../../models/edit-group.model';\r\nimport { FormStatus } from '../../models/form-status.model';\r\nimport { GroupFunctionType } from '../../models/group-function-type.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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = screenTexts;\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 selectedGroupInfo!: GroupInfo | undefined;\r\n groupFunctionType!: GroupFunctionType;\r\n selectedGroupParentInfo!: 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.groupFunctionType = this.groupsService?.getGroupFunctionType();\r\n this.selectedGroupInfo = this.groupsService?.getSelectedGroupInfo();\r\n if (this.groupFunctionType === GroupFunctionType.EDIT) {\r\n this.selectedGroupParentInfo =\r\n this.groupsService?.getSelectedGroupParentInfo();\r\n this.createFormGroup();\r\n } else {\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 const groupTypes = this.groupsService?.getFormattedGroupTypes(res?.body);\r\n if (this.selectedGroupInfo?.groupType) {\r\n const allowedGroupType =\r\n groupTypes[this.selectedGroupInfo?.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: groupTypes[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(groupTypes).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 this.handleErrors(error);\r\n },\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Constructs and returns the group type form field based on edit group or not.\r\n * @return {FieldConfig} -group type form field.\r\n * @memberof CreateGroupComponent\r\n */\r\n getGroupTypeField(): FieldConfig {\r\n let groupTypeField: FieldConfig;\r\n if (this.groupFunctionType === GroupFunctionType.EDIT) {\r\n groupTypeField = {\r\n type: FormControlType?.TEXT_AREA,\r\n label: this.createGroupText?.label?.groupType,\r\n controlName: 'groupType',\r\n isReadonly: true,\r\n ariaMultiline: false,\r\n value: this.selectedGroupInfo?.groupTypeInfo?.name,\r\n ariaLabel: this.constants?.editGroup?.ariaLabel?.groupType,\r\n isResize: true,\r\n };\r\n } else {\r\n groupTypeField = {\r\n type: FormControlType?.SELECT,\r\n label: this.createGroupText?.label?.groupType + '*',\r\n controlName: 'groupType',\r\n requiredErrorMessage: this.createGroupText?.message?.error?.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:\r\n this.createGroupText?.label?.ariaDescribedById?.groupType,\r\n };\r\n }\r\n return groupTypeField;\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 this.getGroupTypeField(),\r\n {\r\n type: FormControlType?.INPUT,\r\n label: this.createGroupText?.label?.groupName + '*',\r\n controlName: 'groupName',\r\n requiredErrorMessage:\r\n this.createGroupText?.message?.error?.required,\r\n value:\r\n this.groupFunctionType === GroupFunctionType.EDIT\r\n ? this.selectedGroupInfo?.groupName\r\n : '',\r\n placeholder: '',\r\n supportMessage: this.createGroupText?.supportText?.groupName,\r\n patternErrorMessage:\r\n this.createGroupText?.message?.error?.pattern?.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:\r\n this.createGroupText?.message?.error?.limit?.groupName,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.groupName,\r\n ariaDescribedById:\r\n this.createGroupText?.label?.ariaDescribedById?.groupName,\r\n },\r\n {\r\n type: FormControlType?.INPUT,\r\n label: this.createGroupText?.label?.shortName + '*',\r\n controlName: 'shortName',\r\n requiredErrorMessage:\r\n this.createGroupText?.message?.error?.required,\r\n value:\r\n this.groupFunctionType === GroupFunctionType.EDIT\r\n ? this.selectedGroupInfo?.groupShortName\r\n : '',\r\n patternErrorMessage:\r\n this.createGroupText?.message?.error?.pattern?.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:\r\n this.createGroupText?.message?.error?.limit?.shortName,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.shortName,\r\n ariaDescribedById:\r\n this.createGroupText?.label?.ariaDescribedById?.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:\r\n this.createGroupText?.message?.error?.pattern?.groupScope,\r\n value:\r\n this.groupFunctionType === GroupFunctionType.EDIT\r\n ? this.selectedGroupInfo?.groupDesc\r\n : '',\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:\r\n this.createGroupText?.message?.error?.limit?.groupScope,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.groupScope,\r\n ariaDescribedById:\r\n this.createGroupText?.label?.ariaDescribedById?.groupScope,\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n if (this.selectedGroupInfo?.groupId) {\r\n this.updateCreateFormGroup(this.selectedGroupInfo);\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 * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n updateCreateFormGroup(parentGroupInfo: GroupInfo): void {\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:\r\n this.groupFunctionType === GroupFunctionType.EDIT\r\n ? this.selectedGroupParentInfo?.groupName\r\n : parentGroupInfo?.groupName,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.parentGroup,\r\n isResize: true,\r\n };\r\n if (parentGroup?.value) {\r\n this.formGroup?.formGroup[0]?.controls?.unshift(parentGroup);\r\n }\r\n }\r\n\r\n /**\r\n * Handles client side validation and calls create group or edit group methods.\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 formData = form[0]?.getRawValue();\r\n // eslint-disable-next-line no-unused-expressions\r\n this.groupFunctionType === GroupFunctionType.EDIT\r\n ? this.editGroup(formData)\r\n : this.createGroup(formData);\r\n }\r\n }\r\n\r\n /**\r\n * Constructs create group payload and calls create group API and emits create group API response.\r\n * @param formData\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n createGroup(formData: any): void {\r\n const createGroupPayload: CreateGroupPayload = {\r\n payload: {\r\n groupName: formData?.groupName,\r\n groupShortName: formData?.shortName,\r\n groupType: formData?.groupType?.id,\r\n groupDesc: formData?.groupScope,\r\n groupParentId: this.selectedGroupInfo?.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 this.handleErrors(error);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Constructs edit group payload and calls edit group API and emits create group API response.\r\n * @param {*} formData\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n editGroup(formData: any): void {\r\n const editGroupPayload: EditGroupPayload = {\r\n payload: {\r\n groupName: formData?.groupName,\r\n groupShortName: formData?.shortName,\r\n groupDesc: formData?.groupScope,\r\n groupParentId: this.selectedGroupInfo?.groupParentId ?? null,\r\n groupId: this.selectedGroupInfo?.groupId as string,\r\n },\r\n };\r\n this.groupsService\r\n .editGroup(editGroupPayload)\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 this.handleErrors(error);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Captures the server side errors and handles the errors based on the custom or Http errors.\r\n * @param {HttpErrorResponse} error\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n handleErrors(error: HttpErrorResponse): void {\r\n const errorCodes: string[] = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes)) {\r\n const errorMessage: string[] =\r\n this.groupsService?.parseErrorMessage(errorCodes);\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 * 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\nimport { EditGroupAndParentInfo } from '../../models/edit-group.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 (\r\n (!!node?.children && node?.children?.length > 0) || node?.hasChildren\r\n );\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 | undefined) {\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<EditGroupAndParentInfo>();\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\r\n ?.pipe(takeUntil(this.destroy$))\r\n .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 | undefined): 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 const editGroupParentInfo = this.dataSource?.data?.filter(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (item: any) => item?.item?.groupId === group?.item?.groupParentId\r\n )[0]?.item;\r\n const editGroupAndParentInfo: EditGroupAndParentInfo = {\r\n groupInfo: group?.item,\r\n parentGroupInfo: editGroupParentInfo,\r\n };\r\n this.editGroupClick.emit(editGroupAndParentInfo);\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","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, GroupTypeConfigValue } 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\nimport { EditGroupAndParentInfo } from './models/edit-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 createGroupText = this.constants?.createGroup;\r\n editGroupTexts = this.constants?.editGroup;\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!: GroupTypeConfigValue;\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 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 this.groupsService?.setGroupFunctionType(GroupFunctionType?.CREATE);\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 * Sets the dialog options for edit group modal and calls openModal method.\r\n * @param {EditGroupAndParentInfo} editGroupInfo -editing group and its parent group info to be passed for populating edit group form fields.\r\n * @return -returns nothing\r\n * @memberof GroupsComponent\r\n */\r\n openEditGroupForm(editGroupInfo: EditGroupAndParentInfo): void {\r\n this.groupsService?.setSelectedGroupInfo(\r\n editGroupInfo?.groupInfo,\r\n editGroupInfo?.parentGroupInfo\r\n );\r\n this.groupsService?.setGroupFunctionType(GroupFunctionType?.EDIT);\r\n const dialogOptions = {\r\n heading: editGroupInfo?.groupInfo?.groupName,\r\n isCloseNeeded: true,\r\n componentReference: CreateGroupComponent,\r\n modalType: ModalType.FORM,\r\n };\r\n this.functionType = GroupFunctionType?.EDIT;\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 switch (this.functionType) {\r\n case GroupFunctionType?.CREATE:\r\n this.showAlertMessage(\r\n AlertType?.SUCCESS,\r\n this.createGroupText?.message?.success?.submission\r\n );\r\n break;\r\n case GroupFunctionType?.EDIT:\r\n this.showAlertMessage(\r\n AlertType?.SUCCESS,\r\n this.editGroupTexts?.message?.success?.submission\r\n );\r\n break;\r\n default:\r\n break;\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 /**\r\n * Opens the confirmation modal to get user confirmation to delete the selected group.\r\n * @memberof GroupComponent\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.showAlertMessage(\r\n AlertType?.SUCCESS,\r\n groupInfo?.groupName + 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 this.handleErrors(error);\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 /**\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({\r\n id: '',\r\n name: this.viewGroupTexts?.allGroupTypesOption,\r\n });\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 /**\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 /**\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 this.handleErrors(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 = this.groupsService?.getFormattedGroupTypes(\r\n res?.body\r\n );\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 this.handleErrors(error);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Handles alerts for success, error and warning.\r\n * @param {(string | string[])} message -success or error or warning message.\r\n * @param {AlertType} alertType\r\n * @return -returns nothing\r\n * @memberof GroupsComponent\r\n */\r\n showAlertMessage(alertType: AlertType, message: string | string[]): 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 * Captures the server side errors and handles it based on the custom or Http errors.\r\n * @param {HttpErrorResponse} error\r\n * @return -returns nothing\r\n * @memberof GroupsComponent\r\n */\r\n handleErrors(error: HttpErrorResponse): void {\r\n const errorCodes: string[] = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes)) {\r\n const errorMessage: string[] =\r\n this.groupsService?.parseErrorMessage(errorCodes);\r\n this.showAlertMessage(AlertType.ERROR, errorMessage);\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService?.handleError(error);\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 (editGroupClick)=\"openEditGroupForm($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\nexport * from './lib/models/edit-group.model';\r\nexport * from './lib/models/form-status.model';\r\nexport * from './lib/models/delete-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/models/group-function-type.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/components/view-roster/view-roster.component.ts","../../../projects/groups/src/lib/components/view-roster/view-roster.component.html","../../../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}","/* eslint-disable no-unused-vars */\r\nexport enum GroupFunctionType {\r\n CREATE = 'CREATE',\r\n EDIT = 'EDIT',\r\n VIEW_ROSTER = 'VIEW_ROSTER',\r\n}\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 {\r\n GroupTypeConfiguration,\r\n GroupTypeConfigValue,\r\n GroupTypeResponse,\r\n} 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\nimport {\r\n SearchUsersPayload,\r\n FilterUsersByRolesPayload,\r\n GetGroupUsersResponse,\r\n User,\r\n} from '../models/user.model';\r\nimport { Role } from '../models/role.model';\r\nimport { CheckboxOption } from '@ieeesa-npm/presentation';\r\nimport { EditGroupPayload } from '../models/edit-group.model';\r\nimport { GroupFunctionType } from '../models/group-function-type.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 groupFunctionType!: GroupFunctionType;\r\n selectedGroupParentInfo!: 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<CreateGroupResponse>} -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 * Updates group form data to server using HttpService.\r\n * @param {EditGroupPayload} editGroupPayload -edit group form data which includes group name, short name, scope.\r\n * @return {Observable<EditGroupPayload>} -returns edit group API response (success or error) as an observable.\r\n * @memberof GroupsService\r\n */\r\n editGroup(\r\n editGroupPayload: EditGroupPayload\r\n ): Observable<CreateGroupResponse> {\r\n return this.httpService\r\n .putData(`${this.apiBaseUrl}/groups/edit`, editGroupPayload)\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 * @param {(GroupInfo | undefined)} [selectedGroupParentInfo] -selected parent group info.\r\n * @memberof GroupsService\r\n */\r\n setSelectedGroupInfo(\r\n selectedGroupInfo: GroupInfo | undefined,\r\n selectedGroupParentInfo?: GroupInfo | undefined\r\n ) {\r\n this.selectedGroupInfo = selectedGroupInfo;\r\n this.selectedGroupParentInfo = selectedGroupParentInfo;\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 /**\r\n * Returns the selected group parent group info.\r\n * @return {(GroupInfo | undefined)} -group info.\r\n * @memberof GroupsService\r\n */\r\n getSelectedGroupParentInfo(): GroupInfo | undefined {\r\n return this.selectedGroupParentInfo;\r\n }\r\n\r\n /**\r\n * Sets group function type.\r\n * @param {GroupFunctionType} groupFunctionType -group function type.\r\n * @memberof GroupsService\r\n */\r\n setGroupFunctionType(groupFunctionType: GroupFunctionType): void {\r\n this.groupFunctionType = groupFunctionType;\r\n }\r\n\r\n /**\r\n * Returns group function type.\r\n * @return {GroupFunctionType} -group function type.\r\n * @memberof GroupsService\r\n */\r\n getGroupFunctionType(): GroupFunctionType {\r\n return this.groupFunctionType;\r\n }\r\n\r\n /**\r\n * Gets the group users for the given group id.\r\n * @param {string} groupId\r\n * @return {Observable<GetGroupUsersResponse>}\r\n * @memberof GroupsService\r\n */\r\n getGroupUsers(groupId: string): Observable<GetGroupUsersResponse> {\r\n return this.httpService\r\n .getData(`${this.apiBaseUrl}/groups/roster/${groupId}`)\r\n .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 /**\r\n * Gets the group users based on the filtered roles.\r\n * @param {FilterUsersByRolesPayload} payload\r\n * @return {Observable<GetGroupUsersResponse>}\r\n * @memberof GroupsService\r\n */\r\n getGroupUsersByRoles(\r\n payload: FilterUsersByRolesPayload\r\n ): Observable<GetGroupUsersResponse> {\r\n return this.httpService\r\n .postData(`${this.apiBaseUrl}/groups/roster/groupUsersByRole`, payload)\r\n .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 /**\r\n * Gets the group users based on searched name or email\r\n * @param {SearchUsersPayload} payload\r\n * @return {Observable<GetGroupUsersResponse>}\r\n * @memberof GroupsService\r\n */\r\n searchGroupUsers(\r\n payload: SearchUsersPayload\r\n ): Observable<GetGroupUsersResponse> {\r\n return this.httpService\r\n .postData(\r\n `${this.apiBaseUrl}/groups/roster/groupUsersByRoleByNameByEmail`,\r\n payload\r\n )\r\n .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 /**\r\n * Gets the group roles based on the group type.\r\n * @param {string} groupTypeId\r\n * @return {Observable<CheckboxOption[]>}\r\n * @memberof GroupsService\r\n */\r\n getGroupTypeRoles(groupTypeId: string): Observable<CheckboxOption[]> {\r\n return this.httpService\r\n .getData(\r\n `${this.apiBaseUrl}/configurations/users/rolesByGroupType/${groupTypeId}`\r\n )\r\n .pipe(\r\n map((response) => {\r\n const rolesOption: CheckboxOption[] = [];\r\n response?.body?.forEach((role: Role) => {\r\n rolesOption.push({\r\n id: role.roleId,\r\n name: role.roleName,\r\n disabled: false,\r\n checked: false,\r\n });\r\n });\r\n return rolesOption;\r\n }),\r\n catchError((errorRes) => {\r\n throw errorRes;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Concatenates the group users assigned roles name separated by comma as string and returns the group users in an array.\r\n * @param {GetGroupUsersResponse} response\r\n * @return {User[]}\r\n * @memberof GroupsService\r\n */\r\n transformUserRolesNameAsString(response: GetGroupUsersResponse): User[] {\r\n const users: User[] = [];\r\n response?.body?.forEach((item) => {\r\n const roles: string[] = [];\r\n item?.rolesList?.forEach((role) => roles.push(role?.roleName));\r\n users.push({\r\n userId: item.userId,\r\n name: item.name,\r\n email: item.email,\r\n role: roles.join(', '),\r\n });\r\n });\r\n return users;\r\n }\r\n /**\r\n * Returns formatted group types.\r\n * @param {GroupTypeConfiguration[]} groupTypeResponse\r\n * @return {GroupTypeConfigValue}\r\n * @memberof GroupsService\r\n */\r\n getFormattedGroupTypes(\r\n groupTypeResponse: GroupTypeConfiguration[]\r\n ): GroupTypeConfigValue {\r\n const groupTypes: GroupTypeConfigValue = {};\r\n groupTypeResponse.forEach((item) => {\r\n groupTypes[item.configFieldId] = item.configFieldValue;\r\n });\r\n return groupTypes;\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 FieldConfig,\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 { EditGroupPayload } from '../../models/edit-group.model';\r\nimport { FormStatus } from '../../models/form-status.model';\r\nimport { GroupFunctionType } from '../../models/group-function-type.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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = screenTexts;\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 selectedGroupInfo!: GroupInfo | undefined;\r\n groupFunctionType!: GroupFunctionType;\r\n selectedGroupParentInfo!: 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.groupFunctionType = this.groupsService?.getGroupFunctionType();\r\n this.selectedGroupInfo = this.groupsService?.getSelectedGroupInfo();\r\n if (this.groupFunctionType === GroupFunctionType.EDIT) {\r\n this.selectedGroupParentInfo =\r\n this.groupsService?.getSelectedGroupParentInfo();\r\n this.createFormGroup();\r\n } else {\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 const groupTypes = this.groupsService?.getFormattedGroupTypes(res?.body);\r\n if (this.selectedGroupInfo?.groupType) {\r\n const allowedGroupType =\r\n groupTypes[this.selectedGroupInfo?.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: groupTypes[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(groupTypes).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 this.handleErrors(error);\r\n },\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Constructs and returns the group type form field based on edit group or not.\r\n * @return {FieldConfig} -group type form field.\r\n * @memberof CreateGroupComponent\r\n */\r\n getGroupTypeField(): FieldConfig {\r\n let groupTypeField: FieldConfig;\r\n if (this.groupFunctionType === GroupFunctionType.EDIT) {\r\n groupTypeField = {\r\n type: FormControlType?.TEXT_AREA,\r\n label: this.createGroupText?.label?.groupType,\r\n controlName: 'groupType',\r\n isReadonly: true,\r\n ariaMultiline: false,\r\n value: this.selectedGroupInfo?.groupTypeInfo?.name,\r\n ariaLabel: this.constants?.editGroup?.ariaLabel?.groupType,\r\n isResize: true,\r\n };\r\n } else {\r\n groupTypeField = {\r\n type: FormControlType?.SELECT,\r\n label: this.createGroupText?.label?.groupType + '*',\r\n controlName: 'groupType',\r\n requiredErrorMessage: this.createGroupText?.message?.error?.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:\r\n this.createGroupText?.label?.ariaDescribedById?.groupType,\r\n };\r\n }\r\n return groupTypeField;\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 this.getGroupTypeField(),\r\n {\r\n type: FormControlType?.INPUT,\r\n label: this.createGroupText?.label?.groupName + '*',\r\n controlName: 'groupName',\r\n requiredErrorMessage:\r\n this.createGroupText?.message?.error?.required,\r\n value:\r\n this.groupFunctionType === GroupFunctionType.EDIT\r\n ? this.selectedGroupInfo?.groupName\r\n : '',\r\n placeholder: '',\r\n supportMessage: this.createGroupText?.supportText?.groupName,\r\n patternErrorMessage:\r\n this.createGroupText?.message?.error?.pattern?.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:\r\n this.createGroupText?.message?.error?.limit?.groupName,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.groupName,\r\n ariaDescribedById:\r\n this.createGroupText?.label?.ariaDescribedById?.groupName,\r\n },\r\n {\r\n type: FormControlType?.INPUT,\r\n label: this.createGroupText?.label?.shortName + '*',\r\n controlName: 'shortName',\r\n requiredErrorMessage:\r\n this.createGroupText?.message?.error?.required,\r\n value:\r\n this.groupFunctionType === GroupFunctionType.EDIT\r\n ? this.selectedGroupInfo?.groupShortName\r\n : '',\r\n patternErrorMessage:\r\n this.createGroupText?.message?.error?.pattern?.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:\r\n this.createGroupText?.message?.error?.limit?.shortName,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.shortName,\r\n ariaDescribedById:\r\n this.createGroupText?.label?.ariaDescribedById?.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:\r\n this.createGroupText?.message?.error?.pattern?.groupScope,\r\n value:\r\n this.groupFunctionType === GroupFunctionType.EDIT\r\n ? this.selectedGroupInfo?.groupDesc\r\n : '',\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:\r\n this.createGroupText?.message?.error?.limit?.groupScope,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.groupScope,\r\n ariaDescribedById:\r\n this.createGroupText?.label?.ariaDescribedById?.groupScope,\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n if (this.selectedGroupInfo?.groupId) {\r\n this.updateCreateFormGroup(this.selectedGroupInfo);\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 * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n updateCreateFormGroup(parentGroupInfo: GroupInfo): void {\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:\r\n this.groupFunctionType === GroupFunctionType.EDIT\r\n ? this.selectedGroupParentInfo?.groupName\r\n : parentGroupInfo?.groupName,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.parentGroup,\r\n isResize: true,\r\n };\r\n if (parentGroup?.value) {\r\n this.formGroup?.formGroup[0]?.controls?.unshift(parentGroup);\r\n }\r\n }\r\n\r\n /**\r\n * Handles client side validation and calls create group or edit group methods.\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 formData = form[0]?.getRawValue();\r\n // eslint-disable-next-line no-unused-expressions\r\n this.groupFunctionType === GroupFunctionType.EDIT\r\n ? this.editGroup(formData)\r\n : this.createGroup(formData);\r\n }\r\n }\r\n\r\n /**\r\n * Constructs create group payload and calls create group API and emits create group API response.\r\n * @param formData\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n createGroup(formData: any): void {\r\n const createGroupPayload: CreateGroupPayload = {\r\n payload: {\r\n groupName: formData?.groupName,\r\n groupShortName: formData?.shortName,\r\n groupType: formData?.groupType?.id,\r\n groupDesc: formData?.groupScope,\r\n groupParentId: this.selectedGroupInfo?.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 this.handleErrors(error);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Constructs edit group payload and calls edit group API and emits create group API response.\r\n * @param {*} formData\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n editGroup(formData: any): void {\r\n const editGroupPayload: EditGroupPayload = {\r\n payload: {\r\n groupName: formData?.groupName,\r\n groupShortName: formData?.shortName,\r\n groupDesc: formData?.groupScope,\r\n groupParentId: this.selectedGroupInfo?.groupParentId ?? null,\r\n groupId: this.selectedGroupInfo?.groupId as string,\r\n },\r\n };\r\n this.groupsService\r\n .editGroup(editGroupPayload)\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 this.handleErrors(error);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Captures the server side errors and handles the errors based on the custom or Http errors.\r\n * @param {HttpErrorResponse} error\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n handleErrors(error: HttpErrorResponse): void {\r\n const errorCodes: string[] = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes)) {\r\n const errorMessage: string[] =\r\n this.groupsService?.parseErrorMessage(errorCodes);\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 * 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\nimport { EditGroupAndParentInfo } from '../../models/edit-group.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 (\r\n (!!node?.children && node?.children?.length > 0) || node?.hasChildren\r\n );\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 | undefined) {\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<EditGroupAndParentInfo>();\r\n @Output() deleteGroupClick = new EventEmitter<GroupInfo>();\r\n @Output() viewRosterClick = 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\r\n ?.pipe(takeUntil(this.destroy$))\r\n .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 | undefined): 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.viewRosterClick.emit(group?.item);\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 const editGroupParentInfo = this.dataSource?.data?.filter(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (item: any) => item?.item?.groupId === group?.item?.groupParentId\r\n )[0]?.item;\r\n const editGroupAndParentInfo: EditGroupAndParentInfo = {\r\n groupInfo: group?.item,\r\n parentGroupInfo: editGroupParentInfo,\r\n };\r\n this.editGroupClick.emit(editGroupAndParentInfo);\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","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n OnDestroy,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { SortDirection } from '@angular/material/sort';\r\nimport {\r\n TableColumnSchema,\r\n TableColumnType,\r\n TableActions,\r\n CheckboxOption,\r\n ChipOption,\r\n DataTableComponent,\r\n TableColumnSortDirection,\r\n} from '@ieeesa-npm/presentation';\r\nimport {\r\n AlertType,\r\n AlertsService,\r\n GlobalErrorHandlerService,\r\n} from '@ieeesa-npm/utility';\r\nimport { GroupsService } from '../../services/groups.service';\r\nimport {\r\n SearchUsersPayload,\r\n FilterUsersByRolesPayload,\r\n User,\r\n} from '../../models/user.model';\r\nimport * as constants from '../../assets/constants.json';\r\n\r\n/**\r\n * ViewRosterComponent implements the functionalities to add, edit, delete user to group roster, assign and modify roles(s) to the group users, and search user from roster.\r\n * @export\r\n * @class ViewRosterComponent\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n selector: 'ieeesa-view-roster',\r\n standalone: true,\r\n imports: [CommonModule, DataTableComponent],\r\n templateUrl: './view-roster.component.html',\r\n styleUrls: ['./view-roster.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ViewRosterComponent implements OnDestroy {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n viewRosterConstants = this.constants?.viewRoster;\r\n filters: ChipOption[] = [\r\n { id: 1, name: this.viewRosterConstants?.filterByRole, checked: false },\r\n ];\r\n columnSchema: TableColumnSchema[] = [\r\n {\r\n id: 1,\r\n columnDef: TableColumnType.SELECT,\r\n heading: '',\r\n columnType: TableColumnType.SELECT,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n cellData: (element: any) => `${element.select}`,\r\n },\r\n {\r\n id: 2,\r\n columnDef: 'name',\r\n heading: this.viewRosterConstants?.tableColumns?.name,\r\n columnType: TableColumnType.TEXT,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n cellData: (element: any) => `${element.name}`,\r\n isSortableColumn: true,\r\n },\r\n {\r\n id: 3,\r\n columnDef: 'email',\r\n heading: this.viewRosterConstants?.tableColumns?.email,\r\n columnType: TableColumnType.TEXT,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n cellData: (element: any) => `${element.email}`,\r\n isSortableColumn: true,\r\n },\r\n {\r\n id: 4,\r\n columnDef: 'role',\r\n heading: this.viewRosterConstants?.tableColumns?.role,\r\n columnType: TableColumnType.TEXT,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n cellData: (element: any) => `${element.role}`,\r\n },\r\n ];\r\n tableData!: User[];\r\n selectedRoleIds: string[] = [];\r\n roles: CheckboxOption[] = [];\r\n rosterActions: TableActions = {\r\n isSearchNeeded: true,\r\n isFilterNeeded: true,\r\n isAddNeeded: true,\r\n isDeleteNeeded: true,\r\n isEditNeeded: true,\r\n };\r\n defaultSortedColumn = this.columnSchema[1].columnDef;\r\n defaultColumnSortDirection: SortDirection =\r\n TableColumnSortDirection.ASCENDING;\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private groupService: GroupsService,\r\n // eslint-disable-next-line no-unused-vars\r\n private alertService: AlertsService,\r\n // eslint-disable-next-line no-unused-vars\r\n private globalErrorHandlerService: GlobalErrorHandlerService\r\n ) {\r\n this.getGroupUsersAndInitializeTableView();\r\n }\r\n /**\r\n * Gets the group users by calling getGroupUsers() from groupService and sets tableData to display the users in a grid.\r\n * @memberof ViewRosterComponent\r\n */\r\n getGroupUsersAndInitializeTableView(): void {\r\n this.groupService\r\n .getGroupUsers(\r\n this.groupService.getSelectedGroupInfo()?.groupId as string\r\n )\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => {\r\n this.tableData =\r\n this.groupService.transformUserRolesNameAsString(response);\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error: (error: any) => {\r\n this.handleErrors(error);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Gets the selected group type roles by calling getGroupTypeRoles() from groupService and sets assign roles.\r\n * @memberof ViewRosterComponent\r\n */\r\n getRoles(): void {\r\n this.groupService\r\n .getGroupTypeRoles(\r\n this.groupService.getSelectedGroupInfo()?.groupType as string\r\n )\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => {\r\n this.roles = response;\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error: (error: any) => {\r\n this.handleErrors(error);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Gets the group users by calling searchGroupUsers() from groupService and sets tableData to display the users in a grid.\r\n * @param {string} searchTerm -searchTerm can be user name or email and user is searched based on the email or name.\r\n * @memberof ViewRosterComponent\r\n */\r\n onSearchGroupUsers(searchTerm: string): void {\r\n const payload: SearchUsersPayload = {\r\n payload: {\r\n groupId: this.groupService.getSelectedGroupInfo()?.groupId as string,\r\n searchByNameOrEmail: searchTerm,\r\n roles: this.selectedRoleIds,\r\n },\r\n };\r\n this.groupService\r\n .searchGroupUsers(payload)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => {\r\n this.tableData =\r\n this.groupService.transformUserRolesNameAsString(response);\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error: (error: any) => {\r\n this.handleErrors(error);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Gets the group users by calling getGroupUsersByRoles() from groupService and sets tableData to display the users in a grid.\r\n * @param {ChipOption[] | | CheckboxOption[]} roles\r\n * @memberof ViewRosterComponent\r\n */\r\n onFilterUsersByRoles(roles: ChipOption[] | CheckboxOption[]): void {\r\n this.selectedRoleIds = [];\r\n roles?.forEach((role) => {\r\n this.selectedRoleIds.push(role.id as string);\r\n });\r\n const payload: FilterUsersByRolesPayload = {\r\n payload: {\r\n groupId: this.groupService.getSelectedGroupInfo()?.groupId as string,\r\n roles: this.selectedRoleIds,\r\n },\r\n };\r\n this.groupService\r\n .getGroupUsersByRoles(payload)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => {\r\n this.tableData =\r\n this.groupService.transformUserRolesNameAsString(response);\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error: (error: any) => {\r\n this.handleErrors(error);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Handles the custom errors while retrieving groups users, roles, search users, filter user by roles.\r\n * @param {*} error\r\n * @memberof ViewRosterComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n handleErrors(error: any): void {\r\n const errorCodes = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes) && !error?.error?.status) {\r\n const errorMessage = this.groupService.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 * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof ViewRosterComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<ieeesa-data-table\r\n [tableDataInfo]=\"tableData\"\r\n [columnSchemaInfo]=\"columnSchema\"\r\n [defaultSortedColumn]=\"defaultSortedColumn\"\r\n [defaultColumnSortDirection]=\"defaultColumnSortDirection\"\r\n [searchPlaceHolderText]=\"viewRosterConstants?.searchPlaceholder\"\r\n [tableActions]=\"rosterActions\"\r\n [filters]=\"filters\"\r\n [selectedFilterOptions]=\"roles\"\r\n (selectedFilter)=\"getRoles()\"\r\n (removeFilteredOption)=\"onFilterUsersByRoles($event)\"\r\n (filteredOptions)=\"onFilterUsersByRoles($event)\"\r\n (searchedValue)=\"onSearchGroupUsers($event)\"\r\n></ieeesa-data-table>\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, GroupTypeConfigValue } 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\nimport { ViewRosterComponent } from './components/view-roster/view-roster.component';\r\nimport { EditGroupAndParentInfo } from './models/edit-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 createGroupText = this.constants?.createGroup;\r\n editGroupTexts = this.constants?.editGroup;\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!: GroupTypeConfigValue;\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 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 this.groupsService?.setGroupFunctionType(GroupFunctionType?.CREATE);\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 * Sets the dialog options for edit group modal and calls openModal method.\r\n * @param {EditGroupAndParentInfo} editGroupInfo -editing group and its parent group info to be passed for populating edit group form fields.\r\n * @return -returns nothing\r\n * @memberof GroupsComponent\r\n */\r\n openEditGroupForm(editGroupInfo: EditGroupAndParentInfo): void {\r\n this.groupsService?.setSelectedGroupInfo(\r\n editGroupInfo?.groupInfo,\r\n editGroupInfo?.parentGroupInfo\r\n );\r\n this.groupsService?.setGroupFunctionType(GroupFunctionType?.EDIT);\r\n const dialogOptions = {\r\n heading: editGroupInfo?.groupInfo?.groupName,\r\n isCloseNeeded: true,\r\n componentReference: CreateGroupComponent,\r\n modalType: ModalType.FORM,\r\n };\r\n this.functionType = GroupFunctionType?.EDIT;\r\n this.openModal(dialogOptions, 'ieeesa-create-group');\r\n }\r\n\r\n /**\r\n * Sets the dialog options for users modal and calls openModal method.\r\n * @param {GroupInfo} group\r\n * @memberof GroupsComponent\r\n */\r\n viewRoster(group: GroupInfo): void {\r\n const dialogOptions = {\r\n heading: group?.groupName,\r\n isCloseNeeded: true,\r\n componentReference: ViewRosterComponent,\r\n modalType: ModalType.FORM_AND_CONTENT,\r\n };\r\n this.groupsService.setSelectedGroupInfo(group);\r\n this.functionType = GroupFunctionType.VIEW_ROSTER;\r\n this.groupsService?.setGroupFunctionType(GroupFunctionType?.EDIT);\r\n this.openModal(dialogOptions, 'ieeesa-view-roster');\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: this.functionType === GroupFunctionType.VIEW_ROSTER ? '' : 'auto',\r\n maxWidth:\r\n this.functionType === GroupFunctionType.VIEW_ROSTER ? '90vw' : '',\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 switch (this.functionType) {\r\n case GroupFunctionType?.CREATE:\r\n this.showAlertMessage(\r\n AlertType?.SUCCESS,\r\n this.createGroupText?.message?.success?.submission\r\n );\r\n break;\r\n case GroupFunctionType?.EDIT:\r\n this.showAlertMessage(\r\n AlertType?.SUCCESS,\r\n this.editGroupTexts?.message?.success?.submission\r\n );\r\n break;\r\n default:\r\n break;\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 /**\r\n * Opens the confirmation modal to get user confirmation to delete the selected group.\r\n * @memberof GroupComponent\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.showAlertMessage(\r\n AlertType?.SUCCESS,\r\n groupInfo?.groupName + 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 this.handleErrors(error);\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 /**\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({\r\n id: '',\r\n name: this.viewGroupTexts?.allGroupTypesOption,\r\n });\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 /**\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 /**\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 this.handleErrors(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 = this.groupsService?.getFormattedGroupTypes(\r\n res?.body\r\n );\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 this.handleErrors(error);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Handles alerts for success, error and warning.\r\n * @param {(string | string[])} message -success or error or warning message.\r\n * @param {AlertType} alertType\r\n * @return -returns nothing\r\n * @memberof GroupsComponent\r\n */\r\n showAlertMessage(alertType: AlertType, message: string | string[]): 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 * Captures the server side errors and handles it based on the custom or Http errors.\r\n * @param {HttpErrorResponse} error\r\n * @return -returns nothing\r\n * @memberof GroupsComponent\r\n */\r\n handleErrors(error: HttpErrorResponse): void {\r\n const errorCodes: string[] = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes)) {\r\n const errorMessage: string[] =\r\n this.groupsService?.parseErrorMessage(errorCodes);\r\n this.showAlertMessage(AlertType.ERROR, errorMessage);\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService?.handleError(error);\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 (viewRosterClick)=\"viewRoster($event)\"\r\n (editGroupClick)=\"openEditGroupForm($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\nexport * from './lib/models/edit-group.model';\r\nexport * from './lib/models/form-status.model';\r\nexport * from './lib/models/delete-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","i3","takeUntil","map","constants","i2","screenTexts?.deleteGroup","i2.GroupsService","i4"],"mappings":"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"}
|