@ieeesa-npm/groups 0.7.2 → 0.7.3
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 +51 -10
- package/esm2022/lib/assets/form-validations.mjs +4 -1
- package/esm2022/lib/components/add-user-roster/add-user-roster.component.mjs +259 -22
- package/esm2022/lib/components/edit-user-roles/edit-user-roles.component.mjs +267 -33
- package/esm2022/lib/components/view-roster/view-roster.component.mjs +441 -95
- package/esm2022/lib/groups.component.mjs +3 -3
- package/esm2022/lib/models/add-or-edit-user-group.model.mjs +1 -1
- package/esm2022/lib/models/classification.model.mjs +2 -0
- package/esm2022/lib/models/filter-type.model.mjs +8 -0
- package/esm2022/lib/models/group-types.model.mjs +1 -1
- package/esm2022/lib/models/group-user-info.model.mjs +1 -1
- package/esm2022/lib/models/member-type.model.mjs +2 -0
- package/esm2022/lib/models/organization.model.mjs +2 -0
- package/esm2022/lib/models/roster-type.model.mjs +7 -0
- package/esm2022/lib/models/table-column-schema-user-group.model.mjs +12 -0
- package/esm2022/lib/models/user.model.mjs +1 -1
- package/esm2022/lib/services/groups.service.mjs +83 -14
- package/esm2022/public-api.mjs +7 -1
- package/fesm2022/ieeesa-npm-groups.mjs +1118 -169
- package/fesm2022/ieeesa-npm-groups.mjs.map +1 -1
- package/lib/assets/form-validations.d.ts +2 -0
- package/lib/components/add-user-roster/add-user-roster.component.d.ts +58 -1
- package/lib/components/edit-user-roles/edit-user-roles.component.d.ts +64 -11
- package/lib/components/view-roster/view-roster.component.d.ts +61 -8
- package/lib/models/add-or-edit-user-group.model.d.ts +24 -8
- package/lib/models/classification.model.d.ts +10 -0
- package/lib/models/filter-type.model.d.ts +5 -0
- package/lib/models/group-types.model.d.ts +1 -0
- package/lib/models/group-user-info.model.d.ts +3 -0
- package/lib/models/member-type.model.d.ts +10 -0
- package/lib/models/organization.model.d.ts +9 -0
- package/lib/models/roster-type.model.d.ts +4 -0
- package/lib/models/table-column-schema-user-group.model.d.ts +9 -0
- package/lib/models/user.model.d.ts +20 -5
- package/lib/services/groups.service.d.ts +67 -27
- package/package.json +3 -3
- package/public-api.d.ts +6 -0
|
@@ -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/models/permission-type.model.ts","../../../projects/groups/src/lib/services/group-permissions-map-service.ts","../../../projects/groups/src/lib/services/user-permissions.service.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/edit-user-roles/edit-user-roles.component.ts","../../../projects/groups/src/lib/components/edit-user-roles/edit-user-roles.component.html","../../../projects/groups/src/lib/models/roster-function-type.model.ts","../../../projects/groups/src/lib/components/add-user-roster/add-user-roster.component.ts","../../../projects/groups/src/lib/components/add-user-roster/add-user-roster.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-Z0-9])[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 email: /^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/,\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 FILTER = 'FILTER',\r\n TOGGLE = 'TOGGLE',\r\n EDIT_ROSTER_USER_ROLE = 'EDIT_ROSTER_USER_ROLE',\r\n ADD_USER_TO_ROSTER = 'ADD_USER_TO_ROSTER',\r\n}","/* eslint-disable no-unused-vars */\r\nexport enum PermissionType {\r\n VIEW_GROUPS = 'VIEW_GROUPS',\r\n CREATE_ROOT_GROUP = 'CREATE_ROOT_GROUP',\r\n CREATE_SUBGROUP = 'CREATE_SUBGROUP',\r\n EDIT_GROUP = 'EDIT_GROUP',\r\n DELETE_GROUP = 'DELETE_GROUP',\r\n MANAGE_SYSTEM_USERS = 'MANAGE_SYSTEM_USERS',\r\n VIEW_GROUP_OFFICERS = 'VIEW_GROUP_OFFICERS',\r\n MANAGE_GROUP_OFFICERS = 'MANAGE_GROUP_OFFICERS',\r\n VIEW_GROUP_MEMBERS = 'VIEW_GROUP_MEMBERS',\r\n MANAGE_GROUP_MEMBERS = 'MANAGE_GROUP_MEMBERS',\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { GroupPermission } from '../models/group-permissions.model';\r\nimport { PermissionType } from '../models/permission-type.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class GroupPermissionsMapService {\r\n groupPermissions: GroupPermission[] = [\r\n {\r\n permissionType: PermissionType.VIEW_GROUPS,\r\n permissionName: 'View Groups',\r\n permissionId: 'PERM_NESC_c05ff592-7178-4614-b730-7a7a8828824e',\r\n },\r\n {\r\n permissionType: PermissionType.CREATE_ROOT_GROUP,\r\n permissionName: 'Create Parent Group',\r\n permissionId: 'PERM_NESC_fc522748-e2d4-440c-b6c6-41aaca75a80f',\r\n },\r\n {\r\n permissionType: PermissionType.CREATE_SUBGROUP,\r\n permissionName: 'Create Subgroup',\r\n permissionId: 'PERM_NESC_8f8a203e-d992-4555-9c42-ac6970f2d376',\r\n },\r\n {\r\n permissionType: PermissionType.DELETE_GROUP,\r\n permissionName: 'Delete Group',\r\n permissionId: 'PERM_NESC_008229bf-6a12-4281-88d8-4a2bc9597573',\r\n },\r\n {\r\n permissionType: PermissionType.EDIT_GROUP,\r\n permissionName: 'Edit Group Details',\r\n permissionId: 'PERM_NESC_d64e1f09-d3f7-4f86-a94c-4782a2f60571',\r\n },\r\n {\r\n permissionType: PermissionType.MANAGE_SYSTEM_USERS,\r\n permissionName: 'Manage System Users',\r\n permissionId: 'PERM_NESC_d2c103e9-20c6-4dd5-b320-f7d4d017c574',\r\n },\r\n {\r\n permissionType: PermissionType.VIEW_GROUP_OFFICERS,\r\n permissionName: 'View Group Officers',\r\n permissionId: 'PERM_NESC_f80ac8a3-60b8-4ae4-bedf-ce1d89c54354',\r\n },\r\n {\r\n permissionType: PermissionType.MANAGE_GROUP_OFFICERS,\r\n permissionName: 'Manage Group Officers',\r\n permissionId: 'PERM_NESC_9ddd51db-f481-47ea-946b-e88815973cfb',\r\n },\r\n {\r\n permissionType: PermissionType.VIEW_GROUP_MEMBERS,\r\n permissionName: 'View Group Members',\r\n permissionId: 'PERM_NESC_5a8edb91-a132-4670-90a3-25fb6982307a',\r\n },\r\n {\r\n permissionType: PermissionType.MANAGE_GROUP_MEMBERS,\r\n permissionName: 'Manage Group Member',\r\n permissionId: 'PERM_NESC_1969fecb-6383-446e-9276-b6a7b7265cb4',\r\n },\r\n ];\r\n getGroupPermissions(): GroupPermission[] {\r\n return this.groupPermissions;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { PermissionType } from '../models/permission-type.model';\r\nimport { GroupPermissionsMapService } from './group-permissions-map-service';\r\nimport {\r\n GroupPermission,\r\n UserPermission,\r\n} from '../models/group-permissions.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class UserPermissionsService {\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(private groupPermissionsService: GroupPermissionsMapService) {}\r\n\r\n /**\r\n * Returns access provision for the passed action/feature based on whether the signed in user has appropriate permission.\r\n * @param {PermissionType} permission\r\n * @param {GroupPermission[]} userGroupPermissions\r\n * @return {boolean}\r\n * @memberof UserPermissionsService\r\n */\r\n validateAccessPermission(\r\n permission: PermissionType,\r\n userGroupPermissions: GroupPermission[]\r\n ): boolean {\r\n const isPermitted = userGroupPermissions\r\n ? userGroupPermissions?.some(\r\n ({ permissionType }) => permissionType === permission\r\n )\r\n : false;\r\n return isPermitted;\r\n }\r\n\r\n /**\r\n * Filters signed in user group permissions from entire group permissions.\r\n * @param {UserPermissions[]} userPermissions\r\n * @return {GroupPermissions[]}\r\n * @memberof UserPermissionsService\r\n */\r\n filterUserGroupPermissions(userPermissions: UserPermission[]): GroupPermission[] {\r\n const userGroupPermissions = this.groupPermissionsService\r\n ?.getGroupPermissions()\r\n ?.filter((permission: GroupPermission) =>\r\n userPermissions?.find(\r\n ({ permissionId }) => permission?.permissionId === permissionId\r\n )\r\n );\r\n return userGroupPermissions;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, map, catchError, BehaviorSubject } from 'rxjs';\r\nimport {\r\n CreateGroupPayload,\r\n CreateGroupResponse,\r\n} from '../models/create-group.model';\r\nimport {\r\n BusinessRule,\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\nimport { RosterFunctionType } from '../models/roster-function-type.model';\r\nimport { GroupUserInfo } from '../models/group-user-info.model';\r\nimport {\r\n AddOrEditUserPayload,\r\n AddOrEditGroupUserDetailsResponse,\r\n} from '../models/add-or-edit-user-group.model';\r\nimport { DeleteUserGroupPayload } from '../models/delete-user-group.model';\r\nimport {\r\n GetUserDetailsPayload,\r\n SearchUserByEmailResponse,\r\n} from '../models/add-new-user.model';\r\nimport { GroupPermission } from '../models/group-permissions.model';\r\nimport { PermissionType } from '../models/permission-type.model';\r\nimport { UserPermissionsService } from './user-permissions.service';\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 openModalNotifier = new BehaviorSubject<GroupFunctionType>(\r\n GroupFunctionType.VIEW_ROSTER\r\n );\r\n groupTypeRoles!: CheckboxOption[];\r\n selectedUserInfo!: GroupUserInfo;\r\n canShowMessage = false;\r\n rosterFunctionType!: RosterFunctionType;\r\n userGroupPermissions!: GroupPermission[];\r\n groupTypes!: GroupTypeConfiguration[];\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 private userPermissionsService: UserPermissionsService,\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 this.setLoadedGroupTypes(response?.body);\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 * Deletes a user from group based on the provided information\r\n * @param {groupId} string -groupId of the selected group from where selected user to be deleted.\r\n * @param {userId} Array -user ids of selected users who are deleted from the selected group\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 deleteUsersGroup(\r\n deleteUserGroupPayload: DeleteUserGroupPayload\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n ): Observable<any> {\r\n return this.httpService\r\n .putData(\r\n `${this.apiBaseUrl}/groups/roster/deleteGroupUsers`,\r\n deleteUserGroupPayload\r\n )\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}/groups/config/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 this.setGroupTypeUserRoles(rolesOption);\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 /**\r\n * Returns group user details if email is found, else throws error.\r\n * @param {string} email\r\n * @return {Observable<SearchUserByEmailResponse>}\r\n * @memberof GroupsService\r\n */\r\n getUserByEmail(email: string): Observable<SearchUserByEmailResponse> {\r\n return this.httpService\r\n .getData(`${this.apiBaseUrl}/groups/users/userByEmail/${email}`)\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 user details for the selected group\r\n * @param {GetUserDetailsPayload} payload\r\n * @return {Observable<AddOrEditGroupUserDetailsResponse>}\r\n * @memberof GroupsService\r\n */\r\n getGroupUserDetails(\r\n payload: GetUserDetailsPayload\r\n ): Observable<AddOrEditGroupUserDetailsResponse> {\r\n return this.httpService\r\n .postData(`${this.apiBaseUrl}/groups/roster/userDetails`, payload)\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 add new user form data to the API for the selected group and returns the success or failure response.\r\n * @param {AddOrEditUserPayload} AddOrEditUserPayload\r\n * @return {Observable<AddOrEditGroupUserDetailsResponse>}\r\n * @memberof GroupsService\r\n */\r\n addNewGroupUser(\r\n AddOrEditUserPayload: AddOrEditUserPayload\r\n ): Observable<AddOrEditGroupUserDetailsResponse> {\r\n return this.httpService\r\n .postData(\r\n `${this.apiBaseUrl}/groups/roster/createGroupUserRole`,\r\n AddOrEditUserPayload\r\n )\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 * Sets the loaded group type user roles\r\n * @param {CheckboxOption[]} userRoles\r\n * @memberof GroupsService\r\n */\r\n setGroupTypeUserRoles(userRoles: CheckboxOption[]): void {\r\n this.groupTypeRoles = userRoles;\r\n }\r\n\r\n /**\r\n * Returns the group type user roles.\r\n * @return {CheckboxOption[]}\r\n * @memberof GroupsService\r\n */\r\n getGroupTypeUserRoles(): CheckboxOption[] {\r\n this.groupTypeRoles?.map((option) => (option.checked = false));\r\n return this.groupTypeRoles;\r\n }\r\n\r\n /**\r\n * Sets the selected user info.\r\n * @param {GroupUserInfo} userInfo\r\n * @memberof GroupsService\r\n */\r\n setSelectedUserInfo(userInfo: GroupUserInfo): void {\r\n this.selectedUserInfo = userInfo;\r\n }\r\n\r\n /**\r\n * Returns selected user info.\r\n * @return {GroupUserInfo}\r\n * @memberof GroupsService\r\n */\r\n getSelectedUserInfo(): GroupUserInfo {\r\n return this.selectedUserInfo;\r\n }\r\n\r\n /**\r\n * Updates group user roles to server using HttpService.\r\n * @param {AddOrEditUserPayload} payload\r\n * @return {Observable<AddOrEditGroupUserDetailsResponse>}\r\n * @memberof GroupsService\r\n */\r\n editGroupsUserRole(\r\n payload: AddOrEditUserPayload\r\n ): Observable<AddOrEditGroupUserDetailsResponse> {\r\n return this.httpService\r\n .putData(`${this.apiBaseUrl}/groups/roster/editGroupUserRole`, payload)\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 * Sets roster function type.\r\n * @param {RosterFunctionType} rosterFunctionType\r\n * @memberof GroupsService\r\n */\r\n setRosterFunctionType(rosterFunctionType: RosterFunctionType): void {\r\n this.rosterFunctionType = rosterFunctionType;\r\n }\r\n\r\n /**\r\n * Returns roster function type.\r\n * @return {RosterFunctionType}\r\n * @memberof GroupsService\r\n */\r\n getRosterFunctionType(): RosterFunctionType {\r\n return this.rosterFunctionType;\r\n }\r\n /**\r\n * Gets the groups based on the search by group name or acronym.\r\n * @param {string} searchTerm\r\n * @return {Observable<GetGroupUsersResponse>}\r\n * @memberof GroupsService\r\n */\r\n groupsByNameAcronym(searchTerm: string): Observable<GetGroupResponse> {\r\n return this.httpService\r\n .getData(`${this.apiBaseUrl}/groups/groupsByNameAcronym/${searchTerm}`)\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 * Sets the user group permissions\r\n * @param {GroupPermission[]} userGroupPermissions\r\n * @memberof GroupsService\r\n */\r\n setUserGroupPermissions(userGroupPermissions: GroupPermission[]) {\r\n this.userGroupPermissions = userGroupPermissions;\r\n }\r\n /**\r\n * Returns the user group permissions\r\n * @return {GroupPermission[]}\r\n * @memberof GroupsService\r\n */\r\n getUserGroupPermissions(): GroupPermission[] {\r\n return this.userGroupPermissions;\r\n }\r\n /**\r\n * Validates permission based access for provided feature.\r\n * @param {PermissionType} permissionType\r\n * @return {boolean}\r\n * @memberof GroupsService\r\n */\r\n validateAccess(permissionType: PermissionType): boolean {\r\n return this.userPermissionsService.validateAccessPermission(\r\n permissionType,\r\n this.getUserGroupPermissions()\r\n );\r\n }\r\n /**\r\n * Store the loaded group types.\r\n * @param {GroupTypeConfiguration[]} groupTypes\r\n * @memberof GroupsService\r\n */\r\n setLoadedGroupTypes(groupTypes: GroupTypeConfiguration[]) {\r\n this.groupTypes = groupTypes;\r\n }\r\n /**\r\n * Return the loaded group types.\r\n * @return {GroupTypeConfiguration[]}\r\n * @memberof GroupsService\r\n */\r\n getLoadedGroupTypes(): GroupTypeConfiguration[] {\r\n return this.groupTypes;\r\n }\r\n /**\r\n * Returns the group type configuration Business rule for the selected group.\r\n * @return {(BusinessRule | undefined)}\r\n * @memberof GroupsService\r\n */\r\n getBusinessRuleOfSelectedGroup(): BusinessRule | undefined {\r\n return this.getLoadedGroupTypes()?.find(\r\n (group) => group?.configFieldId === this.getSelectedGroupInfo()?.groupType\r\n )?.configFieldValue?.businessRule;\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 this.groupTypes = this.groupTypes.filter((groupType)=> !groupTypes[groupType.id]?.businessRule?.isAdmin);\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 this.groupTypes = this.groupTypes.filter((groupType)=> groupTypes[groupType.id]?.hierarchy === 0 && !groupTypes[groupType.id]?.businessRule?.isAdmin);\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 ViewEncapsulation,\r\n} from '@angular/core';\r\nimport {\r\n MenuComponent,\r\n Menu,\r\n IconButtonComponent,\r\n IconButton,\r\n TextTruncatedDirective,\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\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { GroupsService } from '../../services/groups.service';\r\nimport { GroupFunctionType } from '../../models/group-function-type.model';\r\nimport { PermissionType } from '../../models/permission-type.model';\r\nimport { GroupPermission } from '../../models/group-permissions.model';\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 clickedNode.item.noOfChildren = children.length;\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 MatTooltipModule,\r\n TextTruncatedDirective,\r\n ],\r\n templateUrl: './tree-view.component.html',\r\n styleUrls: ['./tree-view.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\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 editGroupAndParentGroupInfo!: EditGroupAndParentInfo;\r\n permissionType = PermissionType;\r\n\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 @Input()\r\n userGroupPermissions!: GroupPermission[];\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(\r\n // eslint-disable-next-line no-unused-vars\r\n public database: Groups,\r\n // eslint-disable-next-line no-unused-vars\r\n public elementRef: ElementRef,\r\n // eslint-disable-next-line no-unused-vars\r\n public groupsService: GroupsService // eslint-disable-next-line no-empty-function\r\n ) {}\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.groupsService.setGroupFunctionType(GroupFunctionType.TOGGLE);\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 if (\r\n this.dataSource &&\r\n this.groupsService.getGroupFunctionType() === GroupFunctionType.CREATE\r\n ) {\r\n this.parentGroupsInfo?.forEach((parentGroupNode) => {\r\n if (\r\n this.dataSource?.data?.findIndex(\r\n (node) => node?.item?.groupId === parentGroupNode?.groupId\r\n ) === -1\r\n ) {\r\n const newGroupNode = new GroupNode(\r\n parentGroupNode,\r\n 0,\r\n this.database.isExpandable(parentGroupNode)\r\n );\r\n const groupNodesReference = this.dataSource?.data;\r\n groupNodesReference?.push(newGroupNode);\r\n this.dataSource.data = groupNodesReference;\r\n }\r\n });\r\n } else if (\r\n this.groupsService.getGroupFunctionType() === GroupFunctionType.EDIT\r\n ) {\r\n this.editGroup(this.parentGroupsInfo);\r\n } else {\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 /**\r\n * Sets the updated node information\r\n * @param {GroupInfo[]} groupsInfo\r\n * @memberof TreeViewComponent\r\n */\r\n editGroup(groupsInfo: GroupInfo[]) {\r\n const groupNodeReference = this.dataSource?.data;\r\n const editedNode = groupsInfo?.find(\r\n (node) =>\r\n node?.groupId === this.editGroupAndParentGroupInfo?.groupInfo?.groupId\r\n );\r\n groupNodeReference?.forEach((node) => {\r\n if (\r\n node?.item?.groupId ===\r\n this.editGroupAndParentGroupInfo?.groupInfo?.groupId\r\n ) {\r\n const noOfChildrenReference = node.item.noOfChildren;\r\n node.item = editedNode as GroupInfo;\r\n node.item.noOfChildren = noOfChildrenReference;\r\n node.expandable = this.database.isExpandable(node?.item);\r\n if (node.item.hasChildren && this.treeControl.isExpanded(node)) {\r\n this.treeControl.toggle(node);\r\n }\r\n }\r\n });\r\n this.dataSource.data = groupNodeReference;\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 const groupNodesReference = this.dataSource?.data;\r\n if (\r\n this.groupsService.getGroupFunctionType() === GroupFunctionType.CREATE\r\n ) {\r\n if (!this.selectedGroup?.item?.hasChildren) {\r\n this.selectedGroup.item.hasChildren = true;\r\n const groupParentNode = new GroupNode(\r\n this.selectedGroup.item,\r\n this.selectedGroup.level,\r\n true\r\n );\r\n groupNodesReference.splice(\r\n groupNodesReference.indexOf(this.selectedGroup),\r\n 1,\r\n groupParentNode\r\n );\r\n this.treeControl.expand(groupParentNode);\r\n }\r\n if (this.treeControl.isExpanded(this.selectedGroup)) {\r\n const children = this.database.getChildGroupsInfo();\r\n children?.forEach((groupNode) => {\r\n if (\r\n this.dataSource?.data?.findIndex(\r\n (node) => node?.item?.groupId === groupNode?.groupId\r\n ) === -1\r\n ) {\r\n const newGroupNode = new GroupNode(\r\n groupNode,\r\n this.selectedGroup?.level + 1,\r\n this.database?.isExpandable(groupNode)\r\n );\r\n const groupNodesReference = this.dataSource?.data;\r\n groupNodesReference.forEach((node) => {\r\n if (node.item.groupId === this.selectedGroup.item.groupId) {\r\n node.item.noOfChildren = children.length;\r\n }\r\n });\r\n groupNodesReference.splice(\r\n groupNodesReference.indexOf(this.selectedGroup) + 1,\r\n 0,\r\n newGroupNode\r\n );\r\n this.dataSource.data = groupNodesReference;\r\n }\r\n });\r\n }\r\n } else if (\r\n this.groupsService.getGroupFunctionType() === GroupFunctionType.EDIT\r\n ) {\r\n this.editGroup(this.childGroupsInfo);\r\n } else if (\r\n this.groupsService.getGroupFunctionType() === GroupFunctionType.TOGGLE\r\n ) {\r\n this.treeControl?.toggle(this.selectedGroup);\r\n }\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 deletedGroupIndex = this.dataSource.data.findIndex(\r\n (node) => node.item.groupId === deletedGroupId\r\n );\r\n const deletedGroup = this.dataSource.data.at(deletedGroupIndex);\r\n const dataSourceReference = this.dataSource.data;\r\n if (deletedGroupIndex) {\r\n if (deletedGroup?.item.groupParentId !== null) {\r\n const deletedParentGroupIndex = this.dataSource.data.findIndex(\r\n (node) => node.item.groupId === deletedGroup?.item.groupParentId\r\n );\r\n const deletedParentGroup = this.dataSource.data.at(\r\n deletedParentGroupIndex\r\n );\r\n if (deletedParentGroup && deletedParentGroup.item.noOfChildren) {\r\n deletedParentGroup.item.noOfChildren =\r\n deletedParentGroup.item.noOfChildren - 1;\r\n if (deletedParentGroup.item.noOfChildren === 0) {\r\n deletedParentGroup.item.hasChildren = false;\r\n const newNode = new GroupNode(\r\n deletedParentGroup.item,\r\n deletedParentGroup.level,\r\n false\r\n );\r\n dataSourceReference.splice(deletedGroupIndex - 1, 2, newNode);\r\n } else {\r\n dataSourceReference.splice(deletedGroupIndex, 1);\r\n }\r\n }\r\n } else {\r\n dataSourceReference.splice(deletedGroupIndex, 1);\r\n }\r\n }\r\n this.dataSource.data = dataSourceReference;\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.selectedGroup = 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 this.editGroupAndParentGroupInfo = {\r\n groupInfo: group?.item,\r\n parentGroupInfo: editGroupParentInfo,\r\n };\r\n this.editGroupClick.emit(this.editGroupAndParentGroupInfo);\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 const isAdminGroupType = group?.item?.groupTypeInfo?.businessRule?.isAdmin;\r\n this.menuItems?.forEach((e) => {\r\n e.isToolTipNeeded = false;\r\n if (\r\n (e?.id === GroupAction.VIEW_ROSTER &&\r\n ((isAdminGroupType &&\r\n this.groupsService.validateAccess(\r\n this.permissionType.MANAGE_SYSTEM_USERS\r\n )) ||\r\n (!isAdminGroupType &&\r\n (this.groupsService.validateAccess(\r\n this.permissionType.VIEW_GROUP_OFFICERS\r\n ) ||\r\n this.groupsService.validateAccess(\r\n this.permissionType.MANAGE_GROUP_OFFICERS\r\n ) ||\r\n this.groupsService.validateAccess(\r\n this.permissionType.VIEW_GROUP_MEMBERS\r\n ) ||\r\n this.groupsService.validateAccess(\r\n this.permissionType.MANAGE_GROUP_MEMBERS\r\n ))))) ||\r\n (e?.id === GroupAction.EDIT_GROUP &&\r\n !isAdminGroupType &&\r\n this.groupsService.validateAccess(this.permissionType.EDIT_GROUP)) ||\r\n (e?.id === GroupAction.DELETE_GROUP &&\r\n !isAdminGroupType &&\r\n this.groupsService.validateAccess(this.permissionType.DELETE_GROUP) &&\r\n !group?.item?.hasChildren) ||\r\n (e?.id === GroupAction.CREATE_SUB_GROUP &&\r\n group?.item?.groupTypeInfo?.businessRule?.allowSubGroup &&\r\n this.groupsService.validateAccess(\r\n this.permissionType.CREATE_SUBGROUP\r\n ) &&\r\n !isAdminGroupType)\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 class=\"ieeesa-body-md-16\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex gap-lg-3 my-0 gap-0 gap-sm-0 gap-md-2\"\r\n [ngStyle]=\"getBoxShadow(node?.item?.groupTypeInfo?.legendColor)\"\r\n >\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n role=\"gridcell\"\r\n ></div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupNodeOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\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 class=\"ieeesa-body-md-16 ieeesa-tree__parent-node-wrapper\"\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 gap-lg-3 my-0 gap-0 gap-sm-0 gap-md-2\"\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 ieeesaGroupNodeOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupNodeOutlet let-node>\r\n <ng-container\r\n *ngTemplateOutlet=\"ieeesaGroupInfoOutlet; context: { $implicit: node }\"\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 ieeesa-tree__group-actions\"\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)=\"onGroupActionsClick($event); handleGroupActions(node)\"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n </ng-template>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"ieeesa-tree__group-info-wrapper\">\r\n <div\r\n class=\"ieeesa-tree__group-info d-flex flex-column flex-sm-column flex-md-column 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\r\n class=\"ieeesa-tree__node-group-name ieeesa-headline-sm-26\"\r\n [matTooltip]=\"node?.item?.groupName\"\r\n ieeesaTextTruncated\r\n role=\"gridcell\"\r\n >\r\n {{ node?.item?.groupName }}\r\n </p>\r\n <p\r\n class=\"ieeesa-tree__node-group-acronym ieeesa-title-lg-24\"\r\n [matTooltip]=\"node?.item?.groupAcronym\"\r\n ieeesaTextTruncated\r\n role=\"gridcell\"\r\n >\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 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 { GroupsService } from '../../services/groups.service';\r\nimport {\r\n AlignType,\r\n CheckboxOption,\r\n DynamicFormComponent,\r\n FormControlType,\r\n FormGrid,\r\n FormModel,\r\n} from '@ieeesa-npm/presentation';\r\nimport * as screenTexts from '../../assets/constants.json';\r\nimport { FormGroup, Validators } from '@angular/forms';\r\nimport { GroupUserInfo } from '../../models/group-user-info.model';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { FormStatus } from '../../models/form-status.model';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport {\r\n AlertType,\r\n AlertsService,\r\n GlobalErrorHandlerService,\r\n} from '@ieeesa-npm/utility';\r\nimport { AddOrEditUserPayload } from '../../models/add-or-edit-user-group.model';\r\n\r\n/**\r\n * Component implements the functionalities to edit user roles for system user.\r\n * @class EditUserRolesComponent\r\n * @implements {OnInit}\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n selector: 'ieeesa-edit-user-roles',\r\n standalone: true,\r\n imports: [CommonModule, DynamicFormComponent],\r\n templateUrl: './edit-user-roles.component.html',\r\n styleUrls: ['./edit-user-roles.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class EditUserRolesComponent implements OnInit, OnDestroy {\r\n destroy$ = new Subject<boolean>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = screenTexts;\r\n addUserRosterTexts = this.constants?.addUserRoster;\r\n leftButtonLabel = this.addUserRosterTexts?.label?.leftButtonLabel;\r\n rightButtonLabel = this.addUserRosterTexts?.label?.saveButtonLabel;\r\n isSubmitButtonDisabled = true;\r\n colWidth: FormGrid = { xs: 12, xl: 12, sm: 12, md: 12, lg: 12 };\r\n editUserRoleFormGroup!: FormModel;\r\n form!: FormGroup;\r\n userRoles!: CheckboxOption[];\r\n selectedUserRoleIds: string[] = [];\r\n selectedUserInfo!: GroupUserInfo;\r\n actionButtonAlign = AlignType.LEFT;\r\n @Output() submitFormResponse = new EventEmitter();\r\n @Output() formCancel = new EventEmitter();\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 public 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 edit user role required information and form group array.\r\n * @return -returns nothing\r\n * @memberof EditUserRolesComponent\r\n */\r\n ngOnInit(): void {\r\n this.getSelectedUserDetails();\r\n this.editUserRolesFormGroup();\r\n }\r\n\r\n /**\r\n * Gets required information for the edit user role component.\r\n * @return -returns nothing\r\n * @memberof EditUserRolesComponent\r\n */\r\n getSelectedUserDetails(): void {\r\n this.selectedUserInfo = this.groupsService?.getSelectedUserInfo();\r\n const selectedUserRoleNames = this.selectedUserInfo?.role\r\n ?.split(',')\r\n .map((role) => role?.trim());\r\n this.userRoles = this.groupsService?.getGroupTypeUserRoles();\r\n this.userRoles?.forEach((role) => {\r\n if (selectedUserRoleNames?.includes(role?.name as string)) {\r\n role.checked = true;\r\n this.selectedUserRoleIds?.push(role?.id as string);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Initialize the edit user role form group array.\r\n * @memberof EditUserRolesComponent\r\n */\r\n editUserRolesFormGroup() {\r\n this.editUserRoleFormGroup = {\r\n formGroup: [\r\n {\r\n legend: '',\r\n controls: [\r\n {\r\n type: FormControlType?.TEXT_AREA,\r\n label: this.addUserRosterTexts?.label?.email + '*',\r\n controlName: 'email',\r\n value: this.selectedUserInfo?.email,\r\n ariaLabel: this.addUserRosterTexts?.label?.ariaLabel?.email,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById?.email,\r\n isReadonly: true,\r\n ariaMultiline: false,\r\n isResize: true,\r\n },\r\n {\r\n type: FormControlType.TEXT_AREA,\r\n label: this.addUserRosterTexts?.label?.fullName + '*',\r\n controlName: 'fullName',\r\n value: this.selectedUserInfo?.name,\r\n ariaLabel: this.addUserRosterTexts?.label?.ariaLabel?.fullName,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById?.fullName,\r\n isReadonly: true,\r\n ariaMultiline: false,\r\n isResize: true,\r\n },\r\n {\r\n type: FormControlType.CHECKBOX,\r\n label: this.addUserRosterTexts?.label?.role + '*',\r\n controlName: 'roles',\r\n checkboxOptions: this.userRoles,\r\n minSelectionRequired: 1,\r\n ariaLabel: this.addUserRosterTexts?.label?.ariaLabel?.role,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById?.role,\r\n supportMessage: this.addUserRosterTexts?.supportText?.role,\r\n requiredErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.required,\r\n validation: [Validators.required],\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n }\r\n\r\n /**\r\n * Handles user role selection in edit user roles form.\r\n * @param {CheckboxOption} event\r\n * @memberof EditUserRolesComponent\r\n */\r\n onUserRoleSelection(event: CheckboxOption): void {\r\n if (event?.checked) {\r\n this.selectedUserRoleIds?.push(event?.id as string);\r\n } else {\r\n this.selectedUserRoleIds = this.selectedUserRoleIds?.filter(\r\n (id) => id !== event?.id\r\n );\r\n }\r\n this.isSubmitButtonDisabled = this.selectedUserRoleIds?.length === 0;\r\n }\r\n\r\n /**\r\n * Update roles of user on form submission.\r\n * @param {FormGroup[]} form\r\n * @memberof EditUserRolesComponent\r\n */\r\n onEditUserRoleFormSubmit(form: FormGroup[]): void {\r\n form[0]?.markAllAsTouched();\r\n if (form[0].status === FormStatus?.VALID) {\r\n const AddOrEditUserPayload: AddOrEditUserPayload = {\r\n payload: {\r\n email: this.selectedUserInfo?.email,\r\n userId: this.selectedUserInfo?.userId,\r\n roles: this.selectedUserRoleIds,\r\n groupId: this.groupsService?.selectedGroupInfo?.groupId as string,\r\n },\r\n };\r\n this.groupsService\r\n .editGroupsUserRole(AddOrEditUserPayload)\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 /**\r\n * Emits form cancel event.\r\n * @memberof EditUserRolesComponent\r\n */\r\n onEditUserRoleCancelled(): void {\r\n this.formCancel?.emit();\r\n }\r\n\r\n /**\r\n * Get form reference.\r\n * @param {FormGroup[]} form\r\n * @memberof EditUserRolesComponent\r\n */\r\n getFormGroupReference(form: FormGroup[]) {\r\n this.form = form[0];\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 EditUserRolesComponent\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.groupsService?.parseErrorMessage(errorCodes);\r\n this.alertService?.showMessage({\r\n status: 'custom',\r\n message: errorMessage,\r\n alertType: AlertType?.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService?.handleError(error);\r\n }\r\n }\r\n\r\n /**\r\n * 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 [leftButtonLabel]=\"leftButtonLabel\"\r\n [rightButtonLabel]=\"rightButtonLabel\"\r\n [isLegendVisible]=\"false\"\r\n [isSubmitButtonDisabled]=\"isSubmitButtonDisabled\"\r\n [colWidth]=\"colWidth\"\r\n [actionButtonAlign]=\"actionButtonAlign\"\r\n [formGroups]=\"editUserRoleFormGroup\"\r\n [isLeftButtonNeeded]=\"true\"\r\n (formSubmit)=\"onEditUserRoleFormSubmit($event)\"\r\n (formLeftButtonClicked)=\"onEditUserRoleCancelled()\"\r\n (formCheckboxSelection)=\"onUserRoleSelection($event)\"\r\n (formGroupsReference)=\"getFormGroupReference($event)\"\r\n></ieeesa-dynamic-form>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum RosterFunctionType {\r\n EDIT_ROSTER_USER_ROLE = 'EDIT_ROSTER_USER_ROLE',\r\n ADD_USER_TO_ROSTER = 'ADD_USER_TO_ROSTER',\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 { FormGroup, Validators } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport {\r\n AlertsService,\r\n AlertType,\r\n GlobalErrorHandlerService,\r\n} from '@ieeesa-npm/utility';\r\nimport {\r\n DynamicFormComponent,\r\n FormGrid,\r\n FormModel,\r\n FormControlType,\r\n AlignType,\r\n SearchType,\r\n CheckboxOption,\r\n} from '@ieeesa-npm/presentation';\r\nimport * as screenTexts from '../../assets/constants.json';\r\nimport { GroupsValidationPatterns } from '../../assets/form-validations';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { FormStatus } from '../../models/form-status.model';\r\nimport { GroupsService } from '../../services/groups.service';\r\nimport { AddOrEditUserPayload } from '../../models/add-or-edit-user-group.model';\r\nimport { UserInfo } from '../../models/user-info.model';\r\n\r\n/**\r\n * Component implements the view and functionalities to add group users to roster.\r\n * @export\r\n * @class AddUserRosterComponent\r\n * @implements {OnInit}\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n selector: 'ieeesa-add-user-roster',\r\n standalone: true,\r\n imports: [CommonModule, DynamicFormComponent, MatDialogModule],\r\n templateUrl: './add-user-roster.component.html',\r\n styleUrls: ['./add-user-roster.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [AlertsService],\r\n})\r\nexport class AddUserRosterComponent implements OnInit, OnDestroy {\r\n destroy$ = new Subject<boolean>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = screenTexts;\r\n addUserRosterTexts = this.constants?.addUserRoster;\r\n leftButtonLabel = this.addUserRosterTexts?.label?.leftButtonLabel;\r\n rightButtonLabel = this.addUserRosterTexts?.label?.rightButtonLabel;\r\n isSubmitButtonDisabled = false;\r\n colWidth: FormGrid = { xs: 12, xl: 12, sm: 12, md: 12, lg: 12 };\r\n searchUserFormGroup!: FormModel;\r\n addUserFormGroup!: FormModel;\r\n actionButtonAlign = AlignType.LEFT;\r\n addUserFormGroupRef!: FormGroup;\r\n isSearchUserForm = true;\r\n userRoles: CheckboxOption[] = [];\r\n selectedUserRoles: string[] = [];\r\n userInfo!: UserInfo;\r\n isAddUserFormEmailSearch = false;\r\n @Output() submitFormResponse = new EventEmitter();\r\n @Output() formCancel = new EventEmitter();\r\n\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 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 * Initializes user roles and searchUserFormGroup.\r\n * @memberof AddUserRosterComponent\r\n */\r\n ngOnInit(): void {\r\n this.userRoles = this.groupService.getGroupTypeUserRoles();\r\n this.createSearchUserFormGroup();\r\n }\r\n\r\n /**\r\n * Creates search user form group\r\n * @memberof AddUserRosterComponent\r\n */\r\n createSearchUserFormGroup(): void {\r\n this.searchUserFormGroup = {\r\n formGroup: [\r\n {\r\n legend: '',\r\n controls: [\r\n {\r\n type: FormControlType.INPUT,\r\n label: this.addUserRosterTexts?.label?.email + '*',\r\n controlName: 'emailAddress',\r\n requiredErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.required,\r\n isEmail: true,\r\n supportMessage:\r\n this.addUserRosterTexts?.supportText?.emailAddress,\r\n patternErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.pattern?.email,\r\n validation: [\r\n Validators.required,\r\n Validators.pattern(GroupsValidationPatterns.email),\r\n ],\r\n ariaLabel: this.addUserRosterTexts?.label?.ariaLabel?.email,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById?.email,\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n }\r\n\r\n /**\r\n * Checks form validity and searches the user by entered email.\r\n * @param {FormGroup[]} form\r\n * @memberof AddUserRosterComponent\r\n */\r\n onSearchUserFormSubmit(form: FormGroup[]): void {\r\n this.isAddUserFormEmailSearch = false;\r\n if (form[0]?.status === FormStatus.VALID) {\r\n this.searchUserByEmail(form[0].getRawValue()?.emailAddress);\r\n }\r\n }\r\n\r\n /**\r\n * Searches the user by entered email and gets the user details when the email id is found.\r\n * @param {string} email\r\n * @memberof AddUserRosterComponent\r\n */\r\n searchUserByEmail(email: string): void {\r\n this.groupService\r\n .getUserByEmail(email)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n if (res?.status) {\r\n this.userInfo = res?.body;\r\n this.validateUserExistence();\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 * Validates whether the user is exists in the selected group and then creates add user form when the user does not exist in the selected group.\r\n * @memberof AddUserRosterComponent\r\n */\r\n validateUserExistence(): void {\r\n const payload = {\r\n payload: {\r\n groupId: this.groupService.getSelectedGroupInfo()?.groupId as string,\r\n userId: this.userInfo?.userId,\r\n },\r\n };\r\n this.groupService\r\n .getGroupUserDetails(payload)\r\n .pipe(takeUntil(this.destroy$))\r\n ?.subscribe({\r\n next: () => {\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n message: this.constants?.errors?.['1022'],\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error: (error: any) => {\r\n const errorCodes = error?.error?.body?.errorCodes;\r\n if (errorCodes?.includes('1026')) {\r\n this.isSearchUserForm = false;\r\n this.rightButtonLabel =\r\n this.addUserRosterTexts?.label?.saveButtonLabel;\r\n if (!this.isAddUserFormEmailSearch) {\r\n this.selectedUserRoles = [];\r\n this.isSubmitButtonDisabled = true;\r\n this.addUserFormGroup = {\r\n formGroup: [\r\n {\r\n legend: '',\r\n controls: [\r\n {\r\n type: FormControlType.SEARCH,\r\n label: this.addUserRosterTexts?.label?.email + '*',\r\n controlName: 'emailSearch',\r\n value: this.userInfo?.email,\r\n searchType: SearchType.ON_CLICK,\r\n validation: [\r\n Validators.required,\r\n Validators.pattern(GroupsValidationPatterns.email),\r\n ],\r\n supportMessage:\r\n this.addUserRosterTexts?.supportText?.emailAddress,\r\n requiredErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.required,\r\n patternErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.pattern\r\n ?.email,\r\n ariaLabel:\r\n this.addUserRosterTexts?.label?.ariaLabel?.email,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById\r\n ?.email,\r\n },\r\n {\r\n type: FormControlType.TEXT_AREA,\r\n label: this.addUserRosterTexts?.label?.fullName + '*',\r\n controlName: 'fullName',\r\n value: this.userInfo?.name,\r\n validation: [Validators.required],\r\n requiredErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.required,\r\n isReadonly: true,\r\n ariaMultiline: false,\r\n ariaLabel:\r\n this.addUserRosterTexts?.label?.ariaLabel?.fullName,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById\r\n ?.fullName,\r\n },\r\n {\r\n type: FormControlType.CHECKBOX,\r\n label: this.addUserRosterTexts?.label?.role + '*',\r\n controlName: 'roles',\r\n checkboxOptions: this.userRoles,\r\n minSelectionRequired: 1,\r\n ariaLabel:\r\n this.addUserRosterTexts?.label?.ariaLabel?.role,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById\r\n ?.role,\r\n supportMessage:\r\n this.addUserRosterTexts?.supportText?.role,\r\n requiredErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.required,\r\n validation: [Validators.required],\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n } else {\r\n this.addUserFormGroupRef\r\n ?.get('emailSearch')\r\n ?.setValue(this.userInfo?.email);\r\n this.addUserFormGroupRef\r\n ?.get('fullName')\r\n ?.setValue(this.userInfo?.name);\r\n this.isSubmitButtonDisabled =\r\n this.selectedUserRoles?.length === 0;\r\n }\r\n } else this.handleErrors(error);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Handles add user form email search\r\n * @param {string} email\r\n * @memberof AddUserRosterComponent\r\n */\r\n formSearchApply(email: string): void {\r\n this.isAddUserFormEmailSearch = true;\r\n if (email.trim()) this.searchUserByEmail(email.trim());\r\n else {\r\n this.userInfo.name = '';\r\n this.addUserFormGroupRef?.get('fullName')?.setValue('');\r\n this.isSubmitButtonDisabled = true;\r\n }\r\n }\r\n\r\n /**\r\n * Assigns role to user on form submission.\r\n * @param {FormGroup[]} form\r\n * @memberof AddUserRosterComponent\r\n */\r\n onAddUserFormSubmit(form: FormGroup[]): void {\r\n form[0]?.markAllAsTouched();\r\n if (form[0].status === FormStatus.VALID) {\r\n const payload: AddOrEditUserPayload = {\r\n payload: {\r\n email: this.userInfo?.email,\r\n roles: this.selectedUserRoles,\r\n userId: this.userInfo?.userId,\r\n groupId: this.groupService.selectedGroupInfo?.groupId as string,\r\n },\r\n };\r\n\r\n this.groupService\r\n .addNewGroupUser(payload)\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 // 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 /**\r\n * Get add user form group reference.\r\n * @param {FormGroup[]} form\r\n * @memberof AddUserRosterComponent\r\n */\r\n getAddUserFormGroupRef(form: FormGroup[]) {\r\n this.addUserFormGroupRef = form[0];\r\n }\r\n\r\n /**\r\n * Handles user role selection in add user form.\r\n * @param {CheckboxOption} event\r\n * @memberof AddUserRosterComponent\r\n */\r\n onUserRoleSelection(event: CheckboxOption): void {\r\n if (event?.checked) {\r\n this.selectedUserRoles?.push(event.id as string);\r\n } else {\r\n this.selectedUserRoles = this.selectedUserRoles.filter(\r\n (value) => value !== event.id\r\n );\r\n }\r\n this.isSubmitButtonDisabled = this.selectedUserRoles?.length === 0;\r\n }\r\n\r\n /**\r\n * Emits form cancel event.\r\n * @memberof AddUserRosterComponent\r\n */\r\n onFormCancel(): void {\r\n this.formCancel.emit();\r\n }\r\n\r\n /**\r\n * Handles the custom errors while searching user by email, validating user existence and adding new user to roster.\r\n * @param {*} error\r\n * @memberof AddUserRosterComponent\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 AddUserRosterComponent\r\n */\r\n ngOnDestroy(): void {\r\n if (this.destroy$) {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n }\r\n}\r\n","<ieeesa-dynamic-form\r\n *ngIf=\"searchUserFormGroup && isSearchUserForm\"\r\n class=\"ieeesa-search-user-form\"\r\n [leftButtonLabel]=\"leftButtonLabel\"\r\n [rightButtonLabel]=\"rightButtonLabel\"\r\n [isLegendVisible]=\"false\"\r\n [colWidth]=\"colWidth\"\r\n [actionButtonAlign]=\"actionButtonAlign\"\r\n [formGroups]=\"searchUserFormGroup\"\r\n [isLeftButtonNeeded]=\"true\"\r\n (formSubmit)=\"onSearchUserFormSubmit($event)\"\r\n (formLeftButtonClicked)=\"onFormCancel()\"\r\n></ieeesa-dynamic-form>\r\n\r\n<ieeesa-dynamic-form\r\n *ngIf=\"addUserFormGroup && !isSearchUserForm\"\r\n class=\"ieeesa-add-user-form\"\r\n [leftButtonLabel]=\"leftButtonLabel\"\r\n [rightButtonLabel]=\"rightButtonLabel\"\r\n [isLegendVisible]=\"false\"\r\n [isSubmitButtonDisabled]=\"isSubmitButtonDisabled\"\r\n [colWidth]=\"colWidth\"\r\n [actionButtonAlign]=\"actionButtonAlign\"\r\n [formGroups]=\"addUserFormGroup\"\r\n [isLeftButtonNeeded]=\"true\"\r\n (formSubmit)=\"onAddUserFormSubmit($event)\"\r\n (formSearchApply)=\"formSearchApply($event)\"\r\n (formLeftButtonClicked)=\"onFormCancel()\"\r\n (formGroupsReference)=\"getAddUserFormGroupRef($event)\"\r\n (formCheckboxSelection)=\"onUserRoleSelection($event)\"\r\n></ieeesa-dynamic-form>\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\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 { MatDialog, MatDialogModule } from '@angular/material/dialog';\r\nimport {\r\n TableColumnSchema,\r\n TableColumnType,\r\n TableActions,\r\n CheckboxOption,\r\n TableColumnSortDirection,\r\n ChipsType,\r\n AlignType,\r\n ModalConfirmationComponent,\r\n ChipOption,\r\n DataTableComponent,\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\nimport { DeleteUserGroupPayload } from '../../models/delete-user-group.model';\r\nimport { GroupFunctionType } from '../../models/group-function-type.model';\r\nimport { RosterFunctionType } from '../../models/roster-function-type.model';\r\nimport { GroupUserInfo } from '../../models/group-user-info.model';\r\nimport { PermissionType } from '../../models/permission-type.model';\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, MatDialogModule],\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 AfterViewInit, 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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n dialogRef: any;\r\n alignmentType = AlignType;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n filters: ChipOption[] = [\r\n {\r\n id: 1,\r\n name: this.viewRosterConstants?.filterByRole,\r\n checked: false,\r\n chipType: ChipsType.TOGGLE,\r\n },\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 selectedRoles!: ChipOption[] | CheckboxOption[];\r\n roles: CheckboxOption[] = [];\r\n rosterActions: TableActions = {\r\n isSearchNeeded: true,\r\n isFilterNeeded: true,\r\n isAddNeeded: false,\r\n isDeleteNeeded: false,\r\n isEditNeeded: false,\r\n };\r\n defaultSortedColumn = this.columnSchema[1].columnDef;\r\n defaultColumnSortDirection: SortDirection =\r\n TableColumnSortDirection.ASCENDING;\r\n searchTerm!: string;\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 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 cdr: ChangeDetectorRef,\r\n // eslint-disable-next-line no-unused-vars\r\n private globalErrorHandlerService: GlobalErrorHandlerService\r\n ) {\r\n this.getRoles();\r\n this.getGroupUsersAndInitializeTableView();\r\n this.rosterActions.isAddNeeded = this.getManageRosterActionsPermission();\r\n this.rosterActions.isEditNeeded = this.getManageRosterActionsPermission();\r\n this.rosterActions.isDeleteNeeded = this.getManageRosterActionsPermission();\r\n }\r\n /**\r\n * Show add new user success message when canShowMessage is set true\r\n * @memberof ViewRosterComponent\r\n */\r\n ngAfterViewInit(): void {\r\n if (this.groupService?.canShowMessage) {\r\n this.groupService.canShowMessage = false;\r\n if (\r\n this.groupService?.rosterFunctionType ===\r\n RosterFunctionType?.ADD_USER_TO_ROSTER\r\n ) {\r\n this.showAlertMessage(\r\n this.constants?.addUserRoster?.message?.success?.submission,\r\n AlertType.SUCCESS\r\n );\r\n } else if (\r\n this.groupService?.rosterFunctionType ===\r\n RosterFunctionType?.EDIT_ROSTER_USER_ROLE\r\n ) {\r\n this.showAlertMessage(\r\n this.constants?.editUserRoles?.message?.success?.submission,\r\n AlertType.SUCCESS\r\n );\r\n }\r\n }\r\n }\r\n /**\r\n * Hides or shows roster add user, edit user and delete user actions based on user group permissions.\r\n * @return {boolean}\r\n * @memberof ViewRosterComponent\r\n */\r\n getManageRosterActionsPermission(): boolean {\r\n return (\r\n this.groupService.validateAccess(PermissionType.MANAGE_SYSTEM_USERS) ||\r\n this.groupService.validateAccess(PermissionType.MANAGE_GROUP_OFFICERS) ||\r\n this.groupService.validateAccess(PermissionType.MANAGE_GROUP_MEMBERS)\r\n );\r\n }\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 this.cdr.detectChanges();\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error: (error: any) => {\r\n const errorCodes = error?.error?.body?.errorCodes;\r\n if (errorCodes?.includes('1026')) {\r\n this.tableData = [];\r\n this.cdr.detectChanges();\r\n } else 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 this.searchTerm = searchTerm?.trim();\r\n if (!this.searchTerm) {\r\n if (this.selectedRoleIds?.length === 0) {\r\n this.getGroupUsersAndInitializeTableView();\r\n return;\r\n } else if (this.selectedRoleIds?.length > 0) {\r\n this.onFilterUsersByRoles(this.selectedRoles);\r\n return;\r\n }\r\n }\r\n if (!this.searchTerm) return;\r\n const payload: SearchUsersPayload = {\r\n payload: {\r\n groupId: this.groupService.getSelectedGroupInfo()?.groupId as string,\r\n searchByNameOrEmail: this.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 this.cdr.detectChanges();\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error: (error: any) => {\r\n const errorCodes = error?.error?.body?.errorCodes;\r\n const noUsersFoundErrorCodes = ['1029', '1030', '1031', '1032'];\r\n if (errorCodes && noUsersFoundErrorCodes.includes(errorCodes[0])) {\r\n this.tableData = [];\r\n this.cdr.detectChanges();\r\n } else 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 this.selectedRoles = roles;\r\n if (roles?.length === 0 && !this.searchTerm) {\r\n this.getGroupUsersAndInitializeTableView();\r\n return;\r\n } else if (this.searchTerm) {\r\n this.onSearchGroupUsers(this.searchTerm);\r\n return;\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 this.cdr.detectChanges();\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, no-unused-vars, @typescript-eslint/no-unused-vars\r\n error: (error: any) => {\r\n const errorCodes = error?.error?.body?.errorCodes;\r\n if (errorCodes?.includes('1027')) {\r\n this.tableData = [];\r\n this.cdr.detectChanges();\r\n } else 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.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 * Opens the confirmation modal to get user confirmation to delete the users from the selected group.\r\n * @memberof ViewRosterComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n openUserDeleteConfirmationModal(selectedUsers: any): void {\r\n const userIds = selectedUsers.map((user: User) => user?.userId);\r\n const selectedGroupInfo = this.groupService?.getSelectedGroupInfo();\r\n const confirmationInfo = constants?.deleteUsersGroup?.confirmationInfo;\r\n const deleteUserGroupModalOptions = {\r\n leftButtonLabel: confirmationInfo?.leftButtonLabel,\r\n rightButtonLabel: confirmationInfo?.rightButtonLabel,\r\n promptMessage: `${confirmationInfo?.promptMessagePart1} ${userIds?.length} ${confirmationInfo?.promptMessagePart2} ${selectedGroupInfo?.groupName}?`,\r\n actionButtonAlign: this.alignmentType?.MIDDLE,\r\n };\r\n this.dialogRef = this.dialog.open(ModalConfirmationComponent, {\r\n data: deleteUserGroupModalOptions,\r\n width: 'auto',\r\n autoFocus: 'dialog',\r\n ariaLabel: constants?.ariaLabel?.alert,\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.deleteUsersGroup(selectedGroupInfo?.groupId as string, userIds);\r\n }\r\n });\r\n }\r\n /**\r\n * Send API request to delete the selected user(s) from the selected group and handles the success and error response.\r\n * @memberof ViewRosterComponent\r\n */\r\n deleteUsersGroup(groupId: string, userIds: string[]) {\r\n const deleteUsersGroupTexts = constants?.deleteUsersGroup;\r\n const deleteUserGroupPayload: DeleteUserGroupPayload = {\r\n payload: {\r\n [groupId]: userIds,\r\n },\r\n };\r\n this.groupService\r\n .deleteUsersGroup(deleteUserGroupPayload)\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 if (res?.status) {\r\n this.showAlertMessage(\r\n `${res.body} ${deleteUsersGroupTexts?.message?.success?.removed}`,\r\n AlertType.SUCCESS\r\n );\r\n this.getGroupUsersAndInitializeTableView();\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 * Sets selected user info and emits event openModalNotifier with EDIT_ROSTER_USER_ROLE value.\r\n * @param {GroupUserInfo[]} selectedUserInfo\r\n * @memberof ViewRosterComponent\r\n */\r\n onEditUserRoles(selectedUserInfo: GroupUserInfo[]): void {\r\n this.groupService.setSelectedUserInfo({\r\n email: selectedUserInfo[0]?.email,\r\n name: selectedUserInfo[0]?.name,\r\n role: selectedUserInfo[0]?.role,\r\n userId: selectedUserInfo[0]?.userId,\r\n });\r\n this.groupService?.openModalNotifier?.next(\r\n GroupFunctionType.EDIT_ROSTER_USER_ROLE\r\n );\r\n }\r\n\r\n /**\r\n * Emits openModalNotifier event with GroupFunctionType value as ADD_USER_TO_ROSTER\r\n * @memberof ViewRosterComponent\r\n */\r\n onAddNewUser(): void {\r\n this.groupService?.openModalNotifier?.next(\r\n GroupFunctionType.ADD_USER_TO_ROSTER\r\n );\r\n }\r\n\r\n /**\r\n * Handles alerts for success, 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 ViewRosterComponent\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 * 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 (removeFilteredOption)=\"onFilterUsersByRoles($event)\"\r\n (filteredOptions)=\"onFilterUsersByRoles($event)\"\r\n (searchedValue)=\"onSearchGroupUsers($event)\"\r\n (selectedRowToEdit)=\"onEditUserRoles($event)\"\r\n (selectedRowsToDelete)=\"openUserDeleteConfirmationModal($event)\"\r\n (addRow)=\"onAddNewUser()\"\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 ModalComponent,\r\n SelectOption,\r\n IconButtonComponent,\r\n IconButton,\r\n AlignType,\r\n ModalConfirmationComponent,\r\n SelectComponent,\r\n LegendComponent,\r\n Legend,\r\n SearchType,\r\n SearchComponent,\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 BreakpointObserverService,\r\n AlertsService,\r\n GlobalErrorHandlerService,\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 { RosterFunctionType } from './models/roster-function-type.model';\r\nimport { GetGroupsPayload } from './models/view-group.model';\r\nimport { DeleteGroupPayload } from './models/delete-group.model';\r\nimport { AddUserRosterComponent } from './components/add-user-roster/add-user-roster.component';\r\nimport { ViewRosterComponent } from './components/view-roster/view-roster.component';\r\nimport { EditGroupAndParentInfo } from './models/edit-group.model';\r\nimport { EditUserRolesComponent } from './components/edit-user-roles/edit-user-roles.component';\r\nimport { UserPermissionsService } from './services/user-permissions.service';\r\nimport {\r\n GroupPermission,\r\n UserPermission,\r\n} from './models/group-permissions.model';\r\nimport { PermissionType } from './models/permission-type.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 editUserRolesTexts = this.constants?.editUserRoles;\r\n addUserRosterTexts = this.constants?.addUserRoster;\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 deleteGroupName!: 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 @Input() userPermissions!: UserPermission[];\r\n permissionType = PermissionType;\r\n functionType!: GroupFunctionType;\r\n alignmentType = AlignType;\r\n isSorting = true;\r\n canReopenViewRosterModal = false;\r\n searchType: SearchType = SearchType.ON_CLICK;\r\n minCharacterToSearch = 3;\r\n trimmedSearchTerm = '';\r\n userGroupPermissions!: GroupPermission[];\r\n supportMessage!: string;\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 public globalErrorHandlerService: GlobalErrorHandlerService,\r\n // eslint-disable-next-line no-unused-vars\r\n private userPermissionsService: UserPermissionsService\r\n ) {\r\n this.breakpointObserverService\r\n .getBreakpoint()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result: { matches: boolean }) => {\r\n this.isMobileView = result?.matches;\r\n });\r\n this.groupsService?.openModalNotifier?.next(GroupFunctionType.VIEW_ROSTER);\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.supportMessage =\r\n this.viewGroupTexts?.minCharRequiredToSearch1 +\r\n ' ' +\r\n this.minCharacterToSearch +\r\n ' ' +\r\n this.viewGroupTexts?.minCharRequiredToSearch2;\r\n this.userGroupPermissions =\r\n this.userPermissionsService.filterUserGroupPermissions(\r\n this.userPermissions\r\n );\r\n this.groupsService.setUserGroupPermissions(this.userGroupPermissions);\r\n this.groupsService?.setAppConfig(this.apiBaseURL, this.userPermissions);\r\n this.getGroupTypes();\r\n this.groupsService?.openModalNotifier\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((response) => {\r\n this.dialogRef?.close();\r\n if (response === GroupFunctionType.EDIT_ROSTER_USER_ROLE) {\r\n this.openEditUserRolesModal();\r\n }\r\n if (response === GroupFunctionType.ADD_USER_TO_ROSTER) {\r\n this.openAddUserRosterModal();\r\n }\r\n });\r\n }\r\n /**\r\n * Validates permission based access for provided feature.\r\n * @param {PermissionType} permissionType\r\n * @return {boolean}\r\n * @memberof GroupsComponent\r\n */\r\n validateAccess(permissionType: PermissionType): boolean {\r\n return this.userPermissionsService.validateAccessPermission(\r\n permissionType,\r\n this.userGroupPermissions\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', parentGroupInfo);\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-edit-group', editGroupInfo);\r\n }\r\n /**\r\n * Sets the dialog options for edit user roles and calls openModal method.\r\n * @memberof GroupsComponent\r\n */\r\n openEditUserRolesModal(): void {\r\n const dialogOptions = {\r\n heading: this.editUserRolesTexts?.heading,\r\n isCloseNeeded: true,\r\n componentReference: EditUserRolesComponent,\r\n modalType: ModalType.FORM,\r\n };\r\n this.functionType = GroupFunctionType.EDIT_ROSTER_USER_ROLE;\r\n this.groupsService?.setGroupFunctionType(this.functionType);\r\n this.openModal(dialogOptions, 'ieeesa-edit-user-roles');\r\n }\r\n /**\r\n * Sets the dialog options for add users modal and calls openModal method.\r\n * @memberof GroupsComponent\r\n */\r\n openAddUserRosterModal(): void {\r\n const dialogOptions = {\r\n heading: this.addUserRosterTexts?.heading,\r\n isCloseNeeded: true,\r\n componentReference: AddUserRosterComponent,\r\n modalType: ModalType.FORM,\r\n };\r\n this.functionType = GroupFunctionType.ADD_USER_TO_ROSTER;\r\n this.groupsService?.setGroupFunctionType(this.functionType);\r\n this.openModal(dialogOptions, 'ieeesa-add-user-roster');\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 * 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, no-unused-vars\r\n openModal(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n dialogOptions: any,\r\n className?: string,\r\n groupInfo?: GroupInfo | EditGroupAndParentInfo\r\n ): void {\r\n className = className ?? '';\r\n this.dialogRef = this.dialog?.open(ModalComponent, {\r\n data: dialogOptions,\r\n width:\r\n this.functionType === GroupFunctionType.VIEW_ROSTER ||\r\n this.functionType === GroupFunctionType.EDIT_ROSTER_USER_ROLE ||\r\n this.functionType === GroupFunctionType.ADD_USER_TO_ROSTER\r\n ? ''\r\n : '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 const createGroupInfo = groupInfo as GroupInfo;\r\n if (createGroupInfo) this.getGroups(createGroupInfo);\r\n else this.getGroups();\r\n break;\r\n }\r\n case GroupFunctionType?.EDIT: {\r\n this.showAlertMessage(\r\n AlertType?.SUCCESS,\r\n this.editGroupTexts?.message?.success?.submission\r\n );\r\n const editGroupInfo = groupInfo as EditGroupAndParentInfo;\r\n if (editGroupInfo?.parentGroupInfo?.groupId === undefined) {\r\n this.getGroups();\r\n } else this.getGroups(editGroupInfo.parentGroupInfo);\r\n break;\r\n }\r\n case GroupFunctionType?.EDIT_ROSTER_USER_ROLE: {\r\n this.groupsService.canShowMessage = true;\r\n this.groupsService.setRosterFunctionType(\r\n RosterFunctionType.EDIT_ROSTER_USER_ROLE\r\n );\r\n break;\r\n }\r\n case GroupFunctionType?.ADD_USER_TO_ROSTER: {\r\n this.groupsService.canShowMessage = true;\r\n this.groupsService.setRosterFunctionType(\r\n RosterFunctionType.ADD_USER_TO_ROSTER\r\n );\r\n break;\r\n }\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 if (\r\n this.functionType === GroupFunctionType.ADD_USER_TO_ROSTER ||\r\n this.functionType === GroupFunctionType.EDIT_ROSTER_USER_ROLE\r\n ) {\r\n this.canReopenViewRosterModal = false;\r\n this.viewRoster(this.groupsService.selectedGroupInfo as GroupInfo);\r\n }\r\n });\r\n this.dialogRef\r\n ?.afterOpened()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n if (\r\n this.functionType === GroupFunctionType.ADD_USER_TO_ROSTER ||\r\n this.functionType === GroupFunctionType.EDIT_ROSTER_USER_ROLE\r\n ) {\r\n this.canReopenViewRosterModal = true;\r\n }\r\n });\r\n this.dialogRef\r\n ?.afterClosed()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n if (this.canReopenViewRosterModal) {\r\n this.canReopenViewRosterModal = false;\r\n this.viewRoster(this.groupsService.selectedGroupInfo as GroupInfo);\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 ariaLabel: this.constants?.ariaLabel?.alert,\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 * 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 this.deleteGroupName = groupInfo?.groupName;\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 * 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 * 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 * 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\r\n onGroupSearchClick(searchTerm: string): void {\r\n this.trimmedSearchTerm = searchTerm.trim();\r\n if (\r\n !this.trimmedSearchTerm &&\r\n (this.isGroupSearchActive || this.isGroupFilterActive)\r\n ) {\r\n this.onGroupTypeFiltered(this.selectGroupOptions[0]);\r\n return;\r\n }\r\n if (!this.trimmedSearchTerm) return;\r\n this.selectedGroupType = this.selectGroupOptions[0];\r\n this.isGroupSearchOrFilterActive = !!this.trimmedSearchTerm;\r\n this.onGroupSearch();\r\n this.groupsService\r\n .groupsByNameAcronym(this.trimmedSearchTerm)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => {\r\n if (response?.status) {\r\n this.parentGroupsInfo = this.viewGroupResponse(response?.body);\r\n }\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error: (error: any) => {\r\n this.parentGroupsInfo = [];\r\n this.handleErrors(error);\r\n },\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 * 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 hierarchy: node[1]?.hierarchy,\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.showGroupFilter();\r\n this.trimmedSearchTerm = '';\r\n this.groupsService?.setGroupFunctionType(GroupFunctionType?.FILTER);\r\n this.getGroups();\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 } else if (this.getGroupsPayload.groupTypeId === '') {\r\n this.getGroupsPayload = {\r\n 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 * 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 * 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 * 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 * 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 if (errorCodes?.includes('1008')) {\r\n errorMessage[0] = this.deleteGroupName + errorMessage?.[0];\r\n }\r\n console.log(errorMessage);\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 * 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 *ngIf=\"validateAccess(permissionType.CREATE_ROOT_GROUP)\"\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 *ngIf=\"validateAccess(permissionType.CREATE_ROOT_GROUP)\"\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 [searchTerm]=\"trimmedSearchTerm\"\r\n [searchType]=\"searchType\"\r\n [placeholderLabel]=\"searchPlaceHolderText\"\r\n [minCharacterToSearch]=\"minCharacterToSearch\"\r\n [supportMessage]=\"supportMessage\"\r\n ></ieeesa-search>\r\n\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 [userGroupPermissions]=\"userGroupPermissions\"\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-start ieeesa-label-lg-bold-16\">\r\n {{ constants?.viewGroups?.legend }}\r\n </p>\r\n <ieeesa-legend\r\n [legends]=\"groupsLegends\"\r\n [isSorting]=\"isSorting\"\r\n ></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/components/edit-user-roles/edit-user-roles.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\nexport * from './lib/models/group-user-info.model';\r\nexport * from './lib/models/add-or-edit-user-group.model';\r\nexport * from './lib/models/roster-function-type.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":["i1.GroupPermissionsMapService","screenTexts?.errors","i1","i2.UserPermissionsService","screenTexts?.createGroup","i1.GroupsService","i3","takeUntil","map","constants","i2","constants?.deleteUsersGroup","constants?.ariaLabel","i2.GroupsService","screenTexts?.deleteGroup","i4.UserPermissionsService","i5"],"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/models/roster-type.model.ts","../../../projects/groups/src/lib/models/permission-type.model.ts","../../../projects/groups/src/lib/services/group-permissions-map-service.ts","../../../projects/groups/src/lib/services/user-permissions.service.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/edit-user-roles/edit-user-roles.component.ts","../../../projects/groups/src/lib/components/edit-user-roles/edit-user-roles.component.html","../../../projects/groups/src/lib/models/roster-function-type.model.ts","../../../projects/groups/src/lib/components/add-user-roster/add-user-roster.component.ts","../../../projects/groups/src/lib/components/add-user-roster/add-user-roster.component.html","../../../projects/groups/src/lib/models/filter-type.model.ts","../../../projects/groups/src/lib/models/table-column-schema-user-group.model.ts","../../../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-Z0-9])[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 email: /^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/,\r\n representingOrgNameMaxLength: 250,\r\n // Representing Organization field regular expression which accept Alpha Numeric, Special Characters and whitespace.\r\n representingOrganization:\r\n /^(?=.*[a-zA-Z])[\\w\\s!\"#$%&'()*+,-.\\/\\:;<=>?@[\\]^_`{|}~\\\\]+$/i,\r\n};\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 FILTER = 'FILTER',\r\n TOGGLE = 'TOGGLE',\r\n EDIT_ROSTER_USER_ROLE = 'EDIT_ROSTER_USER_ROLE',\r\n ADD_USER_TO_ROSTER = 'ADD_USER_TO_ROSTER',\r\n}","/* eslint-disable no-unused-vars */\r\nexport enum GroupRosterType {\r\n INDIVIDUAL = 'Individual',\r\n SYSTEM_USER = 'User',\r\n}\r\n","/* eslint-disable no-unused-vars */\r\nexport enum PermissionType {\r\n VIEW_GROUPS = 'VIEW_GROUPS',\r\n CREATE_ROOT_GROUP = 'CREATE_ROOT_GROUP',\r\n CREATE_SUBGROUP = 'CREATE_SUBGROUP',\r\n EDIT_GROUP = 'EDIT_GROUP',\r\n DELETE_GROUP = 'DELETE_GROUP',\r\n MANAGE_SYSTEM_USERS = 'MANAGE_SYSTEM_USERS',\r\n VIEW_GROUP_OFFICERS = 'VIEW_GROUP_OFFICERS',\r\n MANAGE_GROUP_OFFICERS = 'MANAGE_GROUP_OFFICERS',\r\n VIEW_GROUP_MEMBERS = 'VIEW_GROUP_MEMBERS',\r\n MANAGE_GROUP_MEMBERS = 'MANAGE_GROUP_MEMBERS',\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { GroupPermission } from '../models/group-permissions.model';\r\nimport { PermissionType } from '../models/permission-type.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class GroupPermissionsMapService {\r\n groupPermissions: GroupPermission[] = [\r\n {\r\n permissionType: PermissionType.VIEW_GROUPS,\r\n permissionName: 'View Groups',\r\n permissionId: 'PERM_NESC_c05ff592-7178-4614-b730-7a7a8828824e',\r\n },\r\n {\r\n permissionType: PermissionType.CREATE_ROOT_GROUP,\r\n permissionName: 'Create Parent Group',\r\n permissionId: 'PERM_NESC_fc522748-e2d4-440c-b6c6-41aaca75a80f',\r\n },\r\n {\r\n permissionType: PermissionType.CREATE_SUBGROUP,\r\n permissionName: 'Create Subgroup',\r\n permissionId: 'PERM_NESC_8f8a203e-d992-4555-9c42-ac6970f2d376',\r\n },\r\n {\r\n permissionType: PermissionType.DELETE_GROUP,\r\n permissionName: 'Delete Group',\r\n permissionId: 'PERM_NESC_008229bf-6a12-4281-88d8-4a2bc9597573',\r\n },\r\n {\r\n permissionType: PermissionType.EDIT_GROUP,\r\n permissionName: 'Edit Group Details',\r\n permissionId: 'PERM_NESC_d64e1f09-d3f7-4f86-a94c-4782a2f60571',\r\n },\r\n {\r\n permissionType: PermissionType.MANAGE_SYSTEM_USERS,\r\n permissionName: 'Manage System Users',\r\n permissionId: 'PERM_NESC_d2c103e9-20c6-4dd5-b320-f7d4d017c574',\r\n },\r\n {\r\n permissionType: PermissionType.VIEW_GROUP_OFFICERS,\r\n permissionName: 'View Group Officers',\r\n permissionId: 'PERM_NESC_f80ac8a3-60b8-4ae4-bedf-ce1d89c54354',\r\n },\r\n {\r\n permissionType: PermissionType.MANAGE_GROUP_OFFICERS,\r\n permissionName: 'Manage Group Officers',\r\n permissionId: 'PERM_NESC_9ddd51db-f481-47ea-946b-e88815973cfb',\r\n },\r\n {\r\n permissionType: PermissionType.VIEW_GROUP_MEMBERS,\r\n permissionName: 'View Group Members',\r\n permissionId: 'PERM_NESC_5a8edb91-a132-4670-90a3-25fb6982307a',\r\n },\r\n {\r\n permissionType: PermissionType.MANAGE_GROUP_MEMBERS,\r\n permissionName: 'Manage Group Member',\r\n permissionId: 'PERM_NESC_1969fecb-6383-446e-9276-b6a7b7265cb4',\r\n },\r\n ];\r\n getGroupPermissions(): GroupPermission[] {\r\n return this.groupPermissions;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { PermissionType } from '../models/permission-type.model';\r\nimport { GroupPermissionsMapService } from './group-permissions-map-service';\r\nimport {\r\n GroupPermission,\r\n UserPermission,\r\n} from '../models/group-permissions.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class UserPermissionsService {\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(private groupPermissionsService: GroupPermissionsMapService) {}\r\n\r\n /**\r\n * Returns access provision for the passed action/feature based on whether the signed in user has appropriate permission.\r\n * @param {PermissionType} permission\r\n * @param {GroupPermission[]} userGroupPermissions\r\n * @return {boolean}\r\n * @memberof UserPermissionsService\r\n */\r\n validateAccessPermission(\r\n permission: PermissionType,\r\n userGroupPermissions: GroupPermission[]\r\n ): boolean {\r\n const isPermitted = userGroupPermissions\r\n ? userGroupPermissions?.some(\r\n ({ permissionType }) => permissionType === permission\r\n )\r\n : false;\r\n return isPermitted;\r\n }\r\n\r\n /**\r\n * Filters signed in user group permissions from entire group permissions.\r\n * @param {UserPermissions[]} userPermissions\r\n * @return {GroupPermissions[]}\r\n * @memberof UserPermissionsService\r\n */\r\n filterUserGroupPermissions(userPermissions: UserPermission[]): GroupPermission[] {\r\n const userGroupPermissions = this.groupPermissionsService\r\n ?.getGroupPermissions()\r\n ?.filter((permission: GroupPermission) =>\r\n userPermissions?.find(\r\n ({ permissionId }) => permission?.permissionId === permissionId\r\n )\r\n );\r\n return userGroupPermissions;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, map, catchError, BehaviorSubject, of } from 'rxjs';\r\nimport {\r\n CreateGroupPayload,\r\n CreateGroupResponse,\r\n} from '../models/create-group.model';\r\nimport {\r\n BusinessRule,\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 FilterUsersPayload,\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\nimport { RosterFunctionType } from '../models/roster-function-type.model';\r\nimport { GroupUserInfo } from '../models/group-user-info.model';\r\nimport {\r\n AddOrEditUserPayload,\r\n AddOrEditGroupUserDetailsResponse,\r\n AddOrEditUserIndividualRosterPayload,\r\n} from '../models/add-or-edit-user-group.model';\r\nimport { DeleteUserGroupPayload } from '../models/delete-user-group.model';\r\nimport {\r\n GetUserDetailsPayload,\r\n SearchUserByEmailResponse,\r\n} from '../models/add-new-user.model';\r\nimport { OrganizationResponse } from '../models/organization.model';\r\nimport { MemberTypeResponse } from '../models/member-type.model';\r\nimport { ClassificationResponse } from '../models/classification.model';\r\nimport { GroupRosterType } from '../models/roster-type.model';\r\nimport { FormStatus } from '../models/form-status.model';\r\nimport { FormControlStatus } from '@angular/forms';\r\nimport { GroupPermission } from '../models/group-permissions.model';\r\nimport { PermissionType } from '../models/permission-type.model';\r\nimport { UserPermissionsService } from './user-permissions.service';\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 openModalNotifier = new BehaviorSubject<GroupFunctionType>(\r\n GroupFunctionType.VIEW_ROSTER\r\n );\r\n groupTypeRoles!: CheckboxOption[];\r\n selectedUserInfo!: GroupUserInfo;\r\n canShowMessage = false;\r\n rosterFunctionType!: RosterFunctionType;\r\n userGroupPermissions!: GroupPermission[];\r\n groupTypes!: GroupTypeConfiguration[];\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 private userPermissionsService: UserPermissionsService,\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 this.setLoadedGroupTypes(response?.body);\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 * Deletes a user from group based on the provided information\r\n * @param {groupId} string -groupId of the selected group from where selected user to be deleted.\r\n * @param {userId} Array -user ids of selected users who are deleted from the selected group\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 deleteUsersGroup(\r\n deleteUserGroupPayload: DeleteUserGroupPayload\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n ): Observable<any> {\r\n return this.httpService\r\n .putData(\r\n `${this.apiBaseUrl}/groups/roster/deleteGroupUsers`,\r\n deleteUserGroupPayload\r\n )\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 // eslint-disable-next-line no-unused-vars\r\n getGroupUsers(\r\n groupId: string,\r\n sortColumn: string,\r\n sortDirection: boolean\r\n ): Observable<GetGroupUsersResponse> {\r\n return this.httpService\r\n .getData(\r\n `${this.apiBaseUrl}/groups/roster/${groupId}?sortColumn=${sortColumn}&ascendingOrder=${sortDirection}`\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 users based on the filtered roles.\r\n * @param {FilterUsersPayload} payload\r\n * @return {Observable<GetGroupUsersResponse>}\r\n * @memberof GroupsService\r\n */\r\n getGroupUsersByRoles(\r\n payload: FilterUsersPayload\r\n ): Observable<GetGroupUsersResponse> {\r\n return this.httpService\r\n .postData(`${this.apiBaseUrl}/groups/roster/groupUsersFilter`, 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(`${this.apiBaseUrl}/groups/roster/groupUsersSearch`, 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 roles based on the group type.\r\n * @param {string} groupTypeId\r\n * @return {Observable<CheckboxOption[]>}\r\n * @memberof GroupsService\r\n */\r\n // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars\r\n getGroupTypeRoles(groupTypeId: string): Observable<CheckboxOption[]> {\r\n return this.httpService\r\n .getData(\r\n `${this.apiBaseUrl}/groups/config/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 this.setGroupTypeUserRoles(rolesOption);\r\n return rolesOption;\r\n }),\r\n catchError((errorRes) => {\r\n throw errorRes;\r\n })\r\n );\r\n }\r\n /**\r\n * Fetches the classifications master data from configuration and returns.\r\n * @return {Observable<ClassificationResponse>}\r\n * @memberof GroupsService\r\n */\r\n getClassifications(): Observable<ClassificationResponse> {\r\n return this.httpService\r\n .getData(`${this.apiBaseUrl}/groups/roster/classification`)\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 * Fetches the member types master data from configuration and returns.\r\n * @return {Observable<MemberTypeResponse>}\r\n * @memberof GroupsService\r\n */\r\n getMemberTypes(): Observable<MemberTypeResponse> {\r\n return this.httpService\r\n .getData(`${this.apiBaseUrl}/groups/roster/memberStatus`)\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 * 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 const classificationDesc = item.classification?.classificationName + ' (' + item.classification?.classificationDesc + ')';\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.length ? roles.join(', ') : null,\r\n classification: item.classification?.classificationId ? classificationDesc : null,\r\n memberStatus: item.memberStatus?.memberStatusName ?? null,\r\n organization: item.organization?.orgName ?? null,\r\n employer: item.employer,\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 /**\r\n * Returns group user details if email is found, else throws error.\r\n * @param {string} email\r\n * @return {Observable<SearchUserByEmailResponse>}\r\n * @memberof GroupsService\r\n */\r\n getUserByEmail(email: string): Observable<SearchUserByEmailResponse> {\r\n return this.httpService\r\n .getData(`${this.apiBaseUrl}/groups/users/userByEmail/${email}`)\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 user details for the selected group\r\n * @param {GetUserDetailsPayload} payload\r\n * @return {Observable<AddOrEditGroupUserDetailsResponse>}\r\n * @memberof GroupsService\r\n */\r\n getGroupUserDetails(\r\n payload: GetUserDetailsPayload\r\n ): Observable<AddOrEditGroupUserDetailsResponse> {\r\n return this.httpService\r\n .postData(`${this.apiBaseUrl}/groups/roster/userDetails`, payload)\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 * Posts add new user form data to the API for the selected group and returns the success or failure response.\r\n * @param {(AddOrEditUserPayload\r\n * | AddOrEditUserIndividualRosterPayload)} AddOrEditUserPayload\r\n * @param {GroupRosterType} groupRosterType\r\n * @return {Observable<AddOrEditGroupUserDetailsResponse>}\r\n * @memberof GroupsService\r\n */\r\n addNewGroupUser(\r\n AddOrEditUserPayload:\r\n | AddOrEditUserPayload\r\n | AddOrEditUserIndividualRosterPayload,\r\n groupRosterType: GroupRosterType\r\n ): Observable<AddOrEditGroupUserDetailsResponse> {\r\n const url = `${this.apiBaseUrl}/groups/roster/${\r\n groupRosterType === GroupRosterType.INDIVIDUAL\r\n ? 'createGroupUserRole'\r\n : 'addGroupUserRole'\r\n }`;\r\n return this.httpService.postData(url, AddOrEditUserPayload).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 * Sets the loaded group type user roles\r\n * @param {CheckboxOption[]} userRoles\r\n * @memberof GroupsService\r\n */\r\n setGroupTypeUserRoles(userRoles: CheckboxOption[]): void {\r\n this.groupTypeRoles = userRoles;\r\n }\r\n\r\n /**\r\n * Returns the group type user roles.\r\n * @return {CheckboxOption[]}\r\n * @memberof GroupsService\r\n */\r\n getGroupTypeUserRoles(): CheckboxOption[] {\r\n this.groupTypeRoles?.map((option) => (option.checked = false));\r\n return this.groupTypeRoles;\r\n }\r\n\r\n /**\r\n * Sets the selected user info.\r\n * @param {GroupUserInfo} userInfo\r\n * @memberof GroupsService\r\n */\r\n setSelectedUserInfo(userInfo: GroupUserInfo): void {\r\n this.selectedUserInfo = userInfo;\r\n }\r\n\r\n /**\r\n * Returns selected user info.\r\n * @return {GroupUserInfo}\r\n * @memberof GroupsService\r\n */\r\n getSelectedUserInfo(): GroupUserInfo {\r\n return this.selectedUserInfo;\r\n }\r\n\r\n /**\r\n * Updates group user roles and other details to server using HttpService.\r\n * @param {(AddOrEditUserPayload | AddOrEditUserIndividualRosterPayload)} payload\r\n * @return {Observable<AddOrEditGroupUserDetailsResponse>}\r\n * @memberof GroupsService\r\n */\r\n editGroupsUserRole(\r\n payload: AddOrEditUserPayload | AddOrEditUserIndividualRosterPayload\r\n ): Observable<AddOrEditGroupUserDetailsResponse> {\r\n return this.httpService\r\n .putData(`${this.apiBaseUrl}/groups/roster/editGroupUserRole`, payload)\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 * Sets roster function type.\r\n * @param {RosterFunctionType} rosterFunctionType\r\n * @memberof GroupsService\r\n */\r\n setRosterFunctionType(rosterFunctionType: RosterFunctionType): void {\r\n this.rosterFunctionType = rosterFunctionType;\r\n }\r\n\r\n /**\r\n * Returns roster function type.\r\n * @return {RosterFunctionType}\r\n * @memberof GroupsService\r\n */\r\n getRosterFunctionType(): RosterFunctionType {\r\n return this.rosterFunctionType;\r\n }\r\n /**\r\n * Gets the groups based on the search by group name or acronym.\r\n * @param {string} searchTerm\r\n * @return {Observable<GetGroupUsersResponse>}\r\n * @memberof GroupsService\r\n */\r\n groupsByNameAcronym(searchTerm: string): Observable<GetGroupResponse> {\r\n return this.httpService\r\n .getData(`${this.apiBaseUrl}/groups/groupsByNameAcronym/${searchTerm}`)\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 * Sets the user group permissions\r\n * @param {GroupPermission[]} userGroupPermissions\r\n * @memberof GroupsService\r\n */\r\n setUserGroupPermissions(userGroupPermissions: GroupPermission[]) {\r\n this.userGroupPermissions = userGroupPermissions;\r\n }\r\n /**\r\n * Returns the user group permissions\r\n * @return {GroupPermission[]}\r\n * @memberof GroupsService\r\n */\r\n getUserGroupPermissions(): GroupPermission[] {\r\n return this.userGroupPermissions;\r\n }\r\n /**\r\n * Validates permission based access for provided feature.\r\n * @param {PermissionType} permissionType\r\n * @return {boolean}\r\n * @memberof GroupsService\r\n */\r\n validateAccess(permissionType: PermissionType): boolean {\r\n return this.userPermissionsService.validateAccessPermission(\r\n permissionType,\r\n this.getUserGroupPermissions()\r\n );\r\n }\r\n /**\r\n * Store the loaded group types.\r\n * @param {GroupTypeConfiguration[]} groupTypes\r\n * @memberof GroupsService\r\n */\r\n setLoadedGroupTypes(groupTypes: GroupTypeConfiguration[]) {\r\n this.groupTypes = groupTypes;\r\n }\r\n /**\r\n * Return the loaded group types.\r\n * @return {GroupTypeConfiguration[]}\r\n * @memberof GroupsService\r\n */\r\n getLoadedGroupTypes(): GroupTypeConfiguration[] {\r\n return this.groupTypes;\r\n }\r\n \r\n /**\r\n *\r\n * @param {string} orgName\r\n * @return {Observable<OrganizationResponse>}\r\n * @memberof GroupsService\r\n */\r\n getOrganizations(orgName: string): Observable<OrganizationResponse> {\r\n // return of()\r\n return this.httpService\r\n .getData(`${this.apiBaseUrl}/groups/roster/organizations/${orgName}`)\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 * Returns the group type configuration Business rule for the selected group.\r\n * @return {(BusinessRule | undefined)}\r\n * @memberof GroupsService\r\n */\r\n getBusinessRuleOfSelectedGroup(): BusinessRule | undefined {\r\n return this.getLoadedGroupTypes()?.find(\r\n (group) => group?.configFieldId === this.getSelectedGroupInfo()?.groupType\r\n )?.configFieldValue?.businessRule;\r\n }\r\n /**\r\n * Enables or disables the form submit button based on passed parameters.\r\n * @param {GroupRosterType} groupRosterType\r\n * @param {FormControlStatus} formStatus\r\n * @param {string[]} selectedUserRoles\r\n * @return {boolean}\r\n * @memberof GroupsService\r\n */\r\n isSubmitButtonDisabled(\r\n groupRosterType: GroupRosterType,\r\n formStatus: FormControlStatus,\r\n selectedUserRoles: string[]\r\n ): boolean {\r\n if (groupRosterType === GroupRosterType.INDIVIDUAL)\r\n return formStatus === FormStatus.INVALID;\r\n return selectedUserRoles?.length === 0 || formStatus === FormStatus.INVALID;\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 this.groupTypes = this.groupTypes.filter((groupType)=> !groupTypes[groupType.id]?.businessRule?.isAdmin);\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 this.groupTypes = this.groupTypes.filter((groupType)=> groupTypes[groupType.id]?.hierarchy === 0 && !groupTypes[groupType.id]?.businessRule?.isAdmin);\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 ViewEncapsulation,\r\n} from '@angular/core';\r\nimport {\r\n MenuComponent,\r\n Menu,\r\n IconButtonComponent,\r\n IconButton,\r\n TextTruncatedDirective,\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\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { GroupsService } from '../../services/groups.service';\r\nimport { GroupFunctionType } from '../../models/group-function-type.model';\r\nimport { PermissionType } from '../../models/permission-type.model';\r\nimport { GroupPermission } from '../../models/group-permissions.model';\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 clickedNode.item.noOfChildren = children.length;\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 MatTooltipModule,\r\n TextTruncatedDirective,\r\n ],\r\n templateUrl: './tree-view.component.html',\r\n styleUrls: ['./tree-view.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\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 editGroupAndParentGroupInfo!: EditGroupAndParentInfo;\r\n permissionType = PermissionType;\r\n\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 @Input()\r\n userGroupPermissions!: GroupPermission[];\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(\r\n // eslint-disable-next-line no-unused-vars\r\n public database: Groups,\r\n // eslint-disable-next-line no-unused-vars\r\n public elementRef: ElementRef,\r\n // eslint-disable-next-line no-unused-vars\r\n public groupsService: GroupsService // eslint-disable-next-line no-empty-function\r\n ) {}\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.groupsService.setGroupFunctionType(GroupFunctionType.TOGGLE);\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 if (\r\n this.dataSource &&\r\n this.groupsService.getGroupFunctionType() === GroupFunctionType.CREATE\r\n ) {\r\n this.parentGroupsInfo?.forEach((parentGroupNode) => {\r\n if (\r\n this.dataSource?.data?.findIndex(\r\n (node) => node?.item?.groupId === parentGroupNode?.groupId\r\n ) === -1\r\n ) {\r\n const newGroupNode = new GroupNode(\r\n parentGroupNode,\r\n 0,\r\n this.database.isExpandable(parentGroupNode)\r\n );\r\n const groupNodesReference = this.dataSource?.data;\r\n groupNodesReference?.push(newGroupNode);\r\n this.dataSource.data = groupNodesReference;\r\n }\r\n });\r\n } else if (\r\n this.groupsService.getGroupFunctionType() === GroupFunctionType.EDIT\r\n ) {\r\n this.editGroup(this.parentGroupsInfo);\r\n } else {\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 /**\r\n * Sets the updated node information\r\n * @param {GroupInfo[]} groupsInfo\r\n * @memberof TreeViewComponent\r\n */\r\n editGroup(groupsInfo: GroupInfo[]) {\r\n const groupNodeReference = this.dataSource?.data;\r\n const editedNode = groupsInfo?.find(\r\n (node) =>\r\n node?.groupId === this.editGroupAndParentGroupInfo?.groupInfo?.groupId\r\n );\r\n groupNodeReference?.forEach((node) => {\r\n if (\r\n node?.item?.groupId ===\r\n this.editGroupAndParentGroupInfo?.groupInfo?.groupId\r\n ) {\r\n const noOfChildrenReference = node.item.noOfChildren;\r\n node.item = editedNode as GroupInfo;\r\n node.item.noOfChildren = noOfChildrenReference;\r\n node.expandable = this.database.isExpandable(node?.item);\r\n if (node.item.hasChildren && this.treeControl.isExpanded(node)) {\r\n this.treeControl.toggle(node);\r\n }\r\n }\r\n });\r\n this.dataSource.data = groupNodeReference;\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 const groupNodesReference = this.dataSource?.data;\r\n if (\r\n this.groupsService.getGroupFunctionType() === GroupFunctionType.CREATE\r\n ) {\r\n if (!this.selectedGroup?.item?.hasChildren) {\r\n this.selectedGroup.item.hasChildren = true;\r\n const groupParentNode = new GroupNode(\r\n this.selectedGroup.item,\r\n this.selectedGroup.level,\r\n true\r\n );\r\n groupNodesReference.splice(\r\n groupNodesReference.indexOf(this.selectedGroup),\r\n 1,\r\n groupParentNode\r\n );\r\n this.treeControl.expand(groupParentNode);\r\n }\r\n if (this.treeControl.isExpanded(this.selectedGroup)) {\r\n const children = this.database.getChildGroupsInfo();\r\n children?.forEach((groupNode) => {\r\n if (\r\n this.dataSource?.data?.findIndex(\r\n (node) => node?.item?.groupId === groupNode?.groupId\r\n ) === -1\r\n ) {\r\n const newGroupNode = new GroupNode(\r\n groupNode,\r\n this.selectedGroup?.level + 1,\r\n this.database?.isExpandable(groupNode)\r\n );\r\n const groupNodesReference = this.dataSource?.data;\r\n groupNodesReference.forEach((node) => {\r\n if (node.item.groupId === this.selectedGroup.item.groupId) {\r\n node.item.noOfChildren = children.length;\r\n }\r\n });\r\n groupNodesReference.splice(\r\n groupNodesReference.indexOf(this.selectedGroup) + 1,\r\n 0,\r\n newGroupNode\r\n );\r\n this.dataSource.data = groupNodesReference;\r\n }\r\n });\r\n }\r\n } else if (\r\n this.groupsService.getGroupFunctionType() === GroupFunctionType.EDIT\r\n ) {\r\n this.editGroup(this.childGroupsInfo);\r\n } else if (\r\n this.groupsService.getGroupFunctionType() === GroupFunctionType.TOGGLE\r\n ) {\r\n this.treeControl?.toggle(this.selectedGroup);\r\n }\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 deletedGroupIndex = this.dataSource.data.findIndex(\r\n (node) => node.item.groupId === deletedGroupId\r\n );\r\n const deletedGroup = this.dataSource.data.at(deletedGroupIndex);\r\n const dataSourceReference = this.dataSource.data;\r\n if (deletedGroupIndex) {\r\n if (deletedGroup?.item.groupParentId !== null) {\r\n const deletedParentGroupIndex = this.dataSource.data.findIndex(\r\n (node) => node.item.groupId === deletedGroup?.item.groupParentId\r\n );\r\n const deletedParentGroup = this.dataSource.data.at(\r\n deletedParentGroupIndex\r\n );\r\n if (deletedParentGroup && deletedParentGroup.item.noOfChildren) {\r\n deletedParentGroup.item.noOfChildren =\r\n deletedParentGroup.item.noOfChildren - 1;\r\n if (deletedParentGroup.item.noOfChildren === 0) {\r\n deletedParentGroup.item.hasChildren = false;\r\n const newNode = new GroupNode(\r\n deletedParentGroup.item,\r\n deletedParentGroup.level,\r\n false\r\n );\r\n dataSourceReference.splice(deletedGroupIndex - 1, 2, newNode);\r\n } else {\r\n dataSourceReference.splice(deletedGroupIndex, 1);\r\n }\r\n }\r\n } else {\r\n dataSourceReference.splice(deletedGroupIndex, 1);\r\n }\r\n }\r\n this.dataSource.data = dataSourceReference;\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.selectedGroup = 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 this.editGroupAndParentGroupInfo = {\r\n groupInfo: group?.item,\r\n parentGroupInfo: editGroupParentInfo,\r\n };\r\n this.editGroupClick.emit(this.editGroupAndParentGroupInfo);\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 const isAdminGroupType = group?.item?.groupTypeInfo?.businessRule?.isAdmin;\r\n this.menuItems?.forEach((e) => {\r\n e.isToolTipNeeded = false;\r\n if (\r\n (e?.id === GroupAction.VIEW_ROSTER &&\r\n ((isAdminGroupType &&\r\n this.groupsService.validateAccess(\r\n this.permissionType.MANAGE_SYSTEM_USERS\r\n )) ||\r\n (!isAdminGroupType &&\r\n (this.groupsService.validateAccess(\r\n this.permissionType.VIEW_GROUP_OFFICERS\r\n ) ||\r\n this.groupsService.validateAccess(\r\n this.permissionType.MANAGE_GROUP_OFFICERS\r\n ) ||\r\n this.groupsService.validateAccess(\r\n this.permissionType.VIEW_GROUP_MEMBERS\r\n ) ||\r\n this.groupsService.validateAccess(\r\n this.permissionType.MANAGE_GROUP_MEMBERS\r\n ))))) ||\r\n (e?.id === GroupAction.EDIT_GROUP &&\r\n !isAdminGroupType &&\r\n this.groupsService.validateAccess(this.permissionType.EDIT_GROUP)) ||\r\n (e?.id === GroupAction.DELETE_GROUP &&\r\n !isAdminGroupType &&\r\n this.groupsService.validateAccess(this.permissionType.DELETE_GROUP) &&\r\n !group?.item?.hasChildren) ||\r\n (e?.id === GroupAction.CREATE_SUB_GROUP &&\r\n group?.item?.groupTypeInfo?.businessRule?.allowSubGroup &&\r\n this.groupsService.validateAccess(\r\n this.permissionType.CREATE_SUBGROUP\r\n ) &&\r\n !isAdminGroupType)\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 class=\"ieeesa-body-md-16\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex gap-lg-3 my-0 gap-0 gap-sm-0 gap-md-2\"\r\n [ngStyle]=\"getBoxShadow(node?.item?.groupTypeInfo?.legendColor)\"\r\n >\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n role=\"gridcell\"\r\n ></div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupNodeOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\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 class=\"ieeesa-body-md-16 ieeesa-tree__parent-node-wrapper\"\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 gap-lg-3 my-0 gap-0 gap-sm-0 gap-md-2\"\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 ieeesaGroupNodeOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupNodeOutlet let-node>\r\n <ng-container\r\n *ngTemplateOutlet=\"ieeesaGroupInfoOutlet; context: { $implicit: node }\"\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 ieeesa-tree__group-actions\"\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)=\"onGroupActionsClick($event); handleGroupActions(node)\"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n </ng-template>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"ieeesa-tree__group-info-wrapper\">\r\n <div\r\n class=\"ieeesa-tree__group-info d-flex flex-column flex-sm-column flex-md-column 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\r\n class=\"ieeesa-tree__node-group-name ieeesa-headline-sm-26\"\r\n [matTooltip]=\"node?.item?.groupName\"\r\n ieeesaTextTruncated\r\n role=\"gridcell\"\r\n >\r\n {{ node?.item?.groupName }}\r\n </p>\r\n <p\r\n class=\"ieeesa-tree__node-group-acronym ieeesa-title-lg-24\"\r\n [matTooltip]=\"node?.item?.groupAcronym\"\r\n ieeesaTextTruncated\r\n role=\"gridcell\"\r\n >\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 Component,\r\n EventEmitter,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { GroupsService } from '../../services/groups.service';\r\nimport {\r\n AlignType,\r\n CheckboxOption,\r\n FieldConfig,\r\n FormControlType,\r\n FormGrid,\r\n FormModel,\r\n SelectOption,\r\n DynamicFormComponent,\r\n} from '@ieeesa-npm/presentation';\r\nimport * as screenTexts from '../../assets/constants.json';\r\nimport { FormGroup, Validators } from '@angular/forms';\r\nimport { GroupUserInfo } from '../../models/group-user-info.model';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { FormStatus } from '../../models/form-status.model';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport {\r\n AlertType,\r\n AlertsService,\r\n GlobalErrorHandlerService,\r\n} from '@ieeesa-npm/utility';\r\nimport {\r\n AddOrEditUserIndividualRosterPayload,\r\n AddOrEditUserPayload,\r\n} from '../../models/add-or-edit-user-group.model';\r\nimport { GroupTypeConfiguration } from '../../models/group-types.model';\r\nimport { GroupRosterType } from '../../models/roster-type.model';\r\nimport { GroupsValidationPatterns } from '../../assets/form-validations';\r\n\r\n/**\r\n * Component implements the view and functionalities to edit group users to roster.\r\n * @class EditUserRolesComponent\r\n * @implements {OnInit}\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n selector: 'ieeesa-edit-user-roles',\r\n standalone: true,\r\n imports: [CommonModule, DynamicFormComponent],\r\n templateUrl: './edit-user-roles.component.html',\r\n styleUrls: ['./edit-user-roles.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class EditUserRolesComponent implements OnInit, OnDestroy {\r\n destroy$ = new Subject<boolean>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = screenTexts;\r\n addUserRosterTexts = this.constants?.addUserRoster;\r\n leftButtonLabel = this.addUserRosterTexts?.label?.leftButtonLabel;\r\n rightButtonLabel = this.addUserRosterTexts?.label?.saveButtonLabel;\r\n isSubmitButtonDisabled = true;\r\n colWidth: FormGrid = { xs: 12, xl: 12, sm: 12, md: 12, lg: 12 };\r\n editUserRoleFormGroup!: FormModel;\r\n editUserRoleFormGroupRef!: FormGroup;\r\n userRoles!: CheckboxOption[];\r\n selectedUserRoleIds: string[] = [];\r\n selectedUserInfo!: GroupUserInfo;\r\n actionButtonAlign = AlignType.LEFT;\r\n classifications: SelectOption[] = [];\r\n memberTypes: SelectOption[] = [];\r\n organizations: SelectOption[] = [];\r\n groupTypes!: GroupTypeConfiguration[];\r\n hasClassification = false;\r\n groupRosterType!: GroupRosterType;\r\n @ViewChild(DynamicFormComponent) dynamicFormComponent!: DynamicFormComponent;\r\n @Output() submitFormResponse = new EventEmitter();\r\n @Output() formCancel = new EventEmitter();\r\n\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 public 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 edit user role required information and form group array.\r\n * @return -returns nothing\r\n * @memberof EditUserRolesComponent\r\n */\r\n ngOnInit(): void {\r\n this.selectedUserInfo = this.groupsService?.getSelectedUserInfo();\r\n const selectedUserRoleNames = this.selectedUserInfo?.role\r\n ?.split(',')\r\n .map((role) => role?.trim());\r\n this.userRoles = this.groupsService?.getGroupTypeUserRoles();\r\n this.userRoles?.forEach((role) => {\r\n if (selectedUserRoleNames?.includes(role?.name as string)) {\r\n role.checked = true;\r\n this.selectedUserRoleIds?.push(role?.id as string);\r\n }\r\n });\r\n const groupType = this.groupsService.getBusinessRuleOfSelectedGroup();\r\n this.hasClassification = groupType?.hasClassification ?? false;\r\n this.groupRosterType = groupType?.rosterType as GroupRosterType;\r\n if (!this.groupRosterType)\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n message: this.constants?.errors?.ER1001,\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n else {\r\n if (this.groupRosterType === GroupRosterType?.INDIVIDUAL) {\r\n if (this.hasClassification) this.getClassifications();\r\n this.getMemberTypes();\r\n }\r\n this.editUserRolesFormGroup();\r\n }\r\n }\r\n\r\n /**\r\n * Initialize the edit user role form group array.\r\n * @memberof EditUserRolesComponent\r\n */\r\n editUserRolesFormGroup() {\r\n this.editUserRoleFormGroup = {\r\n formGroup: [\r\n {\r\n legend: '',\r\n controls: [\r\n {\r\n type: FormControlType?.TEXT_AREA,\r\n label: this.addUserRosterTexts?.label?.email + '*',\r\n controlName: 'email',\r\n value: this.selectedUserInfo?.email,\r\n ariaLabel: this.addUserRosterTexts?.label?.ariaLabel?.email,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById?.email,\r\n isReadonly: true,\r\n ariaMultiline: false,\r\n isResize: true,\r\n },\r\n {\r\n type: FormControlType.TEXT_AREA,\r\n label: this.addUserRosterTexts?.label?.fullName + '*',\r\n controlName: 'fullName',\r\n value: this.selectedUserInfo?.name,\r\n ariaLabel: this.addUserRosterTexts?.label?.ariaLabel?.fullName,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById?.fullName,\r\n isReadonly: true,\r\n ariaMultiline: false,\r\n isResize: true,\r\n },\r\n {\r\n type: FormControlType.CHECKBOX,\r\n label:\r\n this.groupRosterType === GroupRosterType.INDIVIDUAL\r\n ? this.addUserRosterTexts?.label?.role\r\n : this.addUserRosterTexts?.label?.role + '*',\r\n controlName: 'roles',\r\n checkboxOptions: this.userRoles,\r\n minSelectionRequired: 1,\r\n ariaLabel: this.addUserRosterTexts?.label?.ariaLabel?.role,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById?.role,\r\n supportMessage:\r\n this.groupRosterType === GroupRosterType.INDIVIDUAL\r\n ? this.addUserRosterTexts?.supportText\r\n ?.roleForIndividualRoster\r\n : this.addUserRosterTexts?.supportText?.role,\r\n requiredErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.required,\r\n validation:\r\n this.groupRosterType === GroupRosterType.INDIVIDUAL\r\n ? []\r\n : [Validators.required],\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n if (this.groupRosterType === GroupRosterType?.INDIVIDUAL) {\r\n this.updateEditUserRoleFormGroup();\r\n }\r\n }\r\n\r\n /**\r\n * Adds classification, Member Type and Representing Organization form controls while editing new user to an individual group roster.\r\n * @memberof AddUserRosterComponent\r\n */\r\n updateEditUserRoleFormGroup(): void {\r\n if (this.hasClassification)\r\n this.updateEditUserRoleFormControls(\r\n this.editUserRoleFormGroup?.formGroup[0]?.controls?.length - 1,\r\n {\r\n type: FormControlType.SELECT,\r\n label: this.addUserRosterTexts?.label?.classification + '*',\r\n controlName: 'classification',\r\n dropdownOptions: this.classifications,\r\n value: this.classifications?.filter(\r\n (option) => option?.name === this.selectedUserInfo?.classification\r\n )[0],\r\n validation: [Validators.required],\r\n placeholder: '',\r\n supportMessage: this.addUserRosterTexts?.supportText?.classification,\r\n requiredErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.required,\r\n ariaLabel: this.addUserRosterTexts?.label?.ariaLabel?.classification,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById?.classification,\r\n }\r\n );\r\n this.updateEditUserRoleFormControls(\r\n this.editUserRoleFormGroup?.formGroup[0]?.controls?.length - 1,\r\n {\r\n type: FormControlType.AUTO_COMPLETE,\r\n label: this.addUserRosterTexts?.label?.representingOrganization + '*',\r\n controlName: 'representingOrg',\r\n validation: [\r\n Validators.required,\r\n Validators.maxLength(\r\n GroupsValidationPatterns.representingOrgNameMaxLength\r\n ),\r\n Validators.pattern(GroupsValidationPatterns.representingOrganization),\r\n ],\r\n autoCompleteOptions: this.organizations,\r\n value: this.organizations?.filter(\r\n (option) => option?.name === this.selectedUserInfo?.organization\r\n )[0],\r\n placeholder: '',\r\n supportMessage:\r\n this.addUserRosterTexts?.supportText?.representingOrganization,\r\n requiredErrorMessage: this.addUserRosterTexts?.message?.error?.required,\r\n maxErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.limit\r\n ?.representingOrganization,\r\n patternErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.pattern\r\n ?.representingOrganization,\r\n ariaLabel:\r\n this.addUserRosterTexts?.label?.ariaLabel?.representingOrganization,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById\r\n ?.representingOrganization,\r\n }\r\n );\r\n this.updateEditUserRoleFormControls(\r\n this.editUserRoleFormGroup?.formGroup[0]?.controls?.length - 1,\r\n {\r\n type: FormControlType.SELECT,\r\n label: this.addUserRosterTexts?.label?.memberType + '*',\r\n controlName: 'memberType',\r\n dropdownOptions: this.memberTypes,\r\n value: this.memberTypes?.filter(\r\n (option) => option?.name === this.selectedUserInfo?.memberStatus\r\n )[0],\r\n validation: [Validators.required],\r\n placeholder: '',\r\n supportMessage: this.addUserRosterTexts?.supportText?.memberType,\r\n requiredErrorMessage: this.addUserRosterTexts?.message?.error?.required,\r\n ariaLabel: this.addUserRosterTexts?.label?.ariaLabel?.memberType,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById?.memberType,\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Updates the edit user form group controls by adding fieldConfig at required index.\r\n * @param {number} indexPosition\r\n * @param {FieldConfig} fieldConfig\r\n * @memberof EditUserRolesComponent\r\n */\r\n updateEditUserRoleFormControls(\r\n indexPosition: number,\r\n fieldConfig: FieldConfig\r\n ): void {\r\n this.editUserRoleFormGroup.formGroup[0].controls.splice(\r\n indexPosition,\r\n 0,\r\n fieldConfig\r\n );\r\n }\r\n\r\n /**\r\n * Handles user role selection and save button enable disable in edit user roles form.\r\n * @param {CheckboxOption} event\r\n * @memberof EditUserRolesComponent\r\n */\r\n onUserRoleSelection(event: CheckboxOption): void {\r\n if (event?.checked) {\r\n this.selectedUserRoleIds?.push(event?.id as string);\r\n } else {\r\n this.selectedUserRoleIds = this.selectedUserRoleIds?.filter(\r\n (id) => id !== event?.id\r\n );\r\n }\r\n this.isSubmitButtonDisabled = this.groupsService.isSubmitButtonDisabled(\r\n this.groupRosterType,\r\n this.editUserRoleFormGroupRef?.status,\r\n this.selectedUserRoleIds\r\n );\r\n }\r\n\r\n /**\r\n * Update roles and details of user on form submission.\r\n * @param {FormGroup[]} form\r\n * @memberof EditUserRolesComponent\r\n */\r\n onEditUserRoleFormSubmit(form: FormGroup[]): void {\r\n form[0]?.markAllAsTouched();\r\n if (form[0].status === FormStatus?.VALID) {\r\n this.groupsService\r\n .editGroupsUserRole(this.getEditUserRolePayload(form[0]?.getRawValue()))\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 /**\r\n * Constructs edit user payload from the form data depends on the GroupRosterType and returns.\r\n * @param {*} formData\r\n * @return {(AddOrEditUserPayload | AddOrEditUserIndividualRosterPayload)}\r\n * @memberof EditUserRolesComponent\r\n */\r\n getEditUserRolePayload(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n formData: any\r\n ): AddOrEditUserPayload | AddOrEditUserIndividualRosterPayload {\r\n let payload: AddOrEditUserPayload | AddOrEditUserIndividualRosterPayload;\r\n if (this.groupRosterType === GroupRosterType?.INDIVIDUAL) {\r\n payload = {\r\n payload: {\r\n userId: this.selectedUserInfo?.userId,\r\n email: this.selectedUserInfo?.email,\r\n roles: this.selectedUserRoleIds,\r\n groupId: this.groupsService.selectedGroupInfo?.groupId as string,\r\n memberStatus: {\r\n memberStatusId: formData?.memberType\r\n ? formData?.memberType?.id\r\n : '',\r\n },\r\n organization: {\r\n orgId: formData?.representingOrg?.id ?? '',\r\n orgName:\r\n formData?.representingOrg?.name ?? formData?.representingOrg,\r\n },\r\n },\r\n };\r\n if (this.hasClassification)\r\n payload.payload.classification = {\r\n classificationId: formData?.classification\r\n ? formData?.classification?.id\r\n : '',\r\n };\r\n } else\r\n payload = {\r\n payload: {\r\n email: this.selectedUserInfo?.email,\r\n userId: this.selectedUserInfo?.userId,\r\n roles: this.selectedUserRoleIds,\r\n groupId: this.groupsService?.selectedGroupInfo?.groupId as string,\r\n },\r\n };\r\n return payload;\r\n }\r\n\r\n /**\r\n * Emits form cancel event.\r\n * @memberof EditUserRolesComponent\r\n */\r\n onEditUserRoleCancelled(): void {\r\n this.formCancel?.emit();\r\n }\r\n\r\n /**\r\n * Get form reference.\r\n * @param {FormGroup[]} form\r\n * @memberof EditUserRolesComponent\r\n */\r\n getFormGroupReference(form: FormGroup[]) {\r\n this.editUserRoleFormGroupRef = form[0];\r\n }\r\n\r\n /**\r\n * Handles edit user role form change event.\r\n * @param {FormGroup[]} form\r\n * @memberof editUserRoleFormGroupRef\r\n */\r\n onEditUserRoleFormChange(form: FormGroup[]): void {\r\n this.editUserRoleFormGroupRef = form[0];\r\n this.isSubmitButtonDisabled = this.groupsService.isSubmitButtonDisabled(\r\n this.groupRosterType,\r\n this.editUserRoleFormGroupRef?.status,\r\n this.selectedUserRoleIds\r\n );\r\n }\r\n\r\n /**\r\n * Gets the classifications from master data.\r\n * @memberof EditUserRolesComponent\r\n */\r\n getClassifications(): void {\r\n this.groupsService\r\n .getClassifications()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => {\r\n response?.body?.forEach((option) => {\r\n this.classifications?.push({\r\n id: option.classificationId,\r\n name: option.classificationDesc,\r\n });\r\n });\r\n this.updateFormControlOptions(\r\n 'classification',\r\n 'dropdownOptions',\r\n this.classifications\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 * Gets the member types from master data.\r\n * @memberof EditUserRolesComponent\r\n */\r\n getMemberTypes(): void {\r\n this.groupsService\r\n .getMemberTypes()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => {\r\n response?.body?.forEach((option) => {\r\n this.memberTypes?.push({\r\n id: option.memberStatusId,\r\n name: option.memberStatusDesc,\r\n });\r\n });\r\n this.updateFormControlOptions(\r\n 'memberType',\r\n 'dropdownOptions',\r\n this.memberTypes\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 * Gets the representing Organizations.\r\n * @param {string} orgName\r\n * @memberof AddUserRosterComponent\r\n */\r\n getOrganizations(orgName: string): void {\r\n this.organizations = [];\r\n orgName = orgName?.trimStart();\r\n this.updateFormControlOptions('representingOrg', 'autoCompleteOptions', []);\r\n if (!orgName) return;\r\n this.groupsService\r\n .getOrganizations(orgName)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => {\r\n this.organizations = [];\r\n response?.body?.forEach((option) => {\r\n this.organizations?.push({\r\n id: option.orgId,\r\n name: option.orgName,\r\n });\r\n });\r\n this.updateFormControlOptions(\r\n 'representingOrg',\r\n 'autoCompleteOptions',\r\n this.organizations\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 * Update the dropdown options of Classification, Member Type and Representing Organization form fields.\r\n * @param {string} formControlName\r\n * @param {string} formControlInputProperty\r\n * @param {SelectOption[]} options\r\n * @memberof EditUserRolesComponent\r\n */\r\n updateFormControlOptions(\r\n formControlName: string,\r\n formControlInputProperty: string,\r\n options: SelectOption[]\r\n ): void {\r\n const formFields = this.dynamicFormComponent?.formFields?.toArray();\r\n formFields?.forEach((formField) => {\r\n if (\r\n formField?.component?.instance?.config?.controlName ===\r\n formControlName &&\r\n formField?.component?.instance?.[formControlInputProperty]\r\n )\r\n formField.component.instance[formControlInputProperty] = options;\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 EditUserRolesComponent\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.groupsService?.parseErrorMessage(errorCodes);\r\n this.alertService?.showMessage({\r\n status: 'custom',\r\n message: errorMessage,\r\n alertType: AlertType?.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService?.handleError(error);\r\n }\r\n }\r\n\r\n /**\r\n * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof EditUserRolesComponent\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 [leftButtonLabel]=\"leftButtonLabel\"\r\n [rightButtonLabel]=\"rightButtonLabel\"\r\n [isLegendVisible]=\"false\"\r\n [isSubmitButtonDisabled]=\"isSubmitButtonDisabled\"\r\n [colWidth]=\"colWidth\"\r\n [actionButtonAlign]=\"actionButtonAlign\"\r\n [formGroups]=\"editUserRoleFormGroup\"\r\n [isLeftButtonNeeded]=\"true\"\r\n (formSubmit)=\"onEditUserRoleFormSubmit($event)\"\r\n (formLeftButtonClicked)=\"onEditUserRoleCancelled()\"\r\n (formCheckboxSelection)=\"onUserRoleSelection($event)\"\r\n (formGroupsReference)=\"getFormGroupReference($event)\"\r\n (formChange)=\"onEditUserRoleFormChange($event)\"\r\n (formAutoCompleteSearch)=\"getOrganizations($event)\"\r\n></ieeesa-dynamic-form>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum RosterFunctionType {\r\n EDIT_ROSTER_USER_ROLE = 'EDIT_ROSTER_USER_ROLE',\r\n ADD_USER_TO_ROSTER = 'ADD_USER_TO_ROSTER',\r\n}","import {\r\n Component,\r\n EventEmitter,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { FormGroup, Validators } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport {\r\n AlertsService,\r\n AlertType,\r\n GlobalErrorHandlerService,\r\n} from '@ieeesa-npm/utility';\r\nimport {\r\n FormGrid,\r\n FormControlType,\r\n AlignType,\r\n SearchType,\r\n CheckboxOption,\r\n SelectOption,\r\n FormModel,\r\n FieldConfig,\r\n DynamicFormComponent,\r\n} from '@ieeesa-npm/presentation';\r\nimport * as screenTexts from '../../assets/constants.json';\r\nimport { GroupsValidationPatterns } from '../../assets/form-validations';\r\nimport { FormStatus } from '../../models/form-status.model';\r\nimport { GroupsService } from '../../services/groups.service';\r\nimport {\r\n AddOrEditUserIndividualRosterPayload,\r\n AddOrEditUserPayload,\r\n} from '../../models/add-or-edit-user-group.model';\r\nimport { UserInfo } from '../../models/user-info.model';\r\nimport { GroupRosterType } from '../../models/roster-type.model';\r\n/**\r\n * Component implements the view and functionalities to add group users to roster.\r\n * @export\r\n * @class AddUserRosterComponent\r\n * @implements {OnInit}\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n selector: 'ieeesa-add-user-roster',\r\n standalone: true,\r\n imports: [CommonModule, DynamicFormComponent, MatDialogModule],\r\n templateUrl: './add-user-roster.component.html',\r\n styleUrls: ['./add-user-roster.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [AlertsService],\r\n})\r\nexport class AddUserRosterComponent implements OnInit, OnDestroy {\r\n destroy$ = new Subject<boolean>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = screenTexts;\r\n addUserRosterTexts = this.constants?.addUserRoster;\r\n leftButtonLabel = this.addUserRosterTexts?.label?.leftButtonLabel;\r\n rightButtonLabel = this.addUserRosterTexts?.label?.rightButtonLabel;\r\n isSubmitButtonDisabled = false;\r\n colWidth: FormGrid = { xs: 12, xl: 12, sm: 12, md: 12, lg: 12 };\r\n searchUserFormGroup!: FormModel;\r\n addUserFormGroup!: FormModel;\r\n actionButtonAlign = AlignType.LEFT;\r\n addUserFormGroupRef!: FormGroup;\r\n isSearchUserForm = true;\r\n userRoles: CheckboxOption[] = [];\r\n selectedUserRoles: string[] = [];\r\n userInfo!: UserInfo;\r\n isAddUserFormEmailSearch = false;\r\n classifications: SelectOption[] = [];\r\n memberTypes: SelectOption[] = [];\r\n organizations: SelectOption[] = [];\r\n hasClassification = false;\r\n groupRosterType!: GroupRosterType;\r\n @ViewChild(DynamicFormComponent) dynamicFormComponent!: DynamicFormComponent;\r\n @Output() submitFormResponse = new EventEmitter();\r\n @Output() formCancel = new EventEmitter();\r\n\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 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 * Initializes user roles and searchUserFormGroup.\r\n * @memberof AddUserRosterComponent\r\n */\r\n ngOnInit(): void {\r\n this.userRoles = this.groupService.getGroupTypeUserRoles();\r\n const groupType = this.groupService.getBusinessRuleOfSelectedGroup();\r\n this.hasClassification = groupType?.hasClassification ?? false;\r\n this.groupRosterType = groupType?.rosterType as GroupRosterType;\r\n if (!this.groupRosterType)\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n message: this.constants?.errors?.ER1001,\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n else {\r\n if (this.groupRosterType === GroupRosterType.INDIVIDUAL) {\r\n if (this.hasClassification) this.getClassifications();\r\n this.getMemberTypes();\r\n }\r\n this.createSearchUserFormGroup();\r\n }\r\n }\r\n\r\n /**\r\n * Creates search user form group\r\n * @memberof AddUserRosterComponent\r\n */\r\n createSearchUserFormGroup(): void {\r\n this.searchUserFormGroup = {\r\n formGroup: [\r\n {\r\n legend: '',\r\n controls: [\r\n {\r\n type: FormControlType.INPUT,\r\n label: this.addUserRosterTexts?.label?.email + '*',\r\n controlName: 'emailAddress',\r\n requiredErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.required,\r\n isEmail: true,\r\n supportMessage:\r\n this.addUserRosterTexts?.supportText?.emailAddress,\r\n patternErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.pattern?.email,\r\n validation: [\r\n Validators.required,\r\n Validators.pattern(GroupsValidationPatterns.email),\r\n ],\r\n ariaLabel: this.addUserRosterTexts?.label?.ariaLabel?.email,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById?.email,\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n }\r\n\r\n /**\r\n * Checks form validity and searches the user by entered email.\r\n * @param {FormGroup[]} form\r\n * @memberof AddUserRosterComponent\r\n */\r\n onSearchUserFormSubmit(form: FormGroup[]): void {\r\n this.isAddUserFormEmailSearch = false;\r\n if (form[0]?.status === FormStatus.VALID) {\r\n this.searchUserByEmail(form[0].getRawValue()?.emailAddress);\r\n }\r\n }\r\n\r\n /**\r\n * Searches the user by entered email and gets the user details when the email id is found.\r\n * @param {string} email\r\n * @memberof AddUserRosterComponent\r\n */\r\n searchUserByEmail(email: string): void {\r\n this.groupService\r\n .getUserByEmail(email)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n if (res?.status) {\r\n this.userInfo = res?.body;\r\n this.validateUserExistence();\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 * Validates whether the user is exists in the selected group and then creates add user form when the user does not exist in the selected group.\r\n * @memberof AddUserRosterComponent\r\n */\r\n validateUserExistence(): void {\r\n const payload = {\r\n payload: {\r\n groupId: this.groupService.getSelectedGroupInfo()?.groupId as string,\r\n userId: this.userInfo?.userId,\r\n },\r\n };\r\n this.groupService\r\n .getGroupUserDetails(payload)\r\n .pipe(takeUntil(this.destroy$))\r\n ?.subscribe({\r\n next: () => {\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n message: this.constants?.errors?.['1022'],\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error: (error: any) => {\r\n const errorCodes = error?.error?.body?.errorCodes;\r\n if (errorCodes?.includes('1026')) {\r\n this.isSearchUserForm = false;\r\n this.rightButtonLabel =\r\n this.addUserRosterTexts?.label?.saveButtonLabel;\r\n if (!this.isAddUserFormEmailSearch) {\r\n this.selectedUserRoles = [];\r\n this.isSubmitButtonDisabled = true;\r\n this.addUserFormGroup = {\r\n formGroup: [\r\n {\r\n legend: '',\r\n controls: [\r\n {\r\n type: FormControlType.SEARCH,\r\n label: this.addUserRosterTexts?.label?.email + '*',\r\n controlName: 'emailSearch',\r\n value: this.userInfo?.email,\r\n searchType: SearchType.ON_CLICK,\r\n validation: [\r\n Validators.required,\r\n Validators.pattern(GroupsValidationPatterns.email),\r\n ],\r\n supportMessage:\r\n this.addUserRosterTexts?.supportText?.emailAddress,\r\n requiredErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.required,\r\n patternErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.pattern\r\n ?.email,\r\n ariaLabel:\r\n this.addUserRosterTexts?.label?.ariaLabel?.email,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById\r\n ?.email,\r\n },\r\n {\r\n type: FormControlType.TEXT_AREA,\r\n label: this.addUserRosterTexts?.label?.fullName + '*',\r\n controlName: 'fullName',\r\n value: this.userInfo?.name,\r\n validation: [Validators.required],\r\n requiredErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.required,\r\n isReadonly: true,\r\n ariaMultiline: false,\r\n ariaLabel:\r\n this.addUserRosterTexts?.label?.ariaLabel?.fullName,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById\r\n ?.fullName,\r\n },\r\n {\r\n type: FormControlType.CHECKBOX,\r\n label:\r\n this.groupRosterType === GroupRosterType.INDIVIDUAL\r\n ? this.addUserRosterTexts?.label?.role\r\n : this.addUserRosterTexts?.label?.role + '*',\r\n controlName: 'roles',\r\n checkboxOptions: this.userRoles,\r\n minSelectionRequired: 1,\r\n ariaLabel:\r\n this.addUserRosterTexts?.label?.ariaLabel?.role,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById\r\n ?.role,\r\n supportMessage:\r\n this.groupRosterType === GroupRosterType.INDIVIDUAL\r\n ? this.addUserRosterTexts?.supportText\r\n ?.roleForIndividualRoster\r\n : this.addUserRosterTexts?.supportText?.role,\r\n requiredErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.required,\r\n validation:\r\n this.groupRosterType === GroupRosterType.INDIVIDUAL\r\n ? []\r\n : [Validators.required],\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n if (this.groupRosterType === GroupRosterType.INDIVIDUAL) {\r\n this.updateAddUserFormGroup();\r\n }\r\n } else {\r\n this.addUserFormGroupRef\r\n ?.get('emailSearch')\r\n ?.setValue(this.userInfo?.email);\r\n this.addUserFormGroupRef\r\n ?.get('fullName')\r\n ?.setValue(this.userInfo?.name);\r\n this.isSubmitButtonDisabled =\r\n this.groupService.isSubmitButtonDisabled(\r\n this.groupRosterType,\r\n this.addUserFormGroupRef?.status,\r\n this.selectedUserRoles\r\n );\r\n }\r\n } else this.handleErrors(error);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Adds classification, Member Type and Representing Organization form controls while adding new user to an individual group roster.\r\n * @memberof AddUserRosterComponent\r\n */\r\n updateAddUserFormGroup(): void {\r\n if (this.hasClassification)\r\n this.updateAddUserFormControls(\r\n this.addUserFormGroup.formGroup[0].controls.length - 1,\r\n {\r\n type: FormControlType.SELECT,\r\n label: this.addUserRosterTexts?.label?.classification + '*',\r\n controlName: 'classification',\r\n dropdownOptions: this.classifications,\r\n validation: [Validators.required],\r\n placeholder: '',\r\n supportMessage: this.addUserRosterTexts?.supportText?.classification,\r\n requiredErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.required,\r\n ariaLabel: this.addUserRosterTexts?.label?.ariaLabel?.classification,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById?.classification,\r\n }\r\n );\r\n this.updateAddUserFormControls(\r\n this.addUserFormGroup.formGroup[0].controls.length - 1,\r\n {\r\n type: FormControlType.SELECT,\r\n label: this.addUserRosterTexts?.label?.memberType + '*',\r\n controlName: 'memberType',\r\n dropdownOptions: this.memberTypes,\r\n validation: [Validators.required],\r\n placeholder: '',\r\n supportMessage: this.addUserRosterTexts?.supportText?.memberType,\r\n requiredErrorMessage: this.addUserRosterTexts?.message?.error?.required,\r\n ariaLabel: this.addUserRosterTexts?.label?.ariaLabel?.memberType,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById?.memberType,\r\n }\r\n );\r\n this.updateAddUserFormControls(\r\n this.addUserFormGroup.formGroup[0].controls.length,\r\n {\r\n type: FormControlType.AUTO_COMPLETE,\r\n label: this.addUserRosterTexts?.label?.representingOrganization + '*',\r\n controlName: 'representingOrg',\r\n validation: [\r\n Validators.required,\r\n Validators.maxLength(\r\n GroupsValidationPatterns.representingOrgNameMaxLength\r\n ),\r\n Validators.pattern(GroupsValidationPatterns.representingOrganization),\r\n ],\r\n autoCompleteOptions: this.organizations,\r\n supportMessage:\r\n this.addUserRosterTexts?.supportText?.representingOrganization,\r\n requiredErrorMessage: this.addUserRosterTexts?.message?.error?.required,\r\n maxErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.limit\r\n ?.representingOrganization,\r\n patternErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.pattern\r\n ?.representingOrganization,\r\n ariaLabel:\r\n this.addUserRosterTexts?.label?.ariaLabel?.representingOrganization,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById\r\n ?.representingOrganization,\r\n }\r\n );\r\n }\r\n /**\r\n * Updates the add user form group controls by adding fieldConfig at required index.\r\n * @param {number} indexPosition\r\n * @param {FieldConfig} fieldConfig\r\n * @memberof AddUserRosterComponent\r\n */\r\n updateAddUserFormControls(\r\n indexPosition: number,\r\n fieldConfig: FieldConfig\r\n ): void {\r\n this.addUserFormGroup.formGroup[0].controls.splice(\r\n indexPosition,\r\n 0,\r\n fieldConfig\r\n );\r\n }\r\n\r\n /**\r\n * Handles add user form email search\r\n * @param {string} email\r\n * @memberof AddUserRosterComponent\r\n */\r\n formSearchApply(email: string): void {\r\n this.isAddUserFormEmailSearch = true;\r\n if (email.trim()) this.searchUserByEmail(email.trim());\r\n else {\r\n this.userInfo.name = '';\r\n this.addUserFormGroupRef?.get('fullName')?.setValue('');\r\n this.isSubmitButtonDisabled = true;\r\n }\r\n }\r\n\r\n /**\r\n * Assigns role to user on form submission.\r\n * @param {FormGroup[]} form\r\n * @memberof AddUserRosterComponent\r\n */\r\n onAddUserFormSubmit(form: FormGroup[]): void {\r\n form[0]?.markAllAsTouched();\r\n if (form[0].status === FormStatus.VALID) {\r\n this.groupService\r\n .addNewGroupUser(\r\n this.getAddNewUserPayload(form[0]?.getRawValue()),\r\n this.groupRosterType\r\n )\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 // 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 /**\r\n * Get add user form group reference.\r\n * @param {FormGroup[]} form\r\n * @memberof AddUserRosterComponent\r\n */\r\n getAddUserFormGroupRef(form: FormGroup[]) {\r\n this.addUserFormGroupRef = form[0];\r\n }\r\n\r\n /**\r\n * Handles user role selection in add user form.\r\n * @param {CheckboxOption} event\r\n * @memberof AddUserRosterComponent\r\n */\r\n onUserRoleSelection(event: CheckboxOption): void {\r\n if (event?.checked) {\r\n this.selectedUserRoles?.push(event.id as string);\r\n } else {\r\n this.selectedUserRoles = this.selectedUserRoles.filter(\r\n (value) => value !== event.id\r\n );\r\n }\r\n this.isSubmitButtonDisabled = this.groupService.isSubmitButtonDisabled(\r\n this.groupRosterType,\r\n this.addUserFormGroupRef?.status,\r\n this.selectedUserRoles\r\n );\r\n }\r\n /**\r\n * Emits form cancel event.\r\n * @memberof AddUserRosterComponent\r\n */\r\n onFormCancel(): void {\r\n this.formCancel.emit();\r\n }\r\n /**\r\n * Gets the classifications from master data.\r\n * @memberof AddUserRosterComponent\r\n */\r\n getClassifications(): void {\r\n this.groupService\r\n .getClassifications()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => {\r\n response?.body?.forEach((option) => {\r\n this.classifications?.push({\r\n id: option.classificationId,\r\n name: option.classificationDesc,\r\n });\r\n });\r\n this.updateFormControlOptions(\r\n 'classification',\r\n 'dropdownOptions',\r\n this.classifications\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 * Gets the member types from master data.\r\n * @memberof AddUserRosterComponent\r\n */\r\n getMemberTypes(): void {\r\n this.groupService\r\n .getMemberTypes()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => {\r\n response?.body?.forEach((option) => {\r\n this.memberTypes?.push({\r\n id: option.memberStatusId,\r\n name: option.memberStatusDesc,\r\n });\r\n });\r\n this.updateFormControlOptions(\r\n 'memberType',\r\n 'dropdownOptions',\r\n this.memberTypes\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 * Gets the representing Organizations.\r\n * @param {string} orgName\r\n * @memberof AddUserRosterComponent\r\n */\r\n getOrganizations(orgName: string): void {\r\n this.organizations = [];\r\n orgName = orgName?.trimStart();\r\n this.updateFormControlOptions('representingOrg', 'autoCompleteOptions', []);\r\n if (!orgName) return;\r\n this.groupService\r\n .getOrganizations(orgName)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => {\r\n this.organizations = [];\r\n response?.body?.forEach((option) => {\r\n this.organizations?.push({\r\n id: option.orgId,\r\n name: option.orgName,\r\n });\r\n });\r\n this.updateFormControlOptions(\r\n 'representingOrg',\r\n 'autoCompleteOptions',\r\n this.organizations\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 * Update the dropdown options of Classification, Member Type and Representing Organization form fields.\r\n * @param {string} formControlName\r\n * @param {string} formControlInputProperty\r\n * @param {SelectOption[]} options\r\n * @memberof AddUserRosterComponent\r\n */\r\n updateFormControlOptions(\r\n formControlName: string,\r\n formControlInputProperty: string,\r\n options: SelectOption[]\r\n ): void {\r\n const formFields = this.dynamicFormComponent?.formFields?.toArray();\r\n formFields?.forEach((formField) => {\r\n if (\r\n formField?.component?.instance?.config?.controlName ===\r\n formControlName &&\r\n formField?.component?.instance?.[formControlInputProperty]\r\n )\r\n formField.component.instance[formControlInputProperty] = options;\r\n });\r\n }\r\n\r\n /**\r\n * Handles the custom errors while searching user by email, validating user existence and adding new user to roster.\r\n * @param {*} error\r\n * @memberof AddUserRosterComponent\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 * Handles add user form change event.\r\n * @param {FormGroup[]} form\r\n * @memberof AddUserRosterComponent\r\n */\r\n onAddUserFormChange(form: FormGroup[]): void {\r\n this.addUserFormGroupRef = form[0];\r\n this.isSubmitButtonDisabled = this.groupService.isSubmitButtonDisabled(\r\n this.groupRosterType,\r\n this.addUserFormGroupRef?.status,\r\n this.selectedUserRoles\r\n );\r\n }\r\n /**\r\n * Constructs add new user payload from the form data depends on the GroupRosterType and returns.\r\n * @param {*} formData\r\n * @return {(AddOrEditUserPayload | AddOrEditUserIndividualRosterPayload)}\r\n * @memberof AddUserRosterComponent\r\n */\r\n getAddNewUserPayload(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n formData: any\r\n ): AddOrEditUserPayload | AddOrEditUserIndividualRosterPayload {\r\n let payload: AddOrEditUserPayload | AddOrEditUserIndividualRosterPayload;\r\n if (this.groupRosterType === GroupRosterType.INDIVIDUAL) {\r\n payload = {\r\n payload: {\r\n email: this.userInfo?.email,\r\n userId: this.userInfo?.userId,\r\n roles: this.selectedUserRoles,\r\n groupId: this.groupService.selectedGroupInfo?.groupId as string,\r\n memberStatus: {\r\n memberStatusId: formData?.memberType\r\n ? formData?.memberType?.id\r\n : '',\r\n },\r\n organization: {\r\n orgId: formData?.representingOrg?.id ?? '',\r\n orgName:\r\n formData?.representingOrg?.name ?? formData?.representingOrg,\r\n },\r\n },\r\n };\r\n if (this.hasClassification)\r\n payload.payload.classification = {\r\n classificationId: formData?.classification\r\n ? formData?.classification?.id\r\n : '',\r\n };\r\n } else\r\n payload = {\r\n payload: {\r\n email: this.userInfo?.email,\r\n roles: this.selectedUserRoles,\r\n userId: this.userInfo?.userId,\r\n groupId: this.groupService.selectedGroupInfo?.groupId as string,\r\n },\r\n };\r\n return payload;\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 AddUserRosterComponent\r\n */\r\n ngOnDestroy(): void {\r\n if (this.destroy$) {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n }\r\n}\r\n","<ieeesa-dynamic-form\r\n *ngIf=\"searchUserFormGroup && isSearchUserForm\"\r\n class=\"ieeesa-search-user-form\"\r\n [leftButtonLabel]=\"leftButtonLabel\"\r\n [rightButtonLabel]=\"rightButtonLabel\"\r\n [isLegendVisible]=\"false\"\r\n [colWidth]=\"colWidth\"\r\n [actionButtonAlign]=\"actionButtonAlign\"\r\n [formGroups]=\"searchUserFormGroup\"\r\n [isLeftButtonNeeded]=\"true\"\r\n (formSubmit)=\"onSearchUserFormSubmit($event)\"\r\n (formLeftButtonClicked)=\"onFormCancel()\"\r\n></ieeesa-dynamic-form>\r\n\r\n<ieeesa-dynamic-form\r\n *ngIf=\"addUserFormGroup && !isSearchUserForm\"\r\n class=\"ieeesa-add-user-form\"\r\n [leftButtonLabel]=\"leftButtonLabel\"\r\n [rightButtonLabel]=\"rightButtonLabel\"\r\n [isLegendVisible]=\"false\"\r\n [isSubmitButtonDisabled]=\"isSubmitButtonDisabled\"\r\n [colWidth]=\"colWidth\"\r\n [actionButtonAlign]=\"actionButtonAlign\"\r\n [formGroups]=\"addUserFormGroup\"\r\n [isLeftButtonNeeded]=\"true\"\r\n (formSubmit)=\"onAddUserFormSubmit($event)\"\r\n (formSearchApply)=\"formSearchApply($event)\"\r\n (formLeftButtonClicked)=\"onFormCancel()\"\r\n (formGroupsReference)=\"getAddUserFormGroupRef($event)\"\r\n (formCheckboxSelection)=\"onUserRoleSelection($event)\"\r\n (formChange)=\"onAddUserFormChange($event)\"\r\n (formAutoCompleteSearch)=\"getOrganizations($event)\"\r\n></ieeesa-dynamic-form>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum FilterType {\r\n ROLE = 'Role',\r\n MEMBER_TYPE = 'Member Type',\r\n CLASSIFICATION = 'Classification',\r\n}\r\n","/* eslint-disable no-unused-vars */\r\nexport enum TableColumnSchemaUserGroup {\r\n NAME = 'name',\r\n EMAIL = 'email',\r\n ROLE = 'role',\r\n EMPLOYER = 'employer',\r\n CLASSIFICATION = 'classification',\r\n ORGANIZATION = 'org_name',\r\n MEMBER_TYPE = 'memberType',\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n OnDestroy,\r\n OnInit,\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 { Sort } from '@angular/material/sort';\r\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\r\nimport {\r\n TableColumnSchema,\r\n TableColumnType,\r\n TableActions,\r\n TableColumnSortDirection,\r\n ChipsType,\r\n AlignType,\r\n ModalConfirmationComponent,\r\n ChipOption,\r\n CheckboxOption,\r\n DataTableComponent,\r\n FiltersAndOptions,\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 FilterUsersPayload,\r\n User,\r\n} from '../../models/user.model';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { DeleteUserGroupPayload } from '../../models/delete-user-group.model';\r\nimport { GroupFunctionType } from '../../models/group-function-type.model';\r\nimport { RosterFunctionType } from '../../models/roster-function-type.model';\r\nimport { GroupUserInfo } from '../../models/group-user-info.model';\r\nimport { GroupRosterType } from '../../models/roster-type.model';\r\nimport { FilterType } from '../../models/filter-type.model';\r\nimport { TableColumnSchemaUserGroup } from '../../models/table-column-schema-user-group.model';\r\nimport { PermissionType } from '../../models/permission-type.model';\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, MatDialogModule],\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 AfterViewInit, OnDestroy, OnInit {\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n dialogRef: any;\r\n alignmentType = AlignType;\r\n filters!: ChipOption[];\r\n columnSchema!: TableColumnSchema[];\r\n tableData!: User[];\r\n selectedRoleIds: string[] = [];\r\n selectedMemberTypeIds: string[] = [];\r\n selectedClassificationIds: string[] = [];\r\n searchPlaceholderText!: string;\r\n selectedRoles: FiltersAndOptions = {};\r\n selectedMemberTypes: FiltersAndOptions = {};\r\n selectedClassifications: FiltersAndOptions = {};\r\n roles: CheckboxOption[] = [];\r\n filterOptions: CheckboxOption[] = [];\r\n memberTypes: CheckboxOption[] = [];\r\n classifications: CheckboxOption[] = [];\r\n rosterActions: TableActions = {\r\n isSearchNeeded: true,\r\n isFilterNeeded: true,\r\n isAddNeeded: false,\r\n isDeleteNeeded: false,\r\n isEditNeeded: false,\r\n };\r\n defaultSortedColumn!: string;\r\n dataTableClassName!: string;\r\n hasClassification = false;\r\n searchTerm!: string;\r\n groupRosterType!: GroupRosterType;\r\n defaultColumnSortDirection = true;\r\n tableColumnsForIndividual =\r\n this.viewRosterConstants?.tableColumnsForIndividual;\r\n tableColumnsForSystemUsers =\r\n this.viewRosterConstants?.tableColumnsForSystemUsers;\r\n emptyFieldValueReplacedBy =\r\n this.viewRosterConstants?.emptyFieldValueReplacedBy;\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 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 cdr: ChangeDetectorRef,\r\n // eslint-disable-next-line no-unused-vars\r\n private globalErrorHandlerService: GlobalErrorHandlerService\r\n ) {\r\n this.rosterActions.isAddNeeded = this.getManageRosterActionsPermission();\r\n this.rosterActions.isEditNeeded = this.getManageRosterActionsPermission();\r\n this.rosterActions.isDeleteNeeded = this.getManageRosterActionsPermission();\r\n }\r\n ngOnInit(): void {\r\n const groupType =\r\n this.groupService.getSelectedGroupInfo()?.groupTypeInfo?.businessRule;\r\n this.hasClassification = groupType?.hasClassification ?? false;\r\n this.groupRosterType = groupType?.rosterType as GroupRosterType;\r\n if (!this.groupRosterType)\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n message: this.constants?.errors?.ER1001,\r\n alertType: AlertType.WARNING,\r\n isCloseNeeded: true,\r\n });\r\n this.configureTableInfo();\r\n this.getGroupUsersAndInitializeTableView(\r\n this.defaultSortedColumn,\r\n this.defaultColumnSortDirection\r\n );\r\n }\r\n /**\r\n * Show add new user success message when canShowMessage is set true\r\n * @memberof ViewRosterComponent\r\n */\r\n ngAfterViewInit(): void {\r\n if (this.groupService?.canShowMessage) {\r\n this.groupService.canShowMessage = false;\r\n if (\r\n this.groupService?.rosterFunctionType ===\r\n RosterFunctionType?.ADD_USER_TO_ROSTER\r\n ) {\r\n this.showAlertMessage(\r\n this.constants?.addUserRoster?.message?.success?.submission,\r\n AlertType.SUCCESS\r\n );\r\n } else if (\r\n this.groupService?.rosterFunctionType ===\r\n RosterFunctionType?.EDIT_ROSTER_USER_ROLE\r\n ) {\r\n this.showAlertMessage(\r\n this.constants?.editUserRoles?.message?.success?.submission,\r\n AlertType.SUCCESS\r\n );\r\n }\r\n }\r\n const groupType = this.groupService.getBusinessRuleOfSelectedGroup();\r\n this.groupRosterType = groupType?.rosterType as GroupRosterType;\r\n }\r\n /**\r\n * Hides or shows roster add user, edit user and delete user actions based on user group permissions.\r\n * @return {boolean}\r\n * @memberof ViewRosterComponent\r\n */\r\n getManageRosterActionsPermission(): boolean {\r\n return (\r\n this.groupService.validateAccess(PermissionType.MANAGE_SYSTEM_USERS) ||\r\n this.groupService.validateAccess(PermissionType.MANAGE_GROUP_OFFICERS) ||\r\n this.groupService.validateAccess(PermissionType.MANAGE_GROUP_MEMBERS)\r\n );\r\n }\r\n\r\n /**\r\n * Configure Table information based on group roster type\r\n * @memberof ViewRosterComponent\r\n */\r\n configureTableInfo(): void {\r\n if (this.groupRosterType === GroupRosterType.INDIVIDUAL) {\r\n this.dataTableClassName = 'ieeesa-individual-roster';\r\n this.searchPlaceholderText =\r\n this.viewRosterConstants?.searchPlaceholderIndividual;\r\n this.filters = [\r\n {\r\n id: FilterType.MEMBER_TYPE,\r\n name: FilterType.MEMBER_TYPE,\r\n checked: false,\r\n chipType: ChipsType.TOGGLE,\r\n },\r\n ];\r\n this.getMemberTypes();\r\n this.columnSchema = [\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: TableColumnSchemaUserGroup.NAME,\r\n heading: this.tableColumnsForIndividual?.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: TableColumnSchemaUserGroup.EMPLOYER,\r\n heading: this.tableColumnsForIndividual?.employer,\r\n columnType: TableColumnType.TEXT,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n cellData: (element: any) =>\r\n `${element.employer ?? this.emptyFieldValueReplacedBy}`,\r\n isSortableColumn: true,\r\n },\r\n {\r\n id: 4,\r\n columnDef: TableColumnSchemaUserGroup.EMAIL,\r\n heading: this.tableColumnsForIndividual?.email,\r\n columnType: TableColumnType.TEXT,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n cellData: (element: any) =>\r\n `${element.email ?? this.emptyFieldValueReplacedBy}`,\r\n isSortableColumn: true,\r\n },\r\n {\r\n id: 5,\r\n columnDef: TableColumnSchemaUserGroup.MEMBER_TYPE,\r\n heading: this.tableColumnsForIndividual?.memberType,\r\n columnType: TableColumnType.TEXT,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n cellData: (element: any) =>\r\n `${element.memberType ?? this.emptyFieldValueReplacedBy}`,\r\n },\r\n {\r\n id: 6,\r\n columnDef: TableColumnSchemaUserGroup.ORGANIZATION,\r\n heading: this.tableColumnsForIndividual?.organizationName,\r\n columnType: TableColumnType.TEXT,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n cellData: (element: any) =>\r\n `${element.organization ?? this.emptyFieldValueReplacedBy}`,\r\n isSortableColumn: true,\r\n },\r\n {\r\n id: 8,\r\n columnDef: TableColumnSchemaUserGroup.ROLE,\r\n heading: this.tableColumnsForIndividual?.role,\r\n columnType: TableColumnType.TEXT,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n cellData: (element: any) =>\r\n `${element.role ?? this.emptyFieldValueReplacedBy}`,\r\n },\r\n ];\r\n if (this.hasClassification) {\r\n this.getClassifications();\r\n this.columnSchema.splice(this.columnSchema.length - 1, 0, {\r\n id: 7,\r\n columnDef: TableColumnSchemaUserGroup.CLASSIFICATION,\r\n heading: this.tableColumnsForIndividual?.classification,\r\n columnType: TableColumnType.TEXT,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n cellData: (element: any) =>\r\n `${element.classification ?? this.emptyFieldValueReplacedBy}`,\r\n isSortableColumn: true,\r\n });\r\n this.filters.push({\r\n id: FilterType.CLASSIFICATION,\r\n name: FilterType.CLASSIFICATION,\r\n checked: false,\r\n chipType: ChipsType.TOGGLE,\r\n });\r\n }\r\n } else if (this.groupRosterType === GroupRosterType.SYSTEM_USER) {\r\n this.dataTableClassName = 'ieeesa-system-users-roster';\r\n this.searchPlaceholderText =\r\n this.viewRosterConstants?.searchPlaceholderSystemUsers;\r\n this.filters = [\r\n {\r\n id: FilterType.ROLE,\r\n name: FilterType.ROLE,\r\n checked: false,\r\n chipType: ChipsType.TOGGLE,\r\n },\r\n ];\r\n this.columnSchema = [\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: TableColumnSchemaUserGroup.NAME,\r\n heading: this.tableColumnsForSystemUsers?.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: TableColumnSchemaUserGroup.EMAIL,\r\n heading: this.tableColumnsForSystemUsers?.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: TableColumnSchemaUserGroup.ROLE,\r\n heading: this.tableColumnsForSystemUsers?.role,\r\n columnType: TableColumnType.TEXT,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n cellData: (element: any) =>\r\n `${element.role ?? this.emptyFieldValueReplacedBy}`,\r\n },\r\n ];\r\n this.getRoles();\r\n }\r\n this.defaultSortedColumn = this.columnSchema[1].columnDef;\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(\r\n sortColumn: string,\r\n sortDirection: boolean\r\n ): void {\r\n this.groupService\r\n .getGroupUsers(\r\n this.groupService.getSelectedGroupInfo()?.groupId as string,\r\n sortColumn,\r\n sortDirection\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 this.cdr.detectChanges();\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error: (error: any) => {\r\n const errorCodes = error?.error?.body?.errorCodes;\r\n if (errorCodes?.includes('1026')) {\r\n this.tableData = [];\r\n this.cdr.detectChanges();\r\n } else this.handleErrors(error);\r\n },\r\n });\r\n }\r\n /**\r\n * Gets the groups based on the column name and sort direction.\r\n * @param {Sort} sort\r\n * @memberof ViewRosterComponent\r\n */\r\n onSortGroupUsers(sort: Sort) {\r\n this.defaultSortedColumn = sort.active;\r\n this.defaultColumnSortDirection =\r\n sort.direction === TableColumnSortDirection.ASCENDING;\r\n if (sort.direction === TableColumnSortDirection.NO_SORT) return;\r\n if (this.groupRosterType === GroupRosterType.SYSTEM_USER) {\r\n if (this.selectedRoleIds.length)\r\n this.onFilterGroupUsers([this.selectedRoles]);\r\n else\r\n this.getGroupUsersAndInitializeTableView(\r\n this.defaultSortedColumn,\r\n this.defaultColumnSortDirection\r\n );\r\n } else if (this.groupRosterType === GroupRosterType.INDIVIDUAL) {\r\n if (\r\n this.selectedClassificationIds.length ||\r\n this.selectedMemberTypeIds.length\r\n ) {\r\n this.onFilterGroupUsers([\r\n this.selectedClassifications,\r\n this.selectedMemberTypes,\r\n ]);\r\n } else\r\n this.getGroupUsersAndInitializeTableView(\r\n this.defaultSortedColumn,\r\n this.defaultColumnSortDirection\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 * Gets the classification by calling getClassifications() from groupService and sets classifications.\r\n * @memberof ViewUserRosterComponent\r\n */\r\n getClassifications(): void {\r\n this.groupService\r\n .getClassifications()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => {\r\n response?.body?.forEach((option) => {\r\n this.classifications?.push({\r\n id: option.classificationId,\r\n name: option.classificationName,\r\n checked: false,\r\n disabled: false,\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 * Gets the member types by calling getMemberTypes() from groupService and sets member types.\r\n * @memberof ViewUserRosterComponent\r\n */\r\n getMemberTypes(): void {\r\n this.groupService\r\n .getMemberTypes()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => {\r\n response?.body?.forEach((option) => {\r\n this.memberTypes?.push({\r\n id: option.memberStatusId,\r\n name: option.memberStatusName,\r\n checked: false,\r\n disabled: false,\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 * Sets the selected filter options for Member Type or Classification filter depends on the selection.\r\n * @param {ChipOption} option\r\n * @memberof ViewRosterComponent\r\n */\r\n setSelectedFilterOptions(option: ChipOption) {\r\n switch (option.id) {\r\n case FilterType.MEMBER_TYPE: {\r\n this.filterOptions = this.memberTypes;\r\n break;\r\n }\r\n case FilterType.CLASSIFICATION: {\r\n this.filterOptions = this.classifications;\r\n break;\r\n }\r\n case FilterType.ROLE: {\r\n this.filterOptions = this.roles;\r\n break;\r\n }\r\n default:\r\n break;\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 this.searchTerm = searchTerm?.trim();\r\n let payload!: SearchUsersPayload;\r\n switch (this.groupRosterType) {\r\n case GroupRosterType.SYSTEM_USER: {\r\n if (!this.searchTerm) {\r\n if (this.selectedRoleIds?.length === 0) {\r\n this.getGroupUsersAndInitializeTableView(\r\n this.defaultSortedColumn,\r\n this.defaultColumnSortDirection\r\n );\r\n return;\r\n } else if (this.selectedRoleIds?.length > 0) {\r\n this.onFilterGroupUsers([this.selectedRoles]);\r\n return;\r\n }\r\n }\r\n payload = {\r\n payload: {\r\n groupId: this.groupService.getSelectedGroupInfo()\r\n ?.groupId as string,\r\n searchByNameOrEmailOrRepOrg: this.searchTerm,\r\n filterByRoleClassificationMemberStatusIds: this.selectedRoleIds,\r\n sortColumn: this.defaultSortedColumn,\r\n ascendingOrder: this.defaultColumnSortDirection,\r\n },\r\n };\r\n break;\r\n }\r\n case GroupRosterType.INDIVIDUAL: {\r\n if (!this.searchTerm) {\r\n if (\r\n this.selectedMemberTypeIds?.length === 0 &&\r\n this.selectedClassificationIds?.length === 0\r\n ) {\r\n this.getGroupUsersAndInitializeTableView(\r\n this.defaultSortedColumn,\r\n this.defaultColumnSortDirection\r\n );\r\n return;\r\n } else if (\r\n this.selectedClassificationIds?.length > 0 ||\r\n this.selectedMemberTypeIds?.length > 0\r\n ) {\r\n this.onFilterGroupUsers([\r\n this.selectedClassifications,\r\n this.selectedMemberTypes,\r\n ]);\r\n return;\r\n }\r\n }\r\n payload = {\r\n payload: {\r\n groupId: this.groupService.getSelectedGroupInfo()\r\n ?.groupId as string,\r\n searchByNameOrEmailOrRepOrg: this.searchTerm,\r\n filterByRoleClassificationMemberStatusIds: [\r\n ...this.selectedClassificationIds,\r\n ...this.selectedMemberTypeIds,\r\n ],\r\n sortColumn: this.defaultSortedColumn,\r\n ascendingOrder: this.defaultColumnSortDirection,\r\n },\r\n };\r\n break;\r\n }\r\n default:\r\n break;\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 this.cdr.detectChanges();\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error: (error: any) => {\r\n const errorCodes = error?.error?.body?.errorCodes;\r\n const noUsersFoundErrorCodes = ['1029', '1030', '1031', '1032'];\r\n if (errorCodes && noUsersFoundErrorCodes.includes(errorCodes[0])) {\r\n this.tableData = [];\r\n this.cdr.detectChanges();\r\n } else this.handleErrors(error);\r\n },\r\n });\r\n }\r\n /**\r\n * Sets the selected options of filters and returns id of selected options\r\n * @param {FiltersAndOptions[]} selectedOptions\r\n * @param {FilterType} filterType\r\n * @param {FiltersAndOptions} selectedFilterOptions\r\n * @return {*}\r\n * @memberof ViewRosterComponent\r\n */\r\n getSelectedFilterOptionsAndIds(\r\n selectedOptions: FiltersAndOptions[],\r\n filterType: FilterType,\r\n selectedFilterOptions: FiltersAndOptions,\r\n selectedFilterIds: string[]\r\n ) {\r\n selectedOptions?.forEach((selectedOption) => {\r\n for (const [key, value] of Object.entries(selectedOption)) {\r\n if (key === filterType) {\r\n const selectedFilterOptionsList: CheckboxOption[] = [];\r\n value?.forEach((option) => {\r\n selectedFilterIds.push(option.id as string);\r\n selectedFilterOptionsList.push(option);\r\n });\r\n selectedFilterOptions[key] = selectedFilterOptionsList;\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 onFilterGroupUsers(selectedOptions: FiltersAndOptions[]): void {\r\n this.selectedRoleIds = [];\r\n this.selectedMemberTypeIds = [];\r\n this.selectedClassificationIds = [];\r\n this.selectedClassifications = {};\r\n this.selectedMemberTypes = {};\r\n let payload!: FilterUsersPayload;\r\n switch (this.groupRosterType) {\r\n case GroupRosterType.SYSTEM_USER: {\r\n this.getSelectedFilterOptionsAndIds(\r\n selectedOptions,\r\n FilterType.ROLE,\r\n this.selectedRoles,\r\n this.selectedRoleIds\r\n );\r\n if (selectedOptions?.length === 0 && !this.searchTerm) {\r\n this.getGroupUsersAndInitializeTableView(\r\n this.defaultSortedColumn,\r\n this.defaultColumnSortDirection\r\n );\r\n return;\r\n } else if (this.searchTerm) {\r\n this.onSearchGroupUsers(this.searchTerm);\r\n return;\r\n }\r\n payload = {\r\n payload: {\r\n groupId: this.groupService.getSelectedGroupInfo()\r\n ?.groupId as string,\r\n filterByRoleClassificationMemberStatusIds: this.selectedRoleIds,\r\n sortColumn: this.defaultSortedColumn,\r\n ascendingOrder: this.defaultColumnSortDirection,\r\n },\r\n };\r\n break;\r\n }\r\n case GroupRosterType.INDIVIDUAL: {\r\n this.getSelectedFilterOptionsAndIds(\r\n selectedOptions,\r\n FilterType.MEMBER_TYPE,\r\n this.selectedMemberTypes,\r\n this.selectedMemberTypeIds\r\n );\r\n this.getSelectedFilterOptionsAndIds(\r\n selectedOptions,\r\n FilterType.CLASSIFICATION,\r\n this.selectedClassifications,\r\n this.selectedClassificationIds\r\n );\r\n if (selectedOptions?.length === 0 && !this.searchTerm) {\r\n this.getGroupUsersAndInitializeTableView(\r\n this.defaultSortedColumn,\r\n this.defaultColumnSortDirection\r\n );\r\n return;\r\n } else if (this.searchTerm) {\r\n this.onSearchGroupUsers(this.searchTerm);\r\n return;\r\n }\r\n payload = {\r\n payload: {\r\n groupId: this.groupService.getSelectedGroupInfo()\r\n ?.groupId as string,\r\n filterByRoleClassificationMemberStatusIds: [\r\n ...this.selectedMemberTypeIds,\r\n ...this.selectedClassificationIds,\r\n ],\r\n sortColumn: this.defaultSortedColumn,\r\n ascendingOrder: this.defaultColumnSortDirection,\r\n },\r\n };\r\n break;\r\n }\r\n default:\r\n break;\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 this.cdr.detectChanges();\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, no-unused-vars, @typescript-eslint/no-unused-vars\r\n error: (error: any) => {\r\n const errorCodes = error?.error?.body?.errorCodes;\r\n if (errorCodes?.includes('1027')) {\r\n this.tableData = [];\r\n this.cdr.detectChanges();\r\n } else this.handleErrors(error);\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.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 * Opens the confirmation modal to get user confirmation to delete the users from the selected group.\r\n * @memberof ViewRosterComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n openUserDeleteConfirmationModal(selectedUsers: any): void {\r\n const userIds = selectedUsers.map((user: User) => user?.userId);\r\n const selectedGroupInfo = this.groupService?.getSelectedGroupInfo();\r\n const confirmationInfo = constants?.deleteUsersGroup?.confirmationInfo;\r\n const deleteUserGroupModalOptions = {\r\n leftButtonLabel: confirmationInfo?.leftButtonLabel,\r\n rightButtonLabel: confirmationInfo?.rightButtonLabel,\r\n promptMessage: `${confirmationInfo?.promptMessagePart1} ${userIds?.length} ${confirmationInfo?.promptMessagePart2} ${selectedGroupInfo?.groupName}?`,\r\n actionButtonAlign: this.alignmentType?.MIDDLE,\r\n };\r\n this.dialogRef = this.dialog.open(ModalConfirmationComponent, {\r\n data: deleteUserGroupModalOptions,\r\n width: 'auto',\r\n autoFocus: 'dialog',\r\n ariaLabel: constants?.ariaLabel?.alert,\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.deleteUsersGroup(selectedGroupInfo?.groupId as string, userIds);\r\n }\r\n });\r\n }\r\n /**\r\n * Send API request to delete the selected user(s) from the selected group and handles the success and error response.\r\n * @memberof ViewRosterComponent\r\n */\r\n deleteUsersGroup(groupId: string, userIds: string[]) {\r\n const deleteUsersGroupTexts = constants?.deleteUsersGroup;\r\n const deleteUserGroupPayload: DeleteUserGroupPayload = {\r\n payload: {\r\n [groupId]: userIds,\r\n },\r\n };\r\n this.groupService\r\n .deleteUsersGroup(deleteUserGroupPayload)\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 if (res?.status) {\r\n this.showAlertMessage(\r\n `${res.body} ${deleteUsersGroupTexts?.message?.success?.removed}`,\r\n AlertType.SUCCESS\r\n );\r\n this.getGroupUsersAndInitializeTableView(\r\n this.defaultSortedColumn,\r\n this.defaultColumnSortDirection\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 * Sets selected user info and emits event openModalNotifier with EDIT_ROSTER_USER_ROLE value.\r\n * @param {GroupUserInfo[]} selectedUserInfo\r\n * @memberof ViewRosterComponent\r\n */\r\n onEditUserRoles(selectedUserInfo: GroupUserInfo[]): void {\r\n if (this.groupRosterType === GroupRosterType.INDIVIDUAL)\r\n this.groupService.setSelectedUserInfo({\r\n email: selectedUserInfo[0]?.email,\r\n name: selectedUserInfo[0]?.name,\r\n role: selectedUserInfo[0]?.role,\r\n userId: selectedUserInfo[0]?.userId,\r\n classification: selectedUserInfo[0]?.classification,\r\n organization: selectedUserInfo[0]?.organization,\r\n memberStatus: selectedUserInfo[0]?.memberStatus,\r\n });\r\n else\r\n this.groupService.setSelectedUserInfo({\r\n email: selectedUserInfo[0]?.email,\r\n name: selectedUserInfo[0]?.name,\r\n role: selectedUserInfo[0]?.role,\r\n userId: selectedUserInfo[0]?.userId,\r\n });\r\n\r\n this.groupService?.openModalNotifier?.next(\r\n GroupFunctionType.EDIT_ROSTER_USER_ROLE\r\n );\r\n }\r\n\r\n /**\r\n * Emits openModalNotifier event with GroupFunctionType value as ADD_USER_TO_ROSTER\r\n * @memberof ViewRosterComponent\r\n */\r\n onAddNewUser(): void {\r\n this.groupService?.openModalNotifier?.next(\r\n GroupFunctionType.ADD_USER_TO_ROSTER\r\n );\r\n }\r\n\r\n /**\r\n * Handles alerts for success, 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 ViewRosterComponent\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 * 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 [searchPlaceHolderText]=\"searchPlaceholderText\"\r\n [tableActions]=\"rosterActions\"\r\n [isCellTextOverflowEllipsis]=\"true\"\r\n [filters]=\"filters\"\r\n [className]=\"dataTableClassName\"\r\n [selectedFilterOptions]=\"filterOptions\"\r\n (selectedFilter)=\"setSelectedFilterOptions($event)\"\r\n (removeFilteredOption)=\"onFilterGroupUsers($event)\"\r\n (filteredOptions)=\"onFilterGroupUsers($event)\"\r\n (searchedValue)=\"onSearchGroupUsers($event)\"\r\n (selectedRowToEdit)=\"onEditUserRoles($event)\"\r\n (selectedRowsToDelete)=\"openUserDeleteConfirmationModal($event)\"\r\n (sortChange)=\"onSortGroupUsers($event)\"\r\n (addRow)=\"onAddNewUser()\"\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 ModalComponent,\r\n SelectOption,\r\n IconButtonComponent,\r\n IconButton,\r\n AlignType,\r\n ModalConfirmationComponent,\r\n SelectComponent,\r\n LegendComponent,\r\n Legend,\r\n SearchType,\r\n SearchComponent,\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 BreakpointObserverService,\r\n AlertsService,\r\n GlobalErrorHandlerService,\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 { RosterFunctionType } from './models/roster-function-type.model';\r\nimport { GetGroupsPayload } from './models/view-group.model';\r\nimport { DeleteGroupPayload } from './models/delete-group.model';\r\nimport { AddUserRosterComponent } from './components/add-user-roster/add-user-roster.component';\r\nimport { ViewRosterComponent } from './components/view-roster/view-roster.component';\r\nimport { EditGroupAndParentInfo } from './models/edit-group.model';\r\nimport { EditUserRolesComponent } from './components/edit-user-roles/edit-user-roles.component';\r\nimport { UserPermissionsService } from './services/user-permissions.service';\r\nimport {\r\n GroupPermission,\r\n UserPermission,\r\n} from './models/group-permissions.model';\r\nimport { PermissionType } from './models/permission-type.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 editUserRolesTexts = this.constants?.editUserRoles;\r\n addUserRosterTexts = this.constants?.addUserRoster;\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 deleteGroupName!: 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 @Input() userPermissions!: UserPermission[];\r\n permissionType = PermissionType;\r\n functionType!: GroupFunctionType;\r\n alignmentType = AlignType;\r\n isSorting = true;\r\n canReopenViewRosterModal = false;\r\n searchType: SearchType = SearchType.ON_CLICK;\r\n minCharacterToSearch = 3;\r\n trimmedSearchTerm = '';\r\n userGroupPermissions!: GroupPermission[];\r\n supportMessage!: string;\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 public globalErrorHandlerService: GlobalErrorHandlerService,\r\n // eslint-disable-next-line no-unused-vars\r\n private userPermissionsService: UserPermissionsService\r\n ) {\r\n this.breakpointObserverService\r\n .getBreakpoint()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result: { matches: boolean }) => {\r\n this.isMobileView = result?.matches;\r\n });\r\n this.groupsService?.openModalNotifier?.next(GroupFunctionType.VIEW_ROSTER);\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.supportMessage =\r\n this.viewGroupTexts?.minCharRequiredToSearch1 +\r\n ' ' +\r\n this.minCharacterToSearch +\r\n ' ' +\r\n this.viewGroupTexts?.minCharRequiredToSearch2;\r\n this.userGroupPermissions =\r\n this.userPermissionsService.filterUserGroupPermissions(\r\n this.userPermissions\r\n );\r\n this.groupsService.setUserGroupPermissions(this.userGroupPermissions);\r\n this.groupsService?.setAppConfig(this.apiBaseURL, this.userPermissions);\r\n this.getGroupTypes();\r\n this.groupsService?.openModalNotifier\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((response) => {\r\n this.dialogRef?.close();\r\n if (response === GroupFunctionType.EDIT_ROSTER_USER_ROLE) {\r\n this.openEditUserRolesModal();\r\n }\r\n if (response === GroupFunctionType.ADD_USER_TO_ROSTER) {\r\n this.openAddUserRosterModal();\r\n }\r\n });\r\n }\r\n /**\r\n * Validates permission based access for provided feature.\r\n * @param {PermissionType} permissionType\r\n * @return {boolean}\r\n * @memberof GroupsComponent\r\n */\r\n validateAccess(permissionType: PermissionType): boolean {\r\n return this.userPermissionsService.validateAccessPermission(\r\n permissionType,\r\n this.userGroupPermissions\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', parentGroupInfo);\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-edit-group', editGroupInfo);\r\n }\r\n /**\r\n * Sets the dialog options for edit user roles and calls openModal method.\r\n * @memberof GroupsComponent\r\n */\r\n openEditUserRolesModal(): void {\r\n const selectedUserInfo = this.groupsService?.getSelectedUserInfo();\r\n const dialogOptions = {\r\n heading: selectedUserInfo?.name,\r\n isCloseNeeded: true,\r\n componentReference: EditUserRolesComponent,\r\n modalType: ModalType.FORM,\r\n };\r\n this.functionType = GroupFunctionType.EDIT_ROSTER_USER_ROLE;\r\n this.groupsService?.setGroupFunctionType(this.functionType);\r\n this.openModal(dialogOptions, 'ieeesa-edit-user-roles');\r\n }\r\n /**\r\n * Sets the dialog options for add users modal and calls openModal method.\r\n * @memberof GroupsComponent\r\n */\r\n openAddUserRosterModal(): void {\r\n const dialogOptions = {\r\n heading: this.addUserRosterTexts?.heading,\r\n isCloseNeeded: true,\r\n componentReference: AddUserRosterComponent,\r\n modalType: ModalType.FORM,\r\n };\r\n this.functionType = GroupFunctionType.ADD_USER_TO_ROSTER;\r\n this.groupsService?.setGroupFunctionType(this.functionType);\r\n this.openModal(dialogOptions, 'ieeesa-add-user-roster');\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 * 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, no-unused-vars\r\n openModal(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n dialogOptions: any,\r\n className?: string,\r\n groupInfo?: GroupInfo | EditGroupAndParentInfo\r\n ): void {\r\n className = className ?? '';\r\n this.dialogRef = this.dialog?.open(ModalComponent, {\r\n data: dialogOptions,\r\n width:\r\n this.functionType === GroupFunctionType.VIEW_ROSTER ||\r\n this.functionType === GroupFunctionType.EDIT_ROSTER_USER_ROLE ||\r\n this.functionType === GroupFunctionType.ADD_USER_TO_ROSTER\r\n ? ''\r\n : '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 const createGroupInfo = groupInfo as GroupInfo;\r\n if (createGroupInfo) this.getGroups(createGroupInfo);\r\n else this.getGroups();\r\n break;\r\n }\r\n case GroupFunctionType?.EDIT: {\r\n this.showAlertMessage(\r\n AlertType?.SUCCESS,\r\n this.editGroupTexts?.message?.success?.submission\r\n );\r\n const editGroupInfo = groupInfo as EditGroupAndParentInfo;\r\n if (editGroupInfo?.parentGroupInfo?.groupId === undefined) {\r\n this.getGroups();\r\n } else this.getGroups(editGroupInfo.parentGroupInfo);\r\n break;\r\n }\r\n case GroupFunctionType?.EDIT_ROSTER_USER_ROLE: {\r\n this.groupsService.canShowMessage = true;\r\n this.groupsService.setRosterFunctionType(\r\n RosterFunctionType.EDIT_ROSTER_USER_ROLE\r\n );\r\n break;\r\n }\r\n case GroupFunctionType?.ADD_USER_TO_ROSTER: {\r\n this.groupsService.canShowMessage = true;\r\n this.groupsService.setRosterFunctionType(\r\n RosterFunctionType.ADD_USER_TO_ROSTER\r\n );\r\n break;\r\n }\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 if (\r\n this.functionType === GroupFunctionType.ADD_USER_TO_ROSTER ||\r\n this.functionType === GroupFunctionType.EDIT_ROSTER_USER_ROLE\r\n ) {\r\n this.canReopenViewRosterModal = false;\r\n this.viewRoster(this.groupsService.selectedGroupInfo as GroupInfo);\r\n }\r\n });\r\n this.dialogRef\r\n ?.afterOpened()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n if (\r\n this.functionType === GroupFunctionType.ADD_USER_TO_ROSTER ||\r\n this.functionType === GroupFunctionType.EDIT_ROSTER_USER_ROLE\r\n ) {\r\n this.canReopenViewRosterModal = true;\r\n }\r\n });\r\n this.dialogRef\r\n ?.afterClosed()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n if (this.canReopenViewRosterModal) {\r\n this.canReopenViewRosterModal = false;\r\n this.viewRoster(this.groupsService.selectedGroupInfo as GroupInfo);\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 ariaLabel: this.constants?.ariaLabel?.alert,\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 * 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 this.deleteGroupName = groupInfo?.groupName;\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 * 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 * 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 * 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\r\n onGroupSearchClick(searchTerm: string): void {\r\n this.trimmedSearchTerm = searchTerm.trim();\r\n if (\r\n !this.trimmedSearchTerm &&\r\n (this.isGroupSearchActive || this.isGroupFilterActive)\r\n ) {\r\n this.onGroupTypeFiltered(this.selectGroupOptions[0]);\r\n return;\r\n }\r\n if (!this.trimmedSearchTerm) return;\r\n this.selectedGroupType = this.selectGroupOptions[0];\r\n this.isGroupSearchOrFilterActive = !!this.trimmedSearchTerm;\r\n this.onGroupSearch();\r\n this.groupsService\r\n .groupsByNameAcronym(this.trimmedSearchTerm)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => {\r\n if (response?.status) {\r\n this.parentGroupsInfo = this.viewGroupResponse(response?.body);\r\n }\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error: (error: any) => {\r\n this.parentGroupsInfo = [];\r\n this.handleErrors(error);\r\n },\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 * 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 hierarchy: node[1]?.hierarchy,\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.showGroupFilter();\r\n this.trimmedSearchTerm = '';\r\n this.groupsService?.setGroupFunctionType(GroupFunctionType?.FILTER);\r\n this.getGroups();\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 } else if (this.getGroupsPayload.groupTypeId === '') {\r\n this.getGroupsPayload = {\r\n 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 * 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 * 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 * 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 * 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 if (errorCodes?.includes('1008')) {\r\n errorMessage[0] = this.deleteGroupName + errorMessage?.[0];\r\n }\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 * 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 *ngIf=\"validateAccess(permissionType.CREATE_ROOT_GROUP)\"\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 *ngIf=\"validateAccess(permissionType.CREATE_ROOT_GROUP)\"\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 [searchTerm]=\"trimmedSearchTerm\"\r\n [searchType]=\"searchType\"\r\n [placeholderLabel]=\"searchPlaceHolderText\"\r\n [minCharacterToSearch]=\"minCharacterToSearch\"\r\n [supportMessage]=\"supportMessage\"\r\n ></ieeesa-search>\r\n\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 [userGroupPermissions]=\"userGroupPermissions\"\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-start ieeesa-label-lg-bold-16\">\r\n {{ constants?.viewGroups?.legend }}\r\n </p>\r\n <ieeesa-legend\r\n [legends]=\"groupsLegends\"\r\n [isSorting]=\"isSorting\"\r\n ></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/components/edit-user-roles/edit-user-roles.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\nexport * from './lib/models/group-user-info.model';\r\nexport * from './lib/models/add-or-edit-user-group.model';\r\nexport * from './lib/models/roster-function-type.model';\r\nexport * from './lib/models/classification.model';\r\nexport * from './lib/models/filter-type.model';\r\nexport * from './lib/models/organization.model';\r\nexport * from './lib/models/member-type.model';\r\nexport * from './lib/models/roster-type.model';\r\nexport * from './lib/models/table-column-schema-user-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":["i1.GroupPermissionsMapService","screenTexts?.errors","i1","i2.UserPermissionsService","screenTexts?.createGroup","i1.GroupsService","i3","takeUntil","map","constants","i2","constants?.deleteUsersGroup","constants?.ariaLabel","i2.GroupsService","screenTexts?.deleteGroup","i4.UserPermissionsService","i5"],"mappings":"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"}
|