@sunbird-cb/access-settings 0.0.1-cbrelease-4.8.26

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.
Files changed (64) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/_common/access-control/access-control.component.mjs +561 -0
  3. package/esm2022/lib/_common/access-control/access-control.module.mjs +125 -0
  4. package/esm2022/lib/_common/dialogs/access-control-guide/access-control-guide.component.mjs +27 -0
  5. package/esm2022/lib/_common/dialogs/confirm-dialog/confirm-dialog.component.mjs +27 -0
  6. package/esm2022/lib/_common/dialogs/entity-selections/entity-selections.component.mjs +371 -0
  7. package/esm2022/lib/_common/dialogs/invite-users/invite-users.component.mjs +116 -0
  8. package/esm2022/lib/_common/pagination/pagination.component.mjs +168 -0
  9. package/esm2022/lib/_constants/app.constants.mjs +6 -0
  10. package/esm2022/lib/_directives/drag-drop.directive.mjs +53 -0
  11. package/esm2022/lib/_models/access-control.model.mjs +31 -0
  12. package/esm2022/lib/_models/pagination.model.mjs +2 -0
  13. package/esm2022/lib/_services/access-control.service.mjs +195 -0
  14. package/esm2022/lib/_services/cadre-mapping.service.mjs +164 -0
  15. package/esm2022/lib/access-settings.component.mjs +13 -0
  16. package/esm2022/lib/access-settings.module.mjs +21 -0
  17. package/esm2022/lib/components/bulk-upload-karmayogi/bulk-upload-karmayogi.component.mjs +391 -0
  18. package/esm2022/lib/components/list-table/list-table.component.mjs +148 -0
  19. package/esm2022/lib/components/snackbar/snackbar.component.mjs +19 -0
  20. package/esm2022/public-api.mjs +10 -0
  21. package/esm2022/sunbird-cb-access-settings.mjs +5 -0
  22. package/fesm2022/sunbird-cb-access-settings.mjs +2331 -0
  23. package/fesm2022/sunbird-cb-access-settings.mjs.map +1 -0
  24. package/index.d.ts +6 -0
  25. package/lib/_common/access-control/access-control.component.d.ts +71 -0
  26. package/lib/_common/access-control/access-control.component.d.ts.map +1 -0
  27. package/lib/_common/access-control/access-control.module.d.ts +36 -0
  28. package/lib/_common/access-control/access-control.module.d.ts.map +1 -0
  29. package/lib/_common/dialogs/access-control-guide/access-control-guide.component.d.ts +16 -0
  30. package/lib/_common/dialogs/access-control-guide/access-control-guide.component.d.ts.map +1 -0
  31. package/lib/_common/dialogs/confirm-dialog/confirm-dialog.component.d.ts +15 -0
  32. package/lib/_common/dialogs/confirm-dialog/confirm-dialog.component.d.ts.map +1 -0
  33. package/lib/_common/dialogs/entity-selections/entity-selections.component.d.ts +65 -0
  34. package/lib/_common/dialogs/entity-selections/entity-selections.component.d.ts.map +1 -0
  35. package/lib/_common/dialogs/invite-users/invite-users.component.d.ts +40 -0
  36. package/lib/_common/dialogs/invite-users/invite-users.component.d.ts.map +1 -0
  37. package/lib/_common/pagination/pagination.component.d.ts +31 -0
  38. package/lib/_common/pagination/pagination.component.d.ts.map +1 -0
  39. package/lib/_constants/app.constants.d.ts +6 -0
  40. package/lib/_constants/app.constants.d.ts.map +1 -0
  41. package/lib/_directives/drag-drop.directive.d.ts +12 -0
  42. package/lib/_directives/drag-drop.directive.d.ts.map +1 -0
  43. package/lib/_models/access-control.model.d.ts +106 -0
  44. package/lib/_models/access-control.model.d.ts.map +1 -0
  45. package/lib/_models/pagination.model.d.ts +6 -0
  46. package/lib/_models/pagination.model.d.ts.map +1 -0
  47. package/lib/_services/access-control.service.d.ts +72 -0
  48. package/lib/_services/access-control.service.d.ts.map +1 -0
  49. package/lib/_services/cadre-mapping.service.d.ts +71 -0
  50. package/lib/_services/cadre-mapping.service.d.ts.map +1 -0
  51. package/lib/access-settings.component.d.ts +9 -0
  52. package/lib/access-settings.component.d.ts.map +1 -0
  53. package/lib/access-settings.module.d.ts +12 -0
  54. package/lib/access-settings.module.d.ts.map +1 -0
  55. package/lib/components/bulk-upload-karmayogi/bulk-upload-karmayogi.component.d.ts +31 -0
  56. package/lib/components/bulk-upload-karmayogi/bulk-upload-karmayogi.component.d.ts.map +1 -0
  57. package/lib/components/list-table/list-table.component.d.ts +40 -0
  58. package/lib/components/list-table/list-table.component.d.ts.map +1 -0
  59. package/lib/components/snackbar/snackbar.component.d.ts +13 -0
  60. package/lib/components/snackbar/snackbar.component.d.ts.map +1 -0
  61. package/package.json +28 -0
  62. package/public-api.d.ts +7 -0
  63. package/public-api.d.ts.map +1 -0
  64. package/sunbird-cb-access-settings.d.ts.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sunbird-cb-access-settings.mjs","sources":["../../../../library/sunbird-cb/access-settings/src/lib/access-settings.component.ts","../../../../library/sunbird-cb/access-settings/src/lib/components/snackbar/snackbar.component.ts","../../../../library/sunbird-cb/access-settings/src/lib/components/snackbar/snackbar.component.html","../../../../library/sunbird-cb/access-settings/src/lib/access-settings.module.ts","../../../../library/sunbird-cb/access-settings/src/lib/_directives/drag-drop.directive.ts","../../../../library/sunbird-cb/access-settings/src/lib/_services/access-control.service.ts","../../../../library/sunbird-cb/access-settings/src/lib/_common/pagination/pagination.component.ts","../../../../library/sunbird-cb/access-settings/src/lib/_common/pagination/pagination.component.html","../../../../library/sunbird-cb/access-settings/src/lib/components/list-table/list-table.component.ts","../../../../library/sunbird-cb/access-settings/src/lib/components/list-table/list-table.component.html","../../../../library/sunbird-cb/access-settings/src/lib/components/bulk-upload-karmayogi/bulk-upload-karmayogi.component.ts","../../../../library/sunbird-cb/access-settings/src/lib/components/bulk-upload-karmayogi/bulk-upload-karmayogi.component.html","../../../../library/sunbird-cb/access-settings/src/lib/_common/dialogs/invite-users/invite-users.component.ts","../../../../library/sunbird-cb/access-settings/src/lib/_common/dialogs/invite-users/invite-users.component.html","../../../../library/sunbird-cb/access-settings/src/lib/_models/access-control.model.ts","../../../../library/sunbird-cb/access-settings/src/lib/_constants/app.constants.ts","../../../../library/sunbird-cb/access-settings/src/lib/_common/dialogs/entity-selections/entity-selections.component.ts","../../../../library/sunbird-cb/access-settings/src/lib/_common/dialogs/entity-selections/entity-selections.component.html","../../../../library/sunbird-cb/access-settings/src/lib/_common/dialogs/confirm-dialog/confirm-dialog.component.ts","../../../../library/sunbird-cb/access-settings/src/lib/_common/dialogs/confirm-dialog/confirm-dialog.component.html","../../../../library/sunbird-cb/access-settings/src/lib/_common/dialogs/access-control-guide/access-control-guide.component.ts","../../../../library/sunbird-cb/access-settings/src/lib/_common/dialogs/access-control-guide/access-control-guide.component.html","../../../../library/sunbird-cb/access-settings/src/lib/_services/cadre-mapping.service.ts","../../../../library/sunbird-cb/access-settings/src/lib/_common/access-control/access-control.component.ts","../../../../library/sunbird-cb/access-settings/src/lib/_common/access-control/access-control.component.html","../../../../library/sunbird-cb/access-settings/src/lib/_common/access-control/access-control.module.ts","../../../../library/sunbird-cb/access-settings/src/public-api.ts","../../../../library/sunbird-cb/access-settings/src/sunbird-cb-access-settings.ts"],"sourcesContent":["import { Component, OnInit } from \"@angular/core\";\n\n@Component({\n selector: \"sb-uic-access-settings\",\n template: ` <p>access settings works!</p> `,\n styles: [`\n ::ng-deep .mdc-tooltip {\n --mdc-plain-tooltip-container-color: #616161;\n --mdc-plain-tooltip-supporting-text-color: #ffffff;\n --mdc-plain-tooltip-container-shape: 4px;\n --mdc-plain-tooltip-container-size: 340px;\n --mdc-plain-tooltip-supporting-text-padding: 8px;\n }\n `]\n})\nexport class AccessSettingsComponent implements OnInit {\n constructor() {}\n\n ngOnInit() {}\n}\n","import { ChangeDetectionStrategy, Component, inject } from \"@angular/core\";\nimport { MAT_LEGACY_SNACK_BAR_DATA as MAT_SNACK_BAR_DATA, MatLegacySnackBarRef as MatSnackBarRef } from \"@angular/material/legacy-snack-bar\";\n\n@Component({\n selector: \"sb-uic-snackbar\",\n templateUrl: \"./snackbar.component.html\",\n styleUrls: [\"./snackbar.component.scss\"],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SnackbarComponent {\n public readonly data = inject<{ message: string; type: \"success | error\" }>(MAT_SNACK_BAR_DATA);\n\n constructor(public snackBarRef: MatSnackBarRef<SnackbarComponent>) {}\n}\n","<div class=\"snackbar-wrapper\">\n <div class=\"flex items-center justify-between\">\n <div class=\"message flex items-center gap-4\">\n <ng-container *ngIf=\"data?.type === 'success'\">\n <mat-icon class=\"text-white\">check</mat-icon>\n </ng-container>\n\n <ng-container *ngIf=\"data?.type === 'error'\">\n <img src=\"/assets/icons/error-icon.svg\" alt=\"error\" width=\"24\" height=\"24\" style=\"filter: brightness(0) invert(1)\" />\n </ng-container>\n\n <span class=\"text-white\">{{ data?.message }}</span>\n </div>\n\n <div class=\"close\">\n <mat-icon class=\"cursor-pointer text-white\" (click)=\"snackBarRef.dismiss()\"> close </mat-icon>\n </div>\n </div>\n</div>\n","import { NgModule } from \"@angular/core\";\nimport { AccessSettingsComponent } from \"./access-settings.component\";\nimport { SnackbarComponent } from \"./components/snackbar/snackbar.component\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { CommonModule } from \"@angular/common\";\n@NgModule({\n declarations: [AccessSettingsComponent, SnackbarComponent],\n imports: [MatIconModule, CommonModule],\n exports: [AccessSettingsComponent]\n})\nexport class AccessSettingsModule {}\nexport * from \"./access-settings.component\";\n","import {\n Directive,\n Output,\n EventEmitter,\n HostListener,\n HostBinding,\n} from \"@angular/core\";\n\n@Directive({\n selector: \"[wsAuthDragDrop]\",\n})\nexport class DragDropDirective {\n @Output() fileDropped = new EventEmitter<any>();\n @HostBinding(\"style.opacity\") public opacity = \"1\";\n\n // Dragover listener\n @HostListener(\"dragover\", [\"$event\"]) onDragOver(evt: Event) {\n evt.preventDefault();\n evt.stopPropagation();\n this.opacity = \"0.4\";\n }\n // Dragleave listener\n @HostListener(\"dragleave\", [\"$event\"]) public onDragLeave(evt: Event) {\n evt.preventDefault();\n evt.stopPropagation();\n this.opacity = \"1.0\";\n }\n // Drop listener\n @HostListener(\"drop\", [\"$event\"]) public ondrop(evt: any) {\n evt.preventDefault();\n evt.stopPropagation();\n const files = evt.dataTransfer.files[0];\n this.opacity = \"1.0\";\n\n if (files) {\n this.fileDropped.emit(files);\n }\n }\n}\n","import { HttpClient } from \"@angular/common/http\";\nimport { Injectable, signal, WritableSignal } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\nimport { IUserGroupRequest, NsAccessControlConfig } from \"../_models/access-control.model\";\nimport { toNumber } from \"lodash\";\n\nconst ENDPOINTS = {\n SEARCH_USER_WITH_ADMIN: (query: string) => `/apis/proxies/v8/user/v1/autocomplete/${query}`,\n SEARCH_USER: `/apis/proxies/v8/user/v1/admin/search`,\n SEARCH_ORG: \"/apis/proxies/v8/org/v1/admin/search\",\n VALIDATE_USER: \"/apis/proxies/v8/user/v1/search\",\n GROUPS: \"/apis/proxies/v8/user/v1/groups\",\n CADRE_CONFIG: \"/apis/proxies/v8/data/v2/system/settings/get/cadreConfig\",\n DESIGNATION_LIST: \"/apis/proxies/v8/designation/search\",\n SEARCH_V4: \"/apis/proxies/v8/sunbirdigot/v4/search\",\n CREATE_USERGROUPS_CONTROL: \"/apis/proxies/v8/accessSetttings/v1/upsert\",\n GET_ACCESS_CONTROL: (id: string) => `/apis/proxies/v8/accessSetttings/read/${id}`,\n ACTION_CONTENT_V3: `apis/proxies/v8/action/content/v3/`\n};\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class AccessControlService {\n accessControlConfig: WritableSignal<NsAccessControlConfig.IAccessControlConfig>;\n holdServiceCadrebatch: WritableSignal<{\n service: { id: string; name: string }[];\n batch: number[];\n cadre: { id: string; name: string }[];\n }>;\n\n constructor(private readonly http: HttpClient) {\n this.accessControlConfig = signal<NsAccessControlConfig.IAccessControlConfig>(null);\n this.holdServiceCadrebatch = signal({\n service: [],\n batch: [],\n cadre: []\n });\n }\n\n fetchUserListWithAdmin(queryString: string): Observable<any> {\n return this.http.get<any>(ENDPOINTS.SEARCH_USER_WITH_ADMIN(queryString));\n }\n\n fetchUserList(query: string, pagination: { limit: number; offset: number }, userIds?: string[]): Observable<any> {\n let request: any = {\n filters: {\n \"profileDetails.profileStatus\": [\"VERIFIED\", \"NOT-VERIFIED\"],\n status: 1\n },\n limit: pagination.limit || 5,\n offset: pagination.offset || 0,\n query: query,\n sort_by: {\n firstName: \"asc\"\n }\n };\n if (userIds?.length) {\n request.filters = { ...request.filters, userId: userIds };\n }\n return this.http.post<any>(ENDPOINTS.SEARCH_USER, { request: request });\n }\n\n fetchOrgList(query: string, pagination?: { limit: number; offset: number }): Observable<any> {\n const request = {\n request: {\n filters: {},\n sort_by: {\n channel: \"asc\"\n },\n fields: [\"channel\", \"identifier\"],\n // limit: pagination.limit || 5,\n // offset: pagination.offset || 0,\n query: query\n }\n };\n return this.http.post<any>(ENDPOINTS.SEARCH_ORG, request);\n }\n\n validateUser(request: any): Observable<any> {\n return this.http.post<any>(ENDPOINTS.VALIDATE_USER, request);\n }\n\n fetchGroupsList(): Observable<any> {\n return this.http.get<any>(ENDPOINTS.GROUPS);\n }\n\n fetchCadreConfig(): Observable<any> {\n return this.http.get<any>(ENDPOINTS.CADRE_CONFIG);\n }\n\n fetchDesignation(query: string): Observable<any> {\n const payload = {\n filterCriteriaMap: {\n status: \"Active\"\n },\n requestedFields: [\"designation\", \"id\"],\n searchString: query\n };\n return this.http.post<any>(ENDPOINTS.DESIGNATION_LIST, payload);\n }\n\n fetchDesignationsWithOrg(categories: string[], query: string): Observable<any> {\n const payload = {\n request: {\n filters: {\n status: \"Live\",\n category: \"designation\",\n categories: categories,\n objectType: \"Term\"\n },\n fields: [\"identifier\", \"name\"],\n query: query,\n sort_by: {\n lastUpdatedOn: \"desc\",\n objectType: \"Term\"\n },\n facets: []\n }\n };\n return this.http.post<any>(ENDPOINTS.SEARCH_V4, payload);\n }\n\n applyUserGroupAccessControl(request: IUserGroupRequest): Observable<any> {\n return this.http.put<any>(ENDPOINTS.CREATE_USERGROUPS_CONTROL, request);\n }\n\n fetchUserGroupAccessControl(id: string): Observable<any> {\n return this.http.get<any>(ENDPOINTS.GET_ACCESS_CONTROL(id));\n }\n\n updateContentV3(meta: any, id: string): Observable<any> {\n return this.http.patch<any>(`${ENDPOINTS.ACTION_CONTENT_V3}update/${id}`, meta);\n }\n\n downloadFile(data: any, filename = \"data\") {\n const csvData = this.convertToCSV(data, [\"email\", \"status\", \"mobile\", \"message\"]);\n const blob = new Blob([`\\ufeff${csvData}`], { type: \"text/csv;charset=utf-8;\" });\n const dwldLink = document.createElement(\"a\");\n const url = URL.createObjectURL(blob);\n const isSafariBrowser = navigator.userAgent.indexOf(\"Safari\") !== -1 && navigator.userAgent.indexOf(\"Chrome\") === -1;\n if (isSafariBrowser) {\n // if Safari open in new window to save file with random filename.\n dwldLink.setAttribute(\"target\", \"_blank\");\n }\n dwldLink.setAttribute(\"href\", url);\n dwldLink.setAttribute(\"download\", `${filename}.csv`);\n dwldLink.style.visibility = \"hidden\";\n document.body.appendChild(dwldLink);\n dwldLink.click();\n document.body.removeChild(dwldLink);\n }\n\n convertToCSV(objArray: any, headerList: any) {\n const array = typeof objArray !== \"object\" ? JSON.parse(objArray) : objArray;\n let str = \"\";\n let row = \"S.No,\";\n\n for (const index in headerList) {\n if (headerList[index]) {\n row += `${headerList[index]} ,`;\n }\n }\n row = row.slice(0, -1);\n str += `${row}\\r\\n`;\n // for (let i = 0; i < array.length; i += 1) {\n for (const iIndex in array) {\n if (array[iIndex]) {\n let line = `${toNumber(iIndex) + 1} `;\n for (const index in headerList) {\n if (headerList[index]) {\n const head = headerList[index];\n\n line += `, ${array[iIndex][head]}`;\n }\n }\n str += `${line}\\r\\n`;\n }\n }\n return str;\n }\n\n createRequestContent(apiResponse: any, accessSettingsEnabled: boolean) {\n return {\n request: {\n content: {\n appIcon: apiResponse.appIcon || \"\",\n posterImage: apiResponse.posterImage || \"\",\n code: apiResponse.code || \"\",\n contentType: apiResponse.contentType || \"\",\n createdBy: apiResponse.createdBy || \"\",\n creatorContacts: apiResponse.creatorContacts || [],\n creatorIDs: apiResponse.creatorIDs || [],\n createdFor: apiResponse.createdFor || [],\n creator: apiResponse.creator || \"\",\n framework: apiResponse.framework || \"\",\n mimeType: apiResponse.mimeType || \"\",\n name: apiResponse.name || \"\",\n organisation: apiResponse.organisation || [],\n isExternal: apiResponse.isExternal || false,\n primaryCategory: apiResponse.primaryCategory || \"\",\n courseCategory: apiResponse.courseCategory || \"\",\n license: apiResponse.license || \"\",\n ownershipType: apiResponse.ownershipType || [],\n cumulativeTracking: apiResponse.cumulativeTracking || false,\n language: apiResponse.language || [],\n accessSetting: apiResponse.accessSetting || \"\",\n versionKey: apiResponse.versionKey || \"\",\n accessSettingsEnabled: accessSettingsEnabled || false\n }\n }\n };\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from \"@angular/core\";\nimport { PageChangeEmitter } from \"../../_models/pagination.model\";\n@Component({\n selector: \"sb-uic-pagination\",\n templateUrl: \"./pagination.component.html\",\n styleUrls: [\"./pagination.component.scss\"],\n})\nexport class PaginationComponent implements OnInit, OnChanges {\n private _currentPage: number = 1;\n\n @Input() defaultPaginationSize: number = 10;\n @Input() defaultPaginationSizeOptions: number[] = [];\n @Input() totalItemsCount: number = 0;\n @Input()\n set currentPage(value: number) {\n if (this._currentPage !== value) {\n this._currentPage = value;\n this.paginationInListing();\n }\n }\n get currentPage(): number {\n return this._currentPage;\n }\n\n @Output() pageChange: EventEmitter<PageChangeEmitter> = new EventEmitter();\n\n pagination: any = [];\n rangeWithDots: any;\n showingArray: any[] = [];\n lastPage = 0;\n firstPage = 0;\n previousPage = 0;\n\n ngOnInit(): void {\n this.paginationInListing();\n }\n ngOnChanges(changes: SimpleChanges): void {\n if (\n changes.totalItemsCount &&\n changes.totalItemsCount.previousValue &&\n changes.totalItemsCount.currentValue !==\n changes.totalItemsCount.previousValue\n ) {\n this.paginationInListing();\n }\n }\n\n paginationInListing() {\n let lower = 0;\n let upper = 0;\n let limit = this.defaultPaginationSize;\n let items = this.totalItemsCount;\n this.showingArray = [];\n\n for (let i = 0; i < items; i++) {\n if (upper !== items && upper < items) {\n lower = upper;\n if (upper != items && (upper = lower + limit) <= items) {\n upper = lower + limit;\n } else {\n upper = items;\n }\n this.showingArray.push([lower, upper]);\n }\n }\n\n let dividedPagination = Math.ceil(this.totalItemsCount / limit);\n let paginationLength = this.paginationDup(\n this.currentPage,\n dividedPagination\n );\n\n let currentIndex = this.showingArray[this.currentPage - 1];\n let lowerPagination = this.totalItemsCount ? currentIndex[0] + 1 : \"\";\n let upperPagination = this.totalItemsCount ? currentIndex[1] : \"\";\n\n this.lastPage = paginationLength[paginationLength.length - 1];\n this.firstPage = paginationLength[0];\n\n this.pagination = {\n dividedPagination: dividedPagination,\n paginationLength: paginationLength,\n lower: lowerPagination,\n upper: upperPagination,\n };\n }\n\n paginationDup(c: any, m: any) {\n let current = c;\n let last = m;\n let delta = 5;\n let left = current - delta;\n let right = current + delta + 1;\n let range: any = [];\n let l;\n this.rangeWithDots = [];\n\n for (let i = 1; i <= last; i++) {\n if (i == 1 || i == last || (i >= left && i < right)) {\n range.push(i);\n }\n }\n\n for (let i of range) {\n if (l) {\n if (i - l === 2) {\n this.rangeWithDots.push(l + 1);\n } else if (i - l !== 1) {\n this.rangeWithDots.push(\"...\");\n }\n }\n this.rangeWithDots.push(i);\n l = i;\n }\n return this.rangeWithDots;\n }\n\n goToPage(page: number) {\n this.currentPage = page;\n this.pageChange.emit({\n currentPage: this.currentPage,\n previousPage: this.previousPage,\n limit: this.defaultPaginationSize,\n });\n this.paginationInListing();\n }\n\n // TODO: May need to implement in future\n navigateToLastPage(page: number) {\n if (page != this.currentPage) {\n this.goToPage(page);\n }\n }\n\n // TODO: May need to implement in future\n navigateToFirstPage(page: number) {\n if (page != this.currentPage) {\n this.goToPage(page);\n }\n }\n\n navigateToNextPage(page: number) {\n if (\n page <=\n (this.pagination.paginationLength &&\n this.pagination.paginationLength[\n this.pagination.paginationLength.length - 1\n ])\n ) {\n this.currentPage = this.currentPage + 1;\n this.previousPage = page;\n this.goToPage(this.currentPage);\n }\n }\n\n navigateToPrevPage(page: number) {\n if (\n page <=\n (this.pagination.paginationLength &&\n this.pagination.paginationLength[\n this.pagination.paginationLength.length - 1\n ])\n ) {\n this.currentPage = this.currentPage - 1;\n this.previousPage = page;\n this.goToPage(this.currentPage);\n }\n }\n\n onChangePageSize(event: any) {\n this.defaultPaginationSize = event.value;\n this.currentPage = 1;\n this.previousPage = 0;\n this.paginationInListing();\n this.pageChange.emit({\n currentPage: this.currentPage,\n previousPage: this.previousPage,\n limit: this.defaultPaginationSize,\n });\n }\n}\n","<div class=\"ws-pagination-wrapper px-4 mt-3\">\n <div class=\"pagination-size-select mat-full-radius-select flex items-center gap-2\">\n <span class=\"text-xs font-normal hidden md:block\">Show Entries</span>\n <mat-form-field appearance=\"outline\">\n <mat-select [(value)]=\"defaultPaginationSize\" (selectionChange)=\"onChangePageSize($event)\">\n <ng-container *ngFor=\"let option of defaultPaginationSizeOptions\">\n <mat-option [value]=\"option\">{{option}}</mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n <ul class=\"pagination\">\n <div class=\"pagination-listing flex items-center\">\n <ng-container\n *ngFor=\"let count of pagination?.paginationLength; let last = last; let first = first; let i = index\">\n <li class=\"page-item\" *ngIf=\"first\" (click)=\"navigateToPrevPage(currentPage)\"\n [ngClass]=\"{disabled: currentPage === firstPage}\">\n <a class=\"page-link\" aria-label=\"Previous\">\n <span aria-hidden=\"true\"><mat-icon>keyboard_arrow_left</mat-icon></span>\n </a>\n </li>\n <li class=\"page-item flex items-center justify-center\" [ngClass]=\"count == currentPage ? 'active' : '' \"\n (click)=\"goToPage(count)\">\n <a class=\"page-link\">{{count}}</a>\n </li>\n <li class=\"page-item\" *ngIf=\"last\" (click)=\"navigateToNextPage(currentPage)\"\n [ngClass]=\"{disabled: currentPage === lastPage}\">\n <a class=\" page-link\" aria-label=\"Next\">\n <span aria-hidden=\"true\"><mat-icon>keyboard_arrow_right</mat-icon></span>\n </a>\n </li>\n\n </ng-container>\n </div>\n </ul>\n</div>","import { SelectionModel } from \"@angular/cdk/collections\";\nimport { AfterViewInit, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from \"@angular/core\";\nimport { MatTableDataSource } from \"@angular/material/table\";\nimport { PageChangeEmitter } from \"../../_models/pagination.model\";\nimport { MatSort, Sort } from \"@angular/material/sort\";\nimport { LiveAnnouncer } from \"@angular/cdk/a11y\";\n\n@Component({\n selector: \"sb-uic-list-table\",\n templateUrl: \"./list-table.component.html\",\n styleUrls: [\"./list-table.component.scss\"]\n})\nexport class ListTableComponent implements OnInit, OnChanges, AfterViewInit {\n @Input() data: any[] = [];\n @Input() count: number = 0;\n @Input() initialPaginationSize: number = 5;\n @Input() initialPaginationSizeOptions: number[] = [5, 10, 25, 100];\n @Input() tableConfig: any;\n @Input() selected: any;\n @Input() bulkUploadEntriesCount: any;\n\n @Output() selectedDataChange: EventEmitter<any> = new EventEmitter();\n @Output() pageChange: EventEmitter<PageChangeEmitter> = new EventEmitter();\n @Output() removeSelectedData: EventEmitter<any> = new EventEmitter();\n\n @ViewChild(MatSort) sort: MatSort;\n\n dataSource = new MatTableDataSource<any>(this.data);\n selection = new SelectionModel<any>(true, []);\n selectedTablerow: any[] = [];\n\n currentPage: number = 1;\n constructor(private _liveAnnouncer: LiveAnnouncer) {}\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n // Handle data input change\n if (changes[\"data\"]?.currentValue?.length) {\n const mappedUsers = changes[\"data\"].currentValue.map((user: any) => ({\n firstName: user?.firstName || user?.profileDetails?.personalDetails?.firstname || \"\",\n mobile: user?.mobile || user?.profileDetails?.personalDetails?.mobile || \"\",\n email: user?.email || user?.profileDetails?.personalDetails?.primaryEmail || \"\",\n ministry: user?.ministry || user?.organisations[0]?.orgName || \"\",\n invited_on: user?.invited_on || \"\",\n status: user?.status || \"\",\n userId: user?.userId || \"\"\n }));\n this.data = mappedUsers;\n this.dataSource = new MatTableDataSource<any>(mappedUsers);\n }\n\n if (changes[\"count\"]?.currentValue !== undefined) {\n this.count = changes[\"count\"].currentValue;\n }\n\n if (changes[\"selected\"]?.currentValue) {\n this.selection.clear();\n\n if (changes[\"selected\"].currentValue.length > 0) {\n this.dataSource.data.forEach(row => {\n if (changes[\"selected\"].currentValue.some((sel: any) => sel.userId === row.userId)) {\n this.selection.select(row);\n }\n });\n }\n\n this.selectedTablerow = this.selection.selected;\n }\n }\n\n ngAfterViewInit() {\n if (this.tableConfig?.canSortColumn) {\n this.dataSource.sort = this.sort;\n }\n }\n\n setPaginatedUsers(page: number) {\n const startIndex = (page - 1) * this.initialPaginationSize;\n const endIndex = startIndex + this.initialPaginationSize;\n const paginatedUsers = this.data.slice(startIndex, endIndex);\n this.dataSource = new MatTableDataSource<any>(paginatedUsers);\n }\n\n isAllSelected() {\n const numSelected = this.selection.selected.length;\n const numRows = this.dataSource.data.length;\n return numSelected === numRows;\n }\n\n masterToggle() {\n this.isAllSelected() ? this.selection.clear() : this.dataSource.data.forEach(row => this.selection.select(row));\n this.selectedTablerow = this.selection.selected;\n this.selectedDataChange.emit(this.selectedTablerow);\n }\n\n toggleSelection(row: any): void {\n this.selection.toggle(row);\n this.selectedTablerow = this.selection.selected;\n this.selectedDataChange.emit(this.selectedTablerow);\n }\n\n onPageChange(event: PageChangeEmitter) {\n this.pageChange.emit(event);\n }\n\n removeUserFromSelected(): void {\n if (!this.selectedTablerow.length) {\n return;\n }\n const removedList = [...this.selectedTablerow];\n const remainingList = this.data.filter(user => !this.selectedTablerow.some(selected => selected.userId === user.userId));\n this.data = remainingList;\n this.count = remainingList.length;\n this.selectedTablerow = [];\n this.selection.clear();\n this.dataSource = new MatTableDataSource<any>(remainingList);\n if (this.tableConfig?.type === \"selectedUsers\") {\n this.removeSelectedData.emit({\n remainingList,\n removedList\n });\n }\n }\n\n onSortChange(sortState: Sort): void {\n if (sortState.direction) {\n this._liveAnnouncer.announce(`Sorted ${sortState.direction}ending`);\n } else {\n this._liveAnnouncer.announce(\"Sorting cleared\");\n }\n }\n\n refreshSelected(): void {\n this.selection.clear();\n }\n}\n","<div class=\"wrapper-user-table\">\n <div class=\"selections-meta\">\n <div class=\"flex items-center justify-between p-2\">\n <div class=\"flex items-center gap-2 selection-count\" *ngIf=\"tableConfig?.canShowSelectedItems || false\">\n <span class=\"\">{{selectedTablerow.length}}</span>\n <span class=\"text-sm font-normal\">Items Selected</span>\n </div>\n <div class=\"flex items-center gap-2 actions-selections ml-auto\">\n <button mat-button color=\"primary\" class=\"text-sm font-normal action-refresh-btn\" (click)=\"refreshSelected()\"\n *ngIf=\"tableConfig?.canShowRefreshBtn || false\">\n <mat-icon>refresh</mat-icon>\n Refresh\n </button>\n\n <button mat-button color=\"warn\" class=\"text-sm font-bold action-delete-btn\"\n (click)=\"removeUserFromSelected()\" *ngIf=\"tableConfig?.canShowDeleteBtn || false\">\n <mat-icon>delete</mat-icon>\n Delete\n </button>\n </div>\n </div>\n </div>\n\n <table mat-table [dataSource]=\"dataSource\" matSort (matSortChange)=\"onSortChange($event)\">\n <!-- Checkbox Column -->\n <ng-container matColumnDef=\"select\">\n <th mat-header-cell *matHeaderCellDef>\n <ng-container *ngIf=\"tableConfig?.canShowMasterSelect\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\n [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n </ng-container>\n </th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"toggleSelection(row)\"\n [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </td>\n </ng-container>\n\n <!-- first_name Column -->\n <ng-container matColumnDef=\"firstName\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> First Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element?.firstName}} </td>\n </ng-container>\n\n <!-- Email Column -->\n <ng-container matColumnDef=\"email\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Email </th>\n <td mat-cell *matCellDef=\"let element\"> {{element?.email}} </td>\n </ng-container>\n\n <!-- ministry Column -->\n <ng-container matColumnDef=\"ministry\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Ministry </th>\n <td mat-cell *matCellDef=\"let element\">\n <span class=\"truncated-text \">\n {{element?.ministry}}\n </span>\n </td>\n </ng-container>\n\n <!-- mobile_no Column -->\n <ng-container matColumnDef=\"mobile\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Mobile No </th>\n <td mat-cell *matCellDef=\"let element\">\n {{element?.mobile}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"invited_on\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Invited On </th>\n <td mat-cell *matCellDef=\"let element\">\n {{element?.invited_on}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"status\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Status </th>\n <td mat-cell *matCellDef=\"let element\">\n <!-- {{element?.status}} -->\n <div class=\"success-status flex items-center justify-center\">Success</div>\n <!-- <div class=\"rejected-status flex items-center justify-center\">Rejected</div> -->\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"tableConfig?.displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: tableConfig?.displayedColumns;\" (click)=\"selection.toggle(row)\">\n </tr>\n </table>\n <div *ngIf=\"!dataSource.data.length\" class=\"no-data-center\">\n <div class=\"no-data p-4 flex flex-column items-center justify-center\">\n <img src=\"/assets/icons/no-events.png\" alt=\"no-data\">\n <span class=\"font-bold\">No information to display yet</span>\n </div>\n </div>\n <ng-container *ngIf=\"count && tableConfig?.canShowPagination\">\n <div class=\"pagination-users\">\n <sb-uic-pagination [defaultPaginationSize]=\"initialPaginationSize\"\n [defaultPaginationSizeOptions]=\"initialPaginationSizeOptions\" [totalItemsCount]=\"count\"\n [currentPage]=\"1\" (pageChange)=\"onPageChange($event)\">\n </sb-uic-pagination>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"bulkUploadEntriesCount\">\n <div class=\"text-xs text-[#666666] p-4 border-t border-black/15\">\n {{bulkUploadEntriesCount?.success}}/{{bulkUploadEntriesCount?.totalCount}} entries uploaded successfully\n </div>\n </ng-container>\n\n\n</div>","import { Component } from \"@angular/core\";\nimport { AccessControlService } from \"../../_services/access-control.service\";\nimport { NsAccessControlConfig } from \"../../_models/access-control.model\";\nimport { SnackbarComponent } from \"../snackbar/snackbar.component\";\nimport { MatLegacySnackBar as MatSnackBar } from \"@angular/material/legacy-snack-bar\";\n\n@Component({\n selector: \"sb-uic-bulk-upload-karmayogi\",\n templateUrl: \"./bulk-upload-karmayogi.component.html\",\n styleUrls: [\"./bulk-upload-karmayogi.component.scss\"],\n})\nexport class BulkUploadKarmayogiComponent {\n bulkUploadConfig: NsAccessControlConfig.IBulkUploadKarmayogi;\n file!: File | null;\n\n currrentFilterType = \"success\";\n csvContent: any;\n contacts: any = [];\n properties: any = \"\";\n flag = false;\n fileUploading = false;\n isSuccessUserlist: any = [];\n isErrorUserlist: any = [];\n fileName: string = \"\";\n currentDate = new Date();\n constructor(\n private accessControlService: AccessControlService,\n private snackBar: MatSnackBar\n ) {\n this.bulkUploadConfig =\n this.accessControlService.accessControlConfig().bulkUploadKarmayogi;\n }\n\n downloadSample() {\n const sampleFilePath = this.bulkUploadConfig.downloadSampleFile;\n if (sampleFilePath) {\n const link = document.createElement(\"a\");\n link.href = sampleFilePath.path;\n link.download = sampleFilePath.fileName || \"sample.csv\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n }\n\n onDrop(input: HTMLInputElement) {\n this.fileUploading = true;\n const files: any = [input];\n const fileTypes = [\"csv\"]; // acceptable file types\n if (files && files.length) {\n const extension = files[0].name.split(\".\").pop().toLowerCase(); // file extension from input file\n const isSuccess = fileTypes.indexOf(extension) > -1; // is extension in acceptable types\n // console.log(isSuccess)\n console.log(\"Filename: \" + files[0].name);\n this.fileName = files[0].name;\n // console.log('Type: ' + files[0].type)\n // console.log('Size: ' + files[0].size + ' bytes')\n if (isSuccess) {\n const fileToRead = files[0];\n const fileReader = new FileReader();\n fileReader.onload = (event: any) => {\n this.onFileLoad(event);\n };\n fileReader.readAsText(fileToRead, \"UTF-8\");\n } else {\n this.fileUploading = false;\n this.snackBar.openFromComponent(SnackbarComponent, {\n data: {\n message: \"Unsupported File Format. Please upload a CSV file.\",\n type: \"error\",\n },\n duration: 3000,\n panelClass: \"course-error-snackbar\",\n });\n }\n } else {\n this.fileUploading = false;\n this.snackBar.openFromComponent(SnackbarComponent, {\n data: {\n message: \"Unsupported File Format. Please upload a CSV file.\",\n type: \"error\",\n },\n duration: 3000,\n panelClass: \"course-error-snackbar\",\n });\n }\n }\n\n async onFileLoad(fileLoadedEvent: any) {\n this.isSuccessUserlist = [];\n this.isErrorUserlist = [];\n const textFromFileLoaded = fileLoadedEvent.target.result;\n this.csvContent = textFromFileLoaded;\n\n // Flag is for extracting first line\n let flag = false;\n // Main Data\n const objarray: any = [];\n // Properties\n const prop: any = [];\n // Total Length\n let size: any = 0;\n\n for (const line of this.csvContent.split(/[\\r\\n]+/)) {\n if (flag) {\n const obj: any = {};\n for (let k = 0; k < size; k += 1) {\n // Dynamic Object Properties\n obj[prop[k]] = line.split(\",\")[k];\n }\n objarray.push(obj);\n } else {\n // First Line of CSV will be having Properties\n for (let k = 0; k < line.split(\",\").length; k += 1) {\n size = line.split(\",\").length;\n // Removing all the spaces to make them usefull, also removing any \" characters\n prop.push(line.split(\",\")[k].replace(/ /g, \"\").replace(/\"/g, \"\"));\n }\n flag = true;\n }\n }\n this.contacts = objarray;\n if (this.contacts && this.contacts.length > 0) {\n const headerValues = Object.keys(this.contacts[0]);\n if (headerValues.length < 0 || headerValues.length > 2) {\n // NOSONAR\n this.fileUploading = false;\n this.snackBar.openFromComponent(SnackbarComponent, {\n data: {\n message:\n \"Field Mismatch. Please ensure your uploaded file matches the sample template provided.\",\n type: \"error\",\n },\n duration: 3000,\n panelClass: \"course-error-snackbar\",\n });\n return;\n }\n if (\n !headerValues.includes(\"Emailid\") ||\n !headerValues.includes(\"Mobilenumber\")\n ) {\n this.fileUploading = false;\n this.snackBar.openFromComponent(SnackbarComponent, {\n data: {\n message:\n \"Field Mismatch. Please ensure your uploaded file matches the sample template provided.\",\n type: \"error\",\n },\n duration: 3000,\n panelClass: \"course-error-snackbar\",\n });\n return;\n }\n }\n this.properties = [];\n\n this.properties = prop;\n // console.log(this.properties)\n const emailIds: any = [];\n const mobileNumbers: any = [];\n const bothEmailAndMobile: any = {};\n this.contacts = this.contacts.filter(\n (ele: any) => ele.Emailid || ele.Mobilenumber\n );\n if (this.contacts.length > 30) {\n this.snackBar.openFromComponent(SnackbarComponent, {\n data: { message: \"More than 30 users are not allowed\", type: \"error\" },\n duration: 3000,\n panelClass: \"course-error-snackbar\",\n });\n this.fileUploading = false;\n } else {\n await this.contacts.forEach((element: any) => {\n const emailPattern = new RegExp(\n `^[\\\\w\\-\\\\.]+@([\\\\w-]+\\\\.)+[\\\\w-]{2,4}$`\n );\n const mobilePattern = new RegExp(/^(6|7|8|9)\\d{9}$/);\n const emailTest = element.Emailid\n ? emailPattern.test(element.Emailid)\n : true;\n const mobileTest = element.Mobilenumber\n ? mobilePattern.test(element.Mobilenumber)\n : true;\n element[\"email\"] = element.Emailid;\n element[\"mobile\"] = element.Mobilenumber;\n if (mobileTest && element.Mobilenumber) {\n mobileNumbers.push(element.Mobilenumber);\n }\n if (emailTest && element.Emailid) {\n emailIds.push(element.Emailid.toLowerCase());\n }\n if (emailTest && mobileTest) {\n element[\"status\"] = \"Success\";\n element[\"userStatus\"] = true;\n bothEmailAndMobile[element.Emailid.toLowerCase()] = element;\n } else {\n if (emailTest || mobileTest) {\n element[\"status\"] = \"Success\";\n element[\"userStatus\"] = true;\n if (\n (!emailTest && element.Mobilenumber !== \"\") ||\n (!emailTest && element.Mobilenumber === \"\")\n ) {\n element[\"status\"] = \"Error\";\n element[\"userStatus\"] = false;\n element[\"message\"] = emailPattern.test(element.Emailid)\n ? \"\"\n : \"Invalid Email id\";\n }\n if (\n (!mobileTest && element.Emailid !== \"\") ||\n (!mobileTest && element.Emailid === \"\")\n ) {\n element[\"status\"] = \"Error\";\n element[\"userStatus\"] = false;\n element[\"message\"] = mobilePattern.test(element.Mobilenumber)\n ? \"\"\n : \"Invalid Mobile number\";\n }\n } else {\n if (!emailTest && !mobileTest) {\n element[\"status\"] = \"Error\";\n element[\"userStatus\"] = false;\n element[\"message\"] = \"Invalid Email id and Mobile number\";\n } else {\n element[\"status\"] = \"Error\";\n element[\"userStatus\"] = false;\n element[\"message\"] = emailPattern.test(element.Emailid)\n ? \"\"\n : \"Invalid Email id\";\n element[\"message\"] = mobilePattern.test(element.Mobilenumber)\n ? \"\"\n : \"Invalid Mobile number\";\n }\n }\n }\n });\n this.flag = true;\n const emailResponseData = await this.callUserCheckApi(\n emailIds,\n \"primaryEmail\"\n );\n const mobileResponseData = await this.callUserCheckApi(\n mobileNumbers,\n \"mobile\"\n );\n if (emailResponseData && mobileResponseData) {\n this.manageData(emailResponseData, mobileResponseData);\n } else {\n this.fileUploading = false;\n this.snackBar.openFromComponent(SnackbarComponent, {\n data: {\n message: \"Something went wrong! Please try again\",\n type: \"error\",\n },\n duration: 3000,\n panelClass: \"course-error-snackbar\",\n });\n }\n }\n }\n async callUserCheckApi(userData: any, key: any) {\n const request: any = {\n request: {\n filters: {},\n fields: [\n \"userId\",\n \"email\",\n \"firstName\",\n \"lastName\",\n \"phone\",\n \"rootOrgId\",\n \"channel\",\n \"roles\",\n \"profileDetails\",\n \"createdDate\",\n \"rootOrgName\",\n \"organisations\",\n \"username\",\n ],\n },\n };\n if (key === \"primaryEmail\") {\n request.request.filters = {\n ...request.request.filters,\n email: userData,\n };\n } else {\n request.request.filters = {\n ...request.request.filters,\n phone: userData,\n };\n }\n return this.accessControlService\n .validateUser(request)\n .toPromise()\n .then(async (res: any) => {\n if (res.result.response) {\n return await res.result.response;\n }\n })\n .catch((_err: any) => {})\n .finally(() => Promise.resolve());\n }\n\n manageData(userEmailData: any, userMobileData: any) {\n this.isSuccessUserlist = [];\n this.isErrorUserlist = [];\n const userEmailMap: any = {};\n const userEmailMapUserId: any = {};\n const userMobileMap: any = {};\n if (userEmailData.count) {\n userEmailData.content.forEach(async (e: any) => {\n if (e.profileDetails) {\n userEmailMap[\n e.profileDetails.personalDetails.primaryEmail.toLowerCase()\n ] = e;\n userEmailMapUserId[e.userId] = e;\n }\n });\n }\n if (userMobileData.count) {\n userMobileData.content.forEach(async (e: any) => {\n if (e.profileDetails) {\n userMobileMap[e.profileDetails.personalDetails.mobile] = e;\n }\n });\n }\n this.contacts.forEach(async (e: any) => {\n if (e.userStatus) {\n if (e.email && e.mobile) {\n const userData = userEmailMap[e.email.toLowerCase()];\n if (\n userData &&\n userData.profileDetails.personalDetails &&\n userData.profileDetails.personalDetails.mobile\n ) {\n if (\n String(userData.profileDetails.personalDetails.mobile) ===\n String(e.mobile)\n ) {\n e[\"userId\"] = userData.userId;\n e[\"ministry\"] = userData.rootOrgName;\n e[\"fullName\"] = userData.firstName || userData.firstname;\n } else {\n e[\"status\"] = \"Error\";\n e[\"userStatus\"] = false;\n e[\"message\"] = \"Given credentials are not matching\";\n }\n } else {\n e[\"status\"] = \"Error\";\n e[\"userStatus\"] = false;\n e[\"message\"] = \"Given credentials are not matching\";\n }\n } else if (e.email && userEmailMap[e.email.toLowerCase()]) {\n const userData = userEmailMap[e.email.toLowerCase()];\n e[\"mobile\"] = userData.profileDetails.personalDetails.mobile;\n\n e[\"userId\"] = userData.userId;\n e[\"ministry\"] = userData.rootOrgName;\n e[\"fullName\"] = userData.firstName || userData.firstname;\n } else if (e.mobile && userMobileMap[e.mobile]) {\n const userData = userMobileMap[e.mobile];\n e[\"email\"] = userData.profileDetails.personalDetails.primaryEmail;\n e[\"userId\"] = userData.userId;\n e[\"ministry\"] = userData.rootOrgName;\n e[\"fullName\"] = userData.firstName || userData.firstname;\n } else {\n e[\"status\"] = \"Error\";\n e[\"userStatus\"] = false;\n e[\"message\"] = \"Given credentials are not matching\";\n }\n }\n });\n this.fileUploading = false;\n this.isSuccessUserlist = this.contacts.filter((ele: any) => ele.userStatus);\n this.isErrorUserlist = this.contacts.filter((ele: any) => !ele.userStatus);\n\n // this.successUserData.emit(this.isSuccessUserlist);\n this.currrentFilterType = this.isSuccessUserlist.length\n ? \"success\"\n : \"error\";\n if (this.currrentFilterType === \"success\") {\n // this.displayedColumns = [\n // \"fullName\",\n // \"email\",\n // \"ministry\",\n // \"status\",\n // \"mobile\",\n // ];\n // this.dataSource = new MatTableDataSource<IUserElement>(\n // this.isSuccessUserlist\n // );\n } else if (this.currrentFilterType === \"error\") {\n // this.displayedColumns = [\"email\", \"status\", \"mobile\", \"message\"];\n // this.dataSource = new MatTableDataSource<IUserElement>(\n // this.isErrorUserlist\n // );\n }\n }\n\n onFilterChange(type: string) {\n this.currrentFilterType = type;\n }\n\n downloadErrorFile() {\n this.accessControlService.downloadFile(\n this.isErrorUserlist,\n \"userErrordata\"\n );\n }\n}\n","<div class=\"bulk-upload-wrapper\">\n <div class=\"flex gap-4 py-4 px-5 wrapper-border\">\n <div class=\"instructions-download py-4 px-5 border-dotted flex-1\">\n <div class=\"mb-6 text-style\">Open & follow these instruction</div>\n <div class=\"instructions-list\">\n <ul class=\"numbered-list\">\n <ng-container *ngFor=\"let item of bulkUploadConfig?.uploadInstructions\">\n <li>{{item}}</li>\n </ng-container>\n </ul>\n </div>\n <div class=\"download-sample mt-6\">\n <button mat-flat-button (click)=\"downloadSample()\"\n class=\"rounded-full px-4 py-2 font-bold text-sm mat-btn-outline cursor-pointer\">\n Download Sample File\n </button>\n </div>\n </div>\n\n <div class=\"bulk-upload-select py-4 px-5 border-dotted flex-1\">\n <div class=\"right_upload_inner flex flex-col items-center justify-center\" wsAuthDragDrop\n (fileDropped)=\"onDrop($event)\">\n <div class=\"flex flex-row items-center justify-center margin-bottom-s\">\n <mat-icon class=\"svg-ico\" svgIcon=\"excel-sheet\"></mat-icon>\n </div>\n <div class=\"items-center justify-center flex flex-col\">\n <a class=\"new-color cursor-pointer text-sm font-bold mb-1 mt-7\" (click)=\"fileInput.click()\">Browse\n files</a>\n <p class=\"mt-2 text-sm\">Or</p>\n <p class=\"mt-2 ws-mat-black60-text text-base\">Drag file to upload</p>\n <p class=\"text-xs ws-mat-black87-text margin-remove\">Max size: 100 MB</p>\n <p class=\"text-xs ws-mat-black60-text margin-remove\">Supported file types: CSV</p>\n </div>\n <input type=\"file\" #fileInput class=\"inputfile\" accept=\".csv\"\n (change)=\"onDrop($event.target.files[0]); fileInput.value = null\" />\n <div *ngIf=\"file\" class=\"flex flex-middle justify-center flex-column position-relative pt-5 px-5\">\n <mat-icon class=\"ws-mat-primary-text\" svgIcon=\"excel-sheet\">\n </mat-icon>\n <p class=\"margin-left-xs mat-h3 font-weight-500 margin-remove-bottom break\">\n <ng-container *ngIf=\"file; else elseBlock\">\n <span class=\"flex-wrap\"> {{ file?.name }}</span>\n </ng-container>\n <ng-template #elseBlock>\n <span i18n>No file uploaded</span>\n </ng-template>\n </p>\n\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"filter-by-select my-4\">\n <div class=\"flex gap-4 items-center\">\n <div class=\"text-title\">Filter By</div>\n <div class=\"flex gap-2\">\n <button mat-flat-button (click)=\"onFilterChange('success')\"\n [ngClass]=\"currrentFilterType === 'success' ? 'new-bg-color text-white mat-btn-flat': 'mat-btn-outline' \"\n class=\"rounded-full px-4 py-2 font-bold text-sm cursor-pointer \">\n Success\n </button>\n <button (click)=\"onFilterChange('error')\" mat-flat-button\n [ngClass]=\"currrentFilterType === 'error' ? 'new-bg-color text-white mat-btn-flat': 'mat-btn-outline' \"\n class=\"rounded-full px-4 py-2 font-bold text-sm cursor-pointer\">\n Error\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"list-table-bulk-upload\">\n <ng-container *ngIf=\"currrentFilterType === 'success'\">\n <div class=\"flex items-center gap-2 selection-count mb-4 p-2\">\n <span class=\"\">{{isSuccessUserlist.length}}</span>\n <span class=\"text-sm font-normal\">Items Selected</span>\n </div>\n <sb-uic-list-table [data]=\"isSuccessUserlist\" [count]=\"1\"\n [initialPaginationSize]=\"bulkUploadConfig['bulkUploadTable']?.initialPaginationSize\"\n [tableConfig]=\"bulkUploadConfig['bulkUploadTable']\"\n [bulkUploadEntriesCount]=\"{totalCount: isSuccessUserlist?.length + isErrorUserlist?.length, success: isSuccessUserlist?.length}\">\n </sb-uic-list-table>\n </ng-container>\n\n <ng-container *ngIf=\"currrentFilterType === 'error'\">\n <div class=\"wrapper-border rounded-sm p-4\">\n <div class=\"log-history-text\">Log History</div>\n </div>\n <div class=\"information-list py-4 px-6\">\n <!-- <ng-container *ngFor=\"let item of isErrorUserlist\"> -->\n <ng-container>\n <div class=\"rounded-lg wrapper-border py-5 px-4 mb-4\">\n <div class=\"flex items-center justify-between\">\n <div class=\"error-log-title flex gap-2 items-center\">\n <span class=\"text-title text-dark\">File Information</span>\n <img src=\"/assets/icons/icon-wrapper.svg\" alt=\"tooltip-icon\">\n </div>\n <button mat-flat-button (click)=\"downloadErrorFile()\"\n class=\"rounded-full px-4 py-2 font-bold text-sm mat-btn-outline cursor-pointer\">\n <mat-icon class=\"new-color\">file_download</mat-icon>\n Download error log\n </button>\n </div>\n <div class=\"my-4 meta-info\">\n <div class=\"flex gap-2 items-center\">\n <span class=\"text-title text-dark\">{{fileName}}</span>\n <img src=\"/assets/icons/error-icon.svg\" alt=\"error-icon\">\n </div>\n <div class=\"text-style text-dark\">Theress an error occurred while uploading this file.</div>\n </div>\n <div class=\"flex gap-x-6 gap-y-4 falied-records-info\">\n <div class=\"flex flex-column gap-4 flex-grow-1\">\n <div>\n <p class=\"text-sm text-gray-500\">Name</p>\n <p class=\"font-medium break-all text-dark\">\n {{fileName}}</p>\n </div>\n <div>\n <p class=\"text-sm text-gray-500\">Total Records</p>\n <p class=\"font-medium text-dark\">{{isSuccessUserlist?.length +\n isErrorUserlist?.length}}</p>\n </div>\n <div>\n <p class=\"text-sm text-gray-500 mt-2\">Failed Records</p>\n <p class=\"font-medium text-dark\">{{isErrorUserlist?.length}}</p>\n </div>\n </div>\n <div class=\"flex flex-column gap-4 flex-grow-1\">\n <div>\n <p class=\"text-sm text-gray-500\">Status</p>\n <p class=\"text-red-600 font-normal\">FAILED</p>\n </div>\n <div>\n <p class=\"text-sm text-gray-500\">Created On</p>\n <p class=\"font-medium text-dark\">{{currentDate | date: 'medium'}}</p>\n </div>\n <div>\n <p class=\"text-sm text-gray-500 mt-2\">Updated On</p>\n <p class=\"font-medium text-dark\">{{currentDate | date: 'medium'}}</p>\n </div>\n </div>\n <div class=\"flex flex-column gap-4 flex-grow-1\">\n <div>\n <p class=\"text-sm text-gray-500\">Success Records</p>\n <p class=\"font-medium text-dark\">{{isSuccessUserlist?.length}}</p>\n </div>\n\n </div>\n </div>\n\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n</div>","import { Component, inject, OnInit } from \"@angular/core\";\nimport { FormControl } from \"@angular/forms\";\nimport { MAT_DIALOG_DATA, MatDialogRef } from \"@angular/material/dialog\";\nimport { AccessControlService } from \"../../../_services/access-control.service\";\nimport { MatLegacySnackBar as MatSnackBar } from \"@angular/material/legacy-snack-bar\";\nimport { PageChangeEmitter } from \"../../../_models/pagination.model\";\nimport { NsAccessControlConfig } from \"../../../_models/access-control.model\";\nimport { SnackbarComponent } from \"../../../components/snackbar/snackbar.component\";\n\n@Component({\n selector: \"sb-uic-invite-users\",\n templateUrl: \"./invite-users.component.html\",\n styleUrls: [\"./invite-users.component.scss\"]\n})\nexport class InviteUsersComponent implements OnInit {\n public readonly data = inject<any>(MAT_DIALOG_DATA);\n\n searchControl = new FormControl(\"\");\n filterValue: NsAccessControlConfig.IManageSelectionType = \"add_karmayogis\";\n\n usersList: any[] = [];\n totalUsers: number = 0;\n\n holdSelectedUsers: any[] = [];\n finalSelectedUsers: any[] = [];\n usersFinalList: any[] = [];\n\n usersTableConfig!: NsAccessControlConfig.ITableConfig;\n usersLoading = false;\n activeTab = 0;\n constructor(\n public dialogRef: MatDialogRef<InviteUsersComponent>,\n private accessControlService: AccessControlService,\n private snackbar: MatSnackBar\n ) {}\n\n ngOnInit(): void {\n this.usersTableConfig = this.accessControlService.accessControlConfig().usersTableConfig;\n if (this.data && this.data.selected) {\n if (!this.isArrayOfObjects(this.data?.selected)) {\n this.getUsersList(\"\", 5, 0, this.data?.selected);\n }\n }\n }\n\n onClose(): void {\n this.dialogRef.close();\n }\n\n search(): void {\n this.holdSelectedUsers = [];\n this.getUsersList(this.searchControl.value);\n }\n\n onFilterChange(event: any): void {\n this.filterValue = event.value;\n }\n\n getUsersList(query: string, limit?: number, offset?: number, userIds?: string[]): void {\n this.usersLoading = true;\n this.accessControlService.fetchUserList(query, { limit: limit, offset: offset }, userIds).subscribe({\n next: response => {\n if (response?.result && response?.result?.response?.content) {\n this.usersList = response.result.response.content;\n this.totalUsers = response.result.response.count;\n if (userIds.length) {\n this.finalSelectedUsers = response.result.response.content;\n }\n } else {\n this.usersList = [];\n this.totalUsers = 0;\n }\n },\n complete: () => {\n this.usersLoading = false;\n }\n });\n }\n\n onSelectingUser(event: any): void {\n this.holdSelectedUsers = event;\n }\n\n selectUsers(): void {\n this.finalSelectedUsers = this.holdSelectedUsers;\n\n this.snackbar.openFromComponent(SnackbarComponent, {\n data: { message: `Users added to Selected tab`, type: \"success\" },\n duration: 3000,\n panelClass: \"course-success-snackbar\"\n });\n this.activeTab = 1;\n }\n\n onPageChange(event: PageChangeEmitter): void {\n const limit = event.limit;\n const offset = (event.currentPage - 1) * limit;\n this.getUsersList(this.searchControl.value, limit, offset);\n }\n\n removedUserData(event: any): void {\n this.finalSelectedUsers = [...event.remainingList];\n this.holdSelectedUsers = this.finalSelectedUsers;\n }\n\n onSelectingUserToApply(users: any): void {\n this.usersFinalList = users;\n }\n\n applySelections(): void {\n this.dialogRef.close({\n rule: this.data.rule,\n condition: this.data.condition,\n selected: this.usersFinalList\n });\n }\n\n isArrayOfObjects(arr: any): boolean {\n return Array.isArray(arr) && arr.every(item => typeof item === \"object\" && item !== null && !Array.isArray(item));\n }\n}\n","<div class=\"flex justify-between dialog-heading items-center\">\n <h2 mat-dialog-title class=\"mb-0\">Users</h2>\n <button mat-icon-button class=\"close-button\" (click)=\"onClose()\">\n <mat-icon>close</mat-icon>\n </button>\n</div>\n\n<div mat-dialog-content>\n <div class=\"\">\n <!-- Filter Options -->\n <div class=\"filter-options\">\n <mat-radio-group [(ngModel)]=\"filterValue\" aria-label=\"Filter options\" (change)=\"onFilterChange($event)\">\n <mat-radio-button class=\"text-dark\" value=\"add_karmayogis\">Add Karmayogis</mat-radio-button>\n <mat-radio-button class=\"text-dark\" value=\"bulk_upload_karmayogis\">Bulk Upload Karmayogis</mat-radio-button>\n </mat-radio-group>\n </div>\n </div>\n\n <ng-container *ngIf=\"filterValue === 'add_karmayogis'\">\n <!-- Search Box -->\n <div class=\"search-container flex items-center gap-4 mb-4\">\n <div class=\"mat-full-radius flex-grow\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-icon matPrefix>search</mat-icon>\n <input matInput placeholder=\"Search by Name, Email and Phone Number\" [formControl]=\"searchControl\" (keyup.enter)=\"search()\" />\n </mat-form-field>\n </div>\n <button mat-flat-button class=\"flex items-center rounded-full new-bg-color font-bold text-sm text-white search-button\" (click)=\"search()\">Search</button>\n </div>\n\n <div class=\"contents-wrapper\">\n <ng-container>\n <mat-tab-group mat-stretch-tabs=\"false\" mat-align-tabs=\"start\" [(selectedIndex)]=\"activeTab\" dynamicHeight>\n <mat-tab label=\"All Learners\" class=\"mb-3\">\n <ng-container *ngIf=\"usersLoading\">\n <div class=\"spinner-loader flex items-center justify-center\">\n <mat-spinner></mat-spinner>\n </div>\n </ng-container>\n <div [ngClass]=\"{ hidden: usersLoading }\">\n <ng-container *ngIf=\"usersList && usersList.length > 0; else noData\">\n <sb-uic-list-table\n [data]=\"usersList\"\n [count]=\"totalUsers\"\n [initialPaginationSize]=\"usersTableConfig['allLearners']?.initialPaginationSize\"\n [tableConfig]=\"usersTableConfig['allLearners']\"\n (selectedDataChange)=\"onSelectingUser($event)\"\n (pageChange)=\"onPageChange($event)\"\n [selected]=\"finalSelectedUsers\"></sb-uic-list-table>\n </ng-container>\n </div>\n </mat-tab>\n <mat-tab label=\" Selected Users\" class=\"mb-3\">\n <ng-container *ngIf=\"usersLoading\">\n <div class=\"spinner-loader flex items-center justify-center\">\n <mat-spinner></mat-spinner>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!usersLoading\">\n <ng-container *ngIf=\"finalSelectedUsers && finalSelectedUsers.length > 0; else noData\">\n <sb-uic-list-table\n [data]=\"finalSelectedUsers\"\n [count]=\"finalSelectedUsers.length || 0\"\n [initialPaginationSize]=\"usersTableConfig['selectedUsers']?.initialPaginationSize\"\n [tableConfig]=\"usersTableConfig['selectedUsers']\"\n (selectedDataChange)=\"onSelectingUserToApply($event)\"\n (removeSelectedData)=\"removedUserData($event)\"\n [selected]=\"usersFinalList\"></sb-uic-list-table>\n </ng-container>\n </ng-container>\n </mat-tab>\n </mat-tab-group>\n </ng-container>\n\n <ng-template #noData>\n <div class=\"no-data p-4 flex flex-column items-center justify-center\">\n <img src=\"/assets/icons/no-events.png\" alt=\"no-data\" />\n <span class=\"font-bold\">No information to display yet</span>\n </div>\n </ng-template>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"filterValue === 'bulk_upload_karmayogis'\">\n <sb-uic-bulk-upload-karmayogi></sb-uic-bulk-upload-karmayogi>\n </ng-container>\n</div>\n\n<mat-dialog-actions>\n <ng-container *ngIf=\"filterValue === 'add_karmayogis'\">\n <ng-container *ngIf=\"activeTab === 0 && usersList.length\">\n <button\n mat-flat-button\n (click)=\"selectUsers()\"\n class=\"flex items-center justify-center rounded-full new-bg-color font-bold text-sm text-white w-full mt-2\"\n [disabled]=\"holdSelectedUsers?.length === 0\">\n Select Users\n </button>\n </ng-container>\n <ng-container *ngIf=\"activeTab === 1 && usersFinalList.length\">\n <button\n mat-flat-button\n (click)=\"applySelections()\"\n class=\"flex items-center justify-center rounded-full new-bg-color font-bold text-sm text-white w-full mt-2\">\n Apply\n </button>\n </ng-container>\n </ng-container>\n</mat-dialog-actions>\n","export namespace NsAccessControlConfig {\n export interface IAccessControlConfig {\n accessControlCriteriaSelection: IAccessControlCriteriaSelection;\n usersTableConfig: ITableConfig;\n bulkUploadKarmayogi: IBulkUploadKarmayogi;\n accessControlGuide: IAccessControlGuide;\n }\n export interface IAccessControlCriteriaSelection {\n optionsEntity: IOptionsEntity[];\n optionsConditions: IOptionsCondition[];\n organizationRadioSelection: ISelectionOption[];\n designationRadioSelection: ISelectionOption[];\n servicesRadioSelection: ISelectionOption[];\n groupsOptions: string[];\n verificationStatus: ISelectionOption[];\n accessTypes: { name: string; value: string; tooltip: string }[];\n }\n\n export interface IOptionsEntity {\n value: string;\n label: string;\n disabled: boolean;\n }\n\n export interface IOptionsCondition {\n value: string;\n label: string;\n }\n\n export interface ITableConfig {\n allLearners: ITableParameters;\n selectedUsers: ITableParameters;\n bulkUploadTable: ITableParameters;\n }\n\n export interface ITableParameters {\n displayedColumns: string[];\n type: string;\n initialPaginationSize: number;\n initialPaginationSizeOptions: number[];\n canShowPagination: boolean;\n canShowMasterSelect: boolean;\n canShowRefreshBtn: boolean;\n canShowDeleteBtn: boolean;\n canShowSelectedItems: boolean;\n canSortColumn: boolean;\n }\n export type IUserTableType = \"allLearners\" | \"selectedUsers\" | \"bulkUploadTable\";\n\n export type IManageSelectionType = \"add_karmayogis\" | \"bulk_upload_karmayogis\";\n\n export interface IBulkUploadKarmayogi {\n uploadInstructions: string[];\n downloadSampleFile: {\n path: string;\n fileName: string;\n };\n bulkUploadTable: ITableParameters;\n }\n\n export enum SelectionType {\n Users = \"user\",\n Organizations = \"rootOrgId\",\n Group = \"group\",\n Designation = \"designation\",\n VerificationStatus = \"profilestatus\",\n Cadre = \"Cadre\",\n Service = \"service\",\n Batch = \"batch\"\n }\n\n export interface ISelectionOption {\n value: string;\n label: string;\n }\n\n export enum IActions {\n Confirm = \"confirm\",\n Reject = \"reject\"\n }\n\n export enum IAccessTypes {\n Public = \"public\",\n Custom = \"custom\"\n }\n\n export type ITypeAccessType = \"public\" | \"custom\";\n export interface IAccessControlGuide {\n summaryText: string;\n canShowSummaryTab: boolean;\n canShowTranscriptTab: boolean;\n }\n\n export enum IAccessSetting {\n ALL_USERS = \"allUsers\",\n MDO_SPECIFIC = \"mdoSpecific\",\n CUSTOME_USER = \"customeUser\"\n }\n}\n\nexport interface IUserGroupRequest {\n contentId: string;\n accessControl: {\n version: number;\n userGroups: {\n userGroupId: string;\n userGroupName: string;\n userGroupCriteriaList: {\n userGroupKey: string;\n userGroupValue: string[];\n }[];\n }[];\n };\n}\n","export const BATCH_RANGES = [\n { label: \"1960-1990\", start: 1960, end: 1990 },\n { label: \"1991-2020\", start: 1991, end: 2020 },\n { label: \"2021-2025\", start: 2021, end: 2025 }\n];\n","import { Component, inject, OnInit, OnDestroy } from \"@angular/core\";\nimport { AccessControlService } from \"../../../_services/access-control.service\";\nimport { MAT_DIALOG_DATA, MatDialogRef } from \"@angular/material/dialog\";\nimport { FormControl } from \"@angular/forms\";\nimport { BATCH_RANGES } from \"../../../_constants/app.constants\";\nimport { NsAccessControlConfig } from \"../../../_models/access-control.model\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\n@Component({\n selector: \"sb-uic-entity-selections\",\n templateUrl: \"./entity-selections.component.html\",\n styleUrls: [\"./entity-selections.component.scss\"]\n})\nexport class EntitySelectionsComponent implements OnInit, OnDestroy {\n private destroy$ = new Subject<void>();\n isLoading = false;\n searchControl = new FormControl(\"\");\n filterValue: \"all\" | \"selected\" | \"notSelected\" = \"all\";\n alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ#\".split(\"\");\n\n dataList: any[] = [];\n\n selectedData: number[] = [];\n groupedEntityData: { [key: string]: any[] } = {};\n selectionType = \"\";\n selectionTypeEnum = NsAccessControlConfig.SelectionType;\n radioSelections: { value: string; label: string }[] = [];\n batchRanges: any;\n selectedCharacterRange: string;\n accessControlCriteriaSelection!: NsAccessControlConfig.IAccessControlCriteriaSelection;\n\n public readonly data = inject<{ rule: any; condition: any; selected: any[] }>(MAT_DIALOG_DATA);\n constructor(public dialogRef: MatDialogRef<EntitySelectionsComponent>, private accessControlService: AccessControlService) {}\n\n ngOnInit(): void {\n // If data was passed to the dialog, initialize selections\n this.accessControlCriteriaSelection = this.accessControlService.accessControlConfig().accessControlCriteriaSelection;\n if (this.data) {\n this.selectionType = this.data?.condition?.entity;\n }\n if (this.data && this.data.selected) {\n this.selectedData = this.data.selected;\n }\n\n // Subscribe to search control changes\n this.searchControl.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((query: string) => {\n if (this.selectionType) {\n switch (this.selectionType) {\n case this.selectionTypeEnum.Service:\n this.getServicesList(query);\n break;\n case this.selectionTypeEnum.Cadre:\n this.getCadreList(query);\n break;\n case this.selectionTypeEnum.Batch:\n this.getBatchList(query);\n break;\n }\n }\n });\n\n this.initializeDisplay();\n }\n\n initializeDisplay(): void {\n switch (this.selectionType) {\n case NsAccessControlConfig.SelectionType.Organizations:\n this.radioSelections = this.accessControlCriteriaSelection.organizationRadioSelection;\n break;\n case NsAccessControlConfig.SelectionType.Designation:\n const selectionIds = this.data?.rule?.conditions?.find(\n (c: any) => c.entity === NsAccessControlConfig.SelectionType.Organizations\n )?.selections;\n if (selectionIds?.length) {\n this.getDesignationsList(\"\");\n }\n this.radioSelections = this.accessControlCriteriaSelection.designationRadioSelection;\n break;\n case NsAccessControlConfig.SelectionType.Service:\n this.radioSelections = this.accessControlCriteriaSelection.servicesRadioSelection;\n this.getServicesList(this.searchControl.value);\n break;\n case NsAccessControlConfig.SelectionType.Cadre:\n this.radioSelections = [{ value: \"all\", label: \"All\" }];\n this.getCadreList(this.searchControl.value);\n break;\n case NsAccessControlConfig.SelectionType.Batch:\n this.radioSelections = [{ value: \"all\", label: \"All\" }];\n this.getBatchList(this.searchControl.value);\n break;\n case NsAccessControlConfig.SelectionType.Group:\n this.getGroupList();\n break;\n case NsAccessControlConfig.SelectionType.VerificationStatus:\n this.getVerificationStatus();\n break;\n }\n }\n\n onClose(): void {\n this.dialogRef.close();\n }\n\n private getSelectionValue(item: any): any {\n if (typeof item !== \"object\" || item === null) {\n return item;\n } else if (\n this.selectionType === NsAccessControlConfig.SelectionType.Cadre ||\n this.selectionType === NsAccessControlConfig.SelectionType.Service ||\n this.selectionType === NsAccessControlConfig.SelectionType.Designation\n ) {\n return item?.name;\n }\n\n return item?.id || item?.identifier || item;\n }\n\n isSelected(item: any): boolean {\n const value = this.getSelectionValue(item);\n return this.selectedData.includes(value);\n }\n\n toggleSelection(item: any): void {\n const value = this.getSelectionValue(item);\n const index = this.selectedData.indexOf(value);\n\n if (index > -1) {\n this.selectedData.splice(index, 1);\n } else {\n this.selectedData.push(value);\n }\n }\n\n onFilterChange(event: any): void {\n this.filterValue = event.value;\n this.getFilteredEntityGrouped();\n }\n\n search(): void {\n switch (this.selectionType) {\n case NsAccessControlConfig.SelectionType.Designation:\n this.getDesignationsList(this.searchControl.value);\n break;\n case NsAccessControlConfig.SelectionType.Organizations:\n this.getOrganisationsList(this.searchControl.value);\n break;\n case NsAccessControlConfig.SelectionType.Service:\n this.getServicesList(this.searchControl.value);\n break;\n case NsAccessControlConfig.SelectionType.Cadre:\n this.getCadreList(this.searchControl.value);\n break;\n case NsAccessControlConfig.SelectionType.Batch:\n this.getCadreList(this.searchControl.value);\n break;\n }\n }\n\n getFilteredEntityGrouped(): void {\n let filtered = this.dataList;\n\n // Filter by radio selection only\n if (this.filterValue === \"selected\") {\n filtered = filtered.filter(org => this.isSelected(org));\n } else if (this.filterValue === \"notSelected\") {\n filtered = filtered.filter(org => !this.isSelected(org));\n }\n\n // For batch, group by range and chunk each range\n if (this.selectionType === this.selectionTypeEnum.Batch) {\n const batchGrouped = this.groupBatchByRange(filtered);\n const chunked: { [key: string]: any[][] } = {};\n for (const key in batchGrouped) {\n chunked[key] = this.chunkArray(batchGrouped[key], 8);\n }\n this.groupedEntityData = chunked;\n return;\n }\n\n // For all other types, group by letter and chunk each group\n const grouped: { [key: string]: any[][] } = {};\n const temp: { [key: string]: any[] } = {};\n for (const org of filtered) {\n let entity = org?.channel || org?.name || org?.designation;\n let letter = entity?.charAt(0)?.toUpperCase() || \"#\";\n if (!/^[A-Z]$/.test(letter)) {\n letter = \"#\";\n }\n if (!temp[letter]) temp[letter] = [];\n temp[letter].push(org);\n }\n for (const letter in temp) {\n grouped[letter] = this.chunkArray(temp[letter], 7);\n }\n this.groupedEntityData = grouped;\n }\n\n scrollToSection(letter: string) {\n const section = document.getElementById(`section-${letter}`);\n if (section) {\n this.selectedCharacterRange = letter;\n section.scrollIntoView({ behavior: \"smooth\", inline: \"start\" });\n }\n }\n\n private updateAlphabet(): void {\n const chars = new Set<string>();\n\n for (const data of this.dataList) {\n let letter = \"#\";\n\n const value = data?.channel || data?.name || data?.designation;\n letter = value.charAt(0)?.toUpperCase() || \"#\";\n\n if (!/^[A-Z]$/.test(letter)) {\n letter = \"#\";\n }\n\n chars.add(letter);\n }\n\n const sorted = Array.from(chars)\n .filter(c => c !== \"#\")\n .sort();\n if (chars.has(\"#\")) sorted.push(\"#\");\n\n this.alphabet = sorted;\n }\n\n get checkIfData(): boolean {\n return (\n (this.groupedEntityData && Object.keys(this.groupedEntityData).length > 0) ||\n (this.selectionType === NsAccessControlConfig.SelectionType.Group && this.dataList.length > 0) ||\n (this.selectionType === NsAccessControlConfig.SelectionType.VerificationStatus && this.dataList.length > 0)\n );\n }\n\n getOrganisationsList(query: string): void {\n this.isLoading = true;\n this.accessControlService.fetchOrgList(query).subscribe({\n next: response => {\n if (response?.result && response?.result?.response?.content) {\n this.dataList = response.result.response.content;\n this.updateAlphabet();\n this.getFilteredEntityGrouped();\n } else {\n this.dataList = [];\n this.alphabet = [];\n }\n },\n complete: () => {\n this.isLoading = false;\n }\n });\n }\n\n getDesignationsList(query: string): void {\n this.isLoading = true;\n const selectionIds = this.data?.rule?.conditions?.find((c: any) => c.entity === NsAccessControlConfig.SelectionType.Organizations)?.selections;\n if (selectionIds?.length) {\n const categories = selectionIds.map((ele: string) => `${ele}_odcs_designation`);\n this.accessControlService\n .fetchDesignationsWithOrg(categories, query)\n .pipe(takeUntil(this.destroy$))\n .subscribe({\n next: response => {\n if (response?.result && response?.result?.Term) {\n this.dataList = response?.result?.Term;\n this.updateAlphabet();\n this.getFilteredEntityGrouped();\n } else {\n this.dataList = [];\n this.alphabet = [];\n }\n },\n complete: () => {\n this.isLoading = false;\n }\n });\n } else {\n this.accessControlService\n .fetchDesignation(query)\n .pipe(takeUntil(this.destroy$))\n .subscribe({\n next: response => {\n if (response?.result && response?.result?.result?.data) {\n this.dataList = response?.result?.result?.data;\n this.updateAlphabet();\n this.getFilteredEntityGrouped();\n } else {\n this.dataList = [];\n this.alphabet = [];\n }\n },\n complete: () => {\n this.isLoading = false;\n }\n });\n }\n }\n\n getServicesList(query: string): void {\n const baseList = this.accessControlService.holdServiceCadrebatch().service;\n this.dataList = query ? baseList.filter(service => service.name?.toLowerCase().includes(query.toLowerCase())) : baseList;\n this.updateAlphabet();\n this.getFilteredEntityGrouped();\n }\n\n getCadreList(query: string): void {\n const baseList = this.accessControlService.holdServiceCadrebatch().cadre;\n this.dataList = query ? baseList.filter(cadre => cadre.name?.toLowerCase().includes(query.toLowerCase())) : baseList;\n this.updateAlphabet();\n this.getFilteredEntityGrouped();\n }\n\n getBatchList(query: string): void {\n const baseList = this.accessControlService.holdServiceCadrebatch().batch;\n this.dataList = query ? baseList.filter(batch => batch.toString().includes(query)) : baseList;\n this.updateBatchRanges();\n this.getFilteredEntityGrouped();\n }\n\n getGroupList(): void {\n this.isLoading = true;\n this.accessControlService\n .fetchGroupsList()\n .pipe(takeUntil(this.destroy$))\n .subscribe({\n next: (response: any) => {\n if (response?.result && response?.result?.response) {\n this.dataList = response.result.response;\n }\n },\n complete: () => {\n this.isLoading = false;\n }\n });\n }\n\n getVerificationStatus(): void {\n this.dataList = this.accessControlCriteriaSelection.verificationStatus;\n }\n\n updateBatchRanges(): void {\n this.batchRanges = BATCH_RANGES.map(range => range.label);\n }\n\n groupBatchByRange(batchList: number[]) {\n const grouped: { [key: string]: number[] } = {};\n for (const range of BATCH_RANGES) {\n grouped[range.label] = batchList.filter(year => year >= range.start && year <= range.end);\n }\n return grouped;\n }\n\n getModalTitle(): string {\n switch (this.selectionType) {\n case NsAccessControlConfig.SelectionType.Designation:\n return \"Select Designation\";\n case NsAccessControlConfig.SelectionType.Organizations:\n return \"Select Organisation\";\n case NsAccessControlConfig.SelectionType.Service:\n return \"Select Services\";\n case NsAccessControlConfig.SelectionType.Cadre:\n return \"Select Cadre\";\n case NsAccessControlConfig.SelectionType.Batch:\n return \"Select Batch\";\n case NsAccessControlConfig.SelectionType.Group:\n return \"Select Group\";\n case NsAccessControlConfig.SelectionType.VerificationStatus:\n return \"Verification Status\";\n }\n return \"\";\n }\n\n applySelections(): void {\n this.dialogRef.close({\n rule: this.data.rule,\n condition: this.data.condition,\n selected: this.selectedData\n });\n }\n\n chunkArray<T>(array: T[], chunkSize: number): T[][] {\n const results: T[][] = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n results.push(array.slice(i, i + chunkSize));\n }\n return results;\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<div class=\"flex justify-between dialog-heading items-center\">\n <h2 mat-dialog-title class=\"mb-0\">{{ getModalTitle() }}</h2>\n <button mat-icon-button class=\"close-button\" (click)=\"onClose()\">\n <mat-icon>close</mat-icon>\n </button>\n</div>\n\n<div mat-dialog-content>\n <ng-container\n *ngIf=\"\n selectionType === selectionTypeEnum.Designation ||\n selectionType === selectionTypeEnum.Service ||\n selectionType === selectionTypeEnum.Cadre ||\n selectionType === selectionTypeEnum.Batch ||\n selectionType === selectionTypeEnum.Organizations\n \">\n <!-- Search Box -->\n <div class=\"search-container flex items-center gap-4\">\n <div class=\"mat-full-radius flex-grow\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-icon matPrefix>search</mat-icon>\n <input matInput placeholder=\"Type here to search...\" [formControl]=\"searchControl\" (keyup.enter)=\"search()\" />\n </mat-form-field>\n </div>\n <button\n mat-flat-button\n [disabled]=\"!searchControl.value\"\n class=\"flex items-center rounded-full new-bg-color font-bold text-sm text-white search-button\"\n (click)=\"search()\">\n Search\n </button>\n </div>\n\n <div class=\"p-4 mt-2\">\n <!-- Filter Options -->\n <ng-container *ngIf=\"dataList.length && this.selectionType !== selectionTypeEnum.Cadre && this.selectionType !== selectionTypeEnum.Batch\">\n <div class=\"filter-options\">\n <mat-radio-group [(ngModel)]=\"filterValue\" aria-label=\"Filter options\" (change)=\"onFilterChange($event)\">\n <ng-container *ngFor=\"let item of radioSelections\">\n <mat-radio-button [value]=\"item?.value\">{{ item?.label }}</mat-radio-button>\n </ng-container>\n </mat-radio-group>\n </div>\n </ng-container>\n\n <div class=\"org-container\">\n <!-- A-Z Filter Bar -->\n <ng-container *ngIf=\"isLoading\">\n <div class=\"spinner-loader flex items-center justify-center\">\n <mat-spinner></mat-spinner>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!isLoading\">\n <ng-container *ngIf=\"checkIfData\">\n <div class=\"alphabet-filter\" *ngIf=\"this.selectionType !== selectionTypeEnum.Batch\">\n <ng-container *ngFor=\"let letter of alphabet; let i = index; let last = last\">\n <button\n mat-button\n class=\"letter-button\"\n (click)=\"scrollToSection(letter)\"\n [ngClass]=\"{\n 'active-range-btn': selectedCharacterRange === letter\n }\">\n {{ letter }}\n </button>\n <div class=\"divider-apl\" *ngIf=\"!last\"></div>\n </ng-container>\n </div>\n <div class=\"alphabet-filter\" *ngIf=\"this.selectionType === selectionTypeEnum.Batch\">\n <ng-container *ngFor=\"let letter of batchRanges; let i = index; let last = last\">\n <button\n mat-button\n class=\"range-button px-4\"\n (click)=\"scrollToSection(letter)\"\n [ngClass]=\"{\n 'active-range-btn': selectedCharacterRange === letter\n }\">\n {{ letter }}\n </button>\n <div class=\"divider-apl\" *ngIf=\"!last\"></div>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"checkIfData; else noData\">\n <div class=\"flex overflow-x-auto\">\n <ng-container *ngFor=\"let group of groupedEntityData | keyvalue\">\n <div class=\"org-column p-2 mr-4\" [attr.id]=\"'section-' + group.key\">\n <div class=\"org-list\">\n <div class=\"batch-range-columns\">\n <ng-container *ngIf=\"group.value && group.value.length\">\n <ng-container *ngFor=\"let column of group.value\">\n <div class=\"batch-column\">\n <div *ngFor=\"let entity of column\" class=\"org-card py-2\">\n <ng-container\n *ngIf=\"\n selectionType === selectionTypeEnum.Designation ||\n selectionType === selectionTypeEnum.Organizations ||\n selectionType === selectionTypeEnum.Service ||\n selectionType === selectionTypeEnum.Cadre\n \">\n <mat-checkbox\n [checked]=\"isSelected(entity)\"\n (change)=\"toggleSelection(entity)\"\n [title]=\"entity?.name || entity?.designation || entity?.channel\">\n {{ entity?.name || entity?.designation || entity?.channel }}\n </mat-checkbox>\n </ng-container>\n <ng-container *ngIf=\"selectionType === selectionTypeEnum.Batch\">\n <mat-checkbox [checked]=\"isSelected(entity)\" (change)=\"toggleSelection(entity)\" [title]=\"entity\">\n {{ entity }}\n </mat-checkbox>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-template #noData>\n <div class=\"no-data p-4 flex flex-column items-center justify-center\">\n <img src=\"/assets/icons/no-events.png\" alt=\"no-data\" />\n <span class=\"font-bold\">No information to display yet</span>\n </div>\n </ng-template>\n </ng-container>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"selectionType === selectionTypeEnum.Group\">\n <ng-container *ngIf=\"isLoading\">\n <div class=\"spinner-loader flex items-center justify-center\">\n <mat-spinner></mat-spinner>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!isLoading\">\n <div class=\"flex gap-16 items-center p-4 options-checkbox\">\n <ng-container *ngFor=\"let group of dataList\">\n <mat-checkbox [checked]=\"isSelected(group)\" (change)=\"toggleSelection(group)\" [title]=\"group\">\n {{ group }}\n </mat-checkbox>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"selectionType === selectionTypeEnum.VerificationStatus\">\n <div class=\"flex gap-16 items-center p-4 options-checkbox\">\n <ng-container *ngFor=\"let group of dataList\">\n <mat-checkbox [checked]=\"isSelected(group)\" (change)=\"toggleSelection(group)\" [title]=\"group\">\n {{ group }}\n </mat-checkbox>\n </ng-container>\n </div>\n </ng-container>\n</div>\n\n<mat-dialog-actions>\n <ng-container *ngIf=\"checkIfData\">\n <div class=\"flex gap-4 items-center ml-auto mr-1 apply-button-container my-2\">\n <div class=\"text-xs\">{{ selectedData.length }} items selected</div>\n <button\n mat-flat-button\n [disabled]=\"selectedData.length === 0\"\n (click)=\"applySelections()\"\n class=\"flex items-center justify-center rounded-full new-bg-color font-bold text-sm text-white mt-2\">\n Apply\n </button>\n </div>\n </ng-container>\n</mat-dialog-actions>\n","import { Component, inject } from \"@angular/core\";\nimport { MAT_DIALOG_DATA, MatDialogRef } from \"@angular/material/dialog\";\nimport { NsAccessControlConfig } from \"../../../_models/access-control.model\";\n\n@Component({\n selector: \"sb-uic-confirm-dialog\",\n templateUrl: \"./confirm-dialog.component.html\",\n styleUrls: [\"./confirm-dialog.component.scss\"]\n})\nexport class ConfirmDialogComponent {\n public readonly data = inject<{ additionalData: string; type: \"delete\" | \"confirm-access-type\" }>(MAT_DIALOG_DATA);\n constructor(public dialogRef: MatDialogRef<ConfirmDialogComponent>) {}\n\n confirmNo(): void {\n this.dialogRef.close({ action: NsAccessControlConfig.IActions.Reject });\n }\n confirmYes(): void {\n this.dialogRef.close({ action: NsAccessControlConfig.IActions.Confirm });\n }\n}\n","<div class=\"dialog-confirm p-4\">\n <div class=\"flex items-center justify-center flex-column\">\n <div class=\"icon mb-6\" [ngSwitch]=\"data.type\">\n <mat-icon *ngSwitchCase=\"'delete'\">delete</mat-icon>\n <mat-icon *ngSwitchCase=\"'confirm-access-type'\" svgIcon=\"radio-on\"></mat-icon>\n </div>\n\n <div [ngSwitch]=\"data?.type\">\n <ng-container *ngSwitchCase=\"'delete'\">\n <div class=\"confirm-title text-center\">Are you sure you want to delete {{ data?.additionalData || \"\" }} ?</div>\n <div class=\"confirm-desc text-center\">\n Once deleted, it cannot be restored, and any access permissions associated with it will be removed. This action is irreversible.\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'confirm-access-type'\">\n <div class=\"confirm-title text-center\">Are you sure you want to opt for \"Public\" access?</div>\n <div class=\"confirm-desc text-center\">Or else please cancel and select <strong>\"Custom\"</strong> for the restricted content access.</div>\n </ng-container>\n </div>\n\n <div class=\"confirm-actions flex items-center gap-4 mt-4\" [ngSwitch]=\"data?.type\">\n <ng-container *ngSwitchCase=\"'delete'\">\n <button mat-flat-button class=\"mat-btn-outline mt-2 gap-2\" (click)=\"confirmNo()\">No</button>\n <button mat-flat-button class=\"new-bg-color text-white mt-2\" (click)=\"confirmYes()\">Yes</button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'confirm-access-type'\">\n <button mat-flat-button class=\"mat-btn-outline mt-2 gap-2\" (click)=\"confirmNo()\">Cancel</button>\n <button mat-flat-button class=\"new-bg-color text-white mt-2\" (click)=\"confirmYes()\">Yes</button>\n </ng-container>\n </div>\n </div>\n</div>\n","import { Component, OnInit } from \"@angular/core\";\nimport { MatDialogRef } from \"@angular/material/dialog\";\nimport { AccessControlService } from \"../../../_services/access-control.service\";\nimport { NsAccessControlConfig } from \"../../../_models/access-control.model\";\n\n@Component({\n selector: \"sb-uic-access-control-guide\",\n templateUrl: \"./access-control-guide.component.html\",\n styleUrls: [\"./access-control-guide.component.scss\"]\n})\nexport class AccessControlGuideComponent implements OnInit {\n accessControlGuideConfig: NsAccessControlConfig.IAccessControlGuide;\n constructor(public dialogRef: MatDialogRef<AccessControlGuideComponent>, private accessControlService: AccessControlService) {}\n\n ngOnInit(): void {\n this.accessControlGuideConfig = this.accessControlService.accessControlConfig().accessControlGuide;\n }\n\n onClose() {\n this.dialogRef.close();\n }\n}\n","<div class=\"flex justify-between dialog-heading items-center\">\n <h2 mat-dialog-title class=\"mb-0\">Access Control Guide</h2>\n <button mat-icon-button class=\"close-button\" (click)=\"onClose()\">\n <mat-icon>close</mat-icon>\n </button>\n</div>\n<div mat-dialog-content>\n <div class=\"video-wrapper\">\n <video src=\"\"></video>\n </div>\n\n <div class=\"guide-information\">\n <mat-tab-group dynamicHeight mat-stretch-tabs=\"false\" mat-align-tabs=\"start\">\n <mat-tab label=\"Summary\" *ngIf=\"accessControlGuideConfig?.canShowSummaryTab\">\n <div class=\"about-guide text-xs text-dark py-4\">\n {{ accessControlGuideConfig?.summaryText || \"\" }}\n </div>\n </mat-tab>\n <mat-tab label=\"Transcript\" *ngIf=\"accessControlGuideConfig?.canShowTranscriptTab\">No data yet </mat-tab>\n </mat-tab-group>\n </div>\n</div>\n","import { Injectable } from \"@angular/core\";\ninterface CivilServiceData {\n civilServiceType: {\n civilServiceTypeList: Array<{\n id: string;\n name: string;\n serviceList: Array<{\n id: string;\n name: string;\n commonBatchStartYear: number;\n commonBatchEndYear: number;\n cadreList?: Array<{\n id: string;\n name: string;\n startBatchYear: number;\n endBatchYear: number;\n }>;\n }>;\n }>;\n };\n}\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class CadreMappingService {\n private allCadres = new Map<string, any>();\n private allServices = new Map<string, any>();\n private cadreToServiceMap = new Map<string, Set<string>>();\n private serviceToCadresMap = new Map<string, Set<string>>();\n private batchYearToCadresMap = new Map<number, Set<string>>();\n private batchYearToServicesMap = new Map<number, Set<string>>();\n\n private addToMapSet(map: Map<any, Set<any>>, key: any, value: any) {\n if (!map.has(key)) {\n map.set(key, new Set());\n }\n map.get(key)?.add(value);\n }\n\n initialize(data: CivilServiceData) {\n // Clear existing data\n this.allCadres.clear();\n this.allServices.clear();\n this.cadreToServiceMap.clear();\n this.serviceToCadresMap.clear();\n this.batchYearToCadresMap.clear();\n this.batchYearToServicesMap.clear();\n\n // Build lookups\n data?.civilServiceType?.civilServiceTypeList.forEach(cst => {\n if (cst) {\n cst.serviceList.forEach(service => {\n const { id: serviceId, commonBatchStartYear, commonBatchEndYear } = service;\n this.allServices.set(serviceId, service);\n \n // Add years to service-batch map\n for (let y = commonBatchStartYear; y <= commonBatchEndYear; y++) {\n this.addToMapSet(this.batchYearToServicesMap, y, serviceId);\n }\n \n service.cadreList?.forEach(cadre => {\n const { id: cadreId, startBatchYear, endBatchYear } = cadre;\n this.allCadres.set(cadreId, cadre);\n \n // Map cadre <-> service\n this.addToMapSet(this.cadreToServiceMap, cadreId, serviceId);\n this.addToMapSet(this.serviceToCadresMap, serviceId, cadreId);\n \n // Add years to cadre-batch map\n for (let y = startBatchYear; y <= endBatchYear; y++) {\n this.addToMapSet(this.batchYearToCadresMap, y, cadreId);\n }\n });\n });\n }\n });\n }\n\n getAllBatchYears(): number[] {\n return Array.from(this.batchYearToCadresMap.keys()).sort((a, b) => a - b);\n }\n\n getAllCadres(): Array<{ id: string; name: string }> {\n return Array.from(this.allCadres.values()).map(c => ({\n id: c.id,\n name: c.name\n }));\n }\n\n getAllServices(): Array<{ id: string; name: string }> {\n return Array.from(this.allServices.values()).map(s => ({\n id: s.id,\n name: s.name\n }));\n }\n\n getServicesByCadres(cadreIds: string[]): Array<{ id: string; name: string }> {\n const serviceIdsSet = new Set<string>();\n cadreIds.forEach(cadreId => {\n const services = this.cadreToServiceMap.get(cadreId) || new Set();\n services.forEach(serviceId => serviceIdsSet.add(serviceId));\n });\n\n return Array.from(serviceIdsSet).map(id => {\n const s = this.allServices.get(id);\n return { id: s.id, name: s.name };\n });\n }\n\n getCadresByServices(serviceIds: string[]): Array<{ id: string; name: string }> {\n const cadreIdsSet = new Set<string>();\n serviceIds.forEach(serviceId => {\n const cadres = this.serviceToCadresMap.get(serviceId) || new Set();\n cadres.forEach(cadreId => cadreIdsSet.add(cadreId));\n });\n\n return Array.from(cadreIdsSet).map(id => {\n const c = this.allCadres.get(id);\n return { id: c.id, name: c.name };\n });\n }\n\n getCadresByBatchYears(years: number[]): Array<{ id: string; name: string }> {\n const cadreIdsSet = new Set<string>();\n years.forEach(year => {\n const cadres = this.batchYearToCadresMap.get(year) || new Set();\n cadres.forEach(cadreId => cadreIdsSet.add(cadreId));\n });\n\n return Array.from(cadreIdsSet).map(id => {\n const c = this.allCadres.get(id);\n return { id: c.id, name: c.name };\n });\n }\n\n getServicesByBatchYears(years: number[]): Array<{ id: string; name: string }> {\n const serviceIdsSet = new Set<string>();\n years.forEach(year => {\n const services = this.batchYearToServicesMap.get(year) || new Set();\n services.forEach(serviceId => serviceIdsSet.add(serviceId));\n });\n\n return Array.from(serviceIdsSet).map(id => {\n const s = this.allServices.get(id);\n return { id: s.id, name: s.name };\n });\n }\n\n getServicesByCadresAndBatch(cadreIds: string[], year: number): Array<{ id: string; name: string }> {\n const services = this.getServicesByCadres(cadreIds);\n return services.filter(service => {\n const fullService = this.allServices.get(service.id);\n return year >= fullService.commonBatchStartYear && year <= fullService.commonBatchEndYear;\n });\n }\n\n getCadresByServicesAndBatch(serviceIds: string[], year: number): Array<{ id: string; name: string }> {\n const cadres = this.getCadresByServices(serviceIds);\n return cadres.filter(cadre => {\n const fullCadre = this.allCadres.get(cadre.id);\n return year >= fullCadre.startBatchYear && year <= fullCadre.endBatchYear;\n });\n }\n\n getBatchYearsByCadres(cadreIds: string[]): number[] {\n const batchYearsSet = new Set<number>();\n cadreIds.forEach(cadreId => {\n const cadre = this.allCadres.get(cadreId);\n if (cadre) {\n for (let y = cadre.startBatchYear; y <= cadre.endBatchYear; y++) {\n batchYearsSet.add(y);\n }\n }\n });\n return Array.from(batchYearsSet).sort((a, b) => a - b);\n }\n\n getBatchYearsByServices(serviceIds: string[]): number[] {\n const batchYearsSet = new Set<number>();\n serviceIds.forEach(serviceId => {\n const service = this.allServices.get(serviceId);\n if (service) {\n for (let y = service.commonBatchStartYear; y <= service.commonBatchEndYear; y++) {\n batchYearsSet.add(y);\n }\n }\n });\n return Array.from(batchYearsSet).sort((a, b) => a - b);\n }\n\n getBatchYearsByServicesAndCadres(serviceIds: string[], cadreIds: string[]): number[] {\n const serviceYears = this.getBatchYearsByServices(serviceIds);\n const cadreYears = this.getBatchYearsByCadres(cadreIds);\n\n // Find intersection of years\n const commonYears = serviceYears.filter(year => cadreYears.includes(year));\n return commonYears.sort((a, b) => a - b);\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { InviteUsersComponent } from \"../dialogs/invite-users/invite-users.component\";\nimport { IUserGroupRequest, NsAccessControlConfig } from \"../../_models/access-control.model\";\nimport { FormBuilder, FormGroup, FormArray, Validators } from \"@angular/forms\";\nimport { AccessControlService } from \"../../_services/access-control.service\";\nimport { EntitySelectionsComponent } from \"../dialogs/entity-selections/entity-selections.component\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { CadreMappingService } from \"../../_services/cadre-mapping.service\";\nimport { SnackbarComponent } from \"../../components/snackbar/snackbar.component\";\nimport { MatLegacySnackBar as MatSnackBar } from \"@angular/material/legacy-snack-bar\";\nimport { ConfirmDialogComponent } from \"../dialogs/confirm-dialog/confirm-dialog.component\";\nimport { AccessControlGuideComponent } from \"../dialogs/access-control-guide/access-control-guide.component\";\n\n@Component({\n selector: \"sb-uic-access-control\",\n templateUrl: \"./access-control.component.html\",\n styleUrls: [\"./access-control.component.scss\"]\n})\nexport class AccessControlComponent implements OnInit {\n @Input() config!: NsAccessControlConfig.IAccessControlConfig;\n @Input() contentId: string = \"\";\n @Input() content: any;\n\n @Output() accessControlData: EventEmitter<{ userGroup: any[]; accessType: string }> = new EventEmitter();\n\n accessType: NsAccessControlConfig.ITypeAccessType = NsAccessControlConfig.IAccessTypes.Public;\n ACCESS_TYPE_ENUM = NsAccessControlConfig.IAccessTypes;\n\n isLoading = false;\n isVisibilityEnabled: boolean = false;\n filterCriteria: boolean = false;\n\n defaultConditionRelationship: string = \"AND\";\n defaultUserGroupRelationship: string = \"OR\";\n\n accessControlCriteriaSelection!: NsAccessControlConfig.IAccessControlCriteriaSelection;\n usersTableConfig: NsAccessControlConfig.ITableConfig;\n accessControlForm!: FormGroup;\n\n cadreConfigData: any;\n isSaveFltrBtnDisabled = false;\n isApplyBtnDisabled = false;\n isApplying = false;\n isSaving = false;\n constructor(\n private dialog: MatDialog,\n private fb: FormBuilder,\n private accessControlService: AccessControlService,\n private cadreMappingService: CadreMappingService,\n private snackbar: MatSnackBar\n ) {}\n\n ngOnInit(): void {\n this.initForm();\n this.getAccessControl();\n this.accessControlService.accessControlConfig.set(this.config);\n this.accessControlCriteriaSelection = this.config?.accessControlCriteriaSelection;\n\n this.usersTableConfig = this.config?.usersTableConfig;\n\n if (!this.contentId) {\n this.callSnackbar(\"Content id is required\", \"error\");\n }\n\n if (this.content) {\n if (this.content?.status === \"Draft\") {\n this.isApplyBtnDisabled = true;\n }\n if (this.content?.status === \"Live\") {\n this.isSaveFltrBtnDisabled = true;\n }\n\n if (this.content?.accessSettingsEnabled) {\n this.accessType = NsAccessControlConfig.IAccessTypes.Custom;\n } else {\n if (this.content?.accessSetting === NsAccessControlConfig.IAccessSetting.ALL_USERS) {\n this.accessType = NsAccessControlConfig.IAccessTypes.Public;\n } else if (\n this.content?.accessSetting === NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC ||\n this.content?.accessSetting === NsAccessControlConfig.IAccessSetting.CUSTOME_USER\n ) {\n this.accessType = NsAccessControlConfig.IAccessTypes.Custom;\n }\n }\n }\n }\n\n fetchCadreConfigData(): void {\n this.isLoading = true;\n this.accessControlService.fetchCadreConfig().subscribe({\n next: (response: any) => {\n if (response?.result && response?.result?.response && Object.keys(response?.result?.response)?.length) {\n this.cadreConfigData = response.result.response?.value;\n this.cadreMappingService.initialize(this.cadreConfigData);\n this.accessControlService.holdServiceCadrebatch.set({\n service: this.cadreMappingService.getAllServices(),\n batch: this.cadreMappingService.getAllBatchYears(),\n cadre: this.cadreMappingService.getAllCadres()\n });\n }\n },\n complete: () => {\n this.isLoading = false;\n }\n });\n }\n\n initForm() {\n this.accessControlForm = this.fb.group({\n userGroup: this.fb.array([])\n });\n }\n\n get userGroup(): FormArray {\n return this.accessControlForm.get(\"userGroup\") as FormArray;\n }\n\n ruleConditions(ruleIndex: number): FormArray {\n return this.userGroup.at(ruleIndex).get(\"conditions\") as FormArray;\n }\n\n onAccessTypeChange(event: any) {\n if (!this.cadreConfigData) {\n this.fetchCadreConfigData();\n }\n\n if (event.value === NsAccessControlConfig.IAccessTypes.Public) {\n const dialogRef = this.dialog.open(ConfirmDialogComponent, {\n width: \"470px\",\n data: { type: \"confirm-access-type\" }\n });\n dialogRef.afterClosed().subscribe(result => {\n if (result?.action === NsAccessControlConfig.IActions.Confirm) {\n this.accessType = NsAccessControlConfig.IAccessTypes.Public;\n this.updateContentAccessSetting();\n } else {\n this.accessType = NsAccessControlConfig.IAccessTypes.Custom;\n }\n });\n } else {\n this.updateContentAccessSetting();\n }\n\n if (event.value === NsAccessControlConfig.IAccessTypes.Custom) {\n this.isVisibilityEnabled = false;\n }\n }\n\n addUserGroup() {\n const ruleGroup = this.fb.group({\n id: [uuidv4()],\n name: [`User Group ${this.userGroup.length + 1}`],\n description: [`Description for UserGroup ${this.userGroup.length + 1}`],\n conditions: this.fb.array([this.createConditionGroup(uuidv4(), this.userGroup.length - 1)])\n });\n\n this.userGroup.push(ruleGroup);\n }\n\n addCondition(userGroupIndex: number) {\n const conditions = this.ruleConditions(userGroupIndex);\n const accessSetting = this.content?.accessSetting;\n\n // Check if organization/users already exists based on access setting\n if (accessSetting === NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC || accessSetting === NsAccessControlConfig.IAccessSetting.CUSTOME_USER) {\n const entityType =\n accessSetting === NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC\n ? NsAccessControlConfig.SelectionType.Organizations\n : NsAccessControlConfig.SelectionType.Users;\n const existingEntity = conditions.controls.some(ctrl => ctrl.get(\"entity\")?.value === entityType);\n\n if (existingEntity) {\n this.callSnackbar(`${entityType.toUpperCase()} is already added in this user group`, \"error\");\n return;\n }\n }\n\n // Check if the last condition's selections are empty\n if (conditions.length > 0) {\n const lastCondition = conditions.at(conditions.length - 1);\n const selections = lastCondition.get(\"selections\")?.value || [];\n if (selections.length === 0) {\n this.callSnackbar(\"Please select a value for the current condition before adding another one.\", \"error\");\n return;\n }\n }\n\n conditions.push(this.createConditionGroup(uuidv4(), userGroupIndex));\n }\n\n createConditionGroup(id: number, userGroupIndex: number): FormGroup {\n let entity = \"\";\n const accessSetting = this.content?.accessSetting;\n\n if (accessSetting === NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC || accessSetting === NsAccessControlConfig.IAccessSetting.CUSTOME_USER) {\n entity =\n accessSetting === NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC\n ? NsAccessControlConfig.SelectionType.Organizations\n : NsAccessControlConfig.SelectionType.Users;\n this.accessControlCriteriaSelection.optionsEntity.forEach((ele: NsAccessControlConfig.IOptionsEntity) => {\n ele.disabled = ele.value !== entity;\n });\n }\n\n return this.fb.group({\n id: [id],\n entity: [entity, Validators.required],\n conditionType: [{ value: \"is\", disabled: true }, Validators.required],\n selections: [[]]\n });\n }\n\n onEntityChange(userGroupIndex: number, conditionIndex: number): void {\n const conditions = this.ruleConditions(userGroupIndex);\n const condition = conditions.at(conditionIndex);\n const selectedEntity = condition?.get(\"entity\")?.value;\n\n // Check if the same entity is already selected in another condition of this user group\n const isDuplicate = conditions.controls.some((ctrl, index) => {\n return index !== conditionIndex && ctrl.get(\"entity\")?.value === selectedEntity;\n });\n\n if (isDuplicate) {\n this.callSnackbar(`${selectedEntity?.toUpperCase()} is already selected in this user group`, \"error\");\n condition.get(\"entity\")?.setValue(\"\");\n return;\n }\n\n if (condition?.value?.selections?.length) {\n condition.get(\"selections\")?.setValue([]);\n }\n }\n\n getAvailableEntities(userGroupIndex: number, currentConditionIndex: number): { value: string; label: string }[] {\n const conditions = this.ruleConditions(userGroupIndex);\n const selectedEntities = conditions.controls\n .map((ctrl, idx) => (idx !== currentConditionIndex ? ctrl.get(\"entity\")?.value : null))\n .filter(e => !!e);\n return this.accessControlCriteriaSelection?.optionsEntity.filter(option => !selectedEntities.includes(option.value));\n }\n\n removeUserGroup(index: number) {\n const group = this.userGroup.at(index);\n const dialogRef = this.dialog.open(ConfirmDialogComponent, {\n width: \"470px\",\n data: { additionalData: group?.value?.name, type: \"delete\" }\n });\n dialogRef.afterClosed().subscribe(result => {\n if (result?.action === NsAccessControlConfig.IActions.Confirm) {\n this.userGroup.removeAt(index);\n }\n });\n }\n\n resetUserGroup(index: number) {\n const group = this.userGroup.at(index);\n if (group) {\n group.get(\"name\")?.setValue(`User Group ${index + 1}`);\n group.get(\"description\")?.setValue(`Description for UserGroup ${index + 1}`);\n const conditions = group.get(\"conditions\") as FormArray;\n for (let i = 0; i < conditions.length; i++) {\n const id = conditions.at(i).get(\"id\")?.value;\n conditions.setControl(i, this.createConditionGroup(id, index));\n }\n }\n }\n\n removeCondition(userGroupIndex: number, conditionIndex: number) {\n const conditions = this.ruleConditions(userGroupIndex);\n const dialogRef = this.dialog.open(ConfirmDialogComponent, {\n width: \"470px\",\n data: { additionalData: \"this condition\", type: \"delete\" }\n });\n dialogRef.afterClosed().subscribe(result => {\n if (result?.action === NsAccessControlConfig.IActions.Confirm) {\n conditions.removeAt(conditionIndex);\n }\n });\n }\n\n resetCondition(userGroupIndex: number, conditionIndex: number) {\n const conditions = this.ruleConditions(userGroupIndex);\n const condition = conditions.at(conditionIndex);\n if (condition) {\n const id = condition.get(\"id\")?.value || uuidv4();\n conditions.setControl(conditionIndex, this.createConditionGroup(id, userGroupIndex));\n }\n }\n\n manageSelections(condition: any, rule: any, userGroupIndex: number): void {\n switch (condition.value.entity) {\n case NsAccessControlConfig.SelectionType.Users:\n this.openInviteUserDialog(condition?.value, rule?.value);\n break;\n case NsAccessControlConfig.SelectionType.Organizations:\n case NsAccessControlConfig.SelectionType.Designation:\n case NsAccessControlConfig.SelectionType.Service:\n case NsAccessControlConfig.SelectionType.Cadre:\n case NsAccessControlConfig.SelectionType.Batch:\n case NsAccessControlConfig.SelectionType.Group:\n case NsAccessControlConfig.SelectionType.VerificationStatus:\n this.processCadreConfigMapping(userGroupIndex);\n this.openSelectionDialog(rule?.value, condition?.value);\n break;\n default:\n console.warn(\"Unsupported entity type:\", condition.value.entity);\n }\n }\n\n openSelectionDialog(rule: any, condition: any): void {\n const originalSelections = [...(condition.selections || [])];\n\n const dialogRef = this.dialog.open(EntitySelectionsComponent, {\n width: \"1032px\",\n data: { rule: rule, condition: condition, selected: condition.selections }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n // Find the rule FormGroup in the FormArray\n const ruleIndex = this.userGroup.controls.findIndex((ctrl: any) => ctrl.get(\"id\")?.value === result.rule.id);\n if (ruleIndex !== -1) {\n const ruleGroup = this.userGroup.at(ruleIndex);\n const conditions = ruleGroup.get(\"conditions\") as FormArray;\n const conditionIndex = conditions.controls.findIndex((ctrl: any) => ctrl.get(\"id\")?.value === result.condition.id);\n\n if (conditionIndex !== -1) {\n const conditionGroup = conditions.at(conditionIndex);\n conditionGroup.get(\"selections\")?.setValue(result.selected);\n\n if (\n condition.entity === NsAccessControlConfig.SelectionType.Organizations &&\n !this.areSelectionsEqual(originalSelections, result.selected)\n ) {\n const designationCondition = conditions.controls.find(\n ctrl => ctrl.get(\"entity\")?.value === NsAccessControlConfig.SelectionType.Designation\n );\n\n if (designationCondition) {\n designationCondition.get(\"selections\")?.setValue([]);\n }\n }\n\n this.processCadreConfigMapping(ruleIndex);\n }\n }\n }\n });\n }\n\n private areSelectionsEqual(content_1: any[], content_2: any[]): boolean {\n if (content_1.length !== content_2.length) return false;\n return content_1.every(item => content_2.includes(item));\n }\n\n processCadreConfigMapping(userGroupIndex: number): void {\n const ruleGroup = this.userGroup.at(userGroupIndex);\n const conditionValue = ruleGroup.get(\"conditions\").value;\n if (conditionValue && conditionValue.length) {\n const services = conditionValue.find((ele: any) => ele.entity === \"service\");\n const cadre = conditionValue.find((ele: any) => ele.entity === \"cadre\");\n const batch = conditionValue.find((ele: any) => ele.entity === \"batch\");\n const serviceSelections = services?.selections || [];\n const cadreSelections = cadre?.selections || [];\n const batchSelections = batch?.selections || [];\n // Case 1: Only service selected\n if (serviceSelections?.length && !cadreSelections?.length && !batchSelections?.length) {\n this.accessControlService.holdServiceCadrebatch.update(prev => ({\n ...prev,\n service: this.cadreMappingService.getAllServices(),\n cadre: this.cadreMappingService.getCadresByServices(serviceSelections),\n batch: this.cadreMappingService.getBatchYearsByServices(serviceSelections)\n }));\n }\n // Case 2: Only cadre selected\n else if (!serviceSelections?.length && cadreSelections?.length && !batchSelections?.length) {\n this.accessControlService.holdServiceCadrebatch.update(prev => ({\n ...prev,\n cadre: this.cadreMappingService.getAllCadres(),\n service: this.cadreMappingService.getServicesByCadres(cadreSelections),\n batch: this.cadreMappingService.getBatchYearsByServices(cadreSelections)\n }));\n }\n // Case 3: Only batch selected\n else if (!serviceSelections?.length && !cadreSelections?.length && batchSelections?.length) {\n this.accessControlService.holdServiceCadrebatch.update(prev => ({\n ...prev,\n batch: this.cadreMappingService.getAllBatchYears(),\n service: this.cadreMappingService.getServicesByBatchYears(batchSelections),\n cadre: this.cadreMappingService.getCadresByBatchYears(batchSelections)\n }));\n }\n // Case 4: Service and Cadre selected\n else if (serviceSelections?.length && cadreSelections?.length && !batchSelections?.length) {\n this.accessControlService.holdServiceCadrebatch.update(prev => ({\n ...prev,\n service: this.cadreMappingService.getServicesByCadres(cadreSelections),\n cadre: this.cadreMappingService.getCadresByServices(serviceSelections),\n batch: this.cadreMappingService.getBatchYearsByServicesAndCadres(serviceSelections, cadreSelections)\n }));\n }\n // Case 5: Service and Batch selected\n else if (serviceSelections?.length && !cadreSelections?.length && batchSelections?.length) {\n this.accessControlService.holdServiceCadrebatch.update(prev => ({\n ...prev,\n cadre: this.cadreMappingService.getCadresByServicesAndBatch(serviceSelections, batchSelections),\n service: this.cadreMappingService.getServicesByCadresAndBatch(cadreSelections, batchSelections),\n batch: this.cadreMappingService.getBatchYearsByServicesAndCadres(serviceSelections, cadreSelections)\n }));\n }\n // Case 6: Cadre and Batch selected\n else if (!serviceSelections?.length && cadreSelections?.length && batchSelections?.length) {\n this.accessControlService.holdServiceCadrebatch.update(prev => ({\n ...prev,\n service: this.cadreMappingService.getServicesByCadresAndBatch(cadreSelections, batchSelections),\n cadre: this.cadreMappingService.getCadresByServicesAndBatch(serviceSelections, batchSelections),\n batch: this.cadreMappingService.getBatchYearsByServicesAndCadres(serviceSelections, cadreSelections)\n }));\n } else {\n this.accessControlService.holdServiceCadrebatch.set({\n service: this.cadreMappingService.getAllServices(),\n batch: this.cadreMappingService.getAllBatchYears(),\n cadre: this.cadreMappingService.getAllCadres()\n });\n }\n }\n }\n\n openInviteUserDialog(condition: any, rule: any): void {\n const dialogRef = this.dialog.open(InviteUsersComponent, {\n width: \"1090px\",\n data: { condition: condition, rule: rule, selected: condition.selections }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n // Find the rule FormGroup in the FormArray\n const ruleIndex = this.userGroup.controls.findIndex((ctrl: any) => ctrl.get(\"id\")?.value === result.rule.id);\n if (ruleIndex !== -1) {\n const ruleGroup = this.userGroup.at(ruleIndex);\n const conditions = ruleGroup.get(\"conditions\") as FormArray;\n const conditionIndex = conditions.controls.findIndex((ctrl: any) => ctrl.get(\"id\")?.value === result.condition.id);\n if (conditionIndex !== -1) {\n const conditionGroup = conditions.at(conditionIndex);\n // const userIds = result.selected && result.selected.map((user: any) => user?.userId);\n conditionGroup.get(\"selections\")?.setValue(result.selected);\n }\n }\n }\n });\n }\n\n callSnackbar(message: string, type: \"success\" | \"error\"): void {\n if (type === \"success\") {\n this.snackbar.openFromComponent(SnackbarComponent, {\n data: { message: message, type: \"success\" },\n duration: 3000,\n panelClass: \"course-success-snackbar\"\n });\n } else if (type === \"error\") {\n this.snackbar.openFromComponent(SnackbarComponent, {\n data: { message: message, type: \"error\" },\n duration: 3000,\n panelClass: \"course-error-snackbar\"\n });\n }\n }\n\n async applyAccessControlValue(): Promise<void> {\n if (this.content?.status === \"Draft\") this.isSaving = true;\n else if (this.content?.status === \"Live\") this.isApplying = true;\n const payload = await this.processRequestCreation();\n this.accessControlService.applyUserGroupAccessControl(payload).subscribe({\n next: response => {\n if (response?.result && response?.result?.accessControl) {\n this.accessControlData.emit({ userGroup: response.result.accessControl?.userGroup, accessType: this.accessType });\n this.callSnackbar(\"Access Control saved successfully\", \"success\");\n } else {\n this.callSnackbar(\"Could not save access control, Please try again.\", \"error\");\n }\n\n if (this.content?.status === \"Draft\") this.isSaving = false;\n else if (this.content?.status === \"Live\") this.isApplying = false;\n },\n error: () => {\n this.callSnackbar(\"Could not save access control, Please try again.\", \"error\");\n if (this.content?.status === \"Draft\") this.isSaving = false;\n else if (this.content?.status === \"Live\") this.isApplying = false;\n }\n });\n }\n\n processRequestCreation(): Promise<IUserGroupRequest> {\n return new Promise((resolve, reject) => {\n try {\n const data = this.accessControlForm.value;\n\n const userGroups = data.userGroup.map((group: any) => ({\n userGroupName: group.name,\n userGroupCriteriaList: group.conditions.map((condition: any) => {\n let criteriaValue: string[];\n\n if (condition?.entity === NsAccessControlConfig.SelectionType.Users && condition?.selected?.length && condition?.selected[0]?.userId) {\n const userIds = condition.selected?.map((user: any) => user?.userId) || [];\n criteriaValue = userIds;\n } else {\n criteriaValue = condition.selections?.map(String) || [];\n }\n\n return {\n criteriaKey: condition.entity,\n criteriaValue\n };\n })\n }));\n\n const requestPayload: IUserGroupRequest = {\n contentId: this.contentId,\n accessControl: {\n version: 1,\n userGroups\n }\n };\n\n resolve(requestPayload);\n } catch (error) {\n reject(error);\n }\n });\n }\n\n openInstructonsDialog(): void {\n this.dialog.open(AccessControlGuideComponent, {\n width: \"960px\"\n });\n }\n\n async getAccessControl(): Promise<void> {\n const response = await this.accessControlService\n .fetchUserGroupAccessControl(this.contentId)\n .toPromise()\n .catch(() => {\n this.accessControlData.emit({ userGroup: this.accessControlForm.value?.userGroup, accessType: this.accessType });\n });\n if (response?.result?.accessControl) {\n this.processAccessControlResult(response.result.accessControl);\n this.accessControlData.emit({ userGroup: response.result.accessControl?.userGroup, accessType: this.accessType });\n }\n }\n\n processAccessControlResult(accessControl: any): void {\n if (!accessControl?.userGroups?.length) return;\n\n while (this.userGroup.length) {\n this.userGroup.removeAt(0);\n }\n\n accessControl.userGroups.forEach((group: any) => {\n const conditions = this.fb.array([]) as any;\n\n group.userGroupCriteriaList.forEach((criteria: any) => {\n const condition = this.createConditionGroup(uuidv4(), this.userGroup.length);\n\n // Map API keys to form entity values\n const entityMap: { [key: string]: string } = {\n rootOrgId: NsAccessControlConfig.SelectionType.Organizations,\n user: NsAccessControlConfig.SelectionType.Users,\n group: NsAccessControlConfig.SelectionType.Group,\n designation: NsAccessControlConfig.SelectionType.Designation,\n profilestatus: NsAccessControlConfig.SelectionType.VerificationStatus,\n Cadre: NsAccessControlConfig.SelectionType.Cadre,\n service: NsAccessControlConfig.SelectionType.Service,\n batch: NsAccessControlConfig.SelectionType.Batch\n };\n\n // Set the form values\n condition.patchValue({\n entity: entityMap[criteria.criteriaKey] || criteria.criteriaKey,\n selections: criteria.criteriaValue\n });\n\n conditions.push(condition);\n });\n\n const ruleGroup = this.fb.group({\n id: [group.userGroupId || uuidv4()],\n name: [group.userGroupName],\n description: [`Description for ${group.userGroupName}`],\n conditions: conditions\n });\n\n this.userGroup.push(ruleGroup);\n });\n\n if (!this.cadreConfigData) {\n this.fetchCadreConfigData();\n }\n }\n\n async updateContentAccessSetting(): Promise<void> {\n const accessTypeBoolean = this.accessType === NsAccessControlConfig.IAccessTypes.Public ? false : true;\n const request = this.accessControlService.createRequestContent(this.content, accessTypeBoolean);\n await this.accessControlService.updateContentV3(request, this.contentId).toPromise();\n }\n}\n","<div class=\"py-4 px-10\">\n <div class=\"p-4 as-container\">\n <div class=\"flex items-center justify-between\">\n <span class=\"text-xl font-bold primary-text-color\">Access Control</span>\n <div class=\"flex gap-2 items-center\">\n <span class=\"text-sm primary-text-color cursor-pointer\" (click)=\"openInstructonsDialog()\">How to use access control?</span>\n <img src=\"/assets/icons/support-i.svg\" alt=\"support i\" class=\"img-icon-24\" />\n </div>\n </div>\n <div class=\"light-grey-border p-4 mt-4\">\n <mat-radio-group [(ngModel)]=\"accessType\" (change)=\"onAccessTypeChange($event)\">\n <div class=\"radio-container flex gap-5 mb-4\">\n <ng-container *ngFor=\"let item of accessControlCriteriaSelection?.accessTypes\">\n <mat-radio-button [value]=\"item.value\">\n <div class=\"flex gap-2 items-center\">\n <span>{{ item?.name }}</span>\n <mat-icon svgIcon=\"info-outline\" [matTooltip]=\"item?.tooltip\"></mat-icon>\n </div>\n </mat-radio-button>\n </ng-container>\n </div>\n </mat-radio-group>\n <ng-container *ngIf=\"accessType === ACCESS_TYPE_ENUM.Public\">\n <div class=\"info-container\">\n <label class=\"text-sm\">This event will be visible to all Karmayogis.</label>\n </div>\n </ng-container>\n <ng-container *ngIf=\"accessType === ACCESS_TYPE_ENUM.Custom\">\n <div class=\"visibiliy-container light-grey-border p-4\">\n <div class=\"flex justify-between items-center\">\n <span class=\"text-lg font-bold\">Visibility</span>\n <mat-slide-toggle [(ngModel)]=\"isVisibilityEnabled\"></mat-slide-toggle>\n </div>\n <ng-container *ngIf=\"!isVisibilityEnabled\">\n <label class=\"text-sm\">Karmayogis will NOT be able to search and view the description page of the event.</label>\n </ng-container>\n <ng-container *ngIf=\"isVisibilityEnabled\">\n <label class=\"text-sm\"\n >Karmayogis will be able to search and view the description page of the event but will not able to enroll if Karmayogi do not satisfy the\n conditions defined in the access control below.</label\n >\n </ng-container>\n </div>\n <!-- <div class=\"flex justify-between items-center mt-4 mb-4\">\n <button mat-button class=\"new-secondary-button-no-border button-with-corners\" type=\"button\" (click)=\"filterCriteria = !filterCriteria\">\n <div class=\"flex gap-2 flex-middle\">\n <span class=\"text-m\">Filter criteria</span>\n <mat-icon class=\"primary-text-color\">{{ filterCriteria ? \"visibility_on\" : \"visibility_off\" }}</mat-icon>\n </div>\n </button>\n </div> -->\n\n <ng-container *ngIf=\"filterCriteria\">\n <div class=\"filter-criteria-container light-grey-border p-4 mt-4 flex flex-middle justify-between mb-4\">\n <div class=\"info\">\n <span class=\"text-sm\">Define the conditions that Karmayogis must satisfy to enroll in the event.</span>\n </div>\n <button mat-button class=\"new-secondary-button-no-border button-with-corners\" type=\"button\">\n <div class=\"flex gap-2 flex-middle\">\n <span class=\"text-m\">Refresh</span>\n <mat-icon class=\"primary-text-color\">refresh</mat-icon>\n </div>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"accessControlForm && userGroup?.length > 0 && !isLoading\">\n <form [formGroup]=\"accessControlForm\">\n <mat-accordion class=\"example-headers-align access-usergroup-accordion mt-3\" multi=\"true\">\n <ng-container formArrayName=\"userGroup\" *ngFor=\"let rule of userGroup?.controls; let i = index; let ruleLast = last\">\n <ng-container [formGroupName]=\"i\">\n <mat-expansion-panel class=\"access-usergroup-panel\" expanded>\n <mat-expansion-panel-header>\n <mat-panel-title class=\"items-center\">\n <span class=\"text-sm\">{{ rule.get(\"name\")?.value }}</span>\n </mat-panel-title>\n <mat-panel-description class=\"justify-end items-center\" (click)=\"$event.stopPropagation()\">\n <button mat-icon-button aria-label=\"delete user group\" (click)=\"removeUserGroup(i)\" title=\"Delete\">\n <mat-icon>delete</mat-icon>\n </button>\n <button mat-icon-button aria-label=\"refresh user group\" (click)=\"resetUserGroup(i)\" title=\"Refresh\">\n <mat-icon>refresh</mat-icon>\n </button>\n </mat-panel-description>\n </mat-expansion-panel-header>\n <ng-container *ngIf=\"rule.get('conditions') as conditionsArray\">\n <div [formArrayName]=\"'conditions'\">\n <ng-container *ngFor=\"let condition of conditionsArray?.controls; let j = index; let conditionlast = last\">\n <div class=\"condition-selection mt-2\" [formGroupName]=\"j\">\n <div class=\"select-condition-text mb-3 mt-4\">Select Condition {{ i + 1 + \".\" + (j + 1) }}</div>\n <div class=\"selections-options grid grid-cols-5 gap-4\">\n <div class=\"mat-full-radius\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-select placeholder=\"Select\" formControlName=\"entity\" (selectionChange)=\"onEntityChange(i, j)\">\n <ng-container *ngFor=\"let item of getAvailableEntities(i, j)\">\n <mat-option [value]=\"item?.value\" [disabled]=\"item?.disabled\">{{ item?.label }}</mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"mat-full-radius\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-select placeholder=\"Select\" formControlName=\"conditionType\">\n <ng-container *ngFor=\"let item of accessControlCriteriaSelection?.optionsConditions\">\n <mat-option [value]=\"item?.value\">{{ item?.label }}</mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"action-manage-selection\">\n <button\n mat-flat-button\n (click)=\"manageSelections(condition, rule, i)\"\n [disabled]=\"!condition.get('entity').value || !condition.get('conditionType').value\"\n class=\"rounded-full new-bg-color text-white mt-2 flex items-center gap-2\">\n <mat-icon svgIcon=\"svg_search\" class=\"mr-2\"></mat-icon>\n <span class=\"font-bold text-sm\">Manage Selections</span>\n </button>\n </div>\n <div class=\"action-options-selected\">\n <button mat-button class=\"new-secondary-button-no-border button-with-corners mt-2\" type=\"button\">\n <div class=\"flex gap-2 flex-middle mt-2\">\n <span class=\"text-m color-gr underline\">{{ condition.get(\"selections\").value.length }} items selected</span>\n </div>\n </button>\n </div>\n <div class=\"action-more-options flex justify-end\">\n <div class=\"flex gap-4\">\n <button mat-icon-button aria-label=\"delete condition\" class=\"mt-2 ml-auto\" (click)=\"removeCondition(i, j)\" title=\"Delete\">\n <mat-icon>delete</mat-icon>\n </button>\n <button mat-icon-button aria-label=\"refresh condition\" class=\"mt-2 ml-auto\" (click)=\"resetCondition(i, j)\" title=\"Refresh\">\n <mat-icon>refresh</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"and-or mat-full-radius\" *ngIf=\"conditionsArray?.length > 1 && !conditionlast\">\n <mat-form-field appearance=\"outline\" class=\"w-max-100\">\n <mat-select placeholder=\"Select\" [(value)]=\"defaultConditionRelationship\">\n <mat-option [value]=\"'AND'\">AND</mat-option>\n <mat-option [value]=\"'OR'\">OR</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n </div>\n </ng-container>\n <div class=\"action-add-condition\">\n <button mat-button class=\"new-secondary-button-no-border button-with-corners\" type=\"button\" (click)=\"addCondition(i)\">\n <div class=\"flex gap-2 flex-middle\">\n <mat-icon class=\"primary-text-color\">add</mat-icon>\n <span class=\"text-m\">Add Condition</span>\n </div>\n </button>\n </div>\n </mat-expansion-panel>\n <div class=\"and-or mat-full-radius\" *ngIf=\"userGroup.length > 1 && !ruleLast\">\n <mat-form-field appearance=\"outline\" class=\"w-max-100\">\n <mat-select placeholder=\"Select\" [(value)]=\"defaultUserGroupRelationship\">\n <mat-option [value]=\"'AND'\">AND</mat-option>\n <mat-option [value]=\"'OR'\">OR</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n </ng-container>\n </mat-accordion>\n </form>\n </ng-container>\n\n <ng-container *ngIf=\"isLoading\">\n <div class=\"spinner-loader flex items-center justify-center\">\n <mat-spinner></mat-spinner>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!isLoading\">\n <div class=\"text-center mb-6 mt-4\">\n <button mat-button class=\"new-secondary-button-no-border button-with-corners\" type=\"button\" (click)=\"addUserGroup()\">\n <div class=\"flex gap-2 flex-middle\">\n <mat-icon class=\"primary-text-color\">add</mat-icon>\n <span class=\"text-m\">Add User Group</span>\n </div>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"userGroup?.length > 0\">\n <div class=\"action-save flex justify-center items-center gap-4\">\n <!-- Save Filter Button -->\n <button\n mat-flat-button\n class=\"flex rounded-full px-4 py-2 mat-btn-outline font-bold text-sm items-center gap-2\"\n [disabled]=\"isSaveFltrBtnDisabled || isSaving\"\n (click)=\"applyAccessControlValue()\">\n <mat-spinner *ngIf=\"isSaving\" diameter=\"18\" strokeWidth=\"3\" class=\"!inline !m-0 mr-2\"></mat-spinner>\n <span>Save Filter</span>\n </button>\n\n <!-- Apply Button -->\n <button\n mat-flat-button\n [disabled]=\"isApplyBtnDisabled || isApplying\"\n class=\"flex items-center rounded-full px-4 py-2 new-bg-color font-bold text-sm text-white gap-2\"\n (click)=\"applyAccessControlValue()\">\n <mat-spinner *ngIf=\"isApplying\" diameter=\"18\" strokeWidth=\"3\" class=\"!inline !m-0 mr-2\"></mat-spinner>\n <span>Apply</span>\n </button>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n</div>\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\n\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatDialogModule } from \"@angular/material/dialog\";\nimport { MatRippleModule } from \"@angular/material/core\";\nimport { MatExpansionModule } from \"@angular/material/expansion\";\nimport { MatTabsModule } from \"@angular/material/tabs\";\nimport { MatTableModule } from \"@angular/material/table\";\nimport { MatSortModule } from \"@angular/material/sort\";\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\n\nimport { MatLegacyFormFieldModule as MatFormFieldModule } from \"@angular/material/legacy-form-field\";\nimport { MatLegacyInputModule as MatInputModule } from \"@angular/material/legacy-input\";\nimport { MatLegacyMenuModule as MatMenuModule } from \"@angular/material/legacy-menu\";\nimport { MatLegacyRadioModule as MatRadioModule } from \"@angular/material/legacy-radio\";\nimport { MatLegacySelectModule as MatSelectModule } from \"@angular/material/legacy-select\";\nimport { MatLegacyProgressSpinnerModule as MatProgressSpinnerModule } from \"@angular/material/legacy-progress-spinner\";\nimport { MatLegacySnackBarModule as MatSnackBarModule } from \"@angular/material/legacy-snack-bar\";\nimport { MatLegacyCheckboxModule as MatCheckboxModule } from \"@angular/material/legacy-checkbox\";\nimport { MatLegacySlideToggleModule as MatSlideToggleModule } from \"@angular/material/legacy-slide-toggle\";\nimport { MatLegacyButtonModule as MatButtonModule } from \"@angular/material/legacy-button\";\n\nimport { DragDropDirective } from \"../../_directives/drag-drop.directive\";\n\nimport { AccessControlComponent } from \"./access-control.component\";\nimport { ListTableComponent } from \"../../components/list-table/list-table.component\";\nimport { PaginationComponent } from \"../pagination/pagination.component\";\nimport { BulkUploadKarmayogiComponent } from \"../../components/bulk-upload-karmayogi/bulk-upload-karmayogi.component\";\n\nimport { InviteUsersComponent } from \"../dialogs/invite-users/invite-users.component\";\nimport { EntitySelectionsComponent } from \"../dialogs/entity-selections/entity-selections.component\";\nimport { ConfirmDialogComponent } from \"../dialogs/confirm-dialog/confirm-dialog.component\";\nimport { AccessControlGuideComponent } from \"../dialogs/access-control-guide/access-control-guide.component\";\n\n@NgModule({\n declarations: [\n AccessControlComponent,\n InviteUsersComponent,\n ListTableComponent,\n PaginationComponent,\n BulkUploadKarmayogiComponent,\n DragDropDirective,\n EntitySelectionsComponent,\n ConfirmDialogComponent,\n AccessControlGuideComponent\n ],\n imports: [\n CommonModule,\n MatRadioModule,\n MatIconModule,\n MatDialogModule,\n MatMenuModule,\n MatCheckboxModule,\n MatSlideToggleModule,\n MatSelectModule,\n MatRippleModule,\n MatInputModule,\n MatFormFieldModule,\n MatExpansionModule,\n ReactiveFormsModule,\n FormsModule,\n MatButtonModule,\n MatTabsModule,\n MatTableModule,\n MatProgressSpinnerModule,\n MatSnackBarModule,\n MatSortModule,\n MatTooltipModule\n ],\n exports: [AccessControlComponent, PaginationComponent]\n})\nexport class AccessControlModule {}\n","/*\n * Public API Surface of access-settings\n */\n\nexport * from \"./lib/access-settings.component\";\nexport * from \"./lib/access-settings.module\";\nexport * from \"./lib/_common/access-control/access-control.module\";\nexport * from \"./lib/_common/access-control/access-control.component\";\nexport * from \"./lib/_common/pagination/pagination.component\";\nexport * from \"./lib/_models/access-control.model\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["MAT_SNACK_BAR_DATA","i1","i3","i2","i4","i5","i7","i8.PaginationComponent","i1.AccessControlService","i6.ListTableComponent","i7.DragDropDirective","i2.AccessControlService","i6","i9","i10","i13.ListTableComponent","i14.BulkUploadKarmayogiComponent","i11","uuidv4","i3.AccessControlService","i4.CadreMappingService","i8","i12","i14","i15","MatRadioModule","MatMenuModule","MatCheckboxModule","MatSlideToggleModule","MatSelectModule","MatInputModule","MatFormFieldModule","MatButtonModule","MatProgressSpinnerModule","MatSnackBarModule"],"mappings":"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"}