@ieeesa-npm/groups 0.15.3 → 0.15.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ieeesa-npm-groups.mjs","sources":["../../../projects/groups/src/lib/assets/form-validations.ts","../../../projects/groups/src/lib/models/group-function-type.model.ts","../../../projects/groups/src/lib/components/add-working-groups/add-working-groups.component.ts","../../../projects/groups/src/lib/components/add-working-groups/add-working-groups.component.html","../../../projects/groups/src/lib/models/roster-type.model.ts","../../../projects/groups/src/lib/models/permission-type.model.ts","../../../projects/groups/src/lib/models/role-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/reciprocal-credit-section/reciprocal-credit-section.component.ts","../../../projects/groups/src/lib/components/reciprocal-credit-section/reciprocal-credit-section.component.html","../../../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\nimport { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\r\n\r\n/**\r\n * Required validator for the multi-select-autocomplete \"Representing Organization\"\r\n * control. The control's value is the array of selected chips (set by the\r\n * component), so this treats a non-empty array — or a non-empty string — as\r\n * valid. Keying off the selection (rather than the raw input text) prevents the\r\n * required error from flashing when Material momentarily writes a transient\r\n * empty value during option selection.\r\n * @return {ValidatorFn}\r\n */\r\nexport function representingOrgRequiredValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control?.value;\r\n const hasSelection = Array.isArray(value)\r\n ? value.length > 0\r\n : !!(typeof value === 'string' ? value.trim() : value);\r\n return hasSelection ? null : { required: true };\r\n };\r\n}\r\n\r\n/**\r\n * Wraps a string-oriented validator (minLength/maxLength/pattern) so it is\r\n * skipped when the control value is the selection array. Those built-in\r\n * validators evaluate `.length` / string shape and would incorrectly fail\r\n * against the chips array; they should only constrain free-text input.\r\n * @param {ValidatorFn} validator the underlying string validator\r\n * @return {ValidatorFn}\r\n */\r\nexport function skipWhenArray(validator: ValidatorFn): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n if (Array.isArray(control?.value)) {\r\n return null;\r\n }\r\n return validator(control);\r\n };\r\n}\r\n\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 representingOrgNameMinLength: 3,\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 // First or Last Name field regular expression which does not allow only whitespace or empty string.\r\n firstOrLastName: /^(?!\\s*$).+/\r\n};\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 SEARCH = 'SEARCH',\r\n REASSIGN_PARENT_GROUP = 'REASSIGN_PARENT_GROUP',\r\n EDIT_ROSTER_USER_ROLE = 'EDIT_ROSTER_USER_ROLE',\r\n ADD_USER_TO_ROSTER = 'ADD_USER_TO_ROSTER',\r\n}","import { Component, Inject, ViewEncapsulation } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport {\r\n MAT_DIALOG_DATA,\r\n MatDialogModule,\r\n MatDialogRef,\r\n} from '@angular/material/dialog';\r\nimport { AvailableForeignGroup } from '../../models/reciprocal-credit.model';\r\n\r\n/** Data passed into the Add Working Groups modal. */\r\nexport interface AddWorkingGroupsDialogData {\r\n availableGroups: AvailableForeignGroup[];\r\n selectedGroupIds: string[];\r\n}\r\n\r\n/** Row model with a local selection flag. */\r\ninterface WorkingGroupRow extends AvailableForeignGroup {\r\n selected: boolean;\r\n}\r\n\r\n/**\r\n * Modal to select one or more foreign working groups (under the same committee)\r\n * for reciprocal credit. Provides search and a checkbox table. Returns the\r\n * selected AvailableForeignGroup[] on Add.\r\n * @export\r\n * @class AddWorkingGroupsComponent\r\n */\r\n@Component({\r\n // eslint-disable-next-line @angular-eslint/component-selector\r\n selector: 'ieeesa-add-working-groups',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, MatButtonModule, MatDialogModule],\r\n templateUrl: './add-working-groups.component.html',\r\n styleUrls: ['./add-working-groups.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class AddWorkingGroupsComponent {\r\n rows: WorkingGroupRow[] = [];\r\n searchTerm = '';\r\n\r\n // eslint-disable-next-line no-unused-vars\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private dialogRef: MatDialogRef<AddWorkingGroupsComponent>,\r\n // eslint-disable-next-line no-unused-vars\r\n @Inject(MAT_DIALOG_DATA) private data: AddWorkingGroupsDialogData\r\n ) {\r\n const selectedIds = new Set(this.data?.selectedGroupIds ?? []);\r\n this.rows = (this.data?.availableGroups ?? []).map((group) => ({\r\n ...group,\r\n selected: selectedIds.has(group.groupId),\r\n }));\r\n }\r\n\r\n /** Rows filtered by the search term (group name). */\r\n get filteredRows(): WorkingGroupRow[] {\r\n const term = this.searchTerm.trim().toLowerCase();\r\n if (!term) return this.rows;\r\n return this.rows.filter((row) =>\r\n row.groupName.toLowerCase().includes(term)\r\n );\r\n }\r\n\r\n /** Count of currently selected rows (for the title). */\r\n get selectedCount(): number {\r\n return this.rows.filter((row) => row.selected).length;\r\n }\r\n\r\n /** Toggle a row's selection. */\r\n toggleRow(row: WorkingGroupRow): void {\r\n row.selected = !row.selected;\r\n }\r\n\r\n onCancel(): void {\r\n this.dialogRef.close();\r\n }\r\n\r\n onAdd(): void {\r\n const selected: AvailableForeignGroup[] = this.rows\r\n .filter((row) => row.selected)\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars\r\n .map(({ selected, ...group }) => group);\r\n this.dialogRef.close(selected);\r\n }\r\n}\r\n","<div class=\"ieeesa-add-working-groups\">\r\n <div class=\"ieeesa-add-working-groups__header\">\r\n <h2 class=\"ieeesa-add-working-groups__title\">\r\n Add Working Groups ({{ selectedCount }})\r\n </h2>\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-add-working-groups__close\"\r\n (click)=\"onCancel()\"\r\n aria-label=\"Close\"\r\n >\r\n ×\r\n </button>\r\n </div>\r\n\r\n <p class=\"ieeesa-add-working-groups__subtitle\">Choose working groups under the same committee</p>\r\n\r\n <!-- Search -->\r\n <div class=\"ieeesa-add-working-groups__search\">\r\n <input\r\n type=\"text\"\r\n [(ngModel)]=\"searchTerm\"\r\n placeholder=\"Search by name...\"\r\n aria-label=\"Search working groups\"\r\n />\r\n </div>\r\n\r\n <!-- Table -->\r\n <div class=\"ieeesa-add-working-groups__table\">\r\n <div class=\"ieeesa-add-working-groups__table-head\">\r\n <span class=\"ieeesa-add-working-groups__col-name\">Working Group</span>\r\n </div>\r\n\r\n <div\r\n *ngFor=\"let row of filteredRows\"\r\n class=\"ieeesa-add-working-groups__row\"\r\n >\r\n <label class=\"ieeesa-add-working-groups__col-name\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"row.selected\"\r\n (change)=\"toggleRow(row)\"\r\n />\r\n <span>{{ row.groupName }}</span>\r\n </label>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"filteredRows.length === 0\"\r\n class=\"ieeesa-add-working-groups__empty\"\r\n >\r\n No working groups found.\r\n </div>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"ieeesa-add-working-groups__actions\">\r\n <button\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-tertiary-button\"\r\n (click)=\"onCancel()\"\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-primary-button\"\r\n [disabled]=\"selectedCount === 0\"\r\n (click)=\"onAdd()\"\r\n >\r\n Add\r\n </button>\r\n </div>\r\n</div>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum GroupRosterType {\r\n INDIVIDUAL = 'Individual',\r\n SYSTEM_USER = 'User',\r\n ENTITY = 'Entity',\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 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 MANAGE_SYSTEM_USERS = 'MANAGE_SYSTEM_USERS',\r\n VIEW_ALL_GROUPS = 'VIEW_ALL_GROUPS',\r\n MANAGE_ALL_GROUPS = 'MANAGE_ALL_GROUPS',\r\n VIEW_ALL_ROSTERS = 'VIEW_ALL_ROSTERS',\r\n MANAGE_ALL_ROSTERS = 'MANAGE_ALL_ROSTERS',\r\n}\r\n","/* eslint-disable no-unused-vars */\r\nexport enum RoleType {\r\n OFFICER = 'Officer',\r\n SYSTEM = 'System',\r\n MEMBER_LEVEL = 'Member Level',\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_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_fc522748-e2d4-440c-b6c6-41aaca75a80f',\r\n },\r\n {\r\n permissionType: PermissionType.CREATE_SUBGROUP,\r\n permissionName: 'Create Subgroup',\r\n permissionId: 'PERM_8f8a203e-d992-4555-9c42-ac6970f2d376',\r\n },\r\n {\r\n permissionType: PermissionType.DELETE_GROUP,\r\n permissionName: 'Delete Group',\r\n permissionId: 'PERM_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_d64e1f09-d3f7-4f86-a94c-4782a2f60571',\r\n },\r\n {\r\n permissionType: PermissionType.VIEW_GROUP_OFFICERS,\r\n permissionName: 'View Group Officers',\r\n permissionId: 'PERM_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_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_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_1969fecb-6383-446e-9276-b6a7b7265cb4',\r\n },\r\n ];\r\n globalGroupPermissions: GroupPermission[] = [\r\n {\r\n permissionType: PermissionType.MANAGE_SYSTEM_USERS,\r\n permissionName: 'Manage System Users',\r\n permissionId: 'PERM_d2c103e9-20c6-4dd5-b320-f7d4d017c574',\r\n },\r\n {\r\n permissionType: PermissionType.VIEW_ALL_GROUPS,\r\n permissionName: 'View All Group Details',\r\n permissionId: 'PERM_741d7504-7595-4bec-811f-8d601333e7c4',\r\n },\r\n {\r\n permissionType: PermissionType.MANAGE_ALL_GROUPS,\r\n permissionName: 'Manage All Group Details',\r\n permissionId: 'PERM_eebde105-0b53-44c8-babc-066be903229f',\r\n },\r\n {\r\n permissionType: PermissionType.VIEW_ALL_ROSTERS,\r\n permissionName: 'View All Rosters',\r\n permissionId: 'PERM_0109d7c7-6d64-4673-b63b-3a23f3323530',\r\n },\r\n {\r\n permissionType: PermissionType.MANAGE_ALL_ROSTERS,\r\n permissionName: 'Manage All Rosters',\r\n permissionId: 'PERM_6fec2e8c-1b48-46a9-b394-34d3648d6fe8',\r\n },\r\n ];\r\n /**\r\n * Returns group-wise permission mappings.\r\n * @return {GroupPermission[]}\r\n * @memberof GroupPermissionsMapService\r\n */\r\n getGroupPermissions(): GroupPermission[] {\r\n return this.groupPermissions;\r\n }\r\n /**\r\n * Returns global permissions mapping for groups.\r\n * Global permissions are maintained separately as global permissions also include role based group wise permissions irrespective of the attached group.\r\n * @return {GroupPermission[]}\r\n * @memberof GroupPermissionsMapService\r\n */\r\n getGlobalGroupPermissions(): GroupPermission[] {\r\n return this.globalGroupPermissions;\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(\r\n userPermissions: UserPermission[],\r\n groupPermissions: GroupPermission[]\r\n ): GroupPermission[] {\r\n const userGroupPermissions = groupPermissions?.filter(\r\n (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 FilterUsersPayload,\r\n GetGroupUsersResponse,\r\n User,\r\n LoggedInUserInfo,\r\n} from '../models/user.model';\r\nimport { Role } from '../models/role.model';\r\nimport { EditGroupPayload } from '../models/edit-group.model';\r\nimport {\r\n AvailableForeignGroup,\r\n ReciprocalCreditConfigRow,\r\n ReciprocalCreditResponse,\r\n SaveReciprocalCreditPayload,\r\n} from '../models/reciprocal-credit.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 RepresentingOrganization,\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 {\r\n OrganizationRequestPayload,\r\n OrganizationResponse,\r\n} from '../models/organization.model';\r\nimport { ClassificationResponse } from '../models/classification.model';\r\nimport { GroupRosterType } from '../models/roster-type.model';\r\nimport { FormStatus, CheckboxOption, AlertType } from '@ieeesa-npm/models';\r\nimport { FormControlStatus } from '@angular/forms';\r\nimport {\r\n GroupPermission,\r\n UserPermission,\r\n} from '../models/group-permissions.model';\r\nimport { PermissionType } from '../models/permission-type.model';\r\nimport { UserPermissionsService } from './user-permissions.service';\r\nimport { GroupPermissionsMapService } from './group-permissions-map-service';\r\nimport { ParentGroupsInfo } from '../models/parent-groups-info.model';\r\nimport { RoleType } from '../models/role-type.model';\r\n\r\n/**\r\n * Groups service is an abstract layer and responsible for managing groups REST API calls.\r\n * @class GroupsService\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class GroupsService {\r\n groupsText = screenTexts?.errors;\r\n apiBaseUrl!: string;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n userPermission: any;\r\n selectedGroupInfo!: GroupInfo | undefined;\r\n groupFunctionType!: GroupFunctionType;\r\n selectedGroupParentInfo!: GroupInfo | undefined;\r\n 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 isParentGroupChanged = false;\r\n userInfo!: LoggedInUserInfo;\r\n memberTypes!: Role[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n representingOrganizations: RepresentingOrganization[] = [];\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 private groupPermissionsService: GroupPermissionsMapService,\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}/groups/config/groupTypeConfigInfo`)\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 * Get allowed parent groups from API and returns it as an observable.\r\n * @param {string} groupId\r\n * @return {Observable<GroupTypeResponse>}\r\n * @memberof GroupsService\r\n */\r\n getAllowedParentGroups(groupId: string): Observable<ParentGroupsInfo[]> {\r\n return this.httpService\r\n .getData(`${this.apiBaseUrl}/groups/allowedParentGroups/${groupId}`)\r\n .pipe(\r\n map((response) => {\r\n return response?.body;\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(\r\n this.groupsText[errorMessageKey] ??\r\n errorCodes[index] ??\r\n this.groupsText?.default\r\n );\r\n });\r\n return errorMessage;\r\n }\r\n\r\n /**\r\n * Handles custom API errors: maps BE error codes to messages and shows an\r\n * alert. Mirrors the events-and-meetings error handling so reciprocal-credit\r\n * failures (e.g. MTG-011 duplicate, MTG-012 permission) surface consistently.\r\n * @param {*} error the HttpErrorResponse from a failed call\r\n * @param {boolean} [showAlert=true] whether to display the alert\r\n * @memberof GroupsService\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n handleErrors(error: any, showAlert = true): void {\r\n const errorCodes = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes) && !error?.error?.status) {\r\n const errorMessage = this.parseErrorMessage(errorCodes);\r\n if (showAlert) {\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 }\r\n }\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 const memberTypes: Role[] = [];\r\n response?.body?.forEach((role: Role) => {\r\n if (role?.roleTypeName === RoleType.MEMBER_LEVEL) {\r\n memberTypes.push(role);\r\n } else {\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 });\r\n this.setGroupTypeUserRoles(rolesOption);\r\n this.setMemberTypes(memberTypes);\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 * Returns the true if logged in user is admin.\r\n * @return {boolean}\r\n * @memberof GroupsService\r\n */\r\n isAdminUser(): boolean {\r\n return this.validateAccess(PermissionType.MANAGE_SYSTEM_USERS);\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 this.representingOrganizations = [];\r\n response?.body?.forEach((item) => {\r\n const classificationDesc =\r\n item.classification?.classificationName +\r\n ' (' +\r\n item.classification?.classificationDesc +\r\n ')';\r\n const rolesList = item?.rolesList?.reduce(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (roleList: any, role: Role) => {\r\n roleList[\r\n role.roleTypeName === RoleType.MEMBER_LEVEL ? 'memberType' : 'roles'\r\n ].push(role?.roleName);\r\n return roleList;\r\n },\r\n { memberType: [], roles: [] }\r\n );\r\n this.representingOrganizations?.push({\r\n userId: item?.userId,\r\n organizations: item?.organizations,\r\n });\r\n const organizations = item?.organizations\r\n ? item?.organizations?.map((org) => org?.orgName).join('; ')\r\n : null;\r\n users.push({\r\n userId: item.userId,\r\n name: item.name,\r\n email: item.email,\r\n role: rolesList?.roles?.length ? rolesList?.roles?.join(', ') : null,\r\n classification: item.classification?.classificationId\r\n ? classificationDesc\r\n : null,\r\n memberStatus: rolesList?.memberType?.length\r\n ? rolesList?.memberType[0]\r\n : null,\r\n organization: organizations,\r\n employer: item.employer?.orgName ?? null,\r\n canDelete: !(\r\n item?.userId === this.userInfo?.userId &&\r\n this.isAdminUser() &&\r\n this.getBusinessRuleOfSelectedGroup()?.isAdmin\r\n ),\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 ): 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 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(\r\n searchTerm: string,\r\n filteredGroupType?: number\r\n ): Observable<GetGroupResponse> {\r\n const searchGroupsUrl = `${this.apiBaseUrl}/groups/groupsByNameAcronym?name=${searchTerm}`;\r\n return this.httpService\r\n .getData(\r\n filteredGroupType\r\n ? searchGroupsUrl + `&groupType=${filteredGroupType}`\r\n : searchGroupsUrl\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 * 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 * Sets the logged In user information.\r\n * @param {LoggedInUserInfo} userInfo\r\n * @memberof GroupsService\r\n */\r\n setUserInfo(userInfo: LoggedInUserInfo): void {\r\n this.userInfo = userInfo;\r\n }\r\n /**\r\n * Returns the logged in user information.\r\n * @return {LoggedInUserInfo}\r\n * @memberof GroupsService\r\n */\r\n getUserInfo(): LoggedInUserInfo {\r\n return this.userInfo;\r\n }\r\n /**\r\n * Validates permission based access for provided feature.\r\n * Checks for group level permissions, and provides access based on individual group permissions.\r\n * For global permissions provides access across the individual groups or System groups.\r\n * @param {PermissionType} permissionType\r\n * @return {boolean}\r\n * @memberof GroupsService\r\n */\r\n validateAccess(\r\n permissionType: PermissionType,\r\n permissions?: UserPermission[] | null\r\n ): boolean {\r\n if (permissions) {\r\n const userPermissionsToGroup =\r\n this.userPermissionsService.filterUserGroupPermissions(\r\n permissions,\r\n this.groupPermissionsService.getGroupPermissions()\r\n );\r\n return this.userPermissionsService.validateAccessPermission(\r\n permissionType,\r\n userPermissionsToGroup\r\n );\r\n }\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 {OrganizationRequestPayload} orgRequestPayload\r\n * @return {Observable<OrganizationResponse>}\r\n * @memberof GroupsService\r\n */\r\n getOrganizations(\r\n orgRequestPayload: OrganizationRequestPayload\r\n ): Observable<OrganizationResponse> {\r\n return this.httpService\r\n .postData(\r\n `${this.apiBaseUrl}/groups/roster/organizations`,\r\n orgRequestPayload\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 * 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 const businessRule = this.getLoadedGroupTypes()?.find(\r\n (group) => group?.configFieldId === this.getSelectedGroupInfo()?.groupType\r\n )?.configFieldValue?.businessRule;\r\n if(businessRule?.rosterType === GroupRosterType.ENTITY)\r\n businessRule.rosterType = GroupRosterType.INDIVIDUAL;\r\n return 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 /**\r\n * Sets isParentGroupChanged true or false.\r\n * @param {boolean} isParentGroupChanged\r\n * @memberof GroupsService\r\n */\r\n setParentGroupChangeStatus(isParentGroupChanged: boolean): void {\r\n this.isParentGroupChanged = isParentGroupChanged;\r\n }\r\n\r\n /**\r\n * Returns isParentGroupChanged value.\r\n * @return {boolean}\r\n * @memberof GroupsService\r\n */\r\n getParentGroupChangeStatus(): boolean {\r\n return this.isParentGroupChanged;\r\n }\r\n\r\n /**\r\n * Sets the member types.\r\n * @param {Role[]} memberTypes\r\n * @memberof GroupsService\r\n */\r\n setMemberTypes(memberTypes: Role[]): void {\r\n this.memberTypes = memberTypes;\r\n }\r\n /**\r\n * Returns the member types.\r\n * @return {Role[]}\r\n * @memberof GroupsService\r\n */\r\n getMemberTypes(): Role[] {\r\n return this.memberTypes;\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // Reciprocal Credit (SP3M-22)\r\n // The reciprocal controller lives on the MEETINGS service, reached through the\r\n // gateway. apiBaseUrl = appConfig.baseApiUrl (ends in `/v1`), and the gateway\r\n // routes the meetings service under `${apiBaseUrl}/meetings` (same as every other\r\n // meetings/events call, e.g. `${apiBaseUrl}/meetings/event/...`).\r\n //\r\n // The reciprocal controller sits on the meetings service under `admin/reciprocal-credit`.\r\n // apiBaseUrl already carries the version segment (`.../v1`), and the gateway routes\r\n // the meetings service under `${apiBaseUrl}/meetings`, so the version is NOT repeated\r\n // (no second `/v1` or `/api/v1`). The full path is:\r\n // `${apiBaseUrl}/meetings/admin/reciprocal-credit/...`\r\n // = https://saappsapidev.ieee.org/v1/meetings/admin/reciprocal-credit/...\r\n // Every method builds URLs from RECIPROCAL_BASE_PATH below.\r\n // ---------------------------------------------------------------------------\r\n\r\n /** Path prefix (relative to apiBaseUrl) for the reciprocal-credit endpoints. */\r\n private readonly RECIPROCAL_BASE_PATH = 'meetings/admin/reciprocal-credit';\r\n\r\n /**\r\n * Build a reciprocal-credit endpoint URL from apiBaseUrl + the base path,\r\n * guarding against accidental double slashes if apiBaseUrl has a trailing slash.\r\n * @param {string} [suffix] extra path/query appended after the base path.\r\n * @return {string}\r\n */\r\n private buildReciprocalUrl(suffix = ''): string {\r\n const base = this.apiBaseUrl?.replace(/\\/+$/, '') ?? '';\r\n return `${base}/${this.RECIPROCAL_BASE_PATH}${suffix}`;\r\n }\r\n\r\n /**\r\n * Fetch the foreign groups available for reciprocal credit for a home group.\r\n * GET {apiBaseUrl}/meetings/admin/reciprocal-credit/{homeGroupId}/available-groups\r\n * @param {string} homeGroupId\r\n * @return {Observable<ReciprocalCreditResponse<AvailableForeignGroup[]>>}\r\n * @memberof GroupsService\r\n */\r\n getAvailableReciprocalGroups(\r\n homeGroupId: string\r\n ): Observable<ReciprocalCreditResponse<AvailableForeignGroup[]>> {\r\n return this.httpService\r\n .getData(this.buildReciprocalUrl(`/${homeGroupId}/available-groups`))\r\n .pipe(\r\n map((response) => response),\r\n catchError((error) => {\r\n throw error;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Load existing reciprocal-credit config rows for a home group (edit prefill).\r\n * GET {apiBaseUrl}/meetings/admin/reciprocal-credit/{homeGroupId}[?eventId=...]\r\n * Returns one row per foreign group; an empty array means reciprocal credit is off.\r\n * @param {string} homeGroupId\r\n * @param {string} [eventId] optional — filters to an event-scoped config.\r\n * @return {Observable<ReciprocalCreditResponse<ReciprocalCreditConfigRow[]>>}\r\n * @memberof GroupsService\r\n */\r\n getReciprocalConfig(\r\n homeGroupId: string,\r\n eventId?: string\r\n ): Observable<ReciprocalCreditResponse<ReciprocalCreditConfigRow[]>> {\r\n const query = eventId ? `?eventId=${encodeURIComponent(eventId)}` : '';\r\n return this.httpService\r\n .getData(this.buildReciprocalUrl(`/${homeGroupId}${query}`))\r\n .pipe(\r\n map((response) => response),\r\n catchError((error) => {\r\n throw error;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Save a reciprocal-credit config (creates/reactivates one row per foreign group).\r\n * POST {apiBaseUrl}/meetings/admin/reciprocal-credit\r\n * @param {SaveReciprocalCreditPayload} payload\r\n * @return {Observable<ReciprocalCreditResponse<ReciprocalCreditConfigRow[]>>}\r\n * @memberof GroupsService\r\n */\r\n saveReciprocalCredit(\r\n payload: SaveReciprocalCreditPayload\r\n ): Observable<ReciprocalCreditResponse<ReciprocalCreditConfigRow[]>> {\r\n return this.httpService\r\n .postData(this.buildReciprocalUrl(), payload)\r\n .pipe(\r\n map((response) => response),\r\n catchError((error) => {\r\n throw error;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Remove (soft delete) a single reciprocal-credit config row by its configId.\r\n * POST {apiBaseUrl}/meetings/admin/reciprocal-credit/{configId}/remove\r\n * @param {string} configId\r\n * @return {Observable<ReciprocalCreditResponse<null>>}\r\n * @memberof GroupsService\r\n */\r\n removeReciprocalConfig(\r\n configId: string\r\n ): Observable<ReciprocalCreditResponse<null>> {\r\n return this.httpService\r\n .postData(this.buildReciprocalUrl(`/${configId}/remove`), {})\r\n .pipe(\r\n map((response) => response),\r\n catchError((error) => {\r\n throw error;\r\n })\r\n );\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\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 { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\r\nimport {\r\n SlideToggleComponent,\r\n SlideToggleOption,\r\n} from '@ieeesa-npm/presentation';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { GroupsService } from '../../services/groups.service';\r\nimport {\r\n AvailableForeignGroup,\r\n ReciprocalCreditConfigRow,\r\n} from '../../models/reciprocal-credit.model';\r\nimport { AddWorkingGroupsComponent } from '../add-working-groups/add-working-groups.component';\r\n\r\n/**\r\n * A selected foreign group shown as a chip. `configId` is present only for groups\r\n * that were loaded from an existing (saved) config — it is needed to remove that\r\n * specific row on the BE when the group is de-selected or the toggle is turned off.\r\n */\r\nexport interface SelectedForeignGroup {\r\n groupId: string;\r\n groupName: string;\r\n configId?: string;\r\n}\r\n\r\n/**\r\n * Reciprocal Credit configuration section shown inside the group create/edit\r\n * form — ONLY when the group is a Working Group. Provides the enable toggle,\r\n * selected foreign-group chips, and the \"+ Add Working Groups\" launcher.\r\n *\r\n * The toggle has no backend flag: it is derived from whether any config rows\r\n * exist for the home group. Enabling persists nothing until at least one foreign\r\n * group is added (POST); disabling soft-deletes every existing config row\r\n * (one POST /{configId}/remove per row).\r\n *\r\n * The parent form reads `enabled` and `selectedForeignGroups` to build the save\r\n * request, and `removedConfigIds` to know which existing rows to remove.\r\n * @export\r\n * @class ReciprocalCreditSectionComponent\r\n */\r\n@Component({\r\n // eslint-disable-next-line @angular-eslint/component-selector\r\n selector: 'ieeesa-reciprocal-credit-section',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatButtonModule,\r\n MatDialogModule,\r\n SlideToggleComponent,\r\n ],\r\n templateUrl: './reciprocal-credit-section.component.html',\r\n styleUrls: ['./reciprocal-credit-section.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ReciprocalCreditSectionComponent implements OnInit, OnDestroy {\r\n destroy$ = new Subject<boolean>();\r\n\r\n /** Home group id (present in edit; absent in create until the group is saved). */\r\n @Input() homeGroupId?: string;\r\n /** Optional event id for event-scoped configs (omit for global/Groups screen). */\r\n @Input() eventId?: string;\r\n /** Parent committee name for the helper text (\"Only groups under ...\"). */\r\n @Input() parentCommitteeName?: string;\r\n\r\n /** Emits the current enabled state whenever it changes. */\r\n @Output() enabledChange = new EventEmitter<boolean>();\r\n /** Emits the current selected foreign groups whenever they change. */\r\n @Output() selectionChange = new EventEmitter<SelectedForeignGroup[]>();\r\n /**\r\n * Emits the config ids of previously-saved rows that have been removed locally\r\n * (chip de-selected or toggle turned off), so the parent can soft-delete each\r\n * on save.\r\n */\r\n @Output() removedConfigIdsChange = new EventEmitter<string[]>();\r\n\r\n /** Toggle state. */\r\n enabled = false;\r\n /** Option config for the shared ieeesa-slide-toggle. */\r\n toggleOption: SlideToggleOption = {\r\n id: 1,\r\n label: '',\r\n checked: false,\r\n ariaLabel: 'Enable Reciprocal Credit',\r\n };\r\n /** Selected foreign working groups (chips). */\r\n selectedForeignGroups: SelectedForeignGroup[] = [];\r\n /**\r\n * Persistent map of foreignGroupId → configId for the rows that existed on the\r\n * initial load. Kept for the whole edit session so a saved group re-selected\r\n * after being de-selected recovers its configId (and its queued removal is undone).\r\n */\r\n private savedConfigIdByGroupId = new Map<string, string>();\r\n /**\r\n * Config ids that existed on load but have since been removed locally (either by\r\n * de-selecting a chip or turning the toggle off). The parent removes each on save.\r\n */\r\n removedConfigIds: string[] = [];\r\n /** All foreign working groups available under the same committee. */\r\n availableGroups: AvailableForeignGroup[] = [];\r\n isLoading = false;\r\n\r\n // eslint-disable-next-line no-unused-vars\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 dialog: MatDialog\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n if (this.homeGroupId) {\r\n this.loadAvailableGroups(this.homeGroupId);\r\n this.loadExistingConfig(this.homeGroupId);\r\n }\r\n }\r\n\r\n /** Fetch the foreign working groups available for selection. */\r\n private loadAvailableGroups(homeGroupId: string): void {\r\n this.groupsService\r\n .getAvailableReciprocalGroups(homeGroupId)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n this.availableGroups = res?.body ?? [];\r\n },\r\n error: (error) => {\r\n this.groupsService.handleErrors(error);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Load existing reciprocal config rows for the edit-prefill path. The toggle is\r\n * ON when one or more rows exist; each chip keeps its own configId for removal.\r\n */\r\n private loadExistingConfig(homeGroupId: string): void {\r\n this.isLoading = true;\r\n this.groupsService\r\n .getReciprocalConfig(homeGroupId, this.eventId)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n const rows: ReciprocalCreditConfigRow[] = res?.body ?? [];\r\n this.selectedForeignGroups = rows.map((row) => ({\r\n groupId: row.foreignGroupId,\r\n groupName: row.foreignGroupName,\r\n configId: row.configId,\r\n }));\r\n // Remember each saved row's configId so it can be recovered if the\r\n // group is de-selected and then re-selected before saving.\r\n this.savedConfigIdByGroupId = new Map(\r\n rows.map((row) => [row.foreignGroupId, row.configId])\r\n );\r\n this.enabled = this.selectedForeignGroups.length > 0;\r\n this.toggleOption = { ...this.toggleOption, checked: this.enabled };\r\n this.removedConfigIds = [];\r\n this.emitState();\r\n this.isLoading = false;\r\n },\r\n error: (error) => {\r\n this.isLoading = false;\r\n this.groupsService.handleErrors(error);\r\n },\r\n });\r\n }\r\n\r\n /** Handle the enable/disable toggle (shared ieeesa-slide-toggle emits SlideToggleOption). */\r\n onToggleChange(option: SlideToggleOption): void {\r\n this.enabled = !!option?.checked;\r\n this.toggleOption = { ...this.toggleOption, checked: this.enabled };\r\n if (!this.enabled) {\r\n // Turning off queues every existing (saved) row for removal and clears chips.\r\n this.queueRemovalOf(this.selectedForeignGroups);\r\n this.selectedForeignGroups = [];\r\n }\r\n this.emitState();\r\n }\r\n\r\n /** Open the Add Working Groups modal. */\r\n onAddWorkingGroups(): void {\r\n const dialogRef = this.dialog.open(AddWorkingGroupsComponent, {\r\n panelClass: 'ieeesa-modal-dialog',\r\n data: {\r\n availableGroups: this.availableGroups,\r\n selectedGroupIds: this.selectedForeignGroups.map((g) => g.groupId),\r\n },\r\n });\r\n dialogRef\r\n .afterClosed()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result: AvailableForeignGroup[] | undefined) => {\r\n if (result) {\r\n this.mergeSelection(result);\r\n this.emitState();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Merge the modal's returned selection into the current chips. Groups that are\r\n * no longer selected but were saved get queued for removal; already-selected\r\n * groups keep their existing configId.\r\n */\r\n private mergeSelection(selected: AvailableForeignGroup[]): void {\r\n const selectedIds = new Set(selected.map((g) => g.groupId));\r\n\r\n // Queue removal for previously-saved chips that are no longer selected.\r\n const dropped = this.selectedForeignGroups.filter(\r\n (g) => !selectedIds.has(g.groupId)\r\n );\r\n this.queueRemovalOf(dropped);\r\n\r\n // Rebuild the selection, recovering each saved group's original configId\r\n // from the persistent load-time map (not just the currently-selected list),\r\n // so a de-selected-then-re-selected saved group keeps its configId.\r\n this.selectedForeignGroups = selected.map((g) => ({\r\n groupId: g.groupId,\r\n groupName: g.groupName,\r\n configId: this.savedConfigIdByGroupId.get(g.groupId),\r\n }));\r\n\r\n // Un-queue removal for any saved group that is (re)selected — it should be\r\n // kept, not removed, on save.\r\n this.removedConfigIds = this.removedConfigIds.filter((configId) => {\r\n const stillSelected = this.selectedForeignGroups.some(\r\n (g) => g.configId === configId\r\n );\r\n return !stillSelected;\r\n });\r\n }\r\n\r\n /** Remove a selected foreign group chip. */\r\n removeGroup(groupId: string): void {\r\n const removed = this.selectedForeignGroups.filter(\r\n (g) => g.groupId === groupId\r\n );\r\n this.queueRemovalOf(removed);\r\n this.selectedForeignGroups = this.selectedForeignGroups.filter(\r\n (g) => g.groupId !== groupId\r\n );\r\n this.emitState();\r\n }\r\n\r\n /** Track saved rows (those with a configId) that must be removed on the BE. */\r\n private queueRemovalOf(groups: SelectedForeignGroup[]): void {\r\n groups.forEach((g) => {\r\n if (g.configId && !this.removedConfigIds.includes(g.configId)) {\r\n this.removedConfigIds.push(g.configId);\r\n }\r\n });\r\n }\r\n\r\n /** True when the section is valid (toggle off, OR toggle on with ≥1 group). */\r\n get isValid(): boolean {\r\n return !this.enabled || this.selectedForeignGroups.length > 0;\r\n }\r\n\r\n private emitState(): void {\r\n this.enabledChange.emit(this.enabled);\r\n this.selectionChange.emit(this.selectedForeignGroups);\r\n this.removedConfigIdsChange.emit([...this.removedConfigIds]);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n}\r\n","<div class=\"ieeesa-reciprocal-credit\">\r\n <p class=\"ieeesa-reciprocal-credit__title\">Reciprocal Credit</p>\r\n\r\n <!-- Enable toggle -->\r\n <div class=\"ieeesa-reciprocal-credit__toggle-row\">\r\n <ieeesa-slide-toggle\r\n [slideToggle]=\"toggleOption\"\r\n (slideToggleChange)=\"onToggleChange($event)\"\r\n ></ieeesa-slide-toggle>\r\n <div class=\"ieeesa-reciprocal-credit__toggle-text\">\r\n <span class=\"ieeesa-reciprocal-credit__toggle-label\">Enable Reciprocal Credit</span>\r\n <span class=\"ieeesa-reciprocal-credit__toggle-subtext\">\r\n Use this configuration in eligible event attendance calculations.\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Info banner (always shown in the section) -->\r\n <div class=\"ieeesa-reciprocal-credit__info-banner\">\r\n <strong>Available only for Working Groups.</strong>\r\n Voting members of this Home Working Group can receive attendance credit when they\r\n attend meetings hosted by selected Foreign Working Groups under the same Standards Committee.\r\n </div>\r\n\r\n <!-- Selection UI (only when enabled) -->\r\n <ng-container *ngIf=\"enabled\">\r\n <label class=\"ieeesa-reciprocal-credit__field-label\">\r\n Eligible Foreign Working Groups*\r\n </label>\r\n\r\n <div class=\"ieeesa-reciprocal-credit__chips-box\">\r\n <span\r\n *ngFor=\"let group of selectedForeignGroups\"\r\n class=\"ieeesa-reciprocal-credit__chip\"\r\n >\r\n {{ group.groupName }}\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-reciprocal-credit__chip-remove\"\r\n (click)=\"removeGroup(group.groupId)\"\r\n [attr.aria-label]=\"'Remove ' + group.groupName\"\r\n >\r\n ×\r\n </button>\r\n </span>\r\n <span\r\n *ngIf=\"selectedForeignGroups.length === 0\"\r\n class=\"ieeesa-reciprocal-credit__chips-placeholder\"\r\n >\r\n No working groups selected\r\n </span>\r\n </div>\r\n\r\n <p class=\"ieeesa-reciprocal-credit__helper\" *ngIf=\"parentCommitteeName\">\r\n Only groups under {{ parentCommitteeName }} are available.\r\n </p>\r\n\r\n <div class=\"ieeesa-reciprocal-credit__add-row\">\r\n <button\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-tertiary-button ieeesa-reciprocal-credit__add-btn\"\r\n (click)=\"onAddWorkingGroups()\"\r\n >\r\n + Add Working Groups\r\n </button>\r\n </div>\r\n\r\n <!-- One-way relationship warning -->\r\n <div class=\"ieeesa-reciprocal-credit__warning-banner\">\r\n <strong>One-way relationship:</strong> Adding a Foreign Working Group here does not\r\n automatically enable reciprocal credit in the opposite direction.\r\n </div>\r\n </ng-container>\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 { FormGroup, Validators } from '@angular/forms';\r\nimport {\r\n FormGrid,\r\n FormModel,\r\n SelectOption,\r\n AlignType,\r\n SlideToggleOption,\r\n FieldConfig,\r\n FormControlType,\r\n DynamicFormComponent,\r\n} from '@ieeesa-npm/presentation';\r\nimport {\r\n AlertsService,\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, forkJoin, 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, AlertType } from '@ieeesa-npm/models';\r\nimport { GroupFunctionType } from '../../models/group-function-type.model';\r\nimport { ParentGroupsInfo } from '../../models/parent-groups-info.model';\r\nimport {\r\n ReciprocalCreditSectionComponent,\r\n SelectedForeignGroup,\r\n} from '../reciprocal-credit-section/reciprocal-credit-section.component';\r\nconst INDEX_VALUE = 4;\r\n/** Group type name that enables the Reciprocal Credit section. */\r\nconst WORKING_GROUP_TYPE_NAME = 'Working Group';\r\n\r\n/**\r\n * CreateGroupComponent uses DynamicFormComponent to build create new group form or edit group 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: [\r\n CommonModule,\r\n DynamicFormComponent,\r\n MatDialogModule,\r\n ReciprocalCreditSectionComponent,\r\n ],\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 allowedParentGroups: ParentGroupsInfo[] = [];\r\n allowedParentGroupsOptions: SelectOption[] = [];\r\n isParentGroupChanged = false;\r\n slideToggleOption: SlideToggleOption = {\r\n id: 1,\r\n label: this.createGroupText?.label?.changeParentGroup,\r\n checked: false,\r\n };\r\n /** Reciprocal credit state (Working Group only) — captured for Save. */\r\n reciprocalEnabled = false;\r\n reciprocalSelectedGroups: SelectedForeignGroup[] = [];\r\n /** Config ids of previously-saved reciprocal rows removed locally — for soft-delete on Save. */\r\n reciprocalRemovedConfigIds: string[] = [];\r\n /** Group type currently selected in the create form (for gating the section). */\r\n selectedCreateGroupTypeId?: string;\r\n @ViewChild(DynamicFormComponent) dynamicFormComponent!: DynamicFormComponent;\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 if (this.selectedGroupInfo?.groupParentId)\r\n this.getParentGroups(this.selectedGroupInfo?.groupId);\r\n this.createFormGroup();\r\n } else {\r\n const groupTypes = this.groupsService?.getFormattedGroupTypes(\r\n this.groupsService?.getLoadedGroupTypes()\r\n );\r\n if (this.selectedGroupInfo?.groupType) {\r\n const allowedGroupType =\r\n groupTypes[this.selectedGroupInfo?.groupType]?.businessRule\r\n ?.allowedGroupType;\r\n if (allowedGroupType?.length) {\r\n this.groupTypes = allowedGroupType.map((groupTypeId: string) => ({\r\n id: groupTypeId,\r\n name: groupTypes[groupTypeId]?.name,\r\n }));\r\n this.groupTypes = this.groupTypes.filter(\r\n (groupType) => !groupTypes[groupType.id]?.businessRule?.isAdmin\r\n );\r\n } else {\r\n this.showAlertMessage(screenTexts?.errors?.ER1000, AlertType.ERROR);\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(\r\n (groupType) =>\r\n groupTypes[groupType.id]?.hierarchy === 0 &&\r\n !groupTypes[groupType.id]?.businessRule?.isAdmin\r\n );\r\n }\r\n if (this.groupTypes?.length) {\r\n this.createFormGroup();\r\n } else {\r\n this.showAlertMessage(screenTexts?.errors?.['1010'], AlertType.ERROR);\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 ariaDescribedById:\r\n this.createGroupText?.label?.ariaDescribedById?.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 ariaDescribedById:\r\n this.createGroupText?.label?.ariaDescribedById?.groupType,\r\n placeholder: '',\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n createFormGroup(formValue?: any): 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 ? formValue\r\n ? formValue?.groupName\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 ? formValue\r\n ? formValue?.shortName\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 ? formValue\r\n ? formValue?.groupScope\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 if (\r\n (this.groupFunctionType === GroupFunctionType.EDIT &&\r\n parentGroupInfo?.groupParentId) ||\r\n this.groupFunctionType === GroupFunctionType.CREATE\r\n ) {\r\n this.updateAddUserFormControls(\r\n this.formGroup?.formGroup[0]?.controls?.length - INDEX_VALUE,\r\n {\r\n type: FormControlType?.TEXT_AREA,\r\n label: this.createGroupText?.label?.parentGroup,\r\n controlName: 'parentGroup',\r\n value:\r\n this.selectedGroupParentInfo?.groupName ??\r\n parentGroupInfo?.groupName,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.parentGroup,\r\n ariaDescribedById:\r\n this.createGroupText?.label?.ariaDescribedById?.parentGroup,\r\n isReadonly: true,\r\n ariaMultiline: false,\r\n isResize: true,\r\n }\r\n );\r\n\r\n if (this.groupFunctionType === GroupFunctionType.EDIT) {\r\n this.updateAddUserFormControls(\r\n this.formGroup?.formGroup[0]?.controls?.length - INDEX_VALUE,\r\n {\r\n type: FormControlType?.SLIDE_TOGGLE,\r\n controlName: 'changeParentGroup',\r\n ariaLabel:\r\n this.createGroupText?.label?.ariaLabel?.changeParentGroup,\r\n ariaDescribedById:\r\n this.createGroupText?.label?.ariaDescribedById?.changeParentGroup,\r\n slideToggleOption: this.slideToggleOption,\r\n disabled: this.allowedParentGroupsOptions.length === 0,\r\n }\r\n );\r\n if (this.isParentGroupChanged) {\r\n this.updateAddUserFormControls(\r\n this.formGroup?.formGroup[0]?.controls?.length - INDEX_VALUE,\r\n {\r\n type: FormControlType?.SELECT,\r\n label: this.createGroupText?.label?.newParentGroup + '*',\r\n controlName: 'newParentGroup',\r\n value: this.allowedParentGroupsOptions?.filter(\r\n (option) => option?.id === this.selectedGroupInfo?.groupId\r\n )[0],\r\n requiredErrorMessage:\r\n this.createGroupText?.message?.error?.required,\r\n validation: [Validators.required],\r\n dropdownOptions: this.allowedParentGroupsOptions,\r\n placeholder: '',\r\n supportMessage: this.createGroupText?.supportText?.newParentGroup,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.newParentGroup,\r\n ariaDescribedById:\r\n this.createGroupText?.label?.ariaDescribedById?.newParentGroup,\r\n }\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Updates the create or edit user form group controls by adding fieldConfig at required index.\r\n * @param {number} indexPosition\r\n * @param {FieldConfig} fieldConfig\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n updateAddUserFormControls(\r\n indexPosition: number,\r\n fieldConfig: FieldConfig\r\n ): void {\r\n this.formGroup?.formGroup[0]?.controls?.splice(\r\n indexPosition,\r\n 0,\r\n fieldConfig\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 // Reciprocal Credit: if the toggle is ON, at least one foreign group is\r\n // required (BE rejects an empty foreign-group list). Block Save otherwise.\r\n if (this.isReciprocalInvalid) {\r\n this.showAlertMessage(\r\n this.createGroupText?.reciprocalCredit?.selectAtLeastOneGroup ??\r\n 'Please add at least one Working Group to enable Reciprocal Credit, or turn off the toggle.',\r\n AlertType.ERROR\r\n );\r\n return;\r\n }\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 * 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 this.groupsService?.setParentGroupChangeStatus(this.isParentGroupChanged);\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.isParentGroupChanged\r\n ? formData?.newParentGroup?.id\r\n : 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 // Persist reciprocal-credit changes (Working Group edit only), then emit.\r\n this.persistReciprocalCredit(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 * Persists reciprocal-credit changes captured from the section after a\r\n * successful group edit: POSTs newly-added foreign groups (those without a\r\n * configId) and soft-deletes each removed config id. Emits the group-edit\r\n * response once persistence completes (or immediately if there's nothing to do).\r\n * @param {*} editResponse the successful edit-group response\r\n * @memberof CreateGroupComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private persistReciprocalCredit(editResponse: any): void {\r\n const homeGroupId = this.selectedGroupInfo?.groupId;\r\n // Nothing to persist when the section isn't shown or there's no home group.\r\n if (!this.isReciprocalSectionVisible || !homeGroupId) {\r\n this.submitFormResponse?.emit(editResponse);\r\n return;\r\n }\r\n\r\n // Add: selected groups that were not already saved (no configId yet).\r\n const foreignGroupIdsToAdd = this.reciprocalSelectedGroups\r\n .filter((group) => !group.configId)\r\n .map((group) => group.groupId);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const calls: any[] = [];\r\n if (this.reciprocalEnabled && foreignGroupIdsToAdd.length > 0) {\r\n calls.push(\r\n this.groupsService.saveReciprocalCredit({\r\n homeGroupId,\r\n foreignGroupIds: foreignGroupIdsToAdd,\r\n })\r\n );\r\n }\r\n // Remove: each previously-saved config id removed locally.\r\n this.reciprocalRemovedConfigIds.forEach((configId) => {\r\n calls.push(this.groupsService.removeReciprocalConfig(configId));\r\n });\r\n\r\n // Nothing to persist — emit the edit response as-is.\r\n if (calls.length === 0) {\r\n this.submitFormResponse?.emit(editResponse);\r\n return;\r\n }\r\n\r\n forkJoin(calls)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: () => {\r\n this.submitFormResponse?.emit(editResponse);\r\n },\r\n error: (error) => {\r\n // Group edit already succeeded; surface the reciprocal error but still\r\n // emit so the parent completes the edit flow.\r\n this.groupsService.handleErrors(error);\r\n this.submitFormResponse?.emit(editResponse);\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 * True when the group being created/edited is a Working Group — gates the\r\n * Reciprocal Credit section.\r\n * @return {boolean}\r\n * @memberof CreateGroupComponent\r\n */\r\n get isWorkingGroup(): boolean {\r\n const groupTypeId =\r\n this.groupFunctionType === GroupFunctionType.EDIT\r\n ? this.selectedGroupInfo?.groupType\r\n : this.selectedCreateGroupTypeId;\r\n if (!groupTypeId) return false;\r\n const groupTypes = this.groupsService?.getFormattedGroupTypes(\r\n this.groupsService?.getLoadedGroupTypes()\r\n );\r\n return groupTypes?.[groupTypeId]?.name === WORKING_GROUP_TYPE_NAME;\r\n }\r\n\r\n /**\r\n * True when the Reciprocal Credit section should be shown: only for a Working\r\n * Group in EDIT mode. Hidden during create because the home group has no id\r\n * yet and the create flow is still being finalized with the client team.\r\n * @return {boolean}\r\n * @memberof CreateGroupComponent\r\n */\r\n get isReciprocalSectionVisible(): boolean {\r\n return (\r\n this.groupFunctionType === GroupFunctionType.EDIT && this.isWorkingGroup\r\n );\r\n }\r\n\r\n /**\r\n * True when the reciprocal section is shown, the toggle is ON, but no foreign\r\n * group has been added — an invalid state (BE rejects an empty foreign-group\r\n * list). Used to block the edit Save.\r\n * @return {boolean}\r\n * @memberof CreateGroupComponent\r\n */\r\n get isReciprocalInvalid(): boolean {\r\n return (\r\n this.isReciprocalSectionVisible &&\r\n this.reciprocalEnabled &&\r\n this.reciprocalSelectedGroups.length === 0\r\n );\r\n }\r\n\r\n /** Home group id for the reciprocal section (present in edit). */\r\n get reciprocalHomeGroupId(): string | undefined {\r\n return this.groupFunctionType === GroupFunctionType.EDIT\r\n ? this.selectedGroupInfo?.groupId\r\n : undefined;\r\n }\r\n\r\n /** Parent committee name shown in the reciprocal helper text. */\r\n get reciprocalParentCommitteeName(): string | undefined {\r\n return this.selectedGroupParentInfo?.groupName;\r\n }\r\n\r\n /** Capture reciprocal toggle state from the section. */\r\n onReciprocalEnabledChange(enabled: boolean): void {\r\n this.reciprocalEnabled = enabled;\r\n }\r\n\r\n /** Capture reciprocal foreign-group selection from the section. */\r\n onReciprocalSelectionChange(groups: SelectedForeignGroup[]): void {\r\n this.reciprocalSelectedGroups = groups;\r\n }\r\n\r\n /** Capture the config ids to soft-delete on Save from the section. */\r\n onReciprocalRemovedConfigIdsChange(configIds: string[]): void {\r\n this.reciprocalRemovedConfigIds = configIds;\r\n }\r\n\r\n /**\r\n * Gets allowed parent groups for reassigning the parent.\r\n * @param {string} groupId\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n getParentGroups(groupId: string): void {\r\n this.allowedParentGroups = [];\r\n this.groupsService\r\n .getAllowedParentGroups(groupId)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => {\r\n response?.forEach((option) => {\r\n this.allowedParentGroupsOptions?.push({\r\n id: option?.groupId,\r\n name: option?.groupName + ' (' + option?.groupAcronym + ')',\r\n });\r\n });\r\n this.allowedParentGroups = response;\r\n if (this.allowedParentGroupsOptions.length > 0) {\r\n this.updateFormControlOptions(\r\n 'changeParentGroup',\r\n 'isDisabled',\r\n false\r\n );\r\n this.updateFormControlOptions(\r\n 'newParentGroup',\r\n 'dropdownOptions',\r\n this.allowedParentGroupsOptions\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 this.updateFormControlOptions(\r\n 'changeParentGroup',\r\n 'isDisabled',\r\n this.allowedParentGroupsOptions.length === 0\r\n );\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Update passed form field values.\r\n * @param {string} formControlName\r\n * @param {string} formControlInputProperty\r\n * @param {*} value\r\n * @memberof CreateGroupComponent\r\n */\r\n updateFormControlOptions(\r\n formControlName: string,\r\n formControlInputProperty: string,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n value: any\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] = value;\r\n });\r\n }\r\n\r\n /**\r\n * Adds/removes new parent group selection options whenever Change Parent Group slider is toggled.\r\n * @param {SlideToggleOption} toggle\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n onFormSlideToggleChange(toggle: SlideToggleOption): void {\r\n this.slideToggleOption.checked = toggle?.checked;\r\n this.isParentGroupChanged = toggle?.checked;\r\n this.createFormGroup(this.form?.value);\r\n }\r\n\r\n /**\r\n * Handles create group form change event.\r\n * @param {FormGroup[]} form\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n onCreateGroupFormChange(form: FormGroup[]): void {\r\n if (this.isParentGroupChanged) {\r\n const selectedParentGroup = this.allowedParentGroups?.filter(\r\n (option: ParentGroupsInfo) =>\r\n option?.groupId ===\r\n form[0]?.controls['newParentGroup']?.value?.id?.toString()\r\n )[0];\r\n this.form?.get('parentGroup')?.setValue(selectedParentGroup?.groupName);\r\n }\r\n // Track the selected group type in create mode so the Reciprocal Credit\r\n // section can render only for Working Groups.\r\n if (this.groupFunctionType !== GroupFunctionType.EDIT) {\r\n this.selectedCreateGroupTypeId =\r\n form[0]?.controls['groupType']?.value?.id ??\r\n form[0]?.controls['groupType']?.value;\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 *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 (formSlideToggleChange)=\"onFormSlideToggleChange($event)\"\r\n (formChange)=\"onCreateGroupFormChange($event)\"\r\n>\r\n <!-- Reciprocal Credit section — Working Groups in EDIT mode only.\r\n Hidden during create (no home group id yet; create flow pending client team).\r\n Projected via [component] so it renders ABOVE the form's Save/Cancel buttons. -->\r\n <ieeesa-reciprocal-credit-section\r\n component\r\n *ngIf=\"isReciprocalSectionVisible\"\r\n [homeGroupId]=\"reciprocalHomeGroupId\"\r\n [parentCommitteeName]=\"reciprocalParentCommitteeName\"\r\n (enabledChange)=\"onReciprocalEnabledChange($event)\"\r\n (selectionChange)=\"onReciprocalSelectionChange($event)\"\r\n (removedConfigIdsChange)=\"onReciprocalRemovedConfigIdsChange($event)\"\r\n ></ieeesa-reciprocal-credit-section>\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 BreakpointObserverService\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 isMobileView = false;\r\n groupFunctionType = GroupFunctionType;\r\n // eslint-disable-next-line no-unused-vars\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,\r\n // eslint-disable-next-line no-unused-vars\r\n private breakpointObserverService: BreakpointObserverService\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 }\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 * @return {*}\r\n * @memberof TreeViewComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n getBoxShadow(): any {\r\n return {\r\n boxShadow: '0px 1px 0px 0px #c9cbd0 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 this.sortParentGroupsAlphabetically();\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 this.sortParentGroupsAlphabetically();\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 const selectedGroupIndex = this.dataSource.data.findIndex(\r\n (node) => node.item.groupId === this.selectedGroup?.item.groupId\r\n );\r\n this.sortChildGroupsAlphabetically(\r\n selectedGroupIndex + 1,\r\n this.getNextGroup(selectedGroupIndex, this.dataSource.data)\r\n );\r\n } else if (\r\n this.groupsService.getGroupFunctionType() === GroupFunctionType.EDIT\r\n ) {\r\n this.editGroup(this.childGroupsInfo);\r\n const selectedParentGroupIndex = this.dataSource.data.findIndex(\r\n (node) => node.item.groupId === this.selectedGroup?.item.groupParentId\r\n );\r\n this.sortChildGroupsAlphabetically(\r\n selectedParentGroupIndex + 1,\r\n this.getNextGroup(selectedParentGroupIndex, this.dataSource.data)\r\n );\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 !== -1) {\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 if (deletedParentGroupIndex !== -1) {\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 } 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 * Returns the index of next group at the same level.\r\n * @param {number} selectedGroupIndex\r\n * @param {GroupNode[]} dataSource\r\n * @return {*} {number}\r\n * @memberof TreeViewComponent\r\n */\r\n getNextGroup(selectedGroupIndex: number, dataSource: GroupNode[]): number {\r\n const selectedGroupAcronym =\r\n dataSource[selectedGroupIndex].item.groupAcronym;\r\n let index = 0;\r\n for (index = selectedGroupIndex + 1; index < dataSource.length; index++) {\r\n if (dataSource[index].item.groupAcronym?.includes(selectedGroupAcronym)) {\r\n if (dataSource[selectedGroupIndex].level === 0) {\r\n if (\r\n dataSource[selectedGroupIndex].level === dataSource[index].level\r\n ) {\r\n break;\r\n }\r\n }\r\n } else break;\r\n }\r\n return index;\r\n }\r\n /**\r\n * Sort the groups alphabetically from given start index to end index.\r\n * @param {number} startIndex\r\n * @param {number} endIndex\r\n * @memberof TreeViewComponent\r\n */\r\n sortChildGroupsAlphabetically(startIndex: number, endIndex: number): void {\r\n const dataSource = this.dataSource.data;\r\n dataSource.splice(\r\n startIndex,\r\n endIndex - startIndex,\r\n ...this.groupsSorting(this.dataSource.data.slice(startIndex, endIndex))\r\n );\r\n this.dataSource.data = dataSource;\r\n }\r\n /**\r\n * Sort the root level parent groups alphabetically.\r\n * @memberof TreeViewComponent\r\n */\r\n sortParentGroupsAlphabetically(): void {\r\n let dataSource = this.dataSource.data;\r\n for (\r\n let groupA = 0;\r\n groupA < dataSource.length;\r\n groupA = this.getNextGroup(groupA, dataSource)\r\n ) {\r\n let lowestGroup = groupA;\r\n for (\r\n let groupB = this.getNextGroup(groupA, dataSource);\r\n groupB < dataSource.length;\r\n groupB = this.getNextGroup(groupB, dataSource)\r\n ) {\r\n lowestGroup =\r\n this.groupsSorting([\r\n dataSource[groupB],\r\n dataSource[lowestGroup],\r\n ])[0] === dataSource[groupB]\r\n ? groupB\r\n : lowestGroup;\r\n }\r\n if (lowestGroup !== groupA) {\r\n const leftGroup = dataSource.slice(\r\n groupA,\r\n this.getNextGroup(groupA, dataSource)\r\n );\r\n const rightGroup = dataSource.slice(\r\n lowestGroup,\r\n this.getNextGroup(lowestGroup, dataSource)\r\n );\r\n const dataSourceReference = dataSource.slice(0, groupA);\r\n dataSourceReference.push(...rightGroup);\r\n dataSourceReference.push(\r\n ...dataSource.slice(\r\n this.getNextGroup(groupA, dataSource),\r\n lowestGroup\r\n )\r\n );\r\n dataSourceReference.push(...leftGroup);\r\n dataSourceReference.push(\r\n ...dataSource.slice(\r\n this.getNextGroup(lowestGroup, dataSource),\r\n dataSource.length\r\n )\r\n );\r\n dataSource = dataSourceReference;\r\n }\r\n }\r\n this.dataSource.data = dataSource;\r\n }\r\n /**\r\n * Utility method to sort groups by group acronym in ascending order.\r\n * @param {GroupNode[]} groups\r\n * @return {*} {GroupNode[]}\r\n * @memberof TreeViewComponent\r\n */\r\n groupsSorting(groups: GroupNode[]): GroupNode[] {\r\n return groups.sort((groupA: GroupNode, groupB: GroupNode) => {\r\n const lowerGroupA = groupA.item.groupAcronym.toLowerCase();\r\n const lowerGroupB = groupB.item.groupAcronym.toLowerCase();\r\n if (lowerGroupA < lowerGroupB) return -1;\r\n else if (lowerGroupA > lowerGroupB) return 1;\r\n else if (lowerGroupA === lowerGroupB) {\r\n let index = 0;\r\n while (index < groupA?.item?.groupAcronym?.length) {\r\n if (groupA.item.groupAcronym[index] < groupB.item.groupAcronym[index])\r\n return 1;\r\n else if (\r\n groupA.item.groupAcronym[index] > groupB.item.groupAcronym[index]\r\n )\r\n return -1;\r\n index++;\r\n }\r\n }\r\n return 0;\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 this.selectedGroup = 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 const groupPermissions = group?.item?.permissions;\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 groupPermissions\r\n )) ||\r\n (!isAdminGroupType &&\r\n (this.groupsService.validateAccess(\r\n this.permissionType.VIEW_GROUP_OFFICERS,\r\n groupPermissions\r\n ) ||\r\n this.groupsService.validateAccess(\r\n this.permissionType.MANAGE_GROUP_OFFICERS,\r\n groupPermissions\r\n ) ||\r\n this.groupsService.validateAccess(\r\n this.permissionType.VIEW_GROUP_MEMBERS,\r\n groupPermissions\r\n ) ||\r\n this.groupsService.validateAccess(\r\n this.permissionType.VIEW_ALL_ROSTERS\r\n ) ||\r\n this.groupsService.validateAccess(\r\n this.permissionType.MANAGE_GROUP_MEMBERS,\r\n groupPermissions\r\n ))))) ||\r\n (e?.id === GroupAction.EDIT_GROUP &&\r\n !isAdminGroupType &&\r\n (this.groupsService.validateAccess(\r\n this.permissionType.EDIT_GROUP,\r\n groupPermissions\r\n ) ||\r\n this.groupsService.validateAccess(\r\n this.permissionType.MANAGE_ALL_GROUPS\r\n ))) ||\r\n (e?.id === GroupAction.DELETE_GROUP &&\r\n !isAdminGroupType &&\r\n (this.groupsService.validateAccess(\r\n this.permissionType.DELETE_GROUP,\r\n groupPermissions\r\n ) ||\r\n this.groupsService.validateAccess(\r\n this.permissionType.MANAGE_ALL_GROUPS\r\n )) &&\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 groupPermissions\r\n ) ||\r\n this.groupsService.validateAccess(\r\n this.permissionType.MANAGE_ALL_GROUPS\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\"\r\n [ngStyle]=\"getBoxShadow()\"\r\n [ngClass]=\"\r\n node?.item?.groupParentId &&\r\n groupsService.getGroupFunctionType() !== groupFunctionType.FILTER &&\r\n groupsService.getGroupFunctionType() !== groupFunctionType.SEARCH\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\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) ? 'ieeesa-tree__expanded' : '',\r\n node?.item?.groupParentId &&\r\n groupsService.getGroupFunctionType() !== groupFunctionType.FILTER &&\r\n groupsService.getGroupFunctionType() !== groupFunctionType.SEARCH\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\"\r\n [ngStyle]=\"getBoxShadow()\"\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 [button]=\"constants?.viewGroups?.groupActionsMenu\"\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 class=\"ieeesa-tree__group-info d-flex align-items-baseline\">\r\n <p\r\n class=\"ieeesa-tree__node-group-name ieeesa-title-md-18\"\r\n [matTooltip]=\"node?.item?.groupName\"\r\n ieeesaTextTruncated\r\n role=\"gridcell\"\r\n >{{ node?.item?.groupName }}</p>\r\n <p\r\n class=\"ieeesa-tree__node-group-acronym ieeesa-title-sm-16\"\r\n [matTooltip]=\"node?.item?.groupAcronym\"\r\n ieeesaTextTruncated\r\n role=\"gridcell\"\r\n >{{ node?.item?.groupAcronym }}</p>\r\n </div>\r\n <div class=\"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 AutoCompleteOption,\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 { FormArray, FormGroup, Validators } from '@angular/forms';\r\nimport { GroupUserInfo } from '../../models/group-user-info.model';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { FormStatus, AlertType } from '@ieeesa-npm/models';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport {\r\n AlertsService,\r\n GlobalErrorHandlerService,\r\n} from '@ieeesa-npm/utility';\r\nimport {\r\n AddOrEditUserIndividualRosterPayload,\r\n AddOrEditUserPayload,\r\n RepresentingOrganization,\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 {\r\n GroupsValidationPatterns,\r\n representingOrgRequiredValidator,\r\n skipWhenArray,\r\n} from '../../assets/form-validations';\r\nimport {\r\n Organization,\r\n OrganizationRequestPayload,\r\n} from '../../models/organization.model';\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 = false;\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 representingOrganizations: SelectOption[] = [];\r\n orgSearchValue = '';\r\n @ViewChild(DynamicFormComponent) dynamicFormComponent!: DynamicFormComponent;\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.selectedUserInfo = this.groupsService?.getSelectedUserInfo();\r\n this.groupsService.representingOrganizations.forEach(\r\n (user: RepresentingOrganization) => {\r\n if (\r\n this.selectedUserInfo.userId === user.userId &&\r\n user.organizations?.length\r\n ) {\r\n user.organizations.forEach((option: Organization) => {\r\n this.representingOrganizations?.push({\r\n id: option.orgId,\r\n name: option.orgName,\r\n });\r\n });\r\n }\r\n }\r\n );\r\n // eslint-disable-next-line no-unused-expressions\r\n this.representingOrganizations?.length\r\n ? (this.isSubmitButtonDisabled = false)\r\n : (this.isSubmitButtonDisabled = true);\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.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 this.updateEditUserRoleFormControls(\r\n this.editUserRoleFormGroup?.formGroup[0]?.controls?.length,\r\n {\r\n type: FormControlType.MULTI_SELECT_AUTO_COMPLETE,\r\n label: this.addUserRosterTexts?.label?.representingOrganization + '*',\r\n controlName: 'representingOrg',\r\n // Validate on blur so the required error surfaces only after the user\r\n // leaves the field — never mid-selection (avoids the error flash).\r\n updateOn: 'blur',\r\n validation: [\r\n representingOrgRequiredValidator(),\r\n skipWhenArray(\r\n Validators.maxLength(\r\n GroupsValidationPatterns.representingOrgNameMaxLength\r\n )\r\n ),\r\n skipWhenArray(\r\n Validators.minLength(\r\n GroupsValidationPatterns.representingOrgNameMinLength\r\n )\r\n ),\r\n skipWhenArray(\r\n Validators.pattern(\r\n GroupsValidationPatterns.representingOrganization\r\n )\r\n ),\r\n ],\r\n multiSelectAutoCompleteOptions: this.organizations,\r\n value: this.representingOrganizations?.length\r\n ? this.orgSearchValue?.length\r\n ? this.orgSearchValue\r\n : this.representingOrganizations\r\n : '',\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 ?.representingOrganizationMaxChars,\r\n minErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.limit\r\n ?.representingOrganizationMinChars,\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 /**\r\n * Gets selected organizations.\r\n * @param {AutoCompleteOption[]} selectedOrg\r\n * @memberof EditUserRolesComponent\r\n */\r\n getSelectedOrganizations(selectedOrg: AutoCompleteOption[]): void {\r\n this.representingOrganizations = selectedOrg;\r\n // eslint-disable-next-line no-unused-expressions\r\n this.representingOrganizations.length\r\n ? (this.isSubmitButtonDisabled = false)\r\n : (this.isSubmitButtonDisabled = true);\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 if (this.groupRosterType === GroupRosterType.SYSTEM_USER) {\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 /**\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 const isAllOtherControlsValid = Object.keys(form[0].controls)\r\n .filter((controlName) => controlName !== 'representingOrg')\r\n .every(\r\n (controlName) => form[0].get(controlName)?.status === FormStatus?.VALID\r\n );\r\n if (\r\n (form[0].get('representingOrg')?.status === FormStatus?.INVALID &&\r\n isAllOtherControlsValid &&\r\n this.representingOrganizations.length > 0) ||\r\n form[0].status === FormStatus?.VALID\r\n ) {\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 const formattedOptions = this.representingOrganizations.map((option) => {\r\n return {\r\n orgId: option.id as string,\r\n orgName: option.name,\r\n };\r\n });\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 organizations: formattedOptions,\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\r\n if (\r\n formData?.memberType &&\r\n !payload.payload.roles?.includes(formData?.memberType?.id)\r\n )\r\n payload.payload.roles?.push(formData?.memberType?.id);\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 if (!this.selectedUserInfo?.canDelete) {\r\n (this.editUserRoleFormGroupRef?.controls['roles'] as FormArray)\r\n ?.at(0)\r\n ?.disable();\r\n }\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 if (\r\n this.representingOrganizations.length &&\r\n this.editUserRoleFormGroupRef.controls['representingOrg'].status ===\r\n FormStatus.INVALID\r\n ) {\r\n this.isSubmitButtonDisabled = false;\r\n } else if (this.representingOrganizations.length === 0) {\r\n this.isSubmitButtonDisabled = true;\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 this.selectedUserInfo?.classification\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 const memberTypes = this.groupsService.getMemberTypes();\r\n memberTypes?.forEach((option) => {\r\n this.memberTypes?.push({\r\n id: option.roleId,\r\n name: option.roleName,\r\n });\r\n });\r\n this.updateFormControlOptions(\r\n 'memberType',\r\n 'dropdownOptions',\r\n this.memberTypes,\r\n this.selectedUserInfo?.memberStatus\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.orgSearchValue = orgName;\r\n this.organizations = [];\r\n orgName = orgName?.trimStart();\r\n this.updateFormControlOptions(\r\n 'representingOrg',\r\n 'multiSelectAutoCompleteOptions',\r\n [],\r\n ''\r\n );\r\n if (!orgName) return;\r\n const orgRequestPayload: OrganizationRequestPayload = {\r\n payload: { orgName: orgName },\r\n };\r\n this.groupsService\r\n .getOrganizations(orgRequestPayload)\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 'multiSelectAutoCompleteOptions',\r\n this.organizations,\r\n orgName\r\n );\r\n const orgNameLength =\r\n this.editUserRoleFormGroupRef?.get('representingOrg')?.value?.name\r\n ?.length;\r\n if (\r\n orgNameLength &&\r\n orgNameLength <\r\n GroupsValidationPatterns.representingOrgNameMinLength &&\r\n orgNameLength !== 0\r\n ) {\r\n this.editUserRoleFormGroupRef?.get('representingOrg')?.setErrors({\r\n minlength:\r\n this.addUserRosterTexts?.message?.error?.limit\r\n ?.representingOrganizationMinChars,\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 * 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 selectedOption?: string\r\n ): void {\r\n const formFields = this.dynamicFormComponent?.formFields?.toArray();\r\n formFields?.forEach((formField) => {\r\n const searchedOrgName = options?.filter((option) =>\r\n selectedOption?.includes(option?.name)\r\n )[0];\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 if (selectedOption && searchedOrgName) {\r\n this.editUserRoleFormGroupRef\r\n .get(formControlName)\r\n ?.setValue(searchedOrgName);\r\n }\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 if (errorCodes[0] !== '3004') {\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 }\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService?.handleError(error);\r\n }\r\n }\r\n /**\r\n * Disables form submit button when org name length is less than minCharToSearch and greater than zero.\r\n * @memberof EditUserRolesComponent\r\n */\r\n disableSubmitButton(): void {\r\n if (this.representingOrganizations.length === 0) {\r\n this.updateFormControlOptions(\r\n 'representingOrg',\r\n 'multiSelectAutoCompleteOptions',\r\n []\r\n );\r\n this.isSubmitButtonDisabled = 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 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 (formMultiSelectAutoCompleteSearch)=\"getOrganizations($event)\"\r\n (multiSelectAutoCompleteOptionsSelected)=\"getSelectedOrganizations($event)\"\r\n (formMultiSelectAutoCompleteClearSearchValue)=\"disableSubmitButton()\"\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 ElementRef,\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 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 AutoCompleteOption,\r\n DynamicFormComponent,\r\n} from '@ieeesa-npm/presentation';\r\nimport * as screenTexts from '../../assets/constants.json';\r\nimport {\r\n GroupsValidationPatterns,\r\n representingOrgRequiredValidator,\r\n skipWhenArray,\r\n} from '../../assets/form-validations';\r\nimport { FormStatus, AlertType } from '@ieeesa-npm/models';\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\nimport { OrganizationRequestPayload } from '../../models/organization.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 email: '',\r\n name: '',\r\n userId: '',\r\n };\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 isUserExist = false;\r\n selectedOrganizations: AutoCompleteOption[] = [];\r\n timeOutId!: ReturnType<typeof setTimeout>;\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,\r\n // eslint-disable-next-line no-unused-vars\r\n public elementRef: ElementRef // eslint-disable-next-line no-empty-function, no-unused-vars\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.showAlertMessage(this.constants?.errors?.ER1001, AlertType.ERROR);\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 this.alertService.isAlertClosed\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((isClosed: boolean) => {\r\n if (isClosed && !this.isSearchUserForm) {\r\n this.elementRef?.nativeElement?.querySelector('input')?.focus();\r\n }\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.isUserExist = true;\r\n if (this.userInfo?.userId) this.validateUserExistence();\r\n else this.initializeAddUserFormGroup();\r\n }\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error: (error: any) => {\r\n this.isUserExist = false;\r\n const errorCodes = error?.error?.body?.errorCodes;\r\n if (errorCodes?.includes('2001')) {\r\n this.isSearchUserForm = false;\r\n this.rightButtonLabel =\r\n this.addUserRosterTexts?.label?.saveButtonLabel;\r\n this.isSubmitButtonDisabled = true;\r\n if (\r\n !this.isAddUserFormEmailSearch ||\r\n !(\r\n this.addUserFormGroupRef.contains('firstName') &&\r\n this.addUserFormGroupRef.contains('lastName')\r\n )\r\n ) {\r\n this.userInfo.email = email;\r\n this.updateAddUserFormGroupValues(\r\n JSON.stringify(this.addUserFormGroupRef?.value)\r\n );\r\n } else {\r\n this.addUserFormGroupRef?.get('firstName')?.setValue('');\r\n this.addUserFormGroupRef?.get('lastName')?.setValue('');\r\n }\r\n this.showAlertMessage(\r\n this.constants?.errors?.['2001'],\r\n AlertType.ERROR\r\n );\r\n } else {\r\n this.handleErrors(error);\r\n }\r\n },\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 as string,\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.showAlertMessage(\r\n this.constants?.errors?.['1022'],\r\n AlertType.ERROR\r\n );\r\n this.isSubmitButtonDisabled = true;\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.initializeAddUserFormGroup();\r\n } else this.handleErrors(error);\r\n },\r\n });\r\n }\r\n /**\r\n * Initialize the form fields required for add new user to the roster based on the searched email.\r\n * @memberof AddUserRosterComponent\r\n */\r\n initializeAddUserFormGroup() {\r\n this.isSearchUserForm = false;\r\n this.rightButtonLabel = this.addUserRosterTexts?.label?.saveButtonLabel;\r\n const addUserFormGroupPrevValues = JSON.stringify(\r\n this.addUserFormGroupRef?.value\r\n );\r\n if (!this.isAddUserFormEmailSearch) {\r\n this.selectedUserRoles = [];\r\n this.isSubmitButtonDisabled = true;\r\n this.createAddUserFormGroup();\r\n if (this.groupRosterType === GroupRosterType.INDIVIDUAL) {\r\n this.updateAddUserFormGroup();\r\n }\r\n } else {\r\n this.updateAddUserFormGroupValues(addUserFormGroupPrevValues);\r\n this.addUserFormGroupRef\r\n ?.get('emailSearch')\r\n ?.setValue(this.userInfo?.email);\r\n this.addUserFormGroupRef?.get('fullName')?.setValue(this.userInfo?.name);\r\n if (this.timeOutId) clearTimeout(this.timeOutId);\r\n this.timeOutId = setTimeout(() => {\r\n this.updateSubmitButtonStatus();\r\n }, 0);\r\n }\r\n }\r\n\r\n /**\r\n * Creates add user form group and updates it with prev form values.\r\n * @param {string} stringifiedAddUserFormPrevValues\r\n * @memberof AddUserRosterComponent\r\n */\r\n updateAddUserFormGroupValues(addUserFormValues: string): void {\r\n this.createAddUserFormGroup(this.userInfo?.email);\r\n if (this.groupRosterType === GroupRosterType.INDIVIDUAL) {\r\n const formValues = addUserFormValues ? JSON.parse(addUserFormValues) : '';\r\n this.updateAddUserFormGroup({\r\n classification: formValues?.classification,\r\n memberType: formValues?.memberType,\r\n representingOrg: formValues?.representingOrg,\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initialize the add user form group array.\r\n * @param {string} [email]\r\n * @memberof AddUserRosterComponent\r\n */\r\n createAddUserFormGroup(email?: string): void {\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.isUserExist ? this.userInfo?.email : 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?.email,\r\n ariaLabel: this.addUserRosterTexts?.label?.ariaLabel?.email,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById?.email,\r\n },\r\n ...(this.isUserExist\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 : [\r\n {\r\n type: FormControlType.INPUT,\r\n label: this.addUserRosterTexts?.label?.firstName + '*',\r\n controlName: 'firstName',\r\n validation: [\r\n Validators.required,\r\n Validators.pattern(\r\n GroupsValidationPatterns.firstOrLastName\r\n ),\r\n ],\r\n requiredErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.required,\r\n patternErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.pattern\r\n ?.firstOrLastName,\r\n ariaLabel:\r\n this.addUserRosterTexts?.label?.ariaLabel?.firstName,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById\r\n ?.firstName,\r\n supportMessage:\r\n this.addUserRosterTexts?.supportText?.firstName,\r\n },\r\n {\r\n type: FormControlType.INPUT,\r\n label: this.addUserRosterTexts?.label?.lastName + '*',\r\n controlName: 'lastName',\r\n validation: [\r\n Validators.required,\r\n Validators.pattern(\r\n GroupsValidationPatterns.firstOrLastName\r\n ),\r\n ],\r\n requiredErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.required,\r\n patternErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.pattern\r\n ?.firstOrLastName,\r\n ariaLabel:\r\n this.addUserRosterTexts?.label?.ariaLabel?.lastName,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById\r\n ?.lastName,\r\n supportMessage:\r\n this.addUserRosterTexts?.supportText?.lastName,\r\n },\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 }\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 * @param {{\r\n * classification: SelectOption;\r\n * memberType: SelectOption;\r\n * representingOrg: SelectOption;\r\n * }} [addUserFormGroupPrevValues]\r\n * @memberof AddUserRosterComponent\r\n */\r\n updateAddUserFormGroup(addUserFormGroupPrevValues?: {\r\n classification: SelectOption;\r\n memberType: SelectOption;\r\n representingOrg: SelectOption;\r\n }): 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 value: this.classifications?.find(\r\n (classification) =>\r\n classification.id ===\r\n addUserFormGroupPrevValues?.classification?.id\r\n ),\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 value: this.memberTypes?.find(\r\n (memberType) =>\r\n memberType.id === addUserFormGroupPrevValues?.memberType?.id\r\n ),\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.MULTI_SELECT_AUTO_COMPLETE,\r\n label: this.addUserRosterTexts?.label?.representingOrganization + '*',\r\n controlName: 'representingOrg',\r\n // Validate on blur so the required error surfaces only after the user\r\n // leaves the field — never mid-selection (avoids the error flash).\r\n updateOn: 'blur',\r\n value: this.selectedOrganizations.length\r\n ? this.selectedOrganizations\r\n : '',\r\n validation: [\r\n representingOrgRequiredValidator(),\r\n skipWhenArray(\r\n Validators.maxLength(\r\n GroupsValidationPatterns.representingOrgNameMaxLength\r\n )\r\n ),\r\n skipWhenArray(\r\n Validators.minLength(\r\n GroupsValidationPatterns.representingOrgNameMinLength\r\n )\r\n ),\r\n skipWhenArray(\r\n Validators.pattern(\r\n GroupsValidationPatterns.representingOrganization\r\n )\r\n ),\r\n ],\r\n multiSelectAutoCompleteOptions: 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 ?.representingOrganizationMaxChars,\r\n minErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.limit\r\n ?.representingOrganizationMinChars,\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 (\r\n (form[0].get('representingOrg')?.status === FormStatus?.INVALID &&\r\n this.isAllOtherControlsValid() &&\r\n this.selectedOrganizations.length > 0) ||\r\n form[0].status === FormStatus?.VALID\r\n ) {\r\n this.groupService\r\n .addNewGroupUser(this.getAddNewUserPayload(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 // 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 if (this.groupRosterType === GroupRosterType.SYSTEM_USER) {\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 /**\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 const memberTypes = this.groupService.getMemberTypes();\r\n memberTypes?.forEach((option) => {\r\n this.memberTypes?.push({\r\n id: option.roleId,\r\n name: option.roleName,\r\n });\r\n });\r\n this.updateFormControlOptions(\r\n 'memberType',\r\n 'dropdownOptions',\r\n this.memberTypes\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(\r\n 'representingOrg',\r\n 'multiSelectAutoCompleteOptions',\r\n []\r\n );\r\n if (!orgName) return;\r\n const orgRequestPayload: OrganizationRequestPayload = {\r\n payload: { orgName: orgName },\r\n };\r\n this.groupService\r\n .getOrganizations(orgRequestPayload)\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 'multiSelectAutoCompleteOptions',\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 if (errorCodes[0] !== '3004') {\r\n const errorMessage = this.groupService.parseErrorMessage(errorCodes);\r\n this.showAlertMessage(\r\n errorMessage,\r\n AlertType.ERROR,\r\n errorCodes[0] === '2024'\r\n );\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.updateSubmitButtonStatus();\r\n }\r\n\r\n /**\r\n * Checks if all other control except representingOrg are valid.\r\n * @return {boolean}\r\n * @memberof AddUserRosterComponent\r\n */\r\n isAllOtherControlsValid(): boolean {\r\n return Object.keys(this.addUserFormGroupRef?.controls)\r\n ?.filter((controlName) => controlName !== 'representingOrg')\r\n .every(\r\n (controlName) =>\r\n this.addUserFormGroupRef?.get(controlName)?.status ===\r\n FormStatus?.VALID\r\n );\r\n }\r\n /**\r\n * Enables or disables submit button.\r\n * @memberof AddUserRosterComponent\r\n */\r\n updateSubmitButtonStatus(): void {\r\n if (\r\n (this.addUserFormGroupRef?.get('representingOrg')?.status ===\r\n FormStatus?.INVALID &&\r\n this.isAllOtherControlsValid() &&\r\n this.selectedOrganizations?.length > 0) ||\r\n this.addUserFormGroupRef?.status === FormStatus?.VALID\r\n )\r\n this.isSubmitButtonDisabled = false;\r\n else this.isSubmitButtonDisabled = true;\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 const formattedOptions = this.selectedOrganizations.map((option) => {\r\n return {\r\n orgId: option.id as string,\r\n orgName: option.name,\r\n };\r\n });\r\n payload = {\r\n payload: {\r\n email: this.isUserExist\r\n ? this.userInfo?.email\r\n : formData?.emailSearch,\r\n roles: this.selectedUserRoles,\r\n groupId: this.groupService.selectedGroupInfo?.groupId as string,\r\n organizations: formattedOptions,\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 if (\r\n formData?.memberType &&\r\n !payload.payload.roles?.includes(formData?.memberType?.id)\r\n )\r\n payload.payload.roles?.push(formData?.memberType?.id);\r\n } else\r\n payload = {\r\n payload: {\r\n email: this.isUserExist\r\n ? this.userInfo?.email\r\n : formData?.emailSearch,\r\n roles: this.selectedUserRoles,\r\n groupId: this.groupService.selectedGroupInfo?.groupId as string,\r\n },\r\n };\r\n if (this.isUserExist) {\r\n payload.payload.userId = this.userInfo?.userId;\r\n } else {\r\n payload.payload.firstName = formData?.firstName?.trim();\r\n payload.payload.lastName = formData?.lastName?.trim();\r\n }\r\n return payload;\r\n }\r\n\r\n /**\r\n * Disables form submit button when org name length is less than minCharToSearch and greater than zero.\r\n * @memberof AddUserRosterComponent\r\n */\r\n disableSubmitButton(): void {\r\n if (this.selectedOrganizations.length === 0) {\r\n this.updateFormControlOptions(\r\n 'representingOrg',\r\n 'multiSelectAutoCompleteOptions',\r\n []\r\n );\r\n this.isSubmitButtonDisabled = true;\r\n }\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 AddUserRosterComponent\r\n */\r\n showAlertMessage(\r\n message: string | string[],\r\n alertType: AlertType,\r\n isHtmlContent?: boolean\r\n ): void {\r\n this.alertService?.showMessage({\r\n status: 'custom',\r\n message: message,\r\n alertType: alertType,\r\n isCloseNeeded: true,\r\n isHtmlContent: isHtmlContent ?? false,\r\n });\r\n }\r\n\r\n /**\r\n * Gets selected organizations.\r\n * @param {AutoCompleteOption[]} selectedOrg\r\n * @memberof AddUserRosterComponent\r\n */\r\n getSelectedOrganizations(selectedOrg: AutoCompleteOption[]): void {\r\n this.selectedOrganizations = selectedOrg;\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 /**\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 if (this.timeOutId) clearTimeout(this.timeOutId);\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 (formMultiSelectAutoCompleteSearch)=\"getOrganizations($event)\"\r\n (multiSelectAutoCompleteOptionsSelected)=\"getSelectedOrganizations($event)\"\r\n (formMultiSelectAutoCompleteClearSearchValue)=\"disableSubmitButton()\"\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 ChipOption,\r\n CheckboxOption,\r\n FiltersAndOptions,\r\n DataTableComponent,\r\n ModalConfirmationComponent,\r\n} from '@ieeesa-npm/presentation';\r\nimport {\r\n AlertsService,\r\n GlobalErrorHandlerService,\r\n} from '@ieeesa-npm/utility';\r\nimport { AlertType } from '@ieeesa-npm/models';\r\nimport { GroupsService } from '../../services/groups.service';\r\nimport {\r\n SearchUsersPayload,\r\n FilterUsersPayload,\r\n User,\r\n LoggedInUserInfo,\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 userInfo!: LoggedInUserInfo;\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 this.userInfo = this.groupService?.getUserInfo();\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.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 this.groupService.validateAccess(PermissionType.MANAGE_ALL_ROSTERS)\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.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.memberStatus ?? 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 }\r\n this.getRoles();\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 if (this.groupRosterType === GroupRosterType.INDIVIDUAL) {\r\n this.getMemberTypes();\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 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 const memberTypes = this.groupService.getMemberTypes();\r\n memberTypes?.forEach((option) => {\r\n this.memberTypes?.push({\r\n id: option.roleId,\r\n name: option.roleName,\r\n checked: false,\r\n disabled: false,\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 if (\r\n userIds.includes(this.userInfo?.userId) &&\r\n this.groupService.isAdminUser() &&\r\n this.groupService?.getBusinessRuleOfSelectedGroup()?.isAdmin\r\n ) {\r\n this.showAlertMessage(`${constants?.errors?.[1039]}`, AlertType.ERROR);\r\n } else {\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(\r\n selectedGroupInfo?.groupId as string,\r\n userIds\r\n );\r\n }\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 canDelete: selectedUserInfo[0]?.canDelete,\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 canDelete: selectedUserInfo[0]?.canDelete,\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 [defaultSortedColumn]=\"defaultSortedColumn\"\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 SelectOption,\r\n IconButtonComponent,\r\n IconButton,\r\n AlignType,\r\n ModalConfirmationComponent,\r\n SelectComponent,\r\n LegendComponent,\r\n SearchType,\r\n SearchComponent,\r\n ModalComponent,\r\n BreakpointObserverService\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 AlertsService,\r\n GlobalErrorHandlerService,\r\n} from '@ieeesa-npm/utility';\r\nimport { AlertType, ModalType } from '@ieeesa-npm/models';\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\nimport { GroupPermissionsMapService } from './services/group-permissions-map-service';\r\nimport { LoggedInUserInfo } from './models/user.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 searchGroupIcon: IconButton = {\r\n id: 3,\r\n ariaLabel: this.viewGroupTexts?.ariaLabel.search,\r\n iconURL: this.viewGroupTexts?.searchGroupIcon,\r\n toolTip: this.viewGroupTexts?.ariaLabel.search,\r\n };\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 @Input() userInfo!: LoggedInUserInfo;\r\n permissionType = PermissionType;\r\n functionType!: GroupFunctionType;\r\n alignmentType = AlignType;\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 // eslint-disable-next-line no-unused-vars\r\n private groupPermissionsService: GroupPermissionsMapService\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.groupsService?.setUserInfo(this.userInfo);\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 this.groupPermissionsService?.getGlobalGroupPermissions()\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 const selectedGroupInfo = this.groupsService.getSelectedGroupInfo();\r\n if (response === GroupFunctionType.EDIT_ROSTER_USER_ROLE) {\r\n this.openEditUserRolesModal(selectedGroupInfo as GroupInfo);\r\n }\r\n if (response === GroupFunctionType.ADD_USER_TO_ROSTER) {\r\n this.openAddUserRosterModal(selectedGroupInfo as GroupInfo);\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 const groupTypes = this.groupsService.getLoadedGroupTypes();\r\n if (groupTypes && groupTypes?.length > 0) {\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 } else\r\n this.showAlertMessage(AlertType.ERROR, this.constants?.errors?.['1010']);\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(selectedGroupInfo: GroupInfo): void {\r\n const selectedUserInfo = this.groupsService?.getSelectedUserInfo();\r\n const dialogOptions = {\r\n heading: selectedGroupInfo?.groupName,\r\n subHeading: 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(selectedGroupInfo: GroupInfo): void {\r\n const dialogOptions = {\r\n heading: selectedGroupInfo?.groupName,\r\n subHeading: 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 this.functionType === GroupFunctionType.CREATE ||\r\n this.functionType === GroupFunctionType.EDIT\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 (this.trimmedSearchTerm)\r\n this.onGroupSearchClick(this.trimmedSearchTerm);\r\n else if (this.selectedGroupType.id !== '')\r\n this.onGroupTypeFiltered(this.selectedGroupType);\r\n else 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 isParentGroupChanged =\r\n this.groupsService.getParentGroupChangeStatus();\r\n const editGroupInfo = groupInfo as EditGroupAndParentInfo;\r\n if (this.trimmedSearchTerm)\r\n this.onGroupSearchClick(this.trimmedSearchTerm);\r\n else if (this.selectedGroupType.id !== '')\r\n this.onGroupTypeFiltered(this.selectedGroupType);\r\n else if (editGroupInfo?.parentGroupInfo?.groupId === undefined) {\r\n this.getGroups();\r\n } else if (isParentGroupChanged) {\r\n this.groupsService.setGroupFunctionType(\r\n GroupFunctionType.REASSIGN_PARENT_GROUP\r\n );\r\n this.groupsService.setParentGroupChangeStatus(false);\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 if (this.trimmedSearchTerm)\r\n this.onGroupSearchClick(this.trimmedSearchTerm);\r\n else if (this.selectedGroupType.id !== '')\r\n this.onGroupTypeFiltered(this.selectedGroupType);\r\n else 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 this.groupsService.setGroupFunctionType(GroupFunctionType.SEARCH);\r\n if (\r\n !this.trimmedSearchTerm &&\r\n (this.isGroupSearchActive || this.isGroupFilterActive)\r\n ) {\r\n this.onGroupTypeFiltered(this.selectedGroupType);\r\n return;\r\n }\r\n if (!this.trimmedSearchTerm) return;\r\n this.isGroupSearchOrFilterActive = !!this.trimmedSearchTerm;\r\n this.onGroupSearch();\r\n this.groupsService\r\n .groupsByNameAcronym(\r\n this.trimmedSearchTerm,\r\n this.viewGroupTexts?.allGroupTypesOption ===\r\n this.selectedGroupType?.name\r\n ? undefined\r\n : (this.selectedGroupType?.id as number)\r\n )\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 const groupTypeOptions: SelectOption[] = [];\r\n groupTypeOptions.push({\r\n id: '',\r\n name: this.viewGroupTexts?.allGroupTypesOption,\r\n });\r\n this.sortGroupTypes()?.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 * Returns the sorted group types based on the view order.\r\n * @return [string, GroupType][]\r\n * @memberof GroupsComponent\r\n */\r\n sortGroupTypes(): [string, GroupType][] {\r\n return Object.entries(this.groupTypes).sort(\r\n (groupA: [string, GroupType], groupB: [string, GroupType]) =>\r\n (groupA[1]?.viewOrder as number) - (groupB[1]?.viewOrder as number)\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 if (this.trimmedSearchTerm) {\r\n this.onGroupSearchClick(this.trimmedSearchTerm);\r\n this.showGroupFilter();\r\n return;\r\n }\r\n this.getGroupsPayload = {\r\n groupId: '',\r\n groupTypeId: this.selectedGroupType?.id as string,\r\n };\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 if (errorCodes?.includes('1010')) this.parentGroupsInfo = [];\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 px-4\">\r\n <div\r\n class=\"ieeesa-groups__info d-flex justify-content-between pb-3 align-items-center\"\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 class=\"mb-0\"\r\n [ngClass]=\"\r\n isMobileView\r\n ? 'ieeesa-title-lg-24 p-0'\r\n : 'ieeesa-headline-lg-32 ieeesa-groups__info__heading'\r\n \"\r\n >\r\n {{ groupsPageInfo?.groupsTitle }}\r\n </p>\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=\"\r\n validateAccess(permissionType.CREATE_ROOT_GROUP) ||\r\n validateAccess(this.permissionType.MANAGE_ALL_GROUPS)\r\n \"\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 <ieeesa-icon-button\r\n [iconButton]=\"searchGroupIcon\"\r\n (iconButtonClick)=\"onGroupSearch()\"\r\n >\r\n </ieeesa-icon-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 <div\r\n class=\"order-2 order-sm-1 col-12 col-md-7 col-lg-7 col-xl-7 d-flex flex-column justify-content-between\"\r\n >\r\n <p class=\"ieeesa-body-md-16\">\r\n {{ groupsPageInfo?.groupsDescription }}\r\n </p>\r\n <button\r\n [ngClass]=\"\r\n isMobileView ? 'p-0' : 'ieeesa-groups__actions__add-group-btn'\r\n \"\r\n mat-button\r\n *ngIf=\"\r\n validateAccess(permissionType.CREATE_ROOT_GROUP) ||\r\n validateAccess(this.permissionType.MANAGE_ALL_GROUPS)\r\n \"\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\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 [ngClass]=\"isMobileView ? 'ieeesa-search-mobile-view' : ''\"\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 [isSortNeeded]=\"false\"\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</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/components/reciprocal-credit-section/reciprocal-credit-section.component';\r\nexport * from './lib/components/add-working-groups/add-working-groups.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/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/role-type.model';\r\nexport * from './lib/models/roster-type.model';\r\nexport * from './lib/models/table-column-schema-user-group.model';\r\nexport * from './lib/models/parent-groups-info.model';\r\nexport * from './lib/models/reciprocal-credit.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":["i3","i1.GroupPermissionsMapService","screenTexts?.errors","i1","i2.UserPermissionsService","i3.GroupPermissionsMapService","i1.GroupsService","i2","screenTexts?.createGroup","takeUntil","map","constants","i4","constants?.errors","constants?.deleteUsersGroup","constants?.ariaLabel","i2.GroupsService","screenTexts?.deleteGroup","i5.UserPermissionsService","i6.GroupPermissionsMapService","i7"],"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/group-function-type.model.ts","../../../projects/groups/src/lib/components/add-working-groups/add-working-groups.component.ts","../../../projects/groups/src/lib/components/add-working-groups/add-working-groups.component.html","../../../projects/groups/src/lib/models/roster-type.model.ts","../../../projects/groups/src/lib/models/permission-type.model.ts","../../../projects/groups/src/lib/models/role-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/reciprocal-credit-section/reciprocal-credit-section.component.ts","../../../projects/groups/src/lib/components/reciprocal-credit-section/reciprocal-credit-section.component.html","../../../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/services/roster-export.service.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\nimport { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\r\n\r\n/**\r\n * Required validator for the multi-select-autocomplete \"Representing Organization\"\r\n * control. The control's value is the array of selected chips (set by the\r\n * component), so this treats a non-empty array — or a non-empty string — as\r\n * valid. Keying off the selection (rather than the raw input text) prevents the\r\n * required error from flashing when Material momentarily writes a transient\r\n * empty value during option selection.\r\n * @return {ValidatorFn}\r\n */\r\nexport function representingOrgRequiredValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control?.value;\r\n const hasSelection = Array.isArray(value)\r\n ? value.length > 0\r\n : !!(typeof value === 'string' ? value.trim() : value);\r\n return hasSelection ? null : { required: true };\r\n };\r\n}\r\n\r\n/**\r\n * Wraps a string-oriented validator (minLength/maxLength/pattern) so it is\r\n * skipped when the control value is the selection array. Those built-in\r\n * validators evaluate `.length` / string shape and would incorrectly fail\r\n * against the chips array; they should only constrain free-text input.\r\n * @param {ValidatorFn} validator the underlying string validator\r\n * @return {ValidatorFn}\r\n */\r\nexport function skipWhenArray(validator: ValidatorFn): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n if (Array.isArray(control?.value)) {\r\n return null;\r\n }\r\n return validator(control);\r\n };\r\n}\r\n\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 representingOrgNameMinLength: 3,\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 // First or Last Name field regular expression which does not allow only whitespace or empty string.\r\n firstOrLastName: /^(?!\\s*$).+/\r\n};\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 SEARCH = 'SEARCH',\r\n REASSIGN_PARENT_GROUP = 'REASSIGN_PARENT_GROUP',\r\n EDIT_ROSTER_USER_ROLE = 'EDIT_ROSTER_USER_ROLE',\r\n ADD_USER_TO_ROSTER = 'ADD_USER_TO_ROSTER',\r\n}","import { Component, Inject, ViewEncapsulation } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport {\r\n MAT_DIALOG_DATA,\r\n MatDialogModule,\r\n MatDialogRef,\r\n} from '@angular/material/dialog';\r\nimport { AvailableForeignGroup } from '../../models/reciprocal-credit.model';\r\n\r\n/** Data passed into the Add Working Groups modal. */\r\nexport interface AddWorkingGroupsDialogData {\r\n availableGroups: AvailableForeignGroup[];\r\n selectedGroupIds: string[];\r\n}\r\n\r\n/** Row model with a local selection flag. */\r\ninterface WorkingGroupRow extends AvailableForeignGroup {\r\n selected: boolean;\r\n}\r\n\r\n/**\r\n * Modal to select one or more foreign working groups (under the same committee)\r\n * for reciprocal credit. Provides search and a checkbox table. Returns the\r\n * selected AvailableForeignGroup[] on Add.\r\n * @export\r\n * @class AddWorkingGroupsComponent\r\n */\r\n@Component({\r\n // eslint-disable-next-line @angular-eslint/component-selector\r\n selector: 'ieeesa-add-working-groups',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, MatButtonModule, MatDialogModule],\r\n templateUrl: './add-working-groups.component.html',\r\n styleUrls: ['./add-working-groups.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class AddWorkingGroupsComponent {\r\n rows: WorkingGroupRow[] = [];\r\n searchTerm = '';\r\n\r\n // eslint-disable-next-line no-unused-vars\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private dialogRef: MatDialogRef<AddWorkingGroupsComponent>,\r\n // eslint-disable-next-line no-unused-vars\r\n @Inject(MAT_DIALOG_DATA) private data: AddWorkingGroupsDialogData\r\n ) {\r\n const selectedIds = new Set(this.data?.selectedGroupIds ?? []);\r\n this.rows = (this.data?.availableGroups ?? []).map((group) => ({\r\n ...group,\r\n selected: selectedIds.has(group.groupId),\r\n }));\r\n }\r\n\r\n /** Rows filtered by the search term (group name). */\r\n get filteredRows(): WorkingGroupRow[] {\r\n const term = this.searchTerm.trim().toLowerCase();\r\n if (!term) return this.rows;\r\n return this.rows.filter((row) =>\r\n row.groupName.toLowerCase().includes(term)\r\n );\r\n }\r\n\r\n /** Count of currently selected rows (for the title). */\r\n get selectedCount(): number {\r\n return this.rows.filter((row) => row.selected).length;\r\n }\r\n\r\n /** Toggle a row's selection. */\r\n toggleRow(row: WorkingGroupRow): void {\r\n row.selected = !row.selected;\r\n }\r\n\r\n onCancel(): void {\r\n this.dialogRef.close();\r\n }\r\n\r\n onAdd(): void {\r\n const selected: AvailableForeignGroup[] = this.rows\r\n .filter((row) => row.selected)\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars\r\n .map(({ selected, ...group }) => group);\r\n this.dialogRef.close(selected);\r\n }\r\n}\r\n","<div class=\"ieeesa-add-working-groups\">\r\n <div class=\"ieeesa-add-working-groups__header\">\r\n <h2 class=\"ieeesa-add-working-groups__title\">\r\n Add Working Groups ({{ selectedCount }})\r\n </h2>\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-add-working-groups__close\"\r\n (click)=\"onCancel()\"\r\n aria-label=\"Close\"\r\n >\r\n ×\r\n </button>\r\n </div>\r\n\r\n <p class=\"ieeesa-add-working-groups__subtitle\">Choose working groups under the same committee</p>\r\n\r\n <!-- Search -->\r\n <div class=\"ieeesa-add-working-groups__search\">\r\n <input\r\n type=\"text\"\r\n [(ngModel)]=\"searchTerm\"\r\n placeholder=\"Search by name...\"\r\n aria-label=\"Search working groups\"\r\n />\r\n </div>\r\n\r\n <!-- Table -->\r\n <div class=\"ieeesa-add-working-groups__table\">\r\n <div class=\"ieeesa-add-working-groups__table-head\">\r\n <span class=\"ieeesa-add-working-groups__col-name\">Working Group</span>\r\n </div>\r\n\r\n <div\r\n *ngFor=\"let row of filteredRows\"\r\n class=\"ieeesa-add-working-groups__row\"\r\n >\r\n <label class=\"ieeesa-add-working-groups__col-name\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"row.selected\"\r\n (change)=\"toggleRow(row)\"\r\n />\r\n <span>{{ row.groupName }}</span>\r\n </label>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"filteredRows.length === 0\"\r\n class=\"ieeesa-add-working-groups__empty\"\r\n >\r\n No working groups found.\r\n </div>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"ieeesa-add-working-groups__actions\">\r\n <button\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-tertiary-button\"\r\n (click)=\"onCancel()\"\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-primary-button\"\r\n [disabled]=\"selectedCount === 0\"\r\n (click)=\"onAdd()\"\r\n >\r\n Add\r\n </button>\r\n </div>\r\n</div>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum GroupRosterType {\r\n INDIVIDUAL = 'Individual',\r\n SYSTEM_USER = 'User',\r\n ENTITY = 'Entity',\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 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 MANAGE_SYSTEM_USERS = 'MANAGE_SYSTEM_USERS',\r\n VIEW_ALL_GROUPS = 'VIEW_ALL_GROUPS',\r\n MANAGE_ALL_GROUPS = 'MANAGE_ALL_GROUPS',\r\n VIEW_ALL_ROSTERS = 'VIEW_ALL_ROSTERS',\r\n MANAGE_ALL_ROSTERS = 'MANAGE_ALL_ROSTERS',\r\n}\r\n","/* eslint-disable no-unused-vars */\r\nexport enum RoleType {\r\n OFFICER = 'Officer',\r\n SYSTEM = 'System',\r\n MEMBER_LEVEL = 'Member Level',\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_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_fc522748-e2d4-440c-b6c6-41aaca75a80f',\r\n },\r\n {\r\n permissionType: PermissionType.CREATE_SUBGROUP,\r\n permissionName: 'Create Subgroup',\r\n permissionId: 'PERM_8f8a203e-d992-4555-9c42-ac6970f2d376',\r\n },\r\n {\r\n permissionType: PermissionType.DELETE_GROUP,\r\n permissionName: 'Delete Group',\r\n permissionId: 'PERM_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_d64e1f09-d3f7-4f86-a94c-4782a2f60571',\r\n },\r\n {\r\n permissionType: PermissionType.VIEW_GROUP_OFFICERS,\r\n permissionName: 'View Group Officers',\r\n permissionId: 'PERM_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_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_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_1969fecb-6383-446e-9276-b6a7b7265cb4',\r\n },\r\n ];\r\n globalGroupPermissions: GroupPermission[] = [\r\n {\r\n permissionType: PermissionType.MANAGE_SYSTEM_USERS,\r\n permissionName: 'Manage System Users',\r\n permissionId: 'PERM_d2c103e9-20c6-4dd5-b320-f7d4d017c574',\r\n },\r\n {\r\n permissionType: PermissionType.VIEW_ALL_GROUPS,\r\n permissionName: 'View All Group Details',\r\n permissionId: 'PERM_741d7504-7595-4bec-811f-8d601333e7c4',\r\n },\r\n {\r\n permissionType: PermissionType.MANAGE_ALL_GROUPS,\r\n permissionName: 'Manage All Group Details',\r\n permissionId: 'PERM_eebde105-0b53-44c8-babc-066be903229f',\r\n },\r\n {\r\n permissionType: PermissionType.VIEW_ALL_ROSTERS,\r\n permissionName: 'View All Rosters',\r\n permissionId: 'PERM_0109d7c7-6d64-4673-b63b-3a23f3323530',\r\n },\r\n {\r\n permissionType: PermissionType.MANAGE_ALL_ROSTERS,\r\n permissionName: 'Manage All Rosters',\r\n permissionId: 'PERM_6fec2e8c-1b48-46a9-b394-34d3648d6fe8',\r\n },\r\n ];\r\n /**\r\n * Returns group-wise permission mappings.\r\n * @return {GroupPermission[]}\r\n * @memberof GroupPermissionsMapService\r\n */\r\n getGroupPermissions(): GroupPermission[] {\r\n return this.groupPermissions;\r\n }\r\n /**\r\n * Returns global permissions mapping for groups.\r\n * Global permissions are maintained separately as global permissions also include role based group wise permissions irrespective of the attached group.\r\n * @return {GroupPermission[]}\r\n * @memberof GroupPermissionsMapService\r\n */\r\n getGlobalGroupPermissions(): GroupPermission[] {\r\n return this.globalGroupPermissions;\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(\r\n userPermissions: UserPermission[],\r\n groupPermissions: GroupPermission[]\r\n ): GroupPermission[] {\r\n const userGroupPermissions = groupPermissions?.filter(\r\n (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 FilterUsersPayload,\r\n GetGroupUsersResponse,\r\n User,\r\n LoggedInUserInfo,\r\n} from '../models/user.model';\r\nimport { Role } from '../models/role.model';\r\nimport { EditGroupPayload } from '../models/edit-group.model';\r\nimport {\r\n AvailableForeignGroup,\r\n ReciprocalCreditConfigRow,\r\n ReciprocalCreditResponse,\r\n SaveReciprocalCreditPayload,\r\n} from '../models/reciprocal-credit.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 RepresentingOrganization,\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 {\r\n OrganizationRequestPayload,\r\n OrganizationResponse,\r\n} from '../models/organization.model';\r\nimport { ClassificationResponse } from '../models/classification.model';\r\nimport { GroupRosterType } from '../models/roster-type.model';\r\nimport { FormStatus, CheckboxOption, AlertType } from '@ieeesa-npm/models';\r\nimport { FormControlStatus } from '@angular/forms';\r\nimport {\r\n GroupPermission,\r\n UserPermission,\r\n} from '../models/group-permissions.model';\r\nimport { PermissionType } from '../models/permission-type.model';\r\nimport { UserPermissionsService } from './user-permissions.service';\r\nimport { GroupPermissionsMapService } from './group-permissions-map-service';\r\nimport { ParentGroupsInfo } from '../models/parent-groups-info.model';\r\nimport { RoleType } from '../models/role-type.model';\r\n\r\n/**\r\n * Groups service is an abstract layer and responsible for managing groups REST API calls.\r\n * @class GroupsService\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class GroupsService {\r\n groupsText = screenTexts?.errors;\r\n apiBaseUrl!: string;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n userPermission: any;\r\n selectedGroupInfo!: GroupInfo | undefined;\r\n groupFunctionType!: GroupFunctionType;\r\n selectedGroupParentInfo!: GroupInfo | undefined;\r\n 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 isParentGroupChanged = false;\r\n userInfo!: LoggedInUserInfo;\r\n memberTypes!: Role[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n representingOrganizations: RepresentingOrganization[] = [];\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 private groupPermissionsService: GroupPermissionsMapService,\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}/groups/config/groupTypeConfigInfo`)\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 * Get allowed parent groups from API and returns it as an observable.\r\n * @param {string} groupId\r\n * @return {Observable<GroupTypeResponse>}\r\n * @memberof GroupsService\r\n */\r\n getAllowedParentGroups(groupId: string): Observable<ParentGroupsInfo[]> {\r\n return this.httpService\r\n .getData(`${this.apiBaseUrl}/groups/allowedParentGroups/${groupId}`)\r\n .pipe(\r\n map((response) => {\r\n return response?.body;\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(\r\n this.groupsText[errorMessageKey] ??\r\n errorCodes[index] ??\r\n this.groupsText?.default\r\n );\r\n });\r\n return errorMessage;\r\n }\r\n\r\n /**\r\n * Handles custom API errors: maps BE error codes to messages and shows an\r\n * alert. Mirrors the events-and-meetings error handling so reciprocal-credit\r\n * failures (e.g. MTG-011 duplicate, MTG-012 permission) surface consistently.\r\n * @param {*} error the HttpErrorResponse from a failed call\r\n * @param {boolean} [showAlert=true] whether to display the alert\r\n * @memberof GroupsService\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n handleErrors(error: any, showAlert = true): void {\r\n const errorCodes = error?.error?.body?.errorCodes;\r\n if (Array.isArray(errorCodes) && !error?.error?.status) {\r\n const errorMessage = this.parseErrorMessage(errorCodes);\r\n if (showAlert) {\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 }\r\n }\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 const memberTypes: Role[] = [];\r\n response?.body?.forEach((role: Role) => {\r\n if (role?.roleTypeName === RoleType.MEMBER_LEVEL) {\r\n memberTypes.push(role);\r\n } else {\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 });\r\n this.setGroupTypeUserRoles(rolesOption);\r\n this.setMemberTypes(memberTypes);\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 * Returns the true if logged in user is admin.\r\n * @return {boolean}\r\n * @memberof GroupsService\r\n */\r\n isAdminUser(): boolean {\r\n return this.validateAccess(PermissionType.MANAGE_SYSTEM_USERS);\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 this.representingOrganizations = [];\r\n response?.body?.forEach((item) => {\r\n const classificationDesc =\r\n item.classification?.classificationName +\r\n ' (' +\r\n item.classification?.classificationDesc +\r\n ')';\r\n const rolesList = item?.rolesList?.reduce(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (roleList: any, role: Role) => {\r\n roleList[\r\n role.roleTypeName === RoleType.MEMBER_LEVEL ? 'memberType' : 'roles'\r\n ].push(role?.roleName);\r\n return roleList;\r\n },\r\n { memberType: [], roles: [] }\r\n );\r\n this.representingOrganizations?.push({\r\n userId: item?.userId,\r\n organizations: item?.organizations,\r\n });\r\n const organizations = item?.organizations\r\n ? item?.organizations?.map((org) => org?.orgName).join('; ')\r\n : null;\r\n users.push({\r\n userId: item.userId,\r\n name: item.name,\r\n email: item.email,\r\n role: rolesList?.roles?.length ? rolesList?.roles?.join(', ') : null,\r\n classification: item.classification?.classificationId\r\n ? classificationDesc\r\n : null,\r\n memberStatus: rolesList?.memberType?.length\r\n ? rolesList?.memberType[0]\r\n : null,\r\n organization: organizations,\r\n employer: item.employer?.orgName ?? null,\r\n canDelete: !(\r\n item?.userId === this.userInfo?.userId &&\r\n this.isAdminUser() &&\r\n this.getBusinessRuleOfSelectedGroup()?.isAdmin\r\n ),\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 ): 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 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(\r\n searchTerm: string,\r\n filteredGroupType?: number\r\n ): Observable<GetGroupResponse> {\r\n const searchGroupsUrl = `${this.apiBaseUrl}/groups/groupsByNameAcronym?name=${searchTerm}`;\r\n return this.httpService\r\n .getData(\r\n filteredGroupType\r\n ? searchGroupsUrl + `&groupType=${filteredGroupType}`\r\n : searchGroupsUrl\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 * 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 * Sets the logged In user information.\r\n * @param {LoggedInUserInfo} userInfo\r\n * @memberof GroupsService\r\n */\r\n setUserInfo(userInfo: LoggedInUserInfo): void {\r\n this.userInfo = userInfo;\r\n }\r\n /**\r\n * Returns the logged in user information.\r\n * @return {LoggedInUserInfo}\r\n * @memberof GroupsService\r\n */\r\n getUserInfo(): LoggedInUserInfo {\r\n return this.userInfo;\r\n }\r\n /**\r\n * Validates permission based access for provided feature.\r\n * Checks for group level permissions, and provides access based on individual group permissions.\r\n * For global permissions provides access across the individual groups or System groups.\r\n * @param {PermissionType} permissionType\r\n * @return {boolean}\r\n * @memberof GroupsService\r\n */\r\n validateAccess(\r\n permissionType: PermissionType,\r\n permissions?: UserPermission[] | null\r\n ): boolean {\r\n if (permissions) {\r\n const userPermissionsToGroup =\r\n this.userPermissionsService.filterUserGroupPermissions(\r\n permissions,\r\n this.groupPermissionsService.getGroupPermissions()\r\n );\r\n return this.userPermissionsService.validateAccessPermission(\r\n permissionType,\r\n userPermissionsToGroup\r\n );\r\n }\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 {OrganizationRequestPayload} orgRequestPayload\r\n * @return {Observable<OrganizationResponse>}\r\n * @memberof GroupsService\r\n */\r\n getOrganizations(\r\n orgRequestPayload: OrganizationRequestPayload\r\n ): Observable<OrganizationResponse> {\r\n return this.httpService\r\n .postData(\r\n `${this.apiBaseUrl}/groups/roster/organizations`,\r\n orgRequestPayload\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 * 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 const businessRule = this.getLoadedGroupTypes()?.find(\r\n (group) => group?.configFieldId === this.getSelectedGroupInfo()?.groupType\r\n )?.configFieldValue?.businessRule;\r\n if(businessRule?.rosterType === GroupRosterType.ENTITY)\r\n businessRule.rosterType = GroupRosterType.INDIVIDUAL;\r\n return 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 /**\r\n * Sets isParentGroupChanged true or false.\r\n * @param {boolean} isParentGroupChanged\r\n * @memberof GroupsService\r\n */\r\n setParentGroupChangeStatus(isParentGroupChanged: boolean): void {\r\n this.isParentGroupChanged = isParentGroupChanged;\r\n }\r\n\r\n /**\r\n * Returns isParentGroupChanged value.\r\n * @return {boolean}\r\n * @memberof GroupsService\r\n */\r\n getParentGroupChangeStatus(): boolean {\r\n return this.isParentGroupChanged;\r\n }\r\n\r\n /**\r\n * Sets the member types.\r\n * @param {Role[]} memberTypes\r\n * @memberof GroupsService\r\n */\r\n setMemberTypes(memberTypes: Role[]): void {\r\n this.memberTypes = memberTypes;\r\n }\r\n /**\r\n * Returns the member types.\r\n * @return {Role[]}\r\n * @memberof GroupsService\r\n */\r\n getMemberTypes(): Role[] {\r\n return this.memberTypes;\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // Reciprocal Credit (SP3M-22)\r\n // The reciprocal controller lives on the MEETINGS service, reached through the\r\n // gateway. apiBaseUrl = appConfig.baseApiUrl (ends in `/v1`), and the gateway\r\n // routes the meetings service under `${apiBaseUrl}/meetings` (same as every other\r\n // meetings/events call, e.g. `${apiBaseUrl}/meetings/event/...`).\r\n //\r\n // The reciprocal controller sits on the meetings service under `admin/reciprocal-credit`.\r\n // apiBaseUrl already carries the version segment (`.../v1`), and the gateway routes\r\n // the meetings service under `${apiBaseUrl}/meetings`, so the version is NOT repeated\r\n // (no second `/v1` or `/api/v1`). The full path is:\r\n // `${apiBaseUrl}/meetings/admin/reciprocal-credit/...`\r\n // = https://saappsapidev.ieee.org/v1/meetings/admin/reciprocal-credit/...\r\n // Every method builds URLs from RECIPROCAL_BASE_PATH below.\r\n // ---------------------------------------------------------------------------\r\n\r\n /** Path prefix (relative to apiBaseUrl) for the reciprocal-credit endpoints. */\r\n private readonly RECIPROCAL_BASE_PATH = 'meetings/admin/reciprocal-credit';\r\n\r\n /**\r\n * Build a reciprocal-credit endpoint URL from apiBaseUrl + the base path,\r\n * guarding against accidental double slashes if apiBaseUrl has a trailing slash.\r\n * @param {string} [suffix] extra path/query appended after the base path.\r\n * @return {string}\r\n */\r\n private buildReciprocalUrl(suffix = ''): string {\r\n const base = this.apiBaseUrl?.replace(/\\/+$/, '') ?? '';\r\n return `${base}/${this.RECIPROCAL_BASE_PATH}${suffix}`;\r\n }\r\n\r\n /**\r\n * Fetch the foreign groups available for reciprocal credit for a home group.\r\n * GET {apiBaseUrl}/meetings/admin/reciprocal-credit/{homeGroupId}/available-groups\r\n * @param {string} homeGroupId\r\n * @return {Observable<ReciprocalCreditResponse<AvailableForeignGroup[]>>}\r\n * @memberof GroupsService\r\n */\r\n getAvailableReciprocalGroups(\r\n homeGroupId: string\r\n ): Observable<ReciprocalCreditResponse<AvailableForeignGroup[]>> {\r\n return this.httpService\r\n .getData(this.buildReciprocalUrl(`/${homeGroupId}/available-groups`))\r\n .pipe(\r\n map((response) => response),\r\n catchError((error) => {\r\n throw error;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Load existing reciprocal-credit config rows for a home group (edit prefill).\r\n * GET {apiBaseUrl}/meetings/admin/reciprocal-credit/{homeGroupId}[?eventId=...]\r\n * Returns one row per foreign group; an empty array means reciprocal credit is off.\r\n * @param {string} homeGroupId\r\n * @param {string} [eventId] optional — filters to an event-scoped config.\r\n * @return {Observable<ReciprocalCreditResponse<ReciprocalCreditConfigRow[]>>}\r\n * @memberof GroupsService\r\n */\r\n getReciprocalConfig(\r\n homeGroupId: string,\r\n eventId?: string\r\n ): Observable<ReciprocalCreditResponse<ReciprocalCreditConfigRow[]>> {\r\n const query = eventId ? `?eventId=${encodeURIComponent(eventId)}` : '';\r\n return this.httpService\r\n .getData(this.buildReciprocalUrl(`/${homeGroupId}${query}`))\r\n .pipe(\r\n map((response) => response),\r\n catchError((error) => {\r\n throw error;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Save a reciprocal-credit config (creates/reactivates one row per foreign group).\r\n * POST {apiBaseUrl}/meetings/admin/reciprocal-credit\r\n * @param {SaveReciprocalCreditPayload} payload\r\n * @return {Observable<ReciprocalCreditResponse<ReciprocalCreditConfigRow[]>>}\r\n * @memberof GroupsService\r\n */\r\n saveReciprocalCredit(\r\n payload: SaveReciprocalCreditPayload\r\n ): Observable<ReciprocalCreditResponse<ReciprocalCreditConfigRow[]>> {\r\n return this.httpService\r\n .postData(this.buildReciprocalUrl(), payload)\r\n .pipe(\r\n map((response) => response),\r\n catchError((error) => {\r\n throw error;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Remove (soft delete) a single reciprocal-credit config row by its configId.\r\n * POST {apiBaseUrl}/meetings/admin/reciprocal-credit/{configId}/remove\r\n * @param {string} configId\r\n * @return {Observable<ReciprocalCreditResponse<null>>}\r\n * @memberof GroupsService\r\n */\r\n removeReciprocalConfig(\r\n configId: string\r\n ): Observable<ReciprocalCreditResponse<null>> {\r\n return this.httpService\r\n .postData(this.buildReciprocalUrl(`/${configId}/remove`), {})\r\n .pipe(\r\n map((response) => response),\r\n catchError((error) => {\r\n throw error;\r\n })\r\n );\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\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 { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\r\nimport {\r\n SlideToggleComponent,\r\n SlideToggleOption,\r\n} from '@ieeesa-npm/presentation';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { GroupsService } from '../../services/groups.service';\r\nimport {\r\n AvailableForeignGroup,\r\n ReciprocalCreditConfigRow,\r\n} from '../../models/reciprocal-credit.model';\r\nimport { AddWorkingGroupsComponent } from '../add-working-groups/add-working-groups.component';\r\n\r\n/**\r\n * A selected foreign group shown as a chip. `configId` is present only for groups\r\n * that were loaded from an existing (saved) config — it is needed to remove that\r\n * specific row on the BE when the group is de-selected or the toggle is turned off.\r\n */\r\nexport interface SelectedForeignGroup {\r\n groupId: string;\r\n groupName: string;\r\n configId?: string;\r\n}\r\n\r\n/**\r\n * Reciprocal Credit configuration section shown inside the group create/edit\r\n * form — ONLY when the group is a Working Group. Provides the enable toggle,\r\n * selected foreign-group chips, and the \"+ Add Working Groups\" launcher.\r\n *\r\n * The toggle has no backend flag: it is derived from whether any config rows\r\n * exist for the home group. Enabling persists nothing until at least one foreign\r\n * group is added (POST); disabling soft-deletes every existing config row\r\n * (one POST /{configId}/remove per row).\r\n *\r\n * The parent form reads `enabled` and `selectedForeignGroups` to build the save\r\n * request, and `removedConfigIds` to know which existing rows to remove.\r\n * @export\r\n * @class ReciprocalCreditSectionComponent\r\n */\r\n@Component({\r\n // eslint-disable-next-line @angular-eslint/component-selector\r\n selector: 'ieeesa-reciprocal-credit-section',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatButtonModule,\r\n MatDialogModule,\r\n SlideToggleComponent,\r\n ],\r\n templateUrl: './reciprocal-credit-section.component.html',\r\n styleUrls: ['./reciprocal-credit-section.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ReciprocalCreditSectionComponent implements OnInit, OnDestroy {\r\n destroy$ = new Subject<boolean>();\r\n\r\n /** Home group id (present in edit; absent in create until the group is saved). */\r\n @Input() homeGroupId?: string;\r\n /** Optional event id for event-scoped configs (omit for global/Groups screen). */\r\n @Input() eventId?: string;\r\n /** Parent committee name for the helper text (\"Only groups under ...\"). */\r\n @Input() parentCommitteeName?: string;\r\n\r\n /** Emits the current enabled state whenever it changes. */\r\n @Output() enabledChange = new EventEmitter<boolean>();\r\n /** Emits the current selected foreign groups whenever they change. */\r\n @Output() selectionChange = new EventEmitter<SelectedForeignGroup[]>();\r\n /**\r\n * Emits the config ids of previously-saved rows that have been removed locally\r\n * (chip de-selected or toggle turned off), so the parent can soft-delete each\r\n * on save.\r\n */\r\n @Output() removedConfigIdsChange = new EventEmitter<string[]>();\r\n\r\n /** Toggle state. */\r\n enabled = false;\r\n /** Option config for the shared ieeesa-slide-toggle. */\r\n toggleOption: SlideToggleOption = {\r\n id: 1,\r\n label: '',\r\n checked: false,\r\n ariaLabel: 'Enable Reciprocal Credit',\r\n };\r\n /** Selected foreign working groups (chips). */\r\n selectedForeignGroups: SelectedForeignGroup[] = [];\r\n /**\r\n * Persistent map of foreignGroupId → configId for the rows that existed on the\r\n * initial load. Kept for the whole edit session so a saved group re-selected\r\n * after being de-selected recovers its configId (and its queued removal is undone).\r\n */\r\n private savedConfigIdByGroupId = new Map<string, string>();\r\n /**\r\n * Config ids that existed on load but have since been removed locally (either by\r\n * de-selecting a chip or turning the toggle off). The parent removes each on save.\r\n */\r\n removedConfigIds: string[] = [];\r\n /** All foreign working groups available under the same committee. */\r\n availableGroups: AvailableForeignGroup[] = [];\r\n isLoading = false;\r\n\r\n // eslint-disable-next-line no-unused-vars\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 dialog: MatDialog\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n if (this.homeGroupId) {\r\n this.loadAvailableGroups(this.homeGroupId);\r\n this.loadExistingConfig(this.homeGroupId);\r\n }\r\n }\r\n\r\n /** Fetch the foreign working groups available for selection. */\r\n private loadAvailableGroups(homeGroupId: string): void {\r\n this.groupsService\r\n .getAvailableReciprocalGroups(homeGroupId)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n this.availableGroups = res?.body ?? [];\r\n },\r\n error: (error) => {\r\n this.groupsService.handleErrors(error);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Load existing reciprocal config rows for the edit-prefill path. The toggle is\r\n * ON when one or more rows exist; each chip keeps its own configId for removal.\r\n */\r\n private loadExistingConfig(homeGroupId: string): void {\r\n this.isLoading = true;\r\n this.groupsService\r\n .getReciprocalConfig(homeGroupId, this.eventId)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n const rows: ReciprocalCreditConfigRow[] = res?.body ?? [];\r\n this.selectedForeignGroups = rows.map((row) => ({\r\n groupId: row.foreignGroupId,\r\n groupName: row.foreignGroupName,\r\n configId: row.configId,\r\n }));\r\n // Remember each saved row's configId so it can be recovered if the\r\n // group is de-selected and then re-selected before saving.\r\n this.savedConfigIdByGroupId = new Map(\r\n rows.map((row) => [row.foreignGroupId, row.configId])\r\n );\r\n this.enabled = this.selectedForeignGroups.length > 0;\r\n this.toggleOption = { ...this.toggleOption, checked: this.enabled };\r\n this.removedConfigIds = [];\r\n this.emitState();\r\n this.isLoading = false;\r\n },\r\n error: (error) => {\r\n this.isLoading = false;\r\n this.groupsService.handleErrors(error);\r\n },\r\n });\r\n }\r\n\r\n /** Handle the enable/disable toggle (shared ieeesa-slide-toggle emits SlideToggleOption). */\r\n onToggleChange(option: SlideToggleOption): void {\r\n this.enabled = !!option?.checked;\r\n this.toggleOption = { ...this.toggleOption, checked: this.enabled };\r\n if (!this.enabled) {\r\n // Turning off queues every existing (saved) row for removal and clears chips.\r\n this.queueRemovalOf(this.selectedForeignGroups);\r\n this.selectedForeignGroups = [];\r\n }\r\n this.emitState();\r\n }\r\n\r\n /** Open the Add Working Groups modal. */\r\n onAddWorkingGroups(): void {\r\n const dialogRef = this.dialog.open(AddWorkingGroupsComponent, {\r\n panelClass: 'ieeesa-modal-dialog',\r\n data: {\r\n availableGroups: this.availableGroups,\r\n selectedGroupIds: this.selectedForeignGroups.map((g) => g.groupId),\r\n },\r\n });\r\n dialogRef\r\n .afterClosed()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result: AvailableForeignGroup[] | undefined) => {\r\n if (result) {\r\n this.mergeSelection(result);\r\n this.emitState();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Merge the modal's returned selection into the current chips. Groups that are\r\n * no longer selected but were saved get queued for removal; already-selected\r\n * groups keep their existing configId.\r\n */\r\n private mergeSelection(selected: AvailableForeignGroup[]): void {\r\n const selectedIds = new Set(selected.map((g) => g.groupId));\r\n\r\n // Queue removal for previously-saved chips that are no longer selected.\r\n const dropped = this.selectedForeignGroups.filter(\r\n (g) => !selectedIds.has(g.groupId)\r\n );\r\n this.queueRemovalOf(dropped);\r\n\r\n // Rebuild the selection, recovering each saved group's original configId\r\n // from the persistent load-time map (not just the currently-selected list),\r\n // so a de-selected-then-re-selected saved group keeps its configId.\r\n this.selectedForeignGroups = selected.map((g) => ({\r\n groupId: g.groupId,\r\n groupName: g.groupName,\r\n configId: this.savedConfigIdByGroupId.get(g.groupId),\r\n }));\r\n\r\n // Un-queue removal for any saved group that is (re)selected — it should be\r\n // kept, not removed, on save.\r\n this.removedConfigIds = this.removedConfigIds.filter((configId) => {\r\n const stillSelected = this.selectedForeignGroups.some(\r\n (g) => g.configId === configId\r\n );\r\n return !stillSelected;\r\n });\r\n }\r\n\r\n /** Remove a selected foreign group chip. */\r\n removeGroup(groupId: string): void {\r\n const removed = this.selectedForeignGroups.filter(\r\n (g) => g.groupId === groupId\r\n );\r\n this.queueRemovalOf(removed);\r\n this.selectedForeignGroups = this.selectedForeignGroups.filter(\r\n (g) => g.groupId !== groupId\r\n );\r\n this.emitState();\r\n }\r\n\r\n /** Track saved rows (those with a configId) that must be removed on the BE. */\r\n private queueRemovalOf(groups: SelectedForeignGroup[]): void {\r\n groups.forEach((g) => {\r\n if (g.configId && !this.removedConfigIds.includes(g.configId)) {\r\n this.removedConfigIds.push(g.configId);\r\n }\r\n });\r\n }\r\n\r\n /** True when the section is valid (toggle off, OR toggle on with ≥1 group). */\r\n get isValid(): boolean {\r\n return !this.enabled || this.selectedForeignGroups.length > 0;\r\n }\r\n\r\n private emitState(): void {\r\n this.enabledChange.emit(this.enabled);\r\n this.selectionChange.emit(this.selectedForeignGroups);\r\n this.removedConfigIdsChange.emit([...this.removedConfigIds]);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n}\r\n","<div class=\"ieeesa-reciprocal-credit\">\r\n <p class=\"ieeesa-reciprocal-credit__title\">Reciprocal Credit</p>\r\n\r\n <!-- Enable toggle -->\r\n <div class=\"ieeesa-reciprocal-credit__toggle-row\">\r\n <ieeesa-slide-toggle\r\n [slideToggle]=\"toggleOption\"\r\n (slideToggleChange)=\"onToggleChange($event)\"\r\n ></ieeesa-slide-toggle>\r\n <div class=\"ieeesa-reciprocal-credit__toggle-text\">\r\n <span class=\"ieeesa-reciprocal-credit__toggle-label\">Enable Reciprocal Credit</span>\r\n <span class=\"ieeesa-reciprocal-credit__toggle-subtext\">\r\n Use this configuration in eligible event attendance calculations.\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Info banner (always shown in the section) -->\r\n <div class=\"ieeesa-reciprocal-credit__info-banner\">\r\n <strong>Available only for Working Groups.</strong>\r\n Voting members of this Home Working Group can receive attendance credit when they\r\n attend meetings hosted by selected Foreign Working Groups under the same Standards Committee.\r\n </div>\r\n\r\n <!-- Selection UI (only when enabled) -->\r\n <ng-container *ngIf=\"enabled\">\r\n <label class=\"ieeesa-reciprocal-credit__field-label\">\r\n Eligible Foreign Working Groups*\r\n </label>\r\n\r\n <div class=\"ieeesa-reciprocal-credit__chips-box\">\r\n <span\r\n *ngFor=\"let group of selectedForeignGroups\"\r\n class=\"ieeesa-reciprocal-credit__chip\"\r\n >\r\n {{ group.groupName }}\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-reciprocal-credit__chip-remove\"\r\n (click)=\"removeGroup(group.groupId)\"\r\n [attr.aria-label]=\"'Remove ' + group.groupName\"\r\n >\r\n ×\r\n </button>\r\n </span>\r\n <span\r\n *ngIf=\"selectedForeignGroups.length === 0\"\r\n class=\"ieeesa-reciprocal-credit__chips-placeholder\"\r\n >\r\n No working groups selected\r\n </span>\r\n </div>\r\n\r\n <p class=\"ieeesa-reciprocal-credit__helper\" *ngIf=\"parentCommitteeName\">\r\n Only groups under {{ parentCommitteeName }} are available.\r\n </p>\r\n\r\n <div class=\"ieeesa-reciprocal-credit__add-row\">\r\n <button\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-tertiary-button ieeesa-reciprocal-credit__add-btn\"\r\n (click)=\"onAddWorkingGroups()\"\r\n >\r\n + Add Working Groups\r\n </button>\r\n </div>\r\n\r\n <!-- One-way relationship warning -->\r\n <div class=\"ieeesa-reciprocal-credit__warning-banner\">\r\n <strong>One-way relationship:</strong> Adding a Foreign Working Group here does not\r\n automatically enable reciprocal credit in the opposite direction.\r\n </div>\r\n </ng-container>\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 { FormGroup, Validators } from '@angular/forms';\r\nimport {\r\n FormGrid,\r\n FormModel,\r\n SelectOption,\r\n AlignType,\r\n SlideToggleOption,\r\n FieldConfig,\r\n FormControlType,\r\n DynamicFormComponent,\r\n} from '@ieeesa-npm/presentation';\r\nimport {\r\n AlertsService,\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, forkJoin, 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, AlertType } from '@ieeesa-npm/models';\r\nimport { GroupFunctionType } from '../../models/group-function-type.model';\r\nimport { ParentGroupsInfo } from '../../models/parent-groups-info.model';\r\nimport {\r\n ReciprocalCreditSectionComponent,\r\n SelectedForeignGroup,\r\n} from '../reciprocal-credit-section/reciprocal-credit-section.component';\r\nconst INDEX_VALUE = 4;\r\n/** Group type name that enables the Reciprocal Credit section. */\r\nconst WORKING_GROUP_TYPE_NAME = 'Working Group';\r\n\r\n/**\r\n * CreateGroupComponent uses DynamicFormComponent to build create new group form or edit group 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: [\r\n CommonModule,\r\n DynamicFormComponent,\r\n MatDialogModule,\r\n ReciprocalCreditSectionComponent,\r\n ],\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 allowedParentGroups: ParentGroupsInfo[] = [];\r\n allowedParentGroupsOptions: SelectOption[] = [];\r\n isParentGroupChanged = false;\r\n slideToggleOption: SlideToggleOption = {\r\n id: 1,\r\n label: this.createGroupText?.label?.changeParentGroup,\r\n checked: false,\r\n };\r\n /** Reciprocal credit state (Working Group only) — captured for Save. */\r\n reciprocalEnabled = false;\r\n reciprocalSelectedGroups: SelectedForeignGroup[] = [];\r\n /** Config ids of previously-saved reciprocal rows removed locally — for soft-delete on Save. */\r\n reciprocalRemovedConfigIds: string[] = [];\r\n /** Group type currently selected in the create form (for gating the section). */\r\n selectedCreateGroupTypeId?: string;\r\n @ViewChild(DynamicFormComponent) dynamicFormComponent!: DynamicFormComponent;\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 if (this.selectedGroupInfo?.groupParentId)\r\n this.getParentGroups(this.selectedGroupInfo?.groupId);\r\n this.createFormGroup();\r\n } else {\r\n const groupTypes = this.groupsService?.getFormattedGroupTypes(\r\n this.groupsService?.getLoadedGroupTypes()\r\n );\r\n if (this.selectedGroupInfo?.groupType) {\r\n const allowedGroupType =\r\n groupTypes[this.selectedGroupInfo?.groupType]?.businessRule\r\n ?.allowedGroupType;\r\n if (allowedGroupType?.length) {\r\n this.groupTypes = allowedGroupType.map((groupTypeId: string) => ({\r\n id: groupTypeId,\r\n name: groupTypes[groupTypeId]?.name,\r\n }));\r\n this.groupTypes = this.groupTypes.filter(\r\n (groupType) => !groupTypes[groupType.id]?.businessRule?.isAdmin\r\n );\r\n } else {\r\n this.showAlertMessage(screenTexts?.errors?.ER1000, AlertType.ERROR);\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(\r\n (groupType) =>\r\n groupTypes[groupType.id]?.hierarchy === 0 &&\r\n !groupTypes[groupType.id]?.businessRule?.isAdmin\r\n );\r\n }\r\n if (this.groupTypes?.length) {\r\n this.createFormGroup();\r\n } else {\r\n this.showAlertMessage(screenTexts?.errors?.['1010'], AlertType.ERROR);\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 ariaDescribedById:\r\n this.createGroupText?.label?.ariaDescribedById?.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 ariaDescribedById:\r\n this.createGroupText?.label?.ariaDescribedById?.groupType,\r\n placeholder: '',\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n createFormGroup(formValue?: any): 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 ? formValue\r\n ? formValue?.groupName\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 ? formValue\r\n ? formValue?.shortName\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 ? formValue\r\n ? formValue?.groupScope\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 if (\r\n (this.groupFunctionType === GroupFunctionType.EDIT &&\r\n parentGroupInfo?.groupParentId) ||\r\n this.groupFunctionType === GroupFunctionType.CREATE\r\n ) {\r\n this.updateAddUserFormControls(\r\n this.formGroup?.formGroup[0]?.controls?.length - INDEX_VALUE,\r\n {\r\n type: FormControlType?.TEXT_AREA,\r\n label: this.createGroupText?.label?.parentGroup,\r\n controlName: 'parentGroup',\r\n value:\r\n this.selectedGroupParentInfo?.groupName ??\r\n parentGroupInfo?.groupName,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.parentGroup,\r\n ariaDescribedById:\r\n this.createGroupText?.label?.ariaDescribedById?.parentGroup,\r\n isReadonly: true,\r\n ariaMultiline: false,\r\n isResize: true,\r\n }\r\n );\r\n\r\n if (this.groupFunctionType === GroupFunctionType.EDIT) {\r\n this.updateAddUserFormControls(\r\n this.formGroup?.formGroup[0]?.controls?.length - INDEX_VALUE,\r\n {\r\n type: FormControlType?.SLIDE_TOGGLE,\r\n controlName: 'changeParentGroup',\r\n ariaLabel:\r\n this.createGroupText?.label?.ariaLabel?.changeParentGroup,\r\n ariaDescribedById:\r\n this.createGroupText?.label?.ariaDescribedById?.changeParentGroup,\r\n slideToggleOption: this.slideToggleOption,\r\n disabled: this.allowedParentGroupsOptions.length === 0,\r\n }\r\n );\r\n if (this.isParentGroupChanged) {\r\n this.updateAddUserFormControls(\r\n this.formGroup?.formGroup[0]?.controls?.length - INDEX_VALUE,\r\n {\r\n type: FormControlType?.SELECT,\r\n label: this.createGroupText?.label?.newParentGroup + '*',\r\n controlName: 'newParentGroup',\r\n value: this.allowedParentGroupsOptions?.filter(\r\n (option) => option?.id === this.selectedGroupInfo?.groupId\r\n )[0],\r\n requiredErrorMessage:\r\n this.createGroupText?.message?.error?.required,\r\n validation: [Validators.required],\r\n dropdownOptions: this.allowedParentGroupsOptions,\r\n placeholder: '',\r\n supportMessage: this.createGroupText?.supportText?.newParentGroup,\r\n ariaLabel: this.createGroupText?.label?.ariaLabel?.newParentGroup,\r\n ariaDescribedById:\r\n this.createGroupText?.label?.ariaDescribedById?.newParentGroup,\r\n }\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Updates the create or edit user form group controls by adding fieldConfig at required index.\r\n * @param {number} indexPosition\r\n * @param {FieldConfig} fieldConfig\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n updateAddUserFormControls(\r\n indexPosition: number,\r\n fieldConfig: FieldConfig\r\n ): void {\r\n this.formGroup?.formGroup[0]?.controls?.splice(\r\n indexPosition,\r\n 0,\r\n fieldConfig\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 // Reciprocal Credit: if the toggle is ON, at least one foreign group is\r\n // required (BE rejects an empty foreign-group list). Block Save otherwise.\r\n if (this.isReciprocalInvalid) {\r\n this.showAlertMessage(\r\n this.createGroupText?.reciprocalCredit?.selectAtLeastOneGroup ??\r\n 'Please add at least one Working Group to enable Reciprocal Credit, or turn off the toggle.',\r\n AlertType.ERROR\r\n );\r\n return;\r\n }\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 * 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 this.groupsService?.setParentGroupChangeStatus(this.isParentGroupChanged);\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.isParentGroupChanged\r\n ? formData?.newParentGroup?.id\r\n : 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 // Persist reciprocal-credit changes (Working Group edit only), then emit.\r\n this.persistReciprocalCredit(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 * Persists reciprocal-credit changes captured from the section after a\r\n * successful group edit: POSTs newly-added foreign groups (those without a\r\n * configId) and soft-deletes each removed config id. Emits the group-edit\r\n * response once persistence completes (or immediately if there's nothing to do).\r\n * @param {*} editResponse the successful edit-group response\r\n * @memberof CreateGroupComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private persistReciprocalCredit(editResponse: any): void {\r\n const homeGroupId = this.selectedGroupInfo?.groupId;\r\n // Nothing to persist when the section isn't shown or there's no home group.\r\n if (!this.isReciprocalSectionVisible || !homeGroupId) {\r\n this.submitFormResponse?.emit(editResponse);\r\n return;\r\n }\r\n\r\n // Add: selected groups that were not already saved (no configId yet).\r\n const foreignGroupIdsToAdd = this.reciprocalSelectedGroups\r\n .filter((group) => !group.configId)\r\n .map((group) => group.groupId);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const calls: any[] = [];\r\n if (this.reciprocalEnabled && foreignGroupIdsToAdd.length > 0) {\r\n calls.push(\r\n this.groupsService.saveReciprocalCredit({\r\n homeGroupId,\r\n foreignGroupIds: foreignGroupIdsToAdd,\r\n })\r\n );\r\n }\r\n // Remove: each previously-saved config id removed locally.\r\n this.reciprocalRemovedConfigIds.forEach((configId) => {\r\n calls.push(this.groupsService.removeReciprocalConfig(configId));\r\n });\r\n\r\n // Nothing to persist — emit the edit response as-is.\r\n if (calls.length === 0) {\r\n this.submitFormResponse?.emit(editResponse);\r\n return;\r\n }\r\n\r\n forkJoin(calls)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: () => {\r\n this.submitFormResponse?.emit(editResponse);\r\n },\r\n error: (error) => {\r\n // Group edit already succeeded; surface the reciprocal error but still\r\n // emit so the parent completes the edit flow.\r\n this.groupsService.handleErrors(error);\r\n this.submitFormResponse?.emit(editResponse);\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 * True when the group being created/edited is a Working Group — gates the\r\n * Reciprocal Credit section.\r\n * @return {boolean}\r\n * @memberof CreateGroupComponent\r\n */\r\n get isWorkingGroup(): boolean {\r\n const groupTypeId =\r\n this.groupFunctionType === GroupFunctionType.EDIT\r\n ? this.selectedGroupInfo?.groupType\r\n : this.selectedCreateGroupTypeId;\r\n if (!groupTypeId) return false;\r\n const groupTypes = this.groupsService?.getFormattedGroupTypes(\r\n this.groupsService?.getLoadedGroupTypes()\r\n );\r\n return groupTypes?.[groupTypeId]?.name === WORKING_GROUP_TYPE_NAME;\r\n }\r\n\r\n /**\r\n * True when the Reciprocal Credit section should be shown: only for a Working\r\n * Group in EDIT mode. Hidden during create because the home group has no id\r\n * yet and the create flow is still being finalized with the client team.\r\n * @return {boolean}\r\n * @memberof CreateGroupComponent\r\n */\r\n get isReciprocalSectionVisible(): boolean {\r\n return (\r\n this.groupFunctionType === GroupFunctionType.EDIT && this.isWorkingGroup\r\n );\r\n }\r\n\r\n /**\r\n * True when the reciprocal section is shown, the toggle is ON, but no foreign\r\n * group has been added — an invalid state (BE rejects an empty foreign-group\r\n * list). Used to block the edit Save.\r\n * @return {boolean}\r\n * @memberof CreateGroupComponent\r\n */\r\n get isReciprocalInvalid(): boolean {\r\n return (\r\n this.isReciprocalSectionVisible &&\r\n this.reciprocalEnabled &&\r\n this.reciprocalSelectedGroups.length === 0\r\n );\r\n }\r\n\r\n /** Home group id for the reciprocal section (present in edit). */\r\n get reciprocalHomeGroupId(): string | undefined {\r\n return this.groupFunctionType === GroupFunctionType.EDIT\r\n ? this.selectedGroupInfo?.groupId\r\n : undefined;\r\n }\r\n\r\n /** Parent committee name shown in the reciprocal helper text. */\r\n get reciprocalParentCommitteeName(): string | undefined {\r\n return this.selectedGroupParentInfo?.groupName;\r\n }\r\n\r\n /** Capture reciprocal toggle state from the section. */\r\n onReciprocalEnabledChange(enabled: boolean): void {\r\n this.reciprocalEnabled = enabled;\r\n }\r\n\r\n /** Capture reciprocal foreign-group selection from the section. */\r\n onReciprocalSelectionChange(groups: SelectedForeignGroup[]): void {\r\n this.reciprocalSelectedGroups = groups;\r\n }\r\n\r\n /** Capture the config ids to soft-delete on Save from the section. */\r\n onReciprocalRemovedConfigIdsChange(configIds: string[]): void {\r\n this.reciprocalRemovedConfigIds = configIds;\r\n }\r\n\r\n /**\r\n * Gets allowed parent groups for reassigning the parent.\r\n * @param {string} groupId\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n getParentGroups(groupId: string): void {\r\n this.allowedParentGroups = [];\r\n this.groupsService\r\n .getAllowedParentGroups(groupId)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => {\r\n response?.forEach((option) => {\r\n this.allowedParentGroupsOptions?.push({\r\n id: option?.groupId,\r\n name: option?.groupName + ' (' + option?.groupAcronym + ')',\r\n });\r\n });\r\n this.allowedParentGroups = response;\r\n if (this.allowedParentGroupsOptions.length > 0) {\r\n this.updateFormControlOptions(\r\n 'changeParentGroup',\r\n 'isDisabled',\r\n false\r\n );\r\n this.updateFormControlOptions(\r\n 'newParentGroup',\r\n 'dropdownOptions',\r\n this.allowedParentGroupsOptions\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 this.updateFormControlOptions(\r\n 'changeParentGroup',\r\n 'isDisabled',\r\n this.allowedParentGroupsOptions.length === 0\r\n );\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Update passed form field values.\r\n * @param {string} formControlName\r\n * @param {string} formControlInputProperty\r\n * @param {*} value\r\n * @memberof CreateGroupComponent\r\n */\r\n updateFormControlOptions(\r\n formControlName: string,\r\n formControlInputProperty: string,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n value: any\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] = value;\r\n });\r\n }\r\n\r\n /**\r\n * Adds/removes new parent group selection options whenever Change Parent Group slider is toggled.\r\n * @param {SlideToggleOption} toggle\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n onFormSlideToggleChange(toggle: SlideToggleOption): void {\r\n this.slideToggleOption.checked = toggle?.checked;\r\n this.isParentGroupChanged = toggle?.checked;\r\n this.createFormGroup(this.form?.value);\r\n }\r\n\r\n /**\r\n * Handles create group form change event.\r\n * @param {FormGroup[]} form\r\n * @return -returns nothing\r\n * @memberof CreateGroupComponent\r\n */\r\n onCreateGroupFormChange(form: FormGroup[]): void {\r\n if (this.isParentGroupChanged) {\r\n const selectedParentGroup = this.allowedParentGroups?.filter(\r\n (option: ParentGroupsInfo) =>\r\n option?.groupId ===\r\n form[0]?.controls['newParentGroup']?.value?.id?.toString()\r\n )[0];\r\n this.form?.get('parentGroup')?.setValue(selectedParentGroup?.groupName);\r\n }\r\n // Track the selected group type in create mode so the Reciprocal Credit\r\n // section can render only for Working Groups.\r\n if (this.groupFunctionType !== GroupFunctionType.EDIT) {\r\n this.selectedCreateGroupTypeId =\r\n form[0]?.controls['groupType']?.value?.id ??\r\n form[0]?.controls['groupType']?.value;\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 *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 (formSlideToggleChange)=\"onFormSlideToggleChange($event)\"\r\n (formChange)=\"onCreateGroupFormChange($event)\"\r\n>\r\n <!-- Reciprocal Credit section — Working Groups in EDIT mode only.\r\n Hidden during create (no home group id yet; create flow pending client team).\r\n Projected via [component] so it renders ABOVE the form's Save/Cancel buttons. -->\r\n <ieeesa-reciprocal-credit-section\r\n component\r\n *ngIf=\"isReciprocalSectionVisible\"\r\n [homeGroupId]=\"reciprocalHomeGroupId\"\r\n [parentCommitteeName]=\"reciprocalParentCommitteeName\"\r\n (enabledChange)=\"onReciprocalEnabledChange($event)\"\r\n (selectionChange)=\"onReciprocalSelectionChange($event)\"\r\n (removedConfigIdsChange)=\"onReciprocalRemovedConfigIdsChange($event)\"\r\n ></ieeesa-reciprocal-credit-section>\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 BreakpointObserverService\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 isMobileView = false;\r\n groupFunctionType = GroupFunctionType;\r\n // eslint-disable-next-line no-unused-vars\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,\r\n // eslint-disable-next-line no-unused-vars\r\n private breakpointObserverService: BreakpointObserverService\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 }\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 * @return {*}\r\n * @memberof TreeViewComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n getBoxShadow(): any {\r\n return {\r\n boxShadow: '0px 1px 0px 0px #c9cbd0 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 this.sortParentGroupsAlphabetically();\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 this.sortParentGroupsAlphabetically();\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 const selectedGroupIndex = this.dataSource.data.findIndex(\r\n (node) => node.item.groupId === this.selectedGroup?.item.groupId\r\n );\r\n this.sortChildGroupsAlphabetically(\r\n selectedGroupIndex + 1,\r\n this.getNextGroup(selectedGroupIndex, this.dataSource.data)\r\n );\r\n } else if (\r\n this.groupsService.getGroupFunctionType() === GroupFunctionType.EDIT\r\n ) {\r\n this.editGroup(this.childGroupsInfo);\r\n const selectedParentGroupIndex = this.dataSource.data.findIndex(\r\n (node) => node.item.groupId === this.selectedGroup?.item.groupParentId\r\n );\r\n this.sortChildGroupsAlphabetically(\r\n selectedParentGroupIndex + 1,\r\n this.getNextGroup(selectedParentGroupIndex, this.dataSource.data)\r\n );\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 !== -1) {\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 if (deletedParentGroupIndex !== -1) {\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 } 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 * Returns the index of next group at the same level.\r\n * @param {number} selectedGroupIndex\r\n * @param {GroupNode[]} dataSource\r\n * @return {*} {number}\r\n * @memberof TreeViewComponent\r\n */\r\n getNextGroup(selectedGroupIndex: number, dataSource: GroupNode[]): number {\r\n const selectedGroupAcronym =\r\n dataSource[selectedGroupIndex].item.groupAcronym;\r\n let index = 0;\r\n for (index = selectedGroupIndex + 1; index < dataSource.length; index++) {\r\n if (dataSource[index].item.groupAcronym?.includes(selectedGroupAcronym)) {\r\n if (dataSource[selectedGroupIndex].level === 0) {\r\n if (\r\n dataSource[selectedGroupIndex].level === dataSource[index].level\r\n ) {\r\n break;\r\n }\r\n }\r\n } else break;\r\n }\r\n return index;\r\n }\r\n /**\r\n * Sort the groups alphabetically from given start index to end index.\r\n * @param {number} startIndex\r\n * @param {number} endIndex\r\n * @memberof TreeViewComponent\r\n */\r\n sortChildGroupsAlphabetically(startIndex: number, endIndex: number): void {\r\n const dataSource = this.dataSource.data;\r\n dataSource.splice(\r\n startIndex,\r\n endIndex - startIndex,\r\n ...this.groupsSorting(this.dataSource.data.slice(startIndex, endIndex))\r\n );\r\n this.dataSource.data = dataSource;\r\n }\r\n /**\r\n * Sort the root level parent groups alphabetically.\r\n * @memberof TreeViewComponent\r\n */\r\n sortParentGroupsAlphabetically(): void {\r\n let dataSource = this.dataSource.data;\r\n for (\r\n let groupA = 0;\r\n groupA < dataSource.length;\r\n groupA = this.getNextGroup(groupA, dataSource)\r\n ) {\r\n let lowestGroup = groupA;\r\n for (\r\n let groupB = this.getNextGroup(groupA, dataSource);\r\n groupB < dataSource.length;\r\n groupB = this.getNextGroup(groupB, dataSource)\r\n ) {\r\n lowestGroup =\r\n this.groupsSorting([\r\n dataSource[groupB],\r\n dataSource[lowestGroup],\r\n ])[0] === dataSource[groupB]\r\n ? groupB\r\n : lowestGroup;\r\n }\r\n if (lowestGroup !== groupA) {\r\n const leftGroup = dataSource.slice(\r\n groupA,\r\n this.getNextGroup(groupA, dataSource)\r\n );\r\n const rightGroup = dataSource.slice(\r\n lowestGroup,\r\n this.getNextGroup(lowestGroup, dataSource)\r\n );\r\n const dataSourceReference = dataSource.slice(0, groupA);\r\n dataSourceReference.push(...rightGroup);\r\n dataSourceReference.push(\r\n ...dataSource.slice(\r\n this.getNextGroup(groupA, dataSource),\r\n lowestGroup\r\n )\r\n );\r\n dataSourceReference.push(...leftGroup);\r\n dataSourceReference.push(\r\n ...dataSource.slice(\r\n this.getNextGroup(lowestGroup, dataSource),\r\n dataSource.length\r\n )\r\n );\r\n dataSource = dataSourceReference;\r\n }\r\n }\r\n this.dataSource.data = dataSource;\r\n }\r\n /**\r\n * Utility method to sort groups by group acronym in ascending order.\r\n * @param {GroupNode[]} groups\r\n * @return {*} {GroupNode[]}\r\n * @memberof TreeViewComponent\r\n */\r\n groupsSorting(groups: GroupNode[]): GroupNode[] {\r\n return groups.sort((groupA: GroupNode, groupB: GroupNode) => {\r\n const lowerGroupA = groupA.item.groupAcronym.toLowerCase();\r\n const lowerGroupB = groupB.item.groupAcronym.toLowerCase();\r\n if (lowerGroupA < lowerGroupB) return -1;\r\n else if (lowerGroupA > lowerGroupB) return 1;\r\n else if (lowerGroupA === lowerGroupB) {\r\n let index = 0;\r\n while (index < groupA?.item?.groupAcronym?.length) {\r\n if (groupA.item.groupAcronym[index] < groupB.item.groupAcronym[index])\r\n return 1;\r\n else if (\r\n groupA.item.groupAcronym[index] > groupB.item.groupAcronym[index]\r\n )\r\n return -1;\r\n index++;\r\n }\r\n }\r\n return 0;\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 this.selectedGroup = 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 const groupPermissions = group?.item?.permissions;\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 groupPermissions\r\n )) ||\r\n (!isAdminGroupType &&\r\n (this.groupsService.validateAccess(\r\n this.permissionType.VIEW_GROUP_OFFICERS,\r\n groupPermissions\r\n ) ||\r\n this.groupsService.validateAccess(\r\n this.permissionType.MANAGE_GROUP_OFFICERS,\r\n groupPermissions\r\n ) ||\r\n this.groupsService.validateAccess(\r\n this.permissionType.VIEW_GROUP_MEMBERS,\r\n groupPermissions\r\n ) ||\r\n this.groupsService.validateAccess(\r\n this.permissionType.VIEW_ALL_ROSTERS\r\n ) ||\r\n this.groupsService.validateAccess(\r\n this.permissionType.MANAGE_GROUP_MEMBERS,\r\n groupPermissions\r\n ))))) ||\r\n (e?.id === GroupAction.EDIT_GROUP &&\r\n !isAdminGroupType &&\r\n (this.groupsService.validateAccess(\r\n this.permissionType.EDIT_GROUP,\r\n groupPermissions\r\n ) ||\r\n this.groupsService.validateAccess(\r\n this.permissionType.MANAGE_ALL_GROUPS\r\n ))) ||\r\n (e?.id === GroupAction.DELETE_GROUP &&\r\n !isAdminGroupType &&\r\n (this.groupsService.validateAccess(\r\n this.permissionType.DELETE_GROUP,\r\n groupPermissions\r\n ) ||\r\n this.groupsService.validateAccess(\r\n this.permissionType.MANAGE_ALL_GROUPS\r\n )) &&\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 groupPermissions\r\n ) ||\r\n this.groupsService.validateAccess(\r\n this.permissionType.MANAGE_ALL_GROUPS\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\"\r\n [ngStyle]=\"getBoxShadow()\"\r\n [ngClass]=\"\r\n node?.item?.groupParentId &&\r\n groupsService.getGroupFunctionType() !== groupFunctionType.FILTER &&\r\n groupsService.getGroupFunctionType() !== groupFunctionType.SEARCH\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\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) ? 'ieeesa-tree__expanded' : '',\r\n node?.item?.groupParentId &&\r\n groupsService.getGroupFunctionType() !== groupFunctionType.FILTER &&\r\n groupsService.getGroupFunctionType() !== groupFunctionType.SEARCH\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\"\r\n [ngStyle]=\"getBoxShadow()\"\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 [button]=\"constants?.viewGroups?.groupActionsMenu\"\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 class=\"ieeesa-tree__group-info d-flex align-items-baseline\">\r\n <p\r\n class=\"ieeesa-tree__node-group-name ieeesa-title-md-18\"\r\n [matTooltip]=\"node?.item?.groupName\"\r\n ieeesaTextTruncated\r\n role=\"gridcell\"\r\n >{{ node?.item?.groupName }}</p>\r\n <p\r\n class=\"ieeesa-tree__node-group-acronym ieeesa-title-sm-16\"\r\n [matTooltip]=\"node?.item?.groupAcronym\"\r\n ieeesaTextTruncated\r\n role=\"gridcell\"\r\n >{{ node?.item?.groupAcronym }}</p>\r\n </div>\r\n <div class=\"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 AutoCompleteOption,\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 { FormArray, FormGroup, Validators } from '@angular/forms';\r\nimport { GroupUserInfo } from '../../models/group-user-info.model';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { FormStatus, AlertType } from '@ieeesa-npm/models';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport {\r\n AlertsService,\r\n GlobalErrorHandlerService,\r\n} from '@ieeesa-npm/utility';\r\nimport {\r\n AddOrEditUserIndividualRosterPayload,\r\n AddOrEditUserPayload,\r\n RepresentingOrganization,\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 {\r\n GroupsValidationPatterns,\r\n representingOrgRequiredValidator,\r\n skipWhenArray,\r\n} from '../../assets/form-validations';\r\nimport {\r\n Organization,\r\n OrganizationRequestPayload,\r\n} from '../../models/organization.model';\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 = false;\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 representingOrganizations: SelectOption[] = [];\r\n orgSearchValue = '';\r\n @ViewChild(DynamicFormComponent) dynamicFormComponent!: DynamicFormComponent;\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.selectedUserInfo = this.groupsService?.getSelectedUserInfo();\r\n this.groupsService.representingOrganizations.forEach(\r\n (user: RepresentingOrganization) => {\r\n if (\r\n this.selectedUserInfo.userId === user.userId &&\r\n user.organizations?.length\r\n ) {\r\n user.organizations.forEach((option: Organization) => {\r\n this.representingOrganizations?.push({\r\n id: option.orgId,\r\n name: option.orgName,\r\n });\r\n });\r\n }\r\n }\r\n );\r\n // eslint-disable-next-line no-unused-expressions\r\n this.representingOrganizations?.length\r\n ? (this.isSubmitButtonDisabled = false)\r\n : (this.isSubmitButtonDisabled = true);\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.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 this.updateEditUserRoleFormControls(\r\n this.editUserRoleFormGroup?.formGroup[0]?.controls?.length,\r\n {\r\n type: FormControlType.MULTI_SELECT_AUTO_COMPLETE,\r\n label: this.addUserRosterTexts?.label?.representingOrganization + '*',\r\n controlName: 'representingOrg',\r\n // Validate on blur so the required error surfaces only after the user\r\n // leaves the field — never mid-selection (avoids the error flash).\r\n updateOn: 'blur',\r\n validation: [\r\n representingOrgRequiredValidator(),\r\n skipWhenArray(\r\n Validators.maxLength(\r\n GroupsValidationPatterns.representingOrgNameMaxLength\r\n )\r\n ),\r\n skipWhenArray(\r\n Validators.minLength(\r\n GroupsValidationPatterns.representingOrgNameMinLength\r\n )\r\n ),\r\n skipWhenArray(\r\n Validators.pattern(\r\n GroupsValidationPatterns.representingOrganization\r\n )\r\n ),\r\n ],\r\n multiSelectAutoCompleteOptions: this.organizations,\r\n value: this.representingOrganizations?.length\r\n ? this.orgSearchValue?.length\r\n ? this.orgSearchValue\r\n : this.representingOrganizations\r\n : '',\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 ?.representingOrganizationMaxChars,\r\n minErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.limit\r\n ?.representingOrganizationMinChars,\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 /**\r\n * Gets selected organizations.\r\n * @param {AutoCompleteOption[]} selectedOrg\r\n * @memberof EditUserRolesComponent\r\n */\r\n getSelectedOrganizations(selectedOrg: AutoCompleteOption[]): void {\r\n this.representingOrganizations = selectedOrg;\r\n // eslint-disable-next-line no-unused-expressions\r\n this.representingOrganizations.length\r\n ? (this.isSubmitButtonDisabled = false)\r\n : (this.isSubmitButtonDisabled = true);\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 if (this.groupRosterType === GroupRosterType.SYSTEM_USER) {\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 /**\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 const isAllOtherControlsValid = Object.keys(form[0].controls)\r\n .filter((controlName) => controlName !== 'representingOrg')\r\n .every(\r\n (controlName) => form[0].get(controlName)?.status === FormStatus?.VALID\r\n );\r\n if (\r\n (form[0].get('representingOrg')?.status === FormStatus?.INVALID &&\r\n isAllOtherControlsValid &&\r\n this.representingOrganizations.length > 0) ||\r\n form[0].status === FormStatus?.VALID\r\n ) {\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 const formattedOptions = this.representingOrganizations.map((option) => {\r\n return {\r\n orgId: option.id as string,\r\n orgName: option.name,\r\n };\r\n });\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 organizations: formattedOptions,\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\r\n if (\r\n formData?.memberType &&\r\n !payload.payload.roles?.includes(formData?.memberType?.id)\r\n )\r\n payload.payload.roles?.push(formData?.memberType?.id);\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 if (!this.selectedUserInfo?.canDelete) {\r\n (this.editUserRoleFormGroupRef?.controls['roles'] as FormArray)\r\n ?.at(0)\r\n ?.disable();\r\n }\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 if (\r\n this.representingOrganizations.length &&\r\n this.editUserRoleFormGroupRef.controls['representingOrg'].status ===\r\n FormStatus.INVALID\r\n ) {\r\n this.isSubmitButtonDisabled = false;\r\n } else if (this.representingOrganizations.length === 0) {\r\n this.isSubmitButtonDisabled = true;\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 this.selectedUserInfo?.classification\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 const memberTypes = this.groupsService.getMemberTypes();\r\n memberTypes?.forEach((option) => {\r\n this.memberTypes?.push({\r\n id: option.roleId,\r\n name: option.roleName,\r\n });\r\n });\r\n this.updateFormControlOptions(\r\n 'memberType',\r\n 'dropdownOptions',\r\n this.memberTypes,\r\n this.selectedUserInfo?.memberStatus\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.orgSearchValue = orgName;\r\n this.organizations = [];\r\n orgName = orgName?.trimStart();\r\n this.updateFormControlOptions(\r\n 'representingOrg',\r\n 'multiSelectAutoCompleteOptions',\r\n [],\r\n ''\r\n );\r\n if (!orgName) return;\r\n const orgRequestPayload: OrganizationRequestPayload = {\r\n payload: { orgName: orgName },\r\n };\r\n this.groupsService\r\n .getOrganizations(orgRequestPayload)\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 'multiSelectAutoCompleteOptions',\r\n this.organizations,\r\n orgName\r\n );\r\n const orgNameLength =\r\n this.editUserRoleFormGroupRef?.get('representingOrg')?.value?.name\r\n ?.length;\r\n if (\r\n orgNameLength &&\r\n orgNameLength <\r\n GroupsValidationPatterns.representingOrgNameMinLength &&\r\n orgNameLength !== 0\r\n ) {\r\n this.editUserRoleFormGroupRef?.get('representingOrg')?.setErrors({\r\n minlength:\r\n this.addUserRosterTexts?.message?.error?.limit\r\n ?.representingOrganizationMinChars,\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 * 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 selectedOption?: string\r\n ): void {\r\n const formFields = this.dynamicFormComponent?.formFields?.toArray();\r\n formFields?.forEach((formField) => {\r\n const searchedOrgName = options?.filter((option) =>\r\n selectedOption?.includes(option?.name)\r\n )[0];\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 if (selectedOption && searchedOrgName) {\r\n this.editUserRoleFormGroupRef\r\n .get(formControlName)\r\n ?.setValue(searchedOrgName);\r\n }\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 if (errorCodes[0] !== '3004') {\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 }\r\n } else if (error && error instanceof HttpErrorResponse) {\r\n this.globalErrorHandlerService?.handleError(error);\r\n }\r\n }\r\n /**\r\n * Disables form submit button when org name length is less than minCharToSearch and greater than zero.\r\n * @memberof EditUserRolesComponent\r\n */\r\n disableSubmitButton(): void {\r\n if (this.representingOrganizations.length === 0) {\r\n this.updateFormControlOptions(\r\n 'representingOrg',\r\n 'multiSelectAutoCompleteOptions',\r\n []\r\n );\r\n this.isSubmitButtonDisabled = 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 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 (formMultiSelectAutoCompleteSearch)=\"getOrganizations($event)\"\r\n (multiSelectAutoCompleteOptionsSelected)=\"getSelectedOrganizations($event)\"\r\n (formMultiSelectAutoCompleteClearSearchValue)=\"disableSubmitButton()\"\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 ElementRef,\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 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 AutoCompleteOption,\r\n DynamicFormComponent,\r\n} from '@ieeesa-npm/presentation';\r\nimport * as screenTexts from '../../assets/constants.json';\r\nimport {\r\n GroupsValidationPatterns,\r\n representingOrgRequiredValidator,\r\n skipWhenArray,\r\n} from '../../assets/form-validations';\r\nimport { FormStatus, AlertType } from '@ieeesa-npm/models';\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\nimport { OrganizationRequestPayload } from '../../models/organization.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 email: '',\r\n name: '',\r\n userId: '',\r\n };\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 isUserExist = false;\r\n selectedOrganizations: AutoCompleteOption[] = [];\r\n timeOutId!: ReturnType<typeof setTimeout>;\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,\r\n // eslint-disable-next-line no-unused-vars\r\n public elementRef: ElementRef // eslint-disable-next-line no-empty-function, no-unused-vars\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.showAlertMessage(this.constants?.errors?.ER1001, AlertType.ERROR);\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 this.alertService.isAlertClosed\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((isClosed: boolean) => {\r\n if (isClosed && !this.isSearchUserForm) {\r\n this.elementRef?.nativeElement?.querySelector('input')?.focus();\r\n }\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.isUserExist = true;\r\n if (this.userInfo?.userId) this.validateUserExistence();\r\n else this.initializeAddUserFormGroup();\r\n }\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error: (error: any) => {\r\n this.isUserExist = false;\r\n const errorCodes = error?.error?.body?.errorCodes;\r\n if (errorCodes?.includes('2001')) {\r\n this.isSearchUserForm = false;\r\n this.rightButtonLabel =\r\n this.addUserRosterTexts?.label?.saveButtonLabel;\r\n this.isSubmitButtonDisabled = true;\r\n if (\r\n !this.isAddUserFormEmailSearch ||\r\n !(\r\n this.addUserFormGroupRef.contains('firstName') &&\r\n this.addUserFormGroupRef.contains('lastName')\r\n )\r\n ) {\r\n this.userInfo.email = email;\r\n this.updateAddUserFormGroupValues(\r\n JSON.stringify(this.addUserFormGroupRef?.value)\r\n );\r\n } else {\r\n this.addUserFormGroupRef?.get('firstName')?.setValue('');\r\n this.addUserFormGroupRef?.get('lastName')?.setValue('');\r\n }\r\n this.showAlertMessage(\r\n this.constants?.errors?.['2001'],\r\n AlertType.ERROR\r\n );\r\n } else {\r\n this.handleErrors(error);\r\n }\r\n },\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 as string,\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.showAlertMessage(\r\n this.constants?.errors?.['1022'],\r\n AlertType.ERROR\r\n );\r\n this.isSubmitButtonDisabled = true;\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.initializeAddUserFormGroup();\r\n } else this.handleErrors(error);\r\n },\r\n });\r\n }\r\n /**\r\n * Initialize the form fields required for add new user to the roster based on the searched email.\r\n * @memberof AddUserRosterComponent\r\n */\r\n initializeAddUserFormGroup() {\r\n this.isSearchUserForm = false;\r\n this.rightButtonLabel = this.addUserRosterTexts?.label?.saveButtonLabel;\r\n const addUserFormGroupPrevValues = JSON.stringify(\r\n this.addUserFormGroupRef?.value\r\n );\r\n if (!this.isAddUserFormEmailSearch) {\r\n this.selectedUserRoles = [];\r\n this.isSubmitButtonDisabled = true;\r\n this.createAddUserFormGroup();\r\n if (this.groupRosterType === GroupRosterType.INDIVIDUAL) {\r\n this.updateAddUserFormGroup();\r\n }\r\n } else {\r\n this.updateAddUserFormGroupValues(addUserFormGroupPrevValues);\r\n this.addUserFormGroupRef\r\n ?.get('emailSearch')\r\n ?.setValue(this.userInfo?.email);\r\n this.addUserFormGroupRef?.get('fullName')?.setValue(this.userInfo?.name);\r\n if (this.timeOutId) clearTimeout(this.timeOutId);\r\n this.timeOutId = setTimeout(() => {\r\n this.updateSubmitButtonStatus();\r\n }, 0);\r\n }\r\n }\r\n\r\n /**\r\n * Creates add user form group and updates it with prev form values.\r\n * @param {string} stringifiedAddUserFormPrevValues\r\n * @memberof AddUserRosterComponent\r\n */\r\n updateAddUserFormGroupValues(addUserFormValues: string): void {\r\n this.createAddUserFormGroup(this.userInfo?.email);\r\n if (this.groupRosterType === GroupRosterType.INDIVIDUAL) {\r\n const formValues = addUserFormValues ? JSON.parse(addUserFormValues) : '';\r\n this.updateAddUserFormGroup({\r\n classification: formValues?.classification,\r\n memberType: formValues?.memberType,\r\n representingOrg: formValues?.representingOrg,\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initialize the add user form group array.\r\n * @param {string} [email]\r\n * @memberof AddUserRosterComponent\r\n */\r\n createAddUserFormGroup(email?: string): void {\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.isUserExist ? this.userInfo?.email : 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?.email,\r\n ariaLabel: this.addUserRosterTexts?.label?.ariaLabel?.email,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById?.email,\r\n },\r\n ...(this.isUserExist\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 : [\r\n {\r\n type: FormControlType.INPUT,\r\n label: this.addUserRosterTexts?.label?.firstName + '*',\r\n controlName: 'firstName',\r\n validation: [\r\n Validators.required,\r\n Validators.pattern(\r\n GroupsValidationPatterns.firstOrLastName\r\n ),\r\n ],\r\n requiredErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.required,\r\n patternErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.pattern\r\n ?.firstOrLastName,\r\n ariaLabel:\r\n this.addUserRosterTexts?.label?.ariaLabel?.firstName,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById\r\n ?.firstName,\r\n supportMessage:\r\n this.addUserRosterTexts?.supportText?.firstName,\r\n },\r\n {\r\n type: FormControlType.INPUT,\r\n label: this.addUserRosterTexts?.label?.lastName + '*',\r\n controlName: 'lastName',\r\n validation: [\r\n Validators.required,\r\n Validators.pattern(\r\n GroupsValidationPatterns.firstOrLastName\r\n ),\r\n ],\r\n requiredErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.required,\r\n patternErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.pattern\r\n ?.firstOrLastName,\r\n ariaLabel:\r\n this.addUserRosterTexts?.label?.ariaLabel?.lastName,\r\n ariaDescribedById:\r\n this.addUserRosterTexts?.label?.ariaDescribedById\r\n ?.lastName,\r\n supportMessage:\r\n this.addUserRosterTexts?.supportText?.lastName,\r\n },\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 }\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 * @param {{\r\n * classification: SelectOption;\r\n * memberType: SelectOption;\r\n * representingOrg: SelectOption;\r\n * }} [addUserFormGroupPrevValues]\r\n * @memberof AddUserRosterComponent\r\n */\r\n updateAddUserFormGroup(addUserFormGroupPrevValues?: {\r\n classification: SelectOption;\r\n memberType: SelectOption;\r\n representingOrg: SelectOption;\r\n }): 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 value: this.classifications?.find(\r\n (classification) =>\r\n classification.id ===\r\n addUserFormGroupPrevValues?.classification?.id\r\n ),\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 value: this.memberTypes?.find(\r\n (memberType) =>\r\n memberType.id === addUserFormGroupPrevValues?.memberType?.id\r\n ),\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.MULTI_SELECT_AUTO_COMPLETE,\r\n label: this.addUserRosterTexts?.label?.representingOrganization + '*',\r\n controlName: 'representingOrg',\r\n // Validate on blur so the required error surfaces only after the user\r\n // leaves the field — never mid-selection (avoids the error flash).\r\n updateOn: 'blur',\r\n value: this.selectedOrganizations.length\r\n ? this.selectedOrganizations\r\n : '',\r\n validation: [\r\n representingOrgRequiredValidator(),\r\n skipWhenArray(\r\n Validators.maxLength(\r\n GroupsValidationPatterns.representingOrgNameMaxLength\r\n )\r\n ),\r\n skipWhenArray(\r\n Validators.minLength(\r\n GroupsValidationPatterns.representingOrgNameMinLength\r\n )\r\n ),\r\n skipWhenArray(\r\n Validators.pattern(\r\n GroupsValidationPatterns.representingOrganization\r\n )\r\n ),\r\n ],\r\n multiSelectAutoCompleteOptions: 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 ?.representingOrganizationMaxChars,\r\n minErrorMessage:\r\n this.addUserRosterTexts?.message?.error?.limit\r\n ?.representingOrganizationMinChars,\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 (\r\n (form[0].get('representingOrg')?.status === FormStatus?.INVALID &&\r\n this.isAllOtherControlsValid() &&\r\n this.selectedOrganizations.length > 0) ||\r\n form[0].status === FormStatus?.VALID\r\n ) {\r\n this.groupService\r\n .addNewGroupUser(this.getAddNewUserPayload(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 // 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 if (this.groupRosterType === GroupRosterType.SYSTEM_USER) {\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 /**\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 const memberTypes = this.groupService.getMemberTypes();\r\n memberTypes?.forEach((option) => {\r\n this.memberTypes?.push({\r\n id: option.roleId,\r\n name: option.roleName,\r\n });\r\n });\r\n this.updateFormControlOptions(\r\n 'memberType',\r\n 'dropdownOptions',\r\n this.memberTypes\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(\r\n 'representingOrg',\r\n 'multiSelectAutoCompleteOptions',\r\n []\r\n );\r\n if (!orgName) return;\r\n const orgRequestPayload: OrganizationRequestPayload = {\r\n payload: { orgName: orgName },\r\n };\r\n this.groupService\r\n .getOrganizations(orgRequestPayload)\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 'multiSelectAutoCompleteOptions',\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 if (errorCodes[0] !== '3004') {\r\n const errorMessage = this.groupService.parseErrorMessage(errorCodes);\r\n this.showAlertMessage(\r\n errorMessage,\r\n AlertType.ERROR,\r\n errorCodes[0] === '2024'\r\n );\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.updateSubmitButtonStatus();\r\n }\r\n\r\n /**\r\n * Checks if all other control except representingOrg are valid.\r\n * @return {boolean}\r\n * @memberof AddUserRosterComponent\r\n */\r\n isAllOtherControlsValid(): boolean {\r\n return Object.keys(this.addUserFormGroupRef?.controls)\r\n ?.filter((controlName) => controlName !== 'representingOrg')\r\n .every(\r\n (controlName) =>\r\n this.addUserFormGroupRef?.get(controlName)?.status ===\r\n FormStatus?.VALID\r\n );\r\n }\r\n /**\r\n * Enables or disables submit button.\r\n * @memberof AddUserRosterComponent\r\n */\r\n updateSubmitButtonStatus(): void {\r\n if (\r\n (this.addUserFormGroupRef?.get('representingOrg')?.status ===\r\n FormStatus?.INVALID &&\r\n this.isAllOtherControlsValid() &&\r\n this.selectedOrganizations?.length > 0) ||\r\n this.addUserFormGroupRef?.status === FormStatus?.VALID\r\n )\r\n this.isSubmitButtonDisabled = false;\r\n else this.isSubmitButtonDisabled = true;\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 const formattedOptions = this.selectedOrganizations.map((option) => {\r\n return {\r\n orgId: option.id as string,\r\n orgName: option.name,\r\n };\r\n });\r\n payload = {\r\n payload: {\r\n email: this.isUserExist\r\n ? this.userInfo?.email\r\n : formData?.emailSearch,\r\n roles: this.selectedUserRoles,\r\n groupId: this.groupService.selectedGroupInfo?.groupId as string,\r\n organizations: formattedOptions,\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 if (\r\n formData?.memberType &&\r\n !payload.payload.roles?.includes(formData?.memberType?.id)\r\n )\r\n payload.payload.roles?.push(formData?.memberType?.id);\r\n } else\r\n payload = {\r\n payload: {\r\n email: this.isUserExist\r\n ? this.userInfo?.email\r\n : formData?.emailSearch,\r\n roles: this.selectedUserRoles,\r\n groupId: this.groupService.selectedGroupInfo?.groupId as string,\r\n },\r\n };\r\n if (this.isUserExist) {\r\n payload.payload.userId = this.userInfo?.userId;\r\n } else {\r\n payload.payload.firstName = formData?.firstName?.trim();\r\n payload.payload.lastName = formData?.lastName?.trim();\r\n }\r\n return payload;\r\n }\r\n\r\n /**\r\n * Disables form submit button when org name length is less than minCharToSearch and greater than zero.\r\n * @memberof AddUserRosterComponent\r\n */\r\n disableSubmitButton(): void {\r\n if (this.selectedOrganizations.length === 0) {\r\n this.updateFormControlOptions(\r\n 'representingOrg',\r\n 'multiSelectAutoCompleteOptions',\r\n []\r\n );\r\n this.isSubmitButtonDisabled = true;\r\n }\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 AddUserRosterComponent\r\n */\r\n showAlertMessage(\r\n message: string | string[],\r\n alertType: AlertType,\r\n isHtmlContent?: boolean\r\n ): void {\r\n this.alertService?.showMessage({\r\n status: 'custom',\r\n message: message,\r\n alertType: alertType,\r\n isCloseNeeded: true,\r\n isHtmlContent: isHtmlContent ?? false,\r\n });\r\n }\r\n\r\n /**\r\n * Gets selected organizations.\r\n * @param {AutoCompleteOption[]} selectedOrg\r\n * @memberof AddUserRosterComponent\r\n */\r\n getSelectedOrganizations(selectedOrg: AutoCompleteOption[]): void {\r\n this.selectedOrganizations = selectedOrg;\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 /**\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 if (this.timeOutId) clearTimeout(this.timeOutId);\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 (formMultiSelectAutoCompleteSearch)=\"getOrganizations($event)\"\r\n (multiSelectAutoCompleteOptionsSelected)=\"getSelectedOrganizations($event)\"\r\n (formMultiSelectAutoCompleteClearSearchValue)=\"disableSubmitButton()\"\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 { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams, HttpResponse } from '@angular/common/http';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { BehaviorSubject, EMPTY, Subject, takeUntil } from 'rxjs';\r\nimport { map, catchError } from 'rxjs/operators';\r\nimport { saveAs } from 'file-saver';\r\nimport {\r\n ExportFormat,\r\n ExportFormatOption,\r\n PolicyConfirmationDialogComponent,\r\n PolicyConfirmationDialogData,\r\n ExportSuccessDialogComponent,\r\n ExportSuccessDialogData,\r\n} from '@ieeesa-npm/presentation';\r\nimport { AlertType } from '@ieeesa-npm/models';\r\nimport { AlertsService } from '@ieeesa-npm/utility';\r\nimport * as screenTexts from '../assets/constants.json';\r\n\r\n/**\r\n * RosterExportService owns the complete group roster export flow:\r\n * 1. Manages export popover open/close state\r\n * 2. Opens IEEE Data Access and Use Policy confirmation dialog\r\n * 3. Calls the backend roster export API (blob response)\r\n * 4. Triggers file download via File System Access API / file-saver\r\n * 5. Shows success/error dialogs and toasts\r\n *\r\n * The component only needs to:\r\n * - Subscribe to `isPopoverOpen$` for popover visibility\r\n * - Call `togglePopover()` on Export button click\r\n * - Call `onFormatSelected(format, groupId, groupName)` when user picks a format\r\n *\r\n * Follows the same pattern as MeetingExportService in the events-and-meetings library.\r\n * @export\r\n * @class RosterExportService\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RosterExportService {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private constants: any = screenTexts;\r\n private apiBaseUrl!: string;\r\n private destroy$ = new Subject<boolean>();\r\n\r\n /** Controls popover open/close state */\r\n private isPopoverOpenSubject$ = new BehaviorSubject<boolean>(false);\r\n isPopoverOpen$ = this.isPopoverOpenSubject$.asObservable();\r\n\r\n /** Controls in-progress state for button disable */\r\n private isExportInProgressSubject$ = new BehaviorSubject<boolean>(false);\r\n isExportInProgress$ = this.isExportInProgressSubject$.asObservable();\r\n\r\n /** Format options for the export popover */\r\n exportFormatOptions: ExportFormatOption[] = [\r\n {\r\n label: this.constants?.rosterExport?.formatOptions?.csv?.label ?? 'CSV',\r\n value: ExportFormat.CSV,\r\n ariaLabel: this.constants?.rosterExport?.formatOptions?.csv?.ariaLabel ?? 'Export roster as CSV',\r\n },\r\n {\r\n label: this.constants?.rosterExport?.formatOptions?.excel?.label ?? 'Excel',\r\n value: ExportFormat.EXCEL,\r\n ariaLabel: this.constants?.rosterExport?.formatOptions?.excel?.ariaLabel ?? 'Export roster as Excel',\r\n },\r\n ];\r\n\r\n /** Subtitle labels for the format selection cards */\r\n exportFormatSubtitles: Record<string, string> = {\r\n csv: this.constants?.rosterExport?.formatOptions?.csv?.subtitle ?? 'Comma separated file',\r\n xls: this.constants?.rosterExport?.formatOptions?.excel?.subtitle ?? 'Spreadsheet File',\r\n };\r\n\r\n /** Popover title */\r\n popoverTitle = this.constants?.rosterExport?.popoverTitle ?? 'Select the file format for roster export.';\r\n\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private httpClient: HttpClient,\r\n // eslint-disable-next-line no-unused-vars\r\n private dialog: MatDialog,\r\n // eslint-disable-next-line no-unused-vars\r\n private alertService: AlertsService\r\n ) {}\r\n\r\n /**\r\n * Sets the API base URL for roster export calls.\r\n * @param {string} url - Base URL (e.g., 'https://saappsapidev.ieee.org/v1')\r\n * @memberof RosterExportService\r\n */\r\n setApiBaseUrl(url: string): void {\r\n this.apiBaseUrl = url;\r\n }\r\n\r\n /**\r\n * Toggles the export format popover open/closed.\r\n * Called by the component on Export button click.\r\n * @memberof RosterExportService\r\n */\r\n togglePopover(): void {\r\n this.isPopoverOpenSubject$.next(!this.isPopoverOpenSubject$.getValue());\r\n }\r\n\r\n /**\r\n * Closes the export format popover.\r\n * @memberof RosterExportService\r\n */\r\n closePopover(): void {\r\n this.isPopoverOpenSubject$.next(false);\r\n }\r\n\r\n /**\r\n * Handles format selection from the export popover.\r\n * Closes popover, opens IEEE Policy dialog, on confirm triggers export.\r\n * This is the main entry point called by the component after user picks a format.\r\n * @param {ExportFormat} format - Selected format (CSV or XLS)\r\n * @param {string} groupId - The group ID to export the roster for\r\n * @param {string} groupName - The group name for filename generation\r\n * @memberof RosterExportService\r\n */\r\n onFormatSelected(format: ExportFormat, groupId: string, groupName: string): void {\r\n this.closePopover();\r\n\r\n const dialogData: PolicyConfirmationDialogData = {\r\n title: this.constants?.rosterExport?.policyDialog?.title ?? 'IEEE Data Access and Use Policy',\r\n bodyText: this.constants?.rosterExport?.policyDialog?.bodyText ?? 'The application is governed by IEEE\\'s data access and use policy. Data can only be used for its original intended purpose. Click \"Confirm\" to export the data into a CSV/Excel file or click \"Cancel\" to cancel the download.',\r\n policyUrl: this.constants?.rosterExport?.policyDialog?.policyUrl ?? 'https://www.ieee.org/ieee-data-access-and-use-policy.html',\r\n policyLinkText: this.constants?.rosterExport?.policyDialog?.policyLinkText ?? 'data access and use policy',\r\n cancelLabel: this.constants?.rosterExport?.policyDialog?.cancelLabel ?? 'Cancel',\r\n confirmLabel: this.constants?.rosterExport?.policyDialog?.confirmLabel ?? 'Confirm',\r\n };\r\n\r\n const dialogRef = this.dialog.open(PolicyConfirmationDialogComponent, {\r\n data: dialogData,\r\n width: '637px',\r\n panelClass: ['ieeesa-policy-dialog'],\r\n });\r\n\r\n dialogRef.afterClosed()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((confirmed: boolean) => {\r\n if (confirmed) {\r\n this.startExport(format, groupId, groupName);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Starts the export after the user confirms the policy dialog.\r\n *\r\n * When the File System Access API is available, the native Save picker is opened\r\n * HERE — synchronously within the confirm handler — while the user activation from\r\n * the confirm click is still valid. (Opening it later, inside the async HTTP\r\n * response callback, would exceed the activation window and the browser would\r\n * reject it with a SecurityError.) The obtained file handle is then passed to the\r\n * HTTP flow, which writes the downloaded bytes to it once the response arrives, so\r\n * the success dialog is still shown only AFTER the file is saved.\r\n *\r\n * If the user cancels the picker we abort before making the request. If the API is\r\n * unavailable (Firefox/Safari) we proceed without a handle and fall back to\r\n * `saveAs()` after the response.\r\n * @param {ExportFormat} format\r\n * @param {string} groupId\r\n * @param {string} groupName\r\n * @memberof RosterExportService\r\n */\r\n private startExport(format: ExportFormat, groupId: string, groupName: string): void {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const showSaveFilePicker = (window as any).showSaveFilePicker;\r\n\r\n if (typeof showSaveFilePicker !== 'function') {\r\n // API unavailable: no handle; executeExport() will use the saveAs() fallback.\r\n this.executeExport(format, groupId, groupName, null);\r\n return;\r\n }\r\n\r\n const mimeType = format === ExportFormat.CSV\r\n ? 'text/csv'\r\n : 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\r\n const extension = format === ExportFormat.CSV ? '.csv' : '.xlsx';\r\n const suggestedName = this.buildFilename(groupName, format);\r\n\r\n // Open the picker now, while the confirm-click activation is still valid.\r\n showSaveFilePicker({\r\n suggestedName,\r\n types: [\r\n {\r\n description: format === ExportFormat.CSV ? 'CSV File' : 'Excel File',\r\n accept: { [mimeType]: [extension] },\r\n },\r\n ],\r\n })\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .then((handle: any) => {\r\n this.executeExport(format, groupId, groupName, handle);\r\n })\r\n .catch((error: unknown) => {\r\n // User cancelled the Save dialog — abort silently, no request made.\r\n if (error instanceof DOMException && error.name === 'AbortError') {\r\n return;\r\n }\r\n // Any other picker error: fall back to the saveAs() flow.\r\n this.executeExport(format, groupId, groupName, null);\r\n });\r\n }\r\n\r\n /**\r\n * Executes the roster export API call and writes the downloaded file.\r\n * Endpoint: GET /v1/groups/roster/export/{groupId}?format=csv|xlsx\r\n * When a pre-obtained file handle is provided (from the picker opened at confirm\r\n * time) the bytes are written to it; otherwise it falls back to `saveAs()`.\r\n * The success dialog is shown only after the file has been written.\r\n * @param {ExportFormat} format - The selected export format\r\n * @param {string} groupId - The group identifier\r\n * @param {string} groupName - The group name for filename\r\n * @param {FileSystemFileHandle | null} fileHandle - Handle from the Save picker, or null\r\n * @memberof RosterExportService\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private executeExport(format: ExportFormat, groupId: string, groupName: string, fileHandle: any): void {\r\n this.isExportInProgressSubject$.next(true);\r\n\r\n // Backend expects 'csv' or 'xlsx'. The ExportFormat.EXCEL enum value is\r\n // 'xls', so it must be mapped to 'xlsx' here — sending 'xls' is rejected\r\n // with error code 1079.\r\n const formatValue = format === ExportFormat.CSV ? 'csv' : 'xlsx';\r\n const params = new HttpParams().set('format', formatValue);\r\n const url = `${this.getExportApiUrl()}/groups/roster/export/${groupId}`;\r\n\r\n this.httpClient\r\n .get(url, {\r\n params,\r\n responseType: 'blob',\r\n observe: 'response',\r\n })\r\n .pipe(\r\n map((response: HttpResponse<Blob>) => {\r\n const filename = this.extractFilenameFromResponse(response, format, groupName);\r\n return { blob: response.body as Blob, filename };\r\n }),\r\n catchError(() => {\r\n this.isExportInProgressSubject$.next(false);\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n message: this.constants?.rosterExport?.messages?.exportFailed ?? 'Failed to export roster. Please try again.',\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n // Error is fully handled (alert shown). Complete the stream instead of\r\n // rethrowing, so the next-only subscribe does not report it as an\r\n // unhandled RxJS error.\r\n return EMPTY;\r\n }),\r\n takeUntil(this.destroy$)\r\n )\r\n .subscribe({\r\n next: (result) => {\r\n // Write to the pre-obtained handle (picker opened at confirm time) or fall\r\n // back to saveAs(). Success dialog only shows after the file is written.\r\n this.downloadFile(result.blob, result.filename, format, fileHandle)\r\n .then(({ saved }) => {\r\n this.isExportInProgressSubject$.next(false);\r\n if (saved) {\r\n this.showExportSuccessDialogAfterDownload(result.filename);\r\n }\r\n })\r\n .catch(() => {\r\n this.isExportInProgressSubject$.next(false);\r\n this.alertService.showMessage({\r\n status: 'custom',\r\n message: this.constants?.rosterExport?.messages?.exportFailed ?? 'Failed to export roster. Please try again.',\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n });\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Shows the export success dialog after a successful file download.\r\n * @param {string} filename - The downloaded filename\r\n * @memberof RosterExportService\r\n */\r\n private showExportSuccessDialogAfterDownload(filename: string): void {\r\n const successMessage = this.constants?.rosterExport?.successDialog?.message ?? 'The file was downloaded successfully.';\r\n const closeLabel = this.constants?.rosterExport?.successDialog?.closeButton ?? 'Close';\r\n\r\n const dialogData: ExportSuccessDialogData = {\r\n message: successMessage,\r\n filename,\r\n closeLabel,\r\n };\r\n\r\n this.dialog.open(ExportSuccessDialogComponent, {\r\n data: dialogData,\r\n width: '467px',\r\n panelClass: ['ieeesa-export-success-dialog-panel'],\r\n autoFocus: false,\r\n });\r\n }\r\n\r\n /**\r\n * Returns the API base URL for roster export.\r\n * @return {string}\r\n * @memberof RosterExportService\r\n */\r\n private getExportApiUrl(): string {\r\n if (!this.apiBaseUrl) {\r\n throw new Error('RosterExportService apiBaseUrl is not set. Call setApiBaseUrl() before export.');\r\n }\r\n // apiBaseUrl already carries the version segment (e.g. '.../v1'), same as every\r\n // other GroupsService call which is built as `${apiBaseUrl}/groups/...`. So the\r\n // caller only appends '/groups/roster/export/{groupId}' — the version is NOT\r\n // repeated here. Strip a trailing slash to avoid a double slash before '/groups'.\r\n return this.apiBaseUrl.replace(/\\/+$/, '');\r\n }\r\n\r\n /**\r\n * Extracts filename from Content-Disposition header.\r\n * Falls back to buildFilename() if header is missing.\r\n * @param {HttpResponse<Blob>} response\r\n * @param {ExportFormat} format\r\n * @param {string} groupName\r\n * @return {string}\r\n * @memberof RosterExportService\r\n */\r\n private extractFilenameFromResponse(response: HttpResponse<Blob>, format: ExportFormat, groupName: string): string {\r\n const contentDisposition = response.headers.get('Content-Disposition');\r\n if (contentDisposition) {\r\n const filenameMatch = contentDisposition.match(/filename=\"?([^\"]+)\"?/);\r\n if (filenameMatch && filenameMatch[1]) {\r\n return filenameMatch[1].replace(/[/\\\\:*?\"<>|]/g, '_').substring(0, 200);\r\n }\r\n }\r\n return this.buildFilename(groupName, format);\r\n }\r\n\r\n /**\r\n * Builds a sanitized filename for the roster export.\r\n * Pattern: {SanitizedGroupName}_Roster.{extension}\r\n * @param {string} groupName\r\n * @param {ExportFormat} format\r\n * @return {string}\r\n * @memberof RosterExportService\r\n */\r\n buildFilename(groupName: string, format: ExportFormat): string {\r\n const sanitized = this.sanitizeGroupName(groupName);\r\n const extension = format === ExportFormat.CSV ? 'csv' : 'xlsx';\r\n return `${sanitized}_Roster.${extension}`;\r\n }\r\n\r\n /**\r\n * Sanitizes the group name for use in a filename.\r\n * Replaces non-alphanumeric characters (except hyphen/underscore) with underscore,\r\n * collapses consecutive underscores, and truncates to 200 chars.\r\n * @param {string} groupName\r\n * @return {string}\r\n * @memberof RosterExportService\r\n */\r\n sanitizeGroupName(groupName: string): string {\r\n if (!groupName) {\r\n return 'Unnamed_Group';\r\n }\r\n const sanitized = groupName\r\n .replace(/[^a-zA-Z0-9_-]/g, '_')\r\n .replace(/_+/g, '_')\r\n .substring(0, 200);\r\n\r\n return sanitized || 'Unnamed_Group';\r\n }\r\n\r\n /**\r\n * Writes the downloaded bytes to disk and resolves ONLY when the save has actually\r\n * completed.\r\n *\r\n * The Save picker is opened earlier (at policy-confirm time, while user activation\r\n * is still valid — see {@link startExport}); this method only writes to the handle\r\n * it produced. That keeps the \"success dialog after save\" ordering without hitting\r\n * the SecurityError that occurs when the picker is opened from this async callback.\r\n *\r\n * When no handle is provided (File System Access API unavailable, or the picker\r\n * errored), we fall back to FileSaver's `saveAs()`, which resolves immediately.\r\n * @param {Blob} blob - The file contents\r\n * @param {string} filename - The suggested filename (used by the saveAs fallback)\r\n * @param {ExportFormat} format - The selected export format (drives MIME type)\r\n * @param {FileSystemFileHandle | null} fileHandle - Handle from the Save picker, or null\r\n * @return {Promise<{ saved: boolean }>} Resolves with `saved: true` once written.\r\n * @memberof RosterExportService\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n async downloadFile(blob: Blob, filename: string, format: ExportFormat, fileHandle: any): Promise<{ saved: boolean }> {\r\n const mimeType = format === ExportFormat.CSV\r\n ? 'text/csv'\r\n : 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\r\n const typedBlob = new Blob([blob], { type: mimeType });\r\n\r\n // No handle (API unavailable or picker errored) → standard download.\r\n if (!fileHandle) {\r\n saveAs(typedBlob, filename);\r\n return { saved: true };\r\n }\r\n\r\n // Write to the location the user already chose at confirm time.\r\n const writable = await fileHandle.createWritable();\r\n await writable.write(typedBlob);\r\n await writable.close();\r\n return { saved: true };\r\n }\r\n\r\n /**\r\n * Cleanup — call from the component's ngOnDestroy.\r\n * @memberof RosterExportService\r\n */\r\n destroy(): void {\r\n this.destroy$.next(true);\r\n // This service is providedIn: 'root' (singleton), so its state survives\r\n // navigation. Reset the UI-facing flags so a new roster component instance\r\n // does not inherit a stale-open popover or a permanently-disabled export\r\n // button if the user left the page mid-export or with the popover open.\r\n this.isPopoverOpenSubject$.next(false);\r\n this.isExportInProgressSubject$.next(false);\r\n // Signal current takeUntil subscriptions to unsubscribe, then re-create the\r\n // subject. This service is a providedIn: 'root' singleton whose destroy() is\r\n // called on every ViewRosterComponent teardown; completing destroy$ would\r\n // permanently close it, so later exports could never be torn down. A fresh\r\n // subject keeps the teardown channel usable across component lifecycles.\r\n this.destroy$.next(true);\r\n this.destroy$ = new Subject<boolean>();\r\n }\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 { MatButtonModule } from '@angular/material/button';\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 ChipOption,\r\n CheckboxOption,\r\n FiltersAndOptions,\r\n DataTableComponent,\r\n ModalConfirmationComponent,\r\n ExportFormat,\r\n ExportFormatPopoverComponent,\r\n} from '@ieeesa-npm/presentation';\r\nimport {\r\n AlertsService,\r\n GlobalErrorHandlerService,\r\n} from '@ieeesa-npm/utility';\r\nimport { AlertType } from '@ieeesa-npm/models';\r\nimport { GroupsService } from '../../services/groups.service';\r\nimport {\r\n SearchUsersPayload,\r\n FilterUsersPayload,\r\n User,\r\n LoggedInUserInfo,\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\nimport { RosterExportService } from '../../services/roster-export.service';\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: [\r\n CommonModule,\r\n DataTableComponent,\r\n MatDialogModule,\r\n MatButtonModule,\r\n ExportFormatPopoverComponent,\r\n ],\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 userInfo!: LoggedInUserInfo;\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 // eslint-disable-next-line no-unused-vars\r\n public rosterExportService: RosterExportService\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 this.userInfo = this.groupService?.getUserInfo();\r\n this.rosterExportService.setApiBaseUrl(this.groupService?.apiBaseUrl);\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.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 this.groupService.validateAccess(PermissionType.MANAGE_ALL_ROSTERS)\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.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.memberStatus ?? 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 }\r\n this.getRoles();\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 if (this.groupRosterType === GroupRosterType.INDIVIDUAL) {\r\n this.getMemberTypes();\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 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 const memberTypes = this.groupService.getMemberTypes();\r\n memberTypes?.forEach((option) => {\r\n this.memberTypes?.push({\r\n id: option.roleId,\r\n name: option.roleName,\r\n checked: false,\r\n disabled: false,\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 if (\r\n userIds.includes(this.userInfo?.userId) &&\r\n this.groupService.isAdminUser() &&\r\n this.groupService?.getBusinessRuleOfSelectedGroup()?.isAdmin\r\n ) {\r\n this.showAlertMessage(`${constants?.errors?.[1039]}`, AlertType.ERROR);\r\n } else {\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(\r\n selectedGroupInfo?.groupId as string,\r\n userIds\r\n );\r\n }\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 canDelete: selectedUserInfo[0]?.canDelete,\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 canDelete: selectedUserInfo[0]?.canDelete,\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 * Toggles the export format popover — delegates to RosterExportService.\r\n * @memberof ViewRosterComponent\r\n */\r\n onExportClick(): void {\r\n this.rosterExportService.togglePopover();\r\n }\r\n\r\n /**\r\n * Handles export format selection — delegates to RosterExportService using the\r\n * currently selected group's id and name.\r\n * @param {ExportFormat} format\r\n * @memberof ViewRosterComponent\r\n */\r\n onExportFormatSelected(format: ExportFormat): void {\r\n const selectedGroupInfo = this.groupService?.getSelectedGroupInfo();\r\n const groupId = selectedGroupInfo?.groupId as string;\r\n // Without a group id the export URL would be malformed, so guard here\r\n // instead of firing a bad request.\r\n if (!groupId) {\r\n this.showAlertMessage(this.constants?.errors?.default, AlertType.ERROR);\r\n return;\r\n }\r\n const groupName = selectedGroupInfo?.groupName ?? '';\r\n this.rosterExportService.onFormatSelected(format, groupId, groupName);\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.rosterExportService.destroy();\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 [defaultSortedColumn]=\"defaultSortedColumn\"\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>\r\n <!-- Export Roster Button + Popover — projected into the data-table action row,\r\n inline after the delete icon. -->\r\n <div dataTableActions class=\"ieeesa-view-roster__export-wrapper\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-view-roster__export-btn\"\r\n type=\"button\"\r\n [attr.aria-label]=\"constants?.rosterExport?.ariaLabel\"\r\n [disabled]=\"rosterExportService.isExportInProgress$ | async\"\r\n (click)=\"onExportClick()\"\r\n >\r\n <svg class=\"ieeesa-view-roster__export-btn-icon\" aria-hidden=\"true\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-export\"></use>\r\n </svg>\r\n {{ constants?.rosterExport?.buttonLabel }}\r\n </button>\r\n\r\n <ieeesa-export-format-popover\r\n [formatOptions]=\"rosterExportService.exportFormatOptions\"\r\n [isOpen]=\"(rosterExportService.isPopoverOpen$ | async) ?? false\"\r\n [popoverTitle]=\"rosterExportService.popoverTitle\"\r\n [formatSubtitles]=\"rosterExportService.exportFormatSubtitles\"\r\n (formatSelected)=\"onExportFormatSelected($event)\"\r\n (closed)=\"rosterExportService.closePopover()\"\r\n ></ieeesa-export-format-popover>\r\n </div>\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 SelectOption,\r\n IconButtonComponent,\r\n IconButton,\r\n AlignType,\r\n ModalConfirmationComponent,\r\n SelectComponent,\r\n LegendComponent,\r\n SearchType,\r\n SearchComponent,\r\n ModalComponent,\r\n BreakpointObserverService\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 AlertsService,\r\n GlobalErrorHandlerService,\r\n} from '@ieeesa-npm/utility';\r\nimport { AlertType, ModalType } from '@ieeesa-npm/models';\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\nimport { GroupPermissionsMapService } from './services/group-permissions-map-service';\r\nimport { LoggedInUserInfo } from './models/user.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 searchGroupIcon: IconButton = {\r\n id: 3,\r\n ariaLabel: this.viewGroupTexts?.ariaLabel.search,\r\n iconURL: this.viewGroupTexts?.searchGroupIcon,\r\n toolTip: this.viewGroupTexts?.ariaLabel.search,\r\n };\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 @Input() userInfo!: LoggedInUserInfo;\r\n permissionType = PermissionType;\r\n functionType!: GroupFunctionType;\r\n alignmentType = AlignType;\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 // eslint-disable-next-line no-unused-vars\r\n private groupPermissionsService: GroupPermissionsMapService\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.groupsService?.setUserInfo(this.userInfo);\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 this.groupPermissionsService?.getGlobalGroupPermissions()\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 const selectedGroupInfo = this.groupsService.getSelectedGroupInfo();\r\n if (response === GroupFunctionType.EDIT_ROSTER_USER_ROLE) {\r\n this.openEditUserRolesModal(selectedGroupInfo as GroupInfo);\r\n }\r\n if (response === GroupFunctionType.ADD_USER_TO_ROSTER) {\r\n this.openAddUserRosterModal(selectedGroupInfo as GroupInfo);\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 const groupTypes = this.groupsService.getLoadedGroupTypes();\r\n if (groupTypes && groupTypes?.length > 0) {\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 } else\r\n this.showAlertMessage(AlertType.ERROR, this.constants?.errors?.['1010']);\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(selectedGroupInfo: GroupInfo): void {\r\n const selectedUserInfo = this.groupsService?.getSelectedUserInfo();\r\n const dialogOptions = {\r\n heading: selectedGroupInfo?.groupName,\r\n subHeading: 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(selectedGroupInfo: GroupInfo): void {\r\n const dialogOptions = {\r\n heading: selectedGroupInfo?.groupName,\r\n subHeading: 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 this.functionType === GroupFunctionType.CREATE ||\r\n this.functionType === GroupFunctionType.EDIT\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 (this.trimmedSearchTerm)\r\n this.onGroupSearchClick(this.trimmedSearchTerm);\r\n else if (this.selectedGroupType.id !== '')\r\n this.onGroupTypeFiltered(this.selectedGroupType);\r\n else 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 isParentGroupChanged =\r\n this.groupsService.getParentGroupChangeStatus();\r\n const editGroupInfo = groupInfo as EditGroupAndParentInfo;\r\n if (this.trimmedSearchTerm)\r\n this.onGroupSearchClick(this.trimmedSearchTerm);\r\n else if (this.selectedGroupType.id !== '')\r\n this.onGroupTypeFiltered(this.selectedGroupType);\r\n else if (editGroupInfo?.parentGroupInfo?.groupId === undefined) {\r\n this.getGroups();\r\n } else if (isParentGroupChanged) {\r\n this.groupsService.setGroupFunctionType(\r\n GroupFunctionType.REASSIGN_PARENT_GROUP\r\n );\r\n this.groupsService.setParentGroupChangeStatus(false);\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 if (this.trimmedSearchTerm)\r\n this.onGroupSearchClick(this.trimmedSearchTerm);\r\n else if (this.selectedGroupType.id !== '')\r\n this.onGroupTypeFiltered(this.selectedGroupType);\r\n else 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 this.groupsService.setGroupFunctionType(GroupFunctionType.SEARCH);\r\n if (\r\n !this.trimmedSearchTerm &&\r\n (this.isGroupSearchActive || this.isGroupFilterActive)\r\n ) {\r\n this.onGroupTypeFiltered(this.selectedGroupType);\r\n return;\r\n }\r\n if (!this.trimmedSearchTerm) return;\r\n this.isGroupSearchOrFilterActive = !!this.trimmedSearchTerm;\r\n this.onGroupSearch();\r\n this.groupsService\r\n .groupsByNameAcronym(\r\n this.trimmedSearchTerm,\r\n this.viewGroupTexts?.allGroupTypesOption ===\r\n this.selectedGroupType?.name\r\n ? undefined\r\n : (this.selectedGroupType?.id as number)\r\n )\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 const groupTypeOptions: SelectOption[] = [];\r\n groupTypeOptions.push({\r\n id: '',\r\n name: this.viewGroupTexts?.allGroupTypesOption,\r\n });\r\n this.sortGroupTypes()?.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 * Returns the sorted group types based on the view order.\r\n * @return [string, GroupType][]\r\n * @memberof GroupsComponent\r\n */\r\n sortGroupTypes(): [string, GroupType][] {\r\n return Object.entries(this.groupTypes).sort(\r\n (groupA: [string, GroupType], groupB: [string, GroupType]) =>\r\n (groupA[1]?.viewOrder as number) - (groupB[1]?.viewOrder as number)\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 if (this.trimmedSearchTerm) {\r\n this.onGroupSearchClick(this.trimmedSearchTerm);\r\n this.showGroupFilter();\r\n return;\r\n }\r\n this.getGroupsPayload = {\r\n groupId: '',\r\n groupTypeId: this.selectedGroupType?.id as string,\r\n };\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 if (errorCodes?.includes('1010')) this.parentGroupsInfo = [];\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 px-4\">\r\n <div\r\n class=\"ieeesa-groups__info d-flex justify-content-between pb-3 align-items-center\"\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 class=\"mb-0\"\r\n [ngClass]=\"\r\n isMobileView\r\n ? 'ieeesa-title-lg-24 p-0'\r\n : 'ieeesa-headline-lg-32 ieeesa-groups__info__heading'\r\n \"\r\n >\r\n {{ groupsPageInfo?.groupsTitle }}\r\n </p>\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=\"\r\n validateAccess(permissionType.CREATE_ROOT_GROUP) ||\r\n validateAccess(this.permissionType.MANAGE_ALL_GROUPS)\r\n \"\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 <ieeesa-icon-button\r\n [iconButton]=\"searchGroupIcon\"\r\n (iconButtonClick)=\"onGroupSearch()\"\r\n >\r\n </ieeesa-icon-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 <div\r\n class=\"order-2 order-sm-1 col-12 col-md-7 col-lg-7 col-xl-7 d-flex flex-column justify-content-between\"\r\n >\r\n <p class=\"ieeesa-body-md-16\">\r\n {{ groupsPageInfo?.groupsDescription }}\r\n </p>\r\n <button\r\n [ngClass]=\"\r\n isMobileView ? 'p-0' : 'ieeesa-groups__actions__add-group-btn'\r\n \"\r\n mat-button\r\n *ngIf=\"\r\n validateAccess(permissionType.CREATE_ROOT_GROUP) ||\r\n validateAccess(this.permissionType.MANAGE_ALL_GROUPS)\r\n \"\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\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 [ngClass]=\"isMobileView ? 'ieeesa-search-mobile-view' : ''\"\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 [isSortNeeded]=\"false\"\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</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/components/reciprocal-credit-section/reciprocal-credit-section.component';\r\nexport * from './lib/components/add-working-groups/add-working-groups.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/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/role-type.model';\r\nexport * from './lib/models/roster-type.model';\r\nexport * from './lib/models/table-column-schema-user-group.model';\r\nexport * from './lib/models/parent-groups-info.model';\r\nexport * from './lib/models/reciprocal-credit.model';\r\n\r\nexport * from './lib/services/groups.service';\r\nexport * from './lib/services/roster-export.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":["i3","i1.GroupPermissionsMapService","screenTexts?.errors","i1","i2.UserPermissionsService","i3.GroupPermissionsMapService","i1.GroupsService","i2","screenTexts?.createGroup","takeUntil","map","constants","i4","catchError","constants?.errors","constants?.deleteUsersGroup","constants?.ariaLabel","i2.GroupsService","i4.RosterExportService","i5","i6","screenTexts?.deleteGroup","i5.UserPermissionsService","i6.GroupPermissionsMapService","i7"],"mappings":"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"}