@sunbird-cb/cbp-ai 0.0.1

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 (128) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/ai-cbp-routing.module.mjs +56 -0
  3. package/esm2022/lib/ai-cbp.component.mjs +14 -0
  4. package/esm2022/lib/ai-cbp.module.mjs +263 -0
  5. package/esm2022/lib/ai-cbp.service.mjs +14 -0
  6. package/esm2022/lib/components/add-course/add-course.component.mjs +444 -0
  7. package/esm2022/lib/components/add-designation/add-designation.component.mjs +460 -0
  8. package/esm2022/lib/components/add-personalisation/add-personalisation.component.mjs +33 -0
  9. package/esm2022/lib/components/approval-request-form/approval-request-form.component.mjs +392 -0
  10. package/esm2022/lib/components/approval-requests/approval-requests.component.mjs +398 -0
  11. package/esm2022/lib/components/dashboard/dashboard.component.mjs +265 -0
  12. package/esm2022/lib/components/delete-role-mapping/delete-role-mapping.component.mjs +53 -0
  13. package/esm2022/lib/components/delete-role-mapping-popup/delete-role-mapping-popup.component.mjs +39 -0
  14. package/esm2022/lib/components/edit-cbp-plan/edit-cbp-plan.component.mjs +699 -0
  15. package/esm2022/lib/components/gap-analysis-recommended-course/gap-analysis-recommended-course.component.mjs +188 -0
  16. package/esm2022/lib/components/generate-course-recommendation/generate-course-recommendation.component.mjs +1949 -0
  17. package/esm2022/lib/components/list-popup/list-popup.component.mjs +32 -0
  18. package/esm2022/lib/components/review-request/review-request.component.mjs +138 -0
  19. package/esm2022/lib/components/role-mapping-generation/role-mapping-generation.component.mjs +1082 -0
  20. package/esm2022/lib/components/role-mapping-list/role-mapping-list.component.mjs +714 -0
  21. package/esm2022/lib/components/suggest-more-courses/suggest-more-courses.component.mjs +370 -0
  22. package/esm2022/lib/components/update-designation-hierarchy/update-designation-hierarchy.component.mjs +235 -0
  23. package/esm2022/lib/components/view-cbp-plan/view-cbp-plan.component.mjs +125 -0
  24. package/esm2022/lib/components/view-course-recommendation/view-course-recommendation.component.mjs +397 -0
  25. package/esm2022/lib/components/view-final-cbp-plan/view-final-cbp-plan.component.mjs +883 -0
  26. package/esm2022/lib/modules/initial-screen/initial-screen.component.mjs +127 -0
  27. package/esm2022/lib/modules/shared/constant/app.constant.mjs +2036 -0
  28. package/esm2022/lib/modules/shared/directives/clickoutside.directive.mjs +38 -0
  29. package/esm2022/lib/modules/shared/directives/directive.module.mjs +21 -0
  30. package/esm2022/lib/modules/shared/pipes/order-by-name.pipe.mjs +23 -0
  31. package/esm2022/lib/modules/shared/services/event.service.mjs +24 -0
  32. package/esm2022/lib/modules/shared/services/events.mjs +125 -0
  33. package/esm2022/lib/modules/shared/services/init.service.mjs +41 -0
  34. package/esm2022/lib/modules/shared/services/role-mapping.service.mjs +261 -0
  35. package/esm2022/lib/modules/shared/services/shared.service.mjs +869 -0
  36. package/esm2022/lib/modules/upload-document-page/progress-dialog/progress-dialog.component.mjs +53 -0
  37. package/esm2022/lib/modules/upload-document-page/upload-dialog/upload-dialog.component.mjs +186 -0
  38. package/esm2022/lib/modules/upload-document-page/upload-document-page.component.mjs +367 -0
  39. package/esm2022/lib/pipe-public-URL/pipe-public-URL.module.mjs +20 -0
  40. package/esm2022/lib/pipe-public-URL/pipe-public-URL.pipe.mjs +23 -0
  41. package/esm2022/public-api.mjs +14 -0
  42. package/esm2022/sunbird-cb-cbp-ai.mjs +5 -0
  43. package/fesm2022/sunbird-cb-cbp-ai.mjs +12952 -0
  44. package/fesm2022/sunbird-cb-cbp-ai.mjs.map +1 -0
  45. package/index.d.ts +6 -0
  46. package/lib/ai-cbp-routing.module.d.ts +8 -0
  47. package/lib/ai-cbp-routing.module.d.ts.map +1 -0
  48. package/lib/ai-cbp.component.d.ts +7 -0
  49. package/lib/ai-cbp.component.d.ts.map +1 -0
  50. package/lib/ai-cbp.module.d.ts +68 -0
  51. package/lib/ai-cbp.module.d.ts.map +1 -0
  52. package/lib/ai-cbp.service.d.ts +7 -0
  53. package/lib/ai-cbp.service.d.ts.map +1 -0
  54. package/lib/components/add-course/add-course.component.d.ts +67 -0
  55. package/lib/components/add-course/add-course.component.d.ts.map +1 -0
  56. package/lib/components/add-designation/add-designation.component.d.ts +52 -0
  57. package/lib/components/add-designation/add-designation.component.d.ts.map +1 -0
  58. package/lib/components/add-personalisation/add-personalisation.component.d.ts +16 -0
  59. package/lib/components/add-personalisation/add-personalisation.component.d.ts.map +1 -0
  60. package/lib/components/approval-request-form/approval-request-form.component.d.ts +48 -0
  61. package/lib/components/approval-request-form/approval-request-form.component.d.ts.map +1 -0
  62. package/lib/components/approval-requests/approval-requests.component.d.ts +80 -0
  63. package/lib/components/approval-requests/approval-requests.component.d.ts.map +1 -0
  64. package/lib/components/dashboard/dashboard.component.d.ts +55 -0
  65. package/lib/components/dashboard/dashboard.component.d.ts.map +1 -0
  66. package/lib/components/delete-role-mapping/delete-role-mapping.component.d.ts +18 -0
  67. package/lib/components/delete-role-mapping/delete-role-mapping.component.d.ts.map +1 -0
  68. package/lib/components/delete-role-mapping-popup/delete-role-mapping-popup.component.d.ts +18 -0
  69. package/lib/components/delete-role-mapping-popup/delete-role-mapping-popup.component.d.ts.map +1 -0
  70. package/lib/components/edit-cbp-plan/edit-cbp-plan.component.d.ts +94 -0
  71. package/lib/components/edit-cbp-plan/edit-cbp-plan.component.d.ts.map +1 -0
  72. package/lib/components/gap-analysis-recommended-course/gap-analysis-recommended-course.component.d.ts +35 -0
  73. package/lib/components/gap-analysis-recommended-course/gap-analysis-recommended-course.component.d.ts.map +1 -0
  74. package/lib/components/generate-course-recommendation/generate-course-recommendation.component.d.ts +198 -0
  75. package/lib/components/generate-course-recommendation/generate-course-recommendation.component.d.ts.map +1 -0
  76. package/lib/components/list-popup/list-popup.component.d.ts +13 -0
  77. package/lib/components/list-popup/list-popup.component.d.ts.map +1 -0
  78. package/lib/components/review-request/review-request.component.d.ts +39 -0
  79. package/lib/components/review-request/review-request.component.d.ts.map +1 -0
  80. package/lib/components/role-mapping-generation/role-mapping-generation.component.d.ts +99 -0
  81. package/lib/components/role-mapping-generation/role-mapping-generation.component.d.ts.map +1 -0
  82. package/lib/components/role-mapping-list/role-mapping-list.component.d.ts +83 -0
  83. package/lib/components/role-mapping-list/role-mapping-list.component.d.ts.map +1 -0
  84. package/lib/components/suggest-more-courses/suggest-more-courses.component.d.ts +48 -0
  85. package/lib/components/suggest-more-courses/suggest-more-courses.component.d.ts.map +1 -0
  86. package/lib/components/update-designation-hierarchy/update-designation-hierarchy.component.d.ts +41 -0
  87. package/lib/components/update-designation-hierarchy/update-designation-hierarchy.component.d.ts.map +1 -0
  88. package/lib/components/view-cbp-plan/view-cbp-plan.component.d.ts +29 -0
  89. package/lib/components/view-cbp-plan/view-cbp-plan.component.d.ts.map +1 -0
  90. package/lib/components/view-course-recommendation/view-course-recommendation.component.d.ts +49 -0
  91. package/lib/components/view-course-recommendation/view-course-recommendation.component.d.ts.map +1 -0
  92. package/lib/components/view-final-cbp-plan/view-final-cbp-plan.component.d.ts +73 -0
  93. package/lib/components/view-final-cbp-plan/view-final-cbp-plan.component.d.ts.map +1 -0
  94. package/lib/modules/initial-screen/initial-screen.component.d.ts +85 -0
  95. package/lib/modules/initial-screen/initial-screen.component.d.ts.map +1 -0
  96. package/lib/modules/shared/constant/app.constant.d.ts +457 -0
  97. package/lib/modules/shared/constant/app.constant.d.ts.map +1 -0
  98. package/lib/modules/shared/directives/clickoutside.directive.d.ts +13 -0
  99. package/lib/modules/shared/directives/clickoutside.directive.d.ts.map +1 -0
  100. package/lib/modules/shared/directives/directive.module.d.ts +8 -0
  101. package/lib/modules/shared/directives/directive.module.d.ts.map +1 -0
  102. package/lib/modules/shared/pipes/order-by-name.pipe.d.ts +8 -0
  103. package/lib/modules/shared/pipes/order-by-name.pipe.d.ts.map +1 -0
  104. package/lib/modules/shared/services/event.service.d.ts +12 -0
  105. package/lib/modules/shared/services/event.service.d.ts.map +1 -0
  106. package/lib/modules/shared/services/events.d.ts +200 -0
  107. package/lib/modules/shared/services/events.d.ts.map +1 -0
  108. package/lib/modules/shared/services/init.service.d.ts +13 -0
  109. package/lib/modules/shared/services/init.service.d.ts.map +1 -0
  110. package/lib/modules/shared/services/role-mapping.service.d.ts +21 -0
  111. package/lib/modules/shared/services/role-mapping.service.d.ts.map +1 -0
  112. package/lib/modules/shared/services/shared.service.d.ts +108 -0
  113. package/lib/modules/shared/services/shared.service.d.ts.map +1 -0
  114. package/lib/modules/upload-document-page/progress-dialog/progress-dialog.component.d.ts +14 -0
  115. package/lib/modules/upload-document-page/progress-dialog/progress-dialog.component.d.ts.map +1 -0
  116. package/lib/modules/upload-document-page/upload-dialog/upload-dialog.component.d.ts +29 -0
  117. package/lib/modules/upload-document-page/upload-dialog/upload-dialog.component.d.ts.map +1 -0
  118. package/lib/modules/upload-document-page/upload-document-page.component.d.ts +64 -0
  119. package/lib/modules/upload-document-page/upload-document-page.component.d.ts.map +1 -0
  120. package/lib/pipe-public-URL/pipe-public-URL.module.d.ts +9 -0
  121. package/lib/pipe-public-URL/pipe-public-URL.module.d.ts.map +1 -0
  122. package/lib/pipe-public-URL/pipe-public-URL.pipe.d.ts +11 -0
  123. package/lib/pipe-public-URL/pipe-public-URL.pipe.d.ts.map +1 -0
  124. package/package.json +28 -0
  125. package/public-api.d.ts +11 -0
  126. package/public-api.d.ts.map +1 -0
  127. package/sunbird-cb-cbp-ai-0.0.1.tgz +0 -0
  128. package/sunbird-cb-cbp-ai.d.ts.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sunbird-cb-cbp-ai.mjs","sources":["../../../../library/sunbird-cb/cbp-ai/src/lib/ai-cbp.service.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/ai-cbp.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/ai-cbp.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/modules/shared/services/init.service.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/modules/shared/services/shared.service.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/approval-request-form/approval-request-form.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/approval-request-form/approval-request-form.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/components/review-request/review-request.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/review-request/review-request.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/components/list-popup/list-popup.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/list-popup/list-popup.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/components/approval-requests/approval-requests.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/approval-requests/approval-requests.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/components/dashboard/dashboard.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/dashboard/dashboard.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/components/update-designation-hierarchy/update-designation-hierarchy.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/update-designation-hierarchy/update-designation-hierarchy.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/components/add-course/add-course.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/add-course/add-course.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/modules/shared/services/role-mapping.service.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/gap-analysis-recommended-course/gap-analysis-recommended-course.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/gap-analysis-recommended-course/gap-analysis-recommended-course.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/modules/shared/pipes/order-by-name.pipe.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/modules/upload-document-page/progress-dialog/progress-dialog.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/modules/upload-document-page/upload-dialog/upload-dialog.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/modules/upload-document-page/upload-dialog/upload-dialog.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/modules/upload-document-page/upload-document-page.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/modules/upload-document-page/upload-document-page.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/modules/shared/constant/app.constant.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/modules/shared/services/event.service.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/delete-role-mapping-popup/delete-role-mapping-popup.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/delete-role-mapping-popup/delete-role-mapping-popup.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/components/role-mapping-generation/role-mapping-generation.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/role-mapping-generation/role-mapping-generation.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/components/edit-cbp-plan/edit-cbp-plan.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/edit-cbp-plan/edit-cbp-plan.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/components/suggest-more-courses/suggest-more-courses.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/suggest-more-courses/suggest-more-courses.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/components/generate-course-recommendation/generate-course-recommendation.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/generate-course-recommendation/generate-course-recommendation.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/components/view-cbp-plan/view-cbp-plan.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/view-cbp-plan/view-cbp-plan.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/components/delete-role-mapping/delete-role-mapping.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/delete-role-mapping/delete-role-mapping.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/components/add-personalisation/add-personalisation.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/add-personalisation/add-personalisation.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/components/view-course-recommendation/view-course-recommendation.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/view-course-recommendation/view-course-recommendation.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/components/view-final-cbp-plan/view-final-cbp-plan.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/view-final-cbp-plan/view-final-cbp-plan.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/components/add-designation/add-designation.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/add-designation/add-designation.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/components/role-mapping-list/role-mapping-list.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/components/role-mapping-list/role-mapping-list.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/modules/initial-screen/initial-screen.component.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/modules/initial-screen/initial-screen.component.html","../../../../library/sunbird-cb/cbp-ai/src/lib/pipe-public-URL/pipe-public-URL.pipe.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/pipe-public-URL/pipe-public-URL.module.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/modules/shared/directives/clickoutside.directive.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/modules/shared/directives/directive.module.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/ai-cbp-routing.module.ts","../../../../library/sunbird-cb/cbp-ai/src/lib/ai-cbp.module.ts","../../../../library/sunbird-cb/cbp-ai/src/public-api.ts","../../../../library/sunbird-cb/cbp-ai/src/sunbird-cb-cbp-ai.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AiCbpService {\n\n constructor() { }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-ai-cbp',\n templateUrl: './ai-cbp.component.html',\n styles: [\n ]\n})\nexport class AiCbpComponent {\n constructor() {\n }\n\n}\n","<router-outlet></router-outlet>","import { APP_BASE_HREF } from '@angular/common'\n// import { retry } from 'rxjs/operators'\nimport { HttpClient, HttpHeaders } from '@angular/common/http'\nimport { Inject, Injectable } from '@angular/core'\n/* tslint:disable */\nimport _ from 'lodash'\nimport { map } from 'rxjs/operators'\nimport { Observable, Subscription } from 'rxjs'\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class InitService {\n\n baseUrl: string\n configDetails: any\n\n constructor(\n private http: HttpClient,\n ) {\n\n }\n\n async init() {\n await this.setConfiDetails()\n }\n\n private async setConfiDetails(configDetails: any = null): Promise<any> {\n if (configDetails) {\n this.configDetails = configDetails\n this.baseUrl = configDetails.portalURL\n } else {\n try {\n\n if (this.configDetails) {\n return this.configDetails\n }\n const response = await this.http.get<any>('assets/jsonfiles/configurations.json').toPromise()\n if (response) {\n this.configDetails = response\n this.baseUrl = response.portalURL\n }\n } \n catch(e) {\n throw new Error('could not fetch configurations')\n }\n }\n }\n}\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\n//Injectable\nimport { HostListener, Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { map } from 'rxjs/operators'\nimport { InitService } from './init.service';\n// import configuration from '../../../../assets/jsonfiles/configurations.json'\n\nconst API_END_POINTS = {\n FETCH_COURSES: 'api/v1/course/v2/explore',\n FETCH_POSTAL_COURSES: 'api/v1/content/v1/search',\n FETCH_RAILWAY_COURSES: 'api/v1/content/v1/search',\n FETCH_HALL_OF_FAME: 'api/v1/halloffame/read',\n NLW_FORM_READ: 'apis/v1/static/form/v1/read',\n FETCH_TENDERS: 'api/v1/content/v1/search',\n GET_STATE_CENTER: 'cbp-tpc-ai/api/v1/state-center',\n GET_ROLE_MAPPING: 'cbp-tpc-ai/api/v3/role-mapping/generate',\n DELETE_ROLE_MAPPING: 'cbp-tpc-ai/api/v1/role-mapping/delete',\n GET_DEPARTMENT: 'cbp-tpc-ai/api/v1/department/state-center',\n GET_ROLE_MAPPING_BY_STATE_CENTER: 'cbp-tpc-ai/api/v1/role-mapping/state-center',\n GET_ROLE_MAPPING_BY_STATE_CENTER_DEPARTMENT: 'cbp-tpc-ai/api/v1/role-mapping/state-center',\n UPDATE_ROLE_MAPPING: 'cbp-tpc-ai/api/v1/role-mapping',\n GET_RECOMMENDED_COURSE: 'cbp-tpc-ai/api/v1/',\n SAVE_COURSES: 'cbp-tpc-ai/api/v1/cbp-plan/save',\n GET_COURSES: 'cbp-tpc-ai/api/v1/cbp-plan',\n UPDATE_COURSES: 'cbp-tpc-ai/api/v1/cbp-plan',\n IGOT_SUGGESTED_COURSE: 'api/v1/content/v1/search',\n SAVE_COURSE_SUGGESTED_COURSE: 'cbp-tpc-ai/api/v1/course/suggestions/save',\n SUGGESTED_COURSE_LIST: 'cbp-tpc-ai/api/v1/course/suggestions',\n ADD_DESIGNATION: 'cbp-tpc-ai/api/v2/role-mapping/add-designation',\n LOGIN: 'cbp-tpc-ai/api/v1/auth/login',\n LOGOUT: 'cbp-tpc-ai/api/v1/auth/logout',\n DELETE_ROLE_MAPPING_BY_STATE_CENTER: 'cbp-tpc-ai/api/v1/role-mapping',\n ADD_USER_COURSES: 'cbp-tpc-ai/api/v1/user-added-courses',\n GET_USER_COURSES: 'cbp-tpc-ai/api/v1/user-added-courses/role-mapping',\n GET_USER_SELECTED_COURSES: 'cbp-tpc-ai/api/v1/cbp-plan',\n UPLOAD_DOCUMENT: 'cbp-tpc-ai/api/v1/files',\n GET_DOCUMENTS: 'cbp-tpc-ai/api/v1/files',\n DELETE_FILE: 'cbp-tpc-ai/api/v1/files',\n TRIGGER_FILE_SUMMARY: 'cbp-tpc-ai/api/v1/files',\n DOWNLOAD_FILE: 'cbp-tpc-ai/api/v1/files',\n DELETE_SUMMARY: 'cbp-tpc-ai/api/v1/files',\n GET_USER_PROFILE: 'cbp-tpc-ai/api/v1/users/me',\n GET_USER_RECOMMENED_COURSES: 'cbp-tpc-ai/api/v1/course-recommendations',\n DOWNLOAD_PDF: 'cbp-tpc-ai/api/v1/reports/cbp-plan/download',\n DOWNLOAD_PDF_ACBP: 'cbp-tpc-ai/api/v1/reports/acbp-plan/download',\n CENTER_BASED_MINISTRY: 'cbp-tpc-ai/api/v1/department/state-center',\n DOWNLOAD_COURSE_RECOMMENDATION: 'cbp-tpc-ai/api/v1/reports/course-recommendations/download',\n DELETE_COURSE_RECOMMENDATION: 'cbp-tpc-ai/api/v1/cbp-plan',\n UPDATE_DESIGNATION_HIERARCHY: 'cbp-tpc-ai/api/v1/role-mapping/reorder',\n SEARCH_PUBLIC_DESIGNATION: 'apis/public/v8/designation/search',\n DASHBOARD_ADMIN: 'cbp-tpc-ai/api/v1/dashboard/cbp-dashboard-metrics',\n GAP_ANALYSIS_ADMIN: 'cbp-tpc-ai/api/v1/dashboard/gap-analysis',\n DASHBOARD_PUBLIC: 'cbp-tpc-ai/api/v1/dashboard/my-dashboard-metrics',\n GAP_ANALYSIS_PUBLIC: 'cbp-tpc-ai/api/v1/dashboard/my-gap-analysis',\n MATCHED_ROLE_MAPPING: 'cbp-tpc-ai/api/v1/role-mapping/match-designations',\n GET_APPROVAL_REQUESTS: 'cbp-tpc-ai/api/v1/approval-requests/list',\n SEARCH_PUBLIC_MDO: 'cbp-tpc-ai/api/v1/approval-requests/mdo-admins',\n SAVE_APPROVAL_REQUEST:'cbp-tpc-ai/api/v1/approval-requests/send',\n VIEW_APPROVAL_REQUEST: 'cbp-tpc-ai/api/v1/approval-requests',\n REVOKE_APPROVAL_REQUEST: 'cbp-tpc-ai/api/v1/approval-requests',\n\n}\n\n\n\n// @Directive()\n@Injectable({\n providedIn: 'root'\n})\n\nexport class SharedService {\n cbpPlanFinalObj: any = {}\n baseUrl: string\n configDetails: any\n screenWidth: number;\n headers: any\n summaryTriggerExecuted = new Subject()\n loginSuccess = new Subject()\n checkRoleMappingFormValidation = new Subject()\n updateDesignationHierarchySubject = new Subject()\n @HostListener('window:resize', ['$event'])\n onResize(event) {\n this.screenWidth = event.target.innerWidth;\n }\n\n constructor(\n private http: HttpClient,\n private initSvc: InitService,\n ) {\n if (initSvc && this.initSvc.baseUrl && this.initSvc.configDetails) {\n this.baseUrl = this.initSvc.baseUrl\n this.configDetails = this.initSvc.configDetails\n } else {\n this.setConfiDetails()\n }\n this.screenWidth = window.innerWidth;\n const storageData: any = JSON.parse(localStorage.getItem('loginData'))\n console.log('storageData--', storageData)\n this.headers = new HttpHeaders({\n 'Authorization': `Bearer ${storageData?.access_token}`\n });\n }\n\n setConfiDetails(configDetails: any = null) {\n if (configDetails) {\n this.configDetails = configDetails\n this.baseUrl = configDetails.portalURL\n } else {\n this.getConfigDetails().subscribe((response: any) => {\n this.configDetails = response\n this.baseUrl = response.portalURL\n })\n }\n }\n getConfig() {\n if (this.configDetails) {\n return this.configDetails;\n }\n return null;\n }\n getConfigDetails(): Observable<any> {\n\n return this.http.get<any>('assets/jsonfiles/configurations.json');\n }\n\n\n\n getcourses() {\n return this.http.get<any>(`${this.baseUrl}${API_END_POINTS.FETCH_COURSES}`)\n .pipe(map((response: any) => {\n return this.formateFeatureCourses(response.result.content)\n }))\n }\n\n getPostalcourses() {\n return this.http.get<any>(`${this.baseUrl}${API_END_POINTS.FETCH_POSTAL_COURSES}`)\n .pipe(map((response: any) => {\n return this.formateFeatureCourses(response.result.content)\n }))\n }\n\n getRailwaycourses() {\n return this.http.get<any>(`${this.baseUrl}${API_END_POINTS.FETCH_RAILWAY_COURSES}`)\n .pipe(map((response: any) => {\n return this.formateFeatureCourses(response.result.content)\n }))\n }\n\n getHallOfFame() {\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.FETCH_HALL_OF_FAME}`, null)\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n formateFeatureCourses(featureCourses: any) {\n const formatedFeatureCourses = [];\n const formatedNewsroom = [];\n const formatedPhotogallary = [];\n const formatedTestimonial = [];\n if (featureCourses) {\n featureCourses.forEach(course => {\n if (course.primaryCategory === 'Course') {\n const formatedCourse = {\n posterImage: course.posterImage,\n organisation: course.organisation[0] ? course.organisation[0] : 'Karmayogi Bharat',\n name: course.name,\n description: course.description,\n identifier: course.identifier,\n alt: course.name,\n creatorLogo: course.creatorLogo || '',\n duration: this.timeConvert(course.duration),\n }\n formatedFeatureCourses.push(formatedCourse)\n }\n else if (course.resourceCategory === 'Newsroom') {\n const formatedCourse = {\n posterImage: course.posterImage,\n name: course.name,\n description: course.description,\n identifier: course.identifier,\n alt: course.name,\n cloudStorageKey: `${this.baseUrl}assets/public/${course.cloudStorageKey}`\n }\n formatedNewsroom.push(formatedCourse)\n }\n else if (course.resourceCategory === 'Photo Gallery') {\n const formatedCourse = {\n name: course.name,\n description: course.description,\n identifier: course.identifier,\n alt: course.name,\n cloudStorageKey: `${this.baseUrl}assets/public/${course.cloudStorageKey}`\n }\n formatedPhotogallary.push(formatedCourse)\n }\n else if (course.resourceCategory === 'Testimonials') {\n const formatedCourse = {\n name: course.name,\n description: course.description,\n identifier: course.identifier,\n alt: course.name,\n cloudStorageKey: `${this.baseUrl}assets/public/${course.cloudStorageKey}`,\n mimeType: course.mimeType,\n posterImage: course.posterImage,\n artifactUrl: course.artifactUrl,\n }\n formatedTestimonial.push(formatedCourse)\n }\n });\n }\n return { course: formatedFeatureCourses, newsroom: formatedNewsroom, gallary: formatedPhotogallary, testimonils: formatedTestimonial }\n }\n\n timeConvert(duration: number) {\n if (duration) {\n var num = duration;\n var hours = (num / 3600);\n var rhours = Math.floor(hours);\n var minutes = (hours - rhours) * 60;\n var rminutes = Math.round(minutes);\n if (rminutes === 0) {\n return rhours + \"h\";\n } else if (rhours === 0) {\n return rminutes + \"m\"\n }\n return rhours + \"h \" + rminutes + \"m\";\n } else {\n return 0;\n }\n }\n\n getClientList() {\n return this.http.get('./assets/jsonfiles/client-list.json');\n }\n\n getTenders() {\n const body = {\n request: {\n filters: {\n primaryCategory: [\"tender\"],\n status: { \"!=\": \"Retired\" }\n },\n facets: [\"mimeType\"],\n sortBy: { createdOn: \"Desc\" }\n }\n }\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.FETCH_TENDERS}`, body)\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n getNotifications() {\n const body = {\n request: {\n filters: {\n primaryCategory: [\"notification\"],\n status: { \"!=\": \"Retired\" }\n },\n facets: [\"mimeType\"],\n sortBy: { createdOn: \"desc\" }\n }\n }\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.FETCH_TENDERS}`, body)\n .pipe(map((response: any) => {\n return response\n }))\n }\n getFormReadData(req: any) {\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.NLW_FORM_READ}`, req)\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n\n getMinistryData(ministryType) {\n let sub_org_type = ''\n if (ministryType == 'ministry') {\n sub_org_type = 'ministry'\n } else {\n sub_org_type = 'state'\n }\n const storageData: any = JSON.parse(localStorage.getItem('loginData'))\n console.log('storageData--', storageData)\n this.headers = new HttpHeaders({\n 'Authorization': `Bearer ${storageData?.access_token}`\n });\n const headers = this.headers\n return this.http.get<any>(`${this.baseUrl}${API_END_POINTS.GET_STATE_CENTER}/?sub_org_type=${sub_org_type}`, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n generateRoleMapping(reqBody, files?: File | File[]) {\n console.log('reqBody--', reqBody);\n console.log('files---', files)\n const formData = new FormData();\n\n // Add required fields\n if (reqBody.state_center_id) {\n formData.append('state_center_id', reqBody.state_center_id);\n }\n\n if (reqBody.state_center_name) {\n formData.append('state_center_name', reqBody.state_center_name);\n }\n\n if (reqBody.department_id) {\n formData.append('department_id', reqBody.department_id);\n }\n\n if (reqBody.department_name) {\n formData.append('department_name', reqBody.department_name);\n }\n\n if (reqBody.instruction) {\n formData.append('instruction', reqBody.instruction);\n }\n\n const cbpData: any = JSON.parse(localStorage.getItem('cbpPlanFinalObj') || '{}');\n const orgType =\n cbpData?.ministry?.sbOrgType ||\n cbpData?.org_type ||\n '';\n if (orgType) {\n formData.append('org_type', orgType);\n }\n\n // Handle multiple or single file\n if (files) {\n if (Array.isArray(files)) {\n files.forEach((file: File) => {\n formData.append('additional_document', file, file.name);\n });\n } else {\n // Single file\n formData.append('additional_document', files, files.name);\n }\n }\n\n // Debug FormData content\n console.log(\"FormData contents:\");\n formData.forEach((value, key) => {\n if (value instanceof File) {\n console.log(`${key}: FILE -> ${value.name} (${value.size} bytes)`);\n } else {\n console.log(`${key}: ${value}`);\n }\n });\n\n const headers = this.headers;\n\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.GET_ROLE_MAPPING}`, formData, { headers })\n .pipe(map((response: any) => {\n return response;\n }));\n }\n\n\n\n getDepartmentList(ministryId) {\n const storageData: any = JSON.parse(localStorage.getItem('loginData'))\n this.headers = new HttpHeaders({\n 'Authorization': `Bearer ${storageData?.access_token}`\n });\n const headers = this.headers\n return this.http.get<any>(`${this.baseUrl}${API_END_POINTS.GET_DEPARTMENT}/${ministryId}`, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n getRoleMappingByStateCenter(state_center_id) {\n const headers = this.headers\n return this.http.get<any>(`${this.baseUrl}${API_END_POINTS.GET_ROLE_MAPPING_BY_STATE_CENTER}/${state_center_id}?load_cbp_plans=true`, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n getRoleMappingByStateCenterAndDepartment(state_center_id, department_id) {\n const headers = this.headers\n return this.http.get<any>(`${this.baseUrl}${API_END_POINTS.GET_ROLE_MAPPING_BY_STATE_CENTER}/${state_center_id}/department/${department_id}?load_cbp_plans=true`, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n updateRoleMapping(role_mapping_id, reqBody) {\n const headers = this.headers\n return this.http.put<any>(`${this.baseUrl}${API_END_POINTS.UPDATE_ROLE_MAPPING}/${role_mapping_id}`, reqBody, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n deleteRoleMapping(role_mapping_id) {\n const headers = this.headers\n return this.http.delete<any>(`${this.baseUrl}${API_END_POINTS.UPDATE_ROLE_MAPPING}/${role_mapping_id}`, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n getRecommendedCourse(role_mapping_id) {\n const headers = this.headers\n let reqBody = {\n role_mapping_id: role_mapping_id\n }\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.GET_RECOMMENDED_COURSE}/course-recommendations/generate`, reqBody, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n deleteCourseRecommendations(roleMapId: string) {\n const headers = this.headers\n return this.http.delete<any>(`${this.baseUrl}${API_END_POINTS.GET_RECOMMENDED_COURSE}/course-recommendations/role-mapping/${roleMapId}`, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n saveCourse(reqBody) {\n const headers = this.headers\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.SAVE_COURSES}`, reqBody, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n updateCourse(reqBody, cbp_plan_id) {\n const headers = this.headers\n return this.http.put<any>(`${this.baseUrl}${API_END_POINTS.UPDATE_COURSES}/${cbp_plan_id}`, reqBody, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n getCourse(role_mapping_id) {\n const headers = this.headers\n return this.http.get<any>(`${this.baseUrl}${API_END_POINTS.GET_COURSES}?role_mapping_id=${role_mapping_id}`, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n getIGOTSuggestedCourses(reqBody) {\n // Use the reqBody parameter passed from the component\n // If no reqBody is provided, use default structure\n let req = reqBody || {\n \"request\": {\n \"filters\": {\n \"primaryCategory\": [\"Course\"],\n \"status\": [\"Live\"],\n \"courseCategory\": [\"Course\"]\n },\n \"fields\": [\"posterImage\", \"description\", \"name\"],\n \"limit\": 12,\n \"offset\": 0\n }\n };\n\n console.log('getIGOTSuggestedCourses final request:', JSON.stringify(req, null, 2));\n\n const headers = this.headers\n return this.http.post<any>(`https://portal.igotkarmayogi.gov.in/api/content/v1/search`, req, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n getSuggestedCourses(role_mapping_id) {\n const headers = this.headers\n return this.http.get<any>(`${this.baseUrl}${API_END_POINTS.SUGGESTED_COURSE_LIST}/${role_mapping_id}`, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n saveSuggestedCourse(reqBody) {\n const headers = this.headers\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.SAVE_COURSE_SUGGESTED_COURSE}`, reqBody, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n addDesignation(reqBody) {\n const headers = this.headers\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.ADD_DESIGNATION}`, reqBody, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n performLogin(reqBody) {\n const body = new HttpParams()\n .set('username', reqBody.username)\n .set('password', reqBody.password);\n console.log('in login uat')\n const headers = new HttpHeaders({\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'Accept': 'application/json'\n });\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.LOGIN}`, body.toString(), { headers })\n .pipe(\n map((response: any) => {\n return response;\n })\n );\n }\n\n logout() {\n const headers = this.headers\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.LOGOUT}`, '', { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n setCBPPlanLocalStorage() {\n localStorage.setItem('cbpPlanFinalObj', JSON.stringify(this.cbpPlanFinalObj))\n }\n\n getCBPPlanLocalStorage() {\n let cbpPlanFinalObj = JSON.parse(localStorage.getItem('cbpPlanFinalObj'))\n return cbpPlanFinalObj\n }\n\n checkIfLogin() {\n let flag = false\n let loginData = localStorage.getItem('loginData')\n if (loginData && JSON.parse(loginData)['access_token']) {\n flag = true\n } else {\n flag = false\n }\n return flag\n }\n\n deleteRoleMappingByStateAndDepartment(state_center_id, department_id) {\n const headers = this.headers\n let url = ''\n if (department_id && department_id !== 'null' && department_id !== 'undefined' && department_id !== undefined && department_id !== null) {\n url = `${this.baseUrl}${API_END_POINTS.DELETE_ROLE_MAPPING_BY_STATE_CENTER}?state_center_id=${state_center_id}&department_id=${department_id}`\n } else {\n url = `${this.baseUrl}${API_END_POINTS.DELETE_ROLE_MAPPING_BY_STATE_CENTER}?state_center_id=${state_center_id}`\n }\n\n return this.http.delete<any>(url, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n addUserCourse(reqBody) {\n const headers = this.headers\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.ADD_USER_COURSES}`, reqBody, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n getUserCourse(role_mapping_id) {\n const headers = this.headers\n return this.http.get<any>(`${this.baseUrl}${API_END_POINTS.GET_USER_COURSES}/${role_mapping_id}`, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n getCompetencyJson() {\n const headers = this.headers\n return this.http.get<any>(`${this.baseUrl}/training-pla-ai/assets/jsonfiles/competencies.json`, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n // this.http.get<any[]>('/assets/jsonfiles/competencies.json')\n }\n\n convert(seconds: number): string {\n if (!seconds || seconds <= 0) {\n return 'N/A';\n }\n\n const totalSeconds = Math.floor(seconds);\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const remainingSeconds = totalSeconds % 60;\n\n if (hours > 0) {\n // For durations with hours, show hours and minutes (e.g., \"3h 10m\")\n if (minutes > 0) {\n return `${hours}h ${minutes}m`;\n } else {\n return `${hours}h`;\n }\n } else if (minutes > 0) {\n // For durations under an hour, show minutes and seconds (e.g., \"58m 3s\")\n if (remainingSeconds > 0) {\n return `${minutes}m ${remainingSeconds}s`;\n } else {\n return `${minutes}m`;\n }\n } else {\n // For durations under a minute, show seconds only\n return `${remainingSeconds}s`;\n }\n }\n\n getUserProfile() {\n const headers = this.headers\n return this.http.get<any>(`${this.baseUrl}${API_END_POINTS.GET_USER_PROFILE}`, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n getUserRecommendationCourse(role_mapping_id) {\n const headers = this.headers\n return this.http.get<any>(`${this.baseUrl}${API_END_POINTS.GET_USER_SELECTED_COURSES}?role_mapping_id=${role_mapping_id}`, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n downloadPdf(state_center_id: string, context: string, language: string) {\n const endpoint =\n context === 'acbp'\n ? API_END_POINTS.DOWNLOAD_PDF_ACBP\n : API_END_POINTS.DOWNLOAD_PDF;\n const url = `${this.baseUrl}${endpoint}?state_center_id=${state_center_id}*&language=${language}`;\n const headers = this.headers\n\n return this.http.get(url, {\n headers,\n observe: 'response',\n responseType: 'blob'\n }).subscribe((res: any) => {\n\n const contentDisposition = res.headers.get('content-disposition');\n console.log('contentDisposition', res.headers)\n let filename = `CBP_Report_${state_center_id}.pdf`;\n\n if (contentDisposition) {\n const match = contentDisposition.match(/filename=\"?([^\"]+)\"?/);\n if (match && match[1]) {\n filename = match[1];\n }\n }\n\n // Create a blob URL and download\n const blob = new Blob([res.body], { type: 'application/pdf' });\n const downloadUrl = window.URL.createObjectURL(blob);\n\n const a = document.createElement('a');\n a.href = downloadUrl;\n a.download = filename;\n a.click();\n\n URL.revokeObjectURL(downloadUrl);\n });\n }\n\n downloadPdfForDepartment(state_center_id, department_id: string, context: string, language: string) {\n const endpoint =\n context === 'acbp'\n ? API_END_POINTS.DOWNLOAD_PDF_ACBP\n : API_END_POINTS.DOWNLOAD_PDF;\n const url = `${this.baseUrl}${endpoint}?state_center_id=${state_center_id}&department_id=${department_id}&language=${language}`;\n const headers = this.headers\n\n return this.http.get(url, {\n headers,\n observe: 'response',\n responseType: 'blob'\n }).subscribe((res: any) => {\n\n const contentDisposition = res.headers.get('content-disposition');\n console.log('contentDisposition', res.headers)\n let filename = `CBP_Report_${state_center_id}_${department_id}.pdf`;\n\n if (contentDisposition) {\n const match = contentDisposition.match(/filename=\"?([^\"]+)\"?/);\n if (match && match[1]) {\n filename = match[1];\n }\n }\n\n // Create a blob URL and download\n const blob = new Blob([res.body], { type: 'application/pdf' });\n const downloadUrl = window.URL.createObjectURL(blob);\n\n const a = document.createElement('a');\n a.href = downloadUrl;\n a.download = filename;\n a.click();\n\n URL.revokeObjectURL(downloadUrl);\n });\n }\n\n getCenterBasedDepartment(state_center_id) {\n // let reqBody = { \"request\": { \"filters\": { \"status\": 1, \"ministryOrStateType\": \"ministry\", \"ministryOrStateId\": state_center_id}, \"sort_by\": { \"createdDate\": \"desc\" }, \"limit\": 9999, \"offset\": 0, \"fields\": [\"identifier\", \"orgName\", \"description\", \"parentOrgName\", \"ministryOrStateId\", \"ministryOrStateType\", \"ministryOrStateName\", \"sbOrgSubType\"] } }\n const headers = this.headers\n return this.http.get<any>(`${this.baseUrl}${API_END_POINTS.CENTER_BASED_MINISTRY}/${state_center_id}?limit=9999&offset=0&sub_org_type=ministry`, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n\n downloadPdfForCourseRecommendation(state_center_id) {\n\n const url = `${this.baseUrl}${API_END_POINTS.DOWNLOAD_COURSE_RECOMMENDATION}?role_mapping_id=${state_center_id}`;\n const headers = this.headers\n\n return this.http.get(url, {\n headers,\n observe: 'response',\n responseType: 'blob'\n }).subscribe((res: any) => {\n\n const contentDisposition = res.headers.get('content-disposition');\n let filename = `COURSE_RECOMMENDATION_Report_${state_center_id}.pdf`;\n\n if (contentDisposition) {\n const match = contentDisposition.match(/filename=\"?([^\"]+)\"?/);\n if (match && match[1]) {\n filename = match[1];\n }\n }\n\n // Create a blob URL and download\n const blob = new Blob([res.body], { type: 'application/pdf' });\n const downloadUrl = window.URL.createObjectURL(blob);\n\n const a = document.createElement('a');\n a.href = downloadUrl;\n a.download = filename;\n a.click();\n\n URL.revokeObjectURL(downloadUrl);\n });\n }\n\n uploadDocument(reqBody, file?: File) {\n const storageData: any = JSON.parse(localStorage.getItem('loginData'))\n // console.log('storageData--', storageData)\n this.headers = new HttpHeaders({\n 'Authorization': `Bearer ${storageData?.access_token}`\n });\n const headers = this.headers\n\n // Add required fields\n // if (reqBody.state_center_id) {\n // formData.append('state_center_id', reqBody.state_center_id);\n // }\n\n // if (reqBody.department_id) {\n // formData.append('department_id', reqBody.department_id);\n // }\n\n\n\n // if(reqBody.documentName) {\n // formData.append('document_name', reqBody.documentName);\n // }\n // Add file if provided\n // if (file) {\n // formData.append('file', file);\n // }\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.UPLOAD_DOCUMENT}`, reqBody, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n getUploadedDocuments(reqBody) {\n const headers = this.headers;\n let params = new HttpParams();\n\n Object.entries(reqBody).forEach(([key, value]) => {\n if (value !== null && value !== undefined) {\n params = params.set(key, value.toString());\n }\n });\n\n return this.http.get<any>(`${this.baseUrl}${API_END_POINTS.GET_DOCUMENTS}`, {\n headers,\n params\n }).pipe(\n map((response: any) => {\n return response;\n })\n );\n }\n\n deleteFile(fileId) {\n const headers = this.headers\n return this.http.delete<any>(`${this.baseUrl}${API_END_POINTS.DELETE_FILE}/${fileId}`, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n triggerFileSummary(fileId) {\n const storageData: any = JSON.parse(localStorage.getItem('loginData'))\n // console.log('storageData--', storageData)\n this.headers = new HttpHeaders({\n 'Authorization': `Bearer ${storageData?.access_token}`\n });\n const headers = this.headers\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.DELETE_FILE}/${fileId}/summary`, {}, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n downloadFile(fileId: string): Observable<Blob> {\n const headers = this.headers;\n\n return this.http.get(`${this.baseUrl}${API_END_POINTS.DOWNLOAD_FILE}/${fileId}/download`, {\n headers,\n responseType: 'blob'\n });\n }\n\n deleteSummary(fileId) {\n const headers = this.headers\n return this.http.delete<any>(`${this.baseUrl}${API_END_POINTS.DELETE_SUMMARY}/${fileId}/summary`, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n deleteRecommendedCourse(roleMappingId: string, courseIdentifier: string) {\n const headers = this.headers;\n\n return this.http.delete<any>(\n `${this.baseUrl}${API_END_POINTS.DELETE_COURSE_RECOMMENDATION}/${roleMappingId}/course/${courseIdentifier}`,\n { headers }\n );\n }\n\n getCbpPlansWithSelectedCourses(): any[] {\n const source = this.cbpPlanFinalObj;\n\n return source?.role_mapping_generation\n ?.flatMap((role: any) => role.cbp_plans || [])\n ?.filter(\n (plan: any) =>\n Array.isArray(plan.selected_courses) &&\n plan.selected_courses.length > 0\n ) || [];\n }\n\n getAdditionalParameterforSuggestedCourses(identifiers) {\n const headers = this.headers\n let reqBody = {\n \"request\": {\n \"filters\": {\n \"identifier\": identifiers,\n\n\n \"status\": [\n \"Live\"\n ]\n },\n \"fields\": [\n \"name\",\n \"language\",\n \"identifier\",\n \"avgRating\"\n ],\n \"limit\": 1000,\n \"offset\": 0,\n \"sort_by\": {}\n }\n }\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.SUGGESTED_COURSE_LIST}`, reqBody, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n updateDesignationHierarchy(reqBody) {\n const headers = this.headers\n return this.http.put<any>(`${this.baseUrl}${API_END_POINTS.UPDATE_DESIGNATION_HIERARCHY}`, reqBody, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n searchPublicDesignation(reqBody) {\n const headers = this.headers\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.SEARCH_PUBLIC_DESIGNATION}`, reqBody, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n getDashboardAdmin(reqBody) {\n const headers = this.headers\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.DASHBOARD_ADMIN}`, reqBody, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n getDashboardGapAnalysisAdmin(reqBody) {\n const headers = this.headers\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.GAP_ANALYSIS_ADMIN}`, reqBody, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n getDashboardPublic(reqBody) {\n const headers = this.headers\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.DASHBOARD_PUBLIC}`, reqBody, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n getDashboardGapAnalysisPublic(reqBody) {\n const headers = this.headers\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.GAP_ANALYSIS_PUBLIC}`, reqBody, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n getMatchedRoleMapping(reqBody) {\n const headers = this.headers\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.MATCHED_ROLE_MAPPING}`, reqBody, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n getApprovalRequests(reqBody) {\n const headers = this.headers\n return this.http.get<any>(`${this.baseUrl}${API_END_POINTS.GET_APPROVAL_REQUESTS}`, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n saveApprovalRequest(reqBody) {\n const headers = this.headers\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.SAVE_APPROVAL_REQUEST}`, reqBody, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n searchPublicmdo(reqBody) {\n const headers = this.headers\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.SEARCH_PUBLIC_MDO}`, reqBody, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n viewApprovalRequests(request_id) {\n const headers = this.headers\n return this.http.get<any>(`${this.baseUrl}${API_END_POINTS.VIEW_APPROVAL_REQUEST}/${request_id}`, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n revokeApprovalRequest(reqBody) {\n const headers = this.headers\n return this.http.post<any>(`${this.baseUrl}${API_END_POINTS.REVOKE_APPROVAL_REQUEST}`, reqBody, { headers })\n .pipe(map((response: any) => {\n return response\n }))\n }\n\n}\n\n","import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ChangeDetectorRef, Component, ElementRef, Inject, OnInit, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup, FormArray, Validators, FormControl } from '@angular/forms';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { catchError, debounceTime, distinctUntilChanged, finalize, startWith } from 'rxjs/operators';\nimport _ from 'lodash'\nimport { forkJoin, of } from 'rxjs';\nimport { SharedService } from '../../modules/shared/services/shared.service';\n@Component({\n selector: 'app-approval-request-form',\n templateUrl: './approval-request-form.component.html',\n styleUrls: ['./approval-request-form.component.scss']\n})\nexport class ApprovalRequestFormComponent {\n approvalRequestForm: FormGroup;\n cbpPlanFinalObj: any\n loading = false\n @ViewChild('mdo', { read: ElementRef }) mdoRef?: ElementRef\n mdoFilterEnable = false\n isLoadingMoremdos = false;\n mdoOffset = 0\n odcsmdoCount = 0\n defaultSearchmdoCount = 0\n mdoListLoadCount = 50\n mdoDefaultLoadCount = 50\n noMoreLegacymdos = false\n mdoSearchText = ''\n mdoInitInProgress = false\n scrollListenerAttached = false\n masterData: any = {}\n role_mapping_ids = []\n constructor(public dialogRef: MatDialogRef<ApprovalRequestFormComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private fb: FormBuilder,\n private cdRef: ChangeDetectorRef,\n private sharedService: SharedService,\n private snackBar: MatSnackBar) {\n this.role_mapping_ids = data\n this.masterData = {\n mdoBackup: [],\n mdoFiltered: [], // filtered search results\n };\n\n }\n\n ngOnInit() {\n this.initializeForm();\n console.log('this.role_mapping_ids--',this.role_mapping_ids)\n\n const searchControl = this.approvalRequestForm.get('searchmdo');\n\n if (searchControl) {\n searchControl.valueChanges\n .pipe(\n debounceTime(100),\n distinctUntilChanged(),\n startWith('')\n )\n .subscribe(res => {\n const txt = res?.toString()?.trim() ?? '';\n\n if (txt?.length) {\n this.mdoFilterEnable = true;\n this.masterData.mdoFiltered =\n this.masterData.mdoBackup.filter((item: any) =>\n item.name.toLowerCase().includes(txt.toLowerCase())\n );\n\n // show initial page of filtered results\n this.masterData.mdo = this.masterData.mdoFiltered.slice(0, this.mdoListLoadCount);\n\n } else {\n this.mdoFilterEnable = false;\n\n // show first page from backup\n this.masterData.mdo = this.masterData.mdoBackup.slice(0, this.mdoDefaultLoadCount);\n this.mdoListLoadCount = this.mdoDefaultLoadCount;\n this.mdoOffset = 0;\n }\n });\n }\n\n\n console.log(this.masterData['mdoBackup'])\n if (!this.masterData['mdoBackup'].length) {\n this.getmdoSafe()\n }\n\n }\n\n private getmdoSafe(): void {\n if (this.mdoInitInProgress || this.isLoadingMoremdos) {\n return\n }\n this.mdoInitInProgress = true\n this.getmdo()\n }\n\n initializeForm() {\n this.approvalRequestForm = this.fb.group({\n mdo_name: ['', Validators.required],\n request_name: ['', Validators.required],\n searchmdo: [''],\n });\n }\n\n\n\n cancelForm() {\n this.dialogRef.close()\n }\n\n savemdo() {\n const selectedmdo: string = this.approvalRequestForm.get('mdo_name')?.value;\n\n if (!selectedmdo) {\n this.snackBar.open('Please select an mdo leader/admin', 'X', { duration: 3000 });\n return;\n }\n\n this.loading = true;\n\n const baseObj = {\n state_center_id: this.sharedService.cbpPlanFinalObj.ministry.identifier,\n // state_center_name: this.sharedService.cbpPlanFinalObj.ministry.orgName,\n role_mapping_ids: this.role_mapping_ids.map((item: any) => item.id),\n request_name: this.approvalRequestForm.value.request_name,\n };\n\n if (this.sharedService.cbpPlanFinalObj?.ministry?.sbOrgType === 'state' && this.sharedService.cbpPlanFinalObj.department_name) {\n baseObj['department_id'] = this.sharedService.cbpPlanFinalObj.departments;\n // baseObj['department_name'] = this.sharedService.cbpPlanFinalObj.department_name;\n }\n\n if (this.sharedService.cbpPlanFinalObj?.ministry?.sbOrgType === 'ministry' && this.sharedService.cbpPlanFinalObj.department_name) {\n baseObj['department_id'] = this.sharedService.cbpPlanFinalObj.departments;\n // baseObj['department_name'] = this.sharedService.cbpPlanFinalObj.department_name;\n }\n\n // Create an array of observables, one per mdo\n const req = {\n ...baseObj,\n mdo_id: selectedmdo\n };\n\n this.sharedService.saveApprovalRequest(req)\n .pipe(finalize(() => this.loading = false))\n .subscribe({\n next: () => {\n this.snackBar.open('Request sent successfully', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n this.dialogRef.close('saved');\n },\n error: (error) => {\n console.log('error', error)\n this.snackBar.open((error?.error?.detail || 'Failed to send request'), 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n });\n }\n\n closeDialog() {\n this.dialogRef.close()\n }\n\n getmdo(searchText?: string, offset?: number): void {\n\n // clear any previous debug hooks\n if (!searchText || searchText?.length === 0) {\n // noop\n }\n\n const reqOffset = (typeof offset === 'number') ? offset : this.mdoOffset\n let reqLimit = this.mdoDefaultLoadCount\n const pageIndex = reqLimit > 0 ? Math.floor(reqOffset / reqLimit) : 0\n // if we're requesting from first page, clear the no-more-data guard\n if (pageIndex === 0) {\n this.noMoreLegacymdos = false\n reqLimit = 50\n }\n // const requestBody: any = {\n // filterCriteriaMap: {\n // status: 'Active'\n // },\n // requestedFields: [],\n // pageNumber: pageIndex,\n // pageSize: reqLimit,\n // }\n\n const requestBody: any = {\n \"request\": {\n \"filters\": {\n \"organisations.roles\": [\n \"MDO_LEADER\",\n \"MDO_ADMIN\"\n ],\n \"rootOrgId\": this.sharedService.cbpPlanFinalObj.departments\n },\n \"fields\": [\n \"firstName\",\n \"lastName\",\n \"id\",\n \"rootOrgId\",\n \"organisations\",\n \"roles\"\n ],\n pageNumber: pageIndex,\n pageSize: reqLimit,\n }\n }\n if (searchText?.length) {\n requestBody['searchString'] = searchText\n // when searching, start from first page\n requestBody.pageNumber = 0\n // allow larger page for search if needed\n requestBody.pageSize = pageIndex === 0 ? 50 : this.mdoListLoadCount\n // reset guard when performing a fresh search\n this.noMoreLegacymdos = false\n }\n\n // indicate loading state so scroll handlers don't trigger parallel calls\n this.isLoadingMoremdos = true\n console.log('requestBody', requestBody)\n this.sharedService.searchPublicmdo(requestBody).pipe(finalize(() => {\n this.isLoadingMoremdos = false\n this.mdoInitInProgress = false\n }))\n .subscribe({\n next: (res: any) => {\n const content = _.get(res, 'admins', [])\n console.log('content--', content)\n const mapped = content.map((item: any) => ({\n id: item?.id,\n name: `${item?.first_name} ${item?.last_name}` || '',\n status: item?.status || 'Active',\n role_type: item?.role_type,\n department_name: item?.department_name\n\n }))\n\n // total count may be present in different keys depending on API version.\n // Prefer 'result.result.totalcount' (legacy lower-case) then data.totalCount, then totalCount\n const total = _.get(res, 'count', _.get(res, 'count', _.get(res, 'count', 0)))\n this.defaultSearchmdoCount = total\n\n // If offset is zero (first page) replace backup, otherwise append + dedupe\n if (!this.masterData['mdoBackup'] || reqOffset === 0) {\n this.masterData['mdoBackup'] = mapped\n } else {\n const combined = (this.masterData['mdoBackup'] || []).concat(mapped)\n this.masterData['mdoBackup'] = _.uniqBy(combined, (it: any) => (it?.name || '').toLowerCase())\n }\n\n // If server returned no new items, mark as no-more-data to stop further scroll requests\n if (!mapped || mapped?.length === 0) {\n this.noMoreLegacymdos = true\n }\n\n // If we've loaded at least the total count, mark no-more-data\n if (this.defaultSearchmdoCount && (this.masterData['mdoBackup'] || []).length >= this.defaultSearchmdoCount) {\n this.noMoreLegacymdos = true\n }\n\n // Ensure visible list matches the requested display count\n this.masterData['mdo'] = (this.masterData['mdoBackup'] || []).slice(0, this.mdoListLoadCount)\n // loading flag cleared in finalize()\n this.checkCurrentmdoPresent()\n },\n error: () => {\n // Stop further automatic calls on repeated errors to avoid tight loops\n // loading flag cleared in finalize()\n this.noMoreLegacymdos = true\n // this.matSnackBar.open('Unable to fetch mdo details, please try again later!')\n }\n })\n }\ncheckCurrentmdoPresent() {\n const selectedmdo = this.approvalRequestForm.get('mdo_name')?.value;\n\n if (!selectedmdo || !this.masterData?.mdo) return;\n\n const exists = this.masterData.mdo.some(\n (item: any) => item?.name?.toLowerCase() === selectedmdo?.toLowerCase()\n );\n\n if (!exists) {\n const newmdo = {\n name: selectedmdo,\n status: 'Active',\n id: 'custom-' + Date.now()\n };\n\n this.masterData.mdoBackup = this.masterData.mdoBackup || [];\n this.masterData.mdoBackup.unshift(newmdo);\n this.masterData.mdo.unshift(newmdo);\n }\n}\n onmdoDropdownClosed(): void {\n // Keep the mdo value but clear the search input\n const currentmdo = this.approvalRequestForm.get('mdo_name')!.value\n setTimeout(() => {\n if (this.approvalRequestForm.get('searchmdo')) {\n this.approvalRequestForm.get('searchmdo')!.setValue('')\n }\n // Ensure the mdo value remains selected\n if (currentmdo) {\n const mdoControl = this.approvalRequestForm.get('mdo_name');\n if (mdoControl) {\n mdoControl.setValue(currentmdo)\n }\n }\n }, 100)\n }\n\n mdoSearch(evt: any) {\n const searchText = evt?.target?.value\n const txt = (searchText || '').toString().trim()\n if (this.isLoadingMoremdos) return\n\n this.mdoSearchText = txt\n if (txt?.length) {\n this.mdoFilterEnable = true\n this.isLoadingMoremdos = true\n this.getmdo(txt, 0)\n } else if (this.masterData && this.masterData?.mdoBackup) {\n this.masterData.mdo = this.masterData?.mdoBackup.slice(0, this.mdoDefaultLoadCount)\n this.mdoFilterEnable = false\n this.checkCurrentmdoPresent()\n }\n }\n setupScrollListener(opened: boolean): void {\n if (opened) {\n if (!this.scrollListenerAttached) {\n this.scrollListenerAttached = true\n\n this.mdoFilterEnable = false\n this.mdoListLoadCount = this.mdoDefaultLoadCount\n this.mdoOffset = 0\n\n this.isLoadingMoremdos = true\n this.getmdo(undefined, 0)\n\n // Clear search box once\n if (this.approvalRequestForm.get('searchmdo')) {\n this.approvalRequestForm.get('searchmdo')!.setValue('')\n }\n\n setTimeout(() => {\n const searchInput = document.querySelector('.search-input') as HTMLInputElement\n if (searchInput) {\n searchInput.focus()\n }\n }, 100)\n\n // Attach scroll listener safely\n setTimeout(() => {\n const panel = document.querySelector('.mat-select-panel.search-panel') as HTMLElement | null\n if (panel) {\n // align panel width to trigger\n try {\n const triggerEl = this.mdoRef && this.mdoRef.nativeElement as HTMLElement\n if (triggerEl) {\n const rect = triggerEl.getBoundingClientRect()\n // set width and left so panel aligns exactly below the trigger\n panel.style.width = `${Math.round(rect.width)}px`\n // leave left to overlay positioning but nudge if necessary\n // compute left relative to viewport and apply to panel\n const overlayLeft = rect.left\n panel.style.left = `${Math.round(overlayLeft)}px`\n }\n } catch (e) {\n // ignore DOM errors in SSR or unexpected cases\n }\n\n const scrollHandler = this.onmdoSelectScroll.bind(this)\n panel.addEventListener('scroll', scrollHandler, { passive: true })\n }\n }, 150)\n }\n } else {\n // Dropdown closed — reset scroll flag so it can reattach next time\n this.scrollListenerAttached = false\n }\n }\n\n onmdoSelectScroll(event: any): void {\n const element = event?.target\n if (!this.mdoFilterEnable) {\n // Check if user has scrolled to the bottom (with a small threshold)\n if (element.scrollTop + element?.clientHeight >= element?.scrollHeight - 5) {\n // Only load more if not already loading and if there are potentially more items\n if (!this.isLoadingMoremdos) {\n // If org uses IGOT mdo taxonomy, request more from the API by increasing the limit\n if (this.masterData?.mdoBackup?.length > this.masterData?.mdo?.length) {\n // Local pagination: expand the sliced list\n this.isLoadingMoremdos = true\n this.mdoListLoadCount += this.mdoDefaultLoadCount\n // Update the filtered list with more items\n setTimeout(() => {\n this.masterData.mdo = this.masterData?.mdoBackup?.slice(0, this.mdoListLoadCount)\n this.checkCurrentmdoPresent()\n this.isLoadingMoremdos = false\n }, 500) // Small timeout to simulate loading and prevent multiple triggers\n } else {\n // Legacy (server) pagination: request next page if total not reached\n const loadedLegacy = (this.masterData?.mdoBackup || []).length\n if (!this.noMoreLegacymdos && this.defaultSearchmdoCount && loadedLegacy < this.defaultSearchmdoCount) {\n this.isLoadingMoremdos = true\n this.mdoOffset = (this.mdoOffset || 0) + this.mdoDefaultLoadCount\n // increase display count to include newly fetched items\n this.mdoListLoadCount += this.mdoDefaultLoadCount\n this.getmdo(undefined, this.mdoOffset)\n }\n }\n }\n }\n }\n }\n\n get searchmdoControl(): FormControl {\n return this.approvalRequestForm.get('searchmdo') as FormControl;\n }\n\n\n}\n","<div class=\"view-cbp-plan\">\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div>\n <div class=\"heading\">Send For Approval</div>\n </div>\n <div class=\"cursor-pointer\" (click)=\"closeDialog()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n </div>\n <div class=\"section-container\" [formGroup]=\"approvalRequestForm\">\n <mat-card class=\"mt-1\">\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Request Name</p>\n </div>\n <div class=\"mt-4 additional-details\">\n <input type=\"text\" formControlName=\"request_name\" [value]=\"\" placeholder=\"Enter a name for this request...\"\n style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 12px; width:100%;font-size: 14px;font-family: 'Lato';\">\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Select MDO Admin/Leader</p>\n </div>\n <div class=\"section-header mt-4\">\n <!-- <input type=\"text\" formControlName=\"mdo_name\" placeholder=\"Enter mdo\" [value]=\"\"\n style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 12px; width: 100%;font-size: 14px;font-family: 'Lato';\"> -->\n <mat-form-field appearance=\"outline\" class=\"margin-top-s w-full required-select\">\n <mat-select #position formControlName=\"mdo_name\"\n placeholder=\"Select MDO Admin/Leader\" (closed)=\"onmdoDropdownClosed()\"\n panelClass=\"search-panel\" (openedChange)=\"setupScrollListener($event)\">\n\n <!-- Sticky search input container -->\n <div class=\"sticky-search-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"search-input-wrapper\">\n <input type=\"text\" placeholder=\"Search mdo admin/leader\"\n formControlName=\"searchmdo\" class=\"search-input\"\n (keydown)=\"$event.stopPropagation()\"\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation()\"\n (keyup)=\"mdoSearch($event)\" autocomplete=\"off\">\n <button *ngIf=\"searchmdoControl?.value\" type=\"button\" class=\"clear-button\"\n (click)=\"searchmdoControl.setValue('')\">\n ✕ Clear Search\n </button>\n </div>\n </div>\n <!-- Options list -->\n <mat-option [value]=\"mdo?.id\" *ngFor=\"let mdo of masterData?.mdo\">\n {{mdo?.name}}\n </mat-option>\n <!-- Loading indicator -->\n <div *ngIf=\"isLoadingMoremdos\" class=\"loading-indicator\">\n Load More...\n </div>\n <!-- No results message -->\n <mat-option *ngIf=\"(masterData?.mdo )?.length === 0\" disabled>\n <!-- No matches found -->\n <div class=\"mat-error txt-size\">mdo Not Found.</div>\n </mat-option>\n </mat-select>\n <!-- <mat-error class=\"text-xs\"\n *ngIf=\"approvalRequestForm?.get('mdo_name')?.touched && approvalRequestForm?.get('mdo_name')?.invalid\">\n Please select at least one mdo.\n </mat-error> -->\n </mat-form-field>\n </div>\n </div>\n\n \n <!-- <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Upload Document (PDF/Word/Excel/TXT)</p>\n </div>\n <div class=\"file-upload-wrapper\">\n <label for=\"uploadDoc\" class=\"file-upload-label\">\n <span class=\"file-upload-icon\">📎</span>\n <span>{{ uploadedFile?.name || 'Choose a file (PDF, Word, Excel, TXT)' }}</span>\n </label>\n\n <small class=\"file-upload-hint\">Max file size: 25MB</small>\n\n <input id=\"uploadDoc\" type=\"file\" (change)=\"onFileChange($event)\"\n accept=\".pdf,.doc,.docx,.xls,.xlsx,.txt\" class=\"file-upload-input\" />\n\n <div *ngIf=\"uploadError\" class=\"error\">{{ uploadError }}</div>\n </div>\n </div> -->\n\n </mat-card>\n </div>\n <div class=\"popup-footer\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Cancel\" (click)=\"cancelForm()\" />\n </div>\n <div>\n \n <button [disabled]=\"approvalRequestForm?.invalid\"\n [ngClass]=\"approvalRequestForm?.invalid ? 'btn-disable':'btn-active'\" type=\"button\"\n (click)=\"savemdo()\" ><mat-icon>send</mat-icon> Send Request</button>\n </div>\n </div>\n</div>\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>","import { Component, ViewChild } from '@angular/core';\nimport { SharedService } from '../../modules/shared/services/shared.service';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { MatPaginator } from '@angular/material/paginator';\n\n@Component({\n selector: 'app-review-request',\n templateUrl: './review-request.component.html',\n styleUrls: ['./review-request.component.scss']\n})\nexport class ReviewRequestComponent {\n request: any = {\n };\n searchText = ''\n expandedResponsibilityRows: { [id: string]: boolean } = {};\n expandedActivityRows: { [id: string]: boolean } = {};\n @ViewChild(MatPaginator) paginator!: MatPaginator;\n loading = false\n activeTab = 'matched'\n displayedColumns: string[] = [\n 'designation_name',\n 'role_responsibilities',\n 'activities',\n 'behavioral',\n 'functional',\n 'domain'\n ];\n dataSource = new MatTableDataSource<any>([]);\n\n constructor(public sharedService: SharedService, private snackBar: MatSnackBar, private route: ActivatedRoute, private router: Router) {\n\n }\n\n ngOnInit() {\n const requestId = this.route.snapshot.paramMap.get('request_id');\n\n if (requestId) {\n this.getRequestDetails(requestId);\n }\n\n\n }\n\n getRequestDetails(requestId) {\n this.loading = true\n this.sharedService.viewApprovalRequests(requestId).subscribe({\n\n next: (res: any) => {\n console.log('res', res)\n this.request = res\n this.loading = false\n this.dataSource = new MatTableDataSource(res?.items);\n setTimeout(() => {\n this.dataSource.paginator = this.paginator;\n }, 100);\n },\n error: () => {\n this.loading = false\n this.snackBar.open('Failed to load the approval request information.', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n });\n }\n\n\n toggleResponsibilityExpand(id: string): void {\n this.expandedResponsibilityRows[id] = !this.expandedResponsibilityRows[id];\n }\n\n isResponisbilityExpanded(id: string): boolean {\n\n\n // const dialogRef = this.dialog.open(ListPopupComponent, {\n // width: '1000px',\n // data: this.activeRowElement,\n // panelClass: 'view-cbp-plan-popup',\n // minHeight: '400px', // Set minimum height\n // maxHeight: '90vh', // Prevent it from going beyond viewport\n // disableClose: true // Optional: prevent closing with outside click\n // });\n\n // dialogRef.afterClosed().subscribe(result => {\n // return false\n // });\n return this.expandedResponsibilityRows[id];\n }\n\n toggleActivityExpand(id: string): void {\n this.expandedActivityRows[id] = !this.expandedActivityRows[id];\n }\n\n isActivityExpanded(id: string): boolean {\n return this.expandedActivityRows[id];\n }\n\n getCompetenciesByType(competencies: any[], type: string): any[] {\n return competencies?.filter(c => c.type === type) || [];\n }\n\n backToApprovalRequest() {\n this.router.navigate(['/ai/approve-requests']);\n }\n\n applyFilter() {\n const filterValue = this.searchText.trim().toLowerCase();\n\n this.dataSource.filterPredicate = (data: any, filter: string) => {\n\n const designation = data.designation_name?.toLowerCase() || '';\n const wing = data.wing_division_section?.toLowerCase() || '';\n\n const responsibilities = (data.role_responsibilities || [])\n .join(' ')\n .toLowerCase();\n\n const activities = (data.activities || [])\n .join(' ')\n .toLowerCase();\n\n const competencies = (data.competencies || [])\n .map(c => `${c.theme} ${c.sub_theme}`)\n .join(' ')\n .toLowerCase();\n\n const combined =\n designation +\n wing +\n responsibilities +\n activities +\n competencies;\n\n return combined.includes(filter);\n };\n\n this.dataSource.filter = filterValue;\n\n if (this.dataSource.paginator) {\n this.dataSource.paginator.firstPage();\n }\n }\n\n clearSearch() {\n this.searchText = '';\n this.dataSource.filter = '';\n\n if (this.dataSource.paginator) {\n this.dataSource.paginator.firstPage();\n }\n }\n\n\n}\n","<div class=\"review-container\">\n\n <!-- HEADER -->\n <div class=\"page-header\">\n\n <div class=\"left-section\">\n <mat-icon class=\"back-icon\" (click)=\"backToApprovalRequest()\">arrow_back</mat-icon>\n\n <div>\n <p class=\"section-title\">Review Request</p>\n <p class=\"request-id\">{{request?.id}}</p>\n </div>\n </div>\n\n <div class=\"status-badge\">\n {{request?.status | titlecase}}\n </div>\n\n </div>\n\n\n <!-- REQUEST DETAILS -->\n <div class=\"inner-container\">\n <mat-card class=\"details-card\">\n\n <p class=\"section-title\">Request Details</p>\n\n <div class=\"details-grid\">\n\n <div class=\"detail-box\">\n <mat-icon>tag</mat-icon>\n <div>\n <p class=\"label\">Request ID</p>\n <p class=\"value\">{{request?.id}}</p>\n </div>\n </div>\n\n <div class=\"detail-box\">\n <mat-icon>assignment</mat-icon>\n <div>\n <p class=\"label\">Request Name</p>\n <p class=\"value\">{{request?.request_name}}</p>\n </div>\n </div>\n\n <div class=\"detail-box\">\n <mat-icon>mail</mat-icon>\n <div>\n <p class=\"label\">Requested By</p>\n <p class=\"value\">{{request?.user?.username | titlecase}}</p>\n </div>\n </div>\n\n <div class=\"detail-box\">\n <mat-icon>event</mat-icon>\n <div>\n <p class=\"label\">Submitted On</p>\n <p class=\"value\">{{request?.created_at | date: 'MMM d, y'}}</p>\n </div>\n </div>\n\n <div class=\"detail-box\">\n <mat-icon>person</mat-icon>\n <div>\n <p class=\"label\">No. of Designations</p>\n <p class=\"value\">{{request?.designation_count}}</p>\n </div>\n </div>\n\n </div>\n\n <mat-divider class=\"divider\"></mat-divider>\n\n <div class=\"organization\">\n <p class=\"label\">Organization</p>\n <p class=\"org-value\">{{request?.state_center_name}}</p>\n </div>\n\n </mat-card>\n\n\n <!-- ROLE MAPPING SECTION -->\n <div class=\"role-header\">\n\n <div>\n <p class=\"section-title\">Role Mappings for Review</p>\n </div>\n\n\n <div class=\"search flex margin-right-m\">\n <div class=\"mt-2\">\n <div class=\"search-container\">\n <div class=\"rsearch\">\n <mat-icon\n class=\"color-60 search-icon mat-icon notranslate material-icons mat-icon-no-color\">search</mat-icon>\n <input class=\"sinput color-60 w-full\" [(ngModel)]=\"searchText\" label=\"\"\n (input)=\"applyFilter()\" placeholder=\"Search by designation name\" type=\"Standard\">\n <mat-icon *ngIf=\"searchText.trim().length > 0\"\n class=\"color-60 clear-icon mat-icon notranslate material-icons mat-icon-no-color cursor-pointer\"\n (click)=\"clearSearch()\">clear</mat-icon>\n </div>\n <div class=\"pl-2 mt-2\">\n <input [disabled]=\"searchText.trim()?.length === 0\"\n [ngClass]=\"searchText.trim()?.length === 0 ? 'btn-disable':'btn-active'\" type=\"button\"\n value=\"Search\" (click)=\"applyFilter()\" />\n </div>\n </div>\n\n\n </div>\n\n\n </div>\n\n </div>\n <div class=\"table-class\">\n <ng-container *ngIf=\"dataSource?.data?.length > 0\">\n <div class=\"table-container mt-4\" style=\"overflow: auto;\">\n <table mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z1 table-body\">\n\n <ng-container matColumnDef=\"designation_name\">\n <th class=\"table-header\" mat-header-cell *matHeaderCellDef> Designation\n </th>\n <td class=\"cursor-pointer\" mat-cell *matCellDef=\"let element\"\n (click)=\"viewCBPPlan(element)\">\n <div\n [ngClass]=\"activeTab === 'matched'? 'designation-text': 'designation-text-unmatched'\">\n <p class=\"designation\">{{ element?.designation_name }} </p>\n <p class=\"wing-text mt-2\">Wing/Division - {{\n element?.wing_division_section }} </p>\n </div>\n\n </td>\n </ng-container>\n <ng-container matColumnDef=\"role_responsibilities\">\n <th [ngClass]=\"activeTab === 'matched'? 'table-header': 'table-header-unmatched'\"\n mat-header-cell *matHeaderCellDef> Role &\n Responsibilities </th>\n <td mat-cell *matCellDef=\"let element\">\n <ul>\n <li class=\"role-item\"\n *ngFor=\"let role of (isResponisbilityExpanded(element.id) ? element.role_responsibilities : element.role_responsibilities.slice(0, 2)); let i = index\">\n {{i+1}}. {{ role }}</li>\n <li *ngIf=\"element.role_responsibilities.length > 2\"\n class=\"view-more-less cursor-pointer\"\n (click)=\"openFullList(element, 'role_responsibilities')\">\n <span style=\"color: #1B4CA1;font-size: 16px;\">\n View More\n </span>\n </li>\n </ul>\n </td>\n </ng-container>\n <ng-container matColumnDef=\"activities\">\n <th [ngClass]=\"activeTab === 'matched'? 'table-header': 'table-header-unmatched'\"\n mat-header-cell *matHeaderCellDef> Activities </th>\n <td mat-cell *matCellDef=\"let element\">\n <ul>\n <li class=\"role-item\"\n *ngFor=\"let activity of (isActivityExpanded(element.id) ? element.activities : element.activities.slice(0, 2)); let i = index\">\n {{i+1}}. {{ activity }}</li>\n <li *ngIf=\"element.activities.length > 2\" class=\"view-more-less cursor-pointer\"\n (click)=\"openFullList(element, 'activity')\">\n <span style=\"color: #1B4CA1;font-size: 16px;\">\n View More\n </span>\n </li>\n </ul>\n </td>\n </ng-container>\n <ng-container matColumnDef=\"behavioral\">\n <th [ngClass]=\"activeTab === 'matched'? 'table-header': 'table-header-unmatched'\"\n mat-header-cell *matHeaderCellDef> Behavioral\n Competencies </th>\n <td mat-cell *matCellDef=\"let element\">\n <ul class=\"competency-list\">\n <li class=\"behavioural-pill\"\n *ngFor=\"let comp of getCompetenciesByType(element.competencies, 'Behavioral')\">\n <span class=\"competency-text-behavioral\"> {{ comp.theme }} - {{\n comp.sub_theme }} </span>\n </li>\n </ul>\n </td>\n </ng-container>\n <ng-container matColumnDef=\"functional\">\n <th [ngClass]=\"activeTab === 'matched'? 'table-header': 'table-header-unmatched'\"\n mat-header-cell *matHeaderCellDef> Functional\n Competencies </th>\n <td mat-cell *matCellDef=\"let element\">\n <ul class=\"competency-list\">\n <li class=\"functional-pill\"\n *ngFor=\"let comp of getCompetenciesByType(element.competencies, 'Functional')\">\n <span class=\"competency-text-functional\"> {{ comp.theme }} - {{\n comp.sub_theme }}</span>\n </li>\n </ul>\n </td>\n </ng-container>\n <ng-container matColumnDef=\"domain\">\n <th [ngClass]=\"activeTab === 'matched'? 'table-header': 'table-header-unmatched'\"\n mat-header-cell *matHeaderCellDef> Domain\n Competencies </th>\n <td mat-cell *matCellDef=\"let element\">\n <ul class=\"competency-list\">\n <li class=\"domain-pill\"\n *ngFor=\"let comp of getCompetenciesByType(element.competencies, 'Domain')\">\n <span class=\"competency-text-domain\"> {{ comp.theme }} - {{\n comp.sub_theme }}</span>\n </li>\n </ul>\n </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n <tr class=\"mat-row\" *matNoDataRow>\n <td class=\"mat-cell no-data-cell\" [attr.colspan]=\"displayedColumns.length\">\n No Data Found\n </td>\n </tr>\n </table>\n <ng-container *ngIf=\"dataSource?.filteredData?.length || dataSource?.filteredData?.length\">\n <mat-paginator [length]=\"dataSource?.data?.length\" [pageSize]=\"5\"\n [pageSizeOptions]=\"[5, 10, 20]\" showFirstLastButtons>\n </mat-paginator>\n </ng-container>\n\n </div>\n\n </ng-container>\n\n \n </div>\n </div>\n\n</div>\n\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>","import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ChangeDetectorRef, Component, Inject, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, FormArray, Validators, FormControl } from '@angular/forms';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\n@Component({\n selector: 'app-list-popup',\n templateUrl: './list-popup.component.html',\n styleUrls: ['./list-popup.component.scss']\n})\nexport class ListPopupComponent {\n listData:any\n listType:any\n constructor( public dialogRef: MatDialogRef<ListPopupComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any) {\n console.log('data--',data)\n if(data && data.element && data.type) {\n this.listData = data.element\n this.listType = data.type\n }\n \n console.log('this.listData', data)\n }\n closeDialog() {\n this.dialogRef.close()\n }\n}\n","<div class=\"view-cbp-plan\">\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div>\n <div class=\"heading\">\n <span><mat-icon class=\"vertical-middle\">remove_red_eye</mat-icon></span>\n <span *ngIf=\"listType === 'role_responsibilities'\" class=\"ml-2\">Roles & Responsibilities</span>\n <span *ngIf=\"listType === 'activity'\" class=\"ml-2\">Key Activities</span>\n <span *ngIf=\"listType === 'doc-summary'\" class=\"ml-2\">Summary</span>\n \n </div>\n<!-- <div class=\"sub-text\" *ngIf=\"listType === 'role_responsibilities'\">-->\n<!-- <p>Complete roles and responsibilities</p>-->\n<!-- </div>-->\n </div>\n <div class=\"cursor-pointer\" (click)=\"closeDialog()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n </div>\n <div class=\"section-container mt-2\">\n <div class=\"mt-2\">\n<!-- <strong *ngIf=\"listType === 'role_responsibilities'\">Roles and Responsibilities:</strong>-->\n<!-- <strong *ngIf=\"listType === 'activity'\">Key Activities:</strong>-->\n </div>\n <div class=\"custom-bullet-list\" *ngIf=\"listType === 'role_responsibilities'\">\n <ul>\n <li *ngFor=\"let item of listData?.role_responsibilities\">\n {{item}}\n </li>\n </ul>\n </div>\n <div class=\"custom-bullet-list\" *ngIf=\"listType === 'activity'\">\n <ul>\n <li *ngFor=\"let item of listData?.activities\">\n {{item}}\n </li>\n </ul>\n </div>\n <div class=\"doc-summary-text\" *ngIf=\"listType === 'doc-summary'\">\n <markdown [data]=\"listData?.summary_text\"></markdown>\n </div>\n\n </div>\n \n</div>","\nimport { Component, ViewChild } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { type } from 'os';\nimport { element } from 'protractor';\nimport { ListPopupComponent } from '../list-popup/list-popup.component';\nimport { SharedService } from '../../modules/shared/services/shared.service';\n\n@Component({\n selector: 'app-approval-requests',\n templateUrl: './approval-requests.component.html',\n styleUrls: ['./approval-requests.component.scss']\n})\nexport class ApprovalRequestsComponent {\n\n @ViewChild(MatPaginator) paginator!: MatPaginator;\n dataSource = new MatTableDataSource<any>([]);\n selectedMinistryType: string = 'ministry';\n ministryData: any = []\n ministryFullData: any = []\n roleMappingForm!: FormGroup;\n disableBtn = true\n searchText = '';\n displayedColumns: string[] = ['request_id', 'date', 'designation', 'status', 'actions'];\n cbpFinalObj: any = {}\n departmentData: any = []\n approvalRequests = [\n // {\n // name: 'Work Allocation',\n // originalName: 'ACBP_Ministry_of_Women_and_Child_Development_Extract...',\n // size: 4.5,\n // date: 'Oct 13, 2025'\n // },\n // {\n // name: 'Screenshot 2025-10-08 at 12',\n // originalName: 'Screenshot 2025-10-08 at 12.54.18 PM.png',\n // size: 331.8,\n // date: 'Oct 13, 2025'\n // }\n ];\n loading = false\n filteredMinistryData: any = []\n searchControl: FormControl = new FormControl('');\n panelOpen = false;\n departmentPanelOpen = false\n filteredList = [];\n filteredDepartmentList = [];\n loginUserOrgIds = []\n originalMinistryData = []\n cbpPlanFinalObj: any\n filterForm!: FormGroup;\n status = [\n { \"code\": \"\", label: \"All Status\" },\n { \"code\": \"pending\", label: \"Pending\" },\n { \"code\": \"approved\", label: \"Approved\" },\n { \"code\": \"rejected\", label: \"Rejected\" }\n ];\n time = [\n { \"code\": \"\", label: \"All Time\" },\n { \"code\": \"last_7_days\", label: \"Last 7 Days\" },\n { \"code\": \"last_30_days\", label: \"Last 30 Days\" },\n { \"code\": \"last_90_days\", label: \"Last 90 Days\" }\n ];\n filteredStatus = [...this.status];\n filteredTime = [...this.time];\n constructor(public dialog: MatDialog, public sharedService: SharedService,\n public snackBar: MatSnackBar,\n private fb: FormBuilder,\n public router: Router\n ) {\n this.roleMappingForm = this.fb.group({\n ministryType: ['ministry', Validators.required],\n ministry: [null, Validators.required],\n sectors: [[]],\n departments: [[]]\n\n });\n this.filterForm = this.fb.group({\n status: [''],\n time: [''],\n search: ['']\n });\n // this.cbpFinalObj = this.sharedService.getCBPPlanLocalStorage()\n this.getMinistryData()\n\n\n }\n\n ngOnInit() {\n this.cbpPlanFinalObj = this.sharedService.getCBPPlanLocalStorage()\n console.log('cbpFinalObj--', this.cbpFinalObj)\n this.searchControl.valueChanges.subscribe(searchText => {\n if (searchText) {\n this.filterMinistryData(searchText);\n } else {\n this.filteredMinistryData = this.ministryData\n }\n\n });\n this.sharedService.summaryTriggerExecuted.subscribe((data: any) => {\n if (data && data?.file_id) {\n this.getApprovalRequests()\n }\n })\n if (this.cbpPlanFinalObj && this.cbpPlanFinalObj.ministry && this.cbpPlanFinalObj.ministry.identifier) {\n this.getApprovalRequests()\n }\n }\n\n ngAfterViewInit() {\n this.dataSource.paginator = this.paginator;\n }\n\n getApprovalRequests() {\n\n let reqBody = {\n state_center_id: this.cbpPlanFinalObj?.ministry?.identifier,\n include_summary: true,\n skip: 0,\n limit: 200\n }\n if (this.cbpPlanFinalObj && this.cbpPlanFinalObj?.departments) {\n reqBody['department_id'] = this.cbpPlanFinalObj?.departments\n }\n this.loading = true\n\n this.sharedService.getApprovalRequests(reqBody).subscribe((res) => {\n console.log('res--', res)\n if (res && res?.items && res?.items?.length) {\n this.loading = false\n this.approvalRequests = res?.items\n this.dataSource.data = this.approvalRequests;\n console.log('this.approvalRequests', this.approvalRequests)\n } else {\n this.loading = false\n }\n })\n }\n\n\n\n filteredapprovalRequests() {\n let data = [...this.approvalRequests];\n\n const search = this.filterForm.get('search')?.value?.toLowerCase() || '';\n const status = this.filterForm.get('status')?.value;\n const time = this.filterForm.get('time')?.value;\n // Search Filter\n if (search) {\n data = data.filter(r =>\n (r.request_name || '').toLowerCase().includes(search)\n );\n }\n\n // Status Filter\n if (status) {\n data = data.filter(r => r.status === status);\n }\n\n // Time Filter\n if (time) {\n const now = new Date();\n\n data = data.filter(r => {\n const created = new Date(r.created_at);\n const diffDays =\n (now.getTime() - created.getTime()) / (1000 * 3600 * 24);\n\n if (time === 'last_7_days') return diffDays <= 7;\n if (time === 'last_30_days') return diffDays <= 30;\n if (time === 'last_90_days') return diffDays <= 90;\n\n return true;\n });\n }\n\n return data;\n }\n\n deleteDocument(docToDelete: any) {\n this.approvalRequests = this.approvalRequests.filter(doc => doc !== docToDelete);\n this.loading = true\n this.sharedService.deleteSummary(docToDelete?.file_id).subscribe((res) => {\n if (res) {\n this.sharedService.deleteFile(docToDelete?.file_id).subscribe((dres) => {\n this.loading = true\n if (dres) {\n this.loading = false\n this.snackBar.open('Document Deleted Successfully', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n this.getApprovalRequests()\n } else {\n this.loading = false\n this.snackBar.open('Error While Deleting Document', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n this.getApprovalRequests()\n }\n\n })\n this.loading = false\n this.snackBar.open('Document Summary Deleted Successfully', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n } else {\n this.loading = false\n this.snackBar.open('Error While Deleting Document Summary', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n })\n\n }\n\n applyFilters() {\n const filtered = this.filteredapprovalRequests();\n\n this.dataSource.data = filtered;\n\n if (this.paginator) {\n this.paginator.firstPage();\n }\n }\n onMinistryTypeChange(event) {\n this.roleMappingForm.reset()\n\n // console.log('event', event)\n this.getMinistryData()\n this.sharedService.cbpPlanFinalObj['ministryType'] = event.value\n localStorage.setItem('cbpPlanFinalObj', JSON.stringify(this.sharedService.cbpPlanFinalObj))\n this.selectedMinistryType = event?.value\n this.roleMappingForm.get('sectors')?.setValue([]);\n\n this.roleMappingForm.controls.ministryType.setValue(this.selectedMinistryType)\n }\n\n onMinistryChange(event: any) {\n const selectedMinistryId = event.value;\n\n // console.log('Selected Ministry ID:', selectedMinistryId);\n\n // You can access the selected object if needed\n const selectedMinistry = this.ministryData.find(item => item.identifier === selectedMinistryId);\n console.log('Selected Ministry:', selectedMinistry); ``\n this.sharedService.cbpPlanFinalObj['ministry'] = { identifier: selectedMinistryId?.identifier, name: selectedMinistryId?.orgName }\n if (selectedMinistryId && this.selectedMinistryType === 'state') {\n this.sharedService.getDepartmentList(selectedMinistryId).subscribe((res) => {\n this.departmentData = res\n })\n }\n if (this.selectedMinistryType === 'state') {\n this.sharedService.cbpPlanFinalObj['ministryType'] = this.roleMappingForm.controls.ministryType.value\n this.sharedService.cbpPlanFinalObj['ministry'] = { identifier: selectedMinistry?.identifier, name: selectedMinistry?.orgName }\n this.sharedService.cbpPlanFinalObj['departments'] = this.roleMappingForm.controls.departments.value\n this.sharedService.cbpPlanFinalObj['sectors'] = this.roleMappingForm.controls.sectors.value\n } else {\n this.sharedService.cbpPlanFinalObj['ministryType'] = this.roleMappingForm.controls.ministryType.value\n this.sharedService.cbpPlanFinalObj['ministry'] = { identifier: selectedMinistry?.identifier, name: selectedMinistry?.orgName }\n }\n console.log('this.sharedService.cbpPlanFinalObj', this.sharedService.cbpPlanFinalObj)\n localStorage.setItem('cbpPlanFinalObj', JSON.stringify(this.sharedService.cbpPlanFinalObj))\n console.log('this.roleMappingForm', this.roleMappingForm)\n }\n\n\n\n filterMinistryData(searchText) {\n\n if (searchText) {\n console.log('searhTect, ', searchText)\n const search = searchText?.trim().toLowerCase() || '';\n this.filteredMinistryData = !search\n ? [...this.ministryData]\n : this.ministryData.filter(item =>\n item.orgName?.trim().toLowerCase().startsWith(search)\n );\n }\n\n }\n\n getMinistryData() {\n this.loading = true\n this.sharedService.getMinistryData(this.selectedMinistryType).subscribe((data: any) => {\n this.loading = false\n console.log('data--', data)\n this.ministryFullData = data\n this.ministryData = []\n if (this.selectedMinistryType === 'ministry') {\n data.forEach((item) => {\n if (item?.sbOrgType === 'ministry') {\n this.ministryData.push(item)\n this.filteredMinistryData = [...this.ministryData];\n }\n })\n } else if (this.selectedMinistryType === 'state') {\n data.forEach((item) => {\n if (item?.sbOrgType === 'state') {\n this.ministryData.push(item)\n this.filteredMinistryData = [...this.ministryData];\n }\n })\n }\n this.getUserProfileData()\n })\n\n console.log('this.ministryData--', this.ministryData)\n console.log('this.filteredMinistryData--', this.filteredMinistryData)\n }\n\n routeToMain() {\n this.router.navigate(['/ai/']);\n }\n\n viewSummary(doc) {\n const dialogRef = this.dialog.open(ListPopupComponent, {\n width: '800px',\n data: { element: doc, type: 'doc-summary' },\n disableClose: true,\n maxHeight: '80vh'\n });\n\n dialogRef.afterClosed().subscribe(() => {\n // No need to do anything special here to reset inline expanded state\n // Because you're using dialog, not inline expand – view remains in initial (collapsed) state\n });\n }\n\n viewRequest(request: any): void {\n console.log('request--', request)\n this.loading = true\n this.router.navigate(['/ai/review-request', request.id]);\n }\n\n revokeApprovalRequest(request: any): void {\n console.log('request--', request)\n this.loading = true\n let reqBody =\n {\n \"request_id\": request?.id\n }\n\n this.sharedService.revokeApprovalRequest(reqBody).subscribe({\n\n next: (res: any) => {\n console.log('res', res)\n this.loading = false\n this.getApprovalRequests()\n },\n error: () => {\n this.loading = false\n this.snackBar.open('Failed to revoke the approval request.', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n });\n }\n\n onOpened(opened: boolean) {\n this.panelOpen = opened;\n }\n\n onOpenedDepartment(opened: boolean) {\n this.departmentPanelOpen = opened\n }\n\n filterData(event) {\n if (event && event.target && event.target.value) {\n const s = event.target.value.toLowerCase();\n\n this.filteredList = this.ministryData.filter(x =>\n x.orgName.toLowerCase().includes(s)\n );\n } else {\n this.filteredList = this.ministryData\n }\n\n }\n\n filterDepartmentData(event) {\n if (event && event.target && event.target.value) {\n const s = event.target.value.toLowerCase();\n\n this.filteredDepartmentList = this.departmentData.filter(x =>\n x.orgName.toLowerCase().includes(s)\n );\n } else {\n this.filteredDepartmentList = this.departmentData\n }\n\n }\n\n getUserProfileData() {\n this.sharedService.getUserProfile().subscribe((data) => {\n console.log('data--', data)\n this.loginUserOrgIds = data?.organization_ids\n let filteredMinistryData = []\n console.log('this.ministryFullData--', this.ministryFullData)\n this.ministryFullData.map((item) => {\n if (this.loginUserOrgIds.indexOf(item?.identifier) > -1) {\n filteredMinistryData.push(item)\n }\n })\n\n this.ministryData = filteredMinistryData\n this.originalMinistryData = filteredMinistryData\n this.filteredList = filteredMinistryData;\n console.log('this.filteredList--', this.filteredList)\n })\n }\n\n routeToInitial() {\n this.router.navigate(['/ai/initial']);\n }\n\n\n filterList(value: string, type: string) {\n const search = value.toLowerCase();\n\n switch (type) {\n\n case 'status':\n this.filteredStatus = this.status.filter(v => v.label?.toLowerCase().includes(search));\n break;\n case 'time':\n this.filteredTime = this.time.filter(v => v.label?.toLowerCase().includes(search));\n break;\n }\n }\n\n clearSearch() {\n this.searchText = '';\n this.applyFilters();\n }\n\n}\n","<div class=\"upload-container\">\n <div class=\"header\">\n <div class=\"sub-heading mt-10 mb-10 ml-10 cursor-pointer\">\n <p (click)=\"routeToInitial()\"><mat-icon style=\"vertical-align: middle;\">arrow_back</mat-icon><span\n class=\"pl-10\">Back to Role Mapping Generation</span></p>\n </div>\n\n </div>\n <mat-card class=\"mat-card-container mt-20\" [formGroup]=\"roleMappingForm\">\n <div class=\"header\">\n <div class=\"sub-heading\">\n <p>Approval Requests</p>\n </div>\n\n\n </div>\n <div class=\"edit-section mt-4\">\n <div class=\"select-map-route-container\">\n <div class=\"select-map-flex-container\">\n <div class=\"select-map-flex\">\n <div class=\"selected-mapping-route\">\n <p>{{cbpPlanFinalObj?.ministry?.orgName}} <span *ngIf=\"cbpPlanFinalObj?.department_name\">\n / {{cbpPlanFinalObj?.department_name}}</span>\n </p>\n </div>\n <div class=\"edit-plan cursor-pointer\" (click)=\"routeToInitial()\">\n <mat-icon>edit</mat-icon>Edit\n </div>\n <!-- <div class=\"cursor-pointer ml-10\">-->\n <!-- <button class=\"btn-active cursor-pointer\" (click)=\"moveToInitialScreenLayout('add')\">-->\n <!-- <mat-icon>add</mat-icon>-->\n <!-- Create New CBP-->\n <!-- </button>-->\n <!-- </div>-->\n </div>\n <!-- <div>\n <button [ngClass]=\"!(cbpPlanFinalObj?.ministry?.orgName) ? 'btn-disable':'btn-active'\" mat-raised-button\n color=\"primary\" [disabled]=\"!(cbpPlanFinalObj?.ministry?.orgName)\" (click)=\"openUploadDialog()\">\n <mat-icon>upload</mat-icon> Upload Document\n </button>\n </div> -->\n </div>\n </div>\n </div>\n\n\n\n\n\n </mat-card>\n <mat-card class=\"\">\n <form [formGroup]=\"filterForm\">\n <div class=\"search flex margin-right-m filter-container\">\n <div>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\n class=\"lucide lucide-filter h-4 w-4\">\n <polygon points=\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\"></polygon>\n </svg>\n </div>\n <div>\n <b> Filters</b>\n </div>\n <div class=\"mt-10 w-50\">\n\n <div class=\"search-container\"> \n <div class=\"rsearch\">\n <mat-icon\n class=\"color-60 search-icon mat-icon notranslate material-icons mat-icon-no-color\">search</mat-icon>\n <input class=\"sinput color-60 w-full\" label=\"\" formControlName=\"search\"\n (keyup)=\"applyFilters()\" placeholder=\"Search by Request ID\" type=\"Standard\">\n \n </div>\n\n </div>\n\n\n\n </div>\n <div class=\"search-and-buttons-container\">\n <div>\n <mat-form-field appearance=\"outline\" class=\"language-select\">\n <!-- <mat-label style=\"font-weight: normal;\">\n {{ filterForm.get('status')?.value ? '' : 'Select Status' }}\n </mat-label> -->\n\n <mat-select formControlName=\"status\" panelClass=\"select-search-panel\"\n (selectionChange)=\"applyFilters()\">\n\n <!-- Search box -->\n <input style=\"border:1px solid #ccc; padding: 5px;width: 92%;margin: 5px;\" matInput\n placeholder=\"Search Status\" (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (keyup)=\"filterList($any($event.target).value, 'status')\" />\n\n <!-- Values -->\n <mat-option *ngFor=\"let r of filteredStatus\" [value]=\"r?.code\">\n {{ r?.label }}\n </mat-option>\n\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n <div class=\"search-and-buttons-container\">\n <div>\n <mat-form-field appearance=\"outline\" class=\"language-select\">\n <!-- <mat-label style=\"font-weight: normal;\">\n {{ filterForm.get('time')?.value ? '' : 'Select Time' }}\n </mat-label> -->\n\n <mat-select formControlName=\"time\" panelClass=\"select-search-panel\"\n (selectionChange)=\"applyFilters()\">\n\n <!-- Search box -->\n <input style=\"border:1px solid #ccc; padding: 5px;width: 92%;margin: 5px;\" matInput\n placeholder=\"Search Time\" (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (keyup)=\"filterList($any($event.target).value, 'time')\" />\n\n <!-- Values -->\n <mat-option *ngFor=\"let r of filteredTime\" [value]=\"r?.code\">\n {{ r?.label }}\n </mat-option>\n\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n </form>\n <p class=\"mt-10\" style=\"font-family: 'Lato'; font-size: 18px; margin-left: 10px;\">\n {{dataSource.data.length}} Approval Requests</p>\n <table style=\"border-radius: 25px 25px 0 0;\n overflow: hidden;\n box-shadow: 0 5px 5px rgba(0, 0, 0, 0.12);\" mat-table [dataSource]=\"dataSource\"\n class=\"mat-elevation-z2 full-width-table mt-10\">\n\n <!-- Document Column -->\n <ng-container matColumnDef=\"request_id\">\n <th mat-header-cell *matHeaderCellDef> Request ID </th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\">\n <div>\n <div class=\"doc-title\" *ngIf=\"request.request_name\">{{ request.request_name }}</div>\n <div class=\"doc-title\" *ngIf=\"!request.request_name\">{{ request.request_name }}</div>\n </div>\n </td>\n </ng-container>\n\n\n\n <!-- Summary Text Column -->\n <!-- <ng-container matColumnDef=\"summary_text\">\n <th mat-header-cell *matHeaderCellDef> Summary </th>\n <td mat-cell *matCellDef=\"let doc\">\n <div class=\"doc-summary-text\" style=\"width: 80%;\">\n <markdown [data]=\"doc?.summary_text | slice : 0 : 200\"></markdown>\n </div>\n </td>\n </ng-container> -->\n\n <!-- Date Column -->\n <ng-container matColumnDef=\"date\">\n <th mat-header-cell *matHeaderCellDef> Date & Time</th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\"> {{ request.created_at | date: 'MMM d, y'}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"designation\">\n <th mat-header-cell *matHeaderCellDef> No of Designation </th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\">\n <span>{{request?.designation_count}}</span>\n </td>\n </ng-container>\n\n\n <!-- Summary Status Column -->\n <ng-container matColumnDef=\"status\">\n <th mat-header-cell *matHeaderCellDef> Request Status </th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\">\n <span *ngIf=\"request.status === 'completed'\" class=\"success\"> {{ request.status | titlecase\n }} </span>\n <span *ngIf=\"request.status !== 'completed'\" class=\"in-progress\"> {{ request.status |\n titlecase }} </span>\n </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef> Actions </th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\">\n <div class=\"action-flex\">\n <div>\n <button class=\"btn-active\" mat-raised-button color=\"primary\" (click)=\"viewRequest(request)\"\n matTooltip=\"View/Review Request\">\n View/Review Request\n </button>\n </div>\n <div>\n <button style=\"margin-left: 15px;\" *ngIf=\"request.status === 'COMPLETED'\"\n mat-icon-button color=\"warn\" (click)=\"revokeApprovalRequest(request)\" matTooltip=\"Delete\">\n <mat-icon>delete</mat-icon>\n Revoke Request\n </button>\n </div>\n </div>\n\n\n\n\n\n </td>\n </ng-container>\n\n <!-- Header and Row Definitions -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n\n <!-- No Data Message -->\n\n </table>\n <div *ngIf=\"dataSource.data.length === 0\" class=\"no-data-message\">\n No record found\n </div>\n <!-- Pagination -->\n <div class=\"mt-1\">\n <!-- <mat-paginator class=\"custom-pagination\" [pageSize]=\"5\" [pageSizeOptions]=\"[5, 10, 20]\"></mat-paginator> -->\n <mat-paginator [pageSize]=\"5\" [pageSizeOptions]=\"[5, 10, 20]\"></mat-paginator>\n </div>\n\n\n </mat-card>\n</div>\n\n\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>","import { Component, OnInit } from '@angular/core';\nimport { SharedService } from '../../modules/shared/services/shared.service';\nimport dayjs from 'dayjs';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { Router } from '@angular/router';\nimport moment from 'moment';\n@Component({\n selector: 'app-dashboard',\n templateUrl: './dashboard.component.html',\n styleUrls: ['./dashboard.component.scss']\n})\nexport class DashboardComponent implements OnInit {\n userProfile: any\n isSuperAdmin = false\n selected: any = {\n startDate: moment().subtract(3, 'month'),\n endDate: moment()\n };\n filtersForm!: FormGroup;\n ministriesList = [\n { id: 1, name: 'Ministry A' },\n { id: 2, name: 'Ministry B' },\n { id: 3, name: 'Ministry C' }\n ];\n\n departmentsList = [\n { id: 1, name: 'Dept X' },\n { id: 2, name: 'Dept Y' },\n { id: 3, name: 'Dept Z' }\n ];\n selectedMinistryType = 'ministry'\n selectedMinistryId = ''\n panelOpen = false;\n departmentPanelOpen = false\n filteredList = [];\n filteredDepartmentList = [];\n ministryData: any = []\n ministryFullData: any = []\n departmentData = []\n selectedMinistryObj = {}\n apiLoading = false\n loginUserOrgIds = []\n dashboardData: any\n gapAnalysisData: any\n dashboardResponseObj = {}\n cbpFinalObj: any = {}\n constructor(private fb: FormBuilder, private sharedService: SharedService, private snackBar: MatSnackBar, public router: Router) { }\n ngOnInit() {\n this.userProfile = JSON.parse(localStorage.getItem('userProfile') || '{}');\n this.isSuperAdmin = this.userProfile?.role_info?.role_name === 'Super Admin'\n && this.userProfile?.role_info?.is_active;\n this.loginUserOrgIds = this.userProfile?.organization_ids\n\n this.cbpFinalObj = this.sharedService.getCBPPlanLocalStorage()\n console.log('this.cbpFinalObj--', this.cbpFinalObj)\n\n\n // Initialize the form without disabling anything\n this.filtersForm = this.fb.group({\n centreState: [''],\n ministries: [[]],\n departments: [[]],\n dateRange: [{ startDate: moment().subtract(3, 'month'), endDate: moment() }]\n });\n\n if (this.cbpFinalObj) {\n let event = {value:this.cbpFinalObj?.ministry?.sbOrgType}\n let ministryEvent = {value: this.cbpFinalObj?.ministry?.identifier}\n\n this.onMinistryTypeChange(event)\n this.onMinistryChange(ministryEvent)\n setTimeout(()=>{\n this.filtersForm.patchValue({\n centreState: this.selectedMinistryType,\n ministries: [this.cbpFinalObj?.ministry?.identifier],\n departments: [this.cbpFinalObj?.departments]\n });\n },1000)\n \n \n }\n\n // Dynamically enable controls if super admin\n if (this.isSuperAdmin) {\n this.filtersForm.get('centreState')?.enable();\n this.filtersForm.get('ministries')?.enable();\n this.filtersForm.get('departments')?.enable();\n } else {\n // optionally disable for non-super-admin\n this.filtersForm.get('centreState')?.disable();\n this.filtersForm.get('ministries')?.disable();\n this.filtersForm.get('departments')?.disable();\n }\n\n // Trigger API call on filter change\n this.filtersForm.valueChanges.subscribe(val => {\n this.getDashboardData(val);\n });\n }\n\n getDashboardData(val) {\n\n console.log('val', val)\n let dateRangePayload = null;\n if (val.dateRange && val.dateRange.startDate && val.dateRange.endDate) {\n dateRangePayload = {\n from: moment(val.dateRange.startDate).format('YYYY-MM-DD'),\n to: moment(val.dateRange.endDate).format('YYYY-MM-DD')\n };\n }\n let payload = {\n ministries: val?.ministries,\n date_range: dateRangePayload\n\n }\n if (val?.departments?.length) {\n payload['departments'] = val?.departments\n }\n if (this.isSuperAdmin) {\n this.dashboardData = {};\n\n this.sharedService.getDashboardAdmin(payload).subscribe((res) => {\n console.log('res from admin', res);\n Object.assign(this.dashboardData, res); // merge data\n console.log('this.dashboardData after admin', this.dashboardData);\n });\n\n this.sharedService.getDashboardGapAnalysisAdmin(payload).subscribe((res) => {\n console.log('res from gap analysis', res);\n Object.assign(this.dashboardData, res); // merge data\n console.log('this.dashboardData after gap analysis', this.dashboardData);\n });\n\n } else {\n this.dashboardData = {};\n\n this.sharedService.getDashboardPublic(payload).subscribe((res) => {\n Object.assign(this.dashboardData, res);\n });\n\n this.sharedService.getDashboardGapAnalysisPublic(payload).subscribe((res) => {\n Object.assign(this.dashboardData, res);\n });\n }\n console.log('this.dashboardData', this.dashboardData)\n }\n onOpened(opened: boolean) {\n this.panelOpen = opened;\n }\n\n onOpenedDepartment(opened: boolean) {\n this.departmentPanelOpen = opened\n }\n\n filterData(event) {\n if (event && event.target && event.target.value) {\n const s = event.target.value.toLowerCase();\n\n this.filteredList = this.ministryData.filter(x =>\n x.orgName.toLowerCase().includes(s)\n );\n } else {\n this.filteredList = this.ministryData\n }\n\n }\n\n filterDepartmentData(event) {\n if (event && event.target && event.target.value) {\n const s = event.target.value.toLowerCase();\n\n this.filteredDepartmentList = this.departmentData.filter(x =>\n x.orgName.toLowerCase().includes(s)\n );\n } else {\n this.filteredDepartmentList = this.departmentData\n }\n\n }\n\n onMinistryChange(event: any) {\n const selectedMinistryId = event.value;\n console.log('Selected Ministry ID:', selectedMinistryId);\n this.departmentData = []\n // You can access the selected object if needed\n const selectedMinistry = this.ministryData.find(item => item.identifier === selectedMinistryId);\n this.selectedMinistryObj = selectedMinistry\n if (selectedMinistryId && this.selectedMinistryType === 'state') {\n this.sharedService.getDepartmentList(selectedMinistryId).subscribe((res) => {\n this.departmentData = res\n this.filteredDepartmentList = res\n })\n }\n if (selectedMinistryId && this.selectedMinistryType === 'ministry') {\n this.sharedService.getCenterBasedDepartment(selectedMinistryId).subscribe((res) => {\n if (res?.length) {\n this.departmentData = res\n this.filteredDepartmentList = res\n } else {\n this.snackBar.open('No Department Found for Selected Ministry', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n\n })\n }\n }\n\n onDepartmentChange() {\n const formData = this.filtersForm.value;\n const selectedMinistry = this.ministryData.find(item => item.identifier === formData.ministry);\n this.sharedService.cbpPlanFinalObj['ministry'] = selectedMinistry\n const departmentName = this.departmentData.find(u => u.identifier === formData.departments);\n this.sharedService.cbpPlanFinalObj['department_name'] = departmentName?.orgName\n }\n\n async onMinistryTypeChange(event) {\n console.log('event', event)\n this.selectedMinistryType = event.value\n await this.getMinistryData()\n this.ministryData = []\n if (event?.value === 'state') {\n this.filtersForm.patchValue({\n centreState: this.selectedMinistryType,\n ministries: [],\n departments: []\n });\n this.ministryFullData.forEach((item) => {\n if (item?.type === 'state') {\n this.ministryData.push(item)\n }\n })\n } else if (event?.value === 'ministry') {\n this.ministryFullData.forEach((item) => {\n if (item?.type === 'central') {\n this.ministryData.push(item)\n }\n })\n \n }\n this.filtersForm.patchValue({\n centreState: this.selectedMinistryType,\n ministries: [],\n departments: []\n });\n }\n\n getMinistryData() {\n this.apiLoading = true\n this.sharedService.getMinistryData(this.selectedMinistryType).subscribe((data: any) => {\n console.log('data--', data)\n this.ministryFullData = data\n this.apiLoading = false\n this.ministryData = []\n let filteredMinistryData = []\n this.ministryFullData.map((item) => {\n if (this.loginUserOrgIds.indexOf(item?.identifier) > -1) {\n filteredMinistryData.push(item)\n }\n this.filteredList = filteredMinistryData;\n })\n if (this.selectedMinistryType === 'ministry') {\n data.forEach((item) => {\n if (item?.sbOrgType === 'ministry') {\n this.ministryData.push(item)\n }\n })\n } else if (this.selectedMinistryType === 'state') {\n data.forEach((item) => {\n if (item?.sbOrgType === 'state') {\n this.ministryData.push(item)\n }\n })\n }\n })\n\n\n }\n\n routeToInitial() {\n this.router.navigate(['/ai/initial']);\n }\n}\n","<div class=\"dashboard-wrapper\">\n <div class=\"header\">\n <div class=\"sub-heading mt-10 mb-10 cursor-pointer\">\n <p (click)=\"routeToInitial()\"><mat-icon style=\"vertical-align: middle;\">arrow_back</mat-icon><span\n class=\"pl-10\">Back to Role Mapping Generation</span></p>\n </div>\n\n </div>\n <div class=\"dashboard-container\">\n\n <!-- FILTERS SECTION -->\n <form [formGroup]=\"filtersForm\" class=\"filters-form\">\n\n <mat-card class=\"filters-card\">\n <div class=\"filters-header\">\n <mat-icon>filter_list</mat-icon>\n <span>Filters</span>\n </div>\n\n <div class=\"filters-row\">\n <div>\n <label>Centre / State </label>\n <!-- Centre / State -->\n <mat-form-field appearance=\"fill\"\n style=\"background: white; border-radius: 25px; padding: 0 12px; border: 1px solid #ccc;width: 100%;\">\n\n <mat-select formControlName=\"centreState\" [disabled]=\"!isSuperAdmin\"\n (selectionChange)=\"onMinistryTypeChange($event)\">\n <mat-option value=\"\">Select Center/State</mat-option>\n <mat-option value=\"ministry\">Center</mat-option>\n <mat-option value=\"state\">State</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div>\n <label>Ministry </label>\n <!-- Centre / State -->\n <mat-form-field appearance=\"fill\"\n style=\"background: white; border-radius: 25px; padding: 0 12px; border: 1px solid #ccc;width: 100%;\">\n <mat-select panelClass=\"select-with-search\" [disabled]=\"!isSuperAdmin\" multiple\n [placeholder]=\"selectedMinistryType === 'ministry' ? 'Select Ministry/ Department':'Select State'\"\n (selectionChange)=\"onMinistryChange($event)\" formControlName=\"ministries\"\n style=\"border-radius: 25px; background: white; width:100%\"\n (openedChange)=\"onOpened($event)\">\n <div class=\"search-wrapper\" *ngIf=\"panelOpen\">\n <input type=\"text\" placeholder=\"Search...\" (input)=\"filterData($event)\"\n class=\"search-input\" (keydown.space)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n </div>\n <mat-option [value]=\"item?.identifier\" *ngFor=\"let item of filteredList\"\n [selected]=\"selectedMinistryId === item?.identifier\">{{item?.orgName}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div>\n <label>Department</label>\n <!-- Centre / State -->\n <mat-form-field appearance=\"fill\"\n style=\"background: white; border-radius: 25px; padding: 0 12px;border: 1px solid #ccc;\">\n <mat-select panelClass=\"select-with-search\" placeholder=\"Select Department\"\n [disabled]=\"!isSuperAdmin\" multiple formControlName=\"departments\"\n style=\"border-radius: 25px; background: white;\" (selectionChange)=\"onDepartmentChange()\"\n (openedChange)=\"onOpenedDepartment($event)\">\n <div class=\"search-wrapper\" *ngIf=\"departmentPanelOpen\">\n <input type=\"text\" placeholder=\"Search...\" (input)=\"filterDepartmentData($event)\"\n class=\"search-input\" (keydown.space)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n </div>\n <mat-option [value]=\"item?.identifier\"\n *ngFor=\"let item of filteredDepartmentList\">{{item?.orgName}}</mat-option>\n\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- Date Range -->\n <div>\n <label>Date Range </label>\n <mat-form-field appearance=\"outline\">\n\n <input matInput ngxDaterangepickerMd formControlName=\"dateRange\" style=\"margin:10px\"\n placeholder=\"Select date range\" [autoApply]=\"true\" [linkedCalendars]=\"true\"\n [locale]=\"{ format: 'DD MMM YYYY' }\" />\n </mat-form-field>\n </div>\n\n\n </div>\n </mat-card>\n </form>\n\n <!-- OVERVIEW METRICS -->\n <h2 class=\"section-title\">\n <mat-icon>dashboard</mat-icon>\n Overview Metrics\n </h2>\n\n <div class=\"card-grid\">\n\n <mat-card class=\"metric-card\">\n <div class=\"card-content\">\n <div>\n <p class=\"card-title\">States/Ministries which generated Role Mapping</p>\n <h2>{{this.dashboardData?.ministry_count}}</h2>\n <p class=\"card-subtitle\">At least 1 designation/role mapping</p>\n </div>\n <mat-icon class=\"icon primary\">public</mat-icon>\n </div>\n </mat-card>\n\n <mat-card class=\"metric-card\">\n <div class=\"card-content\">\n <div>\n <p class=\"card-title\">Departments which generated Role Mapping</p>\n <h2>{{this.dashboardData?.department_count}}</h2>\n <p class=\"card-subtitle\">At least 1 designation/role mapping</p>\n </div>\n <mat-icon class=\"icon teal\">apartment</mat-icon>\n </div>\n </mat-card>\n\n <mat-card class=\"metric-card\">\n <div class=\"card-content\">\n <div>\n <p class=\"card-title\">Total Capacity Building Plans Created</p>\n <h2>{{this.dashboardData?.total_cbp_plan_count}}</h2>\n </div>\n <mat-icon class=\"icon green\">description</mat-icon>\n </div>\n </mat-card>\n\n </div>\n\n <!-- COMPETENCIES -->\n <h2 class=\"section-title\">\n <mat-icon>psychology</mat-icon>\n Competencies Recommended\n </h2>\n\n <div class=\"card-grid\">\n\n <mat-card class=\"metric-card\">\n <div class=\"card-content\">\n <div>\n <p class=\"card-title\">Behavioral Competencies</p>\n <h2>{{this.dashboardData?.behavioral_competencies_count}}</h2>\n </div>\n <mat-icon class=\"icon purple\">psychology</mat-icon>\n </div>\n </mat-card>\n\n <mat-card class=\"metric-card\">\n <div class=\"card-content\">\n <div>\n <p class=\"card-title\">Functional Competencies</p>\n <h2>{{this.dashboardData?.functional_competencies_count}}</h2>\n </div>\n <mat-icon class=\"icon teal\">settings</mat-icon>\n </div>\n </mat-card>\n\n <mat-card class=\"metric-card\">\n <div class=\"card-content\">\n <div>\n <p class=\"card-title\">Domain Competencies</p>\n <h2>{{this.dashboardData?.domain_competencies_count}}</h2>\n </div>\n <mat-icon class=\"icon orange\">tune</mat-icon>\n </div>\n </mat-card>\n\n </div>\n\n <!-- DOCUMENTS -->\n <h2 class=\"section-title\">\n <mat-icon>menu_book</mat-icon>\n Documents & Course Recommendations\n </h2>\n\n <div class=\"card-grid\">\n\n <mat-card class=\"metric-card\">\n <div class=\"card-content\">\n <div>\n <p class=\"card-title\">Total Documents Uploaded</p>\n <h2>{{this.dashboardData?.total_documents}}</h2>\n <p class=\"card-subtitle\">Min 1, Max 10 per role mapping</p>\n </div>\n <mat-icon class=\"icon amber\">upload_file</mat-icon>\n </div>\n </mat-card>\n\n <mat-card class=\"metric-card\">\n <div class=\"card-content\">\n <div>\n <p class=\"card-title\">Role Mappings with Course Recommendations</p>\n <h2>{{this.dashboardData?.role_mappings_with_recommendations}}</h2>\n <p class=\"card-subtitle\">8500 of 50,000 role mappings</p>\n </div>\n <mat-icon class=\"icon green\">menu_book</mat-icon>\n </div>\n </mat-card>\n\n <mat-card class=\"metric-card\">\n <div class=\"card-content\">\n <div>\n <p class=\"card-title\">Course Recommendations Saved</p>\n <h2>{{this.dashboardData?.saved_recommended_courses_count}}</h2>\n <p class=\"card-subtitle\">{{this.dashboardData?.saved_recommended_courses_count}} of 8500\n recommendations</p>\n </div>\n <mat-icon class=\"icon teal\">save</mat-icon>\n </div>\n </mat-card>\n\n </div>\n\n <!-- GAP ANALYSIS -->\n <div class=\"gap-section\">\n <h2 class=\"section-title warning\">\n <mat-icon>warning</mat-icon>\n Gap Analysis\n </h2>\n\n <div class=\"card-grid\">\n\n <mat-card class=\"metric-card warning-bg\">\n <div class=\"card-content\">\n <div>\n <p class=\"card-title\">Competencies Without Courses</p>\n <h2>{{this.dashboardData?.competencies_without_courses}}</h2>\n <p class=\"card-subtitle\">Unique competencies with no identified courses</p>\n </div>\n <mat-icon class=\"icon red\">cancel</mat-icon>\n </div>\n </mat-card>\n\n <!-- <mat-card class=\"metric-card\">\n <div class=\"card-content\">\n <div>\n <p class=\"card-title\">Manually Added Courses</p>\n <h2>-</h2>\n <p class=\"card-subtitle\">Competencies with user-added courses</p>\n </div>\n <mat-icon class=\"icon green\">add_circle</mat-icon>\n </div>\n </mat-card> -->\n\n </div>\n\n <div class=\"card-grid mt-2\">\n\n <mat-card class=\"metric-card warning-bg\">\n <div class=\"card-content\">\n <div>\n <p class=\"card-title\">Behavioral Competencies Without Courses</p>\n <h2>{{this.dashboardData?.behavioral_without_courses}}</h2>\n </div>\n <mat-icon class=\"icon red\">cancel</mat-icon>\n </div>\n </mat-card>\n\n <mat-card class=\"metric-card\">\n <div class=\"card-content\">\n <div>\n <p class=\"card-title\">Functional Competencies Without Courses</p>\n <h2>{{this.dashboardData?.functional_without_courses}}</h2>\n </div>\n <mat-icon class=\"icon red\">cancel</mat-icon>\n </div>\n </mat-card>\n\n <mat-card class=\"metric-card\">\n <div class=\"card-content\">\n <div>\n <p class=\"card-title\">Domain Competencies Without Courses</p>\n <h2>{{this.dashboardData?.domain_without_courses}}</h2>\n </div>\n <mat-icon class=\"icon red\">cancel</mat-icon>\n </div>\n </mat-card>\n\n </div>\n </div>\n\n <!-- OVERVIEW METRICS -->\n <h2 class=\"section-title\">\n <mat-icon>dashboard</mat-icon>\n Users and Role Mapping Metrics\n </h2>\n\n <div class=\"card-grid\">\n\n <mat-card class=\"metric-card\" *ngIf=\"!isSuperAdmin\">\n <div class=\"card-content\">\n <div>\n <p class=\"card-title\">Unique Users (Credentials)</p>\n <h2>{{this.dashboardData?.total_users}}</h2>\n </div>\n <mat-icon class=\"icon primary\">public</mat-icon>\n </div>\n </mat-card>\n\n <mat-card class=\"metric-card\" *ngIf=\"!isSuperAdmin\">\n <div class=\"card-content\">\n <div>\n <p class=\"card-title\">Unique Users with Role Mappings</p>\n <h2>{{this.dashboardData?.users_with_role_mappings}}</h2>\n <p class=\"card-subtitle\">Generated atleast 1 role mapping</p>\n </div>\n <mat-icon class=\"icon teal\">apartment</mat-icon>\n </div>\n </mat-card>\n\n <mat-card class=\"metric-card\">\n <div class=\"card-content\">\n <div>\n <p class=\"card-title\">Total Designation/Role Mappings Generated</p>\n <h2>{{this.dashboardData?.total_role_mappings}}</h2>\n </div>\n <mat-icon class=\"icon green\">description</mat-icon>\n </div>\n </mat-card>\n\n <mat-card class=\"metric-card\">\n <div class=\"card-content\">\n <div>\n <p class=\"card-title\">Unique Role Mappings</p>\n <h2>{{this.dashboardData?.unique_role_mappings}}</h2>\n <p class=\"card-subtitle\">10,000 unique of 50,000 total</p>\n </div>\n <mat-icon class=\"icon teal\">apartment</mat-icon>\n </div>\n </mat-card>\n\n </div>\n </div>\n</div>","import {\n Component,\n EventEmitter,\n Input,\n Output,\n OnInit,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { HttpClient } from '@angular/common/http';\nimport { SharedService } from '../../modules/shared/services/shared.service';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\nexport interface Designation {\n id: string;\n name: string;\n sort_order: number;\n}\n\n@Component({\n selector: 'app-update-designation-hierarchy',\n templateUrl: './update-designation-hierarchy.component.html',\n styleUrls: ['./update-designation-hierarchy.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UpdateDesignationHierarchyComponent implements OnInit {\n openDropdownId: string | null = null;\n isOpen = true;\n state_center_id!: string;\n department_id!: string;\n designations: any[] = [];\n role_mapping_generation: any\n loading = false\n @Output() closeDrawer = new EventEmitter<void>();\n @Output() submitted = new EventEmitter<any>();\n\n numbers: number[] = [];\n\n constructor(private http: HttpClient, public sharedService: SharedService, private snackBar: MatSnackBar,) { }\n\n ngOnInit(): void {\n\n\n this.refreshRoleMappingData()\n\n\n\n console.log('this.designations--', this.designations)\n\n }\n\n drop(event: CdkDragDrop<Designation[]>) {\n moveItemInArray(this.designations, event.previousIndex, event.currentIndex);\n\n // Update sort_order based on the new array index\n this.designations.forEach((item, index) => {\n item.sort_order = index + 1;\n });\n }\n\n // onOrderChange(item: any) {\n // const selectedOrder = item.sort_order;\n // const currentIndex = this.designations.findIndex(d => d.id === item.id);\n\n // this.designations.splice(currentIndex, 1);\n // this.designations.splice(selectedOrder - 1, 0, item);\n\n // this.designations.forEach((d, index) => d.sort_order = index + 1);\n // }\n\n private updateSortOrderByIndex() {\n this.designations.forEach((item, index) => {\n item.sort_order = index + 1;\n });\n }\n\n submit() {\n let payload = {\n designations: this.designations.map(d => ({\n id: d.id,\n sort_order: d.sort_order\n }))\n };\n\n if (this.department_id) {\n payload['department_id'] = this.department_id\n }\n if (this.state_center_id) {\n payload['state_center_id'] = this.state_center_id\n }\n\n console.log('payload--', payload)\n this.loading = true\n // Example API call\n this.sharedService.updateDesignationHierarchy(payload)\n .subscribe(() => {\n this.sharedService.updateDesignationHierarchySubject.next(true)\n this.submitted.emit(payload);\n this.closeDrawer.emit();\n });\n\n this.sharedService.updateDesignationHierarchy(payload).subscribe({\n next: (res) => {\n // Success handling\n console.log('Success:', res);\n this.loading = false\n this.sharedService.updateDesignationHierarchySubject.next(true)\n this.submitted.emit(payload);\n this.closeDrawer.emit();\n this.snackBar.open('Designation Hierarchy Saved Successfully', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n //this.successRoleMapping.emit(this.roleMappingForm)\n },\n error: (error) => {\n console.log('error', error)\n // Handle 409 Conflict here\n // alert('Conflict detected: The resource already exists or action conflicts.');\n //this.get\n // Or you can set a UI error message variable\n this.snackBar.open(error?.error?.detail, 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n this.loading = false\n //this.alreadyAvailableRoleMapping.emit(this.roleMappingForm)\n }\n });\n }\n\n cancel() {\n this.isOpen = false\n this.closeDrawer.emit();\n }\n\n refreshRoleMappingData() {\n console.log('Refreshing role mapping data...');\n if (this.sharedService.cbpPlanFinalObj && this.sharedService.cbpPlanFinalObj.ministry && this.sharedService.cbpPlanFinalObj.ministry.identifier) {\n const ministryType = this.sharedService.cbpPlanFinalObj.ministry.sbOrgType;\n const ministryId = this.sharedService.cbpPlanFinalObj.ministry.identifier;\n\n this.loading = true;\n\n if (ministryType === 'ministry') {\n if (this.sharedService.cbpPlanFinalObj.departments) {\n const departmentId = this.sharedService.cbpPlanFinalObj.departments;\n this.sharedService.getRoleMappingByStateCenterAndDepartment(ministryId, departmentId).subscribe({\n next: (res) => {\n this.loading = false;\n console.log('State role mapping data refreshed:', res);\n },\n error: (error) => {\n this.loading = false;\n console.error('Error refreshing state role mapping data:', error);\n }\n });\n } else {\n this.sharedService.getRoleMappingByStateCenter(ministryId).subscribe({\n next: (res) => {\n this.loading = false;\n console.log('Center role mapping data refreshed:', res);\n },\n error: (error) => {\n this.loading = false;\n console.error('Error refreshing center role mapping data:', error);\n }\n });\n }\n\n } else if (ministryType === 'state') {\n const departmentId = this.sharedService.cbpPlanFinalObj.departments;\n this.sharedService.getRoleMappingByStateCenterAndDepartment(ministryId, departmentId).subscribe({\n next: (res) => {\n this.loading = false;\n console.log('State role mapping data refreshed:', res);\n },\n error: (error) => {\n this.loading = false;\n console.error('Error refreshing state role mapping data:', error);\n }\n });\n }\n }\n let cbpPlanFinalObj = this.sharedService.cbpPlanFinalObj\n console.log('cbpPlanFinalObj--', cbpPlanFinalObj)\n if (cbpPlanFinalObj?.departments) {\n this.department_id = cbpPlanFinalObj?.departments\n }\n if (cbpPlanFinalObj?.ministry && cbpPlanFinalObj?.ministry.identifier) {\n this.state_center_id = cbpPlanFinalObj?.ministry.identifier\n }\n\n this.role_mapping_generation = cbpPlanFinalObj?.role_mapping_generation || '[]';\n // Map role_mapping_generation to internal designations array\n this.numbers = Array.from({ length: this.role_mapping_generation.length }, (_, i) => i + 1);\n this.designations = this.role_mapping_generation.map((r: any, index: number) => ({\n id: r.id,\n name: r.designation_name,\n sort_order: r.sort_order || index + 1,\n searchFilter: '', // Search input value\n filteredNumbers: [...this.numbers] // Numbers to display in select\n }));\n\n\n this.loading = false\n this.numbers = Array.from({ length: this.designations.length }, (_, i) => i + 1);\n // Sort by sort_order\n this.designations.sort((a, b) => a.sort_order - b.sort_order);\n this.updateSortOrderByIndex();\n }\n\ntoggleDropdown(item: any, event: Event) {\n event.stopPropagation();\n this.openDropdownId = this.openDropdownId === item.id ? null : item.id;\n\n setTimeout(() => {\n const dropdownEl = document.getElementById('dropdown-' + item.id);\n if (!dropdownEl) return;\n\n const rect = dropdownEl.getBoundingClientRect();\n const windowHeight = window.innerHeight;\n\n // If dropdown bottom exceeds viewport, open upward\n if (rect.bottom > windowHeight) {\n dropdownEl.style.top = `-${rect.height}px`; // open above\n } else {\n dropdownEl.style.top = `100%`; // open below\n }\n });\n}\n\n\n// Select number from dropdown\nselectNumber(item: any, num: number, event: Event) {\n event.stopPropagation(); // IMPORTANT: prevents parent toggle\n\n // Set the selected value\n item.sort_order = num;\n\n // Close dropdown\n this.openDropdownId = null;\n\n // Reset search\n item.searchFilter = '';\n item.filteredNumbers = [...this.numbers];\n\n // Reorder array\n this.onOrderChange(item);\n}\n\nfilterNumbers(item: any) {\n if (!item.searchFilter) {\n item.filteredNumbers = [...this.numbers];\n } else {\n const filterValue = item.searchFilter.toString().toLowerCase();\n item.filteredNumbers = this.numbers.filter(num =>\n num.toString().toLowerCase().includes(filterValue)\n );\n }\n}\n\nonOrderChange(item: any) {\n const selectedOrder = item.sort_order;\n const currentIndex = this.designations.findIndex(d => d.id === item.id);\n\n this.designations.splice(currentIndex, 1);\n this.designations.splice(selectedOrder - 1, 0, item);\n\n this.designations.forEach((d, index) => (d.sort_order = index + 1));\n}\n\ntrackById(index: number, item: any) {\n return item.id;\n}\n\n\n}\n","<div class=\"overlay\" *ngIf=\"isOpen\" (click)=\"cancel()\"></div>\n\n<div class=\"drawer\" [class.open]=\"isOpen\">\n\n <!-- HEADER -->\n <div class=\"drawer-header\">\n <h4>Update Designation Hierarchy</h4>\n <button class=\"close-btn\" (click)=\"cancel()\">✕</button>\n </div>\n\n <!-- BODY -->\n <div class=\"drawer-body\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\n\n <div class=\"designation-item\" *ngFor=\"let item of designations; trackBy: trackById; let i = index\" cdkDrag>\n <div class=\"drag-handle\" cdkDragHandle>\n <mat-icon>drag_indicator</mat-icon>\n </div>\n\n <div class=\"designation-name\">{{ item.name }}</div>\n\n <!-- Custom Select -->\n <div class=\"custom-select\">\n <div class=\"selected-value\" (click)=\"toggleDropdown(item, $event)\">\n {{ item.sort_order }}\n <span class=\"chevron\" [class.open]=\"openDropdownId === item.id\"><mat-icon>arrow_drop_down</mat-icon></span>\n </div>\n\n <div class=\"dropdown\" [id]=\"'dropdown-' + item.id\" *ngIf=\"openDropdownId === item.id\"\n (click)=\"$event.stopPropagation()\">\n <input type=\"text\" placeholder=\"Search...\" [(ngModel)]=\"item.searchFilter\"\n (ngModelChange)=\"filterNumbers(item)\" class=\"search-box\">\n\n <div class=\"option\" *ngFor=\"let num of item.filteredNumbers\"\n (click)=\"selectNumber(item, num, $event)\">\n {{ num }}\n </div>\n </div>\n\n </div>\n\n </div>\n\n\n\n\n\n </div>\n\n <!-- FOOTER -->\n <div class=\"drawer-footer\">\n <button class=\"btn cancel\" (click)=\"cancel()\">Cancel</button>\n <button class=\"btn submit\" (click)=\"submit()\">Submit</button>\n </div>\n\n</div>\n\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>","import { Component, Inject, ChangeDetectorRef, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators, FormArray } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { HttpClient } from '@angular/common/http';\nimport { SharedService } from '../../modules/shared/services/shared.service';\n\n@Component({\n selector: 'app-add-course',\n templateUrl: './add-course.component.html',\n styleUrls: ['./add-course.component.scss']\n})\nexport class AddCourseComponent implements OnInit {\n courseForm: FormGroup;\n loading = false\n planData:any\n \n // Enhanced competency selection properties\n competenciesData: any[] = [];\n availableThemes: any[] = [];\n availableSubThemes: any[] = [];\n filteredThemes: any[] = [];\n filteredSubThemes: string[] = [];\n selectedCompetencyType = '';\n selectedTheme = '';\n selectedSubTheme = '';\n manualTheme = '';\n manualSubTheme = '';\n themeSearchText = '';\n subThemeSearchText = '';\n competenciesCount = {total:0, behavioral:0, functional:0, domain:0};\n \n // Prefill properties\n isCompetencyPrefilled = false;\n prefilledCompetencyType = '';\n prefilledTheme = '';\n prefilledSubTheme = '';\n constructor(public dialogRef: MatDialogRef<AddCourseComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n public sharedService: SharedService,\n private fb: FormBuilder,\n public snackBar: MatSnackBar,\n private http: HttpClient,\n private cdRef: ChangeDetectorRef) {\n this.planData = data\n this.initializeForm();\n }\n \n ngOnInit() {\n this.loadCompetenciesData();\n this.updateCompetencyCounts();\n this.checkForPrefilledData();\n }\n \n checkForPrefilledData() {\n console.log('=== CheckForPrefilledData ===');\n console.log('Full data object:', this.data);\n \n if (this.data && this.data.prefillCompetency) {\n console.log('✅ Prefill competency data found:', this.data.prefillCompetency);\n \n this.isCompetencyPrefilled = true;\n this.prefilledCompetencyType = this.data.prefillCompetency.type;\n this.prefilledTheme = this.data.prefillCompetency.theme;\n this.prefilledSubTheme = this.data.prefillCompetency.subTheme || '';\n \n console.log('Processed prefill data:', {\n isCompetencyPrefilled: this.isCompetencyPrefilled,\n prefilledCompetencyType: this.prefilledCompetencyType,\n prefilledTheme: this.prefilledTheme,\n prefilledSubTheme: this.prefilledSubTheme\n });\n \n // Set the competency type and trigger the theme loading\n this.selectedCompetencyType = this.prefilledCompetencyType;\n this.courseForm.patchValue({\n competencyType: this.prefilledCompetencyType\n });\n \n console.log('Form updated with competency type:', this.prefilledCompetencyType);\n \n // For Domain competencies, set manual theme and subtheme inputs and auto-add\n if (this.prefilledCompetencyType === 'Domain') {\n console.log('Setting Domain manual inputs...');\n this.courseForm.patchValue({\n manualThemeInput: this.prefilledTheme,\n manualSubThemeInput: this.prefilledSubTheme\n });\n console.log('Domain form values set:', {\n manualThemeInput: this.prefilledTheme,\n manualSubThemeInput: this.prefilledSubTheme\n });\n \n // Auto-add the domain competency\n setTimeout(() => {\n console.log('Adding prefilled Domain competency...');\n this.addPrefilledCompetency();\n }, 100);\n } else {\n console.log('Will handle Behavioral/Functional after competencies data loads...');\n // For Behavioral/Functional, wait for competencies data to load\n // The theme and subtheme will be set in loadCompetenciesData after data is available\n }\n } else {\n console.log('❌ No prefill competency data found');\n console.log('data.prefillCompetency:', this.data?.prefillCompetency);\n }\n }\n \n loadCompetenciesData() {\n this.sharedService.getCompetencyJson().subscribe({\n next: (data) => {\n this.competenciesData = data;\n console.log('Competencies data loaded:', this.competenciesData);\n \n // Handle prefilled data after competencies are loaded\n if (this.isCompetencyPrefilled && this.prefilledCompetencyType !== 'Domain') {\n this.handlePrefilledBehavioralFunctional();\n }\n },\n error: (error) => {\n console.error('Error loading competencies data:', error);\n }\n });\n }\n \n handlePrefilledBehavioralFunctional() {\n console.log('=== HandlePrefilledBehavioralFunctional ===');\n console.log('Prefilled competency type:', this.prefilledCompetencyType);\n console.log('Prefilled theme:', this.prefilledTheme);\n console.log('Prefilled subTheme:', this.prefilledSubTheme);\n \n // Load themes for the prefilled competency type\n this.onCompetencyTypeChange(this.prefilledCompetencyType);\n \n // Find and set the theme if it exists in the data\n setTimeout(() => {\n console.log('Available themes:', this.availableThemes);\n \n const matchingTheme = this.availableThemes.find(theme => \n theme.name.toLowerCase() === this.prefilledTheme.toLowerCase()\n );\n \n console.log('Matching theme found:', matchingTheme);\n \n if (matchingTheme) {\n this.selectedTheme = matchingTheme.name;\n this.courseForm.patchValue({\n competencyTheme: matchingTheme.name\n });\n this.onThemeChange(matchingTheme.name);\n \n console.log('Theme set successfully:', matchingTheme.name);\n \n // If subTheme is provided, try to set it after themes are loaded\n if (this.prefilledSubTheme) {\n setTimeout(() => {\n console.log('Available subThemes:', this.availableSubThemes);\n \n const matchingSubTheme = this.availableSubThemes.find(subTheme => \n subTheme.toLowerCase() === this.prefilledSubTheme.toLowerCase()\n );\n \n console.log('Matching subTheme found:', matchingSubTheme);\n \n if (matchingSubTheme) {\n this.selectedSubTheme = matchingSubTheme;\n this.courseForm.patchValue({\n competencySubTheme: matchingSubTheme\n });\n console.log('SubTheme set successfully:', matchingSubTheme);\n } else {\n console.log('⚠️ SubTheme not found in available options');\n }\n \n // Add the prefilled competency with the specified theme and sub-theme\n setTimeout(() => {\n console.log('Adding prefilled competency with theme and subtheme...');\n this.addPrefilledCompetency();\n }, 100);\n }, 300);\n } else {\n // Automatically add the prefilled competency with just the theme\n setTimeout(() => {\n console.log('Adding prefilled competency with theme only...');\n this.addPrefilledCompetency();\n }, 200);\n }\n } else {\n console.log('⚠️ Theme not found in available options');\n }\n }, 100);\n }\n \n addPrefilledCompetency() {\n // For prefilled competencies, use the theme name as the sub-theme\n // This ensures the competency gap is addressed\n const exists = this.competenciesArray.value.some(c => \n c.theme === this.prefilledTheme && c.type === this.prefilledCompetencyType\n );\n \n if (!exists) {\n const newComp = this.fb.group({\n type: [this.prefilledCompetencyType],\n theme: [this.prefilledTheme],\n sub_theme: [this.prefilledTheme] // Use theme as sub_theme for gap filling\n });\n this.competenciesArray.push(newComp);\n this.updateCompetencyCounts();\n this.cdRef.detectChanges();\n \n console.log('Auto-added prefilled competency:', {\n type: this.prefilledCompetencyType,\n theme: this.prefilledTheme,\n sub_theme: this.prefilledTheme\n });\n }\n }\n \n initializeForm() {\n this.courseForm = this.fb.group({\n courseName: ['', Validators.required],\n summary: [''],\n platformName: ['', Validators.required],\n courseUrl: ['', Validators.required],\n competencyType: [''],\n competencyTheme: [''],\n competencySubTheme: [''],\n manualThemeInput: [''],\n manualSubThemeInput: [''],\n themeSearch: [''],\n subThemeSearch: [''],\n competencies: this.fb.array([])\n });\n\n // Listen to form changes to trigger validation updates\n this.courseForm.valueChanges.subscribe(() => {\n this.cdRef.detectChanges();\n });\n }\n cancelForm() {\n this.dialogRef.close()\n }\n\n get competenciesArray(): FormArray {\n return this.courseForm.get('competencies') as FormArray;\n }\n \n updateCompetencyCounts() {\n const comps = this.competenciesArray.value;\n this.competenciesCount = {total: 0, behavioral: 0, functional: 0, domain: 0};\n comps.forEach(c => {\n this.competenciesCount.total++;\n if (c.type.toLowerCase() === 'behavioral') this.competenciesCount.behavioral++;\n if (c.type.toLowerCase() === 'functional') this.competenciesCount.functional++;\n if (c.type.toLowerCase() === 'domain') this.competenciesCount.domain++;\n });\n }\n \n onCompetencyTypeChange(type: string) {\n this.selectedCompetencyType = type;\n this.selectedTheme = '';\n this.selectedSubTheme = '';\n this.manualTheme = '';\n this.manualSubTheme = '';\n this.availableThemes = [];\n this.availableSubThemes = [];\n this.filteredThemes = [];\n this.filteredSubThemes = [];\n this.themeSearchText = '';\n this.subThemeSearchText = '';\n \n // Reset form controls\n this.courseForm.patchValue({\n competencyTheme: '',\n competencySubTheme: '',\n manualThemeInput: '',\n manualSubThemeInput: '',\n themeSearch: '',\n subThemeSearch: ''\n });\n \n if (type === 'Behavioral' || type === 'Functional') {\n // Load themes from JSON for Behavioral and Functional\n const competencyCategory = this.competenciesData.find(cat => \n cat.name.toLowerCase() === type.toLowerCase() || \n (type === 'Behavioral' && cat.name === 'Behavioural')\n );\n \n if (competencyCategory) {\n this.availableThemes = competencyCategory.competency_theme || [];\n this.filteredThemes = [...this.availableThemes];\n }\n }\n // For Domain, no themes are loaded - user will enter manually\n }\n \n onThemeChange(themeName: string) {\n this.selectedTheme = themeName;\n this.selectedSubTheme = '';\n this.availableSubThemes = [];\n this.filteredSubThemes = [];\n this.subThemeSearchText = '';\n \n this.courseForm.patchValue({\n competencySubTheme: '',\n subThemeSearch: ''\n });\n \n // Find the selected theme and load its sub-themes\n const selectedThemeObj = this.availableThemes.find(theme => theme.name === themeName);\n if (selectedThemeObj) {\n this.availableSubThemes = selectedThemeObj.competency_sub_theme || [];\n this.filteredSubThemes = [...this.availableSubThemes];\n }\n }\n \n onSubThemeChange(subThemeName: string) {\n this.selectedSubTheme = subThemeName;\n }\n \n filterThemes(searchText: string) {\n this.themeSearchText = searchText;\n if (!searchText.trim()) {\n this.filteredThemes = [...this.availableThemes];\n } else {\n this.filteredThemes = this.availableThemes.filter(theme => \n theme.name.toLowerCase().includes(searchText.toLowerCase())\n );\n }\n }\n \n filterSubThemes(searchText: string) {\n this.subThemeSearchText = searchText;\n if (!searchText.trim()) {\n this.filteredSubThemes = [...this.availableSubThemes];\n } else {\n this.filteredSubThemes = this.availableSubThemes.filter(subTheme => \n subTheme.toLowerCase().includes(searchText.toLowerCase())\n );\n }\n }\n \n addCompetency() {\n let type = this.selectedCompetencyType;\n let theme = '';\n let subTheme = '';\n \n if (type === 'Domain') {\n // For Domain, use manual input\n theme = this.courseForm.value.manualThemeInput?.trim();\n subTheme = this.courseForm.value.manualSubThemeInput?.trim();\n } else {\n // For Behavioral/Functional, use dropdown selections\n theme = this.selectedTheme;\n subTheme = this.selectedSubTheme;\n }\n \n if (type && theme && subTheme) {\n const exists = this.competenciesArray.value.some(c => \n c.theme === theme && c.sub_theme === subTheme && c.type === type\n );\n \n if (!exists) {\n const newComp = this.fb.group({\n type: [type],\n theme: [theme],\n sub_theme: [subTheme]\n });\n this.competenciesArray.push(newComp);\n }\n \n // Clear input fields after adding\n this.resetCompetencyForm();\n }\n \n const currentValues = this.competenciesArray.value;\n this.courseForm.patchValue({ competencies: [...currentValues] });\n \n this.updateCompetencyCounts();\n this.cdRef.detectChanges(); // Trigger validation update\n console.log(this.courseForm?.get('competencies')?.value);\n }\n \n resetCompetencyForm() {\n this.selectedCompetencyType = '';\n this.selectedTheme = '';\n this.selectedSubTheme = '';\n this.manualTheme = '';\n this.manualSubTheme = '';\n this.availableThemes = [];\n this.availableSubThemes = [];\n this.filteredThemes = [];\n this.filteredSubThemes = [];\n this.themeSearchText = '';\n this.subThemeSearchText = '';\n \n this.courseForm.patchValue({\n competencyType: '',\n competencyTheme: '',\n competencySubTheme: '',\n manualThemeInput: '',\n manualSubThemeInput: '',\n themeSearch: '',\n subThemeSearch: ''\n });\n }\n \n canAddCompetency(): boolean {\n if (!this.selectedCompetencyType) return false;\n \n if (this.selectedCompetencyType === 'Domain') {\n const theme = this.courseForm.value.manualThemeInput?.trim();\n const subTheme = this.courseForm.value.manualSubThemeInput?.trim();\n return !!(theme && subTheme);\n } else {\n return !!(this.selectedTheme && this.selectedSubTheme);\n }\n }\n\n canSaveCourse(): boolean {\n // Check if required fields are filled\n const courseName = this.courseForm.value.courseName?.trim();\n const platformName = this.courseForm.value.platformName?.trim();\n const courseUrl = this.courseForm.value.courseUrl?.trim();\n \n // Check if at least one competency is added\n const hasCompetencies = this.competenciesArray.length > 0;\n \n return !!(courseName && platformName && courseUrl && hasCompetencies);\n }\n \n getCompetenciesByType(type: string): any[] {\n return (this.courseForm?.get('competencies')?.value || []).filter(c => c.type === type);\n }\n \n deleteCompetency(comp) {\n const index = this.competenciesArray.controls.findIndex(\n control => control.value.theme === comp.theme && control.value.type === comp.type\n );\n \n if (index !== -1) {\n this.competenciesArray.removeAt(index);\n }\n this.updateCompetencyCounts();\n this.cdRef.detectChanges(); // Trigger validation update\n }\n \n saveCourse() {\n this.loading = true\n \n // Transform competencies to the required API format\n const competencies = this.competenciesArray.value.map(comp => ({\n \"competencyAreaName\": comp.type,\n \"competencyThemeName\": comp.theme,\n \"competencySubThemeName\": comp.sub_theme\n }));\n \n let reqBody = {\n \"role_mapping_id\": this.planData.id,\n \"name\": this.courseForm.value.courseName,\n \"platform\": this.courseForm.value.platformName,\n \"public_link\": this.courseForm.value.courseUrl,\n \"rationale\": this.courseForm.value.summary,\n \"competencies\": competencies\n }\n \n console.log('Request body:', reqBody);\n \n // this.sharedService.addUserCourse(reqBody).subscribe(()=>{\n // this.loading = false\n // this.snackBar.open('Course Added Successfully', 'X', {\n // duration: 3000,\n // panelClass: ['snackbar-success']\n // });\n // })\n\n this.sharedService.addUserCourse(reqBody).subscribe({\n next: () => {\n this.loading = false\n this.snackBar.open('Course Added Successfully', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n },\n error: (error) => {\n this.loading = false\n this.snackBar.open(error?.error?.detail, 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n });\n this.dialogRef.close('saved')\n }\n\n closeDialog() {\n this.dialogRef.close()\n }\n}\n","<div class=\"view-cbp-plan\">\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div>\n <div class=\"heading\">Add Course</div>\n </div>\n <div class=\"cursor-pointer\" (click)=\"closeDialog()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n </div>\n <div class=\"section-container\" [formGroup]=\"courseForm\">\n\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Course Name</p>\n </div>\n <div class=\"mt-4 additional-details\">\n <input type=\"text\" placeholder=\"Enter Course Name\" formControlName=\"courseName\" [value]=\"\"\n style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 12px; width: 100%;font-size: 14px;font-family: 'Lato';\">\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Summary / Rationale:</p>\n </div>\n <div class=\"mt-4 additional-details\">\n <textarea class=\"custom-textarea\" formControlName=\"summary\" rows=\"5\" placeholder=\"Enter Summary\"\n [value]=\"\"></textarea>\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Platform Name</p>\n </div>\n <div class=\"mt-4 additional-details\">\n <input type=\"text\" placeholder=\"Enter Platform Name\" formControlName=\"platformName\" [value]=\"\"\n style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 12px; width: 100%;font-size: 14px;font-family: 'Lato';\">\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Course URL</p>\n </div>\n <div class=\"mt-4 additional-details\">\n <input type=\"text\" placeholder=\"Enter Course Url\" formControlName=\"courseUrl\" [value]=\"\"\n style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 12px; width: 100%;font-size: 14px;font-family: 'Lato';\">\n </div>\n </div>\n\n\n\n\n\n <div class=\"mt-2 section\">\n <div class=\"competency-container mt-4\">\n <div class=\"outside-layer-total\">\n <div class=\"inside-layer\">\n Total Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.total}}\n </div>\n </div>\n <div class=\"outside-layer-behavioral\">\n <div class=\"inside-layer\">\n Behavioral Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.behavioral}}\n </div>\n </div>\n <div class=\"outside-layer-functional\">\n <div class=\"inside-layer\">\n Functional Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.functional}}\n </div>\n </div>\n <div class=\"outside-layer-domain\">\n <div class=\"inside-layer\">\n Domain Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.domain}}\n </div>\n </div>\n </div>\n <div class=\"sub-heading mt-4\">\n <p>Competency</p>\n </div>\n <div class=\"enhanced-competency-section mt-4\">\n <!-- Step 1: Select Competency Type -->\n <div class=\"competency-step\">\n <label class=\"step-label\">1. Select Core Competency Type</label>\n <div class=\"competency-dropdown-container\">\n <mat-form-field appearance=\"outline\" class=\"competency-dropdown\">\n <mat-select formControlName=\"competencyType\"\n placeholder=\"Select Competency Type\"\n [disabled]=\"isCompetencyPrefilled\"\n (selectionChange)=\"onCompetencyTypeChange($event.value)\">\n <mat-option value=\"Behavioral\">Behavioural</mat-option>\n <mat-option value=\"Functional\">Functional</mat-option>\n <mat-option value=\"Domain\">Domain</mat-option>\n </mat-select>\n </mat-form-field>\n <div *ngIf=\"isCompetencyPrefilled\" class=\"prefill-info\">\n <small class=\"text-muted\">\n <mat-icon class=\"info-icon\">info</mat-icon>\n Core competency type is pre-selected based on gap analysis\n </small>\n </div>\n </div>\n </div>\n\n <!-- Step 2: Theme Selection (Behavioral/Functional from JSON, Domain manual) -->\n <div class=\"competency-step\" *ngIf=\"selectedCompetencyType\">\n <label class=\"step-label\">2. Select/Enter Theme</label>\n\n <!-- For Behavioral and Functional: Searchable Dropdown from JSON -->\n <div class=\"competency-dropdown-container\"\n *ngIf=\"selectedCompetencyType === 'Behavioral' || selectedCompetencyType === 'Functional'\">\n <mat-form-field appearance=\"outline\" class=\"competency-dropdown\">\n <mat-select formControlName=\"competencyTheme\"\n placeholder=\"Search and select theme\"\n [disabled]=\"isCompetencyPrefilled\"\n (selectionChange)=\"onThemeChange($event.value)\">\n <!-- Search input inside dropdown -->\n <mat-option class=\"search-option\" disabled>\n <mat-form-field appearance=\"outline\" class=\"search-field\">\n <input matInput\n placeholder=\"Search themes...\"\n formControlName=\"themeSearch\"\n (input)=\"filterThemes($event.target.value)\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n </mat-form-field>\n </mat-option>\n\n <!-- Theme options -->\n <mat-option *ngFor=\"let theme of filteredThemes\" [value]=\"theme.name\">\n {{theme.name}}\n </mat-option>\n\n <!-- No results message -->\n <mat-option *ngIf=\"filteredThemes.length === 0 && themeSearchText\" disabled>\n No themes found matching \"{{themeSearchText}}\"\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div *ngIf=\"isCompetencyPrefilled\" class=\"prefill-info\">\n <small class=\"text-muted\">\n <mat-icon class=\"info-icon\">info</mat-icon>\n Theme is pre-selected based on gap analysis\n </small>\n </div>\n </div>\n\n <!-- For Domain: Manual input -->\n <div class=\"manual-input-container\" *ngIf=\"selectedCompetencyType === 'Domain'\">\n <input type=\"text\"\n formControlName=\"manualThemeInput\"\n placeholder=\"Enter Theme manually\"\n [disabled]=\"isCompetencyPrefilled\"\n class=\"manual-input\" />\n <div *ngIf=\"isCompetencyPrefilled\" class=\"prefill-info\">\n <small class=\"text-muted\">\n <mat-icon class=\"info-icon\">info</mat-icon>\n Theme is pre-selected based on gap analysis\n </small>\n </div>\n </div>\n </div>\n\n <!-- Step 3: Sub-theme Selection -->\n <div class=\"competency-step\" *ngIf=\"selectedTheme || (selectedCompetencyType === 'Domain')\">\n <label class=\"step-label\">3. Select/Enter Sub-theme</label>\n\n <!-- For Behavioral and Functional: Searchable Dropdown based on selected theme -->\n <div class=\"competency-dropdown-container\"\n *ngIf=\"selectedCompetencyType === 'Behavioral' || selectedCompetencyType === 'Functional'\">\n <mat-form-field appearance=\"outline\" class=\"competency-dropdown\">\n <mat-select formControlName=\"competencySubTheme\"\n placeholder=\"Search and select sub-theme\"\n [disabled]=\"isCompetencyPrefilled\"\n (selectionChange)=\"onSubThemeChange($event.value)\">\n <!-- Search input inside dropdown -->\n <mat-option class=\"search-option\" disabled>\n <mat-form-field appearance=\"outline\" class=\"search-field\">\n <input matInput\n placeholder=\"Search sub-themes...\"\n formControlName=\"subThemeSearch\"\n (input)=\"filterSubThemes($event.target.value)\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n </mat-form-field>\n </mat-option>\n\n <!-- Sub-theme options -->\n <mat-option *ngFor=\"let subTheme of filteredSubThemes\" [value]=\"subTheme\">\n {{subTheme}}\n </mat-option>\n\n <!-- No results message -->\n <mat-option *ngIf=\"filteredSubThemes.length === 0 && subThemeSearchText\" disabled>\n No sub-themes found matching \"{{subThemeSearchText}}\"\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div *ngIf=\"isCompetencyPrefilled\" class=\"prefill-info\">\n <small class=\"text-muted\">\n <mat-icon class=\"info-icon\">info</mat-icon>\n Sub-theme is pre-selected based on gap analysis\n </small>\n </div>\n </div>\n\n <!-- For Domain: Manual input -->\n <div class=\"manual-input-container\" *ngIf=\"selectedCompetencyType === 'Domain'\">\n <input type=\"text\"\n formControlName=\"manualSubThemeInput\"\n placeholder=\"Enter Sub-theme manually\"\n [disabled]=\"isCompetencyPrefilled\"\n class=\"manual-input\" />\n <div *ngIf=\"isCompetencyPrefilled\" class=\"prefill-info\">\n <small class=\"text-muted\">\n <mat-icon class=\"info-icon\">info</mat-icon>\n Sub-theme is pre-selected based on gap analysis\n </small>\n </div>\n </div>\n </div>\n\n <!-- Add Button -->\n <div class=\"add-button-section\" *ngIf=\"selectedCompetencyType\">\n <button type=\"button\"\n class=\"add-competency-btn\"\n [disabled]=\"!canAddCompetency()\"\n [ngClass]=\"canAddCompetency() ? 'btn-active' : 'btn-disable'\"\n (click)=\"addCompetency()\">\n Add Competency\n </button>\n </div>\n </div>\n <div class=\"mt-4\">\n <div class=\"competency-sub-heading mt-2\" *ngIf=\"getCompetenciesByType('Behavioral')?.length\">\n Behavioral Competencies\n </div>\n\n <div class=\"competency-grid mt-2\">\n <div class=\"competency-item behavioural-pill\"\n *ngFor=\"let comp of getCompetenciesByType('Behavioral')\">\n <span class=\"competency-text-behavioral\">\n {{ comp.theme }} - {{ comp.sub_theme }}\n </span>\n <span class=\"cursor-pointer close\" (click)=\"deleteCompetency(comp)\">\n <mat-icon>close</mat-icon>\n </span>\n </div>\n </div>\n </div>\n <div class=\"mt-4\">\n <div class=\"competency-sub-heading mt-2\" *ngIf=\"getCompetenciesByType('Functional')?.length\">\n Functional Competencies</div>\n <div class=\"competency-grid mt-2\">\n <div class=\"competency-item functional-pill\"\n *ngFor=\"let comp of getCompetenciesByType('Functional')\">\n <span class=\"competency-text-functional\">\n {{ comp.theme }} - {{ comp.sub_theme }}\n </span>\n <span class=\"cursor-pointer close\" (click)=\"deleteCompetency(comp)\">\n <mat-icon>close</mat-icon>\n </span>\n </div>\n </div>\n </div>\n <div class=\"mt-4\">\n <div class=\"competency-sub-heading mt-2\" *ngIf=\"getCompetenciesByType('Domain')?.length\">Domain Competencies</div>\n <div class=\"competency-grid mt-2\">\n <div class=\"competency-item domain-pill\"\n *ngFor=\"let comp of getCompetenciesByType('Domain')\">\n <span class=\"competency-text-domain\">\n {{ comp.theme }} - {{ comp.sub_theme }}\n </span>\n <span class=\"cursor-pointer close\" (click)=\"deleteCompetency(comp)\">\n <mat-icon>close</mat-icon>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"popup-footer\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Cancel\" (click)=\"cancelForm()\" />\n </div>\n <div>\n <input [class]=\"canSaveCourse() ? 'btn-active' : 'btn-disable'\" \n type=\"button\" \n value=\"Save\" \n [disabled]=\"!canSaveCourse()\"\n (click)=\"canSaveCourse() && saveCourse()\" />\n </div>\n </div>\n</div>\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>","// role-mapping.service.ts\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { InitService } from './init.service';\nimport { Observable } from 'rxjs';\n\nconst API_END_POINTS = {\n GET_ROLE_MAPPING: 'cbp-tpc-ai/api/v1/role-mapping/generate_stream',\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RoleMappingService {\n baseUrl: string\n configDetails: any\n screenWidth: number;\n headers:any\n onResize(event) {\n this.screenWidth = event.target.innerWidth;\n }\n constructor(\n private http: HttpClient,\n private initSvc: InitService,\n ) {\n if (initSvc && this.initSvc.baseUrl && this.initSvc.configDetails) {\n this.baseUrl = this.initSvc.baseUrl\n this.configDetails = this.initSvc.configDetails\n } else {\n this.setConfiDetails()\n }\n this.screenWidth = window.innerWidth;\n // const storageData:any = JSON.parse(localStorage.getItem('loginData'))\n // console.log('storageData--', storageData)\n // this.headers = new HttpHeaders({\n // 'Authorization': `Bearer ${storageData?.access_token}`\n // });\n }\n\n setConfiDetails(configDetails: any = null) {\n if (configDetails) {\n this.configDetails = configDetails\n this.baseUrl = configDetails.portalURL\n } else {\n this.getConfigDetails().subscribe((response: any) => {\n this.configDetails = response\n this.baseUrl = response.portalURL\n })\n }\n }\n getConfig() {\n if (this.configDetails) {\n return this.configDetails;\n }\n return null;\n }\n getConfigDetails(): Observable<any> {\n\n return this.http.get<any>('assets/jsonfiles/configurations.json');\n }\n\n // async generateRoleMapping(\n // reqBody: any,\n // file: File[] | null,\n // onChunk: (chunk: string) => void,\n // onStart?: () => void,\n // onEnd?: () => void,\n // onError?: (error: any) => void\n // ): Promise<void> {\n // const storageData:any = JSON.parse(localStorage.getItem('loginData'))\n // console.log('storageData--', storageData)\n // this.headers = new HttpHeaders({\n // 'Authorization': `Bearer ${storageData?.access_token}`\n // });\n\n // const headersObj: Record<string, string> = {};\n\n // this.headers.keys().forEach(key => {\n // const value = this.headers.get(key);\n // if (value !== null) {\n // headersObj[key] = value;\n // }\n // });\n // const formData = new FormData();\n\n // if (reqBody.state_center_id) {\n // formData.append('state_center_id', reqBody.state_center_id);\n // }\n\n // if (reqBody.department_id) {\n // formData.append('department_id', reqBody.department_id);\n // }\n\n // if (reqBody.instruction) {\n // formData.append('instruction', reqBody.instruction);\n // }\n\n // // Add sector_name parameter as required by the API\n // formData.append('sector_name', 'Government');\n\n // if (file) {\n // formData.append('additional_document', file);\n // }\n\n // try {\n // const response = await fetch(`${this.baseUrl}${API_END_POINTS.GET_ROLE_MAPPING}`, {\n // method: 'POST',\n // body: formData,\n // headers: headersObj\n // });\n\n // if (!response.ok) {\n // const errorText = await response.text();\n // let errorDetail = '';\n \n // try {\n // const errorJson = JSON.parse(errorText);\n // errorDetail = errorJson.detail || `HTTP error! status: ${response.status}`;\n // } catch {\n // errorDetail = errorText || `HTTP error! status: ${response.status}`;\n // }\n \n // // Pass specific error details to onError callback\n // if (onError) onError({ \n // status: response.status, \n // detail: errorDetail,\n // isExistingRoleMapping: errorDetail.includes('Role mapping already exists')\n // });\n // return;\n // }\n\n // if (!response.body) {\n // throw new Error(`Server responded with ${response.status}`);\n // }\n\n // const reader = response.body.getReader();\n // const decoder = new TextDecoder('utf-8');\n // let buffer = '';\n\n // while (true) {\n // const { value, done } = await reader.read();\n // if (done) break;\n\n // buffer += decoder.decode(value, { stream: true });\n\n // const events = buffer.split('\\n\\n');\n // buffer = events.pop() || ''; // Save incomplete event\n\n // for (const rawEvent of events) {\n // const lines = rawEvent.split('\\n');\n // let eventType = 'message';\n // let data = '';\n\n // for (const line of lines) {\n // if (line.startsWith('event:')) {\n // eventType = line.slice(6).trim();\n // } else if (line.startsWith('data:')) {\n // data += line.slice(5).trim();\n // }\n // }\n\n // if (eventType === 'start' && onStart) onStart();\n // else if (eventType === 'chunk') onChunk(JSON.parse(data).chunk);\n // else if (eventType === 'end' && onEnd) onEnd();\n // }\n // }\n\n // if (onEnd) onEnd();\n // } catch (err) {\n // console.error('Streaming error:', err);\n // if (onError) onError(err);\n // }\n // }\n\n async generateRoleMapping(\n reqBody: any,\n files: File | File[] | null,\n onChunk: (chunk: string) => void,\n onStart?: () => void,\n onEnd?: () => void,\n onError?: (error: any) => void\n ): Promise<void> {\n const storageData: any = JSON.parse(localStorage.getItem('loginData'));\n console.log('storageData--', storageData);\n \n this.headers = new HttpHeaders({\n 'Authorization': `Bearer ${storageData?.access_token}`\n });\n \n const headersObj: Record<string, string> = {};\n this.headers.keys().forEach(key => {\n const value = this.headers.get(key);\n if (value !== null) {\n headersObj[key] = value;\n }\n });\n \n const formData = new FormData();\n \n if (reqBody.state_center_id) formData.append('state_center_id', reqBody.state_center_id);\n if (reqBody.department_id) formData.append('department_id', reqBody.department_id);\n if (reqBody.instruction) formData.append('instruction', reqBody.instruction);\n \n // Add sector_name parameter as required by the API\n formData.append('sector_name', 'Government');\n console.log('files------------', files)\n // Handle single or multiple files\n if (files) {\n if (Array.isArray(files)) {\n files.forEach((file, index) => {\n formData.append('additional_document', file, file.name);\n });\n } else {\n formData.append('additional_document', files, files.name);\n }\n }\n \n try {\n // After appending files and other fields\n console.log('FormData contents:');\n formData.forEach((value, key) => {\n if (value instanceof File) {\n console.log(`${key}: ${value.name} (${value.size} bytes)`);\n } else {\n console.log(`${key}: ${value}`);\n }\n }); \n\n const response = await fetch(`${this.baseUrl}${API_END_POINTS.GET_ROLE_MAPPING}`, {\n method: 'POST',\n body: formData,\n headers: headersObj\n });\n \n if (!response.ok) {\n const errorText = await response.text();\n let errorDetail = '';\n \n try {\n const errorJson = JSON.parse(errorText);\n errorDetail = errorJson.detail || `HTTP error! status: ${response.status}`;\n } catch {\n errorDetail = errorText || `HTTP error! status: ${response.status}`;\n }\n \n if (onError) onError({ \n status: response.status, \n detail: errorDetail,\n isExistingRoleMapping: errorDetail.includes('Role mapping already exists')\n });\n return;\n }\n \n if (!response.body) {\n throw new Error(`Server responded with ${response.status}`);\n }\n \n const reader = response.body.getReader();\n const decoder = new TextDecoder('utf-8');\n let buffer = '';\n \n while (true) {\n const { value, done } = await reader.read();\n if (done) break;\n \n buffer += decoder.decode(value, { stream: true });\n \n const events = buffer.split('\\n\\n');\n buffer = events.pop() || ''; // Save incomplete event\n \n for (const rawEvent of events) {\n const lines = rawEvent.split('\\n');\n let eventType = 'message';\n let data = '';\n \n for (const line of lines) {\n if (line.startsWith('event:')) eventType = line.slice(6).trim();\n else if (line.startsWith('data:')) data += line.slice(5).trim();\n }\n \n if (eventType === 'start' && onStart) onStart();\n else if (eventType === 'chunk') onChunk(JSON.parse(data).chunk);\n else if (eventType === 'end' && onEnd) onEnd();\n }\n }\n \n if (onEnd) onEnd();\n } catch (err) {\n console.error('Streaming error:', err);\n if (onError) onError(err);\n }\n }\n \n}\n","import { Component, Input } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { data } from 'jquery';\nimport { SharedService } from '../../modules/shared/services/shared.service';\n\n@Component({\n selector: 'app-gap-analysis-recommended-course',\n templateUrl: './gap-analysis-recommended-course.component.html',\n styleUrls: ['./gap-analysis-recommended-course.component.scss']\n})\nexport class GapAnalysisRecommendedCourseComponent {\n\n @Input() planData:any\n loading=false\n recommended_course_id=''\n cbpPlanData:any\n constructor( private sharedService: SharedService, private dialog: MatDialog, private snackBar: MatSnackBar) {\n this.planData = data\n }\n searchText = ''\n filterdCourses :any\n selectFilterCourses:any = []\n competenciesCount = {total:0, public_courses:0, igot:0}\n expandedCompetencies: any = {}; // Track expanded state for each course and competency type\n ngOnInit() {\n this.loading = true\n this.cbpPlanData = this.sharedService.cbpPlanFinalObj\n // this.sharedService.getRecommendedCourse(this.planData.id).subscribe((res)=>{\n // this.loading = false\n // console.log('res', res)\n // this.recommended_course_id = res.id\n // let allCourses = []\n // if(res && res.filtered_courses && res.filtered_courses.length) {\n // res.filtered_courses.forEach((item)=>{\n // if(item?.relevancy > 85) {\n // allCourses.push(item)\n // }\n // })\n // }\n // this.filterdCourses = allCourses\n // console.log('this.filterdCourses', this.filterdCourses)\n // this.updateCompetencyCounts()\n // this.getUserCourse()\n // })\n\n this.sharedService.getRecommendedCourse(this.planData.id).subscribe({\n next: (res) => {\n this.loading = false\n console.log('res', res)\n this.recommended_course_id = res.id\n let allCourses = []\n if(res && res.filtered_courses && res.filtered_courses.length) {\n res.filtered_courses.forEach((item)=>{\n if(item?.relevancy > 85) {\n allCourses.push(item)\n }\n })\n }\n this.filterdCourses = allCourses\n console.log('this.filterdCourses', this.filterdCourses)\n this.updateCompetencyCounts()\n this.getUserCourse()\n },\n error: (error) => {\n this.loading = false\n this.snackBar.open(error?.error?.detail, 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n });\n }\n\n updateCompetencyCounts() {\n // const comps = this.competenciesArray.value;\n this.competenciesCount = {total: 0, public_courses: 0, igot: 0};\n this.filterdCourses.forEach(c => {\n this.competenciesCount.total++;\n if (c.is_public) this.competenciesCount.public_courses++;\n if (!c.is_public) this.competenciesCount.igot++;\n });\n }\n\n\n\n\n\n getUserCourse() {\n let role_mapping_id = this.planData.id\n this.loading = true\n this.sharedService.getUserCourse(role_mapping_id).subscribe({\n next: (res) => {\n // Success handling\n this.loading = false\n \n // Process user-added courses to ensure proper structure\n for (let i = 0; i < res.length; i++) {\n this.filterdCourses.push(res[i])\n }\n \n // Rebuild filterdCourses to include all course types\n \n \n console.log('filterdCourses after adding user courses:', this.filterdCourses);\n //this.successRoleMapping.emit(this.roleMappingForm)\n },\n error: (error) => {\n console.log('error', error)\n this.loading = false\n // Handle 409 Conflict here\n // alert('Conflict detected: The resource already exists or action conflicts.');\n //this.get\n // Or you can set a UI error message variable\n\n this.loading = false\n //this.alreadyAvailableRoleMapping.emit(this.roleMappingForm)\n }\n\n\n })\n }\n\n getCompetenciesByType(type: string, index): any[] {\n const course = this.filterdCourses[index];\n if (!course) {\n console.log(`No course found at index ${index}`);\n return [];\n }\n \n // Handle different competency property names\n // AI Recommended & Public courses use 'competencies'\n // Manually Suggested - iGOT courses use 'competencies_v6'\n // User Added courses use 'competencies'\n let competencies = [];\n if (course.competencies && Array.isArray(course.competencies)) {\n competencies = course.competencies;\n// console.log(`Course ${index} (${course.course_type || course.name || 'Unknown'}) using 'competencies' property:`, competencies);\n } else if (course.competencies_v6 && Array.isArray(course.competencies_v6)) {\n competencies = course.competencies_v6;\n // console.log(`Course ${index} (${course.course_type || course.name || 'Unknown'}) using 'competencies_v6' property:`, competencies);\n } else {\n // console.log(`Course ${index} (${course.course_type || course.name || 'Unknown'}) has no valid competencies property:`, {\n // hasCompetencies: !!course.competencies,\n // competenciesType: typeof course.competencies,\n // hasCompetenciesV6: !!course.competencies_v6,\n // competenciesV6Type: typeof course.competencies_v6,\n // courseKeys: Object.keys(course)\n // });\n }\n \n if (competencies.length === 0) {\n console.log(`No competencies found for course ${index} and type ${type}`);\n return [];\n }\n \n // Normalize the type for comparison (case-insensitive + handle spelling variations)\n const normalizedType = type.toLowerCase().trim();\n \n const matchedCompetencies = competencies.filter(c => {\n if (!c || !c.competencyAreaName) {\n console.log(`Invalid competency structure in course ${index}:`, c);\n return false;\n }\n \n const competencyArea = c.competencyAreaName.toLowerCase().trim();\n \n // Handle both \"behavioral\" and \"behavioural\" spellings\n if (normalizedType === 'behavioural' || normalizedType === 'behavioral') {\n return competencyArea === 'behavioral' || competencyArea === 'behavioural';\n }\n \n // For other types, do case-insensitive comparison\n return competencyArea === normalizedType;\n });\n \n// console.log(`Found ${matchedCompetencies.length} competencies of type ${type} for course ${index}:`, matchedCompetencies);\n return matchedCompetencies;\n }\n\n getDisplayedCompetencies(type: string, index: number): any[] {\n const competencies = this.getCompetenciesByType(type, index);\n const key = `${index}-${type}`;\n\n if (this.expandedCompetencies[key]) {\n return competencies;\n }\n\n return competencies.slice(0, 2);\n }\n\n toggleCompetencies(type: string, index: number): void {\n const key = `${index}-${type}`;\n this.expandedCompetencies[key] = !this.expandedCompetencies[key];\n }\n\n isExpanded(type: string, index: number): boolean {\n const key = `${index}-${type}`;\n return this.expandedCompetencies[key] || false;\n }\n\n hasMoreThanTwo(type: string, index: number): boolean {\n return this.getCompetenciesByType(type, index).length > 2;\n }\n\n getRemainingCount(type: string, index: number): number {\n const totalCount = this.getCompetenciesByType(type, index).length;\n return totalCount - 2;\n }\n\n\n}\n","<div class=\"section-container mt-2\">\n <div class=\"competency-container\">\n <div class=\"outside-layer-total\">\n <div class=\"inside-layer\">\n Total Courses\n </div>\n <div class=\"count\">\n {{competenciesCount?.total}}\n </div>\n </div>\n <div class=\"outside-layer-total\">\n <div class=\"inside-layer\">\n iGOT Platform Courses\n </div>\n <div class=\"count\">\n {{competenciesCount?.igot}}\n </div>\n </div>\n <div class=\"outside-layer-total\">\n <div class=\"inside-layer\">\n Public Courses\n </div>\n <div class=\"count\">\n {{competenciesCount?.public_courses}}\n\n </div>\n </div>\n\n </div>\n <div class=\"my-4\">\n\n <div class=\"course-list-container\">\n <div class=\"course-list-item\" *ngFor=\"let item of filterdCourses;let i=index\">\n <div class=\"course-header\">\n <div class=\"checked-course-container\">\n\n <div>\n <div class=\"course-pill\">\n <div class=\"course-pill-text\">\n <span><img src=\"assets/icons/course.svg\"></span>&nbsp;<span>Course</span>\n </div>\n </div>\n </div>\n\n </div>\n\n <!-- <div>\n <div class=\"ai-recommened-pill\">\n <div class=\"ai-recommened-pill-text\">\n <span class=\"ai-loader-icon\"><img src=\"assets/icons/ai-loader.gif\"></span>\n <span>AI Recommended</span>\n\n </div>\n </div>\n </div> -->\n <div *ngIf=\"item?.rationale && !item?.is_public\">\n <div class=\"ai-recommened-pill-green\">\n <div class=\"ai-recommened-pill-green-text\">\n <span class=\"ai-loader-icon\"><img src=\"assets/icons/ai-loader.gif\"></span>\n\n <span>AI Recommended - iGOT </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\" *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\" target=\"_blank\"><span>Platform -\n {{item?.platform}}</span></a>\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\" *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"item?.rationale && item?.is_public\">\n <div class=\"ai-recommened-pill-public\">\n <div class=\"ai-recommened-pill-public-text\">\n <span class=\"ai-loader-icon\"><img src=\"assets/icons/ai-loader.gif\"></span>\n\n <span>AI Recommended - Public </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\" *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\" target=\"_blank\"><span>Platform -\n {{item?.platform}}</span></a>\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\" *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"!item?.rationale\">\n <div class=\"ai-recommened-pill-gray\">\n <div class=\"ai-recommened-pill-gray-text\">\n <span class=\"ai-loader-icon\"><img src=\"assets/icons/ai-loader.gif\"></span>\n\n <span>Manually Suggested - iGOT </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\" *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\" target=\"_blank\"><span>Platform -\n {{item?.platform}}</span></a>\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\" *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"course-title mt-4\">\n <div>\n <div *ngIf=\"item?.course\">{{item?.course}}</div>\n <div *ngIf=\"item?.name\">{{item?.name}}</div>\n </div>\n </div>\n <div class=\"course-desc mt-2\">\n <div>\n <div>{{item?.rationale}}</div>\n </div>\n </div>\n <div class=\"mt-3\" *ngIf=\"getCompetenciesByType('Behavioural',i)?.length\">\n <div class=\"competency-sub-heading\">Behavioral Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"behavioural-pill\" *ngFor=\"let comp of getDisplayedCompetencies('Behavioural',i)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Behavioural',i)\" class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\" (click)=\"toggleCompetencies('Behavioural',i)\">\n {{ isExpanded('Behavioural',i) ? 'Show Less' : '+' +\n getRemainingCount('Behavioural',i) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2\" *ngIf=\"getCompetenciesByType('Functional',i)?.length\">\n <div class=\"competency-sub-heading\">Functional Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"functional-pill\" *ngFor=\"let comp of getDisplayedCompetencies('Functional',i)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Functional',i)\" class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\" (click)=\"toggleCompetencies('Functional',i)\">\n {{ isExpanded('Functional',i) ? 'Show Less' : '+' +\n getRemainingCount('Functional',i) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2\" *ngIf=\"getCompetenciesByType('Domain',i)?.length\">\n <div class=\"competency-sub-heading\">Domain Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"domain-pill\" *ngFor=\"let comp of getDisplayedCompetencies('Domain',i)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Domain',i)\" class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\" (click)=\"toggleCompetencies('Domain',i)\">\n {{ isExpanded('Domain',i) ? 'Show Less' : '+' +\n getRemainingCount('Domain',i) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2\">\n <div class=\"relevancy-container\">\n <div class=\"relevancy\">Relevancy</div>\n <div class=\"dash\">-</div>\n <div class=\"percentage\" *ngIf=\"item?.relevancy\">{{item?.relevancy}}%</div>\n <div class=\"percentage\" *ngIf=\"!item?.relevancy\">N/A</div>\n </div>\n </div>\n <!-- <div>\n <div class=\"competencies-matched-container\">\n <div class=\"competencies-matched\">Competencies Matched</div>\n <div class=\"dash\">-</div>\n <div class=\"percentage\">80%</div>\n </div>\n </div> -->\n </div>\n <!-- <div class=\"course-list-item\">\n <div class=\"course-header\">\n <div>\n <div class=\"course-pill\">\n <div class=\"course-pill-text\">Course</div>\n </div>\n </div>\n <div>\n <div class=\"ai-recommened-pill\">\n <div class=\"ai-recommened-pill-text\">\n <span class=\"ai-loader-icon\"><img src=\"assets/icons/ai-loader.gif\"></span>\n <span>AI Recommended</span>\n\n </div>\n </div>\n </div>\n </div>\n <div class=\"course-title\">\n <div>\n <div>Maternal, Infant And Young Child Nutrition</div>\n </div>\n </div>\n <div class=\"course-desc\">\n <div>\n <div>This Course directly addresses a primary responsibility of Anganwandi Care takers,\n which is\n to provide and educate on nutrition for mother and young children</div>\n </div>\n </div>\n <div>\n <div class=\"relevancy-container\">\n <div class=\"relevancy\">Relevancy</div>\n <div class=\"dash\">-</div>\n <div class=\"percentage\">90%</div>\n </div>\n </div>\n <div>\n <div class=\"competencies-matched-container\">\n <div class=\"competencies-matched\">Competencies Matched</div>\n <div class=\"dash\">-</div>\n <div class=\"percentage\">80%</div>\n </div>\n </div>\n </div> -->\n\n </div>\n </div>\n</div>","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'orderByName'\n})\nexport class OrderByNamePipe implements PipeTransform {\n transform(value: any[], property: string = 'name'): any[] {\n \n if (!Array.isArray(value)) {\n return value;\n }\n return value.slice().sort((a, b) => {\n const nameA = a[property]?.toLowerCase();\n const nameB = b[property]?.toLowerCase();\n return nameA.localeCompare(nameB);\n });\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-progress-dialog',\n template: `\n <div class=\"progress-container\">\n <h3>Processing Summaries</h3>\n <p>{{ data.message }}</p>\n <p>Please wait , it will take few minutes to complete</p>\n <div class=\"progress-container\">\n <!-- Circular Spinner -->\n <div class=\"spinner\"></div>\n\n <!-- Linear Progress Bar -->\n <div class=\"linear-progress\">\n <div class=\"bar\"></div>\n </div>\n\n \n </div>\n </div>\n `,\n styles: [`\n .progress-container {\n padding: 20px;\n width: auto;\n text-align: center;\n }\n mat-progress-bar {\n margin-top: 20px;\n }\n \n\n/* =========================\n Circular Spinner\n========================= */\n.spinner {\n width: 64px;\n height: 64px;\n border-radius: 50%;\n border: 6px solid #e8e6ff;\n border-top-color: #5b5bf0;\n border-right-color: #8b7cf7;\n animation: spin 1.2s linear infinite;\n margin: 0 auto 28px;\n}\n\n@keyframes spin {\n 100% {\n transform: rotate(360deg);\n }\n}\n\n/* =========================\n Linear Progress Bar\n========================= */\n.linear-progress {\n position: relative;\n width: 100%;\n height: 8px;\n background: #e8e6ff;\n border-radius: 4px;\n overflow: hidden;\n margin-bottom: 24px;\n}\n\n.linear-progress .bar {\n position: absolute;\n height: 100%;\n width: 40%;\n background: linear-gradient(\n 90deg,\n #b8b1ff,\n #5b5bf0,\n #b8b1ff\n );\n animation: indeterminate 1.6s infinite ease-in-out;\n}\n\n@keyframes indeterminate {\n 0% {\n left: -40%;\n }\n 100% {\n left: 100%;\n }\n}\n\n/* =========================\n Text\n========================= */\n.label strong {\n font-size: 18px;\n color: #2f2f44;\n}\n\n.label p {\n margin-top: 4px;\n font-size: 14px;\n color: #6b6b8a;\n}\n\n `]\n})\nexport class ProgressDialogComponent {\n constructor(@Inject(MAT_DIALOG_DATA) public data: { progress: number; message: string }) {\n console.log('data--', data)\n }\n}","import { Component } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { SharedService } from '../../shared/services/shared.service';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ProgressDialogComponent } from '../progress-dialog/progress-dialog.component';\nimport { interval, forkJoin } from 'rxjs';\nimport { map, startWith, switchMap, takeWhile, tap } from 'rxjs/operators';\n@Component({\n selector: 'app-upload-dialog',\n templateUrl: './upload-dialog.component.html',\n styleUrls: ['./upload-dialog.component.scss']\n})\nexport class UploadDialogComponent {\n\n readonly MAX_FILES = 10;\n\n documentName = '';\n selectedFiles: File[] = [];\n cbpFinalObj: any = {};\n loading = false;\n uploadedFileData: any = {};\n\n constructor(\n public dialogRef: MatDialogRef<UploadDialogComponent>,\n public sharedService: SharedService,\n public snackBar: MatSnackBar,\n public dialog: MatDialog\n ) {\n this.cbpFinalObj = this.sharedService.getCBPPlanLocalStorage();\n }\n\n /** Already uploaded files count */\n get uploadedCount(): number {\n return this.cbpFinalObj?.documents?.length || 0;\n }\n\n /** Uploaded + newly selected */\n get totalFileCount(): number {\n return this.uploadedCount + this.selectedFiles.length;\n }\n\n onFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (!input.files) return;\n\n const files = Array.from(input.files);\n const allowedExtensions = ['pdf', 'doc', 'docx'];\n\n for (const file of files) {\n if (this.totalFileCount >= this.MAX_FILES) {\n this.snackBar.open('You can upload a maximum of 10 documents.', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n break;\n }\n\n const ext = file.name.split('.').pop()?.toLowerCase();\n if (!ext || !allowedExtensions.includes(ext)) {\n this.snackBar.open(\n `Invalid file type: ${file.name}`,\n 'X',\n { duration: 3000, panelClass: ['snackbar-error'] }\n );\n continue;\n }\n\n // Prevent duplicate selection\n if (this.selectedFiles.some(f => f.name === file.name && f.size === file.size)) {\n continue;\n }\n\n this.selectedFiles.push(file);\n }\n\n // Reset input so same file can be re-selected\n input.value = '';\n }\n\n removeFile(index: number): void {\n this.selectedFiles.splice(index, 1);\n }\n\n // upload(): void {\n // if (!this.documentName || this.selectedFiles.length === 0) {\n // return;\n // }\n\n // if (this.totalFileCount > this.MAX_FILES) {\n // this.snackBar.open('Maximum 10 documents allowed.', 'X', {\n // duration: 3000,\n // panelClass: ['snackbar-error']\n // });\n // return;\n // }\n\n // this.loading = true;\n\n // const uploadNext = (index: number) => {\n // if (index >= this.selectedFiles.length) {\n // this.loading = false;\n // this.dialogRef.close('close');\n // return;\n // }\n\n // const file = this.selectedFiles[index];\n\n // const reqBody = {\n // state_center_id: this.cbpFinalObj?.ministry?.identifier,\n // department_id: this.cbpFinalObj?.departments,\n // documentName: this.documentName\n // };\n\n // this.sharedService.uploadDocument(reqBody, file).subscribe({\n // next: (res) => {\n // this.uploadedFileData = res;\n // this.triggerFileSummary();\n // uploadNext(index + 1);\n // },\n // error: (err) => {\n // this.loading = false;\n // this.snackBar.open(\n // err?.error?.detail || 'Upload failed',\n // 'X',\n // { duration: 3000, panelClass: ['snackbar-error'] }\n // );\n // }\n // });\n // };\n\n // uploadNext(0);\n // }\n\n upload(): void {\n if (this.selectedFiles.length === 0) {\n return;\n }\n \n if (this.totalFileCount > this.MAX_FILES) {\n this.snackBar.open('Maximum 10 documents allowed.', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n return;\n }\n \n const formData = new FormData();\n \n // Required fields\n formData.append(\n 'state_center_id',\n this.cbpFinalObj?.ministry?.identifier || ''\n );\n \n formData.append(\n 'department_id',\n this.cbpFinalObj?.departments || ''\n );\n \n // Append multiple files with SAME key \"files\"\n this.selectedFiles.forEach((file: File) => {\n formData.append('files', file, file.name);\n });\n \n this.loading = true;\n \n this.sharedService.uploadDocument(formData).subscribe({\n next: (res) => {\n this.loading = false;\n this.uploadedFileData = res;\n this.triggerFileSummary();\n this.snackBar.open(res?.message, 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n \n \n },\n error: (error) => {\n this.loading = false;\n \n this.snackBar.open(\n error?.error?.detail || 'Upload failed',\n 'X',\n { duration: 3000, panelClass: ['snackbar-error'] }\n );\n }\n });\n }\n \n\n\n triggerFileSummary() {\n if (!this.uploadedFileData?.successful_uploads?.length) return;\n \n const files = this.uploadedFileData.successful_uploads;\n const totalFiles = files.length;\n \n const dialogRefForProgress = this.dialog.open(ProgressDialogComponent, {\n disableClose: true,\n data: { progress: 0, message: `Processing 0 of ${totalFiles} summaries...` }\n });\n \n let completedFiles = 0;\n \n const pollingRequests = files.map(file =>\n interval(5000).pipe(\n startWith(0), // trigger immediately\n switchMap(() => this.sharedService.triggerFileSummary(file.file_id)), // must return { summary_status }\n tap((res: any) => {\n if (res.summary_status === 'COMPLETED') {\n completedFiles++;\n dialogRefForProgress.componentInstance.data.progress = Math.floor((completedFiles / totalFiles) * 100);\n dialogRefForProgress.componentInstance.data.message = `Processing ${completedFiles} of ${totalFiles} summaries...`;\n }\n }),\n takeWhile((res: any) => res.summary_status !== 'COMPLETED', true)\n )\n );\n \n forkJoin(pollingRequests).subscribe({\n complete: () => {\n dialogRefForProgress.componentInstance.data.progress = 100;\n dialogRefForProgress.componentInstance.data.message = `All ${totalFiles} summaries completed!`;\n setTimeout(() => {\n dialogRefForProgress.close();\n this.dialogRef.close('close');\n }, 500);\n },\n error: () => {\n dialogRefForProgress.close();\n this.dialogRef.close('close');\n }\n });\n }\n \n\n\n}\n","<h2 mat-dialog-title>Upload Document</h2>\n\n<mat-dialog-content>\n\n <!-- <mat-form-field appearance=\"fill\" style=\"width: 100%; border: 1px solid #000;\">\n <input\n matInput\n [(ngModel)]=\"documentName\"\n placeholder=\"Document Name\"\n [disabled]=\"totalFileCount >= MAX_FILES\"\n >\n </mat-form-field> -->\n\n <!-- Upload Box -->\n <div\n class=\"file-upload-box\"\n style=\"margin-top: 30px;\"\n [class.disabled]=\"totalFileCount >= MAX_FILES\"\n (click)=\"totalFileCount < MAX_FILES && fileInput.click()\"\n >\n <input\n type=\"file\"\n #fileInput\n hidden\n multiple\n accept=\".pdf,.doc,.docx\"\n (change)=\"onFileSelected($event)\"\n >\n\n <p *ngIf=\"totalFileCount < MAX_FILES\">\n Click to select files\n </p>\n\n <p *ngIf=\"totalFileCount >= MAX_FILES\" class=\"error-text\">\n Maximum 10 documents allowed\n </p>\n\n <p><strong>Note:</strong> <small>PDF Files Only (Max:25 MB)</small></p>\n </div>\n\n <!-- Selected Files List -->\n <div *ngIf=\"selectedFiles.length > 0\" class=\"file-list\" style=\"margin-top:10px\">\n <p><strong>Selected Files</strong></p>\n\n <div class=\"file-item\" *ngFor=\"let file of selectedFiles; let i = index\">\n <span>{{ file.name }}</span>\n <span (click)=\"removeFile(i)\">\n <mat-icon class=\"file-cross-icon\" matTooltip=\"Remove\" matTooltipPosition=\"above\">close</mat-icon>\n </span>\n </div>\n </div>\n\n</mat-dialog-content>\n\n<div class=\"disclaimer-text\">\n <p>Disclaimer: Please do not upload any confidential documents.</p>\n</div>\n\n<mat-dialog-actions align=\"center\" style=\"margin: 20px 0;\">\n <button mat-button mat-dialog-close>Cancel</button>\n\n <button class=\"primary-btn cursor-pointer\"\n mat-raised-button\n color=\"primary\"\n (click)=\"upload()\"\n [disabled]=\"selectedFiles.length === 0\"\n >\n Upload\n </button>\n</mat-dialog-actions>\n\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>\n","import { Component, ViewChild } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { UploadDialogComponent } from './upload-dialog/upload-dialog.component';\nimport { SharedService } from '../shared/services/shared.service';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { type } from 'os';\nimport { element } from 'protractor';\nimport { ListPopupComponent } from '../../components/list-popup/list-popup.component';\n@Component({\n selector: 'app-upload-document-page',\n templateUrl: './upload-document-page.component.html',\n styleUrls: ['./upload-document-page.component.scss']\n})\nexport class UploadDocumentPageComponent {\n @ViewChild(MatPaginator) paginator!: MatPaginator;\n dataSource = new MatTableDataSource<any>([]);\n selectedMinistryType: string = 'ministry';\n ministryData:any = []\n ministryFullData:any = []\n roleMappingForm!: FormGroup;\n disableBtn = true\n sectorData = [\n {\n value: 'Women and child development'\n },\n {\n value: 'Rural development'\n },\n {\n value: 'Urban development'\n },\n {\n value: 'Healthcare'\n },\n {\n value: 'Agriculture'\n },\n {\n value: 'Others'\n }\n\n ]\n searchText = '';\n displayedColumns: string[] = ['name', 'summary_status', 'date', 'actions'];\n cbpFinalObj:any= {}\n departmentData:any = []\n documents = [\n // {\n // name: 'Work Allocation',\n // originalName: 'ACBP_Ministry_of_Women_and_Child_Development_Extract...',\n // size: 4.5,\n // date: 'Oct 13, 2025'\n // },\n // {\n // name: 'Screenshot 2025-10-08 at 12',\n // originalName: 'Screenshot 2025-10-08 at 12.54.18 PM.png',\n // size: 331.8,\n // date: 'Oct 13, 2025'\n // }\n ];\n loading = false\n filteredMinistryData:any = []\n searchControl: FormControl = new FormControl('');\n panelOpen = false;\n departmentPanelOpen = false\n filteredList = [];\n filteredDepartmentList = [];\n loginUserOrgIds = []\n originalMinistryData = []\n cbpPlanFinalObj:any\n constructor(public dialog: MatDialog, public sharedService: SharedService, \n public snackBar: MatSnackBar,\n private fb: FormBuilder,\n public router:Router \n ) {\n this.roleMappingForm = this.fb.group({\n ministryType: ['ministry', Validators.required],\n ministry: [null, Validators.required],\n sectors: [[]],\n departments: [[]]\n \n });\n // this.cbpFinalObj = this.sharedService.getCBPPlanLocalStorage()\n this.getMinistryData()\n \n \n }\n\n ngOnInit() {\n this.cbpPlanFinalObj = this.sharedService.getCBPPlanLocalStorage()\n console.log('cbpFinalObj--', this.cbpFinalObj)\n this.searchControl.valueChanges.subscribe(searchText => {\n if(searchText) {\n this.filterMinistryData(searchText);\n } else {\n this.filteredMinistryData = this.ministryData\n }\n \n });\n this.sharedService.summaryTriggerExecuted.subscribe((data:any)=>{\n if(data && data?.file_id) {\n this.getUploadedDocuments()\n }\n })\n if(this.cbpPlanFinalObj && this.cbpPlanFinalObj.ministry && this.cbpPlanFinalObj.ministry.identifier) {\n this.getUploadedDocuments()\n }\n }\n\n ngAfterViewInit() {\n this.dataSource.paginator = this.paginator;\n }\n\n getUploadedDocuments() {\n \n let reqBody = {\n state_center_id: this.cbpPlanFinalObj?.ministry?.identifier,\n include_summary: true, \n skip:0,\n limit:200\n }\n if(this.cbpPlanFinalObj && this.cbpPlanFinalObj?.departments ) {\n reqBody['department_id'] = this.cbpPlanFinalObj?.departments\n }\n this.loading = true\n \n this.sharedService.getUploadedDocuments(reqBody).subscribe( (res)=>{\n if(res && res?.items && res?.items?.length) {\n this.loading = false\n this.documents = res?.items\n this.dataSource.data = this.documents;\n console.log('this.documents', this.documents)\n } else {\n this.loading = false\n }\n })\n }\n\n openUploadDialog(): void {\n const dialogRef = this.dialog.open(UploadDialogComponent, {\n width: '600px',\n data: '',\n disableClose: true,\n maxHeight: '80vh',\n });\n\n dialogRef.afterClosed().subscribe(result => {\n \n if(result === 'close') {\n this.getUploadedDocuments()\n\n }\n \n // if (result) {\n \n // this.documents.push(result);\n // }\n });\n }\n\n filteredDocuments() {\n // console.log('this.documents', this.documents)\n return this.documents.filter(doc => doc.filename.toLowerCase().includes(this.searchText.toLowerCase()));\n }\n\n deleteDocument(docToDelete: any) {\n this.documents = this.documents.filter(doc => doc !== docToDelete);\n this.loading = true\n this.sharedService.deleteSummary(docToDelete?.file_id).subscribe( (res)=>{\n if(res) {\n this.sharedService.deleteFile(docToDelete?.file_id).subscribe((dres)=>{\n this.loading = true\n if(dres) {\n this.loading = false\n this.snackBar.open('Document Deleted Successfully', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n this.getUploadedDocuments()\n } else {\n this.loading = false\n this.snackBar.open('Error While Deleting Document', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n this.getUploadedDocuments()\n }\n \n })\n this.loading = false\n this.snackBar.open('Document Summary Deleted Successfully', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n } else {\n this.loading = false\n this.snackBar.open('Error While Deleting Document Summary', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n })\n\n }\n\n applyFilter() {\n\n }\n\n onMinistryTypeChange(event) {\n this.roleMappingForm.reset()\n \n // console.log('event', event)\n this.getMinistryData()\n this.sharedService.cbpPlanFinalObj['ministryType'] = event.value\n localStorage.setItem('cbpPlanFinalObj', JSON.stringify(this.sharedService.cbpPlanFinalObj))\n this.selectedMinistryType = event?.value\n this.roleMappingForm.get('sectors')?.setValue([]);\n \n this.roleMappingForm.controls.ministryType.setValue( this.selectedMinistryType)\n }\n\n onMinistryChange(event: any) {\n const selectedMinistryId = event.value;\n \n // console.log('Selected Ministry ID:', selectedMinistryId);\n\n // You can access the selected object if needed\n const selectedMinistry = this.ministryData.find(item => item.identifier === selectedMinistryId);\n console.log('Selected Ministry:', selectedMinistry);``\n this.sharedService.cbpPlanFinalObj['ministry'] = {identifier:selectedMinistryId?.identifier,name:selectedMinistryId?.orgName} \n if(selectedMinistryId && this.selectedMinistryType === 'state') {\n this.sharedService.getDepartmentList(selectedMinistryId).subscribe((res)=>{\n this.departmentData = res\n })\n }\n if(this.selectedMinistryType === 'state') {\n this.sharedService.cbpPlanFinalObj['ministryType'] = this.roleMappingForm.controls.ministryType.value\n this.sharedService.cbpPlanFinalObj['ministry'] = {identifier:selectedMinistry?.identifier,name:selectedMinistry?.orgName} \n this.sharedService.cbpPlanFinalObj['departments'] = this.roleMappingForm.controls.departments.value\n this.sharedService.cbpPlanFinalObj['sectors'] = this.roleMappingForm.controls.sectors.value\n } else {\n this.sharedService.cbpPlanFinalObj['ministryType'] = this.roleMappingForm.controls.ministryType.value\n this.sharedService.cbpPlanFinalObj['ministry'] = {identifier:selectedMinistry?.identifier,name:selectedMinistry?.orgName} \n }\n console.log('this.sharedService.cbpPlanFinalObj',this.sharedService.cbpPlanFinalObj)\n localStorage.setItem('cbpPlanFinalObj', JSON.stringify(this.sharedService.cbpPlanFinalObj))\n console.log('this.roleMappingForm',this.roleMappingForm)\n }\n\n\n\n filterMinistryData(searchText) {\n \n if(searchText) {\n console.log('searhTect, ', searchText)\n const search = searchText?.trim().toLowerCase() || '';\n this.filteredMinistryData = !search\n ? [...this.ministryData]\n : this.ministryData.filter(item =>\n item.orgName?.trim().toLowerCase().startsWith(search)\n );\n }\n \n }\n\n getMinistryData() {\n this.loading = true\n this.sharedService.getMinistryData(this.selectedMinistryType).subscribe((data:any)=>{\n this.loading = false\n console.log('data--', data)\n this.ministryFullData = data\n this.ministryData = []\n if(this.selectedMinistryType === 'ministry') {\n data.forEach((item)=>{\n if(item?.sbOrgType === 'ministry') {\n this.ministryData.push(item)\n this.filteredMinistryData = [...this.ministryData];\n }\n })\n } else if(this.selectedMinistryType === 'state') {\n data.forEach((item)=>{\n if(item?.sbOrgType === 'state') {\n this.ministryData.push(item)\n this.filteredMinistryData = [...this.ministryData];\n }\n })\n }\n this.getUserProfileData()\n })\n \n console.log('this.ministryData--', this.ministryData)\n console.log('this.filteredMinistryData--', this.filteredMinistryData)\n }\n\n routeToMain() {\n this.router.navigate(['/ai/']);\n }\n\n viewSummary(doc) {\n const dialogRef = this.dialog.open(ListPopupComponent, {\n width: '800px',\n data: { element: doc, type: 'doc-summary'},\n disableClose: true,\n maxHeight: '80vh'\n });\n \n dialogRef.afterClosed().subscribe(() => {\n // No need to do anything special here to reset inline expanded state\n // Because you're using dialog, not inline expand – view remains in initial (collapsed) state\n });\n }\n\n downloadDoc(doc: any): void {\n this.loading = true\n this.sharedService.downloadFile(doc.file_id).subscribe({\n \n next: (blob: Blob) => {\n this.loading = false\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `${doc?.filename}`; // Use dynamic name if needed\n a.click();\n window.URL.revokeObjectURL(url);\n \n // ✅ Success feedback\n this.snackBar.open('File downloaded successfully!', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n },\n error: (err) => {\n this.loading = false\n // ❌ Error feedback\n console.error('Download error:', err);\n this.snackBar.open('Failed to download the file.', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n });\n }\n\n onOpened(opened: boolean) {\n this.panelOpen = opened;\n }\n \n onOpenedDepartment(opened: boolean) {\n this.departmentPanelOpen = opened\n }\n\n filterData(event) {\n if(event && event.target && event.target.value) {\n const s = event.target.value.toLowerCase();\n \n this.filteredList = this.ministryData.filter(x =>\n x.orgName.toLowerCase().includes(s)\n );\n } else {\n this.filteredList = this.ministryData\n }\n \n }\n \n filterDepartmentData(event) {\n if(event && event.target && event.target.value) {\n const s = event.target.value.toLowerCase();\n \n this.filteredDepartmentList = this.departmentData.filter(x =>\n x.orgName.toLowerCase().includes(s)\n );\n } else {\n this.filteredDepartmentList = this.departmentData\n }\n \n }\n\n getUserProfileData() {\n this.sharedService.getUserProfile().subscribe((data)=>{\n console.log('data--', data)\n this.loginUserOrgIds = data?.organization_ids\n let filteredMinistryData = []\n console.log('this.ministryFullData--',this.ministryFullData)\n this.ministryFullData.map((item)=>{\n if(this.loginUserOrgIds.indexOf(item?.identifier) > -1) {\n filteredMinistryData.push(item)\n }\n })\n \n this.ministryData = filteredMinistryData\n this.originalMinistryData = filteredMinistryData\n this.filteredList = filteredMinistryData;\n console.log('this.filteredList--', this.filteredList)\n })\n }\n\n routeToInitial() {\n this.router.navigate(['/ai/initial']);\n }\n\n}\n\n","<div class=\"upload-container\">\n <div class=\"header\">\n <div class=\"sub-heading mt-10 mb-10 ml-10 cursor-pointer\">\n <p (click)=\"routeToInitial()\"><mat-icon style=\"vertical-align: middle;\">arrow_back</mat-icon><span\n class=\"pl-10\">Back to Role Mapping Generation</span></p>\n </div>\n\n </div>\n <mat-card class=\"mat-card-container mt-20\" [formGroup]=\"roleMappingForm\">\n <div class=\"header\">\n <div class=\"sub-heading\">\n <p>CBP Document Library</p>\n </div>\n \n \n </div>\n <div class=\"edit-section mt-4\">\n <div class=\"select-map-route-container\">\n <div class=\"select-map-flex-container\">\n <div class=\"select-map-flex\">\n <div class=\"selected-mapping-route\">\n <p>{{cbpPlanFinalObj?.ministry?.orgName}} <span\n *ngIf=\"cbpPlanFinalObj?.department_name\">\n / {{cbpPlanFinalObj?.department_name}}</span>\n </p>\n </div>\n <div class=\"edit-plan cursor-pointer\" (click)=\"routeToInitial()\">\n <mat-icon>edit</mat-icon>Edit\n </div>\n<!-- <div class=\"cursor-pointer ml-10\">-->\n<!-- <button class=\"btn-active cursor-pointer\" (click)=\"moveToInitialScreenLayout('add')\">-->\n<!-- <mat-icon>add</mat-icon>-->\n<!-- Create New CBP-->\n<!-- </button>-->\n<!-- </div>-->\n </div>\n <div>\n <button [ngClass]=\"!(cbpPlanFinalObj?.ministry?.orgName) ? 'btn-disable':'btn-active'\" mat-raised-button\n color=\"primary\" [disabled]=\"!(cbpPlanFinalObj?.ministry?.orgName)\" (click)=\"openUploadDialog()\">\n <mat-icon>upload</mat-icon> Upload Document\n </button>\n </div>\n </div>\n </div>\n </div>\n\n\n\n\n\n </mat-card>\n <mat-card class=\"\">\n <div class=\"sub-heading\">\n <p>Uploaded Documents (Max. 10 Documents are allowed)</p>\n </div>\n <div class=\"search flex margin-right-m\">\n <div class=\"mt-10\">\n <div class=\"search-container\">\n <div class=\"rsearch\">\n <mat-icon\n class=\"color-60 search-icon mat-icon notranslate material-icons mat-icon-no-color\">search</mat-icon>\n <input class=\"sinput color-60 w-full\" [(ngModel)]=\"searchText\" label=\"\" (input)=\"applyFilter()\"\n placeholder=\"Search Documents\" type=\"Standard\">\n <mat-icon *ngIf=\"searchText.trim().length > 0\"\n class=\"color-60 clear-icon mat-icon notranslate material-icons mat-icon-no-color cursor-pointer\"\n (click)=\"clearSearch()\">clear</mat-icon>\n </div>\n\n </div>\n\n\n\n </div>\n </div>\n <p class=\"mt-10\" style=\"font-family: 'Lato'; font-size: 18px; margin-left: 10px;\">\n {{filteredDocuments()?.length}} Documents</p>\n <table style=\"border-radius: 25px 25px 0 0;\n overflow: hidden;\n box-shadow: 0 5px 5px rgba(0, 0, 0, 0.12);\" mat-table [dataSource]=\"filteredDocuments()\" class=\"mat-elevation-z2 full-width-table mt-10\">\n\n <!-- Document Column -->\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> Document </th>\n <td mat-cell *matCellDef=\"let doc\" style=\"width: 15%;\">\n <div>\n <div class=\"doc-title\" *ngIf=\"doc.document_name\">{{ doc.filename }}</div>\n <div class=\"doc-title\" *ngIf=\"!doc.document_name\">{{ doc.filename }}</div>\n </div>\n </td>\n </ng-container>\n\n <!-- Summary Status Column -->\n <ng-container matColumnDef=\"summary_status\">\n <th mat-header-cell *matHeaderCellDef> Summary Status </th>\n <td mat-cell *matCellDef=\"let doc\" style=\"width: 15%;\"> \n <span *ngIf=\"doc.summary_status === 'COMPLETED'\" class=\"success\"> {{ doc.summary_status | titlecase }} </span>\n <span *ngIf=\"doc.summary_status !== 'COMPLETED'\" class=\"in-progress\"> {{ doc.summary_status | titlecase }} </span>\n </td>\n </ng-container>\n\n <!-- Summary Text Column -->\n <!-- <ng-container matColumnDef=\"summary_text\">\n <th mat-header-cell *matHeaderCellDef> Summary </th>\n <td mat-cell *matCellDef=\"let doc\">\n <div class=\"doc-summary-text\" style=\"width: 80%;\">\n <markdown [data]=\"doc?.summary_text | slice : 0 : 200\"></markdown>\n </div>\n </td>\n </ng-container> -->\n\n <!-- Date Column -->\n <ng-container matColumnDef=\"date\">\n <th mat-header-cell *matHeaderCellDef> Date </th>\n <td mat-cell *matCellDef=\"let doc\" style=\"width: 15%;\"> {{ doc.created_at | date: 'MMM d, y'}} </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef> Actions </th>\n <td mat-cell *matCellDef=\"let doc\" style=\"width: 15%;\">\n <button mat-icon-button color=\"primary\" (click)=\"downloadDoc(doc)\" matTooltip=\"Download\">\n <mat-icon>download</mat-icon>\n </button>\n\n <button style=\"margin-left: 15px;\" *ngIf=\"doc.summary_status === 'COMPLETED'\" mat-icon-button color=\"primary\"\n (click)=\"viewSummary(doc)\" matTooltip=\"View Summary\">\n <mat-icon>visibility</mat-icon>\n </button>\n\n <button style=\"margin-left: 15px;\" *ngIf=\"doc.summary_status === 'COMPLETED'\" mat-icon-button color=\"warn\"\n (click)=\"deleteDocument(doc)\" matTooltip=\"Delete\">\n <mat-icon>delete</mat-icon>\n </button>\n </td>\n </ng-container>\n\n <!-- Header and Row Definitions -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n\n <!-- No Data Message -->\n\n </table>\n <div *ngIf=\"filteredDocuments().length === 0\" class=\"no-data-message\">\n No record found\n </div>\n <!-- Pagination -->\n <div class=\"border-1\">\n <mat-paginator [pageSize]=\"5\" [pageSizeOptions]=\"[5, 10, 20]\"></mat-paginator>\n </div>\n\n\n </mat-card>\n</div>\n\n\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>","export const HEADER_DATA = {\n welcome: {\n welcomeText: `WELCOME TO KARMAYOGI BHARAT`,\n imageUrl: `./assets/img/flag.svg`,\n },\n karmayogiBtn: {\n text: `Karmayogi's Corner`,\n link: `/latest-updates`,\n display: true\n },\n donloadBtn: {\n text: `Download app`,\n link: `#igotMobileapp`,\n display: true\n },\n btns: [\n {\n text: `हिंदी`,\n link: `hindi`,\n type: `upperCase`,\n language: `Hindi`\n }\n ],\n navHeader: {\n karmayogiBharath: {\n imgSrc: `/assets/img/karmayogiLogo.svg`,\n link: ``\n },\n navButtons: [\n {\n text: ``,\n link: ``,\n fragment: '',\n },\n {\n text: `topNavBar.aboutUs`,\n link: `aboutUs`,\n fragment: 'about_us',\n },\n {\n text: `topNavBar.newsroom`,\n link: `.`,\n fragment: 'newsroom',\n },\n {\n text: `topNavBar.career`,\n link: `career`,\n fragment: 'career',\n },\n {\n text: `topNavBar.tenders`,\n link: `tenders`,\n fragment: 'tenders',\n },\n {\n text: `topNavBar.notifications`,\n link: `notifications`,\n fragment: 'notifications',\n },\n {\n text: `topNavBar.contactUs`,\n link: `contactus`,\n fragment: 'contactus',\n }\n\n ],\n loginBtn: {\n text: `topNavBar.login`,\n link: `protected/v8/resource`\n },\n registerBtn: {\n text: `topNavBar.register`,\n link: `public/signup`,\n },\n contactLink : {\n text: `topNavBar.contactUs`,\n link: `contactus`,\n fragment: 'contactus',\n }\n },\n}\n\nexport const DASHBOARD_ANALYTICS_LIST = [\n {\n dashboaredHeader: `Number of users/MDO's`,\n analyticsList: [\n {\n imgSrc: `./assets/img/learnsGraph.svg`,\n count: `0`,\n description: `Karmayogis onboarded`,\n alt: `learns record`,\n id: `karmayogiOnboarded`\n }, {\n imgSrc: `./assets/img/learnsGraph.svg`,\n count: `0`,\n description: `Registered MDO's`,\n alt: `learns record`,\n id: `registeredMdo`\n },\n ]\n },\n {\n dashboaredHeader: `Available content`,\n analyticsList: [\n {\n imgSrc: `./assets/img/coursesGraph.svg`,\n count: `0`,\n description: `Courses`,\n alt: `Courses record`,\n id: `courses`\n }, {\n imgSrc: `./assets/img/contentGraph.svg`,\n count: `0`,\n description: `Available content (hours)`,\n alt: `Content record`,\n id: `availableContent`\n },\n ]\n }\n]\n\nexport const FEATURES_COURSES = {\n header: {\n headerText: `courses.showcasedCourses`,\n type: `featured-courses`,\n showAll: `courses.showAll`\n },\n dataList: [],\n\n}\n\nexport const TESTIMONIALS = {\n header: {\n headerText: `testimonial`,\n type: `testimonials`\n },\n dataList: [\n {\n posterImage: `assets/testimonials/testimonial-1.webp`,\n name: `Preet Bharat`,\n description: `iGOT is just like a seed that has been planted with the potential to grow into a mighty tree for progress and development of nation. With the support and motivation from MDOs, this initiative has the potential to bear the tastiest fruits for the betterment of society. MDOs can nurture the potential within individuals and empower them to contribute positively to society.\"`,\n desig: `CRPF`,\n },\n {\n posterImage: `assets/testimonials/testimonial-2.webp`,\n name: `Preet Bharat`,\n description: `iGOT is just like a seed that has been planted with the potential to grow into a mighty tree for progress and development of nation. With the support and motivation from MDOs, this initiative has the potential to bear the tastiest fruits for the betterment of society. MDOs can nurture the potential within individuals and empower them to contribute positively to society.\"`,\n desig: `CRPF`,\n },\n {\n posterImage: `assets/testimonials/testimonial-3.webp`,\n name: `Preet Bharat`,\n description: `iGOT is just like a seed that has been planted with the potential to grow into a mighty tree for progress and development of nation. With the support and motivation from MDOs, this initiative has the potential to bear the tastiest fruits for the betterment of society. MDOs can nurture the potential within individuals and empower them to contribute positively to society.\"`,\n desig: `CRPF`,\n },\n {\n posterImage: `assets/testimonials/testimonial-4.webp`,\n name: `Preet Bharat`,\n description: `iGOT is just like a seed that has been planted with the potential to grow into a mighty tree for progress and development of nation. With the support and motivation from MDOs, this initiative has the potential to bear the tastiest fruits for the betterment of society. MDOs can nurture the potential within individuals and empower them to contribute positively to society.\"`,\n desig: `CRPF`,\n },\n {\n posterImage: `assets/testimonials/testimonial-5.webp`,\n name: `Preet Bharat`,\n description: `iGOT is just like a seed that has been planted with the potential to grow into a mighty tree for progress and development of nation. With the support and motivation from MDOs, this initiative has the potential to bear the tastiest fruits for the betterment of society. MDOs can nurture the potential within individuals and empower them to contribute positively to society.\"`,\n desig: `CRPF`,\n },\n ],\n}\n\nexport const NEWSROOM_COURSES = {\n header: {\n headerText: `newsRoom`,\n type: `news-room`\n },\n dataList: [],\n localDataList: [\n {\n posterImage: `./assets/newsroom/newsletter-1.jpg`,\n name: `Volume 1 Issue 9( October - November 2023)`,\n downloadLink: './assets/newsroom/news-letter-pdf/January Newsletter_Final 2.pdf',\n button: `Download PDF`,\n },\n {\n posterImage: `./assets/newsroom/newsletter-2.jpg`,\n name: `Volume 1 Issue 9( October - November 2023)`,\n downloadLink: './assets/newsroom/news-letter-pdf/Newsletter Year Edition.pdf',\n button: `Download PDF`,\n },\n {\n posterImage: `./assets/newsroom/newsletter-3.png`,\n name: `Volume 1 Issue 9( October - November 2023)`,\n downloadLink: './assets/newsroom/news-letter-pdf/Newsletter December.pdf',\n button: `Download PDF`,\n },\n {\n posterImage: `./assets/newsroom/newsletter-4.png`,\n name: `Volume 1 Issue 9( October - November 2023)`,\n downloadLink: './assets/newsroom/news-letter-pdf/nov.pdf',\n button: `Download PDF`,\n },\n {\n posterImage: `./assets/newsroom/newsletter-5.jpeg`,\n name: `Volume 1 Issue 9( October - November 2023)`,\n downloadLink: './assets/newsroom/news-letter-pdf/October_Newsletter.pdf',\n button: `Download PDF`,\n },\n {\n posterImage: `./assets/newsroom/newsletter-6.png`,\n name: `Volume 1 Issue 9( October - November 2023)`,\n downloadLink: './assets/newsroom/news-letter-pdf/sep.pdf',\n button: `Download PDF`,\n },\n {\n posterImage: `./assets/newsroom/newsletter-7.jpg`,\n name: `Volume 1 Issue 9( October - November 2023)`,\n downloadLink: './assets/newsroom/news-letter-pdf/Newsletter August.pdf',\n button: `Download PDF`,\n },\n {\n posterImage: `./assets/newsroom/newsletter-8.jpg`,\n name: `Volume 1 Issue 9( October - November 2023)`,\n downloadLink: './assets/newsroom/news-letter-pdf/Newsletter June-July.pdf',\n button: `Download PDF`,\n },\n {\n posterImage: `./assets/newsroom/newsletter-9.png`,\n name: `Volume 1 Issue 9( October - November 2023)`,\n downloadLink: './assets/newsroom/news-letter-pdf/Newsletter May.pdf',\n button: `Download PDF`,\n },\n // {\n // posterImage: `./assets/newsroom/newsletter-10.jpg`,\n // name: `Volume 1 Issue 9( October - November 2023)`,\n // downloadLink: './assets/newsroom/news-letter-pdf/Newsletter_April_6.pdf',\n // button: `Download PDF`,\n // },\n // {\n // posterImage: `./assets/newsroom/newsletter-11.jpg`,\n // name: `Volume 1 Issue 9( October - November 2023)`,\n // downloadLink: './assets/newsroom/news-letter-pdf/March l Vol1 I Issue 2.pdf',\n // button: `Download PDF`,\n // },\n // {\n // posterImage: `./assets/newsroom/newsletter-12.jpg`,\n // name: `Volume 1 Issue 9( October - November 2023)`,\n // downloadLink: './assets/newsroom/news-letter-pdf/final newsletter.pdf',\n // button: `Download PDF`,\n // },\n {\n posterImage: `./assets/newsroom/newsletter-9.png`,\n name: `Aspirational Blocks Programme Module Now Live On iGOT Karmayogi Platform`,\n downloadLink: './assets/newsroom/news-letter-pdf/PIB1956555 (2).pdf',\n button: `Download PDF`,\n },\n {\n posterImage: `./assets/newsroom/newsletter-9.png`,\n name: `Workshop on Art of Leadership Communication organized by Karmayogi Bharat`,\n downloadLink: './assets/newsroom/news-letter-pdf/PIB1965959 (1).pdf',\n button: `Download PDF`,\n },\n {\n posterImage: `./assets/newsroom/newsletter-9.png`,\n name: `Courses launched by Sashastra Seema Bal now Live on iGOT Karmayogi platform`,\n downloadLink: './assets/newsroom/news-letter-pdf/PIB1966086.pdf',\n button: `Download PDF`,\n },\n {\n posterImage: `./assets/newsroom/newsletter-9.png`,\n name: `Celebrating 1st Year Anniversary of Karmayogi Prarambh`,\n downloadLink: './assets/newsroom/news-letter-pdf/Celebrating 1st Year Anniversary of Karmayogi Prarambh.pdf',\n button: `Download PDF`,\n },\n {\n posterImage: `./assets/newsroom/newsletter-9.png`,\n name: `Accessibility Widget launched on the iGOT Karmayogi Platform on International Day of Persons with Disabilities`,\n downloadLink: './assets/newsroom/news-letter-pdf/Press Information Bureau.pdf',\n button: `Download PDF`,\n },\n {\n posterImage: `./assets/newsroom/newsletter-9.png`,\n name: `SAMARTH Curated Programs launched by Karmayogi Bharat and NITI Aayog`,\n downloadLink: './assets/newsroom/news-letter-pdf/PIB1990840.pdf',\n button: `Download PDF`,\n },\n {\n posterImage: `./assets/newsroom/newsletter-9.png`,\n name: `Dr. Jitendra Singh, Minister of State for Personnel, Public Grievances and Pensions to inaugurate Good Governance Day on 25th December, 2023`,\n downloadLink: './assets/newsroom/news-letter-pdf/Press Information Bureau1.pdf',\n button: `Download PDF`,\n },\n {\n posterImage: `./assets/newsroom/newsletter-9.png`,\n name: `Union Minister Dr Jitendra Singh says, \"Mission Karmayogi\", launched by Prime Minister Shri Narendra Modi, had institutionalised the process of capacity building, particularly for the benefit of civil servants`,\n downloadLink: './assets/newsroom/news-letter-pdf/PIB1921429 (1).pdf',\n button: `Download PDF`,\n },\n {\n posterImage: `./assets/newsroom/newsletter-9.png`,\n name: `PM distributes about 71,000 appointment letters to newly inducted recruits under Rozgar Mela`,\n downloadLink: './assets/newsroom/news-letter-pdf/Press Information Bureau2.pdf',\n button: `Download PDF`,\n },\n {\n posterImage: `./assets/newsroom/newsletter-9.png`,\n name: `PM distributes more than 1 lakh appointment letters to newly inducted recruits in Government departments and organisations under Rozgar Mela`,\n downloadLink: './assets/newsroom/news-letter-pdf/Press Information Bureau3.pdf',\n button: `Download PDF`,\n },\n ]\n}\n\nexport const TOP_PROVIDERS = {\n header: {\n headerText: `partners`,\n type: `content-providers`\n },\n topProvidersList: [\n {\n posterImage: `assets/top_providers/Apolitical.png`,\n name: `Apolitical`,\n clientUrl: `https://apolitical.co/home/`\n },\n {\n posterImage: `assets/top_providers/LBSNAA.png`,\n name: `LBSNAA`,\n clientUrl: `https://portal.igotkarmayogi.gov.in/app/learn/browse-by/provider/LBSNAA/all-CBP`\n },\n {\n posterImage: `assets/top_providers/ISTM.png`,\n name: `ISTM`,\n clientUrl: `https://portal.igotkarmayogi.gov.in/app/learn/browse-by/provider/Institute of Secretariat Training and Management/all-CBP`\n },\n {\n posterImage: `assets/top_providers/Udemy.png`,\n name: `Udemy`,\n clientUrl: `https://www.udemy.com/`\n },\n {\n posterImage: `assets/top_providers/ISRO.png`,\n name: `ISRO`,\n clientUrl: `https://www.isro.gov.in/`\n },\n {\n posterImage: `assets/top_providers/Microsoft.png`,\n name: `Microsoft`,\n clientUrl: `https://portal.igotkarmayogi.gov.in/app/learn/browse-by/provider/Microsoft/all-CBP`\n },\n {\n posterImage: `assets/top_providers/Karmayogi Bharat.png`,\n name: `Karmayogi Bharat`,\n clientUrl: `https://karmayogibharat.gov.in/`\n },\n {\n posterImage: `assets/top_providers/SVPNPA.png`,\n name: `SVPNPA`,\n clientUrl: `https://portal.igotkarmayogi.gov.in/app/learn/browse-by/provider/SVPNPA/all-CBP`\n },\n ]\n}\n\nexport const ABOUT_US = {\n header: {\n headerText: `topNavBar.aboutUs`,\n p1: `Karmayogi Bharat, a Special Purpose Vehicle (SPV), is a crucial part of this framework. It was incorporated on 31.01.2022 under Section 8 of the Companies Act, 2013 as a 100% Government owned not-for-profit Co`,\n p2: `Its responsibility is to operate and manage the iGOT Karmayogi platform, ensurintimewhere-dqevice learning for civil service officials to enhance their competency. The SPV will own, manage, maintain, and improve the digital assets, including the IPR of all software, content, process etc. on behalf of the Government with an annual subscription-based revenue model.`,\n p3: `Its responsibility is to operate and manage the iGOT Karmayogi platform, ensurintimewhere-dqevice learning for civil service officials to enhance their competency. The SPV will own, manage, maintain, and improve the digital assets, including the IPR of all software, content, process etc. on behalf of the Government with an annual subscription-based revenue model.`,\n type: \"about-us\"\n },\n dataList: [{\n image: `assets/aboutus/about-new.JPG`,\n }\n ]\n}\n\nexport const VIDEO_CONF = {\n title: `conference.title`,\n thumbnail: `assets/videoconference/thumbnail.png`,\n text: `conference.support`,\n date: `conference.duration`,\n time: `conference.slot`,\n button: `conference.action`,\n joinLink: \"https://teams.microsoft.com/l/meetup-join/19%3ameeting_M2Y3ZDE2ZDMtMWQwYS00OWQzLWE3NDctNDRkNTdjOGI4Yzll%40thread.v2/0?context=%7b%22Tid%22%3a%2240cfb65c-9b71-435f-8bc2-bc2c69df1aca%22%2c%22Oid%22%3a%22cbd37bc9-5c33-401f-b590-9decb3c370f8%22%7d\",\n technicalSupport: `conference.technicalSupport`,\n plsContact: `conference.plsContact`\n}\n\nexport const PHOTO_GALLARY = {\n header: {\n headerText: `gallery.photoGallery`,\n type: `photo-gallary`\n },\n galleryList: [\n { name: \"Rectangle1\", src: \"assets/photos_gallery/Rectangle1.png\" },\n { name: \"Rectangle2\", src: \"assets/photos_gallery/Rectangle2.png\" },\n { name: \"Rectangle3\", src: \"assets/photos_gallery/Rectangle3.png\" },\n { name: \"Rectangle4\", src: \"assets/photos_gallery/Rectangle4.png\" },\n { name: \"Rectangle4\", cloudStorageKey: \"assets/photos_gallery/9059c922-40a5-4a51-91ae-af9abecbcb7b.jpeg\" },\n { name: \"Rectangle4\", cloudStorageKey: \"assets/photos_gallery/332470235_470417818506417_6989887497328782909_n.jpg\" },\n { name: \"Rectangle4\", cloudStorageKey: \"assets/photos_gallery/332489727_742771693929365_7451095071369935484_n (1).jpg\" },\n { name: \"Rectangle4\", cloudStorageKey: \"assets/photos_gallery/344061562_1463582880844463_2813493197040593989_n.jpg\" },\n { name: \"Rectangle4\", cloudStorageKey: \"assets/photos_gallery/353772828_197260853276676_2428144849076294106_n.jpg\" },\n { name: \"Rectangle4\", cloudStorageKey: \"assets/photos_gallery/387826043_271464862522941_8285872309702331271_n.jpg\" },\n { name: \"Rectangle4\", cloudStorageKey: \"assets/photos_gallery/400624395_290754297260664_7366696641428760011_n.jpg\" },\n { name: \"Rectangle4\", cloudStorageKey: \"assets/photos_gallery/df1ffe85-76ee-4fb3-831b-3e6c2f62785d.jpg\" },\n { name: \"Rectangle4\", cloudStorageKey: \"assets/photos_gallery/IMG_2303.JPG\" },\n { name: \"Rectangle4\", cloudStorageKey: \"assets/photos_gallery/PHOTO-2024-02-19-17-28-41.jpg\" },\n { name: \"Rectangle4\", cloudStorageKey: \"assets/photos_gallery/PHOTO-2024-02-19-17-28-44.jpg\" },\n { name: \"Rectangle4\", cloudStorageKey: \"assets/photos_gallery/PHOTO-2024-02-19-17-28-45_1.jpg\" },\n { name: \"Rectangle4\", cloudStorageKey: \"assets/photos_gallery/PHOTO-2024-02-19-17-28-45.jpg\" },\n { name: \"Rectangle4\", cloudStorageKey: \"assets/photos_gallery/PHOTO-2024-02-19-17-28-46.jpg\" },\n { name: \"Rectangle4\", cloudStorageKey: \"assets/photos_gallery/PHOTO-2024-02-19-17-28-47_1.jpg\" },\n { name: \"Rectangle4\", cloudStorageKey: \"assets/photos_gallery/PHOTO-2024-02-19-17-28-47.jpg\" },\n { name: \"Rectangle4\", cloudStorageKey: \"assets/photos_gallery/PHOTO-2024-02-19-17-28-48.jpg\" },\n { name: \"Rectangle4\", cloudStorageKey: \"assets/photos_gallery/PHOTO-2024-02-19-17-28-49.jpg\" },\n { name: \"Rectangle4\", cloudStorageKey: \"assets/photos_gallery/PHOTO-2024-02-19-17-28-50.jpg\" },\n ]\n}\n\nexport const IGON_VISION_DETAILS = {\n vision: {\n imgUrl: `./assets/img/visionImg.svg`,\n alt: `How does the platform enable you to become the best version of yourself?`,\n },\n videos: [\n {\n poster: `./assets/img/video1.png`,\n videoLink: `./assets/img/Sanjeev-final.mp4`,\n line1: `An `,\n line2: `experienced`,\n line3: ` civil servant`,\n },\n {\n poster: `./assets/img/video2.png`,\n videoLink: `./assets/img/Shilpa-final.mp4`,\n line1: `A `,\n line2: `newly`,\n line3: ` recruited civil servant`,\n },\n ],\n\n}\nexport const CONFERENCE_DATA = {\n title: 'conference.title',\n description: 'conference.support',\n workdays: 'conference.duration',\n timings: 'conference.slot',\n joinNow: 'conference.action'\n}\n\nexport const REGISTER_DETAILS = {\n lineOne: `Take the`,\n lineTwo: `first step`,\n lineThree: ` towards learning`,\n registerBtn: {\n text: `Register Now`,\n link: `public/signup`\n }\n}\n\nexport const SOLUTIONS_SPACE = {\n solutionSpaceHeader: {\n lineOne: `Solutioning space`,\n lineTwo: `for all of Government`,\n },\n solutionSpacesList: [\n {\n name: `Learning hub`,\n description: `Learwheretime and bridge your competency gaps using impactful and engaging learning content.`,\n imgSrc: `./assets/img/school.svg`,\n }, {\n name: `Discussion hub`,\n description: `Discuss and learn with peers, colleagues, civil servants and experts across the country.`,\n imgSrc: `./assets/img/forum.svg`,\n }, {\n name: `Network hub`,\n description: `Connect with civil servants across the country. Grow your network within government circles.`,\n imgSrc: `./assets/img/group.svg`,\n }, {\n name: `Competency hub`,\n description: `Identify your competency requirements, competency gaps, so you can grow faster in the right direction.`,\n imgSrc: `./assets/img/extension.svg`,\n }, {\n name: `Career hub`,\n description: `Explore career opportunities across the country and signal your expertise.`,\n imgSrc: `./assets/img/work.svg`,\n }, {\n name: `Event hub`,\n description: `Enable simultaneous interactive experiential and peer learning.`,\n imgSrc: `./assets/img/event.svg`,\n },\n ]\n}\n\nexport const QUICK_WALKTHROUGH_DETAILS = {\n videoLink: `./assets/img/KarmayogiBharatWalkthroughNew.mp4`,\n lineOne: `A quick`,\n lineTwo: ` walkthrough of`,\n lineThree: ` the `,\n lineFour: ` Karmayogi Bharat`,\n lineFive: `Portal`,\n}\n\nexport const MOBILE_APP_DOWNLOADS_DETAILS = {\n download: `downloadSection.download`,\n iGOT: `downloadSection.iGot`,\n karmayogi: `downloadSection.karmayogi`,\n mobile: \"downloadSection.mobile\",\n app: \"downloadSection.app\",\n description: `downloadSection.description`,\n scanners: [\n {\n link: `https://play.google.com/store/apps/details?id=com.igot.karmayogibharat&pli=1`,\n imgSrc: `./assets/img/Google_Play-Badge-Logo.wine.png`,\n scannerSrc: `./assets/img/scan/qrcode.svg`,\n text: `downloadSection.scanToDownload`,\n },\n {\n link: `https://apps.apple.com/in/app/igot-karmayogi/id6443949491`,\n imgSrc: `./assets/img/download-appstore.png`,\n scannerSrc: `./assets/img/scan/iOS_qrcode.svg`,\n text: `downloadSection.scanToDownload`,\n },\n ],\n mockupImgSrc: `./assets/img/mobile-latest.png`\n}\n\nexport const MOBILE_VIEW_APP_DOWNLOADS_DETAILS = {\n googleStore: {\n imgSrc: `./assets/img/Google_Play-Badge-Logo.wine.png`,\n link: `https://play.google.com/store/apps/details?id=com.igot.karmayogibharat&pli=1`,\n },\n appleStore: {\n imgSrc: `./assets/img/download-appstore.png`,\n link: `https://apps.apple.com/in/app/igot-karmayogi/id6443949491`,\n },\n lineOne: `Download iGOT Karmayogi `,\n lineTwo: `mobile app`\n}\n\nexport const NAV_FOOTER_DETAILS = {\n navLinks: [\n [\n {\n href: `newsroom`,\n target: `_self`,\n router: '/',\n name: `footerLinks.newsroom`,\n },\n {\n href: `https://portal.igotkarmayogi.gov.in/public/faq`,\n target: `_self`,\n name: `footerLinks.faq`,\n application: 'diff',\n\n },\n {\n href: `contact_us`,\n target: `_self`,\n router: '/',\n name: `footerLinks.contactUs`\n }\n ],\n [\n {\n href: `mdoUserList`,\n target: `_self`,\n router: `mdoList`,\n name: `footerLinks.nodalOffice`\n },\n {\n href: `latest-updates`,\n target: `_self`,\n router: 'latest-updates',\n name: `footerLinks.karmayogiCorner`\n },\n {\n href: `https://portal.igotkarmayogi.gov.in/public/signup`,\n target: `_self`,\n name: `topNavBar.register`,\n application: 'diff',\n },\n ],\n [\n {\n href: `https://karmayogibharat.gov.in/`,\n target: `_blank`,\n name: `footerLinks.missionKarmayogi`\n },\n {\n href: `https://dopt.gov.in/`,\n target: `_blank`,\n name: `footerLinks.dopt`\n },\n {\n href: `https://cbc.gov.in/`,\n target: `_blank`,\n name: `footerLinks.cpc`\n },\n {\n href: `https://portal.igotkarmayogi.gov.in/public/privacy-policy/`,\n target: `_blank`,\n name: `footerLinks.privacyPolicy`\n },\n ]\n ],\n followUs: 'socailHub.followUs',\n // copyRights: 'Copyright © Website managed by Karmayogi Bharat.',\n // copyRightMobile: 'Copyright © Website managed by Karmayogi Bharat.'\n copyRights: 'Copyright',\n copyRightMobile: 'CopyrightMobile'\n}\nexport const NAV_FOOTER_DETAILS_MOBILE = {\n support: [\n {\n href: `https://portal.igotkarmayogi.gov.in/public/faq`,\n target: `_self`,\n name: `footerLinks.faq`,\n application: 'diff',\n\n },\n {\n href: `contact_us`,\n target: `_self`,\n router: '/',\n name: `footerLinks.contactUs`\n },\n {\n href: `mdoUserList`,\n target: `_self`,\n router: `mdoList`,\n name: `footerLinks.nodalOffice`\n },\n ],\n releated: [\n {\n href: `newsroom`,\n target: `_self`,\n router: '/',\n name: `footerLinks.newsroom`,\n },\n {\n href: `latest-updates`,\n target: `_self`,\n router: 'latest-updates',\n name: `footerLinks.karmayogiCorner`\n },\n {\n href: `https://portal.igotkarmayogi.gov.in/public/signup`,\n target: `_self`,\n name: `topNavBar.register`,\n application: 'diff',\n },\n {\n href: `https://karmayogibharat.gov.in/`,\n target: `_blank`,\n name: `footerLinks.missionKarmayogi`\n },\n {\n href: `https://dopt.gov.in/`,\n target: `_blank`,\n name: `footerLinks.dopt`\n },\n {\n href: `https://cbc.gov.in/`,\n target: `_blank`,\n name: `footerLinks.cpc`\n },\n {\n href: `https://portal.igotkarmayogi.gov.in/public/privacy-policy/`,\n target: `_blank`,\n name: `footerLinks.privacyPolicy`\n },\n ],\n followUs: 'socailHub.followUs',\n copyRights: 'Copyright © Website managed by Karmayogi Bharat.',\n copyRightMobile: 'Copyright © Website managed by Karmayogi Bharat.'\n}\n\nexport const FOOTER_DETAILS = {\n copyRights: 'Copyright © Website managed by Karmayogi Bharat.'\n}\n\nexport const HOW_TO_CARD_LIST = {\n header: {\n headerText: `How to`,\n type: `howto`\n },\n dataList: [\n {\n title: 'How to Register?', link: '', icon: \"assets/img/howto/Rectangle3.png\"\n },\n {\n title: 'How to Login?', link: '', icon: \"assets/img/howto/Rectangle1.png\"\n },\n {\n title: 'Platform Walkthrough', link: '', icon: \"assets/img/howto/Rectangle2.png\"\n }\n ],\n}\n\nexport const INFOCUS_CARD = [{\n videoCategory: 'course_intro',\n header: {\n headerText: `Video Gallery`,\n type: `video-gallery`\n },\n dataList: [\n {\n\n }\n ]\n}]\n\nexport const WHAT_IS_CARD = {\n header: {\n headerText: `what-is`,\n type: `what-is`\n },\n dataList: [\n // {\n // id: 'whatIsIGot',\n // imgSrc: `assets/whatis/igot1stvideo.jpg`,\n // name: 'walkThrough.whatIsIGot',\n // link: 'https://www.youtube.com/watch?v=CgSHMbEhf6E'\n // },\n {\n id: 'howToLoginAndRegister',\n imgSrc: `assets/whatis/howtoregister.jpg`,\n name: 'walkThrough.howToLoginAndRegister',\n link: 'https://www.youtube.com/watch?v=MH12AkVBs3k'\n }, {\n id: 'igotWalkthrough',\n imgSrc: `assets/whatis/Rectangle3.png`,\n name: 'walkThrough.igotWalkthrough',\n link: 'https://www.youtube.com/watch?v=mak7BPe_0jY'\n }\n ],\n}\n\nexport const FOOTER_PROVIDER = [\n { href: 'https://cbc.gov.in/', src: \"assets/footer-provider/new/capacity-building.svg\" },\n { href: 'https://www.digitalindia.gov.in/', src: \"assets/footer-provider/new/digital-india.svg\" },\n { href: 'https://dopt.gov.in/', src: \"assets/footer-provider/new/dopt.svg\" },\n { href: 'https://data.gov.in/', src: \"assets/footer-provider/new/data-gov.svg\" },\n { href: 'https://www.meity.gov.in/', src: \"assets/footer-provider/new/MEIT.svg\" },\n { href: 'https://www.mygov.in/', src: \"assets/footer-provider/new/my-gov.svg\" },\n { href: 'https://www.pmindia.gov.in/en/', src: \"assets/footer-provider/new/pm-india.svg\" },\n { href: 'https://www.india.gov.in/', src: \"assets/footer-provider/new/india-gov.svg\" },\n\n];\n\nexport const STAT_ARR = [\n { icon: \"assets/stat_icon/Network 2.svg\", count: \"30+ Lakhs\", name: \"stats.karmayogisOnboarded\" },\n { icon: \"assets/stat_icon/Program.svg\", count: \"868\", name: \"stats.totalCourses\" },\n { icon: \"assets/stat_icon/Network 4.svg\", count: \"3,846\", name: \"stats.totalCompletitions\" },\n { icon: \"assets/stat_icon/people.svg\", count: \"1,595\", name: \"stats.monthlyActiveUsers\" },\n { icon: \"assets/stat_icon/Network 5.svg\", count: \"1,595\", name: \"stats.certificatesIssued\" },\n]\n\nexport const SOCIAL_LINKS = [\n { active: true, href_url: \"https://twitter.com/iGOTKarmayogi\", name: \"twitter\", src: \"assets/social_icons/x.svg\" },\n { active: true, href_url: \"https://www.linkedin.com/company/karmayogi-bharat/\", name: \"linkedin\", src: \"assets/social_icons/in.svg\" },\n { active: true, href_url: \"https://www.youtube.com/channel/UCPO2faT8YEi6Q_2IY5kf2Dg\", name: \"youtube\", src: \"assets/social_icons/yt.svg\" },\n { active: true, href_url: \"https://www.instagram.com/karmayogibharat/\", name: \"instagram\", src: \"assets/social_icons/inst.svg\" },\n { active: true, href_url: \"https://www.facebook.com/profile.php?id=100089782863897\", name: \"facebook\", src: \"assets/social_icons/fb.svg\" },\n];\n\nexport const LANGUAGES = [\n {\n \"value\": \"বাংলা\",\n \"key\": \"be\"\n },\n {\n \"value\": \"English\",\n \"key\": \"en\"\n },\n {\n \"value\": \"हिंदी\",\n \"key\": \"hi\"\n },\n {\n \"value\": \"ಕನ್ನಡ\",\n \"key\": \"ka\"\n },\n // {\n // \"value\": \"മലയാളം\",\n // \"key\": \"ml\"\n // },\n {\n \"value\": \"मराठी\",\n \"key\": \"mr\"\n },\n {\n \"value\": \"தமிழ்\",\n \"key\": \"ta\"\n },\n // {\n // \"value\": \"తెలుగు\",\n // \"key\": \"te\"\n // },\n // {\n // \"value\": \"অসমীয়া\",\n // \"key\": \"as\"\n // },\n \n // {\n // \"value\": \"ગુજરાતી\",\n // \"key\": \"gu\"\n // },\n \n // {\n // \"value\": \"ଓଡିଆ\",\n // \"key\": \"od\"\n // },\n // {\n // \"value\": \"ਪੰਜਾਬੀ\",\n // \"key\": \"pu\"\n // }\n]\n\nexport const ORGANISATION_PARTNERS = {\n header: {\n headerText: `organisationPartners.title`,\n type: `organisationsPartners`\n },\n dataList: [\n {\n id: '1',\n text: 'organisationPartners.slideText_1'\n },\n {\n id: '2',\n text: 'organisationPartners.slideText_2'\n },\n {\n id: '3',\n text: 'organisationPartners.slideText_3'\n },\n {\n id: '4',\n text: 'organisationPartners.slideText_4'\n },\n {\n id: '5',\n text: 'organisationPartners.slideText_5'\n },\n ],\n}\n\nexport const FAQ_CHATBOT = {\n FaqTitle: `FaqTitle`\n}\nexport const KARMAYOGI_CORNER = {\n title: `karmayogiCorner`\n}\n\nexport const ABOUT_KARMAYOGI = {\n header: {\n headerText: 'aboutUsPage.title'\n },\n about: {\n image: {\n imageLink: 'assets/aboutus/about-us-banner.png',\n imageHeader: 'aboutUsPage.teamKarmayogiBharat'\n },\n aboutUs: [\n 'aboutUsPage.contest1',\n\n `aboutUsPage.contest2`\n ],\n karmayogiVisions: [\n {\n iconLink: 'assets/aboutus/vision_icon.svg',\n iconClass: 'vision-icon',\n header: 'aboutUsPage.vision',\n description: 'aboutUsPage.visionDescription'\n },\n {\n iconLink: 'assets/aboutus/mission_icon.svg',\n iconClass: 'mission-icon',\n header: 'aboutUsPage.mission',\n description: 'aboutUsPage.missionDescription'\n }\n ],\n\n },\n}\n\nexport const KARMAYOGI_FUNCTIONS = {\n header: 'karmayogiFunctions.title',\n functions: [\n {\n iconLink: 'assets/aboutus/functions_icons/design_function.svg',\n description: 'karmayogiFunctions.designFunction'\n },\n {\n iconLink: 'assets/aboutus/functions_icons/govassests.svg',\n description: 'karmayogiFunctions.governmentAssests'\n },\n {\n iconLink: 'assets/aboutus/functions_icons/file.svg',\n description: 'karmayogiFunctions.create'\n },\n {\n iconLink: 'assets/aboutus/functions_icons/manage_assessment.svg',\n description: 'karmayogiFunctions.manageAssessment'\n },\n {\n iconLink: 'assets/aboutus/functions_icons/telemetry_data.svg',\n description: 'karmayogiFunctions.telemetryData'\n },\n {\n iconLink: 'assets/aboutus/functions_icons/hq.svg',\n description: 'karmayogiFunctions.guidelines'\n },\n {\n iconLink: 'assets/aboutus/functions_icons/mechanism.svg',\n description: 'karmayogiFunctions.mechanism'\n },\n {\n iconLink: 'assets/aboutus/functions_icons/procurement.svg',\n description: 'karmayogiFunctions.procurement'\n },\n {\n iconLink: 'assets/aboutus/functions_icons/information.svg',\n description: 'karmayogiFunctions.information'\n },\n ]\n}\n\nexport const KARMAYOGI_TEAM = {\n header: 'karmayogiTeam.title',\n categories: [\n {\n tabName: 'karmayogiTeam.boardOfDirectorTab',\n tabId: 'director',\n teamMembers: [\n {\n memberName: 'karmayogiTeam.teamMembers.subramanianRamadorai',\n imageLink: 'assets/aboutus/directorList/subhramanian.png',\n roles: 'karmayogiTeam.teamMemberRoles.subramanianRamadoraiRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: 'https://x.com/s_ramadorai?s=21'\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/subramanian-ramadorai-8847a5265?utm_source=share&utm_campaign=share_via&utm_content=profile&utm_medium=ios_app'\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.rachnaShah',\n imageLink: 'assets/aboutus/directorList/rachnaShah.png',\n roles: 'karmayogiTeam.teamMemberRoles.rachnaShahRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.skrishnan',\n imageLink: 'assets/aboutus/directorList/s krishnan.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.skrishnanRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: 'https://x.com/abhish18?s=21'\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/abhisheksinghias?utm_source=share&utm_campaign=share_via&utm_content=profile&utm_medium=ios_app'\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.govindIyer',\n imageLink: 'assets/aboutus/directorList/govind.png',\n roles: 'karmayogiTeam.teamMemberRoles.govindIyerRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/govindiyer?utm_source=share&utm_campaign=share_via&utm_content=profile&utm_medium=ios_app'\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.nirmaljeetSinghKalsi',\n imageLink: 'assets/aboutus/directorList/nirmaljeet.png',\n roles: 'karmayogiTeam.teamMemberRoles.nirmaljeetSinghKalsiRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: 'https://x.com/nskalsi?s=21'\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/dr-nirmaljeet-singh-kalsi-ias-retd-0b84561?utm_source=share&utm_campaign=share_via&utm_content=profile&utm_medium=ios_app'\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.pankajBansal',\n imageLink: 'assets/aboutus/directorList/pankaj.png',\n roles: 'karmayogiTeam.teamMemberRoles.pankajBansalRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: 'https://x.com/pankajbansalpb?s=21'\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/pbpankajbansal?utm_source=share&utm_campaign=share_via&utm_content=profile&utm_medium=ios_app'\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.debjaniGhosh',\n imageLink: 'assets/aboutus/directorList/debjani.png',\n roles: 'karmayogiTeam.teamMemberRoles.debjaniGhoshRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: 'https://x.com/debjani_ghosh_?s=21'\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/debjani-ghosh-48298b1?utm_source=share&utm_campaign=share_via&utm_content=profile&utm_medium=ios_app'\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.lalithaLakshmi',\n imageLink: 'assets/aboutus/directorList/CEO-Mam.png',\n roles: 'karmayogiTeam.teamMemberRoles.lalithaLakshmiRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.ashishPai',\n imageLink: 'assets/aboutus/directorList/ashish.png',\n roles: 'karmayogiTeam.teamMemberRoles.ashishPaiRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/ashish-pai-10499a12/?utm_source=share&utm_campaign=share_via&utm_content=profile&utm_medium=ios_app'\n }\n ]\n },\n // {\n // memberName: 'karmayogiTeam.teamMembers.hemangJani',\n // imageLink: 'assets/aboutus/jani.svg',\n // roles: 'karmayogiTeam.teamMemberRoles.hemangJaniRoles',\n // socialMedia: [\n // {\n // iconLink: 'assets/aboutus/twiter.svg',\n // navigationLink: ''\n // },\n // {\n // iconLink: 'assets/aboutus/linkedin.svg',\n // navigationLink: ''\n // }\n // ]\n // },\n\n // {\n // memberName: 'karmayogiTeam.teamMembers.alkeshKumarSharma',\n // imageLink: 'assets/aboutus/alkesh.svg',\n // roles: 'karmayogiTeam.teamMemberRoles.alkeshKumarSharmaRoles',\n // socialMedia: [\n // {\n // iconLink: 'assets/aboutus/twiter.svg',\n // navigationLink: ''\n // },\n // {\n // iconLink: 'assets/aboutus/linkedin.svg',\n // navigationLink: ''\n // }\n // ]\n // },\n // {\n // memberName: 'karmayogiTeam.teamMembers.santruptMisra',\n // imageLink: 'assets/aboutus/santrupt.svg',\n // roles: 'karmayogiTeam.teamMemberRoles.santruptMisraRoles',\n // socialMedia: [\n // {\n // iconLink: 'assets/aboutus/twiter.svg',\n // navigationLink: ''\n // },\n // {\n // iconLink: 'assets/aboutus/linkedin.svg',\n // navigationLink: ''\n // }\n // ]\n // },\n ]\n },\n {\n tabName: 'karmayogiTeam.karmayogiTeamTab',\n tabId: 'Karmayogi',\n teamMembers: [\n {\n memberName: 'karmayogiTeam.teamMembers.lalithaLakshmi',\n imageLink: 'assets/aboutus/directorList/CEO-Mam.png',\n roles: 'karmayogiTeam.teamMemberRoles.lalithaLakshmiRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: 'https://x.com/abhish18?s=21'\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/abhisheksinghias?utm_source=share&utm_campaign=share_via&utm_content=profile&utm_medium=ios_app'\n }\n ]\n },\n\n {\n memberName: 'karmayogiTeam.teamMembers.rakeshVerma',\n imageLink: 'assets/aboutus/karmayogiTeam/rakesh.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.rakeshVermaRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.ashishPaiWithoutSri',\n imageLink: 'assets/aboutus/directorList/ashish.png',\n roles: 'karmayogiTeam.teamMemberRoles.ashishPaiRolesWithoutKarmayogi',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/ashish-pai-10499a12/?utm_source=share&utm_campaign=share_via&utm_content=profile&utm_medium=ios_app'\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.ranaPratapSingh',\n imageLink: 'assets/aboutus/karmayogiTeam/ranaPratapSingh.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.ranaPratapSinghRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: 'https://twitter.com/ranaprsingh'\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/ranapratapsingh1/'\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.monojeetChakravorty',\n imageLink: 'assets/aboutus/karmayogiTeam/monojeet.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.monojeetChakravortyRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n\n // {\n // memberName: 'karmayogiTeam.teamMembers.harleenSachdeva',\n // imageLink: 'assets/aboutus/karmayogiTeam/harleenSachdeva.jpg',\n // roles: 'karmayogiTeam.teamMemberRoles.harleenSachdevaRoles',\n // socialMedia: [\n // {\n // iconLink: 'assets/aboutus/twiter.svg',\n // navigationLink: ''\n // },\n // {\n // iconLink: 'assets/aboutus/linkedin.svg',\n // navigationLink: 'https://www.linkedin.com/in/ashish-pai-10499a12/?utm_source=share&utm_campaign=share_via&utm_content=profile&utm_medium=ios_app'\n // }\n // ]\n // },\n\n {\n memberName: 'karmayogiTeam.teamMembers.samtaKumariSimmy',\n imageLink: 'assets/aboutus/karmayogiTeam/samtaKumari.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.samtaKumariSimmyRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/cssamtaksimmy?utm_source=share&utm_campaign=share_via&utm_content=profile&utm_medium=android_app'\n }\n ]\n },\n // {\n // memberName: 'karmayogiTeam.teamMembers.hemantSharma',\n // imageLink: 'assets/aboutus/karmayogiTeam/hemant.jpg',\n // roles: 'karmayogiTeam.teamMemberRoles.hemantSharmaRoles',\n // socialMedia: [\n // {\n // iconLink: 'assets/aboutus/twiter.svg',\n // navigationLink: ''\n // },\n // {\n // iconLink: 'assets/aboutus/linkedin.svg',\n // navigationLink: ''\n // }\n // ]\n // }, \n {\n memberName: 'karmayogiTeam.teamMembers.shobhanaRana',\n imageLink: 'assets/aboutus/karmayogiTeam/shobhana.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.shobhanaRanaRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/shobhana-rana-59a48092?utm_source=share&utm_campaign=share_via&utm_content=profile&utm_medium=ios_app'\n }\n ]\n },\n\n {\n memberName: 'karmayogiTeam.teamMembers.riteshKumar',\n imageLink: 'assets/aboutus/karmayogiTeam/ritesh.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.riteshKumarRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n // {\n // memberName: 'karmayogiTeam.teamMembers.rahulRanjan',\n // imageLink: 'assets/aboutus/karmayogiTeam/rahulRanjan.jpg',\n // roles: 'karmayogiTeam.teamMemberRoles.rahulRanjanRoles',\n // socialMedia: [\n // {\n // iconLink: 'assets/aboutus/twiter.svg',\n // navigationLink: ''\n // },\n // {\n // iconLink: 'assets/aboutus/linkedin.svg',\n // navigationLink: ''\n // }\n // ]\n // },\n // {\n // memberName: 'karmayogiTeam.teamMembers.rajatPratapSingh',\n // imageLink: 'assets/aboutus/karmayogiTeam/rajatPratapSingh.jpg',\n // roles: 'karmayogiTeam.teamMemberRoles.rajatPratapSinghRoles',\n // socialMedia: [\n // {\n // iconLink: 'assets/aboutus/twiter.svg',\n // navigationLink: ''\n // },\n // {\n // iconLink: 'assets/aboutus/linkedin.svg',\n // navigationLink: ''\n // }\n // ]\n // },\n {\n memberName: 'karmayogiTeam.teamMembers.kailashChandra',\n imageLink: 'assets/aboutus/karmayogiTeam/kailashChandra.png',\n roles: 'karmayogiTeam.teamMemberRoles.kailashChandraRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.soumiBanerjee',\n imageLink: 'assets/aboutus/karmayogiTeam/soumiBanerjee.png',\n roles: 'karmayogiTeam.teamMemberRoles.soumiBanerjeeRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.eshaKatiyar',\n imageLink: 'assets/aboutus/karmayogiTeam/esha.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.eshaKatiyarRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/esha-katiyar-137a3571/'\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.ankitaSondhi',\n imageLink: 'assets/aboutus/karmayogiTeam/ankita.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.ankitaSondhiRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/ankita-sondhi/'\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.akankshaSrivastava',\n imageLink: 'assets/aboutus/karmayogiTeam/akankshaSrivastava.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.akankshaSrivastavaRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.dineshUpase',\n imageLink: 'assets/aboutus/karmayogiTeam/image.png', // image missing check with dheeraj\n roles: 'karmayogiTeam.teamMemberRoles.dineshUpaseRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.syedMohdUzair',\n imageLink: 'assets/aboutus/karmayogiTeam/syedMohdUzair.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.syedMohdUzairRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/syed-mohd-uzair-a82b98147/?originalSubdomain=in'\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.siddhiMehndiratta',\n imageLink: 'assets/aboutus/karmayogiTeam/siddhi.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.siddhiMehndirattaRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: 'https://x.com/shemusings?s=21'\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/siddhi-mehndiratta-575409210?utm_source=share&utm_campaign=share_via&utm_content=profile&utm_medium=ios_app'\n }\n ]\n },\n /* Pawan Kumar Pathak left the team */\n\n {\n memberName: 'karmayogiTeam.teamMembers.vaibhavAgarwal',\n imageLink: 'assets/aboutus/karmayogiTeam/vaibhav.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.vaibhavAgarwalRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/ashish-pai-10499a12/?utm_source=share&utm_campaign=share_via&utm_content=profile&utm_medium=ios_app'\n }\n ]\n },\n // {\n // memberName: 'karmayogiTeam.teamMembers.rajeshKumar',\n // imageLink: 'assets/aboutus/karmayogiTeam/rajesh.jpg',\n // roles: 'karmayogiTeam.teamMemberRoles.rajeshKumarRoles',\n // socialMedia: [\n // {\n // iconLink: 'assets/aboutus/twiter.svg',\n // navigationLink: ''\n // },\n // {\n // iconLink: 'assets/aboutus/linkedin.svg',\n // navigationLink: 'https://www.linkedin.com/in/ashish-pai-10499a12/?utm_source=share&utm_campaign=share_via&utm_content=profile&utm_medium=ios_app'\n // }\n // ]\n // },\n\n {\n memberName: 'karmayogiTeam.teamMembers.sahilJain',\n imageLink: 'assets/aboutus/karmayogiTeam/sahilJain.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.sahilJainRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/ashish-pai-10499a12/?utm_source=share&utm_campaign=share_via&utm_content=profile&utm_medium=ios_app'\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.shubhamGupta',\n imageLink: 'assets/aboutus/karmayogiTeam/shubham.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.shubhamGuptaRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: 'https://x.com/gupta_shubham04/'\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/shubhamgupta04/'\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.pawanKumarPathak',\n imageLink: 'assets/aboutus/karmayogiTeam/Pawan.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.pawanKumarPathakRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.abhimanyuSharma',\n imageLink: 'assets/aboutus/karmayogiTeam/abhimanyuSharma.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.abhimanyuSharmaRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.vinayakSen',\n imageLink: 'assets/aboutus/karmayogiTeam/vinayakSen.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.vinayakSenRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: 'https://twitter.com/ivankaynes'\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/vinayak-sen?utm_source=share&utm_campaign=share_via&utm_content=profile&utm_medium=ios_app'\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.nidhi',\n imageLink: 'assets/aboutus/karmayogiTeam/nidhi.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.nidhiRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'www.linkedin.com/in/nidhi-vaish-01362a167'\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.muddukrishna',\n imageLink: 'assets/aboutus/karmayogiTeam/muddukrishna.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.muddukrishnaRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: 'https://twitter.com/muddukrishna_?t=QJNuSUXQD7yN97UpQJCbKw&s=09'\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/muddu-krishna-267a3898?utm_source=share&utm_campaign=share_via&utm_content=profile&utm_medium=android_app'\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.henryArokiaRaj',\n imageLink: 'assets/aboutus/karmayogiTeam/henryArokia.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.henryArokiaRajRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/henry-arokia-raj-0b8021249/'\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.priyamvadaPallaviMishra',\n imageLink: 'assets/aboutus/karmayogiTeam/priyamvadaPallaviMishra.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.priyamvadaPallaviMishraRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/dr-priyamvada-mishra-6181961bb?utm_source=share&utm_campaign=share_via&utm_content=profile&utm_medium=ios_app'\n }\n ]\n },\n // {\n // memberName: 'karmayogiTeam.teamMembers.amitSinghal',\n // imageLink: 'assets/aboutus/karmayogiTeam/amitSinghal.jpg',\n // roles: 'karmayogiTeam.teamMemberRoles.amitSinghalRoles',\n // socialMedia: [\n // {\n // iconLink: 'assets/aboutus/twiter.svg',\n // navigationLink: ''\n // },\n // {\n // iconLink: 'assets/aboutus/linkedin.svg',\n // navigationLink: 'https://www.linkedin.com/in/amit-singhal-15004b114'\n // }\n // ]\n // },\n {\n memberName: 'karmayogiTeam.teamMembers.akshaySharma',\n imageLink: 'assets/aboutus/karmayogiTeam/akshaySharma.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.akshaySharmaRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'http://www.linkedin.com/in/akshaysharma12' // NOSONAR\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.rakshandaSinghThakur',\n imageLink: 'assets/aboutus/karmayogiTeam/rakshandaSingh.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.rakshandaSinghThakurRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ' https://twitter.com/RakshandaSing20'\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: 'https://www.linkedin.com/in/rakshanda-singh-thakur-007a451a4?trk=contact-info'\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.sheetal',\n imageLink: 'assets/aboutus/karmayogiTeam/sheetal.png',\n roles: 'karmayogiTeam.teamMemberRoles.sheetalRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.taranpalSingh',\n imageLink: 'assets/aboutus/karmayogiTeam/taranpalSingh.png',\n roles: 'karmayogiTeam.teamMemberRoles.taranpalSinghRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.nitikaDogra',\n imageLink: 'assets/aboutus/karmayogiTeam/nitikaDogra.png',\n roles: 'karmayogiTeam.teamMemberRoles.nitikaDograRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.suman',\n imageLink: 'assets/aboutus/karmayogiTeam/suman.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.sumanRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n }, \n {\n memberName: 'karmayogiTeam.teamMembers.vishalTomer',\n imageLink: 'assets/aboutus/karmayogiTeam/vishalTomer.jpg',\n roles: 'karmayogiTeam.teamMemberRoles.vishalTomerRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n }, \n {\n memberName: 'karmayogiTeam.teamMembers.vivekRanjanPandey',\n imageLink: 'assets/aboutus/karmayogiTeam/image.png',\n roles: 'karmayogiTeam.teamMemberRoles.vivekRanjanPandeyRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.ajaySingh',\n imageLink: 'assets/aboutus/karmayogiTeam/image.png',\n roles: 'karmayogiTeam.teamMemberRoles.ajaySinghRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.priyankaKumari',\n imageLink: 'assets/aboutus/karmayogiTeam/image.png',\n roles: 'karmayogiTeam.teamMemberRoles.priyankaKumariRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.ladNimeshkumarBalavantbhai',\n imageLink: 'assets/aboutus/karmayogiTeam/image.png',\n roles: 'karmayogiTeam.teamMemberRoles.ladNimeshkumarBalavantbhaiRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.ashishKumar',\n imageLink: 'assets/aboutus/karmayogiTeam/ashishKumar.png',\n roles: 'karmayogiTeam.teamMemberRoles.ashishKumarRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.shaniKumar',\n imageLink: 'assets/aboutus/karmayogiTeam/shaniKumar.png',\n roles: 'karmayogiTeam.teamMemberRoles.shaniKumarRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.kamleshKumarYadav',\n imageLink: 'assets/aboutus/karmayogiTeam/kamleshKumarYadav.png',\n roles: 'karmayogiTeam.teamMemberRoles.kamleshKumarYadavRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.anbalaganArunRaja',\n imageLink: 'assets/aboutus/karmayogiTeam/anbalaganArunRaja.png',\n roles: 'karmayogiTeam.teamMemberRoles.anbalaganArunRajaRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.anjaliKumarBharadwaj',\n imageLink: 'assets/aboutus/karmayogiTeam/anjaliKumarBharadwaj.png',\n roles: 'karmayogiTeam.teamMemberRoles.anjaliKumarBharadwajRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.ashishThakran',\n imageLink: 'assets/aboutus/karmayogiTeam/ashishThakran.png',\n roles: 'karmayogiTeam.teamMemberRoles.ashishThakranRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.ranjanaTripathi',\n imageLink: 'assets/aboutus/karmayogiTeam/ranjanaTripathi.png',\n roles: 'karmayogiTeam.teamMemberRoles.ranjanaTripathiRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.reenaBhasin',\n imageLink: 'assets/aboutus/karmayogiTeam/reenaBhasin.png',\n roles: 'karmayogiTeam.teamMemberRoles.reenaBhasinRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.meenuPathak',\n imageLink: 'assets/aboutus/karmayogiTeam/meenuPathak.png',\n roles: 'karmayogiTeam.teamMemberRoles.meenuPathakRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.himanshu',\n imageLink: 'assets/aboutus/karmayogiTeam/image.png',\n roles: 'karmayogiTeam.teamMemberRoles.himanshuRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.rishabhJain',\n imageLink: 'assets/aboutus/karmayogiTeam/image.png',\n roles: 'karmayogiTeam.teamMemberRoles.rishabhJainRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.sunilKumar',\n imageLink: 'assets/aboutus/karmayogiTeam/sunilKumar.png',\n roles: 'karmayogiTeam.teamMemberRoles.sunilKumarRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.randhirKumarSingh',\n imageLink: 'assets/aboutus/karmayogiTeam/randhirKumarSingh.png',\n roles: 'karmayogiTeam.teamMemberRoles.randhirKumarSinghRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n },\n {\n memberName: 'karmayogiTeam.teamMembers.anjaliSikarwar',\n imageLink: 'assets/aboutus/karmayogiTeam/anjaliSikarwar.png',\n roles: 'karmayogiTeam.teamMemberRoles.anjaliSikarwarRoles',\n socialMedia: [\n {\n iconLink: 'assets/aboutus/twiter.svg',\n navigationLink: ''\n },\n {\n iconLink: 'assets/aboutus/linkedin.svg',\n navigationLink: ''\n }\n ]\n }, \n // {\n // memberName: 'karmayogiTeam.teamMembers.sampadaSingh',\n // imageLink: 'assets/aboutus/karmayogiTeam/sampada.jpg',\n // roles: 'karmayogiTeam.teamMemberRoles.sampadaSinghRoles',\n // socialMedia: [\n // {\n // iconLink: 'assets/aboutus/twiter.svg',\n // navigationLink: ''\n // },\n // {\n // iconLink: 'assets/aboutus/linkedin.svg',\n // navigationLink: ''\n // }\n // ]\n // },\n\n\n ]\n }\n ]\n}\n\nexport const TENDERS = {\n header: {\n headerText: `tender.title`,\n downloadPdf: `tender.downloadPdf`\n }\n}\n\nexport const NOTIFICATIONS = {\n header: {\n headerText: `notifications.title`,\n downloadPdf: `notifications.downloadPdf`\n }\n}\n\n\nexport const CAREER = {\n header: {\n headerText: `career.title`,\n p1: `career.paraText1`,\n p2: `career.paraText2`,\n headerPosition: `career.positionsText`\n },\n fieldText: {\n f1: `career.jobTitletext`,\n f2: `career.departmentText`,\n f3: `career.positionText`,\n btn1: `career.resetText`,\n btn2: `career.searchText`,\n downloadPdf: `career.downloadPdf`\n },\n placeholderText: {\n p1: `career.selectJobTitle`,\n p2: `career.selectDepartment`,\n p3: `career.selectPosition`\n },\n\n dataList: [\n {\n image: `assets/aboutus/about-new.JPG`,\n }\n ]\n}\n\n\nexport const CONTACTUS = {\n header: {\n headertext1: `contact.titleText1`,\n headerText2: `contact.titletext2`\n },\n fieldText: {\n f1: `contact.fieldtext1`,\n f2: `contact.fieldtext2`,\n f3: `contact.fieldtext3`,\n f4: `contact.fieldtext4`,\n f5: `contact.fieldtext5`,\n f6: `contact.fieldtext6`,\n btn: `contact.fieldtext7`\n },\n contact: {\n h1: `contact.headtext`,\n address: `contact.addressText`,\n mail: `contact.mail`,\n number: `contact.numtext`,\n mailtext: `contact.mailtext`,\n numbertext: `contact.numbertext`,\n duration: `contact.duration`,\n slot: `contact.slot`,\n action: `contact.action`\n },\n placeholder: {\n placeholderText1: `contact.placeholderText1`,\n placeholderText2: `contact.placeholderText2`,\n placeholderText3: `contact.placeholderText3`,\n placeholderText4: `contact.placeholderText4`,\n placeholderText5: `contact.placeholderText5`\n }\n}\nexport const TENDERS_KARMAYOGI = {\n header: {\n headerText: 'tenders.title'\n },\n}","import { Injectable } from '@angular/core'\nimport { Subject } from 'rxjs'\nimport { WsEvents } from './events'\nimport { HttpClient } from '@angular/common/http'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EventService {\n private eventsChatbotSubject = new Subject<WsEvents.IWsEvents<any>>()\n public chatbotEvents$ = this.eventsChatbotSubject.asObservable()\n private eventsSubject = new Subject<WsEvents.IWsEvents<any>>()\n public events$ = this.eventsSubject.asObservable()\n\n dispatchChatbotEvent<T>(event: WsEvents.IWsEvents<T>) {\n console.log(\"event \", event)\n this.eventsChatbotSubject.next(event)\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { SharedService } from '../../modules/shared/services/shared.service';\n\n@Component({\n selector: 'app-delete-role-mapping-popup',\n templateUrl: './delete-role-mapping-popup.component.html',\n styleUrls: ['./delete-role-mapping-popup.component.scss']\n})\nexport class DeleteRoleMappingPopupComponent {\n planData:any;\n isViewCourse = false;\n\n constructor(\n public dialogRef: MatDialogRef<DeleteRoleMappingPopupComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n public sharedService: SharedService\n ) {\n this.planData = data\n this.isViewCourse = this.data?.from === 'viewCourse';\n }\n confirmDelete() {\n this.dialogRef.close('saved');\n }\n\n regenerateRoleMapping() {\n this.dialogRef.close('saved')\n }\n\n cancel(event) {\n \n this.dialogRef.close(event)\n }\n\n cancelCourse() {\n this.dialogRef.close()\n }\n}","<!-- VIEW COURSE DELETE CONFIRMATION -->\n<ng-container *ngIf=\"isViewCourse; else regenerateCBP\">\n <!-- 👇 PUT YOUR \"Delete Course\" HTML HERE -->\n <!-- Example structure only -->\n <div class=\"view-cbp-plan\">\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div class=\"heading\">Delete Course</div>\n <div class=\"cursor-pointer\" (click)=\"cancelCourse()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n \n <div class=\"section-container mt-4\">\n <div class=\"progress-icon\">\n <img src=\"assets/icons/info.svg\" style=\"scale: 2;margin: 10px;\">\n </div>\n <div>\n Are you sure you want to delete this course?\n </div>\n </div>\n \n <div class=\"popup-footer mt-4\">\n <input class=\"btn-active\" type=\"button\" value=\"No\" (click)=\"cancelCourse()\" />\n <input class=\"btn-active\" type=\"button\" value=\"Yes\" (click)=\"confirmDelete()\" />\n </div>\n </div>\n </div>\n </ng-container>\n \n <!-- REGENERATE CBP -->\n <ng-template #regenerateCBP>\n <!-- 👇 YOUR EXISTING HTML (you already shared this) -->\n <div class=\"view-cbp-plan\">\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div>\n <div class=\"heading\">Regenerate CBP</div>\n </div>\n <div class=\"cursor-pointer\" (click)=\"cancel('cross')\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n \n <div class=\"section-container mt-4\">\n <div class=\"progress-icon\">\n <img src=\"assets/icons/info.svg\" style=\"scale: 2;margin: 10px;\">\n </div>\n \n <div class=\"mt-2\">\n CBP is already available ,\n Do you want to Regenerate the Capacity building plan ?\n </div>\n </div>\n \n <div class=\"popup-footer mt-4\">\n <input class=\"btn-active-cancel\" type=\"button\" value=\"View Existing CBP\" (click)=\"cancel('button')\" />\n <input class=\"btn-active\" type=\"button\" value=\"Yes\" (click)=\"regenerateRoleMapping()\" />\n </div>\n </div>\n </div>\n </ng-template>","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport html2pdf from 'html2pdf.js';\nimport { DeleteRoleMappingPopupComponent } from '../delete-role-mapping-popup/delete-role-mapping-popup.component';\nimport { MatDialog } from '@angular/material/dialog';\nimport { interval, of, concat, ReplaySubject, Subject } from 'rxjs';\nimport { switchMap, takeWhile, tap } from 'rxjs/operators';\nimport { takeUntil } from 'rxjs/operators';\nimport { Router } from '@angular/router';\nimport { SharedService } from '../../modules/shared/services/shared.service';\nimport { RoleMappingService } from '../../modules/shared/services/role-mapping.service';\nimport { EventService } from '../../modules/shared/services/event.service';\n@Component({\n selector: 'app-role-mapping-generation',\n templateUrl: './role-mapping-generation.component.html',\n styleUrls: ['./role-mapping-generation.component.scss']\n})\nexport class RoleMappingGenerationComponent implements OnInit, OnChanges, OnDestroy {\n @ViewChild('pdfContent', { static: false }) pdfContent!: ElementRef;\n \n @Input() loginStatusFlag = false\n title = 'sunbird-cb-staticweb';\n isMaintenancePage: any\n selectedValue = ''\n searchText = ''\n dataSource: any\n displayedColumns: string[] = ['RequestId', 'title', 'requestor', 'requestType',\n 'requestStatus', 'assignee', 'requestedOn', 'interests', 'action']\n selectedMinistryType: string = 'ministry';\n ministryData: any = []\n ministryFullData: any = []\n roleMappingForm!: FormGroup;\n disableBtn = true\n sectorData = [\n {\n value: 'Women and child development'\n },\n {\n value: 'Rural development'\n },\n {\n value: 'Urban development'\n },\n {\n value: 'Healthcare'\n },\n {\n value: 'Agriculture'\n },\n {\n value: 'Others'\n }\n\n ]\n departmentData = []\n loading = false\n maxFileSizeMB = 25;\n allowedTypes = [\n 'application/pdf',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'text/plain'\n ];\n uploadError: string | null = null;\n uploadedFile: File[] | null = null;\n login = false\n cbpFinalObj: any = {}\n selectedMinistryId = ''\n originalFormValues: any\n chunks: string[] = [];\n fullJson: string = '';\n parsedData: any;\n currentProcessingStage: string = '';\n processingStages = [\n 'Initializing CBP Plan generation...',\n 'Analyzing departmental competency requirements...',\n 'Processing work order specifications and role definitions...',\n 'Generating detailed roles & resposibilities...',\n 'Generating detailed competencies...',\n 'Validating role mapping and finalizing the CBP Plan'\n ];\n @Output() successRoleMapping = new EventEmitter<any>()\n @Output() alreadyAvailableRoleMapping = new EventEmitter<any>()\n @Output() loginSuccess = new EventEmitter<any>()\n selectedMinistryObj: any = ''\n loginUserOrgIds = []\n panelOpen = false;\n departmentPanelOpen = false\n filteredList = [];\n filteredDepartmentList = [];\n originalMinistryData = []\n apiLoading = false\n firstApiResponse: any = null\n documents = []\n disableUploadDocument = true\n disableUploadDocumentOriginal = true\n private destroy$ = new Subject<void>();\n constructor(\n private eventSvc: EventService,\n public sharedService: SharedService,\n private fb: FormBuilder,\n private snackBar: MatSnackBar,\n public dialog: MatDialog,\n public roleMappingService: RoleMappingService,\n private router: Router\n ) {\n this.router.routeReuseStrategy.shouldReuseRoute = () => false;\n this.dataSource = new MatTableDataSource<any>([])\n this.isMaintenancePage = window.location.href.includes('/maintenance')\n }\n\n ngOnInit() {\n\n this.login = this.sharedService.checkIfLogin()\n\n this.cbpFinalObj = this.sharedService.getCBPPlanLocalStorage()\n if (this.cbpFinalObj && this.cbpFinalObj?.ministry && this.cbpFinalObj?.ministry?.sbOrgType) {\n\n\n this.editMinistryForm()\n // this.getMinistryData()\n } else {\n if (this.login) {\n this.getMinistryData()\n }\n this.roleMappingForm = this.fb.group({\n ministryType: ['ministry', Validators.required],\n ministry: [null, Validators.required],\n sectors: [[]],\n departments: [[]], // shown only if ministryType == 'state'\n additionalDetails: [''],\n additional_document: []\n });\n this.roleMappingForm.get('sectors')?.setValue([]);\n this.roleMappingForm.get('ministryType')?.valueChanges.subscribe(type => {\n this.roleMappingForm.reset({\n ministryType: type, // Keep the changed value\n ministry: null,\n sectors: [],\n departments: [],\n additionalDetails: '',\n additional_document: []\n });\n if (type === 'state') {\n this.roleMappingForm.get('departments')?.setValidators([Validators.required]);\n } else {\n this.roleMappingForm.get('departments')?.clearValidators();\n this.roleMappingForm.get('departments')?.setValue([]);\n }\n this.roleMappingForm.get('departments')?.updateValueAndValidity();\n });\n this.roleMappingForm.statusChanges.subscribe((status: any) => {\n let hasUploadDocuments = false\n this.router.events.subscribe(() => {\n hasUploadDocuments =\n this.router.url.includes('/upload-documents');\n\n });\n if (!hasUploadDocuments) {\n this.sharedService.checkRoleMappingFormValidation.next(status);\n\n }\n\n if (status === 'VALID') {\n this.disableUploadDocument = false\n this.disableUploadDocumentOriginal = false\n } else {\n this.disableUploadDocument = true\n this.disableUploadDocumentOriginal = true\n }\n\n });\n }\n\n\n\n\n\n\n }\n\n getUploadedDocuments() {\n const formData = this.roleMappingForm.value;\n this.apiLoading = true\n let reqBody = {\n state_center_id: formData.ministry,\n include_summary: true,\n skip: 0,\n limit: 200\n }\n if (formData?.departments) {\n reqBody['department_id'] = formData?.departments\n }\n this.apiLoading = true\n\n this.sharedService.getUploadedDocuments(reqBody).subscribe((res) => {\n if (res && res?.items && res?.items?.length) {\n this.apiLoading = false\n this.documents = res?.items\n } else {\n this.documents = []\n this.apiLoading = false\n }\n })\n }\n\n async editMinistryForm() {\n if (this.cbpFinalObj?.ministry.sbOrgType === 'ministry') {\n this.selectedMinistryType = this.cbpFinalObj?.ministry.sbOrgType\n await this.getMinistryData()\n if (this.cbpFinalObj?.ministry?.sbOrgType) {\n await this.sharedService.getCenterBasedDepartment(this.cbpFinalObj?.ministry?.identifier).subscribe((res) => {\n if (res?.length) {\n this.departmentData = res\n this.filteredDepartmentList = res\n } else {\n this.snackBar.open('No Department Found for Selected Ministry', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n this.sharedService.cbpPlanFinalObj['department_name'] = ''\n this.sharedService.cbpPlanFinalObj['departments'] = ''\n localStorage.setItem('cbpPlanFinalObj', JSON.stringify(this.sharedService.cbpPlanFinalObj))\n }\n })\n }\n\n this.roleMappingForm = this.fb.group({\n ministryType: [this.selectedMinistryType, Validators.required],\n ministry: [this.cbpFinalObj?.ministry?.identifier, Validators.required],\n sectors: [[]],\n departments: [this.cbpFinalObj?.departments], // shown only if ministryType == 'state'\n additionalDetails: ['']\n });\n this.roleMappingForm.statusChanges.subscribe((status: any) => {\n let hasUploadDocuments = false\n this.router.events.subscribe(() => {\n hasUploadDocuments =\n this.router.url.includes('/upload-documents');\n\n });\n if (!hasUploadDocuments) {\n this.sharedService.checkRoleMappingFormValidation.next(status);\n\n }\n\n if (status === 'VALID') {\n this.disableUploadDocument = false\n this.disableUploadDocumentOriginal = false\n } else {\n this.disableUploadDocument = true\n this.disableUploadDocumentOriginal = true\n }\n\n });\n\n // this.roleMappingForm.get('sectors')?.setValue([]);\n // this.roleMappingForm.get('ministryType')?.valueChanges.subscribe(type => {\n // this.roleMappingForm.reset({\n // ministryType: type, // Keep the changed value\n // ministry: null,\n // sectors: [],\n // departments: [],\n // additionalDetails: ''\n // });\n // if (type === 'state') {\n // this.roleMappingForm.get('departments')?.setValidators([Validators.required]);\n // } else {\n // this.roleMappingForm.get('departments')?.clearValidators();\n // this.roleMappingForm.get('departments')?.setValue([]);\n // }\n // this.roleMappingForm.get('departments')?.updateValueAndValidity();\n // });\n\n if (this.ministryData && this.ministryData.length) {\n this.selectedMinistryId = this.cbpFinalObj?.ministry?.identifier\n }\n\n //this.onGenerateRoleMapping()\n } else if (this.cbpFinalObj?.ministry?.sbOrgType === 'state') {\n this.selectedMinistryType = this.cbpFinalObj?.ministry?.sbOrgType\n await this.getMinistryData()\n await this.sharedService.getDepartmentList(this.cbpFinalObj?.ministry?.identifier).subscribe((res) => {\n this.departmentData = res\n this.filteredDepartmentList = res\n console.log('this.filteredDepartmentList --', this.filteredDepartmentList)\n })\n if (this.ministryData && this.ministryData.length) {\n this.selectedMinistryId = this.cbpFinalObj?.ministry?.identifier\n }\n this.roleMappingForm = this.fb.group({\n ministryType: [this.selectedMinistryType, Validators.required],\n ministry: [this.cbpFinalObj?.ministry?.identifier, Validators.required],\n sectors: [[]],\n departments: [this.cbpFinalObj?.departments], // shown only if ministryType == 'state'\n additionalDetails: [this.cbpFinalObj?.additionalDetails]\n });\n\n this.roleMappingForm.statusChanges.subscribe((status: any) => {\n let hasUploadDocuments = false\n this.router.events.subscribe(() => {\n hasUploadDocuments =\n this.router.url.includes('/upload-documents');\n\n });\n if (!hasUploadDocuments) {\n this.sharedService.checkRoleMappingFormValidation.next(status);\n\n }\n\n if (status === 'VALID') {\n this.disableUploadDocument = false\n this.disableUploadDocumentOriginal = false\n } else {\n this.disableUploadDocument = true\n this.disableUploadDocumentOriginal = true\n }\n\n });\n\n // this.roleMappingForm.get('sectors')?.setValue([]);\n // this.roleMappingForm.get('ministryType')?.valueChanges.subscribe(type => {\n // this.roleMappingForm.reset({\n // ministryType: type, // Keep the changed value\n // ministry: null,\n // sectors: [],\n // departments: [],\n // additionalDetails: ''\n // });\n // if (type === 'state') {\n // this.roleMappingForm.get('departments')?.setValidators([Validators.required]);\n // } else {\n // this.roleMappingForm.get('departments')?.clearValidators();\n // this.roleMappingForm.get('departments')?.setValue([]);\n // }\n // this.roleMappingForm.get('departments')?.updateValueAndValidity();\n // });\n console.log('this.ministryData', this.ministryData)\n if (this.ministryData && this.ministryData.length) {\n this.selectedMinistryId = this.cbpFinalObj?.ministry?.identifier\n }\n }\n this.originalFormValues = this.roleMappingForm.getRawValue();\n this.getUploadedDocuments()\n }\n\n ngOnChanges() {\n this.login = this.loginStatusFlag\n\n }\n\n getChangedFields(original: any, current: any): string[] {\n const changedKeys: string[] = [];\n\n for (const key in original) {\n if (!original.hasOwnProperty(key)) continue;\n\n const originalValue = original[key];\n const currentValue = current[key];\n\n // For arrays and objects, use JSON.stringify (or lodash isEqual for deep comparison)\n const isEqual =\n typeof originalValue === 'object'\n ? JSON.stringify(originalValue) === JSON.stringify(currentValue)\n : originalValue === currentValue;\n\n if (!isEqual) {\n changedKeys.push(key);\n }\n }\n\n return changedKeys;\n }\n\n onGenerateRoleMapping(): any {\n\n const currentFormValues = this.roleMappingForm.getRawValue();\n const formData: any = new FormData();\n\n formData.append('ministryType', currentFormValues.ministryType);\n formData.append('ministry', currentFormValues.ministry);\n formData.append('sectors', JSON.stringify(currentFormValues.sectors));\n formData.append('departments', JSON.stringify(currentFormValues.departments));\n formData.append('additionalDetails', currentFormValues.additionalDetails || '');\n const file: File = this.uploadedFile || this.roleMappingForm.get('additional_document')?.value;\n console.log('file', file)\n if (file) {\n formData.append('additional_document', file);\n }\n this.sharedService.cbpPlanFinalObj['departments'] = currentFormValues?.departments\n const departmentName = this.departmentData.find(u => u.identifier === currentFormValues.departments);\n this.sharedService.cbpPlanFinalObj['department_name'] = departmentName?.orgName\n const selectedMinistry = this.ministryData.find(item =>\n item.identifier === currentFormValues.ministry\n );\n\n this.selectedMinistryObj = selectedMinistry;\n this.sharedService.cbpPlanFinalObj['ministry'] = selectedMinistry\n localStorage.setItem('cbpPlanFinalObj', JSON.stringify(this.sharedService.cbpPlanFinalObj))\n console.log('this.roleMappingForm', this.roleMappingForm)\n console.log('formData--', formData)\n for (const pair of formData.entries()) {\n console.log(`${pair[0]}:`, pair[1]);\n }\n\n\n const changedFields = this.getChangedFields(this.originalFormValues, currentFormValues);\n\n if (changedFields.length > 0 || (file && file.size > 0)) {\n console.log('changedFields', changedFields)\n console.log('Changed fields:', changedFields);\n if (changedFields.includes('additionalDetails') && this.roleMappingForm.value.additionalDetails?.trim() || (file && file.size > 0)) {\n const dialogRef = this.dialog.open(DeleteRoleMappingPopupComponent, {\n width: '400px',\n data: '',\n panelClass: 'view-cbp-plan-popup',\n minHeight: '300px', // Set minimum height\n maxHeight: '80vh', // Prevent it from going beyond viewport\n disableClose: true // Optional: prevent closing with outside click\n });\n\n dialogRef.afterClosed().subscribe(result => {\n alert(result)\n if (result === 'saved') {\n console.log('Changes saved!');\n this.loading = true\n this.sharedService.deleteRoleMappingByStateAndDepartment(this.roleMappingForm.value.ministry, this.roleMappingForm.value.departments).subscribe({\n next: (res) => {\n // Success handling\n console.log('Success:', res);\n this.loading = false\n this.firstApiResponse = []\n this.generateFinalRoleMapping()\n },\n error: (error) => {\n this.firstApiResponse = []\n this.snackBar.open(error?.error?.detail, 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n this.loading = false\n // this.generateFinalRoleMapping()\n }\n });\n } else {\n this.generateFinalRoleMapping()\n }\n });\n } else {\n this.generateFinalRoleMapping()\n }\n } else {\n this.generateFinalRoleMapping()\n console.log('No changes detected.');\n }\n\n }\n\n\n getMinistryData() {\n this.apiLoading = true\n this.sharedService.getMinistryData(this.selectedMinistryType).subscribe((data: any) => {\n console.log('data--', data)\n this.ministryFullData = data\n this.apiLoading = false\n this.ministryData = []\n if (this.selectedMinistryType === 'ministry') {\n data.forEach((item) => {\n if (item?.sbOrgType === 'ministry') {\n this.ministryData.push(item)\n }\n })\n } else if (this.selectedMinistryType === 'state') {\n data.forEach((item) => {\n if (item?.sbOrgType === 'state') {\n this.ministryData.push(item)\n }\n })\n }\n\n this.getUserProfileData()\n })\n }\n\n async onMinistryTypeChange(event) {\n console.log('event', event)\n\n if (this.login) {\n await this.getMinistryData()\n }\n\n \n\n this.sharedService.cbpPlanFinalObj['ministryType'] = event.value\n this.sharedService.cbpPlanFinalObj['role_mapping_generation'] = []\n this.selectedMinistryType = event.value\n\n localStorage.setItem('cbpPlanFinalObj', JSON.stringify(this.sharedService.cbpPlanFinalObj))\n this.ministryData = []\n if (event?.value === 'state') {\n this.roleMappingForm.get('ministry')?.setValue(null);\n this.roleMappingForm.get('sectors')?.setValue([]);\n this.roleMappingForm.get('departments')?.setValue([]);\n this.ministryFullData.forEach((item) => {\n if (item?.type === 'state') {\n this.ministryData.push(item)\n }\n })\n } else if (event?.value === 'ministry') {\n this.roleMappingForm.get('ministry')?.setValue(null);\n this.roleMappingForm.get('sectors')?.setValue([]);\n this.roleMappingForm.get('departments')?.setValue([]);\n this.ministryFullData.forEach((item) => {\n if (item?.type === 'central') {\n this.ministryData.push(item)\n }\n })\n }\n \n this.sharedService.cbpPlanFinalObj['ministry'] = ''\n this.sharedService.cbpPlanFinalObj['department_name'] = ''\n this.sharedService.cbpPlanFinalObj['departments'] = ''\n localStorage.setItem('cbpPlanFinalObj', JSON.stringify(this.sharedService.cbpPlanFinalObj))\n // this.roleMappingForm.reset()\n if (!this.sharedService.cbpPlanFinalObj?.ministry) {\n this.roleMappingForm.setErrors({ invalid: true });\n setTimeout(() => {\n this.roleMappingForm.updateValueAndValidity();\n this.disableUploadDocument = true\n this.disableUploadDocumentOriginal = true\n }, 5000)\n }\n }\n\n onMinistryChange(event: any) {\n const selectedMinistryId = event.value;\n console.log('Selected Ministry ID:', selectedMinistryId);\n this.departmentData = []\n // You can access the selected object if needed\n const selectedMinistry = this.ministryData.find(item => item.identifier === selectedMinistryId);\n this.selectedMinistryObj = selectedMinistry\n console.log('Selected Ministry:', selectedMinistry); ``\n this.sharedService.cbpPlanFinalObj['ministry'] = selectedMinistry\n this.sharedService.cbpPlanFinalObj['role_mapping_generation'] = []\n localStorage.setItem('cbpPlanFinalObj', JSON.stringify(this.sharedService.cbpPlanFinalObj))\n if (selectedMinistryId && this.selectedMinistryType === 'state') {\n this.sharedService.getDepartmentList(selectedMinistryId).subscribe((res) => {\n this.departmentData = res\n this.filteredDepartmentList = res\n })\n }\n if (selectedMinistryId && this.selectedMinistryType === 'ministry') {\n this.sharedService.getCenterBasedDepartment(selectedMinistryId).subscribe((res) => {\n if (res?.length) {\n this.departmentData = res\n this.filteredDepartmentList = res\n } else {\n this.snackBar.open('No Department Found for Selected Ministry', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n this.sharedService.cbpPlanFinalObj['department_name'] = ''\n this.sharedService.cbpPlanFinalObj['departments'] = ''\n localStorage.setItem('cbpPlanFinalObj', JSON.stringify(this.sharedService.cbpPlanFinalObj))\n }\n\n })\n }\n\n this.getUploadedDocuments()\n }\n\n searchData() {\n\n }\n\n applyFilter() {\n\n }\n\n downloadPDF() {\n const element = this.pdfContent.nativeElement;\n\n const options = {\n margin: 0.5,\n filename: 'CBP_Plan.pdf',\n image: { type: 'jpeg', quality: 0.98 },\n html2canvas: {\n scale: 2,\n useCORS: true, // Important for external images/icons\n },\n jsPDF: {\n unit: 'in',\n format: 'a4',\n orientation: 'portrait'\n }\n };\n\n html2pdf().from(element).set(options).save();\n\n }\n\n onFileChange(event: any) {\n const files: FileList = event.target.files;\n const maxFiles = 3;\n const control = this.roleMappingForm.get('additional_document');\n\n // Always clear control first (prevents old valid value)\n control?.reset();\n control?.setErrors(null);\n this.uploadedFile = [];\n this.uploadError = null;\n\n if (!files || files.length === 0) return;\n\n // Limit check\n if (files.length > maxFiles) {\n this.uploadError = `You can upload a maximum of ${maxFiles} files`;\n control?.setErrors({ maxFiles: true });\n control?.markAsDirty();\n control?.markAsTouched();\n control?.updateValueAndValidity();\n return;\n }\n\n const validFiles: File[] = [];\n const invalidFiles: string[] = [];\n const maxBytes = this.maxFileSizeMB * 1024 * 1024;\n\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n\n // Size check\n if (file.size > maxBytes) {\n invalidFiles.push(`${file.name} (exceeds ${this.maxFileSizeMB}MB)`);\n continue;\n }\n\n // Type check\n if (!this.allowedTypes.includes(file.type)) {\n invalidFiles.push(`${file.name} (invalid type)`);\n continue;\n }\n\n validFiles.push(file);\n }\n\n // ❌ NO valid files → form MUST BE invalid\n if (validFiles.length === 0) {\n this.uploadError = `Invalid file(s): ${invalidFiles.join(', ')}`;\n\n control?.setValue(null);\n control?.setErrors({ invalidFiles: true });\n control?.markAsDirty();\n control?.markAsTouched();\n control?.updateValueAndValidity({ onlySelf: true, emitEvent: true });\n this.roleMappingForm.setErrors({ invalid: true });\n this.roleMappingForm.markAllAsTouched();\n setTimeout(() => {\n this.roleMappingForm.updateValueAndValidity();\n }, 5000)\n\n return;\n }\n\n // ✔ At least ONE valid file → form should be VALID\n this.uploadedFile = validFiles;\n\n if (invalidFiles.length > 0) {\n this.uploadError = `Some files were skipped: ${invalidFiles.join(', ')}`;\n }\n\n control?.setValue(validFiles);\n control?.setErrors(null);\n control?.markAsDirty();\n control?.markAsTouched();\n control?.updateValueAndValidity({ onlySelf: true, emitEvent: true });\n }\n\n\n\n\n\n\n loginStatus(event) {\n if (event) {\n this.login = true\n this.loginSuccess.emit(true)\n this.selectedMinistryType = 'ministry'\n\n this.getMinistryData()\n } else {\n this.login = false\n }\n }\n\n generateFinalRoleMapping() {\n this.apiLoading = true;\n\n if (!this.roleMappingForm.valid) {\n this.roleMappingForm.markAllAsTouched();\n return;\n }\n\n const currentFormValues = this.roleMappingForm.getRawValue();\n let formUploadData = new FormData();\n\n // Ministry selection\n const selectedMinistry = this.ministryData.find(item =>\n item.identifier === currentFormValues.ministry\n );\n\n this.selectedMinistryObj = selectedMinistry;\n\n // Append base fields\n formUploadData.append('state_center_id', currentFormValues.ministry || '');\n formUploadData.append('state_center_name', selectedMinistry?.orgName || '');\n\n if (currentFormValues.departments) {\n formUploadData.append('department_id', currentFormValues.departments);\n }\n\n if (currentFormValues.additionalDetails) {\n formUploadData.append('instruction', currentFormValues.additionalDetails);\n }\n\n // Get uploaded file(s)\n const files: File | File[] =\n this.uploadedFile || this.roleMappingForm.get('additional_document')?.value;\n\n console.log('Files selected:', files);\n\n // Append single or multiple files\n if (files) {\n if (Array.isArray(files)) {\n files.forEach((file: File) => {\n formUploadData.append('additional_document', file, file.name);\n });\n } else {\n formUploadData.append('additional_document', files, files.name);\n }\n }\n\n // Debug: print FormData\n console.log(\"FormData Debug:\");\n formUploadData.forEach((value, key) => {\n if (value instanceof File) {\n console.log(`${key}: FILE -> ${value.name} (${value.size} bytes)`);\n } else {\n console.log(`${key}: ${value}`);\n }\n });\n\n\n // Build request body for polling API\n let req: any = {\n state_center_id: currentFormValues.ministry,\n instruction: currentFormValues.additionalDetails,\n state_center_name: selectedMinistry?.orgName\n };\n\n if (this.selectedMinistryType === 'state' || currentFormValues.departments) {\n const departmentName = this.departmentData.find(\n d => d.identifier === currentFormValues.departments\n );\n\n req.department_id = currentFormValues.departments || '';\n req.department_name = departmentName?.orgName || '';\n }\n\n\n\n // Polling API\n concat(\n of(null), // 🔥 immediate first emission\n interval(5000) // ⏱ subsequent polling every 5s\n )\n .pipe(\n takeUntil(this.destroy$),\n switchMap(() => this.sharedService.generateRoleMapping(req, files)),\n tap(data => {\n if (!this.firstApiResponse) {\n this.firstApiResponse = data; // 👈 store first response\n console.log('First API response:', this.firstApiResponse);\n } else {\n this.loading = true\n }\n }),\n takeWhile((data: any) => data?.status !== 'COMPLETED', true)\n )\n .subscribe(data => {\n console.log('role mapping data--', data)\n if (this.firstApiResponse?.is_existing) {\n this.apiLoading = false;\n this.destroy$.next(); // 🛑 stop polling\n this.destroy$.complete();\n const dialogRef = this.dialog.open(DeleteRoleMappingPopupComponent, {\n width: '400px',\n data: '',\n panelClass: 'view-cbp-plan-popup',\n minHeight: '300px', // Set minimum height\n maxHeight: '80vh', // Prevent it from going beyond viewport\n disableClose: true // Optional: prevent closing with outside click\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result === 'saved') {\n console.log('Changes saved!');\n\n this.loading = true\n this.sharedService.deleteRoleMappingByStateAndDepartment(this.roleMappingForm.value.ministry, this.roleMappingForm.value.departments).subscribe({\n next: (res) => {\n // Success handling\n console.log('Success:', res);\n this.loading = false\n this.firstApiResponse = []\n this.generateFinalRoleMapping()\n },\n error: (error) => {\n this.snackBar.open(error?.error?.detail, 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n this.firstApiResponse = []\n this.loading = false\n // this.generateFinalRoleMapping()\n }\n });\n } else if (result === 'button') {\n this.loading = false\n // this.generateFinalRoleMapping()\n // this.router.navigate(['/']);\n const currentUrl = this.router.url;\n\n // this.router.navigateByUrl('/', { skipLocationChange: true }).then(() => {\n // this.router.navigateByUrl(currentUrl);\n // });\n this.sharedService.cbpPlanFinalObj['role_mapping_generation'] =\n data?.role_mappings;\n\n localStorage.setItem(\n 'cbpPlanFinalObj',\n JSON.stringify(this.sharedService.cbpPlanFinalObj)\n );\n\n this.successRoleMapping.emit(this.roleMappingForm);\n this.router.navigate(['/ai/list'], {\n onSameUrlNavigation: 'reload'\n });\n // window.location.reload()\n\n } else {\n this.loading = false\n }\n });\n }\n else if (data?.status === 'COMPLETED') {\n \n this.loading = false;\n\n this.sharedService.cbpPlanFinalObj['role_mapping_generation'] =\n data?.role_mappings;\n\n localStorage.setItem(\n 'cbpPlanFinalObj',\n JSON.stringify(this.sharedService.cbpPlanFinalObj)\n );\n\n this.successRoleMapping.emit(this.roleMappingForm);\n\n this.snackBar.open('CBP Plan generated successfully!', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n\n this.router.navigate(['/ai/']);\n }\n });\n }\n\n\n generateFinalRoleMappingWithStream() {\n this.loading = true;\n console.log('roleMappingForm', this.roleMappingForm)\n if (this.roleMappingForm.valid) {\n const formData = this.roleMappingForm.value;\n const currentFormValues = this.roleMappingForm.getRawValue();\n let formUploadData: any = new FormData();\n\n // formUploadData.append('ministryType', currentFormValues.ministryType);\n // formUploadData.append('ministry', currentFormValues.ministry);\n // formUploadData.append('sectors', JSON.stringify(currentFormValues.sectors));\n // formUploadData.append('departments', JSON.stringify(currentFormValues.departments));\n formUploadData.append('state_center_id', currentFormValues.ministry || '');\n formUploadData.append('state_center_name', currentFormValues.ministry || '');\n\n if (currentFormValues.departments) {\n formUploadData.append('department_id', currentFormValues.departments || '');\n }\n if (currentFormValues.additionalDetails) {\n formUploadData.append('instruction', currentFormValues.additionalDetails || '');\n }\n const file: File = this.uploadedFile || this.roleMappingForm.get('additional_document')?.value;\n console.log('file', file)\n if (file) {\n formUploadData.append('additional_document', file);\n }\n console.log('this.roleMappingForm', this.roleMappingForm)\n console.log('formUploadData--', formUploadData)\n for (const pair of formUploadData.entries()) {\n console.log(`${pair[0]}:`, pair[1]);\n }\n console.log('Form submitted:', formData);\n let sectors = Array.isArray(formData.sectors) ? formData.sectors.join(', ') : ''\n this.sharedService.cbpPlanFinalObj['sectors'] = formData.sectors\n // Submit logic here\n let req = {\n \"state_center_id\": formData.ministry,\n \"instruction\": formData.additionalDetails\n }\n if (this.selectedMinistryType === 'state' || formData.departments) {\n req['department_id'] = formData.departments ? formData.departments : ''\n this.sharedService.cbpPlanFinalObj['departments'] = formData.departments ? formData.departments : ''\n\n\n const departmentName = this.departmentData.find(u => u.identifier === formData.departments);\n this.sharedService.cbpPlanFinalObj['department_name'] = departmentName\n this.sharedService.cbpPlanFinalObj['additionalDetails'] = formData.additionalDetails\n console.log(departmentName);\n\n }\n this.sharedService.cbpPlanFinalObj['ministryType'] = this.selectedMinistryType\n\n if (req) {\n this.chunks = [];\n this.fullJson = '';\n this.parsedData = null;\n this.currentProcessingStage = this.processingStages[0];\n this.roleMappingService.generateRoleMapping(\n req,\n this.uploadedFile || null,\n (chunk) => {\n this.chunks.push(chunk)\n console.log('Received chunk:', chunk, 'Total chunks:', this.chunks.length)\n\n // Update processing stage based on chunk count\n this.updateProcessingStage();\n\n // Trigger change detection to update the UI\n setTimeout(() => { }, 0);\n },\n () => {\n console.log('Stream started')\n this.currentProcessingStage = this.processingStages[0];\n },\n () => this.onStreamEnd(),\n (err) => {\n console.error('Stream failed:', err)\n this.handleStreamError(err);\n }\n );\n }\n\n localStorage.setItem('cbpPlanFinalObj', JSON.stringify(this.sharedService.cbpPlanFinalObj))\n\n } else {\n this.roleMappingForm.markAllAsTouched();\n }\n }\n\n updateProcessingStage() {\n const chunkCount = this.chunks.length;\n let stageIndex = 0;\n\n // Much slower stage progression - stages stay much longer\n if (chunkCount <= 8) {\n stageIndex = 0; // Initializing - stays for first 8 chunks\n } else if (chunkCount <= 20) {\n stageIndex = 1; // Analyzing competency requirements - 12 chunks\n } else if (chunkCount <= 35) {\n stageIndex = 2; // Processing work order - 15 chunks\n } else if (chunkCount <= 55) {\n stageIndex = 3; // Generating role mappings - 20 chunks\n } else if (chunkCount <= 75) {\n stageIndex = 4; // Computing final recommendations - 20 chunks\n } else {\n stageIndex = 5; // Finalizing CBP Plan - 75+ chunks\n }\n\n this.currentProcessingStage = this.processingStages[stageIndex];\n }\n\n getProgressPercentage(): number {\n const chunkCount = this.chunks.length;\n if (chunkCount === 0) return 0;\n\n // Much slower and smoother progress calculation\n let percentage = 0;\n\n if (chunkCount <= 15) {\n // First 15 chunks = 0-25% (very slow start)\n percentage = (chunkCount / 15) * 25;\n } else if (chunkCount <= 35) {\n // Next 20 chunks = 25-50% (slow early progress)\n percentage = 25 + ((chunkCount - 15) / 20) * 25;\n } else if (chunkCount <= 60) {\n // Next 25 chunks = 50-75% (steady middle progress)\n percentage = 50 + ((chunkCount - 35) / 25) * 25;\n } else if (chunkCount <= 100) {\n // Next 40 chunks = 75-90% (slower final approach)\n percentage = 75 + ((chunkCount - 60) / 40) * 15;\n } else {\n // Beyond 100 chunks = 90-95% (very slow final progression)\n percentage = 90 + Math.min(((chunkCount - 100) / 50) * 5, 5);\n }\n\n return Math.round(percentage);\n }\n\n onStreamEnd() {\n this.currentProcessingStage = 'Completing CBP Plan generation...';\n\n // Show 100% completion briefly before finishing\n setTimeout(() => {\n this.fullJson = this.chunks.join('');\n const cleaned = this.fullJson.replace(/^```json\\n/, '').replace(/```$/, '');\n try {\n this.parsedData = JSON.parse(cleaned);\n console.log('Parsed data:', this.parsedData);\n\n // Handle successful completion\n this.loading = false;\n this.sharedService.cbpPlanFinalObj['role_mapping_generation'] = this.parsedData;\n this.successRoleMapping.emit(this.roleMappingForm);\n\n this.snackBar.open('CBP Plan generated successfully!', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n } catch (e) {\n console.error('JSON parse error:', e);\n this.loading = false;\n this.snackBar.open('Failed to generate CBP Plan. Please try again.', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n }, 500);\n }\n\n // Helper method to get progress percentage including completion state\n getDisplayProgressPercentage(): number {\n if (this.currentProcessingStage === 'Completing CBP Plan generation...') {\n return 100;\n }\n return this.getProgressPercentage();\n }\n\n // Handle streaming errors, especially \"Role mapping already exists\"\n handleStreamError(err: any) {\n console.log('Error details:', err);\n\n // Check if this is the \"Role mapping already exists\" error\n if (err?.isExistingRoleMapping || (err?.detail && err.detail.includes('Role mapping already exists'))) {\n this.currentProcessingStage = 'Loading existing role mapping...';\n\n // Call the appropriate Get role mapping API based on ministry type\n const formData = this.roleMappingForm.value;\n const stateCenter = formData.ministry;\n const departmentId = formData.departments;\n\n if (this.selectedMinistryType === 'state' && departmentId) {\n // Call Get role mapping by state center and department\n this.sharedService.getRoleMappingByStateCenterAndDepartment(stateCenter, departmentId).subscribe({\n next: (res) => {\n console.log('Existing role mapping loaded:', res);\n this.loading = false;\n this.sharedService.cbpPlanFinalObj['role_mapping_generation'] = res;\n this.snackBar.open('Existing role mapping loaded successfully!', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n this.alreadyAvailableRoleMapping.emit(this.roleMappingForm);\n },\n error: (error) => {\n console.error('Failed to load existing role mapping:', error);\n this.loading = false;\n this.snackBar.open('Failed to load existing role mapping. Please try again.', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n });\n } else {\n // Call Get role mapping by state center only\n this.sharedService.getRoleMappingByStateCenter(stateCenter).subscribe({\n next: (res) => {\n console.log('Existing role mapping loaded:', res);\n this.loading = false;\n this.sharedService.cbpPlanFinalObj['role_mapping_generation'] = res;\n this.snackBar.open('Existing role mapping loaded successfully!', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n this.alreadyAvailableRoleMapping.emit(this.roleMappingForm);\n },\n error: (error) => {\n console.error('Failed to load existing role mapping:', error);\n this.loading = false;\n this.snackBar.open('Failed to load existing role mapping. Please try again.', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n });\n }\n } else {\n // Handle other streaming errors\n this.loading = false;\n const errorMessage = err?.detail || 'Stream failed. Please try again.';\n this.snackBar.open(errorMessage, 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n }\n removeFile(index: number): void {\n if (!this.uploadedFile || this.uploadedFile.length === 0) return;\n\n // Remove one file at the given index\n this.uploadedFile.splice(index, 1);\n\n // Update form control value\n this.roleMappingForm.get('additional_document')?.setValue(this.uploadedFile);\n this.roleMappingForm.get('additional_document')?.updateValueAndValidity();\n\n // Clear errors if no files left\n if (this.uploadedFile.length === 0) {\n this.uploadError = '';\n const input = document.getElementById('uploadDoc') as HTMLInputElement;\n if (input) input.value = '';\n }\n }\n\n\n getUserProfileData() {\n this.sharedService.getUserProfile().subscribe((data) => {\n console.log('data--', data)\n localStorage.setItem('userProfile', JSON.stringify(data))\n this.loginUserOrgIds = data?.organization_ids\n let filteredMinistryData = []\n this.ministryFullData.map((item) => {\n if (this.loginUserOrgIds.indexOf(item?.identifier) > -1) {\n filteredMinistryData.push(item)\n }\n })\n\n this.ministryData = filteredMinistryData\n this.originalMinistryData = filteredMinistryData\n this.filteredList = filteredMinistryData;\n })\n }\n\n onOpened(opened: boolean) {\n this.panelOpen = opened;\n }\n\n onOpenedDepartment(opened: boolean) {\n this.departmentPanelOpen = opened\n }\n\n filterData(event) {\n if (event && event.target && event.target.value) {\n const s = event.target.value.toLowerCase();\n\n this.filteredList = this.ministryData.filter(x =>\n x.orgName.toLowerCase().includes(s)\n );\n } else {\n this.filteredList = this.ministryData\n }\n\n }\n\n filterDepartmentData(event) {\n if (event && event.target && event.target.value) {\n const s = event.target.value.toLowerCase();\n\n this.filteredDepartmentList = this.departmentData.filter(x =>\n x.orgName.toLowerCase().includes(s)\n );\n } else {\n this.filteredDepartmentList = this.departmentData\n }\n\n }\n\n ngOnDestroy() {\n this.selectedMinistryId = ''\n this.roleMappingForm.reset()\n }\n\n onDepartmentChange() {\n const formData = this.roleMappingForm.value;\n\n this.sharedService.cbpPlanFinalObj['departments'] = formData.departments ? formData.departments : ''\n this.cbpFinalObj = this.sharedService.getCBPPlanLocalStorage()\n if (this.cbpFinalObj && this.cbpFinalObj?.ministry && this.cbpFinalObj?.ministry?.sbOrgType) {\n this.cbpFinalObj['departments'] = formData.departments ? formData.departments : ''\n }\n\n const selectedMinistry = this.ministryData.find(item => item.identifier === formData.ministry);\n\n\n this.sharedService.cbpPlanFinalObj['ministry'] = selectedMinistry\n\n const departmentName = this.departmentData.find(u => u.identifier === formData.departments);\n this.sharedService.cbpPlanFinalObj['department_name'] = departmentName?.orgName\n localStorage.setItem('cbpPlanFinalObj', JSON.stringify(this.sharedService.cbpPlanFinalObj))\n this.getUploadedDocuments()\n }\n\n goToUploadDocument() {\n \n this.router.navigate(['/ai/upload-documents']);\n \n }\n\n\n\n}\n\n\n\n","<div class=\"container\">\n <!-- <input class=\"btn-active\" type=\"button\" value=\"Download as PDF\" (click)=\"downloadPDF()\" /> -->\n <div class=\"logo-container\" *ngIf=\"login\">\n <div>\n <span class=\"ai-loader-icon-medium\"><img src=\"assets/icons/ai-loader.gif\"></span>\n </div>\n <div>\n <h2 class=\"highlight-ai\">\n <span>iGOT AI Driven CBP</span>\n </h2>\n </div>\n <!-- <div class=\"sub-heading\">\n <p>Build Your Capacity With Customized Role Mapping</p>\n </div> -->\n </div>\n <mat-card *ngIf=\"login\" class=\"mt-2\" [formGroup]=\"roleMappingForm\">\n <div class=\"depatment-container\">\n<!-- <div class=\"section-header\">-->\n<!-- <div class=\"sub-heading\">-->\n<!-- <p>Choose Your Department</p>-->\n<!-- </div>-->\n<!-- </div>-->\n\n <div class=\"radio-group mt-4\">\n <mat-radio-group class=\"radio-btn-group\" formControlName=\"ministryType\"\n [(ngModel)]=\"selectedMinistryType\" (change)=\"onMinistryTypeChange($event)\">\n\n <!-- Left radio button -->\n <mat-radio-button value=\"ministry\" class=\"radio-btn left-radio\">\n <span class=\"radio-label\">\n <!-- <mat-icon class=\"radio-icon\" [ngClass]=\"selectedMinistryType === 'center'? 'checked-label':''\">domain</mat-icon> -->\n <span [ngClass]=\"selectedMinistryType === 'ministry'? 'checked-label':''\">Centre</span>\n </span>\n </mat-radio-button>\n\n <!-- Right radio button -->\n <mat-radio-button value=\"state\" class=\"radio-btn right-radio\">\n <span class=\"radio-label\">\n <!-- <mat-icon class=\"radio-icon\" [ngClass]=\"selectedMinistryType === 'state'? 'checked-label':''\">location_on</mat-icon> -->\n <span [ngClass]=\"selectedMinistryType === 'state'? 'checked-label':''\">State</span>\n </span>\n </mat-radio-button>\n\n </mat-radio-group>\n </div>\n <div class=\"mt-4\">\n \n <label class=\"label\">\n <span *ngIf=\"selectedMinistryType === 'ministry'\">Ministry</span>\n <span *ngIf=\"selectedMinistryType === 'state'\">State</span>\n </label>\n <div class=\"mt-2 search-box-with-select\">\n \n <mat-form-field appearance=\"fill\"\n style=\"background: white; border-radius: 25px; padding: 0 12px; border: 1px solid #ccc;width: 100%;\">\n <mat-select\n panelClass=\"select-with-search\"\n [placeholder]=\"selectedMinistryType === 'ministry' ? 'Select Ministry/ Department':'Select State'\"\n (selectionChange)=\"onMinistryChange($event)\" formControlName=\"ministry\"\n style=\"border-radius: 25px; background: white; width:100%\" \n (openedChange)=\"onOpened($event)\">\n <div class=\"search-wrapper\" *ngIf=\"panelOpen\">\n <input\n type=\"text\"\n placeholder=\"Search...\"\n (input)=\"filterData($event)\"\n class=\"search-input\"\n (keydown.space)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n </div>\n <mat-option [value]=\"item?.identifier\" *ngFor=\"let item of filteredList\" [selected]=\"selectedMinistryId === item?.identifier\">{{item?.orgName}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n <div class=\"mt-4\" *ngIf=\"departmentData?.length\">\n <label class=\"label\">Department</label>\n <div class=\"mt-2\">\n <mat-form-field appearance=\"fill\"\n style=\"background: white; border-radius: 25px; padding: 0 12px;border: 1px solid #ccc;\">\n <mat-select panelClass=\"select-with-search\" placeholder=\"Select Department\" formControlName=\"departments\"\n style=\"border-radius: 25px; background: white;\" (selectionChange)=\"onDepartmentChange()\" (openedChange)=\"onOpenedDepartment($event)\">\n <div class=\"search-wrapper\" *ngIf=\"departmentPanelOpen\">\n <input\n type=\"text\"\n placeholder=\"Search...\"\n (input)=\"filterDepartmentData($event)\"\n class=\"search-input\"\n (keydown.space)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n </div>\n <mat-option [value]=\"item?.identifier\"\n *ngFor=\"let item of filteredDepartmentList\">{{item?.orgName}}</mat-option>\n\n </mat-select>\n </mat-form-field>\n </div>\n\n </div>\n <!-- <div class=\"mt-4\">\n <label class=\"label\">Sector</label>\n <div>\n <mat-form-field appearance=\"fill\" style=\"background: white; border-radius: 25px; padding: 0 12px;\">\n <mat-select placeholder=\"Select Sector\" multiple formControlName=\"sectors\"\n style=\"border-radius: 25px; background: white;\">\n <mat-option [value]=\"item?.value\"\n *ngFor=\"let item of sectorData\">{{item?.value}}</mat-option>\n\n </mat-select>\n </mat-form-field>\n </div>\n\n </div> -->\n <!-- *ngIf=\"roleMappingForm.get('ministryType')?.value === 'state'\" -->\n <div class=\"mt-4 additional-details\">\n <textarea rows=\"5\" placeholder=\"Additional details\" formControlName=\"additionalDetails\"></textarea>\n </div>\n <div class=\"mt-4\">\n \n <button [ngClass]=\"disableUploadDocument ? 'btn-active-primary-disable':'btn-active-primary'\" class=\"\"\n [disabled]=\"disableUploadDocument\" mat-raised-button color=\"primary\"\n (click)=\"goToUploadDocument()\">\n <mat-icon>upload</mat-icon> Manage Documents\n </button>\n </div>\n <!-- *ngIf=\"roleMappingForm.get('ministryType')?.value === 'state'\" -->\n <!-- <div class=\"mt-4 section\" >\n <div class=\"sub-heading\">\n <p>Upload Document (PDF)</p>\n </div>\n <div class=\"file-upload-wrapper\">\n <label for=\"uploadDoc\" class=\"file-upload-label\">\n <span class=\"file-upload-icon\">📎</span>\n <span *ngIf=\"!uploadedFile || uploadedFile.length === 0\">\n Choose up to 3 files (PDF/TXT)\n </span>\n <div *ngIf=\"uploadedFile?.length > 0\" class=\"file-list\">\n <div *ngFor=\"let file of uploadedFile; let i = index\" class=\"file-item\">\n {{ file.name }}\n <span class=\"remove-file-icon\" (click)=\"removeFile(i);$event.preventDefault()\">\n <mat-icon>close</mat-icon>\n </span>\n </div>\n </div>\n </label>\n <input\n id=\"uploadDoc\"\n type=\"file\"\n multiple\n (change)=\"onFileChange($event)\"\n hidden\n /> \n\n <small class=\"file-upload-hint\">Max file size: {{maxFileSizeMB}}MB</small>\n\n <input id=\"uploadDoc\" multiple type=\"file\" (change)=\"onFileChange($event)\"\n accept=\".pdf,.doc,.docx,.xls,.xlsx,.txt\" class=\"file-upload-input\" />\n\n <div *ngIf=\"uploadError\" class=\"error\">{{ uploadError }}</div>\n </div>\n </div> -->\n <!-- *ngIf=\"roleMappingForm.get('ministryType')?.value === 'state'\" -->\n <!-- <div class=\"mt-2 section\">\n <div class=\"disclaimer-text\">\n <p>Disclaimer: Please do not upload any confidential documents. </p>\n </div>\n </div> -->\n <div class=\"mt-2\" *ngIf=\"documents?.length < 1 && !(roleMappingForm?.invalid)\">\n <p><span style=\"font-size: .875rem;font-weight: bold;\">Note: </span><span class=\"error\">Please Upload atleast 1 Document.</span></p>\n </div>\n <div class=\"mt-4\" >\n <input [disabled]=\"roleMappingForm?.invalid || (roleMappingForm.get('ministryType')?.value === 'state' && !roleMappingForm.get('departments')?.value) || loading || documents?.length < 1\"\n [ngClass]=\"roleMappingForm?.invalid || (roleMappingForm.get('ministryType')?.value === 'state' && !roleMappingForm.get('departments')?.value) || loading || documents?.length < 1 ? 'btn-disable':'btn-active'\" \n type=\"button\" \n [value]=\"loading ? 'Generating CBP...' : 'Generate CBP'\"\n (click)=\"onGenerateRoleMapping()\" />\n </div>\n </div>\n </mat-card>\n \n</div>\n<div *ngIf=\"!login\">\n <app-login (success)=\"loginStatus($event)\"></app-login>\n </div>\n\n<div class=\"overlay-loader\" *ngIf=\"apiLoading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>\n\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <div class=\"loading-content\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n <div class=\"loading-text mt-3\">\n <p class=\"main-message\">{{ currentProcessingStage || 'Preparing CBP Plan generation...' }}</p>\n <div class=\"progress-details\">\n <div class=\"progress-indicator\" *ngIf=\"chunks.length > 0\">\n <div class=\"progress-bar-container\">\n <div class=\"progress-bar\" \n [style.width.%]=\"getDisplayProgressPercentage()\">\n </div>\n </div>\n <small class=\"progress-text\">{{ getDisplayProgressPercentage() }}% Complete</small>\n </div>\n <small class=\"time-estimate\">\n Real-time streaming in progress. This may take 2-3 minutes.\n </small>\n </div>\n </div>\n </div>\n</div>\n","import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ChangeDetectorRef, Component, ElementRef, Inject, OnInit, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup, FormArray, Validators, FormControl } from '@angular/forms';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { HttpClient } from '@angular/common/http';\nimport { finalize } from 'rxjs/operators';\nimport _ from 'lodash'\nimport { SharedService } from '../../modules/shared/services/shared.service';\n@Component({\n selector: 'app-edit-cbp-plan',\n templateUrl: './edit-cbp-plan.component.html',\n styleUrls: ['./edit-cbp-plan.component.scss']\n})\nexport class EditCbpPlanComponent implements OnInit{\n\n selectedValue = ''\n searchText = ''\n planData:any\n competenciesCount = {total:0, behavioral:0, functional:0, domain:0}\n cbpForm: FormGroup;\n loading= false\n \n // Enhanced competency selection properties\n competenciesData: any[] = [];\n availableThemes: any[] = [];\n availableSubThemes: any[] = [];\n filteredThemes: any[] = [];\n filteredSubThemes: string[] = [];\n selectedCompetencyType = '';\n selectedTheme = '';\n selectedSubTheme = '';\n manualTheme = '';\n manualSubTheme = '';\n themeSearchText = '';\n subThemeSearchText = '';\n editDomainCompetencyFlag = false\n editCompetencyIndex = -1\n originalCompetencyValueArr:any = []\n desigantionFilterEnable = false\n isLoadingMoreDesignations = false;\n designationOffset = 0\n odcsDesignationCount = 0\n defaultSearchDesignationCount = 0\n designationListLoadCount = 50\n designationDefaultLoadCount = 50\n noMoreLegacyDesignations = false\n designationSearchText = ''\n designationInitInProgress = false\n scrollListenerAttached = false\n @ViewChild('dialogContent') dialogContent!: ElementRef;\n @ViewChild('designation', { read: ElementRef }) designationRef?: ElementRef\n masterData: any = {}\n constructor(\n public dialogRef: MatDialogRef<EditCbpPlanComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private fb: FormBuilder,\n private cdRef: ChangeDetectorRef,\n private sharedService:SharedService,\n private snackBar: MatSnackBar,\n private http: HttpClient\n ) {\n this.planData = data\n console.log('Received data:', data);\n // this.planData.competencies.map((competencies:any)=>{\n // this.competenciesCount['total'] = this.competenciesCount['total'] + 1 \n // if(competencies.type === 'Behavioral') {\n // this.competenciesCount['behavioral'] = this.competenciesCount['behavioral'] +1\n // }\n // if(competencies.type === 'Functional') {\n // this.competenciesCount['functional'] = this.competenciesCount['functional'] +1\n // }\n // if(competencies.type === 'Domain') {\n // this.competenciesCount['domain'] = this.competenciesCount['domain'] +1\n // }\n // })\n }\n\n\n ngOnInit() {\n this.loadCompetenciesData();\n this.initializeForm();\n this.updateCompetencyCounts()\n }\n\n loadCompetenciesData() {\n this.sharedService.getCompetencyJson().subscribe({\n next: (data) => {\n this.competenciesData = data;\n console.log('Competencies data loaded:', this.competenciesData);\n },\n error: (error) => {\n console.error('Error loading competencies data:', error);\n }\n });\n }\n\n updateCompetencyCounts() {\n const comps = this.competenciesArray.value;\n this.competenciesCount = {total: 0, behavioral: 0, functional: 0, domain: 0};\n comps.forEach(c => {\n this.competenciesCount.total++;\n if (c.type.toLowerCase() === 'behavioral') this.competenciesCount.behavioral++;\n if (c.type.toLowerCase() === 'functional') this.competenciesCount.functional++;\n if (c.type.toLowerCase() === 'domain') this.competenciesCount.domain++;\n });\n }\n\n initializeForm() {\n this.cbpForm = this.fb.group({\n designation_name: [this.planData?.designation_name || '', Validators.required],\n wing_division_section: [this.planData?.wing_division_section || '', Validators.required],\n role_responsibilities_text: [this.planData?.role_responsibilities?.join('\\n') || ''],\n activities_text: [this.planData?.activities?.join('\\n') || ''],\n competencySearchText: [''],\n competencyType: [''],\n competencyTheme: [''],\n competencySubTheme: [''],\n manualThemeInput: [''],\n manualSubThemeInput: [''],\n themeSearch: [''],\n subThemeSearch: [''],\n competencies: this.fb.array(this.planData?.competencies || []), // optional customization,\n searchDesignation: ['']\n });\n\n if (!this.masterData['designationBackup']) {\n this.getDesignationSafe()\n }\n }\n\n private getDesignationSafe(): void {\n if (this.designationInitInProgress || this.isLoadingMoreDesignations) {\n return\n }\n this.designationInitInProgress = true\n this.getDesignation()\n }\n\n\n get roleResponsibilities(): FormArray {\n return this.cbpForm.get('role_responsibilities') as FormArray;\n }\n\n searchData() {\n\n }\n\n applyFilter() {\n \n }\n\n getCompetenciesByType(type: string): any[] {\n return (this.cbpForm?.get('competencies')?.value || []).filter(c => c.type === type);\n }\n\n closeDialog() {\n this.dialogRef.close(); \n }\n\n saveRoleMapping() {\n if (this.cbpForm.invalid) return;\n\n const formData = this.cbpForm.value;\n console.log('Submitted Data:', formData);\n let cbpPlanData:any = this.sharedService.cbpPlanFinalObj;\n console.log('cbpPlanData',cbpPlanData)\n const roleResponsibilitiesArray = this.cbpForm.value.role_responsibilities_text\n .split('\\n')\n .map(line => line.trim())\n .filter(line => line); \n const activities = this.cbpForm.value.activities_text\n .split('\\n')\n .map(line => line.trim())\n .filter(line => line); \n this.loading = true\n let req = \n {\n \"sector_name\":cbpPlanData?.sectors?.join(\",\"),\n \"instruction\": cbpPlanData?.instruction ? cbpPlanData.instruction:'',\n \"designation_name\": formData?.designation_name ? formData.designation_name : '',\n \"wing_division_section\": formData?.wing_division_section,\n \"role_responsibilities\":roleResponsibilitiesArray,\n \"activities\": activities,\n \"competencies\": formData.competencies\n }\n let role_mapping_id = this.planData.id\n \n this.sharedService.updateRoleMapping(role_mapping_id,req).subscribe({\n next: (res) => {\n // Success handling\n console.log('Success:', res);\n this.loading = false\n this.dialogRef.close('saved')\n this.snackBar.open('Role Mapping Saved Successfully', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n //this.successRoleMapping.emit(this.roleMappingForm)\n },\n error: (error) => {\n console.log('error', error)\n this.dialogRef.close()\n // Handle 409 Conflict here\n // alert('Conflict detected: The resource already exists or action conflicts.');\n //this.get\n // Or you can set a UI error message variable\n this.snackBar.open(error?.error?.detail, 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n this.loading = false\n //this.alreadyAvailableRoleMapping.emit(this.roleMappingForm)\n }\n });\n }\n\n cancelForm() {\n // Mark all controls as pristine and untouched without changing the values\n this.cbpForm.markAsPristine();\n this.cbpForm.markAsUntouched();\n // this.competenciesArray.value = this.originalCompetencyValueArr\n // console.log('this.competenciesArray',this.competenciesArray)\n // Also, if you want to mark all child controls (FormControls / FormArrays / FormGroups) as pristine and untouched\n this.markFormGroupPristineUntouched(this.cbpForm);\n // if(this.editCompetencyIndex > -1) {\n // this.competenciesArray.value[this.editCompetencyIndex]['type'] = this.originalCompetencyValueArr[this.editCompetencyIndex]['type']\n // this.competenciesArray.value[this.editCompetencyIndex]['theme'] = this.originalCompetencyValueArr[this.editCompetencyIndex]['theme']\n // this.competenciesArray.value[this.editCompetencyIndex]['sub_theme'] = this.originalCompetencyValueArr[this.editCompetencyIndex]['sub_theme']\n // }\n this.dialogRef.close()\n }\n \n private markFormGroupPristineUntouched(formGroup: FormGroup | FormArray) {\n Object.keys(formGroup.controls).forEach(key => {\n const control = formGroup.controls[key];\n if (control instanceof FormControl) {\n control.markAsPristine();\n control.markAsUntouched();\n } else if (control instanceof FormGroup || control instanceof FormArray) {\n this.markFormGroupPristineUntouched(control);\n }\n });\n }\n\n get competenciesArray(): any {\n return this.cbpForm.get('competencies') as FormArray;\n }\n\n onCompetencyTypeChange(type: string) {\n this.selectedCompetencyType = type;\n this.selectedTheme = '';\n this.selectedSubTheme = '';\n this.manualTheme = '';\n this.manualSubTheme = '';\n this.availableThemes = [];\n this.availableSubThemes = [];\n this.filteredThemes = [];\n this.filteredSubThemes = [];\n this.themeSearchText = '';\n this.subThemeSearchText = '';\n \n // Reset form controls\n this.cbpForm.patchValue({\n competencyTheme: '',\n competencySubTheme: '',\n manualThemeInput: '',\n manualSubThemeInput: '',\n themeSearch: '',\n subThemeSearch: ''\n });\n \n if (type === 'Behavioral' || type === 'Functional') {\n // Load themes from JSON for Behavioral and Functional\n const competencyCategory = this.competenciesData.find(cat => \n cat.name.toLowerCase() === type.toLowerCase() || \n (type === 'Behavioral' && cat.name === 'Behavioural')\n );\n \n if (competencyCategory) {\n this.availableThemes = competencyCategory.competency_theme || [];\n this.filteredThemes = [...this.availableThemes];\n }\n }\n // For Domain, no themes are loaded - user will enter manually\n }\n \n onThemeChange(themeName: string) {\n this.selectedTheme = themeName;\n this.selectedSubTheme = '';\n this.availableSubThemes = [];\n this.filteredSubThemes = [];\n this.subThemeSearchText = '';\n \n this.cbpForm.patchValue({\n competencySubTheme: '',\n subThemeSearch: ''\n });\n \n // Find the selected theme and load its sub-themes\n const selectedThemeObj = this.availableThemes.find(theme => theme.name === themeName);\n if (selectedThemeObj) {\n this.availableSubThemes = selectedThemeObj.competency_sub_theme || [];\n this.filteredSubThemes = [...this.availableSubThemes];\n }\n }\n \n onSubThemeChange(subThemeName: string) {\n this.selectedSubTheme = subThemeName;\n }\n \n addCompetency() {\n let type = this.selectedCompetencyType;\n let theme = '';\n let subTheme = '';\n \n if (type === 'Domain') {\n // For Domain, use manual input\n theme = this.cbpForm.value.manualThemeInput?.trim();\n subTheme = this.cbpForm.value.manualSubThemeInput?.trim();\n } else {\n // For Behavioral/Functional, use dropdown selections\n theme = this.selectedTheme;\n subTheme = this.selectedSubTheme;\n }\n \n if (type && theme && subTheme) {\n const exists = this.competenciesArray.value.some(c => \n c.theme === theme && c.sub_theme === subTheme && c.type === type\n );\n \n if (!exists) {\n const newComp = this.fb.group({\n type: [type],\n theme: [theme],\n sub_theme: [subTheme]\n });\n this.competenciesArray.push(newComp);\n }\n \n // Clear input fields after adding\n this.resetCompetencyForm();\n }\n \n const currentValues = this.competenciesArray.value;\n this.cbpForm.patchValue({ competencies: [...currentValues] });\n \n this.updateCompetencyCounts();\n this.cdRef.detectChanges();\n console.log(this.cbpForm?.get('competencies')?.value);\n }\n \n resetCompetencyForm() {\n this.selectedCompetencyType = '';\n this.selectedTheme = '';\n this.selectedSubTheme = '';\n this.manualTheme = '';\n this.manualSubTheme = '';\n this.availableThemes = [];\n this.availableSubThemes = [];\n this.filteredThemes = [];\n this.filteredSubThemes = [];\n this.themeSearchText = '';\n this.subThemeSearchText = '';\n \n this.cbpForm.patchValue({\n competencyType: '',\n competencyTheme: '',\n competencySubTheme: '',\n manualThemeInput: '',\n manualSubThemeInput: '',\n themeSearch: '',\n subThemeSearch: ''\n });\n }\n \n filterThemes(searchText: string) {\n this.themeSearchText = searchText;\n if (!searchText.trim()) {\n this.filteredThemes = [...this.availableThemes];\n } else {\n this.filteredThemes = this.availableThemes.filter(theme => \n theme.name.toLowerCase().includes(searchText.toLowerCase())\n );\n }\n }\n \n filterSubThemes(searchText: string) {\n this.subThemeSearchText = searchText;\n if (!searchText.trim()) {\n this.filteredSubThemes = [...this.availableSubThemes];\n } else {\n this.filteredSubThemes = this.availableSubThemes.filter(subTheme => \n subTheme.toLowerCase().includes(searchText.toLowerCase())\n );\n }\n }\n \n canAddCompetency(): boolean {\n if (!this.selectedCompetencyType) return false;\n \n if (this.selectedCompetencyType === 'Domain') {\n const theme = this.cbpForm.value.manualThemeInput?.trim();\n const subTheme = this.cbpForm.value.manualSubThemeInput?.trim();\n return !!(theme && subTheme);\n } else {\n return !!(this.selectedTheme && this.selectedSubTheme);\n }\n }\n\n deleteCompetency(comp) {\n const index = this.competenciesArray.controls.findIndex(\n control => control.value.theme === comp.theme && control.value.type === comp.type\n );\n \n if (index !== -1) {\n this.competenciesArray.removeAt(index);\n }\n this.updateCompetencyCounts();\n this.cdRef.detectChanges();\n }\n\n editCompetency(comp) {\n this.editDomainCompetencyFlag = true\n this.editCompetencyIndex = -1\n this.cbpForm.patchValue({\n competencyType: 'Domain',\n manualThemeInput: comp?.theme,\n manualSubThemeInput: comp?.sub_theme\n });\n const index = this.competenciesArray.value.findIndex(c => \n c.theme === comp?.theme &&\n c.sub_theme === comp?.sub_theme &&\n c.type === \"Domain\"\n );\n if(index > -1) {\n this.editCompetencyIndex = index\n }\n this.selectedCompetencyType = 'Domain'\n setTimeout(() => {\n this.dialogContent.nativeElement.scrollTo({\n top: 0,\n behavior: 'smooth'\n });\n }, 500)\n }\n\n cancelUpdate() {\n this.editDomainCompetencyFlag = false\n this.editCompetencyIndex = -1\n this.resetCompetencyForm()\n }\n\n updateCompetency() {\n let type = this.selectedCompetencyType;\n let theme = '';\n let subTheme = '';\n \n if (type === 'Domain') {\n // For Domain, use manual input\n theme = this.cbpForm.value.manualThemeInput?.trim();\n subTheme = this.cbpForm.value.manualSubThemeInput?.trim();\n this.originalCompetencyValueArr = JSON.parse(JSON.stringify(this.competenciesArray.value))\n }\n console.log(' this.competenciesArray', this.competenciesArray)\n if (type && theme && subTheme) {\n \n console.log('this.editCompetencyIndex--',this.editCompetencyIndex)\n if(this.editCompetencyIndex > -1) {\n this.competenciesArray.value[this.editCompetencyIndex]['type'] = type\n this.competenciesArray.value[this.editCompetencyIndex]['theme'] = theme\n this.competenciesArray.value[this.editCompetencyIndex]['sub_theme'] = subTheme\n }\n \n // if (!exists) {\n // const newComp = this.fb.group({\n // type: [type],\n // theme: [theme],\n // sub_theme: [subTheme]\n // });\n // this.competenciesArray.push(newComp);\n // }\n \n // Clear input fields after adding\n this.resetCompetencyForm();\n console.log('this.originalCompetencyValueArr', this.originalCompetencyValueArr)\n }\n \n const currentValues = this.competenciesArray.value;\n this.cbpForm.patchValue({ competencies: [...currentValues] });\n \n this.updateCompetencyCounts();\n this.cdRef.detectChanges();\n console.log(this.cbpForm?.get('competencies')?.value);\n }\n\n getDesignation(searchText?: string, offset?: number): void {\n \n // clear any previous debug hooks\n if (!searchText || searchText?.length === 0) {\n // noop\n }\n \n const reqOffset = (typeof offset === 'number') ? offset : this.designationOffset\n let reqLimit = this.designationDefaultLoadCount\n const pageIndex = reqLimit > 0 ? Math.floor(reqOffset / reqLimit) : 0\n // if we're requesting from first page, clear the no-more-data guard\n if (pageIndex === 0) {\n this.noMoreLegacyDesignations = false\n reqLimit = 50\n }\n const requestBody: any = {\n filterCriteriaMap: {\n status: 'Active'\n },\n requestedFields: [],\n pageNumber: pageIndex,\n pageSize: reqLimit,\n }\n if (searchText?.length) {\n requestBody['searchString'] = searchText\n // when searching, start from first page\n requestBody.pageNumber = 0\n // allow larger page for search if needed\n requestBody.pageSize = pageIndex === 0 ? 50 : this.designationListLoadCount\n // reset guard when performing a fresh search\n this.noMoreLegacyDesignations = false\n }\n \n // indicate loading state so scroll handlers don't trigger parallel calls\n this.isLoadingMoreDesignations = true\n \n this.sharedService.searchPublicDesignation(requestBody).pipe(finalize(() => {\n this.isLoadingMoreDesignations = false\n this.designationInitInProgress = false\n }))\n .subscribe({\n next: (res: any) => {\n const content = _.get(res, 'result.result.data', [])\n const mapped = content.map((item: any) => ({\n name: item?.designation || '',\n status: item?.status || 'Active',\n }))\n \n // total count may be present in different keys depending on API version.\n // Prefer 'result.result.totalcount' (legacy lower-case) then data.totalCount, then totalCount\n const total = _.get(res, 'result.result.totalcount', _.get(res, 'result.result.data.totalCount', _.get(res, 'result.result.totalCount', 0)))\n this.defaultSearchDesignationCount = total\n \n // If offset is zero (first page) replace backup, otherwise append + dedupe\n if (!this.masterData['designationBackup'] || reqOffset === 0) {\n this.masterData['designationBackup'] = mapped\n } else {\n const combined = (this.masterData['designationBackup'] || []).concat(mapped)\n this.masterData['designationBackup'] = _.uniqBy(combined, (it: any) => (it?.name || '').toLowerCase())\n }\n \n // If server returned no new items, mark as no-more-data to stop further scroll requests\n if (!mapped || mapped?.length === 0) {\n this.noMoreLegacyDesignations = true\n }\n \n // If we've loaded at least the total count, mark no-more-data\n if (this.defaultSearchDesignationCount && (this.masterData['designationBackup'] || []).length >= this.defaultSearchDesignationCount) {\n this.noMoreLegacyDesignations = true\n }\n \n // Ensure visible list matches the requested display count\n this.masterData['designation'] = (this.masterData['designationBackup'] || []).slice(0, this.designationListLoadCount)\n // loading flag cleared in finalize()\n this.ensureSelectedDesignationExists();\n this.checkCurrentDesignationPresent()\n },\n error: () => {\n // Stop further automatic calls on repeated errors to avoid tight loops\n // loading flag cleared in finalize()\n this.noMoreLegacyDesignations = true\n // this.matSnackBar.open('Unable to fetch designation details, please try again later!')\n }\n })\n\n this.cbpForm.get('designation_name')?.setValue(\n this.planData?.designation_name || ''\n );\n }\n\n ensureSelectedDesignationExists() {\n const selected = this.planData?.designation_name;\n\n if (!selected) return;\n\n const exists = this.masterData['designationBackup']?.some(\n (d: any) => d.name?.toLowerCase() === selected.toLowerCase()\n );\n\n if (!exists) {\n const customObj = {\n name: selected,\n status: 'Active',\n igot_designation_name: \"Principal Secretary\",\n igot_designation_id: \"DESG-002314\",\n };\n\n // ✅ Add at TOP so it's visible immediately\n this.masterData['designationBackup'] = [\n customObj,\n ...(this.masterData['designationBackup'] || [])\n ];\n\n this.masterData['designation'] = [\n customObj,\n ...(this.masterData['designation'] || [])\n ];\n }\n}\n\n checkCurrentDesignationPresent() {\n const selectedDesignations: string[] =\n this.cbpForm.get('designation_name')?.value || [];\n \n if (!Array.isArray(selectedDesignations) || !selectedDesignations.length) {\n return;\n }\n \n if (!this.masterData?.designation) {\n return;\n }\n \n selectedDesignations.forEach((selectedName: string) => {\n const exists = this.masterData.designation.some(\n (item: any) =>\n item?.name?.toLowerCase() === selectedName?.toLowerCase()\n );\n \n if (!exists) {\n const newDesignation = {\n name: selectedName,\n status: 'Active',\n id: 'custom-' + Date.now() + '-' + Math.random()\n };\n \n // Add to backup list as well\n this.masterData.designationBackup =\n this.masterData.designationBackup || [];\n \n this.masterData.designationBackup.unshift(newDesignation);\n \n // Also update visible list\n this.masterData.designation.unshift(newDesignation);\n }\n });\n }\n onDesignationDropdownClosed(): void {\n // Keep the designation value but clear the search input\n const currentDesignation = this.cbpForm.get('designation_name')!.value\n setTimeout(() => {\n if (this.cbpForm.get('searchDesignation')) {\n this.cbpForm.get('searchDesignation')!.setValue('')\n }\n // Ensure the designation value remains selected\n if (currentDesignation) {\n const designationControl = this.cbpForm.get('designation_name');\n if (designationControl) {\n designationControl.setValue(currentDesignation)\n }\n }\n }, 100)\n }\n \n designationSearch(evt: any) {\n const searchText = evt?.target?.value\n const txt = (searchText || '').toString().trim()\n if (this.isLoadingMoreDesignations) return\n \n this.designationSearchText = txt\n if (txt?.length) {\n this.desigantionFilterEnable = true\n this.isLoadingMoreDesignations = true\n this.getDesignation(txt, 0)\n } else if (this.masterData && this.masterData?.designationBackup) {\n this.masterData.designation = this.masterData?.designationBackup.slice(0, this.designationDefaultLoadCount)\n this.desigantionFilterEnable = false\n this.checkCurrentDesignationPresent()\n }\n }\n setupScrollListener(opened: boolean): void {\n if (opened) {\n if (!this.scrollListenerAttached) {\n this.scrollListenerAttached = true\n \n this.desigantionFilterEnable = false\n this.designationListLoadCount = this.designationDefaultLoadCount\n this.designationOffset = 0\n \n this.isLoadingMoreDesignations = true\n this.getDesignation(undefined, 0)\n \n // Clear search box once\n if (this.cbpForm.get('searchDesignation')) {\n this.cbpForm.get('searchDesignation')!.setValue('')\n }\n \n setTimeout(() => {\n const searchInput = document.querySelector('.search-input') as HTMLInputElement\n if (searchInput) {\n searchInput.focus()\n }\n }, 100)\n \n // Attach scroll listener safely\n setTimeout(() => {\n const panel = document.querySelector('.mat-select-panel.search-panel') as HTMLElement | null\n if (panel) {\n // align panel width to trigger\n try {\n const triggerEl = this.designationRef && this.designationRef.nativeElement as HTMLElement\n if (triggerEl) {\n const rect = triggerEl.getBoundingClientRect()\n // set width and left so panel aligns exactly below the trigger\n panel.style.width = `${Math.round(rect.width)}px`\n // leave left to overlay positioning but nudge if necessary\n // compute left relative to viewport and apply to panel\n const overlayLeft = rect.left\n panel.style.left = `${Math.round(overlayLeft)}px`\n }\n } catch (e) {\n // ignore DOM errors in SSR or unexpected cases\n }\n \n const scrollHandler = this.onDesignationSelectScroll.bind(this)\n panel.addEventListener('scroll', scrollHandler, { passive: true })\n }\n }, 150)\n }\n } else {\n // Dropdown closed — reset scroll flag so it can reattach next time\n this.scrollListenerAttached = false\n }\n }\n \n onDesignationSelectScroll(event: any): void {\n const element = event?.target\n if (!this.desigantionFilterEnable) {\n // Check if user has scrolled to the bottom (with a small threshold)\n if (element.scrollTop + element?.clientHeight >= element?.scrollHeight - 5) {\n // Only load more if not already loading and if there are potentially more items\n if (!this.isLoadingMoreDesignations) {\n // If org uses IGOT designation taxonomy, request more from the API by increasing the limit\n if (this.masterData?.designationBackup?.length > this.masterData?.designation?.length) {\n // Local pagination: expand the sliced list\n this.isLoadingMoreDesignations = true\n this.designationListLoadCount += this.designationDefaultLoadCount\n // Update the filtered list with more items\n setTimeout(() => {\n this.masterData.designation = this.masterData?.designationBackup?.slice(0, this.designationListLoadCount)\n this.checkCurrentDesignationPresent()\n this.isLoadingMoreDesignations = false\n }, 500) // Small timeout to simulate loading and prevent multiple triggers\n } else {\n // Legacy (server) pagination: request next page if total not reached\n const loadedLegacy = (this.masterData?.designationBackup || []).length\n if (!this.noMoreLegacyDesignations && this.defaultSearchDesignationCount && loadedLegacy < this.defaultSearchDesignationCount) {\n this.isLoadingMoreDesignations = true\n this.designationOffset = (this.designationOffset || 0) + this.designationDefaultLoadCount\n // increase display count to include newly fetched items\n this.designationListLoadCount += this.designationDefaultLoadCount\n this.getDesignation(undefined, this.designationOffset)\n }\n }\n }\n }\n }\n }\n \n get searchDesignationControl(): FormControl {\n return this.cbpForm.get('searchDesignation') as FormControl;\n }\n\n\n}\n","<div class=\"view-cbp-plan\" #dialogContent>\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div>\n <div class=\"heading\">Edit Role Mapping</div>\n </div>\n <div class=\"cursor-pointer\" (click)=\"closeDialog()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n <div class=\"section-container\" [formGroup]=\"cbpForm\">\n\n <!-- <div class=\"section-header mt-4\">\n <input type=\"text\" formControlName=\"designation_name\" [value]=\"planData?.designation_name\"\n style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 12px; width: 100%;font-size: 14px;font-family: 'Lato';\">\n\n\n </div> -->\n\n <mat-form-field appearance=\"outline\" class=\"mt-4 margin-top-s w-full required-select\" style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 12px; width: 100%;font-size: 14px;font-family: 'Lato';\">\n <mat-select #position formControlName=\"designation_name\" placeholder=\"Select designation\"\n (closed)=\"onDesignationDropdownClosed()\" panelClass=\"search-panel\"\n (openedChange)=\"setupScrollListener($event)\">\n\n <!-- Sticky search input container -->\n <div class=\"sticky-search-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"search-input-wrapper\">\n <input type=\"text\" placeholder=\"Search designation\" style=\"width:100%\"\n formControlName=\"searchDesignation\" class=\"search-input\"\n (keydown)=\"$event.stopPropagation()\"\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation()\"\n (keyup)=\"designationSearch($event)\" autocomplete=\"off\">\n <div *ngIf=\"searchDesignationControl?.value\" type=\"button\" class=\"clear-icon\"\n (click)=\"searchDesignationControl.setValue('')\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n </div>\n <!-- Options list -->\n <mat-option [value]=\"designation?.name\" *ngFor=\"let designation of masterData?.designation\">\n {{designation?.name}}\n </mat-option>\n <!-- Loading indicator -->\n <div *ngIf=\"isLoadingMoreDesignations\" class=\"loading-indicator\">\n Load More...\n </div>\n <!-- No results message -->\n <mat-option *ngIf=\"(masterData?.designation)?.length === 0\" disabled class=\"no-data-option\">\n\n Designation Not Found.\n\n </mat-option>\n </mat-select>\n <!-- <mat-error class=\"text-xs\"\n *ngIf=\"designationForm?.get('designation_name')?.touched && designationForm?.get('designation_name')?.invalid\">\n Please select at least one designation.\n </mat-error> -->\n </mat-form-field>\n\n <div class=\"competency-container mt-4\">\n <div class=\"outside-layer-total\">\n <div class=\"inside-layer\">\n Total Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.total}}\n </div>\n </div>\n <div class=\"outside-layer-behavioral\">\n <div class=\"inside-layer\">\n Behavioral Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.behavioral}}\n </div>\n </div>\n <div class=\"outside-layer-functional\">\n <div class=\"inside-layer\">\n Functional Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.functional}}\n </div>\n </div>\n <div class=\"outside-layer-domain\">\n <div class=\"inside-layer\">\n Domain Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.domain}}\n </div>\n </div>\n </div>\n <div class=\"mt-4 section\">\n <div class=\"sub-heading\">\n <p>Wing/Division</p>\n </div>\n <div class=\"mt-4\">\n <input type=\"text\" formControlName=\"wing_division_section\" [value]=\"planData?.wing_division_section\"\n style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 12px; width:100%;font-size: 14px;font-family: 'Lato';\">\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Roles & Responsibilities</p>\n </div>\n <div class=\"mt-4 additional-details\">\n <textarea class=\"custom-textarea\" formControlName=\"role_responsibilities_text\" rows=\"5\"\n placeholder=\"Roles & Responsibilities\"\n [value]=\"planData?.role_responsibilities?.join('\\n')\"></textarea>\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Activities</p>\n </div>\n <div class=\"mt-4 additional-details\">\n <textarea class=\"custom-textarea\" formControlName=\"activities_text\" rows=\"5\"\n placeholder=\"Activities\" [value]=\"planData?.activities?.join('\\n')\"></textarea>\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Competency</p>\n </div>\n <div class=\"enhanced-competency-section mt-2\">\n <!-- Step 1: Select Competency Type -->\n <div class=\"competency-step\">\n <label class=\"step-label\">1. Select Core Competency Type</label>\n <div class=\"competency-dropdown-container\">\n <mat-form-field appearance=\"outline\" class=\"competency-dropdown\">\n <mat-select formControlName=\"competencyType\" placeholder=\"Select Competency Type\"\n (selectionChange)=\"onCompetencyTypeChange($event.value)\">\n <mat-option value=\"Behavioral\">Behavioral</mat-option>\n <mat-option value=\"Functional\">Functional</mat-option>\n <mat-option value=\"Domain\">Domain</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <!-- Step 2: Theme Selection (Behavioral/Functional from JSON, Domain manual) -->\n <div class=\"competency-step\" *ngIf=\"selectedCompetencyType\">\n <label class=\"step-label\">2. Select/Enter Theme</label>\n\n <!-- For Behavioral and Functional: Searchable Dropdown from JSON -->\n <div class=\"competency-dropdown-container\"\n *ngIf=\"selectedCompetencyType === 'Behavioral' || selectedCompetencyType === 'Functional'\">\n <mat-form-field appearance=\"outline\" class=\"competency-dropdown\">\n <mat-select formControlName=\"competencyTheme\" placeholder=\"Search and select theme\"\n (selectionChange)=\"onThemeChange($event.value)\">\n <!-- Search input inside dropdown -->\n <mat-option class=\"search-option\" disabled>\n <mat-form-field appearance=\"outline\" class=\"search-field\">\n <input matInput placeholder=\"Search themes...\" formControlName=\"themeSearch\"\n (input)=\"filterThemes($event.target.value)\"\n (click)=\"$event.stopPropagation()\" (keydown)=\"$event.stopPropagation()\">\n </mat-form-field>\n </mat-option>\n\n <!-- Theme options -->\n <mat-option *ngFor=\"let theme of filteredThemes\" [value]=\"theme.name\">\n {{theme.name}}\n </mat-option>\n\n <!-- No results message -->\n <mat-option *ngIf=\"filteredThemes.length === 0 && themeSearchText\" disabled>\n No themes found matching \"{{themeSearchText}}\"\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- For Domain: Manual input -->\n <div class=\"manual-input-container\" *ngIf=\"selectedCompetencyType === 'Domain'\">\n <input type=\"text\" formControlName=\"manualThemeInput\" placeholder=\"Enter Theme manually\"\n class=\"manual-input\" />\n </div>\n </div>\n\n <!-- Step 3: Sub-theme Selection -->\n <div class=\"competency-step\" *ngIf=\"selectedTheme || (selectedCompetencyType === 'Domain')\">\n <label class=\"step-label\">3. Select/Enter Sub-theme</label>\n\n <!-- For Behavioral and Functional: Searchable Dropdown based on selected theme -->\n <div class=\"competency-dropdown-container\"\n *ngIf=\"selectedCompetencyType === 'Behavioral' || selectedCompetencyType === 'Functional'\">\n <mat-form-field appearance=\"outline\" class=\"competency-dropdown\">\n <mat-select formControlName=\"competencySubTheme\"\n placeholder=\"Search and select sub-theme\"\n (selectionChange)=\"onSubThemeChange($event.value)\">\n <!-- Search input inside dropdown -->\n <mat-option class=\"search-option\" disabled>\n <mat-form-field appearance=\"outline\" class=\"search-field\">\n <input matInput placeholder=\"Search sub-themes...\"\n formControlName=\"subThemeSearch\"\n (input)=\"filterSubThemes($event.target.value)\"\n (click)=\"$event.stopPropagation()\" (keydown)=\"$event.stopPropagation()\">\n </mat-form-field>\n </mat-option>\n\n <!-- Sub-theme options -->\n <mat-option *ngFor=\"let subTheme of filteredSubThemes\" [value]=\"subTheme\">\n {{subTheme}}\n </mat-option>\n\n <!-- No results message -->\n <mat-option *ngIf=\"filteredSubThemes.length === 0 && subThemeSearchText\" disabled>\n No sub-themes found matching \"{{subThemeSearchText}}\"\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- For Domain: Manual input -->\n <div class=\"manual-input-container\" *ngIf=\"selectedCompetencyType === 'Domain'\">\n <input type=\"text\" formControlName=\"manualSubThemeInput\"\n placeholder=\"Enter Sub-theme manually\" class=\"manual-input\" />\n </div>\n </div>\n\n <!-- Add Button -->\n <div class=\"add-button-section\" *ngIf=\"selectedCompetencyType \">\n <button type=\"button\" *ngIf=\"!editDomainCompetencyFlag\" class=\"add-competency-btn\"\n [disabled]=\"!canAddCompetency()\"\n [ngClass]=\"canAddCompetency() ? 'btn-active' : 'btn-disable'\" (click)=\"addCompetency()\">\n Add Competency\n </button>\n <button type=\"button\" *ngIf=\"editDomainCompetencyFlag\" class=\"add-competency-btn btn-active\"\n (click)=\"updateCompetency()\">\n Update Competency\n </button>\n <button type=\"button\" *ngIf=\"editDomainCompetencyFlag\" class=\"add-competency-btn btn-active\"\n style=\"margin-left: 5px;\" (click)=\"cancelUpdate()\">\n Cancel </button>\n </div>\n </div>\n <div class=\"mt-4\">\n <div class=\"competency-sub-heading mt-2\" *ngIf=\"getCompetenciesByType('Behavioral')?.length\">\n Behavioral Competencies\n </div>\n\n <div class=\"competency-grid mt-2\">\n <div class=\"competency-item behavioural-pill\"\n *ngFor=\"let comp of getCompetenciesByType('Behavioral')\">\n <span class=\"competency-text-behavioral\">\n {{ comp.theme }} - {{ comp.sub_theme }}\n </span>\n <span class=\"cursor-pointer close\" (click)=\"deleteCompetency(comp)\">\n <mat-icon>close</mat-icon>\n </span>\n </div>\n </div>\n </div>\n <div class=\"mt-4\">\n <div class=\"competency-sub-heading mt-2\" *ngIf=\"getCompetenciesByType('Functional')?.length\">\n Functional Competencies</div>\n <div class=\"competency-grid mt-2\">\n <div class=\"competency-item functional-pill\"\n *ngFor=\"let comp of getCompetenciesByType('Functional')\">\n <span class=\"competency-text-functional\">\n {{ comp.theme }} - {{ comp.sub_theme }}\n </span>\n <span class=\"cursor-pointer close\" (click)=\"deleteCompetency(comp)\">\n <mat-icon>close</mat-icon>\n </span>\n </div>\n </div>\n </div>\n <div class=\"mt-4\">\n <div class=\"competency-sub-heading mt-2\">Domain Competencies</div>\n <div class=\"competency-grid mt-2\">\n <div class=\"competency-item domain-pill\" *ngFor=\"let comp of getCompetenciesByType('Domain')\">\n <span class=\"competency-text-domain\">\n {{ comp.theme }} - {{ comp.sub_theme }}\n </span>\n <span class=\"cursor-pointer edit\" (click)=\"editCompetency(comp)\">\n <mat-icon>edit</mat-icon>\n </span>\n <span class=\"cursor-pointer close\" (click)=\"deleteCompetency(comp)\">\n <mat-icon>close</mat-icon>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"popup-footer\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Cancel\" (click)=\"cancelForm()\" />\n </div>\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Save\" (click)=\"saveRoleMapping()\" />\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>","import { Component, Inject, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { SharedService } from '../../modules/shared/services/shared.service';\n\n@Component({\n selector: 'app-suggest-more-courses',\n templateUrl: './suggest-more-courses.component.html',\n styleUrls: ['./suggest-more-courses.component.scss']\n})\nexport class SuggestMoreCoursesComponent implements OnInit{\n searchText = ''\n suggestedCourses:any = []\n originalData:any = []\n selectFilterCourses:any = []\n planData:any = {}\n loading=false\n\n // Pagination properties\n currentPage = 0\n pageSize = 12\n totalCount = 0\n totalPages = 0\n constructor(\n public dialogRef: MatDialogRef<SuggestMoreCoursesComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n public sharedService: SharedService,\n public snackBar: MatSnackBar\n ) {\n this.planData= data\n }\n\n\n ngOnInit() {\n this.loadAllCourses();\n }\n applyFilter() {\n // This method is kept for future use if needed\n // Search is now only triggered by search button click\n }\n\n searchData() {\n console.log('searchData called with searchText:', this.searchText);\n\n // Reset to first page when searching\n this.currentPage = 0;\n\n if (!this.searchText.trim()) {\n console.log('Search text is empty, loading all courses');\n this.loadAllCourses();\n return;\n }\n\n // Call the dedicated search method\n this.performSearch();\n }\n\n loadAllCourses() {\n this.loading = true;\n let reqBody = {\n \"request\": {\n \"filters\": {\n \"primaryCategory\": [\n \"Course\"\n ],\n \"status\": [\n \"Live\"\n ],\n \"courseCategory\": [\n \"Course\"\n ]\n },\n \"fields\": [\n \"posterImage\",\n \"description\",\n \"name\"\n ],\n \"limit\": this.pageSize,\n \"offset\": this.currentPage * this.pageSize\n }\n };\n\n console.log('Load all courses request body:', reqBody);\n\n this.sharedService.getIGOTSuggestedCourses(reqBody).subscribe({\n next: (res) => {\n this.loading = false;\n console.log('All courses loaded:', res);\n if (res && res.result) {\n this.suggestedCourses = res.result.content || [];\n this.originalData = res.result.content || [];\n this.totalCount = res.result.totalHits || res.result.count || 0;\n this.totalPages = Math.ceil(this.totalCount / this.pageSize);\n } else {\n this.suggestedCourses = [];\n this.originalData = [];\n this.totalCount = 0;\n this.totalPages = 0;\n }\n },\n error: (error) => {\n this.loading = false;\n console.error('Load courses error:', error);\n this.snackBar.open('Failed to load courses. Please try again.', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n });\n }\n\n cancel() {\n this.dialogRef.close()\n }\n\n // Pagination methods\n onPageChange(page: number) {\n if (page >= 0 && page < this.totalPages) {\n this.currentPage = page;\n if (this.searchText.trim()) {\n this.performSearch();\n } else {\n this.loadAllCourses();\n }\n }\n }\n\n // Separate method for performing search with query\n performSearch() {\n if (!this.searchText.trim()) {\n this.loadAllCourses();\n return;\n }\n\n this.loading = true;\n\n let reqBody = {\n \"request\": {\n \"filters\": {\n \"primaryCategory\": [\n \"Course\"\n ],\n \"status\": [\n \"Live\"\n ],\n \"courseCategory\": [\n \"Course\"\n ]\n },\n \"fields\": [\n \"posterImage\",\n \"description\",\n \"name\"\n ],\n \"query\": this.searchText.trim(),\n \"limit\": this.pageSize,\n \"offset\": this.currentPage * this.pageSize\n }\n };\n\n console.log('Perform search request body:', JSON.stringify(reqBody, null, 2));\n\n this.sharedService.getIGOTSuggestedCourses(reqBody).subscribe({\n next: (res) => {\n this.loading = false;\n console.log('Search results:', res);\n if (res && res.result) {\n this.suggestedCourses = res.result.content || [];\n this.originalData = res.result.content || [];\n this.totalCount = res.result.totalHits || res.result.count || 0;\n this.totalPages = Math.ceil(this.totalCount / this.pageSize);\n } else {\n this.suggestedCourses = [];\n this.originalData = [];\n this.totalCount = 0;\n this.totalPages = 0;\n }\n },\n error: (error) => {\n this.loading = false;\n console.error('Search error:', error);\n this.snackBar.open('Search failed. Please try again.', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n });\n }\n\n goToFirstPage() {\n this.onPageChange(0);\n }\n\n goToPreviousPage() {\n this.onPageChange(this.currentPage - 1);\n }\n\n goToNextPage() {\n this.onPageChange(this.currentPage + 1);\n }\n\n goToLastPage() {\n this.onPageChange(this.totalPages - 1);\n }\n\n clearSearch() {\n this.searchText = '';\n this.currentPage = 0;\n this.loadAllCourses();\n }\n\n // Helper methods for pagination UI\n get hasPreviousPage(): boolean {\n return this.currentPage > 0;\n }\n\n get hasNextPage(): boolean {\n return this.currentPage < this.totalPages - 1;\n }\n\n get startItem(): number {\n return this.currentPage * this.pageSize + 1;\n }\n\n get endItem(): number {\n return Math.min((this.currentPage + 1) * this.pageSize, this.totalCount);\n }\n\n filterData(searchText: string): any[] {\n const filter = searchText.trim().toLowerCase();\n\n return this.originalData.filter(item => {\n const stringified = this.flattenObjectToString(item).toLowerCase();\n return stringified.includes(filter);\n });\n }\n\n flattenObjectToString(obj: any): string {\n let result = '';\n\n for (const key in obj) {\n const value = obj[key];\n\n if (typeof value === 'string') {\n result += ' ' + value;\n } else if (Array.isArray(value)) {\n value.forEach(val => {\n if (typeof val === 'string') {\n result += ' ' + val;\n } else if (typeof val === 'object') {\n result += ' ' + this.flattenObjectToString(val);\n }\n });\n } else if (typeof value === 'object' && value !== null) {\n result += ' ' + this.flattenObjectToString(value);\n }\n }\n\n return result;\n }\n\n addCourses() {\n this.loading = true;\n \n // First, get existing suggested courses to avoid overwriting\n this.sharedService.getSuggestedCourses(this.planData.role_mapping_id).subscribe({\n next: (existingRes) => {\n console.log('Existing suggested courses:', existingRes);\n \n // Extract existing course identifiers\n let existingIdentifiers: string[] = [];\n if (existingRes && Array.isArray(existingRes)) {\n existingIdentifiers = existingRes.map(course => course.identifier).filter(id => id);\n }\n \n // Merge existing identifiers with new selections (avoiding duplicates)\n const allIdentifiers = [...new Set([...existingIdentifiers, ...this.selectFilterCourses])];\n \n console.log('Existing identifiers:', existingIdentifiers);\n console.log('New selections:', this.selectFilterCourses);\n console.log('Combined identifiers:', allIdentifiers);\n \n // Prepare request body with combined identifiers\n let reqBody = {\n \"role_mapping_id\": this.planData.role_mapping_id,\n \"course_identifiers\": allIdentifiers\n }\n \n // Save the combined list\n this.sharedService.saveSuggestedCourse(reqBody).subscribe({\n next: (res) => {\n // Success handling\n console.log('Success:', res);\n this.loading = false\n this.dialogRef.close('saved')\n this.snackBar.open('Courses Added Successfully', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n },\n error: (error) => {\n console.log('Save error', error)\n this.dialogRef.close()\n this.snackBar.open(error?.error?.detail || 'Failed to save courses', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n this.loading = false\n }\n });\n },\n error: (error) => {\n console.log('Error fetching existing courses:', error);\n \n // If fetching existing courses fails, proceed with just new selections\n // This could happen if no courses exist yet (404) which is normal\n if (error.status === 404) {\n console.log('No existing suggested courses found, proceeding with new selections only');\n \n let reqBody = {\n \"role_mapping_id\": this.planData.role_mapping_id,\n \"course_identifiers\": this.selectFilterCourses\n }\n \n this.sharedService.saveSuggestedCourse(reqBody).subscribe({\n next: (res) => {\n console.log('Success:', res);\n this.loading = false\n this.dialogRef.close('saved')\n this.snackBar.open('Courses Added Successfully', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n },\n error: (saveError) => {\n console.log('Save error', saveError)\n this.dialogRef.close()\n this.snackBar.open(saveError?.error?.detail || 'Failed to save courses', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n this.loading = false\n }\n });\n } else {\n // Other errors - show error message\n console.error('Unexpected error fetching existing courses:', error);\n this.loading = false\n this.snackBar.open('Failed to load existing courses. Please try again.', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n }\n });\n }\n\n selectAllCourses(event) {\n if(event.checked) {\n for(let i=0; i<this.suggestedCourses.length;i++) {\n this.selectFilterCourses.push(this.suggestedCourses[i].identifier)\n }\n } else {\n this.selectFilterCourses = []\n }\n console.log('this.selectFilterCourses', this.selectFilterCourses)\n }\n\n selectedFilterCourses(event, item) {\n console.log('event', event)\n console.log('item', item)\n if(event.checked) {\n this.selectFilterCourses.push(item?.identifier)\n } else {\n const index = this.selectFilterCourses.indexOf(item?.identifier);\n\n if (index !== -1) {\n this.selectFilterCourses.splice(index, 1);\n }\n }\n console.log('this.selectFilterCourses', this.selectFilterCourses)\n }\n\n checkIfCourseExists(item) {\n let flag = false\n if(this.selectFilterCourses.indexOf(item?.identifier)> -1) {\n flag = true\n }\n return flag\n }\n\n onImgError(event: Event) {\n const imgElement = event.target as HTMLImageElement;\n imgElement.src = 'assets/career/careers1.png'; // replace with your default image path\n }\n}\n","<div class=\"suggest-courses-plan\">\n <div class=\"container\">\n <mat-card class=\"mt-2\">\n <div class=\"suggest-courses-header\">\n <div>\n <div class=\"heading\">\n Suggest Courses from iGOT\n </div>\n <div class=\"sub-heading-text\">\n <p>These courses is coming from the iGOT platform</p>\n </div>\n </div>\n <div>\n <div class=\"suggest-course-control\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Cancel\" (click)=\"cancel()\"/>\n </div>\n <div>\n <input [disabled]=\"selectFilterCourses?.length ? false : true\" [ngClass]=\"selectFilterCourses?.length ? 'btn-active':'btn-disable'\" type=\"button\" value=\"Add\" (click)=\"addCourses()\"/>\n </div>\n </div>\n </div>\n </div>\n <div class=\"mt-4\">\n <div class=\"search-filter-section\">\n <div class=\"search flex margin-right-m\">\n <label class=\"label\">Search</label>\n <div>\n <div class=\"search-container\">\n <div class=\"rsearch\">\n <mat-icon\n class=\"color-60 search-icon mat-icon notranslate material-icons mat-icon-no-color\">search</mat-icon>\n <input style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 35px;\"\n class=\"sinput color-60 w-full\" [(ngModel)]=\"searchText\"\n (keyup.enter)=\"searchData()\" label=\"\"\n placeholder=\"Search Courses from iGOT\" type=\"Standard\">\n <mat-icon *ngIf=\"searchText.trim().length > 0\" \n class=\"color-60 clear-icon mat-icon notranslate material-icons mat-icon-no-color cursor-pointer\" \n (click)=\"clearSearch()\">clear</mat-icon>\n </div>\n <div class=\"pl-2\">\n <input [disabled]=\"!searchText.trim()\" [ngClass]=\"searchText.trim() ? 'btn-active':'btn-disable'\" type=\"button\" value=\"Search\" (click)=\"searchData()\" />\n </div>\n </div>\n\n\n </div>\n </div>\n </div>\n </div>\n <div class=\"mt-4\">\n <div class=\"results-header\" style=\"display: flex; justify-content: space-between; align-items: center;\">\n <div>\n <mat-checkbox [checked]=\"false\" (change)=\"selectAllCourses($event)\">Select All Courses</mat-checkbox>\n </div>\n <div class=\"results-info\" *ngIf=\"totalCount > 0\">\n <span class=\"text-muted\">Showing {{ startItem }} - {{ endItem }} of {{ totalCount }} courses</span>\n </div>\n </div>\n </div>\n <div class=\"course-card-list\">\n <div class=\"course-card-container mt-2\" *ngFor=\"let item of suggestedCourses\">\n <div>\n <div class=\"image-container\">\n <!-- ✅ Checkbox -->\n <mat-checkbox [checked]=\"checkIfCourseExists(item)\" \n class=\"image-checkbox\"\n (change)=\"selectedFilterCourses($event, item)\">\n </mat-checkbox>\n \n <!-- ✅ Image -->\n <img [src]=\"item?.posterImage\" (error)=\"onImgError($event)\" />\n </div>\n \n <div class=\"mt-2\" style=\"width: 100px\">\n <div class=\"course-pill\">\n <div class=\"course-pill-text\">\n <span><img src=\"assets/icons/course.svg\"></span>&nbsp;<span>Course</span>\n </div>\n </div>\n </div>\n \n <div class=\"sub-heading mt-2\">\n <p>{{ item?.name }}</p>\n </div>\n <div class=\"mt-2 desc\">\n <p>{{ item?.description | slice: 0:200 }}</p>\n </div>\n </div>\n </div>\n </div>\n \n <!-- Pagination Controls -->\n <div class=\"pagination-controls mt-4\" *ngIf=\"totalPages > 1\" style=\"display: flex; justify-content: center; align-items: center; gap: 10px;\">\n <button mat-icon-button [disabled]=\"!hasPreviousPage\" (click)=\"goToFirstPage()\" title=\"First Page\">\n <mat-icon>first_page</mat-icon>\n </button>\n \n <button mat-icon-button [disabled]=\"!hasPreviousPage\" (click)=\"goToPreviousPage()\" title=\"Previous Page\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n \n <span class=\"pagination-info\" style=\"margin: 0 15px;\">\n Page {{ currentPage + 1 }} of {{ totalPages }}\n </span>\n \n <button mat-icon-button [disabled]=\"!hasNextPage\" (click)=\"goToNextPage()\" title=\"Next Page\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n \n <button mat-icon-button [disabled]=\"!hasNextPage\" (click)=\"goToLastPage()\" title=\"Last Page\">\n <mat-icon>last_page</mat-icon>\n </button>\n </div>\n\n <!-- No Results Message -->\n <div class=\"no-results mt-4\" *ngIf=\"!loading && suggestedCourses.length === 0\" style=\"text-align: center; padding: 20px;\">\n <p class=\"text-muted\">{{ searchText.trim() ? 'No courses found for your search.' : 'No courses available.' }}</p>\n <button mat-button color=\"primary\" *ngIf=\"searchText.trim()\" (click)=\"clearSearch()\">Clear Search</button>\n </div>\n </mat-card>\n </div>\n</div> \n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>","import { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { ChangeDetectorRef, Component, ElementRef, Inject, OnInit, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup, FormArray, Validators, FormControl } from '@angular/forms';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { SuggestMoreCoursesComponent } from '../suggest-more-courses/suggest-more-courses.component';\nimport { MatTabChangeEvent } from '@angular/material/tabs';\nimport { AddCourseComponent } from '../add-course/add-course.component';\nimport html2pdf from 'html2pdf.js';\nimport { interval, of } from 'rxjs';\nimport { switchMap, takeWhile, tap, catchError, finalize } from 'rxjs/operators';\nimport { SharedService } from '../../modules/shared/services/shared.service';\n@Component({\n selector: 'app-generate-course-recommendation',\n templateUrl: './generate-course-recommendation.component.html',\n styleUrls: ['./generate-course-recommendation.component.scss']\n})\nexport class GenerateCourseRecommendationComponent {\n @ViewChild('pdfContent', { static: false }) pdfContent!: ElementRef;\n planData: any\n loading = false\n dataLoaded = false // Track if initial data has been loaded\n isRegeneratingWithProgress = false // Track regeneration with progress loading\n recommended_course_id = ''\n \n // Progressive loading for course generation\n currentProcessingStage: string = '';\n progressPercentage: number = 0;\n processingStages = [\n 'Analyzing roles and responsibilities...',\n 'Detailing competency requirements...',\n 'Preparing iGOT course recommendations...',\n 'Generating public course suggestions...',\n 'Computing comprehensive gap analysis...',\n 'Finalizing course recommendation plan...'\n ];\n stageStartTime: number = 0;\n constructor(public dialogRef: MatDialogRef<GenerateCourseRecommendationComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any, public sharedService: SharedService,\n private snackBar: MatSnackBar, public dialog: MatDialog,\n private fb: FormBuilder) {\n this.planData = data\n }\n searchText = ''\n filterdCourses: any = []\n originalData: any = []\n selectFilterCourses: any = []\n suggestedCourses: any = [] // Track iGOT suggested courses separately\n userAddedCourses: any = [] // Track user-added courses separately\n mode = 'add'\n cbp_plan_id = ''\n expandedCompetencies: any = {}; // Track expanded state for each course and competency type\n outerTabActiveIndex = 0\n innerTabActiveIndex = 0\n outerTabActiveText = 'all'\n innerTabActiveText = 'all'\n selectedCategory = 'all';\n competencyCoveredCount = 0\n overallCoverage:any = 0\n behavioralCompetencyCoveredCount = 0\n behavioralTotalCompetencies = 0\n behavioralCoverage: any = 0\n functionalCompetencyCoveredCount = 0\n functionalTotalCompetencies = 0\n functionalCoverage: any = 0\n domainCompetencyCoveredCount = 0\n domainTotalCompetencies = 0\n domainCoverage: any = 0\n competencyNotMatchedByCategory = []\n competencyMatchedByCategory = []\n menuItems = [\n { key: 'all', label: 'All Categories' },\n { key: 'behavioral', label: 'Behavioural' },\n { key: 'functional', label: 'Functional' },\n { key: 'domain', label: 'Domain' }\n ];\n behaviouralNotMatched = []\n functionalNotMatched = []\n domainNotMatched = []\n selectedThemeFilter = ''\n originalFilteredCourses = []\n isRegenerating = false\n isPDFDownload = false\n behaviouralMatched = []\n functionalMatched = []\n domainMatched = []\n filterForm!: FormGroup;\n competenciesType= ['All','Behavioural','Functional', 'Domain' ]\n ratings = ['4.5 and above', '4.0 and above', '3.5 and above','2.5 and above','1 and above'];\n languages = ['English', 'Hindi', 'Tamil','Kannada', 'Telugu', 'Malayalam', 'Assamese', 'Bengali', 'Gujarati', 'Marathi','Odia', 'Punjabi', 'Konkani', 'Bodo', 'Dogri', 'Kashmiri', 'Maithili','Manipuri', 'Nepali','Sanskrit','Santali','Sindhi','Urdu'];\n durations = ['< 1 Hour', '1-5 Hours', '5+ Hours'];\n providers = [];\n filteredCompetency = [...this.competenciesType];\n filteredRatings = [...this.ratings];\n filteredLanguages = [...this.languages];\n filteredDurations = [...this.durations];\n filteredProviders = [...this.providers];\n fullCourseList = []\n // Selected filters\n selectedCompetency = 'All';\n selectedRating: string | null = null;\n selectedLanguage: string | null = null;\n selectedDuration: string | null = null;\n selectedProvider: string | null = null;\n\n selectCategory(category: string) {\n this.selectedCategory = category;\n this.gapAnalysisStats()\n }\n ngOnInit() {\n this.filterForm = this.fb.group({\n competency: [[]],\n rating: [[]],\n language: [[]],\n duration: [[]],\n provider: [[]]\n });\n this.loadComponentData();\n }\n\n applyFilter(value:any) {\n console.log('this.searchText', value)\n this.searchText = value\n this.filterdCourses = this.filterData(this.searchText);\n }\n\n searchData() {\n // this.filterdCourses = this.filterData(this.searchText);\n }\n\n selectedFilterCourses(event, item) {\n console.log('event', event)\n console.log('item', item)\n if (event.checked) {\n if(this.selectFilterCourses.indexOf(item?.identifier) < 0) {\n this.selectFilterCourses.push(item?.identifier)\n } \n } else {\n const index = this.selectFilterCourses.findIndex(\n control => control === item.identifier\n );\n\n if (index !== -1) {\n this.selectFilterCourses.splice(index, 1);\n }\n }\n console.log('this.selectFilterCourses', this.selectFilterCourses)\n }\n\n closeDialog() {\n this.dialogRef.close()\n }\n\n saveCourses() {\n this.loading = true\n console.log('this.planData', this.planData)\n let reqBody = {\n \"role_mapping_id\": this.planData.id,\n \"recommended_course_id\": this.recommended_course_id,\n \"course_identifiers\": this.selectFilterCourses\n }\n console.log('reqBody, ', reqBody)\n if (this.mode === 'add') {\n this.sharedService.saveCourse(reqBody).subscribe({\n next: (res) => {\n // Success handling\n console.log('Success:', res);\n this.loading = false\n this.dialogRef.close('saved')\n this.snackBar.open('Courses Saved Successfully', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n //this.successRoleMapping.emit(this.roleMappingForm)\n },\n error: (error) => {\n console.log('error', error)\n this.dialogRef.close()\n // Handle 409 Conflict here\n // alert('Conflict detected: The resource already exists or action conflicts.');\n //this.get\n // Or you can set a UI error message variable\n this.snackBar.open(error?.error?.detail, 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n this.loading = false\n //this.alreadyAvailableRoleMapping.emit(this.roleMappingForm)\n }\n });\n } else {\n if (this.cbp_plan_id) {\n this.sharedService.updateCourse(reqBody, this.cbp_plan_id).subscribe({\n next: (res) => {\n // Success handling\n console.log('Success:', res);\n this.loading = false\n this.dialogRef.close('saved')\n this.snackBar.open('Courses Updated Successfully', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n //this.successRoleMapping.emit(this.roleMappingForm)\n },\n error: (error) => {\n console.log('error', error)\n this.dialogRef.close()\n // Handle 409 Conflict here\n // alert('Conflict detected: The resource already exists or action conflicts.');\n //this.get\n // Or you can set a UI error message variable\n this.snackBar.open(error?.error?.detail, 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n this.loading = false\n //this.alreadyAvailableRoleMapping.emit(this.roleMappingForm)\n }\n });\n } else {\n // Handle case when cbp_plan_id is not available\n this.loading = false\n console.error('cbp_plan_id is not available for update operation');\n this.snackBar.open('Unable to update courses: missing plan ID', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n\n }\n\n }\n\n getCourses() {\n let role_mapping_id = this.planData.id\n this.loading = true\n this.sharedService.getCourse(role_mapping_id).subscribe({\n next: (res) => {\n // Success handling\n this.loading = false\n console.log('res', res)\n this.cbp_plan_id = res?.id\n if (res && res?.selected_courses && res?.selected_courses?.length) {\n this.mode = 'edit'\n for (let i = 0; i < res?.selected_courses.length; i++) {\n this.selectFilterCourses.push(res.selected_courses[i]?.identifier)\n }\n }\n //this.successRoleMapping.emit(this.roleMappingForm)\n },\n error: (error) => {\n console.log('error', error)\n this.loading = false\n // Handle 409 Conflict here\n // alert('Conflict detected: The resource already exists or action conflicts.');\n //this.get\n // Or you can set a UI error message variable\n\n this.loading = false\n //this.alreadyAvailableRoleMapping.emit(this.roleMappingForm)\n }\n\n\n })\n }\n getSuggestedCourse() {\n let role_mapping_id = this.planData.id\n this.loading = true\n this.sharedService.getSuggestedCourses(role_mapping_id).subscribe({\n next: (res) => {\n // Success handling\n this.loading = false\n console.log('getSuggestedCourses res', res)\n console.log('this.filterdCourses', this.filterdCourses)\n // Store suggested courses separately\n this.suggestedCourses = [...res];\n \n // Rebuild filterdCourses to include all course types\n this.rebuildFilteredCourses();\n \n // Update gap analysis stats after suggested courses are added\n this.updateGapAnalysisAfterCoursesUpdate()\n //this.successRoleMapping.emit(this.roleMappingForm)\n },\n error: (error) => {\n console.log('error', error)\n this.loading = false\n if (error.status === 401) {\n console.log('Unauthorized access - user will be redirected to login');\n } else {\n // Handle other errors gracefully\n console.error('Failed to load suggested courses');\n }\n // Or you can set a UI error message variable\n\n this.loading = false\n //this.alreadyAvailableRoleMapping.emit(this.roleMappingForm)\n }\n\n\n })\n }\n\n getUserCourse() {\n let role_mapping_id = this.planData.id\n this.loading = true\n this.sharedService.getUserCourse(role_mapping_id).subscribe({\n next: (res) => {\n // Success handling\n this.loading = false\n console.log('getUserCourse API response:', res)\n console.log('Current filterdCourses before adding user courses:', this.filterdCourses)\n \n // Store user-added courses separately (reset to avoid duplicates)\n this.userAddedCourses = [...res];\n \n // Process user-added courses to ensure proper structure\n for (let i = 0; i < res.length; i++) {\n const userCourse = res[i];\n console.log(`User course ${i} competencies:`, userCourse.competencies);\n \n // Ensure user-added courses have the expected structure for display\n if (userCourse && !userCourse.course_type) {\n userCourse.course_type = 'User Added';\n }\n \n // Add identifier if missing (needed for course selection logic)\n if (userCourse && !userCourse.identifier) {\n userCourse.identifier = userCourse.id || `user_course_${i}_${Date.now()}`;\n }\n }\n \n // Rebuild filterdCourses to include all course types\n this.rebuildFilteredCourses();\n \n console.log('filterdCourses after adding user courses:', this.filterdCourses);\n //this.successRoleMapping.emit(this.roleMappingForm)\n },\n error: (error) => {\n console.log('error', error)\n this.loading = false\n // Handle 409 Conflict here\n // alert('Conflict detected: The resource already exists or action conflicts.');\n //this.get\n // Or you can set a UI error message variable\n\n this.loading = false\n //this.alreadyAvailableRoleMapping.emit(this.roleMappingForm)\n }\n\n\n })\n }\n\n checkIfCourseExists(item) {\n let flag = false\n if (this.selectFilterCourses.indexOf(item?.identifier) > -1) {\n flag = true\n }\n return flag\n }\n\n selectAllCourses(event) {\n if (event.checked) {\n for (let i = 0; i < this.filterdCourses.length; i++) {\n this.selectFilterCourses.push(this.filterdCourses[i].identifier)\n }\n } else {\n this.selectFilterCourses = []\n \n }\n if(this.cbp_plan_id) {\n this.mode = 'update'\n } else {\n this.mode = 'add'\n }\n\n\n }\n getSectors(sector) {\n if (sector && sector.length) {\n return Array.isArray(sector) ? sector.join('/ ') : ''\n }\n\n }\n\n filterData(searchText: string): any[] {\n const filter = searchText.trim().toLowerCase();\n\n return this.originalData.filter(item => {\n const stringified = this.flattenObjectToString(item).toLowerCase();\n return stringified.includes(filter);\n });\n }\n\n flattenObjectToString(obj: any): string {\n let result = '';\n\n for (const key in obj) {\n const value = obj[key];\n\n if (typeof value === 'string') {\n result += ' ' + value;\n } else if (Array.isArray(value)) {\n value.forEach(val => {\n if (typeof val === 'string') {\n result += ' ' + val;\n } else if (typeof val === 'object') {\n result += ' ' + this.flattenObjectToString(val);\n }\n });\n } else if (typeof value === 'object' && value !== null) {\n result += ' ' + this.flattenObjectToString(value);\n }\n }\n\n return result;\n }\n\n suggestMoreCourses() {\n // this.dialogRef.close()\n const dialogRefNew = this.dialog.open(SuggestMoreCoursesComponent, {\n width: '1000px',\n data: { recommended_course_id: this.recommended_course_id, role_mapping_id: this.planData.id },\n panelClass: 'view-cbp-plan-popup',\n minHeight: '400px', // Set minimum height\n maxHeight: '90vh', // Prevent it from going beyond viewport\n disableClose: true // Optional: prevent closing with outside click\n });\n\n dialogRefNew.afterClosed().subscribe(result => {\n if (result === 'saved') {\n console.log('Changes saved!');\n // Refresh data or show a toast here\n this.getSuggestedCourse()\n } else {\n this.getSuggestedCourse()\n }\n });\n }\n\n generateCourseRecommendation(element: any) {\n console.log('Generate Course Recommendation clicked', element);\n // this.activeRowElement = element\n console.log('Edit Role Mapping clicked', element);\n // Navigate or open modal\n console.log('View CBP Plan clicked', element);\n const dialogRef = this.dialog.open(GenerateCourseRecommendationComponent, {\n width: '1000px',\n data: element,\n panelClass: 'view-cbp-plan-popup',\n minHeight: '400px', // Set minimum height\n maxHeight: '90vh', // Prevent it from going beyond viewport\n disableClose: true // Optional: prevent closing with outside click\n });\n \n dialogRef.afterClosed().subscribe(result => {\n if (result === 'saved') {\n console.log('Changes saved!');\n // Refresh data or show a toast here\n console.log(this.sharedService.cbpPlanFinalObj)\n if(this.sharedService.cbpPlanFinalObj && this.sharedService.cbpPlanFinalObj.ministry && this.sharedService.cbpPlanFinalObj.ministry.id) {\n this.sharedService.getRoleMappingByStateCenter(this.sharedService.cbpPlanFinalObj.ministry.id).subscribe((res)=>{\n console.log('res', res)\n // this.dataSource.data = res\n // this.dataSource.paginator = this.paginator;\n this.originalData = res;\n // console.log('this.dataSource',this.dataSource)\n })\n } else {\n \n }\n \n }\n });\n }\n\n getCompetenciesByType(type: string, index): any[] {\n const course = this.filterdCourses[index];\n if (!course) {\n console.log(`No course found at index ${index}`);\n return [];\n }\n \n // Handle different competency property names\n // AI Recommended & Public courses use 'competencies'\n // Manually Suggested - iGOT courses use 'competencies_v6'\n // User Added courses use 'competencies'\n let competencies = [];\n if (course.competencies && Array.isArray(course.competencies)) {\n competencies = course.competencies;\n // console.log(`Course ${index} (${course.course_type || course.name || 'Unknown'}) using 'competencies' property:`, competencies);\n } else if (course.competencies_v6 && Array.isArray(course.competencies_v6)) {\n competencies = course.competencies_v6;\n // console.log(`Course ${index} (${course.course_type || course.name || 'Unknown'}) using 'competencies_v6' property:`, competencies);\n } else {\n // console.log(`Course ${index} (${course.course_type || course.name || 'Unknown'}) has no valid competencies property:`, {\n // hasCompetencies: !!course.competencies,\n // competenciesType: typeof course.competencies,\n // hasCompetenciesV6: !!course.competencies_v6,\n // competenciesV6Type: typeof course.competencies_v6,\n // courseKeys: Object.keys(course)\n // });\n }\n \n if (competencies.length === 0) {\n // console.log(`No competencies found for course ${index} and type ${type}`);\n return [];\n }\n \n // Normalize the type for comparison (case-insensitive + handle spelling variations)\n const normalizedType = type.toLowerCase().trim();\n \n const matchedCompetencies = competencies.filter(c => {\n if (!c || !c.competencyAreaName) {\n console.log(`Invalid competency structure in course ${index}:`, c);\n return false;\n }\n \n const competencyArea = c.competencyAreaName.toLowerCase().trim();\n \n // Handle both \"behavioral\" and \"behavioural\" spellings\n if (normalizedType === 'behavioural' || normalizedType === 'behavioral') {\n return competencyArea === 'behavioral' || competencyArea === 'behavioural';\n }\n \n // For other types, do case-insensitive comparison\n return competencyArea === normalizedType;\n });\n \n // console.log(`Found ${matchedCompetencies.length} competencies of type ${type} for course ${index}:`, matchedCompetencies);\n return matchedCompetencies;\n }\n\n getCompetenciesByBehviouralType(index): string {\n const course = this.filterdCourses[index];\n if (!course) {\n return '';\n }\n \n // Handle different competency property names\n let competencies = [];\n if (course.competencies && Array.isArray(course.competencies)) {\n competencies = course.competencies;\n } else if (course.competencies_v6 && Array.isArray(course.competencies_v6)) {\n competencies = course.competencies_v6;\n }\n \n if (competencies.length === 0) {\n return '';\n }\n \n return competencies\n .filter(c => c && (c.competencyAreaName === 'Behavioral' || c.competencyAreaName === 'Behavioural'))\n .map(c => `${c.competencyThemeName || ''} - ${c.competencySubThemeName || ''}`)\n .join(', ');\n }\n\n getDisplayedCompetencies(type: string, index: number): any[] {\n const competencies = this.getCompetenciesByType(type, index);\n const key = `${index}-${type}`;\n\n if (this.expandedCompetencies[key]) {\n return competencies;\n }\n\n return competencies.slice(0, 2);\n }\n\n toggleCompetencies(type: string, index: number): void {\n const key = `${index}-${type}`;\n this.expandedCompetencies[key] = !this.expandedCompetencies[key];\n }\n\n isExpanded(type: string, index: number): boolean {\n const key = `${index}-${type}`;\n return this.expandedCompetencies[key] || false;\n }\n\n hasMoreThanTwo(type: string, index: number): boolean {\n return this.getCompetenciesByType(type, index).length > 2;\n }\n\n getRemainingCount(type: string, index: number): number {\n const totalCount = this.getCompetenciesByType(type, index).length;\n return totalCount - 2;\n }\n\n onOuterTabChange(event: MatTabChangeEvent): void {\n this.outerTabActiveIndex = event.index\n this.outerTabActiveText = event.tab.textLabel\n console.log('Outer Tab Index:', event.index);\n console.log('Outer Tab Label:', event.tab.textLabel);\n if(event.index === 1) {\n this.gapAnalysisStats()\n }\n if(event.index === 0) {\n // this.getCourses()\n // this.getSuggestedCourse()\n this.getUserCourse()\n }\n }\n\n onInnerTabChange(event: MatTabChangeEvent): void {\n this.innerTabActiveIndex = event.index\n this.innerTabActiveText = event.tab.textLabel\n this.selectedThemeFilter = ''; // Reset theme filter when switching tabs\n console.log('Inner Tab Index:', event.index);\n console.log('Inner Tab Label:', event.tab.textLabel);\n let tabIndex = event.index\n this.competencyMatchedByCategory = []\n \n // Get all available courses (original + suggested + user added)\n const allAvailableCourses = this.getAllAvailableCourses();\n\n\n \n switch (tabIndex) {\n case 0: // All\n this.filterdCourses = allAvailableCourses;\n break;\n case 1: // Behavioral\n this.filterdCourses = this.behavioralFilter(allAvailableCourses);\n this.competencyMatchedByCategory = this.behavioralCompetencyFilter(this.planData.competencies);\n break;\n case 2: // Functional\n this.filterdCourses = this.functionalFilter(allAvailableCourses);\n this.competencyMatchedByCategory = this.functionalCompetencyFilter(this.planData.competencies);\n break;\n case 3: // Domain\n this.filterdCourses = this.domainFilter(allAvailableCourses);\n this.competencyMatchedByCategory = this.domainCompetencyFilter(this.planData.competencies);\n break;\n }\n console.log('this.filterdCourses',this.filterdCourses)\n console.log('this.competencyMatchedByCategory',this.competencyMatchedByCategory)\n }\n \n getAllAvailableCourses() {\n // Start with original data (AI recommended courses)\n const allCourses = [...this.originalData];\n const seenIdentifiers = new Set();\n \n // Track original course identifiers\n this.originalData.forEach(course => {\n if (course.identifier) seenIdentifiers.add(course.identifier);\n if (course.id) seenIdentifiers.add(course.id);\n });\n \n // Add suggested courses (iGOT platform courses)\n this.suggestedCourses.forEach(course => {\n const courseId = course.identifier || course.id;\n if (courseId && !seenIdentifiers.has(courseId)) {\n allCourses.push(course);\n seenIdentifiers.add(courseId);\n }\n });\n \n // Add user-added courses\n this.userAddedCourses.forEach(course => {\n const courseId = course.identifier || course.id;\n if (courseId && !seenIdentifiers.has(courseId)) {\n // Ensure user-added courses have proper structure\n if (!course.course_type) {\n course.course_type = 'User Added';\n }\n if (!course.identifier && course.id) {\n course.identifier = course.id;\n }\n allCourses.push(course);\n seenIdentifiers.add(courseId);\n }\n });\n \n console.log('getAllAvailableCourses breakdown:', {\n originalData: this.originalData.length,\n suggestedCourses: this.suggestedCourses.length,\n userAddedCourses: this.userAddedCourses.length,\n totalAvailable: allCourses.length\n });\n\n console.log('allCourses--', allCourses)\n allCourses.forEach((item)=>{\n if(item && item.organisation && item.organisation.length) {\n if(this.filteredProviders.indexOf(item.organisation[0]) < 0) {\n this.filteredProviders.push(item.organisation[0])\n }\n \n }\n })\n this.fullCourseList = allCourses\n let identifiersArr = []\n this.fullCourseList.map((item)=>{\n identifiersArr.push(item?.identifier)\n })\n this.sharedService.getAdditionalParameterforSuggestedCourses(identifiersArr).subscribe((response)=>{\n if(response && response.result && response.result.content && response.result.content.length) {\n for(let i=0; i < response.result.content.length;i++) {\n for(let j=0; j<this.fullCourseList.length;j++) {\n if(this.fullCourseList[j]['identifier'] === response.result.content[i]['identifier'] ) {\n this.fullCourseList[j]['language'] = response.result.content[i]['language']\n this.fullCourseList[j]['avgRating'] = response.result.content[i]['avgRating']\n this.fullCourseList[j]['course'] = response.result.content[i]['name']\n break;\n }\n }\n \n }\n }\n \n })\n return allCourses;\n }\n\n \n /**\n * Rebuild filterdCourses array with all available course types\n * This ensures consistency across the application\n */\n rebuildFilteredCourses() {\n this.filterdCourses = this.getAllAvailableCourses();\n \n console.log('Rebuilt filterdCourses with all course types:', {\n total: this.filterdCourses.length,\n breakdown: {\n original: this.originalData.length,\n suggested: this.suggestedCourses.length,\n userAdded: this.userAddedCourses.length\n }\n });\n }\n\n behavioralFilter(data: any[]): any[] {\n return data.filter(item => {\n if (!item) return false;\n \n // Handle different competency property names\n let competencies = [];\n if (item.competencies && Array.isArray(item.competencies)) {\n competencies = item.competencies;\n } else if (item.competencies_v6 && Array.isArray(item.competencies_v6)) {\n competencies = item.competencies_v6;\n }\n \n return competencies.some(c => c && ((c?.competencyAreaName?.toLowerCase() === 'behavioral') || c?.competencyAreaName?.toLowerCase() === 'behavioural'));\n });\n }\n\n behavioralCompetencyFilter(data: any[]): string[] {\n console.log('data--', data)\n const behavioralThemes = data\n .filter(item =>\n item?.type &&\n ['behavioral', 'behavioural'].includes(item.type.toLowerCase())\n )\n .map(item => `${item.theme}-${item.sub_theme}`)\n .filter((theme): theme is string => Boolean(theme)); // Ensures type safety\n \n const uniqueBehavioralThemes = Array.from(new Set(behavioralThemes));\n \n console.log(uniqueBehavioralThemes);\n return uniqueBehavioralThemes;\n }\n\n functionalCompetencyFilter(data:any[]):any {\n const functionalThemes = data\n .filter(item =>\n item?.type &&\n ['functional'].includes(item.type.toLowerCase())\n )\n .map(item => `${item.theme}-${item.sub_theme}`)\n .filter((theme): theme is string => Boolean(theme)); // Ensures type safety\n \n const uniqueFunctionalThemes = Array.from(new Set(functionalThemes));\n \n console.log(uniqueFunctionalThemes);\n return uniqueFunctionalThemes;\n \n // console.log(uniqueCompetencyAreaNames);\n }\n\n domainCompetencyFilter(data:any[]):any {\n const domainThemes = data\n .filter(item =>\n item?.type &&\n ['domain'].includes(item.type.toLowerCase())\n )\n .map(item => `${item.theme}-${item.sub_theme}`)\n .filter((theme): theme is string => Boolean(theme)); // Ensures type safety\n\n const uniqueDomainThemes = Array.from(new Set(domainThemes));\n \n console.log(uniqueDomainThemes);\n return uniqueDomainThemes;\n \n // console.log(uniqueCompetencyAreaNames);\n }\n\n\n functionalFilter(data: any[]): any[] {\n return data.filter(item => {\n if (!item) return false;\n \n // Handle different competency property names\n let competencies = [];\n if (item.competencies && Array.isArray(item.competencies)) {\n competencies = item.competencies;\n } else if (item.competencies_v6 && Array.isArray(item.competencies_v6)) {\n competencies = item.competencies_v6;\n }\n \n return competencies.some(c => c && c?.competencyAreaName?.toLowerCase() === 'functional');\n });\n }\n\n domainFilter(data: any[]): any[] {\n return data.filter(item => {\n if (!item) return false;\n \n // Handle different competency property names\n let competencies = [];\n if (item.competencies && Array.isArray(item.competencies)) {\n competencies = item.competencies;\n } else if (item.competencies_v6 && Array.isArray(item.competencies_v6)) {\n competencies = item.competencies_v6;\n }\n \n return competencies.some(c => c && c?.competencyAreaName?.toLowerCase() === 'domain');\n });\n }\n\n gapAnalysisStats () {\n console.log('this.planData',this.planData)\n \n // Always use ALL competencies for calculating overall stats\n const allCompetencies = this.planData.competencies;\n \n // Filter for category-specific calculations\n let categorySpecificCompetencies:any = this.planData.competencies;\n if(this.selectedCategory === 'all') {\n categorySpecificCompetencies = this.planData.competencies\n } else if(this.selectedCategory === 'behavioral') {\n categorySpecificCompetencies = this.planData.competencies.filter(item => item.type?.toLowerCase() === this.selectedCategory);\n } else if(this.selectedCategory === 'functional') {\n categorySpecificCompetencies = this.planData.competencies.filter(item => item.type?.toLowerCase() === this.selectedCategory);\n } \n else if(this.selectedCategory === 'domain') {\n categorySpecificCompetencies = this.planData.competencies.filter(item => item.type?.toLowerCase() === this.selectedCategory);\n } \n\n // Count ALL competencies by category (not just filtered ones)\n const masterListByCategory = {total: allCompetencies.length, behavioural: 0, functional:0, domain:0}\n \n // IMPORTANT: Use all available courses for consistent coverage calculation\n // This should match what's available in the Filter By Competency section\n const allCourseCompetencies = []\n const allAvailableCoursesForStats = this.getAllAvailableCourses();\n \n allAvailableCoursesForStats.forEach(course => {\n // Handle different competency property names\n let competencies = [];\n if (course && course.competencies && Array.isArray(course.competencies)) {\n competencies = course.competencies;\n } else if (course && course.competencies_v6 && Array.isArray(course.competencies_v6)) {\n competencies = course.competencies_v6;\n }\n \n competencies.forEach((list:any) => {\n allCourseCompetencies.push(list)\n });\n });\n \n console.log('allCompetencies', allCompetencies)\n console.log('categorySpecificCompetencies', categorySpecificCompetencies)\n console.log('allCourseCompetencies', allCourseCompetencies)\n \n // Count all competencies by type for proper totals\n for(let i=0; i<allCompetencies.length;i++) {\n const competencyType = allCompetencies[i]['type']?.toLowerCase();\n console.log(`Competency ${i}: type=\"${competencyType}\", data:`, allCompetencies[i]);\n if(competencyType === 'behavioural' || competencyType === 'behavioral') {\n masterListByCategory['behavioural'] = masterListByCategory['behavioural'] + 1\n }\n if(competencyType === 'functional') {\n masterListByCategory['functional'] = masterListByCategory['functional'] + 1\n }\n if(competencyType === 'domain') {\n masterListByCategory['domain'] = masterListByCategory['domain'] + 1\n }\n }\n console.log('masterListByCategory after counting:', masterListByCategory)\n \n // Get matching results for ALL competencies (for overall coverage)\n const overallResult = this.getMatchedCompetencyStats(allCompetencies, allCourseCompetencies);\n \n // Get matching results for category-specific competencies (for filtered view)\n const categoryResult = this.getMatchedCompetencyStats(categorySpecificCompetencies, allCourseCompetencies);\n \n // Set competencyCoveredCount based on selected category (for the filtered numbers)\n if(this.selectedCategory === 'all') {\n this.competencyCoveredCount = overallResult['total'];\n } else if(this.selectedCategory === 'behavioral') {\n this.competencyCoveredCount = categoryResult['behavioral'] || 0;\n } else if(this.selectedCategory === 'functional') {\n this.competencyCoveredCount = categoryResult['functional'] || 0;\n } else if(this.selectedCategory === 'domain') {\n this.competencyCoveredCount = categoryResult['domain'] || 0;\n }\n \n // IMPORTANT: Overall Coverage should ALWAYS be based on ALL competencies, not filtered\n let totalCompetencies = this.planData.competencies.length; // Always use total count\n let overallCoveredCount = overallResult['total']; // Always use overall results\n let mathRound = Math.round((overallCoveredCount/totalCompetencies)*100)\n this.overallCoverage = `${mathRound}%`\n \n console.log('Overall Coverage Calculation:', {\n totalCompetencies: totalCompetencies,\n overallCoveredCount: overallCoveredCount,\n overallCoverage: this.overallCoverage,\n selectedCategory: this.selectedCategory,\n competencyCoveredCount: this.competencyCoveredCount\n });\n \n // Always calculate all category-specific metrics regardless of selected category\n // This ensures the data is available when switching between categories\n // Use overallResult for consistent calculations across all categories\n this.behavioralCompetencyCoveredCount = overallResult['behavioral'] || 0;\n this.behavioralTotalCompetencies = masterListByCategory['behavioural'];\n let behavioralMathRound = this.behavioralTotalCompetencies > 0 ? Math.round((this.behavioralCompetencyCoveredCount/this.behavioralTotalCompetencies)*100) : 0;\n this.behavioralCoverage = `${behavioralMathRound}%`;\n \n this.functionalCompetencyCoveredCount = overallResult['functional'] || 0;\n this.functionalTotalCompetencies = masterListByCategory['functional'];\n let functionalMathRound = this.functionalTotalCompetencies > 0 ? Math.round((this.functionalCompetencyCoveredCount/this.functionalTotalCompetencies)*100) : 0;\n this.functionalCoverage = `${functionalMathRound}%`;\n \n this.domainCompetencyCoveredCount = overallResult['domain'] || 0;\n this.domainTotalCompetencies = masterListByCategory['domain'];\n let domainMathRound = this.domainTotalCompetencies > 0 ? Math.round((this.domainCompetencyCoveredCount/this.domainTotalCompetencies)*100) : 0;\n this.domainCoverage = `${domainMathRound}%`;\n \n console.log('All category metrics calculated:', {\n behavioral: { covered: this.behavioralCompetencyCoveredCount, total: this.behavioralTotalCompetencies, coverage: this.behavioralCoverage },\n functional: { covered: this.functionalCompetencyCoveredCount, total: this.functionalTotalCompetencies, coverage: this.functionalCoverage },\n domain: { covered: this.domainCompetencyCoveredCount, total: this.domainTotalCompetencies, coverage: this.domainCoverage },\n overall: { covered: overallCoveredCount, total: totalCompetencies, coverage: this.overallCoverage },\n selectedCategory: this.selectedCategory,\n competencyCoveredCountForCategory: this.competencyCoveredCount\n });\n console.log('Overall Result:', overallResult);\n console.log('Category Result:', categoryResult);\n console.log('this.competencyNotMatchedByCategory',this.competencyNotMatchedByCategory)\n this.behaviouralNotMatched = this.getCompetencyByCategoryNotMatching('behavioral')\n this.functionalNotMatched = this.getCompetencyByCategoryNotMatching('functional')\n this.domainNotMatched = this.getCompetencyByCategoryNotMatching('domain')\n\n this.getBehaviouralMatched()\n this.getFunctionalMatched()\n this.getDomainMatched()\n }\n\n getMatchedCompetencyStats(primaryArray: any[], secondaryArray: any[]) {\n // Convert both arrays to ensure consistent casing\n const counts: any = {\n behavioral: 0,\n functional: 0,\n domain: 0,\n total: 0\n };\n \n // Clear the competencyNotMatchedByCategory array for fresh calculation\n this.competencyNotMatchedByCategory = [];\n \n // Set to keep track of unique matches\n const seen = new Set<string>();\n const matchedCompetencies = new Set<string>();\n \n for (const primary of primaryArray) {\n const typeKey = primary.type?.toLowerCase().trim();\n const themeKey = primary.theme?.toLowerCase().trim();\n const subThemeKey = primary.sub_theme?.toLowerCase().trim();\n \n let isMatched = false;\n \n for (const secondary of secondaryArray) {\n // Normalize secondary keys\n let secType = secondary?.competencyAreaName?.toLowerCase().trim();\n let secTheme = secondary?.competencyThemeName?.toLowerCase().trim();\n let secSubTheme = secondary?.competencySubThemeName?.toLowerCase().trim();\n \n // Fix for data inconsistency\n if (secType === 'behavioural') secType = 'behavioral';\n \n // Create unique match key for primary competency\n const matchKey = `${typeKey}|${themeKey}|${subThemeKey}`;\n \n // Enhanced cross-matching logic as requested:\n // 1. Role mapping Theme vs Course Theme\n // 2. Role mapping Sub Theme vs Course Sub Theme \n // 3. Role mapping Theme vs Course Sub Theme\n // 4. Role mapping Sub Theme vs Course Theme\n const themeToThemeMatch = themeKey === secTheme;\n const subThemeToSubThemeMatch = subThemeKey === secSubTheme;\n const themeToSubThemeMatch = themeKey === secSubTheme;\n const subThemeToThemeMatch = subThemeKey === secTheme;\n \n let matchType = '';\n let isMatch = false;\n \n if (typeKey === secType && !seen.has(matchKey)) {\n if (themeToThemeMatch) {\n matchType = 'Theme-to-Theme';\n isMatch = true;\n } else if (subThemeToSubThemeMatch) {\n matchType = 'SubTheme-to-SubTheme';\n isMatch = true;\n } else if (themeToSubThemeMatch) {\n matchType = 'Theme-to-SubTheme';\n isMatch = true;\n } else if (subThemeToThemeMatch) {\n matchType = 'SubTheme-to-Theme';\n isMatch = true;\n }\n }\n\n if (isMatch) {\n console.log(`✅ MATCH FOUND [${matchType}]:`, {\n roleMapping: { type: typeKey, theme: themeKey, subTheme: subThemeKey },\n course: { type: secType, theme: secTheme, subTheme: secSubTheme },\n matchType: matchType\n });\n \n // Store matched competency info for later use\n let obj = {};\n obj[typeKey] = [themeKey]; // Store the original theme, not the course theme\n this.competencyNotMatchedByCategory.push(obj);\n seen.add(matchKey);\n matchedCompetencies.add(themeKey); // Track matched themes\n isMatched = true;\n \n if (counts.hasOwnProperty(typeKey)) {\n counts[typeKey]++;\n } else {\n counts[typeKey] = 1;\n }\n \n counts.total++;\n break; // Stop looking for matches for this primary competency\n }\n }\n }\n \n return counts;\n }\n getCompetencyByCategoryNotMatching(categoryType) {\n // Get all competencies for the given category from role mapping\n let allCategoryCompetencies = [];\n for(let i = 0; i < this.planData.competencies.length; i++) {\n if(this.planData.competencies[i]['type']?.toLowerCase() === categoryType?.toLowerCase()) {\n allCategoryCompetencies.push(this.planData.competencies[i]['theme']?.toLowerCase().trim());\n }\n }\n \n // Get matched competencies for this category from courses\n let matchedCompetencies = [];\n for(let i = 0; i < this.competencyNotMatchedByCategory.length; i++) {\n if(this.competencyNotMatchedByCategory[i][categoryType?.toLowerCase()]) {\n // Extract matched themes from course competencies\n this.competencyNotMatchedByCategory[i][categoryType?.toLowerCase()].forEach(theme => {\n if(theme) {\n matchedCompetencies.push(theme.toLowerCase().trim());\n }\n });\n }\n }\n \n // Enhanced matching: check both theme and subtheme from courses against FRAC competencies\n // IMPORTANT: Use all available courses for consistent coverage calculation\n const allCoursesForMatching = this.getAllAvailableCourses();\n \n allCoursesForMatching.forEach(course => {\n // Handle different competency property names\n let competencies = [];\n if (course && course.competencies && Array.isArray(course.competencies)) {\n competencies = course.competencies;\n } else if (course && course.competencies_v6 && Array.isArray(course.competencies_v6)) {\n competencies = course.competencies_v6;\n }\n \n competencies.forEach((comp: any) => {\n let secType = comp?.competencyAreaName?.toLowerCase().trim();\n if(secType === 'behavioural') secType = 'behavioral';\n \n if(secType === categoryType?.toLowerCase()) {\n const courseTheme = comp.competencyThemeName?.toLowerCase().trim();\n const courseSubTheme = comp.competencySubThemeName?.toLowerCase().trim();\n \n // Check if any FRAC competency matches this course competency\n for(let i = 0; i < this.planData.competencies.length; i++) {\n const fracComp = this.planData.competencies[i];\n if(fracComp['type']?.toLowerCase() === categoryType?.toLowerCase()) {\n const fracTheme = fracComp['theme']?.toLowerCase().trim();\n const fracSubTheme = fracComp['sub_theme']?.toLowerCase().trim();\n \n // Enhanced cross-matching logic (same as in getMatchedCompetencyStats):\n // 1. Course Theme vs FRAC Theme\n // 2. Course Sub Theme vs FRAC Sub Theme \n // 3. Course Theme vs FRAC Sub Theme\n // 4. Course Sub Theme vs FRAC Theme\n const courseThemeToFracTheme = courseTheme === fracTheme;\n const courseSubThemeToFracSubTheme = courseSubTheme === fracSubTheme;\n const courseThemeToFracSubTheme = courseTheme === fracSubTheme;\n const courseSubThemeToFracTheme = courseSubTheme === fracTheme;\n \n if(courseThemeToFracTheme || courseSubThemeToFracSubTheme || \n courseThemeToFracSubTheme || courseSubThemeToFracTheme) {\n \n let matchType = '';\n if (courseThemeToFracTheme) matchType = 'CourseTheme-to-FRACTheme';\n else if (courseSubThemeToFracSubTheme) matchType = 'CourseSubTheme-to-FRACSubTheme';\n else if (courseThemeToFracSubTheme) matchType = 'CourseTheme-to-FRACSubTheme';\n else if (courseSubThemeToFracTheme) matchType = 'CourseSubTheme-to-FRACTheme';\n \n console.log(`✅ COMPETENCY MATCH FOUND [${matchType}] for ${categoryType}:`, {\n course: { theme: courseTheme, subTheme: courseSubTheme },\n frac: { theme: fracTheme, subTheme: fracSubTheme },\n matchType: matchType\n });\n \n matchedCompetencies.push(fracTheme);\n break; // Found a match, move to next course competency\n }\n }\n }\n }\n });\n });\n \n // Remove duplicates from matched competencies\n matchedCompetencies = [...new Set(matchedCompetencies)];\n \n console.log(`\\n=== ${categoryType.toUpperCase()} COMPETENCY MATCHING ===`);\n console.log(`${categoryType} - All FRAC competencies:`, allCategoryCompetencies);\n console.log(`${categoryType} - Matched from courses:`, matchedCompetencies);\n console.log(`${categoryType} - Match rate: ${matchedCompetencies.length}/${allCategoryCompetencies.length} (${Math.round((matchedCompetencies.length/allCategoryCompetencies.length)*100)}%)`);\n \n // Return unmatched competencies (those in role mapping but not covered by courses)\n return this.compareStringArrays(allCategoryCompetencies, matchedCompetencies);\n }\n\n compareStringArrays(arr1: string[], arr2: string[]) {\n console.log('All competencies in category:', arr1);\n console.log('Matched competencies from courses:', arr2);\n \n // Return items in arr1 that are NOT in arr2 (unmatched competencies)\n const unmatched = arr1.filter(item => !arr2.includes(item));\n console.log('Unmatched competencies:', unmatched);\n \n return unmatched;\n }\n \n addCourse(missingCompetency?: string, competencyType?: string) {\n let dialogData = { ...this.planData };\n \n // If competency parameters are provided, add them to the dialog data\n if (missingCompetency && competencyType) {\n // Parse the theme from the missing competency string (assumes format \"theme-subtheme\" or just \"theme\")\n const theme = missingCompetency.trim();\n \n dialogData.prefillCompetency = {\n type: competencyType,\n theme: theme\n };\n }\n \n const dialogRef = this.dialog.open(AddCourseComponent, {\n width: '1000px',\n data: dialogData,\n panelClass: 'view-cbp-plan-popup',\n minHeight: '400px', // Set minimum height\n maxHeight: '90vh', // Prevent it from going beyond viewport\n disableClose: true // Optional: prevent closing with outside click\n });\n \n dialogRef.afterClosed().subscribe(result => {\n if (result === 'saved') {\n console.log('Course added successfully! Refreshing data...');\n \n // Refresh user courses to include the newly added course\n this.getUserCourse();\n \n // Refresh gap analysis with the latest data\n setTimeout(() => {\n this.updateGapAnalysisAfterCoursesUpdate();\n console.log('Gap analysis refreshed after course addition');\n }, 500); // Small delay to ensure data is loaded\n }\n });\n }\n\n filterOnCompetencyTheme(themeItem) {\n this.selectedThemeFilter = themeItem;\n let themeName = themeItem?.split(\"-\")[0]?.trim();\n let subThemeName = themeItem?.split(\"-\")[1]?.trim();\n \n console.log('Filtering by theme:', themeName, 'subTheme:', subThemeName, 'Tab index:', this.innerTabActiveIndex);\n \n // Get the current competency type based on the active tab\n let competencyType = '';\n if(this.innerTabActiveIndex === 1) {\n competencyType = 'behavioral';\n } else if(this.innerTabActiveIndex === 2) {\n competencyType = 'functional';\n } else if(this.innerTabActiveIndex === 3) {\n competencyType = 'domain';\n }\n \n // Get all available courses using the helper method\n const allAvailableCourses = this.getAllAvailableCourses();\n console.log('Total courses to filter from:', allAvailableCourses.length);\n \n this.filterdCourses = allAvailableCourses.filter(course => {\n if (!course) return false;\n \n // Handle different competency property names\n let competencies = [];\n if (course.competencies && Array.isArray(course.competencies)) {\n competencies = course.competencies;\n } else if (course.competencies_v6 && Array.isArray(course.competencies_v6)) {\n competencies = course.competencies_v6;\n }\n \n if (competencies.length === 0) return false;\n \n // Filter by competency type and theme/subtheme\n return competencies.some(comp => {\n if (!comp) return false;\n \n // Check competency type matches current tab\n let compType = comp?.competencyAreaName?.toLowerCase();\n if (compType === 'behavioural') compType = 'behavioral'; // Normalize spelling\n \n if (compType !== competencyType) return false;\n \n // Check cross-matching like gap analysis: theme vs subtheme and subtheme vs theme\n const compTheme = comp?.competencyThemeName?.toLowerCase()?.trim();\n const compSubTheme = comp?.competencySubThemeName?.toLowerCase()?.trim();\n const searchTheme = themeName?.toLowerCase();\n const searchSubTheme = subThemeName?.toLowerCase();\n \n // Enhanced cross-matching logic like gap analysis:\n // 1. Selected Theme vs Course Theme\n // 2. Selected Sub Theme vs Course Sub Theme \n // 3. Selected Theme vs Course Sub Theme\n // 4. Selected Sub Theme vs Course Theme\n const themeToThemeMatch = searchTheme && compTheme === searchTheme;\n const subThemeToSubThemeMatch = searchSubTheme && compSubTheme === searchSubTheme;\n const themeToSubThemeMatch = searchTheme && compSubTheme === searchTheme;\n const subThemeToThemeMatch = searchSubTheme && compTheme === searchSubTheme;\n \n const isMatch = themeToThemeMatch || subThemeToSubThemeMatch || themeToSubThemeMatch || subThemeToThemeMatch;\n \n // Log matches for debugging (similar to gap analysis)\n if (isMatch) {\n let matchType = '';\n if (themeToThemeMatch) matchType = 'Theme-to-Theme';\n else if (subThemeToSubThemeMatch) matchType = 'SubTheme-to-SubTheme';\n else if (themeToSubThemeMatch) matchType = 'Theme-to-SubTheme';\n else if (subThemeToThemeMatch) matchType = 'SubTheme-to-Theme';\n \n console.log(`✅ FILTER MATCH FOUND [${matchType}]:`, {\n selected: { theme: searchTheme, subTheme: searchSubTheme },\n course: { type: compType, theme: compTheme, subTheme: compSubTheme },\n matchType: matchType\n });\n }\n \n // Match if any of the cross-matching conditions are met\n return isMatch;\n });\n });\n \n console.log('Filtered courses for theme:', themeName, 'Count:', this.filterdCourses.length);\n console.log('Filtered courses:', this.filterdCourses.map(c => c.name || c.course));\n }\n \n clearThemeFilter() {\n this.selectedThemeFilter = '';\n // Reset to category filtered courses by calling the tab change method\n this.onInnerTabChange({ \n index: this.innerTabActiveIndex, \n tab: { textLabel: this.innerTabActiveText } \n } as any);\n console.log('Theme filter cleared, showing all courses for category:', this.innerTabActiveText);\n }\n \n isThemeSelected(theme: string): boolean {\n return this.selectedThemeFilter === theme;\n }\n\n /**\n * Add course for the currently selected theme filter with prefilled competency data\n */\n addCourseForSelectedTheme() {\n if (!this.selectedThemeFilter) {\n console.warn('No theme selected for adding course');\n return;\n }\n\n // Parse theme and sub-theme from selectedThemeFilter (format: \"Theme - SubTheme\")\n const themeParts = this.selectedThemeFilter.split('-');\n const theme = themeParts[0]?.trim();\n const subTheme = themeParts[1]?.trim();\n\n // Get the current competency type based on the active tab\n // Map the tab labels to the format expected by AddCourseComponent\n let competencyType = '';\n if (this.innerTabActiveIndex === 1) {\n competencyType = 'Behavioral'; // Tab label is \"behavioural\"\n } else if (this.innerTabActiveIndex === 2) {\n competencyType = 'Functional'; // Tab label is \"functional\"\n } else if (this.innerTabActiveIndex === 3) {\n competencyType = 'Domain'; // Tab label is \"domain\"\n }\n\n console.log('Tab mapping - innerTabActiveIndex:', this.innerTabActiveIndex, \n 'innerTabActiveText:', this.innerTabActiveText, \n 'mapped competencyType:', competencyType);\n\n console.log('Adding course for missing competency:', {\n competencyType,\n theme,\n subTheme,\n selectedThemeFilter: this.selectedThemeFilter\n });\n\n // Create dialog data with prefilled competency information\n let dialogData = { ...this.planData };\n dialogData.prefillCompetency = {\n type: competencyType,\n theme: theme,\n subTheme: subTheme || '' // Include sub-theme if available\n };\n\n const dialogRef = this.dialog.open(AddCourseComponent, {\n width: '800px',\n data: dialogData,\n panelClass: 'view-cbp-plan-popup',\n minHeight: '400px',\n maxHeight: '90vh',\n disableClose: true\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result === 'saved') {\n console.log('Course added successfully for competency! Refreshing data...');\n \n // Refresh user courses to include the newly added course\n this.getUserCourse();\n \n // Update gap analysis after course addition\n this.updateGapAnalysisAfterCoursesUpdate();\n }\n });\n }\n\n getDuration(time:any) {\n return this.sharedService.convert(time);\n }\n\n\n getBehaviouralMatched() {\n this.behaviouralMatched = []\n console.log('this.planData.competencies', this.planData)\n console.log('this.behaviouralNotMatched', this.behaviouralNotMatched)\n this.planData.competencies.map((item)=>{\n if(item && item?.type === 'Behavioral' && this.behaviouralNotMatched.indexOf(item?.theme?.toLowerCase()) < 0) {\n this.behaviouralMatched.push(item)\n }\n })\n\n console.log('this.behaviouralMatched--', this.behaviouralMatched)\n }\n\n getFunctionalMatched() {\n this.functionalMatched = []\n this.planData.competencies.map((item)=>{\n if(item && item?.type === 'Functional' && this.functionalNotMatched.indexOf(item?.theme?.toLowerCase()) < 0) {\n this.functionalMatched.push(item)\n }\n })\n return this.functionalMatched\n }\n\n getDomainMatched() {\n this.domainMatched = []\n this.planData.competencies.map((item)=>{\n if(item && item?.type === 'Domain' && this.domainNotMatched.indexOf(item?.theme?.toLowerCase()) < 0) {\n this.domainMatched.push(item)\n }\n })\n console.log('this.domainMatched--', this.domainMatched)\n }\n\n downloadPDF() {\n this.isPDFDownload = true\n this.loading = true\n const element = this.pdfContent.nativeElement;\n\n // Wait for images to load\n const images = element.querySelectorAll('img');\n const promises = Array.from(images).map((img: HTMLImageElement) => {\n if (img.complete) return Promise.resolve();\n return new Promise(resolve => img.onload = resolve);\n });\n\n Promise.all(promises).then(() => {\n const options = {\n margin: 0.20,\n filename: 'Gap Analysis.pdf',\n image: { type: 'jpeg', quality: 0.98 },\n html2canvas: {\n scale: 2,\n useCORS: true,\n scrollY: 0,\n },\n jsPDF: {\n unit: 'in',\n format: 'a4',\n orientation: 'portrait'\n },\n pagebreak: {\n mode: ['css', 'legacy'],\n before: '.page-break',\n avoid: ['.no-break']\n }\n };\n\n html2pdf().from(element).set(options).save()\n setTimeout(() => {\n this.isPDFDownload = false\n this.loading = false;\n }, 3000); \n });\n }\n\n\n redirectToToc(item) {\n if(item?.public_link) {\n window.open(item?.public_link, '_blank')\n } else {\n let url = `https://portal.igotkarmayogi.gov.in/app/toc/${item?.identifier}/overview?`\n window.open(url, '_blank')\n }\n \n }\n\n /**\n * Initialize gap analysis stats after initial data load\n */\n initializeGapAnalysisStats() {\n // Set a small timeout to ensure all async operations complete\n setTimeout(() => {\n if (this.filterdCourses && this.filterdCourses.length > 0) {\n this.gapAnalysisStats();\n }\n }, 100);\n }\n\n /**\n * Update gap analysis stats after courses are updated (like suggested courses added)\n */\n updateGapAnalysisAfterCoursesUpdate() {\n // Don't modify originalData - it should remain as AI recommended courses only\n // The gap analysis already properly includes all course types\n \n // Recalculate gap analysis stats\n this.gapAnalysisStats();\n }\n\n /**\n * Regenerate course recommendations by deleting existing recommendations and generating new ones\n */\n async regenerateCourseRecommendations() {\n if (this.isRegenerating) {\n return; // Prevent multiple simultaneous regenerations\n }\n\n try {\n this.isRegenerating = true;\n \n // Show confirmation dialog\n const confirmed = await this.showConfirmationDialog();\n \n if (!confirmed) {\n this.isRegenerating = false;\n return;\n }\n\n console.log('Starting course recommendation regeneration...');\n \n // Set regeneration progress state\n this.isRegeneratingWithProgress = true;\n this.dataLoaded = false; // Hide main content during regeneration\n \n // Step 1: Delete existing course recommendations\n await this.deleteCourseRecommendations();\n \n // Step 2: Generate new course recommendations\n await this.generateNewCourseRecommendations();\n \n // Step 3: Refresh the current data\n this.refreshComponent();\n \n console.log('Course recommendation regeneration completed successfully');\n \n // Show success message\n this.snackBar.open('Course recommendations regenerated successfully!', 'Close', {\n duration: 5000,\n panelClass: ['success-snackbar']\n });\n \n } catch (error) {\n console.error('Error during course recommendation regeneration:', error);\n \n // Show error message\n this.snackBar.open('Failed to regenerate course recommendations. Please try again.', 'Close', {\n duration: 5000,\n panelClass: ['error-snackbar']\n });\n } finally {\n this.isRegenerating = false;\n this.isRegeneratingWithProgress = false;\n this.dataLoaded = true; // Ensure main content is shown after regeneration\n }\n }\n\n /**\n * Show confirmation dialog for regenerate action\n */\n private showConfirmationDialog(): Promise<boolean> {\n return new Promise((resolve) => {\n // Create a custom confirmation dialog\n const dialogRef = this.dialog.open(RegenerateConfirmationDialog, {\n width: '450px',\n panelClass: 'regenerate-confirmation-dialog',\n disableClose: true\n });\n\n dialogRef.afterClosed().subscribe(result => {\n resolve(result === true);\n });\n });\n }\n\n /**\n * Delete existing course recommendations for the current role mapping\n */\n private deleteCourseRecommendations(): Promise<any> {\n return new Promise((resolve, reject) => {\n const roleMapId = this.planData?.id;\n \n if (!roleMapId) {\n reject(new Error('Role mapping ID not found'));\n return;\n }\n\n console.log('Deleting course recommendations for role mapping:', roleMapId);\n \n this.sharedService.deleteCourseRecommendations(roleMapId).subscribe({\n next: (response) => {\n console.log('Course recommendations deleted successfully:', response);\n resolve(response);\n },\n error: (error) => {\n console.error('Error deleting course recommendations:', error);\n reject(error);\n }\n });\n });\n }\n\n /**\n * Generate new course recommendations during regeneration\n */\n private generateNewCourseRecommendations(): Promise<any> {\n console.log('Generating new course recommendations...');\n return this.getRecommendedCourseForRegeneration(this.planData.id);\n }\n\n /**\n * Enhanced course generation specifically for regeneration with progressive loading\n */\n private getRecommendedCourseForRegeneration(role_mapping_id: string): Promise<any> {\n return new Promise((resolve, reject) => {\n // Start the progressive loading simulation for regeneration\n this.startRegenerativeProgressiveLoading();\n \n // Make the actual API call\n // this.sharedService.getRecommendedCourse(role_mapping_id).subscribe({\n // next: (response) => {\n // // Stop progressive loading and show completion\n // this.isRegeneratingWithProgress = false; // This will stop the interval\n // this.progressPercentage = 100;\n // this.currentProcessingStage = 'Course recommendations regenerated successfully!';\n \n // // Clear the loading state after showing completion\n // setTimeout(() => {\n // this.currentProcessingStage = '';\n // this.progressPercentage = 0;\n // resolve(response);\n // }, 2000);\n // },\n // error: (error) => {\n // // Stop progressive loading\n // this.isRegeneratingWithProgress = false;\n // this.currentProcessingStage = '';\n // this.progressPercentage = 0;\n \n // // Handle specific error cases\n // if (error.status === 409 || error.error?.detail?.includes('already exists')) {\n // // Course recommendations already exist - this is normal\n // console.log('Course recommendations already exist, loading existing data...');\n \n // this.currentProcessingStage = 'Loading existing course recommendations...';\n \n // // Try to get existing data\n // this.sharedService.getRecommendedCourse(role_mapping_id).subscribe({\n // next: (existingResponse) => {\n // console.log('Successfully loaded existing course recommendations');\n // this.progressPercentage = 100;\n // this.currentProcessingStage = 'Loaded existing course recommendations successfully!';\n \n // setTimeout(() => {\n // this.currentProcessingStage = '';\n // this.progressPercentage = 0;\n // resolve(existingResponse);\n // }, 2000);\n // },\n // error: (loadError) => {\n // console.error('Failed to load existing course recommendations:', loadError);\n // this.currentProcessingStage = '';\n // this.progressPercentage = 0;\n // reject(loadError);\n // }\n // });\n // } else {\n // console.error('Error during course recommendation regeneration:', error);\n // reject(error);\n // }\n // }\n // });\n this.isRegeneratingWithProgress = true;\n this.progressPercentage = 0;\n this.currentProcessingStage = 'Generating course recommendations...';\n \n interval(5000)\n .pipe(\n switchMap(() =>\n this.sharedService.getRecommendedCourse(role_mapping_id).pipe(\n catchError(error => {\n // Pass error through observable so polling logic can inspect it\n return of({ error });\n })\n )\n ),\n \n tap(res => console.log(\"Polling result:\", res)),\n \n /**\n * ⬇️ STOP POLLING only when:\n * - SUCCESS → res.status === COMPLETED\n * - ERROR → conflict / already exists\n */\n takeWhile(res => {\n if (res?.status === 'COMPLETED') return false; // Stop\n if (res?.error?.status === 409) return false; // Stop\n if (res?.error?.error?.detail?.includes('already exists')) return false; // Stop\n return true; // Keep polling\n }, true) // include final emission\n )\n .subscribe({\n next: (res) => {\n /** -------------------------------\n * SUCCESS CASE (status COMPLETED)\n -------------------------------- */\n if (res?.status === 'COMPLETED') {\n this.isRegeneratingWithProgress = false;\n this.progressPercentage = 100;\n this.currentProcessingStage = 'Course recommendations regenerated successfully!';\n \n setTimeout(() => {\n this.currentProcessingStage = '';\n this.progressPercentage = 0;\n resolve(res);\n }, 2000);\n \n return;\n }\n \n /** -----------------------------------\n * ERROR CASE (409 / already exists)\n ------------------------------------ */\n if (res?.error) {\n const error = res.error;\n \n if (error.status === 409 || error?.error?.detail?.includes('already exists')) {\n \n this.currentProcessingStage = 'Loading existing course recommendations...';\n \n this.sharedService.getRecommendedCourse(role_mapping_id).subscribe({\n next: (existingData) => {\n this.progressPercentage = 100;\n this.currentProcessingStage = 'Loaded existing course recommendations successfully!';\n \n setTimeout(() => {\n this.currentProcessingStage = '';\n this.progressPercentage = 0;\n resolve(existingData);\n }, 2000);\n },\n error: loadError => reject(loadError)\n });\n \n return;\n }\n \n /** Any other error → stop & reject */\n this.isRegeneratingWithProgress = false;\n this.currentProcessingStage = '';\n this.progressPercentage = 0;\n reject(error);\n return;\n }\n \n /** ------------------------------\n * STILL PROCESSING (keep polling)\n ------------------------------- */\n this.progressPercentage = Math.min(this.progressPercentage + 10, 95);\n this.currentProcessingStage = 'Still processing course recommendations...';\n },\n \n error: err => reject(err)\n });\n });\n }\n\n \n\n // Progressive loading methods for regeneration\n startRegenerativeProgressiveLoading() {\n this.currentProcessingStage = this.processingStages[0];\n this.progressPercentage = 0;\n this.stageStartTime = Date.now();\n this.simulateRegenerativeProgressiveStages();\n }\n\n simulateRegenerativeProgressiveStages() {\n let currentStageIndex = 0;\n const totalDuration = 60000; // 60 seconds estimated duration\n const stageInterval = totalDuration / this.processingStages.length;\n \n const progressInterval = setInterval(() => {\n // Stop if regeneration is complete\n if (!this.isRegeneratingWithProgress) {\n clearInterval(progressInterval);\n return;\n }\n \n const elapsed = Date.now() - this.stageStartTime;\n const currentStageProgress = (elapsed % stageInterval) / stageInterval;\n const stageIndex = Math.min(Math.floor(elapsed / stageInterval), this.processingStages.length - 1);\n \n // Update stage if needed\n if (stageIndex !== currentStageIndex && stageIndex < this.processingStages.length) {\n currentStageIndex = stageIndex;\n this.currentProcessingStage = this.processingStages[stageIndex];\n }\n \n // Calculate overall progress (each stage is worth ~16.67%)\n const baseProgress = (stageIndex / this.processingStages.length) * 100;\n const stageProgress = (currentStageProgress / this.processingStages.length) * 100;\n this.progressPercentage = Math.min(Math.round(baseProgress + stageProgress), 95);\n }, 1000);\n }\n\n /**\n * Refresh the component data after regeneration\n */\n private refreshComponent() {\n console.log('Refreshing component data...');\n \n // Reset all filters and selections\n this.selectedThemeFilter = '';\n this.selectFilterCourses = [];\n this.filterdCourses = [];\n this.originalFilteredCourses = [];\n this.suggestedCourses = [];\n this.userAddedCourses = [];\n \n // Reset tab states\n this.innerTabActiveIndex = 0;\n this.outerTabActiveIndex = 0;\n \n // Call the data loading methods directly to avoid resetting dataLoaded\n this.loadComponentData();\n }\n\n /**\n * Load component data (separated from ngOnInit for reuse)\n */\n private loadComponentData() {\n this.getRecommendedCourseWithProgress(this.planData.id).then((res) => {\n console.log('res', res)\n this.recommended_course_id = res.id\n let allCoures = []\n if (res && res.filtered_courses && res.filtered_courses.length) {\n res?.filtered_courses.forEach((item) => {\n if (item?.relevancy >= 85) {\n allCoures.push(item)\n }\n })\n this.originalData = allCoures\n this.filterdCourses = allCoures\n }\n\n console.log('this.filterdCourses', this.filterdCourses)\n this.getCourses()\n this.getSuggestedCourse()\n \n // Initialize gap analysis stats after courses are loaded\n this.initializeGapAnalysisStats()\n this.getUserCourse()\n \n // Mark data as loaded after all initial operations\n this.dataLoaded = true;\n }).catch((error) => {\n console.error('Error getting recommended courses:', error);\n if (error.status === 401) {\n console.log('Unauthorized access - user will be redirected to login');\n } else if (error.status !== 409) {\n // Don't log error for 409 (already exists) as it's handled in the method\n console.error('Failed to load course recommendations');\n }\n // Mark data as loaded even if there's an error to show the dialog content\n this.dataLoaded = true;\n });\n }\n\n // Progressive loading methods for course generation\n startProgressiveLoading() {\n this.currentProcessingStage = this.processingStages[0];\n this.progressPercentage = 0;\n this.stageStartTime = Date.now();\n this.simulateProgressiveStages();\n }\n\n simulateProgressiveStages() {\n let currentStageIndex = 0;\n const totalDuration = 60000; // 60 seconds estimated duration\n const stageInterval = totalDuration / this.processingStages.length;\n \n const progressInterval = setInterval(() => {\n const elapsed = Date.now() - this.stageStartTime;\n const currentStageProgress = (elapsed % stageInterval) / stageInterval;\n const stageIndex = Math.min(Math.floor(elapsed / stageInterval), this.processingStages.length - 1);\n \n // Update stage if needed\n if (stageIndex !== currentStageIndex && stageIndex < this.processingStages.length) {\n currentStageIndex = stageIndex;\n this.currentProcessingStage = this.processingStages[stageIndex];\n }\n \n // Calculate overall progress (each stage is worth ~16.67%)\n const baseProgress = (stageIndex / this.processingStages.length) * 100;\n const stageProgress = (currentStageProgress / this.processingStages.length) * 100;\n this.progressPercentage = Math.min(Math.round(baseProgress + stageProgress), 95);\n \n // Clear interval when loading stops\n if (!this.loading) {\n clearInterval(progressInterval);\n this.progressPercentage = 100;\n this.currentProcessingStage = 'Course recommendations generated successfully!';\n }\n }, 1000);\n }\n\n // Enhanced course generation with progressive loading\n getRecommendedCourseWithProgress(role_mapping_id: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.loading = true;\n this.currentProcessingStage = 'Generating course recommendations...';\n this.progressPercentage = 30;\n this.startProgressiveLoading();\n \n interval(5000) // ⏱ poll every 5 seconds\n .pipe(\n tap(() => {\n this.currentProcessingStage = 'Processing...';\n }),\n switchMap(() => this.sharedService.getRecommendedCourse(role_mapping_id)),\n\n // Continue polling while status !== COMPLETED\n takeWhile((response: any) => response?.status !== 'COMPLETED', true),\n\n finalize(() => {\n this.loading = false;\n })\n )\n .subscribe({\n next: (response: any) => {\n if (response?.status === 'COMPLETED') {\n\n this.progressPercentage = 100;\n this.currentProcessingStage = 'Course recommendations generated successfully!';\n\n setTimeout(() => {\n this.currentProcessingStage = '';\n this.progressPercentage = 0;\n }, 2000);\n\n this.snackBar.open('Recommendations ready!', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n\n resolve(response);\n }\n },\n\n error: (error) => {\n this.loading = false;\n this.currentProcessingStage = '';\n this.progressPercentage = 0;\n\n if (error.status === 409 || error.error?.detail?.includes('already exists')) {\n this.snackBar.open('Course recommendations already exist.', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n\n resolve(null); // not a real error\n } else {\n this.snackBar.open('Failed to generate course recommendations.', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n reject(error);\n }\n }\n });\n });\n }\n\n resetFilters(): void {\n this.filterForm.reset({\n competency: [],\n rating: [],\n language: [],\n duration: [],\n provider: []\n });\n \n // Reset filtered dropdown lists\n this.filteredCompetency = [...this.competenciesType];\n this.filteredRatings = [...this.ratings];\n this.filteredLanguages = [...this.languages];\n this.filteredDurations = [...this.durations];\n this.filteredProviders = [...this.providers];\n \n // Reset course list\n this.filterdCourses = [...this.fullCourseList];\n // this.fullCourseList.forEach((item)=>{\n // if(item && item.organisation && item.organisation.length) {\n // if(this.filteredProviders.indexOf(item.organisation[0]) < 0) {\n // this.filteredProviders.push(item.organisation[0])\n // }\n \n // }\n // })\n this.getAllAvailableCourses()\n }\n\n filterList(value: string, type: string) {\n const search = value.toLowerCase();\n\n switch (type) {\n case 'competency':\n this.filteredCompetency = this.competenciesType.filter(v => v.toLowerCase().includes(search));\n break;\n case 'rating':\n this.filteredRatings = this.ratings.filter(v => v.toLowerCase().includes(search));\n break;\n case 'language':\n this.filteredLanguages = this.languages.filter(v => v.toLowerCase().includes(search));\n break;\n case 'duration':\n this.filteredDurations = this.durations.filter(v => v.toLowerCase().includes(search));\n break;\n case 'provider':\n this.filteredProviders = this.providers.filter(v => v.toLowerCase().includes(search));\n break;\n }\n }\n\n normalizeCompetency(value: string): string {\n if (!value) return '';\n const v = value.toLowerCase();\n \n if (v === 'all') return 'all';\n if (v.includes('behavioural') || v.includes('behavioral')) return 'behavioral';\n if (v.includes('functional')) return 'functional';\n if (v.includes('domain')) return 'domain';\n \n return '';\n }\n\n applyFilters(): void {\n const {\n competency = [],\n rating = [],\n language = [],\n duration = [],\n provider = []\n } = this.filterForm.value;\n\n console.log('this.fullCourseList--',this.fullCourseList)\n \n this.filterdCourses = this.fullCourseList.filter(course => {\n \n /* ---------------- Competency ---------------- */\n const courseCompetencies = [\n ...(course.competencies || []),\n ...(course.competencies_v6 || [])\n ];\n \n const selectedCompetencies = competency\n .map((c: string) => this.normalizeCompetency(c))\n .filter(c => c !== '');\n\n const competencyMatch =\n selectedCompetencies.length === 0 ||\n selectedCompetencies.includes('all') ||\n courseCompetencies.some((c: any) =>\n selectedCompetencies.includes(\n this.normalizeCompetency(c.competencyAreaName)\n )\n );\n \n /* ---------------- Rating ---------------- */\n const ratingMatch =\n rating.length === 0 ||\n this.matchRating(course, rating);\n \n /* ---------------- Language ---------------- */\n const languageMatch =\n language.length === 0 ||\n language.some((l: string) =>\n course.language === l ||\n course.language?.includes?.(l) ||\n course.language?.[0]?.includes?.(l)\n );\n \n /* ---------------- Duration ---------------- */\n const durationMatch =\n duration.length === 0 ||\n this.matchDuration(course.duration, duration);\n \n /* ---------------- Provider ---------------- */\n const providerMatch =\n provider.length === 0 ||\n provider.some((p: string) =>\n course.organisation?.includes(p)\n );\n \n return (\n competencyMatch &&\n ratingMatch &&\n languageMatch &&\n durationMatch &&\n providerMatch\n );\n });\n }\n\n matchRating(course: any, selectedRatings: string[]): boolean {\n if (!selectedRatings || selectedRatings.length === 0) {\n return true; // no filter selected → match everything\n }\n \n let rating = null;\n \n // 1️⃣ Use avgRating if available\n if (course.avgRating != null && !isNaN(course.avgRating)) {\n rating = Number(course.avgRating);\n } \n // 2️⃣ Map relevancy if avgRating missing\n else if (course.relevancy != null && !isNaN(course.relevancy)) {\n const rel = Number(course.relevancy);\n if (rel >= 90) rating = 4.5;\n else if (rel >= 80) rating = 4.0;\n else if (rel >= 70) rating = 3.5;\n else if (rel >= 50) rating = 2.5;\n else rating = 1.0;\n }\n \n // 3️⃣ No usable rating → exclude\n if (rating === null) return false;\n \n // 4️⃣ Match selected rating ranges\n return selectedRatings.some(r => {\n switch (r) {\n case '4.5 and above': return rating >= 4.5;\n case '4.0 and above': return rating >= 4.0;\n case '3.5 and above': return rating >= 3.5;\n case '2.5 and above': return rating >= 2.5;\n case '1 and above': return rating >= 1.0;\n default: return false;\n }\n });\n }\n \n\n matchDuration(durationInSeconds: number | string, selectedRanges: string[]): boolean {\n const hours = Number(durationInSeconds) / 3600;\n \n return selectedRanges.some(range => {\n switch (range) {\n case '< 1 Hour':\n return hours < 1;\n case '1-5 Hours':\n return hours >= 1 && hours <= 5;\n case '5+ Hours':\n return hours > 5;\n default:\n return true;\n }\n });\n }\n}\n\n// Confirmation Dialog Component\n@Component({\n selector: 'regenerate-confirmation-dialog',\n template: `\n <div class=\"confirmation-dialog-container\">\n <div class=\"dialog-header\">\n <mat-icon class=\"warning-icon\">refresh</mat-icon>\n <h2 mat-dialog-title>Regenerate Course Recommendations</h2>\n </div>\n \n <mat-dialog-content class=\"dialog-content\">\n <p class=\"main-message\">\n This will delete all current course recommendations and generate new ones based on the latest role mapping.\n </p>\n <p class=\"sub-message\">\n Are you sure you want to continue?\n </p>\n </mat-dialog-content>\n \n <mat-dialog-actions class=\"dialog-actions\">\n <button mat-button (click)=\"onCancel()\" class=\"cancel-btn\">\n Cancel\n </button>\n <button mat-raised-button color=\"primary\" (click)=\"onConfirm()\" class=\"confirm-btn\">\n <mat-icon>refresh</mat-icon>\n Yes, Regenerate\n </button>\n </mat-dialog-actions>\n </div>\n `,\n styles: [`\n .confirmation-dialog-container {\n padding: 0;\n }\n \n .dialog-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 24px 24px 16px 24px;\n border-bottom: 1px solid #e0e0e0;\n }\n \n .warning-icon {\n font-size: 24px;\n width: 24px;\n height: 24px;\n color: #ff9800;\n }\n \n h2 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #333;\n }\n \n .dialog-content {\n padding: 24px;\n }\n \n .main-message {\n font-size: 16px;\n color: #333;\n margin: 0 0 12px 0;\n line-height: 1.5;\n }\n \n .sub-message {\n font-size: 14px;\n color: #666;\n margin: 0;\n font-weight: 500;\n }\n \n .dialog-actions {\n padding: 16px 24px 24px 24px;\n gap: 12px;\n justify-content: flex-end;\n }\n \n .cancel-btn {\n color: #666;\n }\n \n .confirm-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n \n .mat-icon {\n font-size: 18px;\n width: 18px;\n height: 18px;\n margin: 0;\n }\n }\n `]\n})\nexport class RegenerateConfirmationDialog {\n constructor(\n public dialogRef: MatDialogRef<RegenerateConfirmationDialog>\n ) {}\n\n onCancel(): void {\n this.dialogRef.close(false);\n }\n\n onConfirm(): void {\n this.dialogRef.close(true);\n }\n\n \n}\n","<div class=\"view-cbp-plan\">\n <div class=\"popup-container\">\n \n <!-- Initial Loading Screen (for initial load and regeneration) -->\n <div class=\"initial-loading-container\" *ngIf=\"!dataLoaded || isRegeneratingWithProgress\">\n <div class=\"loading-content\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n <div class=\"loading-text mt-3\">\n <p class=\"main-message\">{{ currentProcessingStage || (isRegeneratingWithProgress ? 'Regenerating course recommendations...' : 'Loading course recommendations...') }}</p>\n <div class=\"progress-details\" *ngIf=\"progressPercentage > 0\">\n <div class=\"progress-indicator\">\n <div class=\"progress-bar-container\">\n <div class=\"progress-bar\" \n [style.width.%]=\"progressPercentage\">\n </div>\n </div>\n <small class=\"progress-text\">{{ progressPercentage }}% Complete</small>\n </div>\n <small class=\"time-estimate\">\n Real-time course generation in progress. This may take 1-2 minutes.\n </small>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Main Content -->\n <div class=\"main-content\" *ngIf=\"dataLoaded && !isRegeneratingWithProgress\">\n <div class=\"popup-header\">\n <div class=\"header-left\">\n <div class=\"heading\">Save Courses (<span>{{sharedService?.cbpPlanFinalObj?.ministry?.orgName}} <span\n *ngIf=\"planData?.designation_name \">/ {{planData?.designation_name}}</span></span>)</div>\n </div>\n <div class=\"header-actions\">\n <button class=\"regenerate-btn\" (click)=\"regenerateCourseRecommendations()\"\n [disabled]=\"isRegenerating\"\n mat-raised-button color=\"primary\">\n <mat-icon *ngIf=\"!isRegenerating\">refresh</mat-icon>\n <mat-spinner *ngIf=\"isRegenerating\" diameter=\"20\"></mat-spinner>\n <span>{{isRegenerating ? 'Regenerating...' : 'Regenerate Recommendations'}}</span>\n </button>\n <div class=\"cursor-pointer close-btn\" (click)=\"closeDialog()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n </div>\n <div class=\"section-container mt-4\">\n <mat-tab-group (selectedTabChange)=\"onOuterTabChange($event)\">\n <!-- First Main Tab -->\n <mat-tab label=\"course recommendation\">\n <!-- Nested Tabs -->\n <!-- <mat-tab-group (selectedTabChange)=\"onInnerTabChange($event)\">\n <mat-tab label=\"all\">\n\n </mat-tab>\n <mat-tab label=\"behavioural\">\n\n </mat-tab>\n <mat-tab label=\"functional\">\n\n </mat-tab>\n <mat-tab label=\"domain\">\n\n </mat-tab>\n </mat-tab-group> -->\n </mat-tab>\n\n <!-- Second Main Tab -->\n <mat-tab label=\"gap analysis\">\n <!-- <p>Gap analysis content goes here</p> -->\n </mat-tab>\n </mat-tab-group>\n <form [formGroup]=\"filterForm\" class=\"filters-container\">\n <div class=\"role-mapping-container\"\n *ngIf=\"outerTabActiveIndex === 0 && (innerTabActiveIndex === 0 || innerTabActiveIndex === 1 || innerTabActiveIndex === 2 || innerTabActiveIndex === 3 )\">\n <div class=\"container\">\n <div class=\"section-header-improved mt-3\">\n <div class=\"search-and-buttons-container\">\n <div>\n <label>Search Courses</label>\n </div> \n <div class=\"search-container-compact\">\n <div class=\"rsearch\">\n <mat-icon class=\"search-icon\">search</mat-icon>\n <input class=\"sinput-compact\" [(ngModel)]=\"searchText\"\n (input)=\"applyFilter($event.target.value);\"\n placeholder=\"Search Courses\" type=\"text\">\n </div>\n </div>\n \n </div>\n \n\n <div class=\"search-and-buttons-container\">\n <div style=\"margin-left: 10px;\">\n <label>Select Competency</label>\n </div> \n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>\n {{ filterForm.value.competency?.length ? '' : 'Competency' }}\n </mat-label>\n \n <mat-select\n formControlName=\"competency\"\n multiple\n panelClass=\"select-search-panel\"\n (selectionChange)=\"applyFilters()\">\n \n <!-- Search box -->\n <input style=\"border:1px solid #ccc; padding: 5px;width: 92%;margin: 5px;\"\n matInput\n placeholder=\"Search Competency\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (keyup)=\"filterList($any($event.target).value, 'competency')\" />\n \n <!-- Values -->\n <mat-option\n *ngFor=\"let r of filteredCompetency\"\n [value]=\"r\">\n {{ r }}\n </mat-option>\n \n </mat-select>\n </mat-form-field>\n </div> \n \n </div>\n <div class=\"search-and-buttons-container\">\n <div style=\"margin-left: 10px;\">\n <label>Select Rating</label>\n </div> \n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>\n {{ filterForm.value.rating?.length ? '' : 'Rating' }}\n </mat-label>\n \n <mat-select\n formControlName=\"rating\"\n multiple\n panelClass=\"select-search-panel\"\n (selectionChange)=\"applyFilters()\">\n \n <!-- Search box -->\n <input style=\"border:1px solid #ccc; padding: 5px;width: 92%;margin: 5px;\"\n matInput\n placeholder=\"Search Reatings\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (keyup)=\"filterList($any($event.target).value, 'rating')\" />\n \n <!-- Values -->\n <mat-option\n *ngFor=\"let r of filteredRatings\"\n [value]=\"r\">\n {{ r }}\n </mat-option>\n \n </mat-select>\n </mat-form-field>\n </div>\n </div>\n \n \n \n \n </div>\n <div class=\"section-header-improved-sec-2 mt-4\">\n <div class=\"search-and-buttons-container\">\n <div style=\"margin-left: 10px;\">\n <label>Select Language</label>\n </div> \n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>\n {{ filterForm.value.language?.length ? '' : 'Language' }}\n </mat-label>\n \n <mat-select\n formControlName=\"language\"\n multiple\n panelClass=\"select-search-panel\"\n (selectionChange)=\"applyFilters()\">\n \n <!-- Search box -->\n <input style=\"border:1px solid #ccc; padding: 5px;width: 92%;margin: 5px;\"\n matInput\n placeholder=\"Search Languages\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (keyup)=\"filterList($any($event.target).value, 'language')\" />\n \n <!-- Values -->\n <mat-option\n *ngFor=\"let r of filteredLanguages\"\n [value]=\"r\">\n {{ r }}\n </mat-option>\n \n </mat-select>\n </mat-form-field>\n </div>\n </div>\n <div class=\"search-and-buttons-container\">\n <div style=\"margin-left: 10px;\">\n <label>Select Duration</label>\n </div> \n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>\n {{ filterForm.value.duration?.length ? '' : 'Duration' }}\n </mat-label>\n \n <mat-select\n formControlName=\"duration\"\n multiple\n panelClass=\"select-search-panel\"\n (selectionChange)=\"applyFilters()\">\n \n <!-- Search box -->\n <input style=\"border:1px solid #ccc; padding: 5px;width: 92%;margin: 5px;\"\n matInput\n placeholder=\"Search Duration\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (keyup)=\"filterList($any($event.target).value, 'duration')\" />\n \n <!-- Values -->\n <mat-option\n *ngFor=\"let r of filteredDurations\"\n [value]=\"r\">\n {{ r }}\n </mat-option>\n \n </mat-select>\n </mat-form-field>\n </div>\n </div>\n <div class=\"search-and-buttons-container\">\n <div style=\"margin-left: 10px;\">\n <label>Select Provider</label>\n </div> \n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>\n {{ filterForm.value.provider?.length ? '' : 'Provider' }}\n </mat-label>\n \n <mat-select\n formControlName=\"provider\"\n multiple\n panelClass=\"select-search-panel\"\n (selectionChange)=\"applyFilters()\">\n \n <!-- Search box -->\n <input style=\"border:1px solid #ccc; padding: 5px;width: 92%;margin: 5px;\"\n matInput\n placeholder=\"Search Provider\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (keyup)=\"filterList($any($event.target).value, 'provider')\" />\n \n <!-- Values -->\n <mat-option\n *ngFor=\"let r of filteredProviders\"\n [value]=\"r\">\n {{ r }}\n </mat-option>\n \n </mat-select>\n </mat-form-field>\n </div>\n </div>\n <div style=\"margin-top: 45px;margin-left: 20px;\">\n <input class=\"btn-active\" type=\"button\" value=\"Reset All Filters\"\n (click)=\"resetFilters()\" />\n </div>\n </div>\n <div class=\"mt-4\">\n <div style=\"font-size:16px;font-weight:bold;color:#000\">\n Filtered Course Count : {{filterdCourses?.length}}\n </div>\n </div>\n <div class=\"mt-5 sub-heading select-all-container\" *ngIf=\"filterdCourses?.length\">\n <div style=\"margin-left: 16px;\">\n <mat-checkbox [checked]=\"false\" (change)=\"selectAllCourses($event)\">Select All\n Courses</mat-checkbox>\n </div>\n <div class=\"btn-group-compact\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Suggest More Course From iGOT\"\n (click)=\"suggestMoreCourses()\" />\n </div>\n <div class=\"pl-2\">\n <input [disabled]=\"selectFilterCourses?.length > 0 ? false : true\"\n [ngClass]=\"selectFilterCourses?.length > 0 ? 'btn-active' : 'btn-disable'\"\n type=\"button\" [value]=\"mode === 'add' ? 'Save Courses' : 'Update Courses'\"\n (click)=\"saveCourses()\" />\n </div>\n </div>\n </div>\n <div class=\"disclaimer-container mt-2\" *ngIf=\"filterdCourses?.length\">\n <div class=\"disclaimer-message mt-4\">\n <strong>Disclaimer:</strong> Please verify the public course URL before adding it to the plan.\n </div>\n </div>\n <div class=\"mt-2\">\n\n <div class=\"course-list-container\">\n <div\n [ngClass]=\"innerTabActiveIndex > 0 ? 'course-list-container-flex':'course-list-container-right-flex' \">\n <div *ngIf=\"innerTabActiveIndex > 0\"\n [ngClass]=\"innerTabActiveIndex > 0 ? 'left-panel':''\">\n <ng-container *ngIf=\"innerTabActiveIndex === 1\">\n <div class=\"sub-heading\">\n <p>Competencies in Behavioural</p>\n </div>\n <div class=\"theme-filter-controls mb-2\" *ngIf=\"selectedThemeFilter\">\n <button class=\"clear-filter-btn\" (click)=\"clearThemeFilter()\">\n <mat-icon>clear</mat-icon> Clear Filter\n </button>\n </div>\n <div (click)=\"filterOnCompetencyTheme(item)\"\n class=\"category-list-item cursor-pointer mt-2\"\n [ngClass]=\"{'selected-theme': isThemeSelected(item)}\"\n *ngFor=\"let item of competencyMatchedByCategory\">\n {{item}}\n </div>\n </ng-container>\n <ng-container *ngIf=\"innerTabActiveIndex === 2\">\n <div class=\"sub-heading\">\n <p>Competencies in Functional</p>\n </div>\n <div class=\"theme-filter-controls mb-2\" *ngIf=\"selectedThemeFilter\">\n <button class=\"clear-filter-btn\" (click)=\"clearThemeFilter()\">\n <mat-icon>clear</mat-icon> Clear Filter\n </button>\n </div>\n <div (click)=\"filterOnCompetencyTheme(item)\"\n class=\"category-list-item cursor-pointer mt-2\"\n [ngClass]=\"{'selected-theme': isThemeSelected(item)}\"\n *ngFor=\"let item of competencyMatchedByCategory\">\n {{item}}\n </div>\n </ng-container>\n <ng-container *ngIf=\"innerTabActiveIndex === 3\">\n <div class=\"sub-heading\">\n <p>Competencies in Domain</p>\n </div>\n <div class=\"theme-filter-controls mb-2\" *ngIf=\"selectedThemeFilter\">\n <button class=\"clear-filter-btn\" (click)=\"clearThemeFilter()\">\n <mat-icon>clear</mat-icon> Clear Filter\n </button>\n </div>\n <div (click)=\"filterOnCompetencyTheme(item)\"\n class=\"category-list-item cursor-pointer mt-2\"\n [ngClass]=\"{'selected-theme': isThemeSelected(item)}\"\n *ngFor=\"let item of competencyMatchedByCategory\">\n {{item}}\n </div>\n </ng-container>\n </div>\n <div [ngClass]=\"innerTabActiveIndex > 0 ? 'right-panel':'right-panel-flex'\">\n <!-- No Course Found Message in Right Panel -->\n <div class=\"no-course-found-container\"\n *ngIf=\"filterdCourses?.length === 0 && selectedThemeFilter\">\n <div class=\"no-course-card\">\n <div class=\"no-course-icon\">\n <mat-icon>search_off</mat-icon>\n </div>\n <div class=\"no-course-content\">\n <h4>No Courses Found</h4>\n <p>No courses found for the selected theme:\n <strong>{{selectedThemeFilter}}</strong></p>\n <p>Would you like to add a course for this competency?</p>\n <button class=\"suggest-course-btn\"\n (click)=\"addCourseForSelectedTheme()\">\n <mat-icon>add_circle</mat-icon>\n Add Course\n </button>\n </div>\n </div>\n </div>\n\n <!-- Courses List -->\n <div class=\"course-list-item\" *ngFor=\"let item of filterdCourses;let i=index\">\n\n <div class=\"course-content\">\n <div class=\"course-header\">\n <div class=\"checked-course-container\">\n <div>\n <mat-checkbox [checked]=\"checkIfCourseExists(item)\"\n (change)=\"selectedFilterCourses($event, item)\"></mat-checkbox>\n </div>\n <div class=\"ml-2\">\n <div class=\"course-pill-container\">\n <div class=\"course-pill\">\n <div class=\"course-pill-text\">\n <span><img\n src=\"assets/icons/course.svg\"></span>&nbsp;<span>Course</span>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n\n <!-- <div>\n <div class=\"ai-recommened-pill\">\n <div class=\"ai-recommened-pill-text\">\n <span class=\"ai-loader-icon\"><img src=\"assets/icons/ai-loader.gif\"></span>\n\n <span *ngIf=\"item?.rationale\">AI Recommended\n <span *ngIf=\"item?.is_public\"> - Public</span>\n <span *ngIf=\"!item?.is_public\"> - iGOT</span>\n </span>\n <span *ngIf=\"!item?.rationale\">Manually Suggested - iGOT</span>\n\n </div>\n </div>\n </div> -->\n <div *ngIf=\"item?.rationale && !item?.is_public\">\n <div class=\"ai-recommened-pill-green\">\n <div class=\"ai-recommened-pill-green-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n\n <span>AI Recommended - iGOT </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\" *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\"\n target=\"_blank\"><span>Platform -\n {{item?.platform}}</span></a>\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\" *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"item?.rationale && item?.is_public\">\n <div class=\"ai-recommened-pill-public\">\n <div class=\"ai-recommened-pill-public-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n\n <span>AI Recommended - Public </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\" *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\"\n target=\"_blank\"><span>Platform -\n {{item?.platform}}</span></a>\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\" *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"!item?.rationale\">\n <div class=\"ai-recommened-pill-gray\">\n <div class=\"ai-recommened-pill-gray-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n\n <span>Manually Suggested - iGOT </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\" *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\"\n target=\"_blank\"><span>Platform -\n {{item?.platform}}</span></a>\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\" *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n\n </div>\n <div class=\"course-title mt-3 cursor-pointer\" (click)=\"redirectToToc(item)\">\n <span *ngIf=\"item?.course\">{{item?.course}}</span>\n <!-- <span *ngIf=\"item?.name\">{{item?.name}}****</span> -->\n <span style=\"margin-left:10px;\" (click)=\"redirectToToc(item)\"><img\n height=\"18px\" width=\"18px\"\n src=\"assets/icons/redirect.png\" /></span>\n </div>\n <div class=\"course-desc mt-2\">\n <!-- <span *ngIf=\"item?.rationale\">{{item?.rationale}}</span> -->\n <span *ngIf=\"item?.description\">{{item?.description}}</span>\n </div>\n <div class=\"mt-3\" *ngIf=\"getCompetenciesByType('Behavioural',i)?.length\">\n <div class=\"competency-sub-heading\">Behavioural Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"behavioural-pill\"\n *ngFor=\"let comp of getDisplayedCompetencies('Behavioural',i)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Behavioural',i)\"\n class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\"\n (click)=\"toggleCompetencies('Behavioural',i)\">\n {{ isExpanded('Behavioural',i) ? 'Show Less' : '+' +\n getRemainingCount('Behavioural',i) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2\" *ngIf=\"getCompetenciesByType('Functional',i)?.length\">\n <div class=\"competency-sub-heading\">Functional Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"functional-pill\"\n *ngFor=\"let comp of getDisplayedCompetencies('Functional',i)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Functional',i)\"\n class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\"\n (click)=\"toggleCompetencies('Functional',i)\">\n {{ isExpanded('Functional',i) ? 'Show Less' : '+' +\n getRemainingCount('Functional',i) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2\" *ngIf=\"getCompetenciesByType('Domain',i)?.length\">\n <div class=\"competency-sub-heading\">Domain Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"domain-pill\"\n *ngFor=\"let comp of getDisplayedCompetencies('Domain',i)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Domain',i)\" class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\"\n (click)=\"toggleCompetencies('Domain',i)\">\n {{ isExpanded('Domain',i) ? 'Show Less' : '+' +\n getRemainingCount('Domain',i) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n\n\n </div>\n\n <!-- Relevancy and Duration section -->\n <div class=\"course-footer\" *ngIf=\"item?.relevancy\">\n <div class=\"relevancy-pill-green\">\n <div class=\"relevancy-container\">\n <div class=\"relevancy\">Relevancy</div>\n <div class=\"dash\">-</div>\n <div class=\"percentage\">{{item?.relevancy}}%</div>\n </div>\n </div>\n <div class=\"relevancy-pill-green\">\n <div class=\"relevancy-container\">\n <div class=\"relevancy\">Duration</div>\n <div class=\"dash\">-</div>\n <div class=\"percentage\">\n <span\n *ngIf=\"item?.duration\">{{getDuration(item?.duration)}}</span>\n <span *ngIf=\"!(item?.duration)\">N/A</span>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- General No Data Message (only when no theme filter is active) -->\n <div class=\"mt-2 sub-heading\" *ngIf=\"filterdCourses?.length === 0 && !selectedThemeFilter\">\n <p>No Data Found</p>\n </div>\n </div>\n </div>\n </form>\n <div class=\"role-mapping-container\" *ngIf=\"outerTabActiveIndex === 1\">\n <div id=\"gap-analysis-content\">\n\n <div class=\"download-pdf mt-4 mb-2\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Download\" (click)=\"downloadPDF()\" />\n </div>\n </div>\n <div>\n <!-- <div *ngIf=\"isPDFDownload\">\n <div class=\"pdf-heading\">{{sharedService?.cbpPlanFinalObj?.ministry?.name}} <span\n *ngIf=\"planData?.designation_name \">_{{planData?.designation_name}}_Gap_Analysis</span>\n </div>\n </div> -->\n <div class=\"d-flex vh-100\" [ngClass]=\"isPDFDownload ? 'mt-4':''\">\n <!-- Sidebar -->\n <div class=\"d-flex flex-column p-3 bg-light border-end\" style=\"width: 250px;\">\n <h5 class=\"mb-4\">Analyze by Category</h5>\n <button *ngFor=\"let item of menuItems\"\n class=\"btn btn-outline-primary mb-2 text-start menu-list-item\"\n [class.active]=\"selectedCategory === item.key\" (click)=\"selectCategory(item.key)\">\n {{ item.label }}\n </button>\n </div>\n\n <!-- Main Content -->\n <div class=\"flex-grow-1 p-4\">\n <div class=\"d-flex justify-content-between gap-3 \">\n <div class=\"p-3 gray-bg\">\n <div class=\"div-label sub-heading\">\n <p>Competencies Covered</p>\n </div>\n <div class=\"div-count\">{{competencyCoveredCount}}</div>\n </div>\n <div class=\"p-3 gray-bg\">\n <div class=\"div-label sub-heading\">\n <p *ngIf=\"selectedCategory === 'all'\">Total Competencies</p>\n <p *ngIf=\"selectedCategory === 'behavioral'\">Total Behavioural Competencies\n </p>\n <p *ngIf=\"selectedCategory === 'functional'\">Total Functional Competencies\n </p>\n <p *ngIf=\"selectedCategory === 'domain'\">Total Domain Competencies</p>\n </div>\n <div class=\"div-count\" *ngIf=\"selectedCategory === 'all'\">\n {{this.planData?.competencies?.length}}</div>\n <div class=\"div-count\" *ngIf=\"selectedCategory === 'behavioral'\">\n {{behavioralTotalCompetencies}}</div>\n <div class=\"div-count\" *ngIf=\"selectedCategory === 'functional'\">\n {{functionalTotalCompetencies}}</div>\n <div class=\"div-count\" *ngIf=\"selectedCategory === 'domain'\">\n {{domainTotalCompetencies}}</div>\n </div>\n <div class=\"p-3 green-bg\">\n <div class=\"div-green-label\" *ngIf=\"selectedCategory === 'all'\">Overall Coverage\n </div>\n <div class=\"div-green-label\" *ngIf=\"selectedCategory === 'behavioral'\">\n Behavioural Coverage</div>\n <div class=\"div-green-label\" *ngIf=\"selectedCategory === 'functional'\">\n Functional Coverage</div>\n <div class=\"div-green-label\" *ngIf=\"selectedCategory === 'domain'\">Domain\n Coverage</div>\n <div class=\"div-green-count\" *ngIf=\"selectedCategory === 'all'\">\n {{overallCoverage}}</div>\n <div class=\"div-green-count\" *ngIf=\"selectedCategory === 'behavioral'\">\n {{behavioralCoverage}}</div>\n <div class=\"div-green-count\" *ngIf=\"selectedCategory === 'functional'\">\n {{functionalCoverage}}</div>\n <div class=\"div-green-count\" *ngIf=\"selectedCategory === 'domain'\">\n {{domainCoverage}}</div>\n </div>\n </div>\n <div class=\"mt-4 all-category-list\" [ngSwitch]=\"selectedCategory\">\n <div *ngSwitchCase=\"'all'\">\n <h4>All Categories</h4>\n\n <!-- Show Behavioural section only if there are unmatched behavioural competencies -->\n <div class=\"mt-4\"\n *ngIf=\"behaviouralNotMatched && behaviouralNotMatched.length > 0\">\n <div class=\"sub-heading\">\n <p>Behavioural</p>\n </div>\n <div class=\"gray-bg-item\" *ngFor=\"let item of behaviouralNotMatched\">\n <div class=\"list-flex\">\n <div><span>{{item | titlecase}}</span></div>\n <div class=\"cursor-pointer\" (click)=\"addCourse(item, 'Behavioral')\">\n <span class=\"add-btn\"><mat-icon>add</mat-icon> Add New\n Course</span></div>\n </div>\n </div>\n </div>\n\n <!-- Show Functional section only if there are unmatched functional competencies -->\n <div class=\"mt-4\"\n *ngIf=\"functionalNotMatched && functionalNotMatched.length > 0\">\n <div class=\"sub-heading\">\n <p>Functional</p>\n </div>\n <div class=\"gray-bg-item\" *ngFor=\"let item of functionalNotMatched\">\n <div class=\"list-flex\">\n <div><span>{{item | titlecase}}</span></div>\n <div class=\"cursor-pointer\" (click)=\"addCourse(item, 'Functional')\">\n <span class=\"add-btn\"><mat-icon>add</mat-icon> Add New\n Course</span></div>\n </div>\n </div>\n </div>\n\n <!-- Show Domain section only if there are unmatched domain competencies -->\n <div class=\"mt-4\" *ngIf=\"domainNotMatched && domainNotMatched.length > 0\">\n <div class=\"sub-heading\">\n <p>Domain</p>\n </div>\n <div class=\"gray-bg-item\" *ngFor=\"let item of domainNotMatched\">\n <div class=\"list-flex\">\n <div><span>{{item | titlecase}}</span></div>\n <div class=\"cursor-pointer\" (click)=\"addCourse(item, 'Domain')\">\n <span class=\"add-btn\"><mat-icon>add</mat-icon> Add New\n Course</span></div>\n </div>\n </div>\n </div>\n\n <!-- Show message when all competencies are covered -->\n <div class=\"mt-4 text-center\"\n *ngIf=\"(!behaviouralNotMatched || behaviouralNotMatched.length === 0) && \n (!functionalNotMatched || functionalNotMatched.length === 0) && \n (!domainNotMatched || domainNotMatched.length === 0)\">\n <div class=\"no-gaps-message\">\n <mat-icon class=\"success-icon\">check_circle</mat-icon>\n <h4>Excellent! All competencies are covered</h4>\n <p>All required competencies have been addressed by the selected\n courses.</p>\n </div>\n </div>\n\n </div>\n\n <div *ngSwitchCase=\"'behavioral'\">\n <h4>Behavioural</h4>\n <div class=\"mt-4\" *ngIf=\"behavioralCoverage !== '100%'\">\n <!-- <div class=\"sub-heading\">\n <p>Behavioural</p>\n </div> -->\n <div class=\"gray-bg-item\" *ngFor=\"let item of behaviouralNotMatched\">\n <div class=\"list-flex\">\n <div><span>{{item}}</span></div>\n <div class=\"cursor-pointer\" (click)=\"addCourse(item, 'Behavioral')\">\n <span class=\"add-btn\"><mat-icon>add</mat-icon> Add New Course </span></div>\n </div>\n </div>\n </div>\n <div class=\"mt-4\" *ngIf=\"behavioralCoverage === '100%'\">\n <div class=\"p-3\"\n style=\"background-color: #e8f5e8; border: 1px solid #4caf50; border-radius: 8px; text-align: center;\">\n <div style=\"color: #2e7d32; font-weight: 600; font-size: 16px;\">\n 🎉 Excellent! All behavioral competencies are covered by the\n selected courses.\n </div>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'functional'\">\n <h4>Functional</h4>\n <div class=\"mt-4\" *ngIf=\"functionalCoverage !== '100%'\">\n <!-- <div class=\"sub-heading\">\n <p>Functional</p>\n </div> -->\n <div class=\"gray-bg-item\" *ngFor=\"let item of functionalNotMatched\">\n <div class=\"list-flex\">\n <div><span>{{item}}</span></div>\n <div class=\"cursor-pointer\" (click)=\"addCourse(item, 'Functional')\">\n <span class=\"add-btn\"><mat-icon>add</mat-icon> Add New Course</span></div>\n </div>\n </div>\n </div>\n <div class=\"mt-4\" *ngIf=\"functionalCoverage === '100%'\">\n <div class=\"p-3\"\n style=\"background-color: #e8f5e8; border: 1px solid #4caf50; border-radius: 8px; text-align: center;\">\n <div style=\"color: #2e7d32; font-weight: 600; font-size: 16px;\">\n 🎉 Excellent! All functional competencies are covered by the\n selected courses.\n </div>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'domain'\">\n <h4>Domain</h4>\n <div class=\"mt-4\" *ngIf=\"domainCoverage !== '100%'\">\n <!-- <div class=\"sub-heading\">\n <p>Domain</p>\n </div> -->\n <div class=\"gray-bg-item\" *ngFor=\"let item of domainNotMatched\">\n <div class=\"list-flex\">\n <div><span>{{item}}</span></div>\n <div class=\"cursor-pointer\" (click)=\"addCourse(item, 'Domain')\">\n <span class=\"add-btn\"><mat-icon>add</mat-icon> Add New Course </span></div>\n </div>\n </div>\n </div>\n <div class=\"mt-4\" *ngIf=\"domainCoverage === '100%'\">\n <div class=\"p-3\"\n style=\"background-color: #e8f5e8; border: 1px solid #4caf50; border-radius: 8px; text-align: center;\">\n <div style=\"color: #2e7d32; font-weight: 600; font-size: 16px;\">\n 🎉 Excellent! All domain competencies are covered by the selected\n courses.\n </div>\n </div>\n </div>\n </div>\n\n <div *ngSwitchDefault>\n <p>Please select a category.</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n </div>\n </div> <!-- Close main-content div -->\n\n </div>\n</div>\n\n\n<div [hidden]=\"!isPDFDownload\" class=\"gap-analysis-pdf-container\" #pdfContent>\n <div class=\"gap-analysis-pdf-header\">\n <img src=\"assets/icons/karmayogiLogo-min.png\" alt=\"Karmayogi Bharat Logo\" class=\"logo\" />\n <h1><span>\n <span *ngIf=\"sharedService?.cbpPlanFinalObj?.ministry?.sbOrgType === 'state'\">{{sharedService?.cbpPlanFinalObj?.department_name?.name}}</span> \n <span *ngIf=\"sharedService?.cbpPlanFinalObj?.ministry?.sbOrgType === 'ministry'\">{{sharedService?.cbpPlanFinalObj?.ministry?.name}}</span> \n <span *ngIf=\"planData?.designation_name \">/ {{planData?.designation_name}}</span>\n </span></h1>\n <p class=\"subtitle\">A detailed breakdown of competencies Gap Analysis</p>\n \n </div>\n \n <div class=\"competency-snapshot\">\n <h2>Competency Snapshot</h2>\n <div class=\"snapshot-content\">\n <div class=\"circle-wrapper\">\n <svg class=\"progress-ring\" width=\"120\" height=\"120\">\n <circle class=\"progress-ring-bg\" cx=\"60\" cy=\"60\" r=\"52\" />\n <circle class=\"progress-ring-circle\" cx=\"60\" cy=\"60\" r=\"52\" />\n </svg>\n <div class=\"percentage-text\">{{overallCoverage}}<br /><span>Overall Coverage</span></div>\n </div>\n \n <div class=\"competency-container\">\n <!-- Total Competencies Box -->\n <div class=\"total-box\">\n <div class=\"title\">Total Competencies</div>\n <div class=\"count\">{{this.planData?.competencies?.length}}</div>\n </div>\n \n <!-- Progress Bars -->\n <div class=\"progress-group\">\n <div class=\"progress-label\">\n <span class=\"label-text behavioral\">Behavioural</span>\n <span class=\"covered-text\">{{behavioralCompetencyCoveredCount}} / {{behavioralTotalCompetencies}} Covered</span>\n </div>\n <div class=\"progress-bar\">\n <div class=\"progress-fill behavioral\" [style.width.%]=\"(behavioralCompetencyCoveredCount / behavioralTotalCompetencies) * 100\"></div>\n </div>\n </div>\n \n <div class=\"progress-group\">\n <div class=\"progress-label\">\n <span class=\"label-text functional\">Functional</span>\n <span class=\"covered-text\">{{functionalCompetencyCoveredCount}} / {{functionalTotalCompetencies}} Covered</span>\n </div>\n <div class=\"progress-bar\">\n <div class=\"progress-fill functional\" [style.width.%]=\"(functionalCompetencyCoveredCount / functionalTotalCompetencies) * 100\"></div>\n </div>\n </div>\n \n <div class=\"progress-group\">\n <div class=\"progress-label\">\n <span class=\"label-text domain\">Domain</span>\n <span class=\"covered-text\">{{domainCompetencyCoveredCount}} / {{domainTotalCompetencies}} Covered</span>\n </div>\n <div class=\"progress-bar\">\n <div class=\"progress-fill domain\" [style.width.%]=\"(domainCompetencyCoveredCount / domainTotalCompetencies) * 100\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n \n <div class=\"gap-section mb-4\">\n <h2>Detailed Competency Analysis</h2>\n <div class=\"gap-box\">\n Bridge Your Competencies Gap\n <p class=\"subtitle\">Here are {{this.planData?.competencies?.length - (behavioralCompetencyCoveredCount + functionalCompetencyCoveredCount + domainCompetencyCoveredCount)}} key areas for development.</p>\n </div>\n </div>\n <div class=\"sub-heading mb-4\">\n <p>Gap to Address <span *ngIf=\"(this.planData?.competencies?.length - (behavioralCompetencyCoveredCount + functionalCompetencyCoveredCount + domainCompetencyCoveredCount)) > 0\">({{this.planData?.competencies?.length - (behavioralCompetencyCoveredCount + functionalCompetencyCoveredCount + domainCompetencyCoveredCount)}})</span></p>\n \n </div>\n <div class=\"competency-card behavioral\" *ngFor=\"let item of behaviouralNotMatched\">\n <div class=\"title\">{{item | titlecase}}</div>\n <div class=\"subtitle\">\n &nbsp; • &nbsp;\n <span class=\"tag behavioral\">Behavioural</span>\n </div>\n </div>\n \n <div class=\"competency-card functional\" *ngFor=\"let item of functionalNotMatched\">\n <div class=\"title\">{{item | titlecase}}</div>\n <div class=\"subtitle\">\n &nbsp; • &nbsp;\n <span class=\"tag functional\">Functional</span>\n </div>\n </div>\n \n <div class=\"competency-card domain\" *ngFor=\"let item of domainNotMatched\">\n <div class=\"title\">{{item | titlecase}}</div>\n <div class=\"subtitle\">\n <!-- Project Management -->\n &nbsp; • &nbsp;\n <span class=\"tag domain\">Domain</span>\n </div>\n </div>\n <div class=\"sub-heading mb-4\">\n <p>Covered Competencies <span>({{this.planData?.competencies?.length - (behaviouralNotMatched?.length + functionalNotMatched?.length + domainNotMatched?.length)}})</span></p> \n </div>\n <div class=\"gap-section mb-4\">\n \n <div class=\"green-bg\">\n <div class=\"div-green-label mb-2\">\n Congratulations!\n </div> \n <p>You have successfully covered </p>\n <p class=\"subtitle\">{{this.planData?.competencies?.length - (behaviouralNotMatched?.length + functionalNotMatched?.length + domainNotMatched?.length)}} key competencies, forming a strong professional foundation.</p>\n </div>\n </div>\n <div class=\"competency-card behavioral\" *ngFor=\"let item of behaviouralMatched\">\n <div class=\"title\">{{item?.theme | titlecase}}</div>\n <div class=\"subtitle\">\n {{item?.sub_theme}}&nbsp; • &nbsp;\n <span class=\"tag behavioral\">Behavioural</span>\n </div>\n </div>\n \n <div class=\"competency-card functional\" *ngFor=\"let item of functionalMatched\">\n <div class=\"title\">{{item?.theme | titlecase}}</div>\n <div class=\"subtitle\">\n {{item?.sub_theme}}&nbsp; • &nbsp;\n <span class=\"tag functional\">Functional</span>\n </div>\n </div>\n \n <div class=\"competency-card domain\" *ngFor=\"let item of domainMatched\">\n <div class=\"title\">{{item?.theme | titlecase}}</div>\n <div class=\"subtitle\">\n <!-- Project Management -->\n {{item?.sub_theme}}&nbsp; • &nbsp;\n <span class=\"tag domain\">Domain</span>\n </div>\n </div>\n <div class=\"gap-section mb-4\">\n <h2>Recommended Courses</h2>\n </div>\n <app-gap-analysis-recommended-course [planData]=\"planData\"></app-gap-analysis-recommended-course>\n</div>\n \n\n\n<div class=\"overlay-loader\" *ngIf=\"loading && dataLoaded && !isRegeneratingWithProgress\">\n <div class=\"loading-content\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n <div class=\"loading-text mt-3\">\n <p class=\"main-message\">{{ currentProcessingStage || 'Preparing course recommendation generation...' }}</p>\n <div class=\"progress-details\">\n <div class=\"progress-indicator\" *ngIf=\"progressPercentage > 0\">\n <div class=\"progress-bar-container\">\n <div class=\"progress-bar\" \n [style.width.%]=\"progressPercentage\">\n </div>\n </div>\n <small class=\"progress-text\">{{ progressPercentage }}% Complete</small>\n </div>\n <small class=\"time-estimate\">\n Real-time course generation in progress. This may take 1-2 minutes.\n </small>\n </div>\n </div>\n </div>\n</div>","import { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { Component, ElementRef, Inject, ViewChild } from '@angular/core';\nimport { EditCbpPlanComponent } from '../edit-cbp-plan/edit-cbp-plan.component';\nimport { GenerateCourseRecommendationComponent } from '../generate-course-recommendation/generate-course-recommendation.component';\nimport html2pdf from 'html2pdf.js';\n@Component({\n selector: 'app-view-cbp-plan',\n templateUrl: './view-cbp-plan.component.html',\n styleUrls: ['./view-cbp-plan.component.scss']\n})\nexport class ViewCbpPlanComponent {\n @ViewChild('pdfContent', { static: false }) pdfContent!: ElementRef;\n selectedValue = ''\n searchText = ''\n planData:any\n competenciesCount = {total:0, behavioral:0, functional:0, domain:0}\n constructor(\n public dialogRef: MatDialogRef<ViewCbpPlanComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private dialog: MatDialog\n ) {\n this.planData = data\n console.log('Received data:', data);\n this.planData.competencies.map((competencies:any)=>{\n this.competenciesCount['total'] = this.competenciesCount['total'] + 1 \n if(competencies.type === 'Behavioral') {\n this.competenciesCount['behavioral'] = this.competenciesCount['behavioral'] +1\n }\n if(competencies.type === 'Functional') {\n this.competenciesCount['functional'] = this.competenciesCount['functional'] +1\n }\n if(competencies.type === 'Domain') {\n this.competenciesCount['domain'] = this.competenciesCount['domain'] +1\n }\n })\n }\n\n searchData() {\n\n }\n\n applyFilter() {\n \n }\n\n getCompetenciesByType(competencies: any[], type: string): any[] {\n return competencies?.filter(c => c.type === type) || [];\n }\n\n closeDialog() {\n this.dialogRef.close(); \n }\n\n editCBPPlan() {\n this.dialogRef.close();\n const dialogRefNew = this.dialog.open(EditCbpPlanComponent, {\n width: '1000px',\n data: this.planData,\n panelClass: 'view-cbp-plan-popup',\n minHeight: '300px', // Set minimum height\n maxHeight: '80vh', // Prevent it from going beyond viewport\n disableClose: true // Optional: prevent closing with outside click\n });\n \n dialogRefNew.afterClosed().subscribe(result => {\n if (result === 'saved') {\n console.log('Changes saved!');\n // Refresh data or show a toast here\n }\n });\n }\n\n generateCourseRecommendation() {\n this.dialogRef.close();\n console.log('Generate Course Recommendation clicked', this.planData);\n \n console.log('Edit Role Mapping clicked', this.planData);\n // Navigate or open modal\n console.log('View CBP Plan clicked', this.planData);\n const dialogRef = this.dialog.open(GenerateCourseRecommendationComponent, {\n width: '1000px',\n data: this.planData,\n panelClass: 'view-cbp-plan-popup',\n minHeight: '400px', // Set minimum height\n maxHeight: '90vh', // Prevent it from going beyond viewport\n disableClose: true // Optional: prevent closing with outside click\n });\n \n dialogRef.afterClosed().subscribe(result => {\n if (result === 'saved') {\n console.log('Changes saved!');\n // Refresh data or show a toast here\n \n \n }\n });\n }\n\n downloadPDF() {\n const element = this.pdfContent.nativeElement;\n\n // Wait for images to load\n const images = element.querySelectorAll('img');\n const promises = Array.from(images).map((img: HTMLImageElement) => {\n if (img.complete) return Promise.resolve();\n return new Promise(resolve => img.onload = resolve);\n });\n\n Promise.all(promises).then(() => {\n const options = {\n margin: 0.5,\n filename: 'Role Mapping.pdf',\n image: { type: 'jpeg', quality: 0.98 },\n html2canvas: {\n scale: 2,\n useCORS: true,\n scrollY: 0,\n },\n jsPDF: {\n unit: 'in',\n format: 'a4',\n orientation: 'portrait'\n },\n pagebreak: {\n mode: ['css', 'legacy', 'avoid-all']\n }\n };\n\n html2pdf().from(element).set(options).save();\n });\n}\n}\n","<div class=\"view-cbp-plan\">\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div>\n <div class=\"heading\">View Role Mapping</div>\n </div>\n <div class=\"cursor-pointer\" (click)=\"closeDialog()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n <div class=\"section-container\" #pdfContent>\n \n <div class=\"section-header mt-4\">\n <div class=\"designation\">{{planData?.designation_name}}</div>\n </div>\n\n <div class=\"competency-container mt-4\">\n <div class=\"outside-layer-total\">\n <div class=\"inside-layer\">\n Total Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.total}}\n </div>\n </div>\n <div class=\"outside-layer-behavioral\">\n <div class=\"inside-layer\">\n Behavioral Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.behavioral}}\n </div>\n </div>\n <div class=\"outside-layer-functional\">\n <div class=\"inside-layer\">\n Functional Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.functional}}\n </div>\n </div>\n <div class=\"outside-layer-domain\">\n <div class=\"inside-layer\">\n Domain Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.domain}}\n </div>\n </div>\n </div>\n <div class=\"mt-4 section\">\n <div class=\"sub-heading\">\n <p>Wing/Division</p>\n </div>\n <div class=\"mt-2\">\n \n <div class=\"wing-text\">{{planData?.wing_division_section}}</div>\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Roles & Responsibilities</p>\n </div>\n <div class=\"mt-2 additional-details\">\n <p class=\"responsibility-text\" *ngFor=\"let item of planData?.role_responsibilities;let i=index\">\n {{i+1}}. {{item}}\n </p>\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Activities</p>\n </div>\n <div class=\"mt-2 additional-details\">\n <p class=\"responsibility-text\" *ngFor=\"let item of planData?.activities;let i=index\">\n {{i+1}}. {{item}}\n </p>\n </div>\n </div>\n <div class=\"section mt-2\">\n <div class=\"sub-heading\">\n <p>Competency</p>\n </div>\n \n <div class=\"mt-4\">\n <div class=\"competency-sub-heading \" *ngIf=\"getCompetenciesByType(planData?.competencies, 'Behavioral')?.length\">Behavioral Competencies</div>\n <!-- <ul class=\"competency-list mt-2\">\n <li class=\"behavioural-pill\" *ngFor=\"let comp of getCompetenciesByType(planData?.competencies, 'Behavioral')\">\n <span class=\"competency-text-behavioral\"> {{ comp.theme }} - {{ comp.sub_theme }}</span>\n </li>\n </ul> -->\n <div class=\"competency-grid mt-2\">\n <div class=\"competency-item behavioural-pill\"\n *ngFor=\"let comp of getCompetenciesByType(planData?.competencies, 'Behavioral')\">\n <span class=\"competency-text-behavioral\">\n {{ comp.theme }} - {{ comp.sub_theme }}\n </span>\n <!-- <span class=\"cursor-pointer close\" (click)=\"deleteCompetency(comp)\">\n <mat-icon>close</mat-icon>\n </span> -->\n </div>\n </div>\n </div>\n <div class=\"mt-2\">\n <div class=\"competency-sub-heading \" *ngIf=\"getCompetenciesByType(planData?.competencies, 'Functional')?.length\">Functional Competencies</div>\n <!-- <ul class=\"competency-list mt-2\">\n <li class=\"functional-pill\" *ngFor=\"let comp of getCompetenciesByType(planData?.competencies, 'Functional')\">\n <span class=\"competency-text-functional\"> {{ comp.theme }}- {{ comp.sub_theme }} </span>\n </li>\n </ul> -->\n <div class=\"competency-grid mt-2\">\n <div class=\"competency-item functional-pill\"\n *ngFor=\"let comp of getCompetenciesByType(planData?.competencies, 'Functional')\">\n <span class=\"competency-text-functional\">\n {{ comp.theme }} - {{ comp.sub_theme }}\n </span>\n <!-- <span class=\"cursor-pointer close\" (click)=\"deleteCompetency(comp)\">\n <mat-icon>close</mat-icon>\n </span> -->\n </div>\n </div>\n </div>\n <div class=\"mt-2\">\n <div class=\"competency-sub-heading\" *ngIf=\"getCompetenciesByType(planData?.competencies, 'Domain')?.length\">Domain Competencies</div>\n <!-- <ul class=\"competency-list mt-2\">\n <li class=\"domain-pill\" *ngFor=\"let comp of getCompetenciesByType(planData?.competencies, 'Domain')\">\n <span class=\"competency-text-domain\"> {{ comp.theme }} - {{ comp.sub_theme }}</span>\n </li>\n </ul> -->\n <div class=\"competency-grid mt-2\">\n <div class=\"competency-item domain-pill\"\n *ngFor=\"let comp of getCompetenciesByType(planData?.competencies, 'Domain')\">\n <span class=\"competency-text-domain\">\n {{ comp.theme }} - {{ comp.sub_theme }}\n </span>\n <!-- <span class=\"cursor-pointer close\" (click)=\"deleteCompetency(comp)\">\n <mat-icon>close</mat-icon>\n </span> -->\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"popup-footer\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Generate Course Recommendation\" (click)=\"generateCourseRecommendation()\"/>\n </div>\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Download\" (click)=\"downloadPDF()\"/>\n </div>\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Edit\" (click)=\"editCBPPlan()\"/>\n </div>\n </div>\n</div>\n</div>","import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ChangeDetectorRef, Component, Inject, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, FormArray, Validators, FormControl } from '@angular/forms';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { SharedService } from '../../modules/shared/services/shared.service';\n\n@Component({\n selector: 'app-delete-role-mapping',\n templateUrl: './delete-role-mapping.component.html',\n styleUrls: ['./delete-role-mapping.component.scss']\n})\nexport class DeleteRoleMappingComponent {\n\n loading = false\n planData:any\n constructor( public dialogRef: MatDialogRef<DeleteRoleMappingComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any, private sharedService: SharedService,\n private snackBar:MatSnackBar) {\n this.planData = data\n }\n\n deleteRoleMapping() {\n // this.sharedService.deleteRoleMapping(this.planData.id).subscribe(()=>{\n // this.dialogRef.close('saved')\n // })\n this.sharedService.deleteRoleMapping(this.planData.id).subscribe({\n next: () => {\n this.dialogRef.close('saved')\n this.snackBar.open('Role Mapping Deleted successfully', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n },\n error: (error) => {\n this.dialogRef.close()\n this.snackBar.open(error?.error?.detail, 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n });\n \n }\n\n cancel() {\n this.dialogRef.close()\n }\n}\n","<div class=\"view-cbp-plan\">\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div>\n <div class=\"heading\">Delete Role Mapping</div>\n </div>\n <div class=\"cursor-pointer\" (click)=\"cancel()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n <div class=\"section-container mt-4\">\n <div class=\"progress-icon\">\n <img src=\"assets/icons/info.svg\" style=\"scale: 2;margin: 10px;\">\n </div>\n <div class=\"heading\">\n <div>Delete Role Mapping</div>\n </div>\n <div class=\"\">\n <div>Are You Sure to Delete Selected Role Mapping</div>\n </div>\n\n </div>\n <div class=\"popup-footer mt-4\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"No\" (click)=\"cancel()\" />\n </div>\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Yes\" (click)=\"deleteRoleMapping()\" />\n </div>\n </div>\n </div>\n</div>\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\nimport { SharedService } from '../../modules/shared/services/shared.service';\n\n\n@Component({\n selector: 'app-add-personalisation',\n templateUrl: './add-personalisation.component.html',\n styleUrls: ['./add-personalisation.component.scss']\n})\nexport class AddPersonalisationComponent {\n\n constructor(public dialogRef: MatDialogRef<AddPersonalisationComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any, private sharedService: SharedService, private dialog: MatDialog){\n\n }\n\n saveRoleMapping() {\n this.dialogRef.close()\n }\n\n closeDialog() {\n this.dialogRef.close()\n }\n\n cancelForm() {\n this.dialogRef.close()\n }\n}\n","<div class=\"view-cbp-plan\">\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div>\n <div class=\"heading\">Add Personalisation</div>\n </div>\n <div class=\"cursor-pointer\" (click)=\"closeDialog()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n </div>\n <div class=\"section-container\">\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Educational Qualification</p>\n </div>\n <div class=\"mt-4 additional-details\">\n <textarea class=\"custom-textarea\" rows=\"5\" placeholder=\"Educational Qualification\"></textarea>\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Past Experience</p>\n </div>\n <div class=\"mt-4 additional-details\">\n <textarea class=\"custom-textarea\" rows=\"5\" placeholder=\"Past Experience\"></textarea>\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Last 3 Posting</p>\n </div>\n <div class=\"mt-4 additional-details\">\n <textarea class=\"custom-textarea\" rows=\"5\" placeholder=\"Last 3 Posting\"></textarea>\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Last 2-3 training experience</p>\n </div>\n <div class=\"mt-4 additional-details\">\n <textarea class=\"custom-textarea\" rows=\"5\" placeholder=\"Last 2-3 training experience\"></textarea>\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Years of experience</p>\n </div>\n <div class=\"additional-details mt-4\">\n <input type=\"text\" placeholder=\"Years of experience\"\n style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 12px; width: 100%;font-size: 14px;font-family: 'Lato';\">\n </div>\n </div>\n\n </div>\n <div class=\"popup-footer\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Cancel\" (click)=\"cancelForm()\" />\n </div>\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Save\" (click)=\"saveRoleMapping()\"/>\n </div>\n </div>\n</div>\n ","import { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { ChangeDetectorRef, Component, ElementRef, Inject, OnInit, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup, FormArray, Validators, FormControl } from '@angular/forms';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { GenerateCourseRecommendationComponent } from '../generate-course-recommendation/generate-course-recommendation.component';\nimport { AddPersonalisationComponent } from '../add-personalisation/add-personalisation.component';\nimport html2pdf from 'html2pdf.js';\nimport { DeleteRoleMappingPopupComponent } from '../delete-role-mapping-popup/delete-role-mapping-popup.component';\nimport { SharedService } from '../../modules/shared/services/shared.service';\n\n@Component({\n selector: 'app-view-course-recommendation',\n templateUrl: './view-course-recommendation.component.html',\n styleUrls: ['./view-course-recommendation.component.scss']\n})\nexport class ViewCourseRecommendationComponent {\n @ViewChild('pdfContent', { static: false }) pdfContent!: ElementRef;\n planData:any\n loading=false\n recommended_course_id=''\n cbpPlanData:any\n suggestedCourses: any = []\n constructor( public dialogRef: MatDialogRef<ViewCourseRecommendationComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any, private sharedService: SharedService, private dialog: MatDialog, private snackBar: MatSnackBar) {\n this.planData = data\n }\n searchText = ''\n filterdCourses :any\n selectFilterCourses:any = []\n competenciesCount = {total:0, public_courses:0, igot:0}\n expandedCompetencies: any = {}; // Track expanded state for each course and competency type\n isPDFDownload = false\n ngOnInit() {\n this.loading = true\n this.cbpPlanData = this.sharedService.cbpPlanFinalObj\n // this.sharedService.getRecommendedCourse(this.planData.id).subscribe((res)=>{\n // this.loading = false\n // console.log('res', res)\n // this.recommended_course_id = res.id\n // let allCourses = []\n // if(res && res.filtered_courses && res.filtered_courses.length) {\n // res.filtered_courses.forEach((item)=>{\n // if(item?.relevancy > 85) {\n // allCourses.push(item)\n // }\n // })\n // }\n // this.filterdCourses = allCourses\n // console.log('this.filterdCourses', this.filterdCourses)\n // this.updateCompetencyCounts()\n // this.getUserCourse()\n // })\n\n this.sharedService.getUserRecommendationCourse(this.planData.id).subscribe({\n next: (res) => {\n this.loading = false\n console.log('res', res)\n this.recommended_course_id = res.id\n let allCourses = []\n if(res && res.selected_courses && res.selected_courses.length) {\n res.selected_courses.forEach((item)=>{\n // if(item?.relevancy >= 85) {\n allCourses.push(item)\n // }\n })\n }\n this.filterdCourses = allCourses\n let identifiersArr = []\n console.log('this.filterdCourses', this.filterdCourses)\n this.filterdCourses.map((item)=>{\n identifiersArr.push(item?.identifier)\n })\n this.sharedService.getAdditionalParameterforSuggestedCourses(identifiersArr).subscribe((response)=>{\n if(response && response.result && response.result.content && response.result.content.length) {\n for(let i=0; i < response.result.content.length;i++) {\n for(let j=0; j<this.filterdCourses.length;j++) {\n if(this.filterdCourses[j]['identifier'] === response.result.content[i]['identifier'] ) {\n this.filterdCourses[j]['language'] = response.result.content[i]['language']\n this.filterdCourses[j]['avgRating'] = response.result.content[i]['avgRating']\n this.filterdCourses[j]['course'] = response.result.content[i]['name']\n break;\n }\n }\n \n }\n }\n \n })\n this.updateCompetencyCounts()\n // this.getSuggestedCourse()\n // this.getUserCourse()\n },\n error: (error) => {\n this.loading = false\n this.snackBar.open(error?.error?.detail, 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n });\n }\n\n updateCompetencyCounts() {\n // const comps = this.competenciesArray.value;\n this.competenciesCount = {total: 0, public_courses: 0, igot: 0};\n this.filterdCourses.forEach(c => {\n this.competenciesCount.total++;\n if (c.is_public) this.competenciesCount.public_courses++;\n if (!c.is_public) this.competenciesCount.igot++;\n });\n }\n\n closeDialog() {\n this.dialogRef.close()\n }\n\n addMoreCourses() {\n this.dialogRef.close();\n console.log('Generate Course Recommendation clicked', this.planData);\n \n console.log('Edit Role Mapping clicked', this.planData);\n // Navigate or open modal\n console.log('View CBP Plan clicked', this.planData);\n const dialogRef = this.dialog.open(GenerateCourseRecommendationComponent, {\n width: '1000px',\n data: this.planData,\n panelClass: 'view-cbp-plan-popup',\n minHeight: '400px', // Set minimum height\n maxHeight: '90vh', // Prevent it from going beyond viewport\n disableClose: true // Optional: prevent closing with outside click\n });\n \n dialogRef.afterClosed().subscribe(result => {\n if (result === 'saved') {\n console.log('Changes saved!');\n // Refresh data or show a toast here\n \n \n }\n });\n }\n\n addPersonilisation() {\n this.dialogRef.close();\n console.log('Generate Course Recommendation clicked', this.planData);\n \n console.log('Edit Role Mapping clicked', this.planData);\n // Navigate or open modal\n console.log('View CBP Plan clicked', this.planData);\n const dialogRef = this.dialog.open(AddPersonalisationComponent, {\n width: '1000px',\n data: this.planData,\n panelClass: 'view-cbp-plan-popup',\n minHeight: '400px', // Set minimum height\n maxHeight: '90vh', // Prevent it from going beyond viewport\n disableClose: true // Optional: prevent closing with outside click\n });\n \n dialogRef.afterClosed().subscribe(result => {\n if (result === 'saved') {\n console.log('Changes saved!');\n // Refresh data or show a toast here\n \n \n }\n });\n }\n\n getSuggestedCourse() {\n let role_mapping_id = this.planData.id\n this.loading = true\n this.sharedService.getSuggestedCourses(role_mapping_id).subscribe({\n next: (res) => {\n // Success handling\n this.loading = false\n console.log('getSuggestedCourses res', res)\n \n // Store suggested courses separately\n this.suggestedCourses = [...res];\n \n // Add suggested courses to filtered courses\n for (let i = 0; i < res.length; i++) {\n this.filterdCourses.push(res[i])\n }\n \n // Update competency counts after adding suggested courses\n this.updateCompetencyCounts()\n \n console.log('filterdCourses after adding suggested courses:', this.filterdCourses);\n },\n error: (error) => {\n console.log('getSuggestedCourse error', error)\n this.loading = false\n if (error.status === 401) {\n console.log('Unauthorized access - user will be redirected to login');\n } else {\n console.error('Failed to load suggested courses');\n }\n }\n })\n }\n\n getUserCourse() {\n let role_mapping_id = this.planData.id\n this.loading = true\n this.sharedService.getUserCourse(role_mapping_id).subscribe({\n next: (res) => {\n // Success handling\n this.loading = false\n \n // Process user-added courses to ensure proper structure\n for (let i = 0; i < res.length; i++) {\n this.filterdCourses.push(res[i])\n }\n \n // Update competency counts after adding user courses\n this.updateCompetencyCounts()\n \n console.log('filterdCourses after adding user courses:', this.filterdCourses);\n //this.successRoleMapping.emit(this.roleMappingForm)\n },\n error: (error) => {\n console.log('error', error)\n this.loading = false\n // Handle 409 Conflict here\n // alert('Conflict detected: The resource already exists or action conflicts.');\n //this.get\n // Or you can set a UI error message variable\n\n this.loading = false\n //this.alreadyAvailableRoleMapping.emit(this.roleMappingForm)\n }\n\n\n })\n }\n\n getCompetenciesByType(type: string, index): any[] {\n const course = this.filterdCourses[index];\n if (!course) {\n console.log(`No course found at index ${index}`);\n return [];\n }\n \n // Handle different competency property names\n // AI Recommended & Public courses use 'competencies'\n // Manually Suggested - iGOT courses use 'competencies_v6'\n // User Added courses use 'competencies'\n let competencies = [];\n if (course.competencies && Array.isArray(course.competencies)) {\n competencies = course.competencies;\n console.log(`Course ${index} (${course.course_type || course.name || 'Unknown'}) using 'competencies' property:`, competencies);\n } else if (course.competencies_v6 && Array.isArray(course.competencies_v6)) {\n competencies = course.competencies_v6;\n console.log(`Course ${index} (${course.course_type || course.name || 'Unknown'}) using 'competencies_v6' property:`, competencies);\n } else {\n console.log(`Course ${index} (${course.course_type || course.name || 'Unknown'}) has no valid competencies property:`, {\n hasCompetencies: !!course.competencies,\n competenciesType: typeof course.competencies,\n hasCompetenciesV6: !!course.competencies_v6,\n competenciesV6Type: typeof course.competencies_v6,\n courseKeys: Object.keys(course)\n });\n }\n \n if (competencies.length === 0) {\n console.log(`No competencies found for course ${index} and type ${type}`);\n return [];\n }\n \n // Normalize the type for comparison (case-insensitive + handle spelling variations)\n const normalizedType = type.toLowerCase().trim();\n \n const matchedCompetencies = competencies.filter(c => {\n if (!c || !c.competencyAreaName) {\n console.log(`Invalid competency structure in course ${index}:`, c);\n return false;\n }\n \n const competencyArea = c.competencyAreaName.toLowerCase().trim();\n \n // Handle both \"behavioral\" and \"behavioural\" spellings\n if (normalizedType === 'behavioural' || normalizedType === 'behavioral') {\n return competencyArea === 'behavioral' || competencyArea === 'behavioural';\n }\n \n // For other types, do case-insensitive comparison\n return competencyArea === normalizedType;\n });\n \n console.log(`Found ${matchedCompetencies.length} competencies of type ${type} for course ${index}:`, matchedCompetencies);\n return matchedCompetencies;\n }\n\n getDisplayedCompetencies(type: string, index: number): any[] {\n const competencies = this.getCompetenciesByType(type, index);\n const key = `${index}-${type}`;\n\n if (this.expandedCompetencies[key]) {\n return competencies;\n }\n\n return competencies.slice(0, 2);\n }\n\n toggleCompetencies(type: string, index: number): void {\n const key = `${index}-${type}`;\n this.expandedCompetencies[key] = !this.expandedCompetencies[key];\n }\n\n isExpanded(type: string, index: number): boolean {\n const key = `${index}-${type}`;\n return this.expandedCompetencies[key] || false;\n }\n\n hasMoreThanTwo(type: string, index: number): boolean {\n return this.getCompetenciesByType(type, index).length > 2;\n }\n\n getRemainingCount(type: string, index: number): number {\n const totalCount = this.getCompetenciesByType(type, index).length;\n return totalCount - 2;\n }\n\n downloadPDF() {\n this.loading = true\n this.isPDFDownload = true\n const element = this.pdfContent.nativeElement;\n\n // Wait for images to load\n const images = element.querySelectorAll('img');\n const promises = Array.from(images).map((img: HTMLImageElement) => {\n if (img.complete) return Promise.resolve();\n return new Promise(resolve => img.onload = resolve);\n });\n\n Promise.all(promises).then(() => {\n const options = {\n margin: 0.5,\n filename: 'Recommended Coureses.pdf',\n image: { type: 'jpeg', quality: 0.98 },\n html2canvas: {\n scale: 2,\n useCORS: true,\n scrollY: 0,\n },\n jsPDF: {\n unit: 'in',\n format: 'a4',\n orientation: 'portrait'\n },\n pagebreak: {\n mode: ['css', 'legacy', 'avoid-all']\n }\n };\n\n html2pdf().from(element).set(options).save()\n setTimeout(() => {\n this.loading = false;\n this.isPDFDownload = false\n }, 3000); \n });\n}\n\ndownloadPdfFromBE() {\n this.loading = true\n// this.sharedService.downloadPdf(this.sharedService?.cbpPlanFinalObj.ministry.identifier)\n \n this.sharedService.downloadPdfForCourseRecommendation(this.data?.id) \n \n \n setTimeout(()=>{\n this.loading = false\n },5000)\n}\n\nconfirmDeleteCourse(item: any, index: number) {\n const roleMappingId = this.recommended_course_id;\n const courseIdentifier =\n item?.course_identifier || item?.id || item?.identifier;\n\n if (!roleMappingId || !courseIdentifier) {\n this.snackBar.open('Unable to delete course', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n return;\n }\n\n this.loading = true;\n\n this.sharedService\n .deleteRecommendedCourse(roleMappingId, courseIdentifier)\n .subscribe({\n next: () => {\n // Remove from UI\n this.filterdCourses.splice(index, 1);\n\n // Update counts\n this.updateCompetencyCounts();\n\n this.loading = false;\n\n this.snackBar.open('Course deleted successfully', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n },\n error: (error) => {\n this.loading = false;\n\n this.snackBar.open(\n error?.error?.detail || 'Failed to delete course',\n 'X',\n {\n duration: 3000,\n panelClass: ['snackbar-error']\n }\n );\n }\n });\n\n }\n\ndeleteCard(item: any, index: number) {\n const dialogRef = this.dialog.open(DeleteRoleMappingPopupComponent, {\n width: '600px',\n data: {\n planId: this.planData?.id, // role mapping id\n course: item, // course object\n index: index,\n from : 'viewCourse' // index for UI removal\n },\n panelClass: 'view-cbp-plan-popup',\n minHeight: '300px',\n maxHeight: '90vh',\n disableClose: true\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result === 'saved') {\n this.confirmDeleteCourse(item, index);\n }\n });\n}\n}\n","<div class=\"view-cbp-plan\">\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div>\n <div class=\"heading\">View Course Recommendation</div>\n </div>\n <div class=\"cursor-pointer\" (click)=\"closeDialog()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n </div>\n <div class=\"section-container mt-2\" #pdfContent>\n <div class=\"ministry-heading mt-2\">\n <span *ngIf=\"!cbpPlanData?.department_name\">{{cbpPlanData?.ministry.orgName}}</span> \n <span *ngIf=\"cbpPlanData?.department_name\">{{cbpPlanData?.department_name}}</span> \n <span *ngIf=\"planData?.designation_name\"> / {{planData?.designation_name}}</span>\n </div>\n <div class=\"competency-container mt-4\">\n <div class=\"outside-layer-total\">\n <div class=\"inside-layer\">\n Total Courses\n </div>\n <div class=\"count\">\n {{competenciesCount?.total}}\n </div>\n </div>\n <div class=\"outside-layer-total\">\n <div class=\"inside-layer\">\n iGOT Platform Courses\n </div>\n <div class=\"count\">\n {{competenciesCount?.igot}}\n </div>\n </div>\n <div class=\"outside-layer-total\">\n <div class=\"inside-layer\">\n Public Courses\n </div>\n <div class=\"count\">\n {{competenciesCount?.public_courses}}\n \n </div>\n </div>\n \n </div>\n <div class=\"my-4\">\n \n <div class=\"course-list-container\">\n <div class=\"course-list-item\" *ngFor=\"let item of filterdCourses;let i=index\">\n <div class=\"course-header\">\n <div class=\"checked-course-container\">\n \n <div>\n <div class=\"course-pill\">\n <div class=\"course-pill-text\">\n <span><img src=\"assets/icons/course.svg\"></span>&nbsp;<span>Course</span>\n </div>\n </div>\n </div>\n\n </div>\n\n <!-- <div>\n <div class=\"ai-recommened-pill\">\n <div class=\"ai-recommened-pill-text\">\n <span class=\"ai-loader-icon\"><img src=\"assets/icons/ai-loader.gif\"></span>\n <span>AI Recommended</span>\n\n </div>\n </div>\n </div> -->\n <div *ngIf=\"item?.rationale && !item?.is_public\">\n <div class=\"ai-recommened-pill-green\">\n <div class=\"ai-recommened-pill-green-text\">\n <span class=\"ai-loader-icon\"><img src=\"assets/icons/ai-loader.gif\"></span>\n \n <span >AI Recommended - iGOT </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\" *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\" target=\"_blank\"><span>Platform - {{item?.platform}}</span></a>\n </div> \n </div>\n <div class=\"ai-recommened-pill-orange mt-2\" *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"item?.rationale && item?.is_public\">\n <div class=\"ai-recommened-pill-public\">\n <div class=\"ai-recommened-pill-public-text\">\n <span class=\"ai-loader-icon\"><img src=\"assets/icons/ai-loader.gif\"></span>\n \n <span >AI Recommended - Public </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\" *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\" target=\"_blank\"><span>Platform - {{item?.platform}}</span></a>\n </div> \n </div>\n <div class=\"ai-recommened-pill-orange mt-2\" *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"!item?.rationale\">\n <div class=\"ai-recommened-pill-gray\">\n <div class=\"ai-recommened-pill-gray-text\">\n <span class=\"ai-loader-icon\"><img src=\"assets/icons/ai-loader.gif\"></span>\n \n <span>Manually Suggested - iGOT </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\" *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\" target=\"_blank\"><span>Platform - {{item?.platform}}</span></a>\n </div> \n </div>\n <div class=\"ai-recommened-pill-orange mt-2\" *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"course-title mt-4\">\n <div>\n <div *ngIf=\"item?.course\">{{item?.course}}</div>\n <!-- <div *ngIf=\"item?.name\">{{item?.name}}</div> -->\n </div>\n </div>\n <div class=\"course-desc mt-2\">\n <div *ngIf=\"isPDFDownload\">\n <div>{{item?.rationale}}</div>\n </div>\n </div>\n <div class=\"mt-3\" *ngIf=\"getCompetenciesByType('Behavioural',i)?.length\">\n <div class=\"competency-sub-heading\">Behavioral Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"behavioural-pill\"\n *ngFor=\"let comp of getDisplayedCompetencies('Behavioural',i)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Behavioural',i)\"\n class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\"\n (click)=\"toggleCompetencies('Behavioural',i)\">\n {{ isExpanded('Behavioural',i) ? 'Show Less' : '+' +\n getRemainingCount('Behavioural',i) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2\" *ngIf=\"getCompetenciesByType('Functional',i)?.length\">\n <div class=\"competency-sub-heading\">Functional Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"functional-pill\"\n *ngFor=\"let comp of getDisplayedCompetencies('Functional',i)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Functional',i)\"\n class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\"\n (click)=\"toggleCompetencies('Functional',i)\">\n {{ isExpanded('Functional',i) ? 'Show Less' : '+' +\n getRemainingCount('Functional',i) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2\" *ngIf=\"getCompetenciesByType('Domain',i)?.length\">\n <div class=\"competency-sub-heading\">Domain Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"domain-pill\"\n *ngFor=\"let comp of getDisplayedCompetencies('Domain',i)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Domain',i)\" class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\"\n (click)=\"toggleCompetencies('Domain',i)\">\n {{ isExpanded('Domain',i) ? 'Show Less' : '+' +\n getRemainingCount('Domain',i) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2 d-flex justify-content-between item\">\n <div class=\"relevancy-container\">\n <div class=\"relevancy\">Relevancy</div>\n <div class=\"dash\">-</div>\n <div class=\"percentage\" *ngIf=\"item?.relevancy\">{{item?.relevancy}}%</div>\n <div class=\"percentage\" *ngIf=\"!item?.relevancy\">N/A</div>\n </div>\n <div class=\"delete-button\">\n <mat-icon matTooltip=\"Delete Course\" matTooltipPosition=\"above\" class=\"text-danger cursor-pointer\" (click)=\"deleteCard(item, i)\" >delete</mat-icon>\n </div>\n </div>\n <!-- <div>\n <div class=\"competencies-matched-container\">\n <div class=\"competencies-matched\">Competencies Matched</div>\n <div class=\"dash\">-</div>\n <div class=\"percentage\">80%</div>\n </div>\n </div> -->\n </div>\n <!-- <div class=\"course-list-item\">\n <div class=\"course-header\">\n <div>\n <div class=\"course-pill\">\n <div class=\"course-pill-text\">Course</div>\n </div>\n </div>\n <div>\n <div class=\"ai-recommened-pill\">\n <div class=\"ai-recommened-pill-text\">\n <span class=\"ai-loader-icon\"><img src=\"assets/icons/ai-loader.gif\"></span>\n <span>AI Recommended</span>\n\n </div>\n </div>\n </div>\n </div>\n <div class=\"course-title\">\n <div>\n <div>Maternal, Infant And Young Child Nutrition</div>\n </div>\n </div>\n <div class=\"course-desc\">\n <div>\n <div>This Course directly addresses a primary responsibility of Anganwandi Care takers,\n which is\n to provide and educate on nutrition for mother and young children</div>\n </div>\n </div>\n <div>\n <div class=\"relevancy-container\">\n <div class=\"relevancy\">Relevancy</div>\n <div class=\"dash\">-</div>\n <div class=\"percentage\">90%</div>\n </div>\n </div>\n <div>\n <div class=\"competencies-matched-container\">\n <div class=\"competencies-matched\">Competencies Matched</div>\n <div class=\"dash\">-</div>\n <div class=\"percentage\">80%</div>\n </div>\n </div>\n </div> -->\n\n </div>\n </div>\n </div>\n <div class=\"popup-footer\" *ngIf=\"filterdCourses?.length\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Download\" (click)=\"downloadPdfFromBE()\"/>\n </div>\n <!-- <div>\n <input class=\"btn-active\" type=\"button\" value=\"Add Personalisation\" (click)=\"addPersonilisation()\"/>\n </div> -->\n <!-- <div>\n <input class=\"btn-active\" type=\"button\" value=\"Add More Courses\" (click)=\"addMoreCourses()\"/>\n </div> -->\n </div>\n</div>\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>","import { Component, ChangeDetectorRef, ElementRef, Inject, ViewChild } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport html2pdf from 'html2pdf.js';\nimport jsPDF from 'jspdf';\nimport html2canvas from 'html2canvas';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport * as XLSX from 'xlsx';\nimport { DeleteRoleMappingPopupComponent } from '../delete-role-mapping-popup/delete-role-mapping-popup.component';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { SharedService } from '../../modules/shared/services/shared.service';\n@Component({\n selector: 'app-view-final-cbp-plan',\n templateUrl: './view-final-cbp-plan.component.html',\n styleUrls: ['./view-final-cbp-plan.component.scss']\n})\nexport class ViewFinalCbpPlanComponent {\n constructor(\n public dialogRef: MatDialogRef<ViewFinalCbpPlanComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private dialog: MatDialog,\n private cdr: ChangeDetectorRef,\n public sharedService: SharedService,\n private snackBar: MatSnackBar,\n private fb: FormBuilder\n ) {\n this.filterForm = this.fb.group({\n language: ['en']\n });\n this.openedFrom = data?.openedFrom;\n this.getMappingData()\n }\n filterForm!: FormGroup;\n languages = [{ \"code\": \"en\", label: \"English\" },\n { \"code\": \"hi\", label: \"Hindi\" },\n { \"code\": \"te\", label: \"Telugu\" },\n { \"code\": \"kn\", label: \"Kannada\" },\n { \"code\": \"mr\", label: \"Marathi\" },\n { \"code\": \"ta\", label: \"Tamil\" },\n { \"code\": \"gu\", label: \"Gujarati\" },\n { \"code\": \"ml\", label: \"Malayalam\" },\n { \"code\": \"bn\", label: \"Bengali\" },];\n filteredLanguages = [...this.languages];\n @ViewChild('pdfContent', { static: false }) pdfContent!: ElementRef;\n loading = false\n designationData: any = []\n totalCompetencieObj = { total: 0, behavioral: 0, functional: 0, domain: 0 }\n pdfTrigger = false\n jsonData = []\n filterdCourses = [];\n planData: any\n recommended_course_id = ''\n expandedCompetencies: any = {};\n competenciesCount = { total: 0, public_courses: 0, igot: 0 };\n openedFrom!: string;\n @ViewChild('dialogContent') dialogContent!: ElementRef;\n // designationData = [\n // {\n // designation: \"Secretary (WCD)\",\n // wing: \"Ministry Leadership\",\n // updated: \"10/09/2025\",\n // rolesResponsibilities: [\n // \"Provide overall supervision of ministry programmes and schemes\",\n // \"Ensure effective coordination with State Governments for scheme implementation\",\n // \"Strategic policy formulation and implementation oversight\",\n // \"Inter-ministerial coordination and liaison\",\n // \"Parliamentary affairs management\",\n // \"Senior leadership governance and oversight\",\n // \"National programme strategic direction\",\n // \"Cabinet note writing and policy briefs\"\n // ],\n // behavioralCompetencies: [\n // \"Strategic Leadership\", \"Executive Presence\", \"Influencing and Negotiation\",\n // \"Relationship Management\", \"Verbal & Non-Verbal Fluency\", \"Planning & Prioritization\",\n // \"Accountability\", \"Conflict Management\"\n // ],\n // functionalCompetencies: [\n // \"Rules of business (AoB/ToB)\", \"Cabinet note writing\", \"Submission of briefs, supply of information\",\n // \"Policy design/ amendment\", \"Policy implementation\", \"Policy monitoring & impact assessment\",\n // \"Project Planning\", \"Project Evaluation & Monitoring\", \"Creation of M&E Framework\",\n // \"Citizen Partnering & Collaboration\", \"Public Grievance Handling\"\n // ],\n // domainCompetencies: [\n // \"Strategic Policy Formulation\", \"Inter-ministerial & State Government Coordination\",\n // \"Senior Leadership Governance & Oversight\", \"Legislative & Parliamentary Affairs Management\",\n // \"National Programme Strategic Direction\"\n // ],\n // completionRate: { behavioral: 85, functional: 78, domain: 92 }\n // }\n // ];\n\n // // Calculate the totals dynamically\n // private behavioralTotal = this.designationData.reduce((acc, item) => acc + item.behavioralCompetencies.length, 0);\n // private functionalTotal = this.designationData.reduce((acc, item) => acc + item.functionalCompetencies.length, 0);\n // private domainTotal = this.designationData.reduce((acc, item) => acc + item.domainCompetencies.length, 0);\n\n // // Calculate the averages dynamically\n // private behavioralAvg = Math.round(this.designationData.reduce((acc, item) => acc + item.completionRate.behavioral, 0) / this.designationData.length);\n // private functionalAvg = Math.round(this.designationData.reduce((acc, item) => acc + item.completionRate.functional, 0) / this.designationData.length);\n // private domainAvg = Math.round(this.designationData.reduce((acc, item) => acc + item.completionRate.domain, 0) / this.designationData.length);\n\n // overallKPIs = [\n // {\n // name: 'Behavioral Competencies',\n // total: this.behavioralTotal,\n // avgCompletion: this.behavioralAvg,\n // color: '#3B82F6',\n // bgColor: 'bg-blue-50',\n // },\n // {\n // name: 'Functional Competencies',\n // total: this.functionalTotal,\n // avgCompletion: this.functionalAvg,\n // color: '#10B981',\n // bgColor: 'bg-green-50',\n // },\n // {\n // name: 'Domain Competencies',\n // total: this.domainTotal,\n // avgCompletion: this.domainAvg,\n // color: '#8B5CF6',\n // bgColor: 'bg-purple-50',\n // },\n // {\n // name: 'Total Competencies',\n // total: this.behavioralTotal + this.functionalTotal + this.domainTotal,\n // avgCompletion: Math.round((this.behavioralAvg + this.functionalAvg + this.domainAvg) / 3),\n // color: '#4B5563',\n // bgColor: 'bg-gray-200',\n // }\n // ];\n\n closeDialog() {\n this.dialogRef.close()\n }\n\n cancelForm() {\n this.dialogRef.close()\n }\n\n saveRoleMapping() {\n\n }\n\n ngAfterViewInit() {\n console.log('this.data', this.data)\n this.jsonData = this.data?.payload\n this.cdr.detectChanges();\n\n setTimeout(() => {\n this.scrollToTop();\n });\n\n if (this.dialogContent) {\n setTimeout(() => {\n this.dialogContent.nativeElement.scrollTo({\n top: 0,\n behavior: 'smooth'\n });\n }, 500)\n\n }\n }\n\n getMappingData() {\n console.log('haredService?.cbpPlanFinalObj', this.sharedService.getCbpPlansWithSelectedCourses())\n if (this.sharedService?.cbpPlanFinalObj.ministry.sbOrgType === 'ministry') {\n this.loading = true\n let state_center_id = this.sharedService?.cbpPlanFinalObj.ministry.identifier\n\n if (this.sharedService?.cbpPlanFinalObj.departments?.length) {\n\n let department_id = this.sharedService?.cbpPlanFinalObj.departments\n this.sharedService.getRoleMappingByStateCenterAndDepartment(state_center_id, department_id).subscribe({\n next: (res) => {\n this.loading = false\n this.totalCompetencieObj = { total: 0, behavioral: 0, functional: 0, domain: 0 };\n this.designationData = [];\n\n // ✅ GLOBAL UNIQUE SETS (for overall unique count)\n const globalTotalSet = new Set<string>();\n const globalBehavioralSet = new Set<string>();\n const globalFunctionalSet = new Set<string>();\n const globalDomainSet = new Set<string>();\n\n for (let i = 0; i < res.length; i++) {\n\n // ✅ LOCAL UNIQUE SETS (per designation)\n const totalSet = new Set<string>();\n const behavioralSet = new Set<string>();\n const functionalSet = new Set<string>();\n const domainSet = new Set<string>();\n\n let competenciesObj = { total: 0, behavioral: 0, functional: 0, domain: 0 };\n\n res[i]?.competencies?.forEach(c => {\n\n const theme = (c?.theme || '').trim().toLowerCase();\n const subTheme = (c?.sub_theme || '').trim().toLowerCase();\n const type = (c?.type || '').trim().toLowerCase();\n\n if (!theme && !subTheme) return;\n\n const key = `${theme}-${subTheme}`;\n\n // ✅ PER DESIGNATION UNIQUE\n if (!totalSet.has(key)) {\n totalSet.add(key);\n competenciesObj.total++;\n }\n\n if (type === 'behavioral' && !behavioralSet.has(key)) {\n behavioralSet.add(key);\n competenciesObj.behavioral++;\n }\n\n if (type === 'functional' && !functionalSet.has(key)) {\n functionalSet.add(key);\n competenciesObj.functional++;\n }\n\n if (type === 'domain' && !domainSet.has(key)) {\n domainSet.add(key);\n competenciesObj.domain++;\n }\n\n // ✅ GLOBAL UNIQUE TRACKING\n globalTotalSet.add(key);\n\n if (type === 'behavioral') globalBehavioralSet.add(key);\n if (type === 'functional') globalFunctionalSet.add(key);\n if (type === 'domain') globalDomainSet.add(key);\n\n });\n\n this.designationData.push({\n designation: res[i].designation_name,\n wing: res[i].wing_division_section,\n updated: res[i].updated_at,\n rolesResponsibilities: res[i].role_responsibilities,\n activities: res[i].activities,\n competenciesObj,\n behavioralCompetencies: [...behavioralSet],\n functionalCompetencies: [...functionalSet],\n domainCompetencies: [...domainSet],\n selectedCourses: res[i]?.cbp_plans?.at(-1)?.selected_courses || []\n });\n\n }\n\n // ✅ SET GLOBAL COUNTS AFTER LOOP\n this.totalCompetencieObj.total = globalTotalSet.size;\n this.totalCompetencieObj.behavioral = globalBehavioralSet.size;\n this.totalCompetencieObj.functional = globalFunctionalSet.size;\n this.totalCompetencieObj.domain = globalDomainSet.size;\n\n this.cdr.detectChanges();\n this.cdr.detectChanges();\n setTimeout(() => {\n this.scrollToTop()\n }, 1000);\n console.log('this.designationData', this.designationData)\n console.log('this.totalCompetencieObj', this.totalCompetencieObj)\n },\n error: (error) => {\n this.loading = false\n this.snackBar.open(error?.error?.detail, 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n });\n } else {\n\n this.sharedService.getRoleMappingByStateCenter(state_center_id).subscribe({\n next: (res) => {\n this.loading = false\n console.log('res', res)\n this.totalCompetencieObj = { total: 0, behavioral: 0, functional: 0, domain: 0 };\n this.designationData = [];\n\n // ✅ GLOBAL UNIQUE SETS (for overall unique count)\n const globalTotalSet = new Set<string>();\n const globalBehavioralSet = new Set<string>();\n const globalFunctionalSet = new Set<string>();\n const globalDomainSet = new Set<string>();\n\n for (let i = 0; i < res.length; i++) {\n\n // ✅ LOCAL UNIQUE SETS (per designation)\n const totalSet = new Set<string>();\n const behavioralSet = new Set<string>();\n const functionalSet = new Set<string>();\n const domainSet = new Set<string>();\n\n let competenciesObj = { total: 0, behavioral: 0, functional: 0, domain: 0 };\n\n res[i]?.competencies?.forEach(c => {\n\n const theme = (c?.theme || '').trim().toLowerCase();\n const subTheme = (c?.sub_theme || '').trim().toLowerCase();\n const type = (c?.type || '').trim().toLowerCase();\n\n if (!theme && !subTheme) return;\n\n const key = `${theme}-${subTheme}`;\n\n // ✅ PER DESIGNATION UNIQUE\n if (!totalSet.has(key)) {\n totalSet.add(key);\n competenciesObj.total++;\n }\n\n if (type === 'behavioral' && !behavioralSet.has(key)) {\n behavioralSet.add(key);\n competenciesObj.behavioral++;\n }\n\n if (type === 'functional' && !functionalSet.has(key)) {\n functionalSet.add(key);\n competenciesObj.functional++;\n }\n\n if (type === 'domain' && !domainSet.has(key)) {\n domainSet.add(key);\n competenciesObj.domain++;\n }\n\n // ✅ GLOBAL UNIQUE TRACKING\n globalTotalSet.add(key);\n\n if (type === 'behavioral') globalBehavioralSet.add(key);\n if (type === 'functional') globalFunctionalSet.add(key);\n if (type === 'domain') globalDomainSet.add(key);\n\n });\n\n this.designationData.push({\n designation: res[i].designation_name,\n wing: res[i].wing_division_section,\n updated: res[i].updated_at,\n rolesResponsibilities: res[i].role_responsibilities,\n activities: res[i].activities,\n competenciesObj,\n behavioralCompetencies: [...behavioralSet],\n functionalCompetencies: [...functionalSet],\n domainCompetencies: [...domainSet],\n selectedCourses: res[i]?.cbp_plans?.at(-1)?.selected_courses || []\n });\n\n }\n\n // ✅ SET GLOBAL COUNTS AFTER LOOP\n this.totalCompetencieObj.total = globalTotalSet.size;\n this.totalCompetencieObj.behavioral = globalBehavioralSet.size;\n this.totalCompetencieObj.functional = globalFunctionalSet.size;\n this.totalCompetencieObj.domain = globalDomainSet.size;\n\n this.cdr.detectChanges();\n this.cdr.detectChanges();\n setTimeout(() => {\n this.scrollToTop()\n }, 1000);\n\n },\n\n error: (error) => {\n this.loading = false\n this.snackBar.open(error?.error?.detail, 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n });\n }\n\n\n\n }\n if (this.sharedService?.cbpPlanFinalObj.ministry.sbOrgType === 'state') {\n this.loading = true\n console.log('this.sharedService?.cbpPlanFinalObj', this.sharedService?.cbpPlanFinalObj)\n let state_center_id = this.sharedService?.cbpPlanFinalObj.ministry.identifier\n let department_id = this.sharedService?.cbpPlanFinalObj.departments\n // this.sharedService.getRoleMappingByStateCenterAndDepartment(state_center_id, department_id).subscribe((res)=>{\n // console.log('res', res)\n // let behavioralCompetencies =[]\n // let functionalCompetencies =[]\n // let domainCompetencies =[]\n // for(let i=0; i<res.length;i++) {\n // behavioralCompetencies = []\n // functionalCompetencies =[]\n // domainCompetencies =[]\n // let competenciesObj = {total:0, behavioral:0, functional:0, domain:0}\n // res[i].competencies.forEach(c => {\n // competenciesObj.total++;\n // this.totalCompetencieObj.total++\n // if (c.type.toLowerCase() === 'behavioral') { \n\n // behavioralCompetencies.push(`${c.theme} - ${c.sub_theme}`)\n // competenciesObj.behavioral++;\n // this.totalCompetencieObj.behavioral++\n // }\n // if (c.type.toLowerCase() === 'functional') {\n // functionalCompetencies.push(`${c.theme} - ${c.sub_theme}`)\n // competenciesObj.functional++;\n // this.totalCompetencieObj.functional++\n // }\n // if (c.type.toLowerCase() === 'domain') { \n // domainCompetencies.push(`${c.theme} - ${c.sub_theme}`)\n // competenciesObj.domain++;\n // this.totalCompetencieObj.domain++\n\n // }\n // });\n // let obj:any = {\n // designation: res[i].designation_name,\n // wing: res[i].wing_division_section,\n // updated: res[i].updated_at,\n // rolesResponsibilities: res[i].role_responsibilities,\n // activities:res[i].activities,\n // competenciesObj: competenciesObj,\n // behavioralCompetencies: behavioralCompetencies,\n // functionalCompetencies: functionalCompetencies,\n // domainCompetencies: domainCompetencies\n // // behavioralCompetencies: [\n // // \"Strategic Leadership\", \"Executive Presence\", \"Influencing and Negotiation\",\n // // \"Relationship Management\", \"Verbal & Non-Verbal Fluency\", \"Planning & Prioritization\",\n // // \"Accountability\", \"Conflict Management\"\n // // ],\n // // functionalCompetencies: [\n // // \"Rules of business (AoB/ToB)\", \"Cabinet note writing\", \"Submission of briefs, supply of information\",\n // // \"Policy design/ amendment\", \"Policy implementation\", \"Policy monitoring & impact assessment\",\n // // \"Project Planning\", \"Project Evaluation & Monitoring\", \"Creation of M&E Framework\",\n // // \"Citizen Partnering & Collaboration\", \"Public Grievance Handling\"\n // // ],\n // // domainCompetencies: [\n // // \"Strategic Policy Formulation\", \"Inter-ministerial & State Government Coordination\",\n // // \"Senior Leadership Governance & Oversight\", \"Legislative & Parliamentary Affairs Management\",\n // // \"National Programme Strategic Direction\"\n // // ],\n // // completionRate: { behavioral: 85, functional: 78, domain: 92 }\n // }\n\n\n // this.designationData.push(obj)\n // }\n // this.cdr.detectChanges();\n // setTimeout(() => {\n // this.scrollToTop()\n // }, 1000);\n // console.log('this.designationData', this.designationData)\n // console.log('this.totalCompetencieObj', this.totalCompetencieObj )\n\n // })\n this.sharedService.getRoleMappingByStateCenterAndDepartment(state_center_id, department_id).subscribe({\n next: (res) => {\n this.loading = false\n console.log('res', res)\n this.totalCompetencieObj = { total: 0, behavioral: 0, functional: 0, domain: 0 };\n this.designationData = [];\n\n // ✅ GLOBAL UNIQUE SETS (for overall unique count)\n const globalTotalSet = new Set<string>();\n const globalBehavioralSet = new Set<string>();\n const globalFunctionalSet = new Set<string>();\n const globalDomainSet = new Set<string>();\n\n for (let i = 0; i < res.length; i++) {\n\n // ✅ LOCAL UNIQUE SETS (per designation)\n const totalSet = new Set<string>();\n const behavioralSet = new Set<string>();\n const functionalSet = new Set<string>();\n const domainSet = new Set<string>();\n\n let competenciesObj = { total: 0, behavioral: 0, functional: 0, domain: 0 };\n\n res[i]?.competencies?.forEach(c => {\n\n const theme = (c?.theme || '').trim().toLowerCase();\n const subTheme = (c?.sub_theme || '').trim().toLowerCase();\n const type = (c?.type || '').trim().toLowerCase();\n\n if (!theme && !subTheme) return;\n\n const key = `${theme}-${subTheme}`;\n\n // ✅ PER DESIGNATION UNIQUE\n if (!totalSet.has(key)) {\n totalSet.add(key);\n competenciesObj.total++;\n }\n\n if (type === 'behavioral' && !behavioralSet.has(key)) {\n behavioralSet.add(key);\n competenciesObj.behavioral++;\n }\n\n if (type === 'functional' && !functionalSet.has(key)) {\n functionalSet.add(key);\n competenciesObj.functional++;\n }\n\n if (type === 'domain' && !domainSet.has(key)) {\n domainSet.add(key);\n competenciesObj.domain++;\n }\n\n // ✅ GLOBAL UNIQUE TRACKING\n globalTotalSet.add(key);\n\n if (type === 'behavioral') globalBehavioralSet.add(key);\n if (type === 'functional') globalFunctionalSet.add(key);\n if (type === 'domain') globalDomainSet.add(key);\n\n });\n\n this.designationData.push({\n designation: res[i].designation_name,\n wing: res[i].wing_division_section,\n updated: res[i].updated_at,\n rolesResponsibilities: res[i].role_responsibilities,\n activities: res[i].activities,\n competenciesObj,\n behavioralCompetencies: [...behavioralSet],\n functionalCompetencies: [...functionalSet],\n domainCompetencies: [...domainSet],\n selectedCourses: res[i]?.cbp_plans?.at(-1)?.selected_courses || []\n });\n\n }\n\n // ✅ SET GLOBAL COUNTS AFTER LOOP\n this.totalCompetencieObj.total = globalTotalSet.size;\n this.totalCompetencieObj.behavioral = globalBehavioralSet.size;\n this.totalCompetencieObj.functional = globalFunctionalSet.size;\n this.totalCompetencieObj.domain = globalDomainSet.size;\n\n this.cdr.detectChanges();\n\n\n this.cdr.detectChanges();\n setTimeout(() => {\n this.scrollToTop()\n }, 1000);\n console.log('this.designationData', this.designationData)\n console.log('this.totalCompetencieObj', this.totalCompetencieObj)\n },\n error: (error) => {\n this.loading = false\n this.snackBar.open(error?.error?.detail, 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n });\n }\n\n\n\n }\n getCompetenciesByType(type: string, course: any): any[] {\n if (!course) {\n return [];\n }\n\n let competencies: any[] = [];\n\n // AI Recommended / Public / User Added\n if (Array.isArray(course.competencies)) {\n competencies = course.competencies;\n }\n // Manually Suggested - iGOT (v6)\n else if (Array.isArray(course.competencies_v6)) {\n competencies = course.competencies_v6;\n }\n\n if (!competencies.length) {\n return [];\n }\n\n const normalizedType = type.toLowerCase().trim();\n\n return competencies.filter(c => {\n if (!c?.competencyAreaName) {\n return false;\n }\n\n const area = c.competencyAreaName.toLowerCase().trim();\n\n // handle behavioural / behavioral\n if (normalizedType === 'behavioural' || normalizedType === 'behavioral') {\n return area === 'behavioural' || area === 'behavioral';\n }\n\n return area === normalizedType;\n });\n }\n\n getDisplayedCompetencies(type: string, index: number): any[] {\n const competencies = this.getCompetenciesByType(type, index);\n const key = `${index}-${type}`;\n\n if (this.expandedCompetencies[key]) {\n return competencies;\n }\n\n return competencies.slice(0, 2);\n }\n\n toggleCompetencies(type: string, index: number): void {\n const key = `${index}-${type}`;\n this.expandedCompetencies[key] = !this.expandedCompetencies[key];\n }\n\n isExpanded(type: string, index: number): boolean {\n const key = `${index}-${type}`;\n return this.expandedCompetencies[key] || false;\n }\n\n hasMoreThanTwo(type: string, index: number): boolean {\n return this.getCompetenciesByType(type, index).length > 2;\n }\n getRemainingCount(type: string, index: number): number {\n const totalCount = this.getCompetenciesByType(type, index).length;\n return totalCount - 2;\n }\n updateCompetencyCounts() {\n // const comps = this.competenciesArray.value;\n this.competenciesCount = { total: 0, public_courses: 0, igot: 0 };\n this.filterdCourses.forEach(c => {\n this.competenciesCount.total++;\n if (c.is_public) this.competenciesCount.public_courses++;\n if (!c.is_public) this.competenciesCount.igot++;\n });\n }\n\n confirmDeleteCourse(item: any, index: number) {\n const roleMappingId = this.recommended_course_id;\n const courseIdentifier =\n item?.course_identifier || item?.id || item?.identifier;\n\n if (!roleMappingId || !courseIdentifier) {\n this.snackBar.open('Unable to delete course', 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n return;\n }\n\n this.loading = true;\n\n this.sharedService\n .deleteRecommendedCourse(roleMappingId, courseIdentifier)\n .subscribe({\n next: () => {\n // Remove from UI\n this.filterdCourses.splice(index, 1);\n\n // Update counts\n this.updateCompetencyCounts();\n\n this.loading = false;\n\n this.snackBar.open('Course deleted successfully', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n },\n error: (error) => {\n this.loading = false;\n\n this.snackBar.open(\n error?.error?.detail || 'Failed to delete course',\n 'X',\n {\n duration: 3000,\n panelClass: ['snackbar-error']\n }\n );\n }\n });\n }\n\n deleteCard(item: any, index: number) {\n console.log(\"item, index\", item, index)\n const dialogRef = this.dialog.open(DeleteRoleMappingPopupComponent, {\n width: '600px',\n data: {\n planId: this.planData?.id, // role mapping id\n course: item, // course object\n index: index,\n from: 'viewCourse' // index for UI removal\n },\n panelClass: 'view-cbp-plan-popup',\n minHeight: '300px',\n maxHeight: '90vh',\n disableClose: true\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result === 'saved') {\n this.confirmDeleteCourse(item, index);\n }\n });\n }\n scrollToTop(): void {\n\n // if (this.pdfContent && this.pdfContent.nativeElement && this.pdfContent.nativeElement.scrollTop !== undefined) {\n // this.pdfContent.nativeElement.scrollTop = 0;\n // } else {\n // window.scrollTo({ top: 0, behavior: 'smooth' });\n // }\n // const dialogContainer = document.querySelector('mat-dialog-container');\n // if (dialogContainer) {\n // dialogContainer.scrollTop = 0;\n // }\n }\n\n downloadPDF() {\n this.pdfTrigger = true\n this.loading = true;\n // const element = this.pdfContent.nativeElement;\n\n // // Wait for images to load\n // const images = element.querySelectorAll('img');\n // const promises = Array.from(images).map((img: HTMLImageElement) => {\n // if (img.complete) return Promise.resolve();\n // return new Promise(resolve => img.onload = resolve);\n // });\n\n // Promise.all(promises).then(() => {\n // const options = {\n // margin: 0.5,\n // filename: 'Final CBP Plan.pdf',\n // image: { type: 'jpeg', quality: 0.98 },\n // html2canvas: {\n // scale: 2,\n // useCORS: true,\n // scrollY: 0,\n // },\n // jsPDF: {\n // unit: 'in',\n // format: 'a4',\n // orientation: 'portrait'\n // },\n // pagebreak: {\n // mode: ['css', 'legacy', 'avoid-all']\n // }\n // };\n\n // html2pdf().from(element).set(options).save();\n // });\n //const element = this.pdfContent.nativeElement;\n\n this.loading = true;\n const element = this.pdfContent.nativeElement;\n html2canvas(element, {\n scale: 1.25,\n useCORS: true,\n scrollY: 0,\n logging: true,\n }).then((canvas) => {\n const pdf = new jsPDF('p', 'mm', 'a4');\n const pdfWidth = pdf.internal.pageSize.getWidth();\n const pdfHeight = pdf.internal.pageSize.getHeight();\n\n // Margins\n const marginLeft = 5;\n const marginTop = 15;\n const marginRight = 5;\n const marginBottom = 15;\n\n const usableWidth = pdfWidth - marginLeft - marginRight;\n const usableHeight = pdfHeight - marginTop - marginBottom;\n\n const canvasWidth = canvas.width;\n const canvasHeight = canvas.height;\n\n const ratio = canvasWidth / usableWidth;\n const pageHeightPx = usableHeight * ratio;\n\n const totalPages = Math.ceil(canvasHeight / pageHeightPx);\n\n for (let page = 0; page < totalPages; page++) {\n const canvasPage = document.createElement('canvas');\n canvasPage.width = canvasWidth;\n canvasPage.height = Math.min(pageHeightPx, canvasHeight - page * pageHeightPx);\n\n const ctx = canvasPage.getContext('2d');\n if (ctx) {\n ctx.fillStyle = '#ffffff';\n ctx.fillRect(0, 0, canvasPage.width, canvasPage.height);\n\n ctx.drawImage(\n canvas,\n 0, page * pageHeightPx,\n canvasWidth, canvasPage.height,\n 0, 0,\n canvasWidth, canvasPage.height\n );\n }\n\n const imgData = canvasPage.toDataURL('image/png', 1);\n if (page > 0) pdf.addPage();\n const imgHeightMM = canvasPage.height / ratio;\n pdf.addImage(imgData, 'PNG', marginLeft, marginTop, usableWidth, imgHeightMM);\n }\n\n pdf.save('Final_CBP.pdf');\n this.loading = false;\n }).catch((error) => {\n console.error('PDF generation error:', error);\n this.loading = false;\n });\n\n\n\n\n\n\n\n }\n\n downloadPDFNew() {\n this.loading = true\n const element = this.pdfContent.nativeElement;\n\n const opt = {\n margin: [10, 5, 5, 10], // top, left, bottom, right in mm\n filename: 'CBP_Plan.pdf',\n image: { type: 'jpeg', quality: 0.85 },\n html2canvas: { scale: 1.5, useCORS: true, logging: false },\n jsPDF: { unit: 'mm', format: 'a4', orientation: 'landscape' },\n pagebreak: { mode: ['avoid-all', 'css', 'legacy'] } // avoid cutting text\n };\n\n html2pdf()\n .set(opt)\n .from(element)\n .save()\n .then(() => {\n // PDF download finished\n this.loading = false;\n })\n .catch(() => {\n // Handle errors and stop loading\n this.loading = false;\n });\n\n setTimeout(() => {\n this.loading = false;\n }, 2000);\n\n\n\n }\n\n\n\n generateExcel(jsonArray: any[], filename: string = \"final.xlsx\") {\n console.log('jsonArray', jsonArray)\n\n if (!jsonArray || jsonArray.length === 0) return;\n\n // -------- MAIN HEADER FROM FIRST OBJECT ---------\n const firstObj = jsonArray[0];\n let title = firstObj.state_center_name || \"\";\n if (firstObj.department_name) title += \" / \" + firstObj.department_name;\n\n // -------- COLUMN HEADERS ---------\n const headers = [\n \"Designation\",\n \"Role & Responsibilities\",\n \"Activities\",\n \"Behavioral Competencies\",\n \"Functional Competencies\",\n \"Domain Competencies\",\n 'courseDetails'\n ];\n\n // -------- DATA ROWS ---------\n const dataRows = jsonArray.map(json => {\n const courses =\n json?.cbp_plans?.length\n ? json.cbp_plans[json.cbp_plans.length - 1]?.selected_courses || []\n : [];\n\n const courseDetails = courses.map((c: any, i: number) => {\n const competencies = (c.competencies || [])\n .map((cc: any) =>\n `${cc.competencyAreaName} → ${cc.competencyThemeName} → ${cc.competencySubThemeName}`\n )\n .join(\" | \");\n\n return (\n `${i + 1}. Course Name: ${c.course}\\n` +\n ` Identifier: ${c.identifier}\\n` +\n ` Duration (mins): ${Math.round(+c.duration / 60)}\\n` +\n ` Relevancy: ${c.relevancy}%\\n` +\n ` Rationale: ${c.rationale}\\n` +\n ` Organisation: ${(c.organisation || []).join(\", \")}\\n` +\n ` Competencies: ${competencies}`\n );\n }).join(\"\\n\\n\");\n return {\n \"Designation\": `${json.designation_name} : Wing/Division - ${json.wing_division_section}`,\n \"Role & Responsibilities\": (json.role_responsibilities || [])\n .map((v: string, i: number) => `${i + 1}. ${v}`).join(\"\\n\\n\"),\n \"Activities\": (json.activities || [])\n .map((v: string, i: number) => `${i + 1}. ${v}`).join(\"\\n\\n\"),\n \"Behavioral Competencies\": (json.competencies || [])\n .filter((c: any) => c.type === \"Behavioral\")\n .map((c: any, i: number) => `${i + 1}. ${c.theme} - ${c.sub_theme}`).join(\"\\n\\n\"),\n \"Functional Competencies\": (json.competencies || [])\n .filter((c: any) => c.type === \"Functional\")\n .map((c: any, i: number) => `${i + 1}. ${c.theme} - ${c.sub_theme}`).join(\"\\n\\n\"),\n \"Domain Competencies\": (json.competencies || [])\n .filter((c: any) => c.type === \"Domain\")\n .map((c: any, i: number) => `${i + 1}. ${c.theme} - ${c.sub_theme}`).join(\"\\n\\n\"),\n \"Course Details\": courseDetails\n };\n });\n\n\n // -------- CREATE WORKSHEET ---------\n const ws = XLSX.utils.aoa_to_sheet([]);\n\n // Main header (merged)\n XLSX.utils.sheet_add_aoa(ws, [[title]], { origin: \"A1\" });\n ws['!merges'] = [{\n s: { r: 0, c: 0 },\n e: { r: 0, c: headers.length - 1 }\n }];\n\n // Column headers at row 2\n XLSX.utils.sheet_add_aoa(ws, [headers], { origin: \"A2\" });\n\n // Style column headers\n headers.forEach((header, index) => {\n const cellAddress = XLSX.utils.encode_cell({ r: 1, c: index });\n if (ws[cellAddress]) {\n ws[cellAddress].s = {\n font: { bold: true },\n fill: { patternType: \"solid\", fgColor: { rgb: \"FFFF00\" } },\n alignment: { horizontal: \"center\", vertical: \"center\", wrapText: true }\n };\n }\n });\n\n // Insert data rows starting from row 3\n XLSX.utils.sheet_add_json(ws, dataRows, { origin: \"A3\", skipHeader: true });\n\n // Auto column widths based on longest line in each column\n const colWidths = headers.map((header, idx) => {\n const maxLen = Math.max(\n header.length,\n ...dataRows.map(row => (row[header] || \"\").split(\"\\n\").reduce((a, b) => Math.max(a, b.length), 0))\n );\n return { wch: Math.min(Math.max(maxLen + 5, 20), 80) }; // min 20, max 80\n });\n ws['!cols'] = colWidths;\n\n // Wrap text in data rows\n dataRows.forEach((row, rowIndex) => {\n headers.forEach((header, colIndex) => {\n const cellAddress = XLSX.utils.encode_cell({ r: rowIndex + 2, c: colIndex });\n if (ws[cellAddress]) {\n ws[cellAddress].s = { alignment: { wrapText: true, vertical: \"top\" } };\n }\n });\n });\n\n // Style main header\n if (ws[\"A1\"]) {\n ws[\"A1\"].s = {\n font: { bold: true, sz: 16 },\n alignment: { horizontal: \"center\", vertical: \"center\" }\n };\n }\n\n // -------- CREATE WORKBOOK ---------\n const wb = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(wb, ws, \"Sheet1\");\n\n // Export Excel\n XLSX.writeFile(wb, filename);\n }\n\n\n\n\n downloadCSV() {\n let fileName = ''\n if (!this.sharedService?.cbpPlanFinalObj.departments) {\n fileName = `CBP_Report_${this.sharedService?.cbpPlanFinalObj.ministry.identifier}_${this.sharedService?.cbpPlanFinalObj.departments}.xlsx`\n } else {\n fileName = `CBP_Report_${this.sharedService?.cbpPlanFinalObj.ministry.identifier}.xlsx`\n }\n this.generateExcel(this.jsonData, fileName);\n }\n\n downloadPdfFromBE(context: string) {\n let selectedLanguage = this.filterForm.get('language')?.value || 'en';\n this.loading = true\n // this.sharedService.downloadPdf(this.sharedService?.cbpPlanFinalObj.ministry.identifier)\n if (!this.sharedService?.cbpPlanFinalObj.departments) {\n this.sharedService.downloadPdf(this.sharedService?.cbpPlanFinalObj.ministry.identifier, context, selectedLanguage)\n } else {\n this.sharedService.downloadPdfForDepartment(this.sharedService?.cbpPlanFinalObj.ministry.identifier, this.sharedService?.cbpPlanFinalObj.departments, context, selectedLanguage)\n }\n\n setTimeout(() => {\n this.loading = false\n }, 5000)\n }\n getSelectedCourses(department: any): any[] {\n if (!department?.cbp_plans?.length) {\n return [];\n }\n\n // take latest CBP plan (or adjust logic if needed)\n const latestPlan = department.cbp_plans[department.cbp_plans.length - 1];\n\n return latestPlan?.selected_courses || [];\n }\n\n applyFilters() {\n\n }\n\n filterList(value: string, type: string) {\n const search = value.toLowerCase();\n\n switch (type) {\n\n case 'language':\n this.filteredLanguages = this.languages.filter(v => v.label?.toLowerCase().includes(search));\n break;\n }\n }\n\n}","<div class=\"view-cbp-plan\" #dialogContent style=\"max-height: 80vh; overflow: auto;\">\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div class=\"header-container\">\n <div>\n <div class=\"heading\">View Final <span *ngIf=\"openedFrom === 'cbp'\">CBP</span><span\n *ngIf=\"openedFrom === 'acbp'\">ACBP</span></div>\n </div>\n <div class=\"right-side-container\">\n <div class=\"search-and-buttons-container\">\n <form [formGroup]=\"filterForm\">\n <div>\n <mat-form-field appearance=\"outline\" class=\"language-select\" style=\" height: 34px;\">\n <mat-label style=\"font-weight: normal;\">\n {{ filterForm.get('language')?.value ? '' : 'Select Language' }}\n </mat-label>\n\n <mat-select formControlName=\"language\" panelClass=\"select-search-panel\"\n (selectionChange)=\"applyFilters()\">\n\n <!-- Search box -->\n <input style=\"border:1px solid #ccc; padding: 5px;width: 92%;margin: 5px;\"\n matInput placeholder=\"Search Languages\" (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (keyup)=\"filterList($any($event.target).value, 'language')\" />\n\n <!-- Values -->\n <mat-option *ngFor=\"let r of filteredLanguages\" [value]=\"r?.code\">\n {{ r?.label }}\n </mat-option>\n\n </mat-select>\n </mat-form-field>\n </div>\n </form>\n </div>\n <div class=\"cursor-pointer\" (click)=\"closeDialog()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n </div>\n\n\n\n </div>\n <div class=\"section-container\" #pdfContent>\n <header class=\"bg-white header-border\">\n <div class=\"header-flex justify-between\" style=\"width:100%\">\n <div class=\"flex items-center space-x-4\" style=\"width:50%\">\n <div class=\"image-container\">\n <div>\n <img src=\"assets/icons/dopt-logo.png\" alt=\"Department of Personnel & Training\"\n class=\"h-15\" />\n </div>\n <div>\n <img src=\"assets/icons/CBC_logo.svg\" alt=\"Capacity Building Commission Logo\"\n class=\"h-10\" />\n </div>\n <div>\n <img src=\"assets/icons/karmayogiLogo-min.png\" alt=\"Karmayogi Bharat Logo\"\n class=\"h-10\" />\n </div>\n </div>\n </div>\n <div class=\"text-right\" style=\"width:50%\">\n <h1 class=\"text-2xl font-bold text-gray-900\">\n <span\n *ngIf=\"sharedService?.cbpPlanFinalObj?.ministry?.sbOrgType === 'state'\">{{sharedService?.cbpPlanFinalObj?.ministry?.orgName}}</span>\n <span\n *ngIf=\"sharedService?.cbpPlanFinalObj?.ministry?.sbOrgType === 'ministry'\">{{sharedService?.cbpPlanFinalObj?.ministry?.orgName}}</span>\n <span\n *ngIf=\"sharedService?.cbpPlanFinalObj?.department_name\">/{{sharedService?.cbpPlanFinalObj?.department_name}}</span>\n - Capacity Building Plan\n </h1>\n <p class=\"text-gray-600\">Comprehensive Role-Based Competency Analysis</p>\n </div>\n </div>\n </header>\n <div class=\"min-h-screen bg-gradient-to-br from-slate-50 via-blue-50 to-indigo-100\">\n <!-- Header -->\n\n\n <div class=\"max-w-7xl mx-auto px-6 py-8 mt-4\">\n <!-- KPI Dashboard -->\n <div class=\"competency-container mt-2\">\n <div class=\"outside-layer-total\">\n <div class=\"horizontal-flex mt-2\">\n <div>\n <svg class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <path d=\"M14 2v6h6\" />\n <path d=\"M16 13H8\" />\n <path d=\"M16 17H8\" />\n <path d=\"M10 9H8\" />\n </svg>\n </div>\n <div>\n <div class=\"count\">{{totalCompetencieObj?.total}}</div>\n </div>\n </div>\n\n <div class=\"mt-4\">\n <div class=\"sub-heading\">\n <p>Total Competencies</p>\n </div>\n </div>\n <div class=\"progress-bar mt-2\">\n <div class=\"progress-bar-fill\" style=\"width: 60%;\"></div>\n </div>\n <div>\n <div class=\"sub-text\">Total Competencies: {{totalCompetencieObj?.total}}</div>\n </div>\n <div class=\"count\">\n <!-- {{competenciesCount?.total}} -->\n </div>\n </div>\n <div class=\"outside-layer-behavioral\">\n <div class=\"horizontal-flex mt-2\">\n <div>\n <svg class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M15.5 17a4 4 0 0 1-5 0\" />\n <path d=\"M13 14h.01\" />\n <path d=\"M11 11h.01\" />\n <path d=\"M17 14h.01\" />\n <path d=\"M13 10h.01\" />\n <path d=\"M13 18h.01\" />\n <path d=\"M13 6h.01\" />\n <path d=\"M17 18h.01\" />\n <path d=\"M17 6h.01\" />\n <path d=\"M21 12a9 9 0 0 1-9 9a9 9 0 0 1-9-9a9 9 0 0 1 9-9a9 9 0 0 1 9 9z\" />\n </svg>\n </div>\n <div>\n <div class=\"count\">{{totalCompetencieObj?.behavioral}}</div>\n </div>\n </div>\n\n <div class=\"mt-2\">\n <div class=\"sub-heading\">\n <p>Behavioral Competencies</p>\n </div>\n </div>\n <div class=\"progress-bar mt-2\">\n <div class=\"progress-bar-fill-behavioural\" style=\"width: 60%;\"></div>\n </div>\n <div>\n <div class=\"sub-text\">Behavioral Competencies: {{totalCompetencieObj?.behavioral}}\n </div>\n </div>\n\n </div>\n <div class=\"outside-layer-functional\">\n <div class=\"horizontal-flex mt-2\">\n <div>\n <svg class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\" />\n <path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\" />\n </svg>\n </div>\n <div>\n <div class=\"count\">{{totalCompetencieObj?.functional}}</div>\n </div>\n </div>\n\n <div class=\"mt-2\">\n <div class=\"sub-heading\">\n <p>Functional Competencies</p>\n </div>\n </div>\n <div class=\"progress-bar mt-2\">\n <div class=\"progress-bar-fill-functional\" style=\"width: 60%;\"></div>\n </div>\n <div>\n <div class=\"sub-text\">Functional Competencies: {{totalCompetencieObj?.functional}}</div>\n </div>\n\n\n </div>\n <div class=\"outside-layer-domain\">\n <div class=\"horizontal-flex mt-2\">\n <div>\n <svg class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <circle cx=\"12\" cy=\"12\" r=\"6\" />\n <circle cx=\"12\" cy=\"12\" r=\"2\" />\n </svg>\n </div>\n <div>\n <div class=\"count\">{{totalCompetencieObj?.domain}}</div>\n </div>\n </div>\n\n <div class=\"mt-2\">\n <div class=\"sub-heading\">\n <p>Domain Competencies</p>\n </div>\n </div>\n <div class=\"progress-bar mt-2\">\n <div class=\"progress-bar-fill-domain\" style=\"width: 60%;\"></div>\n </div>\n <div>\n <div class=\"sub-text\">Domain Competencies: {{totalCompetencieObj?.domain}}</div>\n </div>\n\n </div>\n </div>\n <!-- <div class=\"mb-8\">\n <h2 class=\"text-2xl font-bold text-gray-900 mb-6nheading\">Competency Overview</h2>\n <div class=\"competency-grid\">\n <ng-container *ngFor=\"let kpi of overallKPIs;\">\n <div class=\"bg-white rounded-xl outside-layer-total p-6 border-l-4 hover:shadow-xl transition-shadow\" [style.border-left-color]=\"kpi.color\">\n <div class=\"flex items-center justify-between mb-4 inside-layer\">\n <div [class]=\"'p-3 rounded-lg ' + kpi.bgColor\">\n <ng-container [ngSwitch]=\"kpi.name\">\n <svg *ngSwitchCase=\"'Behavioral Competencies'\" class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M15.5 17a4 4 0 0 1-5 0\"/>\n <path d=\"M13 14h.01\"/><path d=\"M11 11h.01\"/><path d=\"M17 14h.01\"/><path d=\"M13 10h.01\"/>\n <path d=\"M13 18h.01\"/><path d=\"M13 6h.01\"/><path d=\"M17 18h.01\"/><path d=\"M17 6h.01\"/>\n <path d=\"M21 12a9 9 0 0 1-9 9a9 9 0 0 1-9-9a9 9 0 0 1 9-9a9 9 0 0 1 9 9z\"/>\n </svg>\n \n <svg *ngSwitchCase=\"'Functional Competencies'\" class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\"/><path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\"/>\n </svg>\n \n <svg *ngSwitchCase=\"'Domain Competencies'\" class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/><circle cx=\"12\" cy=\"12\" r=\"6\"/><circle cx=\"12\" cy=\"12\" r=\"2\"/>\n </svg>\n \n <svg *ngSwitchCase=\"'Total Competencies'\" class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/>\n <path d=\"M14 2v6h6\"/><path d=\"M16 13H8\"/><path d=\"M16 17H8\"/><path d=\"M10 9H8\"/>\n </svg>\n \n </ng-container>\n </div>\n <div class=\"text-right\">\n <div class=\"text-2xl font-bold text-gray-900\">{{kpi.total}}</div>\n </div>\n </div>\n <h3 class=\"text-gray-900 font-semibold mb-2 heading\">{{kpi.name}}</h3>\n <div class=\"w-full bg-gray-200 rounded-full h-3\">\n <div class=\"h-3 rounded-full transition-all duration-500\"\n [style.width.%]=\"kpi.avgCompletion\"\n [style.background-color]=\"kpi.color\">\n </div>\n </div>\n <p class=\"text-sm text-gray-500 mt-2\">Total Competencies: {{kpi.total}}</p>\n </div>\n </ng-container>\n </div>\n </div> -->\n\n <!-- Designation Reports -->\n <div class=\"space-y-8 mt-4\">\n <h2 class=\"text-2xl font-bold text-gray-900 mb-6 heading\">Detailed Competency Framework by\n Designation</h2>\n\n <ng-container *ngFor=\"let designation of designationData;\">\n <div class=\"bg-white rounded-xl overflow-hidden section-shadow\">\n <!-- Header -->\n <div\n class=\"bg-gradient-to-r from-indigo-600 to-blue-600 text-white p-6 heading-with-bg\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h3 class=\"text-2xl font-bold mb-2 heading-bg\">{{designation.designation}}\n </h3>\n <p class=\"text-indigo-100 mb-1\">Wing/Division: {{designation.wing}}</p>\n </div>\n <div class=\"flex items-center space-x-4 competency-count-by-designation\">\n <span class=\"font-semibold text-sm\">Behavioral:\n {{designation.behavioralCompetencies.length}} total</span>\n <span class=\"font-semibold text-sm\">Functional:\n {{designation.functionalCompetencies.length}} total</span>\n <span class=\"font-semibold text-sm\">Domain:\n {{designation.domainCompetencies.length}} total</span>\n </div>\n </div>\n </div>\n\n <!-- Body -->\n <div class=\"p-4 section-shadow\">\n <!-- Roles -->\n <div class=\"mb-6\">\n <h4 class=\"text-xl font-semibold text-gray-900 mb-3 flex items-center\">\n <svg class=\"h-5 w-5 mr-2 text-indigo-600 icon-sm\" fill=\"none\"\n viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\n </svg>\n Roles & Responsibilities\n </h4>\n <div class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-2\">\n <div *ngFor=\"let role of designation.rolesResponsibilities; let i = index\"\n class=\"bg-gray-50 p-2 rounded border-l-3 border-indigo-500\">\n <p class=\"text-sm text-gray-700 leading-relaxed\">{{role}}</p>\n </div>\n </div>\n </div>\n <!-- Activities -->\n <div class=\"mb-6 mt-4\">\n <h4 class=\"text-xl font-semibold text-gray-900 mb-3 flex items-center\">\n <svg class=\"h-5 w-5 mr-2 text-indigo-600 icon-sm\" fill=\"none\"\n viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\n </svg>\n Activities\n </h4>\n <div class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-2\">\n <div *ngFor=\"let role of designation.activities; let i = index\"\n class=\"bg-gray-50 p-2 rounded border-l-3 border-indigo-500\">\n <p class=\"text-sm text-gray-700 leading-relaxed\">{{role}}</p>\n </div>\n </div>\n </div>\n <div class=\"page-break\"></div>\n <!-- Competencies -->\n <div class=\"competencis-grid mt-4\">\n <!-- Behavioral -->\n <div class=\"bg-blue-50 rounded-lg p-3 competencies-grid-3\">\n <h4 class=\"font-semibold text-blue-800 text-base mb-2\">Behavioral</h4>\n <div class=\"space-y-1 grid-list-item grid-list-item-behavioral\">\n <div *ngFor=\"let comp of designation.behavioralCompetencies; let i = index\"\n class=\"bg-white p-1.5 rounded text-sm text-gray-700 border-l-2 border-blue-400\">\n {{comp}}\n </div>\n </div>\n <div class=\"mt-2 text-sm text-blue-600 font-medium\">\n {{designation.behavioralCompetencies.length}} total\n </div>\n </div>\n\n <!-- Functional -->\n <div class=\"bg-green-50 rounded-lg p-3 competencies-grid-3\">\n <h4 class=\"font-semibold text-green-800 text-base mb-2\">Functional</h4>\n <div class=\"space-y-1 grid-list-item grid-list-item-functional\">\n <div *ngFor=\"let comp of designation.functionalCompetencies; let i = index\"\n class=\"bg-white p-1.5 rounded text-sm text-gray-700 border-l-2 border-green-400\">\n {{comp}}\n </div>\n </div>\n <div class=\"mt-2 text-sm text-green-600 font-medium\">\n {{designation.functionalCompetencies.length}} total\n </div>\n </div>\n\n <!-- Domain -->\n <div class=\"bg-purple-50 rounded-lg p-3 competencies-grid-3\">\n <h4 class=\"font-semibold text-purple-800 text-base mb-2\">Domain</h4>\n <div class=\"space-y-1 grid-list-item grid-list-item-domain\">\n <div *ngFor=\"let comp of designation.domainCompetencies; let i = index\"\n class=\"bg-white p-1.5 rounded text-sm text-gray-700 border-l-2 border-purple-400\">\n {{comp}}\n </div>\n </div>\n <div class=\"mt-2 text-sm text-purple-600 font-medium\">\n {{designation.domainCompetencies.length}} total\n </div>\n </div>\n </div>\n <!-- Adding courses -->\n <div class=\"cbp mt-4\"\n *ngIf=\"designation.selectedCourses?.length && openedFrom === 'acbp'\">\n <h4 class=\"text-xl font-semibold text-gray-900 mb-3 flex items-center\">\n <svg class=\"h-5 w-5 mr-2 text-indigo-600 icon-sm\" fill=\"none\"\n viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\n </svg>\n Courses\n </h4>\n <div class=\"course-list-container\">\n <div class=\"course-list-item\"\n *ngFor=\"let item of designation.selectedCourses; let i = index\">\n <div class=\"course-header\">\n <div class=\"checked-course-container\">\n\n <div>\n <div class=\"course-pill\">\n <div class=\"course-pill-text\">\n <span><img\n src=\"assets/icons/course.svg\"></span>&nbsp;<span>Course</span>\n </div>\n </div>\n </div>\n\n </div>\n <div *ngIf=\"item?.rationale && !item?.is_public\">\n <div class=\"ai-recommened-pill-green\">\n <div class=\"ai-recommened-pill-green-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n\n <span>AI Recommended - iGOT </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\"\n target=\"_blank\"><span>Platform -\n {{item?.platform}}</span></a>\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"item?.rationale && item?.is_public\">\n <div class=\"ai-recommened-pill-public\">\n <div class=\"ai-recommened-pill-public-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n\n <span>AI Recommended - Public </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\"\n target=\"_blank\"><span>Platform -\n {{item?.platform}}</span></a>\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"!item?.rationale\">\n <div class=\"ai-recommened-pill-gray\">\n <div class=\"ai-recommened-pill-gray-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n\n <span>Manually Suggested - iGOT </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\"\n target=\"_blank\"><span>Platform -\n {{item?.platform}}</span></a>\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"course-title mt-4\">\n <div>\n <div *ngIf=\"item?.course\">{{item?.course}}</div>\n <div *ngIf=\"item?.name\">{{item?.name}}</div>\n </div>\n </div>\n <div class=\"course-desc mt-2\">\n <div *ngIf=\"isPDFDownload\">\n <div>{{item?.rationale}}</div>\n </div>\n </div>\n <div class=\"mt-3\"\n *ngIf=\"getCompetenciesByType('Behavioural',item)?.length\">\n <div class=\"competency-sub-heading\">Behavioral Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"behavioural-pill\"\n *ngFor=\"let comp of getDisplayedCompetencies('Behavioural',item)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName\n }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Behavioural',item)\"\n class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\"\n (click)=\"toggleCompetencies('Behavioural',item)\">\n {{ isExpanded('Behavioural',item) ? 'Show Less' : '+' +\n getRemainingCount('Behavioural',item) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2\"\n *ngIf=\"getCompetenciesByType('Functional',item)?.length\">\n <div class=\"competency-sub-heading\">Functional Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"functional-pill\"\n *ngFor=\"let comp of getDisplayedCompetencies('Functional',item)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName\n }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Functional',item)\"\n class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\"\n (click)=\"toggleCompetencies('Functional',item)\">\n {{ isExpanded('Functional',item) ? 'Show Less' : '+' +\n getRemainingCount('Functional',item) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2\" *ngIf=\"getCompetenciesByType('Domain',item)?.length\">\n <div class=\"competency-sub-heading\">Domain Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"domain-pill\"\n *ngFor=\"let comp of getDisplayedCompetencies('Domain',item)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName\n }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Domain',item)\"\n class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\"\n (click)=\"toggleCompetencies('Domain',item)\">\n {{ isExpanded('Domain',item) ? 'Show Less' : '+' +\n getRemainingCount('Domain',item) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2 d-flex justify-content-between item\">\n <div class=\"relevancy-container\">\n <div class=\"relevancy\">Relevancy</div>\n <div class=\"dash\">-</div>\n <div class=\"percentage\" *ngIf=\"item?.relevancy\">\n {{item?.relevancy}}%</div>\n <div class=\"percentage\" *ngIf=\"!item?.relevancy\">N/A</div>\n </div>\n\n </div>\n\n </div>\n\n </div>\n </div>\n\n <!-- adding courses -->\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Footer -->\n\n </div>\n <footer class=\"org-footer\">\n <div class=\"max-w-7xl mx-auto px-6 flex flex-col md:flex-row items-center justify-between\">\n <div class=\"flex items-center space-x-4 mb-4 mt-4 md:mb-0 footer-container\">\n <div class=\"footer-logo-container\">\n <img src=\"assets/icons/karmayogiLogo-min.png\" alt=\"Karmayogi Bharat Logo\" class=\"h-10\"\n style=\"margin-left:20px\" />\n </div>\n <div style=\"margin-left: 100px;\">\n <a href=\"https://karmayogibharat.gov.in\" target=\"_blank\" rel=\"noopener noreferrer\"\n class=\"text-sm font-semibold transition-colors\">\n karmayogibharat.gov.in\n </a>\n </div>\n\n\n </div>\n <div class=\"text-sm text-center md:text-right mb-4\" style=\"margin-left: 100px;\">\n <p>&copy; 2025 All Rights Reserved.</p>\n </div>\n </div>\n </footer>\n </div>\n <div class=\"popup-footer\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Download as Excel\" (click)=\"downloadCSV()\" />\n </div>\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Download as PDF\"\n (click)=\"downloadPdfFromBE(openedFrom)\" />\n </div>\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Cancel\" (click)=\"cancelForm()\" />\n </div>\n </div>\n </div>\n <div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </div>","import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ChangeDetectorRef, Component, ElementRef, Inject, OnInit, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup, FormArray, Validators, FormControl } from '@angular/forms';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { catchError, debounceTime, distinctUntilChanged, finalize, startWith } from 'rxjs/operators';\nimport _ from 'lodash'\nimport { forkJoin, of } from 'rxjs';\nimport { SharedService } from '../../modules/shared/services/shared.service';\n@Component({\n selector: 'app-add-designation',\n templateUrl: './add-designation.component.html',\n styleUrls: ['./add-designation.component.scss']\n})\nexport class AddDesignationComponent {\n designationForm: FormGroup;\n maxFileSizeMB = 25;\n allowedTypes = [\n 'application/pdf',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'text/plain'\n ];\n uploadError: string | null = null;\n uploadedFile: File | null = null;\n cbpPlanFinalObj: any\n loading = false\n @ViewChild('designation', { read: ElementRef }) designationRef?: ElementRef\n desigantionFilterEnable = false\n isLoadingMoreDesignations = false;\n designationOffset = 0\n odcsDesignationCount = 0\n defaultSearchDesignationCount = 0\n designationListLoadCount = 50\n designationDefaultLoadCount = 50\n noMoreLegacyDesignations = false\n designationSearchText = ''\n designationInitInProgress = false\n scrollListenerAttached = false\n masterData: any = {}\n constructor(public dialogRef: MatDialogRef<AddDesignationComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private fb: FormBuilder,\n private cdRef: ChangeDetectorRef,\n private sharedService: SharedService,\n private snackBar: MatSnackBar) {\n\n this.masterData = {\n designationBackup: [],\n designationFiltered: [], // filtered search results\n};\n\n }\n\n ngOnInit() {\n this.initializeForm();\n\n const searchControl = this.designationForm.get('searchDesignation');\n\n if (searchControl) {\n searchControl.valueChanges\n .pipe(\n debounceTime(100),\n distinctUntilChanged(),\n startWith('')\n )\n .subscribe(res => {\n const txt = res?.toString()?.trim() ?? '';\n\n if (txt?.length) {\n this.desigantionFilterEnable = true;\n this.masterData.designationFiltered =\n this.masterData.designationBackup.filter((item: any) =>\n item.name.toLowerCase().includes(txt.toLowerCase())\n );\n\n // show initial page of filtered results\n this.masterData.designation = this.masterData.designationFiltered.slice(0, this.designationListLoadCount);\n\n } else {\n this.desigantionFilterEnable = false;\n\n // show first page from backup\n this.masterData.designation = this.masterData.designationBackup.slice(0, this.designationDefaultLoadCount);\n this.designationListLoadCount = this.designationDefaultLoadCount;\n this.designationOffset = 0;\n }\n });\n }\n\n\n if (!this.masterData['designationBackup']) {\n this.getDesignationSafe()\n }\n\n }\n\n private getDesignationSafe(): void {\n if (this.designationInitInProgress || this.isLoadingMoreDesignations) {\n return\n }\n this.designationInitInProgress = true\n this.getDesignation()\n }\n\n initializeForm() {\n this.designationForm = this.fb.group({\n designation_name: [[], Validators.required],\n instruction: ['', Validators.required],\n uploadDoc: [null, []],\n searchDesignation: [''],\n });\n }\n\n onFileChange(event: any) {\n const file: File = event.target.files[0];\n\n if (!file) {\n return;\n }\n\n // Validate file size\n const maxBytes = this.maxFileSizeMB * 1024 * 1024;\n if (file.size > maxBytes) {\n this.uploadError = `File exceeds maximum size of ${this.maxFileSizeMB}MB`;\n this.designationForm.get('uploadDoc')?.setErrors({ maxSize: true });\n return;\n }\n\n // Validate file type\n if (!this.allowedTypes.includes(file.type)) {\n this.uploadError = `Invalid file type. Allowed: PDF, Word, Excel, TXT`;\n this.designationForm.get('uploadDoc')?.setErrors({ fileType: true });\n return;\n }\n\n this.uploadedFile = file;\n this.uploadError = null;\n this.designationForm.patchValue({ uploadDoc: file });\n this.designationForm.get('uploadDoc')?.updateValueAndValidity();\n }\n\n cancelForm() {\n this.dialogRef.close()\n }\n\n // saveDesignation() {\n // this.loading = true\n // const formData = new FormData();\n // formData.append('designationName', this.designationForm.get('designationName')?.value);\n // formData.append('roleDetails', this.designationForm.get('roleDetails')?.value);\n // if (this.uploadedFile) {\n // formData.append('uploadDoc', this.uploadedFile);\n // }\n // this.cbpPlanFinalObj = this.sharedService.getCBPPlanLocalStorage()\n // console.log('this.designationForm', this.designationForm)\n // let req: any = {\n // \"state_center_id\": this.sharedService.cbpPlanFinalObj.ministry.identifier,\n // \"state_center_name\": this.sharedService.cbpPlanFinalObj.ministry.orgName,\n // // \"department_id\": \"\",\n // \"designation_name\": this.designationForm.value.designation_name,\n // \"instruction\": this.designationForm.value.instruction,\n // }\n // if (this.sharedService.cbpPlanFinalObj?.ministry?.sbOrgType === 'state' && this.sharedService.cbpPlanFinalObj.department_name) {\n // req['department_id'] = this.sharedService.cbpPlanFinalObj.departments\n // req['department_name'] = this.sharedService.cbpPlanFinalObj.department_name\n // }\n // if (this.sharedService.cbpPlanFinalObj?.ministry?.sbOrgType === 'ministry' && this.sharedService.cbpPlanFinalObj.department_name) {\n // req['department_id'] = this.sharedService.cbpPlanFinalObj.departments\n // req['department_name'] = this.sharedService.cbpPlanFinalObj.department_name\n // }\n\n // console.log('req', req)\n // this.sharedService.addDesignation(req).subscribe({\n // next: (_res) => {\n // this.loading = false\n // this.snackBar.open('Designation Added Successfully', 'X', {\n // duration: 3000,\n // panelClass: ['snackbar-success']\n // });\n // this.dialogRef.close('saved')\n // },\n // error: (error) => {\n // this.loading = false\n // this.snackBar.open('Failed to add designation. Please try again.', 'X', {\n // duration: 5000,\n // panelClass: ['snackbar-error']\n // });\n // console.error('Error adding designation:', error);\n // }\n // })\n // }\n\n\n\n saveDesignation() {\n const selectedDesignations: string[] = this.designationForm.get('designation_name')?.value || [];\n\n if (!selectedDesignations.length) {\n this.snackBar.open('Please select at least one designation', 'X', { duration: 3000 });\n return;\n }\n\n this.loading = true;\n\n const baseObj = {\n state_center_id: this.sharedService.cbpPlanFinalObj.ministry.identifier,\n state_center_name: this.sharedService.cbpPlanFinalObj.ministry.orgName,\n instruction: this.designationForm.value.instruction,\n };\n\n if (this.sharedService.cbpPlanFinalObj?.ministry?.sbOrgType === 'state' && this.sharedService.cbpPlanFinalObj.department_name) {\n baseObj['department_id'] = this.sharedService.cbpPlanFinalObj.departments;\n baseObj['department_name'] = this.sharedService.cbpPlanFinalObj.department_name;\n }\n\n if (this.sharedService.cbpPlanFinalObj?.ministry?.sbOrgType === 'ministry' && this.sharedService.cbpPlanFinalObj.department_name) {\n baseObj['department_id'] = this.sharedService.cbpPlanFinalObj.departments;\n baseObj['department_name'] = this.sharedService.cbpPlanFinalObj.department_name;\n }\n\n // Create an array of observables, one per designation\n const apiCalls = selectedDesignations.map(designationName => {\n const req = {\n ...baseObj,\n designation_name: designationName,\n };\n\n return this.sharedService.addDesignation(req).pipe(\n catchError(error => {\n console.error(`Failed to add designation: ${designationName}`, error);\n // Return observable that emits an error object but does not break forkJoin\n return of({ error: true, designation: designationName });\n })\n );\n });\n\n // Wait for all API calls to complete\n forkJoin(apiCalls).subscribe(results => {\n this.loading = false;\n\n // Check if any call failed\n const failed = results.filter(res => res?.error);\n\n if (failed.length > 0) {\n const failedNames = failed.map(f => f.designation).join(', ');\n this.snackBar.open(`Failed to add designations: ${failedNames}`, 'X', {\n duration: 5000,\n panelClass: ['snackbar-error']\n });\n } else {\n this.snackBar.open('All designations added successfully', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n this.dialogRef.close('saved');\n }\n });\n }\n\n closeDialog() {\n this.dialogRef.close()\n }\n\n getDesignation(searchText?: string, offset?: number): void {\n\n // clear any previous debug hooks\n if (!searchText || searchText?.length === 0) {\n // noop\n }\n\n const reqOffset = (typeof offset === 'number') ? offset : this.designationOffset\n let reqLimit = this.designationDefaultLoadCount\n const pageIndex = reqLimit > 0 ? Math.floor(reqOffset / reqLimit) : 0\n // if we're requesting from first page, clear the no-more-data guard\n if (pageIndex === 0) {\n this.noMoreLegacyDesignations = false\n reqLimit = 50\n }\n const requestBody: any = {\n filterCriteriaMap: {\n status: 'Active'\n },\n requestedFields: [],\n pageNumber: pageIndex,\n pageSize: reqLimit,\n }\n if (searchText?.length) {\n requestBody['searchString'] = searchText\n // when searching, start from first page\n requestBody.pageNumber = 0\n // allow larger page for search if needed\n requestBody.pageSize = pageIndex === 0 ? 50 : this.designationListLoadCount\n // reset guard when performing a fresh search\n this.noMoreLegacyDesignations = false\n }\n\n // indicate loading state so scroll handlers don't trigger parallel calls\n this.isLoadingMoreDesignations = true\n\n this.sharedService.searchPublicDesignation(requestBody).pipe(finalize(() => {\n this.isLoadingMoreDesignations = false\n this.designationInitInProgress = false\n }))\n .subscribe({\n next: (res: any) => {\n const content = _.get(res, 'result.result.data', [])\n const mapped = content.map((item: any) => ({\n name: item?.designation || '',\n status: item?.status || 'Active',\n }))\n\n // total count may be present in different keys depending on API version.\n // Prefer 'result.result.totalcount' (legacy lower-case) then data.totalCount, then totalCount\n const total = _.get(res, 'result.result.totalcount', _.get(res, 'result.result.data.totalCount', _.get(res, 'result.result.totalCount', 0)))\n this.defaultSearchDesignationCount = total\n\n // If offset is zero (first page) replace backup, otherwise append + dedupe\n if (!this.masterData['designationBackup'] || reqOffset === 0) {\n this.masterData['designationBackup'] = mapped\n } else {\n const combined = (this.masterData['designationBackup'] || []).concat(mapped)\n this.masterData['designationBackup'] = _.uniqBy(combined, (it: any) => (it?.name || '').toLowerCase())\n }\n\n // If server returned no new items, mark as no-more-data to stop further scroll requests\n if (!mapped || mapped?.length === 0) {\n this.noMoreLegacyDesignations = true\n }\n\n // If we've loaded at least the total count, mark no-more-data\n if (this.defaultSearchDesignationCount && (this.masterData['designationBackup'] || []).length >= this.defaultSearchDesignationCount) {\n this.noMoreLegacyDesignations = true\n }\n\n // Ensure visible list matches the requested display count\n this.masterData['designation'] = (this.masterData['designationBackup'] || []).slice(0, this.designationListLoadCount)\n // loading flag cleared in finalize()\n this.checkCurrentDesignationPresent()\n },\n error: () => {\n // Stop further automatic calls on repeated errors to avoid tight loops\n // loading flag cleared in finalize()\n this.noMoreLegacyDesignations = true\n // this.matSnackBar.open('Unable to fetch designation details, please try again later!')\n }\n })\n }\n checkCurrentDesignationPresent() {\n const selectedDesignations: string[] =\n this.designationForm.get('designation_name')?.value || [];\n\n if (!Array.isArray(selectedDesignations) || !selectedDesignations.length) {\n return;\n }\n\n if (!this.masterData?.designation) {\n return;\n }\n\n selectedDesignations.forEach((selectedName: string) => {\n const exists = this.masterData.designation.some(\n (item: any) =>\n item?.name?.toLowerCase() === selectedName?.toLowerCase()\n );\n\n if (!exists) {\n const newDesignation = {\n name: selectedName,\n status: 'Active',\n id: 'custom-' + Date.now() + '-' + Math.random()\n };\n\n // Add to backup list as well\n this.masterData.designationBackup =\n this.masterData.designationBackup || [];\n\n this.masterData.designationBackup.unshift(newDesignation);\n\n // Also update visible list\n this.masterData.designation.unshift(newDesignation);\n }\n });\n }\n onDesignationDropdownClosed(): void {\n // Keep the designation value but clear the search input\n const currentDesignation = this.designationForm.get('designation_name')!.value\n setTimeout(() => {\n if (this.designationForm.get('searchDesignation')) {\n this.designationForm.get('searchDesignation')!.setValue('')\n }\n // Ensure the designation value remains selected\n if (currentDesignation) {\n const designationControl = this.designationForm.get('designation_name');\n if (designationControl) {\n designationControl.setValue(currentDesignation)\n }\n }\n }, 100)\n }\n\n designationSearch(evt: any) {\n const searchText = evt?.target?.value\n const txt = (searchText || '').toString().trim()\n if (this.isLoadingMoreDesignations) return\n\n this.designationSearchText = txt\n if (txt?.length) {\n this.desigantionFilterEnable = true\n this.isLoadingMoreDesignations = true\n this.getDesignation(txt, 0)\n } else if (this.masterData && this.masterData?.designationBackup) {\n this.masterData.designation = this.masterData?.designationBackup.slice(0, this.designationDefaultLoadCount)\n this.desigantionFilterEnable = false\n this.checkCurrentDesignationPresent()\n }\n }\n setupScrollListener(opened: boolean): void {\n if (opened) {\n if (!this.scrollListenerAttached) {\n this.scrollListenerAttached = true\n\n this.desigantionFilterEnable = false\n this.designationListLoadCount = this.designationDefaultLoadCount\n this.designationOffset = 0\n\n this.isLoadingMoreDesignations = true\n this.getDesignation(undefined, 0)\n\n // Clear search box once\n if (this.designationForm.get('searchDesignation')) {\n this.designationForm.get('searchDesignation')!.setValue('')\n }\n\n setTimeout(() => {\n const searchInput = document.querySelector('.search-input') as HTMLInputElement\n if (searchInput) {\n searchInput.focus()\n }\n }, 100)\n\n // Attach scroll listener safely\n setTimeout(() => {\n const panel = document.querySelector('.mat-select-panel.search-panel') as HTMLElement | null\n if (panel) {\n // align panel width to trigger\n try {\n const triggerEl = this.designationRef && this.designationRef.nativeElement as HTMLElement\n if (triggerEl) {\n const rect = triggerEl.getBoundingClientRect()\n // set width and left so panel aligns exactly below the trigger\n panel.style.width = `${Math.round(rect.width)}px`\n // leave left to overlay positioning but nudge if necessary\n // compute left relative to viewport and apply to panel\n const overlayLeft = rect.left\n panel.style.left = `${Math.round(overlayLeft)}px`\n }\n } catch (e) {\n // ignore DOM errors in SSR or unexpected cases\n }\n\n const scrollHandler = this.onDesignationSelectScroll.bind(this)\n panel.addEventListener('scroll', scrollHandler, { passive: true })\n }\n }, 150)\n }\n } else {\n // Dropdown closed — reset scroll flag so it can reattach next time\n this.scrollListenerAttached = false\n }\n }\n\n onDesignationSelectScroll(event: any): void {\n const element = event?.target\n if (!this.desigantionFilterEnable) {\n // Check if user has scrolled to the bottom (with a small threshold)\n if (element.scrollTop + element?.clientHeight >= element?.scrollHeight - 5) {\n // Only load more if not already loading and if there are potentially more items\n if (!this.isLoadingMoreDesignations) {\n // If org uses IGOT designation taxonomy, request more from the API by increasing the limit\n if (this.masterData?.designationBackup?.length > this.masterData?.designation?.length) {\n // Local pagination: expand the sliced list\n this.isLoadingMoreDesignations = true\n this.designationListLoadCount += this.designationDefaultLoadCount\n // Update the filtered list with more items\n setTimeout(() => {\n this.masterData.designation = this.masterData?.designationBackup?.slice(0, this.designationListLoadCount)\n this.checkCurrentDesignationPresent()\n this.isLoadingMoreDesignations = false\n }, 500) // Small timeout to simulate loading and prevent multiple triggers\n } else {\n // Legacy (server) pagination: request next page if total not reached\n const loadedLegacy = (this.masterData?.designationBackup || []).length\n if (!this.noMoreLegacyDesignations && this.defaultSearchDesignationCount && loadedLegacy < this.defaultSearchDesignationCount) {\n this.isLoadingMoreDesignations = true\n this.designationOffset = (this.designationOffset || 0) + this.designationDefaultLoadCount\n // increase display count to include newly fetched items\n this.designationListLoadCount += this.designationDefaultLoadCount\n this.getDesignation(undefined, this.designationOffset)\n }\n }\n }\n }\n }\n }\n\n get searchDesignationControl(): FormControl {\n return this.designationForm.get('searchDesignation') as FormControl;\n }\n\n\n}\n","<div class=\"view-cbp-plan\">\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div>\n <div class=\"heading\">Add New Designation</div>\n </div>\n <div class=\"cursor-pointer\" (click)=\"closeDialog()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n </div>\n <div class=\"section-container\" [formGroup]=\"designationForm\">\n <mat-card class=\"mt-1\">\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Designation Name</p>\n </div>\n <div class=\"section-header mt-4\">\n <!-- <input type=\"text\" formControlName=\"designation_name\" placeholder=\"Enter Designation\" [value]=\"\"\n style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 12px; width: 100%;font-size: 14px;font-family: 'Lato';\"> -->\n <mat-form-field appearance=\"outline\" class=\"margin-top-s w-full required-select\">\n <mat-select multiple #position formControlName=\"designation_name\"\n placeholder=\"Select designation\" (closed)=\"onDesignationDropdownClosed()\"\n panelClass=\"search-panel\" (openedChange)=\"setupScrollListener($event)\">\n\n <!-- Sticky search input container -->\n <div class=\"sticky-search-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"search-input-wrapper\">\n <input type=\"text\" placeholder=\"Search designation\" style=\"width:100%\"\n formControlName=\"searchDesignation\" class=\"search-input\"\n (keydown)=\"$event.stopPropagation()\"\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation()\"\n (keyup)=\"designationSearch($event)\" autocomplete=\"off\">\n <div *ngIf=\"searchDesignationControl?.value\" type=\"button\" class=\"clear-icon\"\n (click)=\"searchDesignationControl.setValue('')\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n </div>\n <!-- Options list -->\n <mat-option [value]=\"designation?.name\" *ngFor=\"let designation of masterData?.designation\">\n {{designation?.name}}\n </mat-option>\n <!-- Loading indicator -->\n <div *ngIf=\"isLoadingMoreDesignations\" class=\"loading-indicator\">\n Load More...\n </div>\n <!-- No results message -->\n <mat-option *ngIf=\"(masterData?.designation)?.length === 0\" disabled class=\"no-data-option\">\n\n Designation Not Found.\n\n </mat-option>\n </mat-select>\n <!-- <mat-error class=\"text-xs\"\n *ngIf=\"designationForm?.get('designation_name')?.touched && designationForm?.get('designation_name')?.invalid\">\n Please select at least one designation.\n </mat-error> -->\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Role & responsibilities /Additional details</p>\n </div>\n <div class=\"mt-4 additional-details\">\n <textarea class=\"custom-textarea\" formControlName=\"instruction\" rows=\"5\"\n placeholder=\"Add Instructions\" [value]=\"\"></textarea>\n </div>\n </div>\n <!-- <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Upload Document (PDF/Word/Excel/TXT)</p>\n </div>\n <div class=\"file-upload-wrapper\">\n <label for=\"uploadDoc\" class=\"file-upload-label\">\n <span class=\"file-upload-icon\">📎</span>\n <span>{{ uploadedFile?.name || 'Choose a file (PDF, Word, Excel, TXT)' }}</span>\n </label>\n\n <small class=\"file-upload-hint\">Max file size: 25MB</small>\n\n <input id=\"uploadDoc\" type=\"file\" (change)=\"onFileChange($event)\"\n accept=\".pdf,.doc,.docx,.xls,.xlsx,.txt\" class=\"file-upload-input\" />\n\n <div *ngIf=\"uploadError\" class=\"error\">{{ uploadError }}</div>\n </div>\n </div> -->\n\n </mat-card>\n </div>\n <div class=\"popup-footer\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Cancel\" (click)=\"cancelForm()\" />\n </div>\n <div>\n <input [disabled]=\"designationForm?.invalid\"\n [ngClass]=\"designationForm?.invalid ? 'btn-disable':'btn-active'\" type=\"button\" value=\"Generate CBP\"\n (click)=\"saveDesignation()\" />\n </div>\n </div>\n</div>\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ViewCbpPlanComponent } from '../view-cbp-plan/view-cbp-plan.component';\nimport { EditCbpPlanComponent } from '../edit-cbp-plan/edit-cbp-plan.component';\nimport { GenerateCourseRecommendationComponent } from '../generate-course-recommendation/generate-course-recommendation.component';\nimport { DeleteRoleMappingComponent } from '../delete-role-mapping/delete-role-mapping.component';\nimport { ViewCourseRecommendationComponent } from '../view-course-recommendation/view-course-recommendation.component';\nimport { ViewFinalCbpPlanComponent } from '../view-final-cbp-plan/view-final-cbp-plan.component';\nimport { ListPopupComponent } from '../list-popup/list-popup.component';\nimport { AddDesignationComponent } from '../add-designation/add-designation.component';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { ApprovalRequestFormComponent } from '../approval-request-form/approval-request-form.component';\nimport { SharedService } from '../../modules/shared/services/shared.service';\n@Component({\n selector: 'app-role-mapping-list',\n templateUrl: './role-mapping-list.component.html',\n styleUrls: ['./role-mapping-list.component.scss']\n})\nexport class RoleMappingListComponent {\n @Input() formData: any = {}\n searchText = ''\n selectedValue = ''\n //'select'\n displayedColumns: string[] = [\n 'designation_name',\n 'role_responsibilities',\n 'activities',\n 'behavioral',\n 'functional',\n 'domain',\n 'action'\n ];\n dataSource = new MatTableDataSource<any>([]);\n originalDataSource = new MatTableDataSource<any>([]);\n filteredData = [];\n originalData: any[] = [];\n searchResults: any[] = []; // Store search results for pagination\n @ViewChild(MatPaginator) paginator!: MatPaginator;\n expandedResponsibilityRows: { [id: string]: boolean } = {};\n expandedActivityRows: { [id: string]: boolean } = {};\n activeRowElement: any\n cbpFinalObj: any = {}\n loading = false\n selection = new SelectionModel<any>(true, []); // true = multi-select\n matchedRoleMapping = 0\n unMatchedRoleMapping = 0\n matchedRoleMappingIds = []\n matchedDesignationNames: string[] = [];\n\n @Output() moveToInitialScreen = new EventEmitter<any>()\n activeTab: 'matched' | 'unmatched' = 'matched';\n\n matchedDesignationSet = new Set<string>();\n masterData: any[] = [];\n tabFilteredData: any[] = []; // after matched/unmatched filter\n constructor(\n public sharedService: SharedService,\n private dialog: MatDialog) {\n\n }\n\n ngAfterViewInit() {\n // this.dataSource.paginator = this.paginator;\n // this.dataSource.sort = this.sort;\n }\n\n ngOnInit() {\n console.log('haredService?.cbpPlanFinalObj', this.sharedService?.cbpPlanFinalObj)\n this.sharedService.checkRoleMappingFormValidation.next(true)\n this.sharedService.updateDesignationHierarchySubject.subscribe((data) => {\n if (data) {\n this.loadRoleMappingList()\n }\n })\n this.loadRoleMappingList()\n\n\n }\n\n getCompetenciesByType(competencies: any[], type: string): any[] {\n return competencies?.filter(c => c.type === type) || [];\n }\n\n viewDetails(element: any): void {\n console.log('View clicked:', element);\n\n }\n\n deleteItem(element: any): void {\n console.log('Delete clicked:', element);\n // Optionally remove from dataSource\n this.dataSource.data = this.dataSource.data.filter(item => item.id !== element.id);\n }\n\n searchData() {\n this.applyFilter();\n }\n\n applyFilter() {\n // if (this.searchText.trim()) {\n // // Search only in designation names\n // this.searchResults = this.filterByDesignationName(this.searchText);\n // this.dataSource = new MatTableDataSource(this.searchResults);\n // } else {\n // // If search is cleared, restore original data\n // this.searchResults = [];\n // this.dataSource = new MatTableDataSource(this.originalData);\n // }\n\n // // Set up pagination for filtered results\n // setTimeout(() => {\n // if (this.paginator) {\n // this.dataSource.paginator = this.paginator;\n // this.paginator.firstPage();\n // }\n // }, 100);\n this.applyAllFilters();\n }\n\n clearSearch() {\n // this.searchText = '';\n // this.searchResults = [];\n // this.dataSource = new MatTableDataSource(this.originalData);\n\n // setTimeout(() => {\n // if (this.paginator) {\n // this.dataSource.paginator = this.paginator;\n // this.paginator.firstPage();\n // }\n // }, 100);\n this.searchText = '';\n this.applyAllFilters();\n }\n\n refreshRoleMappingData() {\n console.log('Refreshing role mapping data...');\n if (this.sharedService.cbpPlanFinalObj && this.sharedService.cbpPlanFinalObj.ministry && this.sharedService.cbpPlanFinalObj.ministry.identifier) {\n const ministryType = this.sharedService.cbpPlanFinalObj.ministry.sbOrgType;\n const ministryId = this.sharedService.cbpPlanFinalObj.ministry.identifier;\n\n this.loading = true;\n\n if (ministryType === 'ministry') {\n if (this.sharedService.cbpPlanFinalObj.departments) {\n const departmentId = this.sharedService.cbpPlanFinalObj.departments;\n this.sharedService.getRoleMappingByStateCenterAndDepartment(ministryId, departmentId).subscribe({\n next: (res) => {\n this.loading = false;\n console.log('State role mapping data refreshed:', res);\n this.updateDataSource(res);\n },\n error: (error) => {\n this.loading = false;\n console.error('Error refreshing state role mapping data:', error);\n }\n });\n } else {\n this.sharedService.getRoleMappingByStateCenter(ministryId).subscribe({\n next: (res) => {\n this.loading = false;\n console.log('Center role mapping data refreshed:', res);\n this.updateDataSource(res);\n },\n error: (error) => {\n this.loading = false;\n console.error('Error refreshing center role mapping data:', error);\n }\n });\n }\n\n } else if (ministryType === 'state') {\n const departmentId = this.sharedService.cbpPlanFinalObj.departments;\n this.sharedService.getRoleMappingByStateCenterAndDepartment(ministryId, departmentId).subscribe({\n next: (res) => {\n this.loading = false;\n console.log('State role mapping data refreshed:', res);\n this.updateDataSource(res);\n },\n error: (error) => {\n this.loading = false;\n console.error('Error refreshing state role mapping data:', error);\n }\n });\n }\n }\n this.loading = false\n }\n\n private updateDataSource(res: any[]) {\n this.sharedService.cbpPlanFinalObj['role_mapping_generation'] = res;\n this.dataSource = new MatTableDataSource(res);\n this.originalData = res;\n this.searchResults = []; // Clear search results when data is updated\n\n setTimeout(() => {\n this.dataSource.paginator = this.paginator;\n }, 100);\n console.log('DataSource updated:', this.dataSource);\n }\n\n editRoleMapping(element: any) {\n this.activeRowElement = element\n console.log('Edit Role Mapping clicked', element);\n // Navigate or open modal\n console.log('View CBP Plan clicked', element);\n const dialogRef = this.dialog.open(EditCbpPlanComponent, {\n width: '1000px',\n data: element,\n panelClass: 'view-cbp-plan-popup',\n minHeight: '300px', // Set minimum height\n maxHeight: '80vh', // Prevent it from going beyond viewport\n disableClose: true // Optional: prevent closing with outside click\n });\n\n dialogRef.afterClosed().subscribe(result => {\n // if (result === 'saved') {\n // console.log('Changes saved!');\n // // Refresh data or show a toast here\n\n // }\n this.refreshRoleMappingData();\n });\n }\n\n viewCBPPlan(element: any) {\n this.activeRowElement = element\n console.log('View CBP Plan clicked', element);\n const dialogRef = this.dialog.open(ViewCbpPlanComponent, {\n width: '1000px',\n data: element,\n panelClass: 'view-cbp-plan-popup',\n minHeight: '300px', // Set minimum height\n maxHeight: '80vh', // Prevent it from going beyond viewport\n disableClose: true // Optional: prevent closing with outside click\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result === 'saved') {\n console.log('Changes saved!');\n // Refresh data or show a toast here\n }\n });\n }\n\n generateCourseRecommendation(element: any) {\n console.log('Generate Course Recommendation clicked', element);\n this.activeRowElement = element\n console.log('Edit Role Mapping clicked', element);\n // Navigate or open modal\n console.log('View CBP Plan clicked', element);\n const dialogRef = this.dialog.open(GenerateCourseRecommendationComponent, {\n width: '1100px',\n data: element,\n panelClass: 'view-cbp-plan-popup',\n minHeight: '400px', // Set minimum height\n maxHeight: '90vh', // Prevent it from going beyond viewport\n disableClose: true // Optional: prevent closing with outside click\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result === 'saved') {\n console.log('Changes saved!');\n // Refresh data or show a toast here\n console.log(this.sharedService.cbpPlanFinalObj)\n \n if (this.sharedService.cbpPlanFinalObj && this.sharedService.cbpPlanFinalObj.ministry && this.sharedService.cbpPlanFinalObj.ministry.identifier) {\n if (this.sharedService.cbpPlanFinalObj.departments) {\n this.loading = true\n this.sharedService.getRoleMappingByStateCenter(this.sharedService.cbpPlanFinalObj.ministry.identifier).subscribe((res) => {\n console.log('res', res)\n this.selection.clear();\n this.loadRoleMappingList()\n this.loading = false\n })\n } else {\n this.loading = true\n this.sharedService.getRoleMappingByStateCenterAndDepartment(this.sharedService.cbpPlanFinalObj.ministry.identifier, this.sharedService.cbpPlanFinalObj.departments).subscribe((res) => {\n console.log('res', res)\n this.selection.clear();\n this.loadRoleMappingList()\n console.log('this.dataSource', this.dataSource)\n this.loading = false\n })\n }\n\n\n } else if (this.sharedService.cbpPlanFinalObj && this.sharedService.cbpPlanFinalObj.ministry && this.sharedService.cbpPlanFinalObj.ministry.identifier && this.sharedService.cbpPlanFinalObj.departments) {\n {\n this.loading = true\n this.sharedService.getRoleMappingByStateCenterAndDepartment(this.sharedService.cbpPlanFinalObj.ministry.identifier, this.sharedService.cbpPlanFinalObj.departments).subscribe((res) => {\n console.log('res', res)\n this.selection.clear();\n this.loadRoleMappingList()\n console.log('this.dataSource', this.dataSource)\n this.loading = false\n })\n }\n }\n\n }\n });\n }\n\n viewCourseRecommendation(element: any) {\n console.log('View Course Recommendation clicked', element);\n this.activeRowElement = element\n console.log('Edit Role Mapping clicked', element);\n // Navigate or open modal\n console.log('View CBP Plan clicked', element);\n const dialogRef = this.dialog.open(ViewCourseRecommendationComponent, {\n width: '1000px',\n data: element,\n panelClass: 'view-cbp-plan-popup',\n minHeight: '400px', // Set minimum height\n maxHeight: '90vh', // Prevent it from going beyond viewport\n disableClose: true // Optional: prevent closing with outside click\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result === 'saved') {\n console.log('Changes saved!');\n // Refresh data or show a toast here\n console.log(this.sharedService.cbpPlanFinalObj)\n if (this.sharedService.cbpPlanFinalObj && this.sharedService.cbpPlanFinalObj.ministry && this.sharedService.cbpPlanFinalObj.ministry.id) {\n this.sharedService.getRoleMappingByStateCenter(this.sharedService.cbpPlanFinalObj.ministry.id).subscribe((res) => {\n console.log('res', res)\n this.dataSource = new MatTableDataSource(res)\n this.dataSource.paginator = this.paginator;\n this.originalData = res;\n console.log('this.dataSource', this.dataSource)\n })\n } else {\n\n }\n\n }\n });\n }\n\n /**\n * Filter data by designation name only\n * Supports single and multiple word searches\n */\n filterByDesignationName(searchText: string): any[] {\n const searchTerms = searchText.trim().toLowerCase().split(/\\s+/);\n\n return this.originalData.filter(item => {\n const designationName = (item.designation_name || '').toLowerCase();\n\n // Check if all search terms are found in the designation name\n return searchTerms.every(term => designationName.includes(term));\n });\n }\n\n flattenObjectToString(obj: any): string {\n let result = '';\n\n for (const key in obj) {\n const value = obj[key];\n\n if (typeof value === 'string') {\n result += ' ' + value;\n } else if (Array.isArray(value)) {\n value.forEach(val => {\n if (typeof val === 'string') {\n result += ' ' + val;\n } else if (typeof val === 'object') {\n result += ' ' + this.flattenObjectToString(val);\n }\n });\n } else if (typeof value === 'object' && value !== null) {\n result += ' ' + this.flattenObjectToString(value);\n }\n }\n\n return result;\n }\n\n getSectors(sector) {\n if (sector && sector.length) {\n return Array.isArray(sector) ? sector.join('/ ') : ''\n }\n\n }\n\n toggleResponsibilityExpand(id: string): void {\n this.expandedResponsibilityRows[id] = !this.expandedResponsibilityRows[id];\n }\n\n isResponisbilityExpanded(id: string): boolean {\n\n\n // const dialogRef = this.dialog.open(ListPopupComponent, {\n // width: '1000px',\n // data: this.activeRowElement,\n // panelClass: 'view-cbp-plan-popup',\n // minHeight: '400px', // Set minimum height\n // maxHeight: '90vh', // Prevent it from going beyond viewport\n // disableClose: true // Optional: prevent closing with outside click\n // });\n\n // dialogRef.afterClosed().subscribe(result => {\n // return false\n // });\n return this.expandedResponsibilityRows[id];\n }\n\n toggleActivityExpand(id: string): void {\n this.expandedActivityRows[id] = !this.expandedActivityRows[id];\n }\n\n isActivityExpanded(id: string): boolean {\n return this.expandedActivityRows[id];\n }\n\n\n\n addMoreDesignation() {\n const dialogRef = this.dialog.open(AddDesignationComponent, {\n width: '600px',\n data: { state_center_id: '' },\n panelClass: 'view-cbp-plan-popup',\n minHeight: '300px', // Set minimum height\n maxHeight: '90vh', // Prevent it from going beyond viewport\n disableClose: true // Optional: prevent closing with outside click\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result === 'saved') {\n console.log('Changes saved!');\n // Refresh data or show a toast here\n this.refreshRoleMappingData();\n }\n });\n }\n\n deleteRoleMapping(element) {\n console.log('Generate Course Recommendation clicked', element);\n this.activeRowElement = element\n console.log('Edit Role Mapping clicked', element);\n // Navigate or open modal\n console.log('View CBP Plan clicked', element);\n const dialogRef = this.dialog.open(DeleteRoleMappingComponent, {\n width: '600px',\n data: element,\n panelClass: 'view-cbp-plan-popup',\n minHeight: '300px', // Set minimum height\n maxHeight: '90vh', // Prevent it from going beyond viewport\n disableClose: true // Optional: prevent closing with outside click\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result === 'saved') {\n console.log('Changes saved!');\n // Refresh data or show a toast here\n console.log(this.sharedService.cbpPlanFinalObj)\n if (this.sharedService.cbpPlanFinalObj && this.sharedService.cbpPlanFinalObj.ministry && this.sharedService.cbpPlanFinalObj.ministry.identifier &&\n this.sharedService.cbpPlanFinalObj.ministry?.sbOrgType === 'ministry'\n ) {\n if (this.sharedService.cbpPlanFinalObj.departments) {\n this.sharedService.getRoleMappingByStateCenterAndDepartment(this.sharedService.cbpPlanFinalObj.ministry.identifier, this.sharedService.cbpPlanFinalObj.departments).subscribe((res) => {\n console.log('res', res)\n this.dataSource = new MatTableDataSource(res)\n this.dataSource.paginator = this.paginator;\n this.originalData = res;\n console.log('this.dataSource', this.dataSource)\n })\n } else {\n this.sharedService.getRoleMappingByStateCenter(this.sharedService.cbpPlanFinalObj.ministry.identifier).subscribe((res) => {\n console.log('res', res)\n this.dataSource = new MatTableDataSource(res)\n this.dataSource.paginator = this.paginator;\n this.originalData = res;\n console.log('this.dataSource', this.dataSource)\n })\n }\n\n\n } else {\n this.sharedService.getRoleMappingByStateCenterAndDepartment(this.sharedService.cbpPlanFinalObj.ministry.identifier, this.sharedService.cbpPlanFinalObj.departments).subscribe((res) => {\n console.log('res', res)\n this.dataSource = new MatTableDataSource(res)\n this.dataSource.paginator = this.paginator;\n this.originalData = res;\n console.log('this.dataSource', this.dataSource)\n })\n }\n\n }\n });\n }\n\n viewFinalCBPPlan(context: string) {\n const dialogRef = this.dialog.open(ViewFinalCbpPlanComponent, {\n width: '1100px',\n data: {\n payload: this.originalData,\n openedFrom: context // 👈 BEST PRACTICE\n },\n panelClass: 'view-cbp-plan-popup',\n minHeight: '300px', // Set minimum height\n maxHeight: '90vh', // Prevent it from going beyond viewport\n disableClose: true // Optional: prevent closing with outside click\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result === 'saved') {\n console.log('Changes saved!');\n // Refresh data or show a toast here\n\n\n }\n });\n }\n\n moveToInitialScreenLayout(event) {\n this.moveToInitialScreen.emit(event)\n }\n\n openFullList(element: any, type: 'role_responsibilities' | 'activities') {\n const listToShow: string[] = element[type] || [];\n const title = type === 'role_responsibilities' ? 'Role & Responsibilities' : 'Activities';\n\n const dialogRef = this.dialog.open(ListPopupComponent, {\n width: '600px',\n data: { element: element, type: type },\n disableClose: true,\n maxHeight: '80vh'\n });\n\n dialogRef.afterClosed().subscribe(() => {\n // No need to do anything special here to reset inline expanded state\n // Because you're using dialog, not inline expand – view remains in initial (collapsed) state\n });\n }\n\n loadRoleMappingList() {\n this.cbpFinalObj = this.sharedService.getCBPPlanLocalStorage()\n this.dataSource = new MatTableDataSource(this.cbpFinalObj?.role_mapping_generation)\n this.originalDataSource = new MatTableDataSource(this.cbpFinalObj?.role_mapping_generation)\n this.originalData = this.cbpFinalObj?.role_mapping_generation\n\n if (this.cbpFinalObj && this.cbpFinalObj?.ministry && (this.cbpFinalObj?.ministry.sbOrgType)) {\n this.sharedService.cbpPlanFinalObj = this.cbpFinalObj\n if (this.cbpFinalObj?.ministry.sbOrgType === 'ministry') {\n this.formData = {}\n this.formData['value'] = {}\n this.formData['value']['ministryType'] = this.cbpFinalObj?.ministry.sbOrgType\n this.formData['value']['ministry'] = this.cbpFinalObj?.ministry?.identifier\n this.formData['value']['departments'] = this.cbpFinalObj?.departments\n } else if (this.cbpFinalObj?.ministry.sbOrgType === 'state') {\n this.formData = {}\n this.formData['value'] = {}\n this.formData['value']['ministryType'] = this.cbpFinalObj?.ministry.sbOrgType\n this.formData['value']['ministry'] = this.cbpFinalObj?.ministry?.identifier\n this.formData['value']['departments'] = this.cbpFinalObj?.departments\n }\n }\n console.log('this.formData', this.formData)\n if (this.formData && this.formData.value && this.formData.value.ministryType === 'ministry') {\n\n let state_center_id = this.formData.value.ministry\n this.loading = true\n if (this.formData.value.departments) {\n let department_id = this.formData.value.departments\n if (typeof department_id === 'string') {\n this.sharedService.getRoleMappingByStateCenterAndDepartment(state_center_id, department_id).subscribe({\n next: (res) => {\n this.loading = false\n this.sharedService.cbpPlanFinalObj['role_mapping_generation'] = res\n localStorage.setItem('cbpPlanFinalObj', JSON.stringify(this.sharedService.cbpPlanFinalObj))\n let obj = {\n state_center_id: this.formData.value.ministry\n }\n if (this.formData.value.departments) {\n obj['department_id'] = this.formData.value.departments\n }\n this.sharedService.getMatchedRoleMapping(obj).subscribe((matchedRoleMapping) => {\n console.log('res', res)\n\n console.log('matchedRoleMapping', matchedRoleMapping)\n this.matchedRoleMapping = matchedRoleMapping?.matched_count\n this.matchedDesignationNames =\n matchedRoleMapping?.matched_details?.map(\n x => x.igot_designation_name?.toLowerCase()\n ) || [];\n const matchedNames =\n matchedRoleMapping?.matched_details?.map(x =>\n x.igot_designation_name?.trim().toLowerCase()\n ) || [];\n this.matchedDesignationSet = new Set(matchedNames);\n\n this.matchedRoleMapping = matchedNames.length;\n\n this.unMatchedRoleMapping = this.masterData.length - this.matchedRoleMapping;\n this.applyAllFilters();\n })\n\n this.dataSource = new MatTableDataSource(res)\n this.originalDataSource = new MatTableDataSource(res)\n setTimeout(() => {\n this.dataSource.paginator = this.paginator;\n }, 1000)\n this.originalData = res;\n this.masterData = res;\n\n console.log('this.dataSource', this.dataSource)\n },\n error: () => {\n this.loading = false\n }\n })\n } else {\n this.loading = false\n }\n\n } else {\n this.sharedService.getRoleMappingByStateCenter(state_center_id).subscribe((res) => {\n this.loading = false\n console.log('res', res)\n this.sharedService.cbpPlanFinalObj['role_mapping_generation'] = res\n localStorage.setItem('cbpPlanFinalObj', JSON.stringify(this.sharedService.cbpPlanFinalObj))\n let obj = {\n state_center_id: this.formData.value.ministry\n }\n if (this.formData.value.departments) {\n obj['department_id'] = this.formData.value.departments\n }\n this.sharedService.getMatchedRoleMapping(obj).subscribe((matchedRoleMapping) => {\n console.log('res', res)\n console.log('matchedRoleMapping', matchedRoleMapping)\n this.matchedRoleMapping = matchedRoleMapping?.matched_count\n this.matchedDesignationNames =\n matchedRoleMapping?.matched_details?.map(\n x => x.igot_designation_name?.toLowerCase()\n ) || [];\n const matchedNames =\n matchedRoleMapping?.matched_details?.map(x =>\n x.igot_designation_name?.trim().toLowerCase()\n ) || [];\n this.matchedDesignationSet = new Set(matchedNames);\n\n this.matchedRoleMapping = matchedNames.length;\n\n this.unMatchedRoleMapping = this.masterData.length - this.matchedRoleMapping;\n this.applyAllFilters();\n })\n this.dataSource = new MatTableDataSource(res)\n this.originalDataSource = new MatTableDataSource(res)\n setTimeout(() => {\n this.dataSource.paginator = this.paginator;\n }, 1000)\n\n this.originalData = res;\n this.masterData = res;\n console.log('this.dataSource', this.dataSource)\n })\n }\n\n }\n if (this.formData && this.formData.value && this.formData.value.ministryType === 'state') {\n this.loading = true\n console.log('this.formData', this.formData)\n let state_center_id = this.formData.value.ministry\n let department_id = this.formData.value.departments\n this.sharedService.getRoleMappingByStateCenterAndDepartment(state_center_id, department_id).subscribe({\n next: (res) => {\n this.loading = false\n this.sharedService.cbpPlanFinalObj['role_mapping_generation'] = res\n localStorage.setItem('cbpPlanFinalObj', JSON.stringify(this.sharedService.cbpPlanFinalObj))\n let obj = {\n state_center_id: this.formData.value.ministry\n }\n if (this.formData.value.departments) {\n obj['department_id'] = this.formData.value.departments\n }\n this.sharedService.getMatchedRoleMapping(obj).subscribe((matchedRoleMapping) => {\n console.log('res', res)\n console.log('matchedRoleMapping', matchedRoleMapping)\n this.matchedRoleMapping = matchedRoleMapping?.matched_count\n this.matchedDesignationNames =\n matchedRoleMapping?.matched_details?.map(\n x => x.igot_designation_name?.toLowerCase()\n ) || [];\n const matchedNames =\n matchedRoleMapping?.matched_details?.map(x =>\n x.igot_designation_name?.trim().toLowerCase()\n ) || [];\n this.matchedDesignationSet = new Set(matchedNames);\n\n this.matchedRoleMapping = matchedNames.length;\n\n this.unMatchedRoleMapping = this.masterData.length - this.matchedRoleMapping;\n this.applyAllFilters();\n })\n this.dataSource = new MatTableDataSource(res)\n this.originalDataSource = new MatTableDataSource(res)\n setTimeout(() => {\n this.dataSource.paginator = this.paginator;\n }, 1000)\n this.originalData = res;\n this.masterData = res;\n console.log('this.dataSource', this.dataSource)\n },\n error: () => {\n this.loading = false\n }\n })\n\n\n\n }\n\n }\n\n toggleRow(row: any) {\n if (!row?.cbp_plans?.length) return;\n\n this.selection.toggle(row);\n console.log('Selected rows:', this.selection.selected);\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 isSomeSelected() {\n const numSelected = this.selection.selected.length;\n const numRows = this.dataSource.data.length;\n return numSelected > 0 && numSelected < numRows;\n }\n\n toggleAllRows(event: any) {\n if (event.checked) {\n this.dataSource.data.forEach(row => this.selection.select(row));\n } else {\n this.selection.clear();\n }\n }\n\n setDataSoure(tab?: 'matched' | 'unmatched') {\n\n this.activeTab = tab;\n\n this.selection.clear();\n\n this.applyAllFilters();\n\n }\n\n applyAllFilters() {\n\n let data = [...this.masterData];\n\n if (this.activeTab === 'matched') {\n\n data = data.filter(item =>\n this.matchedDesignationSet.has(\n item.designation_name?.trim().toLowerCase()\n )\n );\n\n }\n\n if (this.activeTab === 'unmatched') {\n\n data = data.filter(item =>\n !this.matchedDesignationSet.has(\n item.designation_name?.trim().toLowerCase()\n )\n );\n\n }\n\n if (this.searchText.trim()) {\n\n const terms = this.searchText.toLowerCase().split(/\\s+/);\n\n data = data.filter(item => {\n const name = (item.designation_name || '').toLowerCase();\n return terms.every(term => name.includes(term));\n });\n\n }\n\n this.dataSource = new MatTableDataSource(data);\n\n setTimeout(() => {\n this.dataSource.paginator = this.paginator;\n });\n\n }\n\n sendForApprovalForm() {\n console.log('this.selection--', this.selection.selected)\n if (this.selection.selected.length) {\n const dialogRef = this.dialog.open(ApprovalRequestFormComponent, {\n width: '600px',\n data: this.selection.selected,\n panelClass: 'view-cbp-plan-popup',\n minHeight: '300px', // Set minimum height\n maxHeight: '80vh', // Prevent it from going beyond viewport\n disableClose: true // Optional: prevent closing with outside click\n });\n\n dialogRef.afterClosed().subscribe(result => {\n // if (result === 'saved') {\n // console.log('Changes saved!');\n // // Refresh data or show a toast here\n\n // }\n this.refreshRoleMappingData();\n });\n }\n\n }\n\n hasSelectableRows() {\n return this.dataSource?.data?.some((row: any) => row?.cbp_plans?.length > 0);\n }\n\n\n}\n","<div class=\"role-mapping-container\">\n <div class=\"container-fluid\">\n\n <mat-card class=\"mt-0 pt-0\">\n <div class=\"section-header\">\n\n </div>\n <div class=\"edit-section mt-4\">\n <div class=\"select-map-route-container\">\n <div class=\"select-map-flex-container\">\n <div class=\"select-map-flex\">\n <div class=\"selected-mapping-route\">\n <p>{{sharedService?.cbpPlanFinalObj?.ministry?.orgName}} <span\n *ngIf=\"sharedService?.cbpPlanFinalObj?.department_name\">\n / {{sharedService?.cbpPlanFinalObj?.department_name}}</span>\n </p>\n </div>\n <div class=\"edit-plan cursor-pointer\" (click)=\"moveToInitialScreenLayout('edit')\">\n <mat-icon>edit</mat-icon>Edit\n </div>\n <!-- <div class=\"cursor-pointer ml-10\">-->\n <!-- <button class=\"btn-active cursor-pointer\" (click)=\"moveToInitialScreenLayout('add')\">-->\n <!-- <mat-icon>add</mat-icon>-->\n <!-- Create New CBP-->\n <!-- </button>-->\n <!-- </div>-->\n </div>\n <div>\n <div class=\"view-final-cbp-plan\">\n <!-- <div class=\"view-final-cbp-plan-text cursor-pointer\" (click)=\"viewFinalCBPPlan('cbp')\">\n <span class=\"ai-loader-icon\"><img src=\"assets/icons/ai-loader.gif\"></span><span>View\n Final CBP</span>\n </div> -->\n\n <div class=\"view-final-cbp-plan-text cursor-pointer\" (click)=\"viewFinalCBPPlan('acbp')\">\n <span class=\"ai-loader-icon\"><img src=\"assets/icons/ai-loader.gif\"></span><span>View\n Final CBP</span>\n </div>\n\n </div>\n\n </div>\n\n </div>\n </div>\n </div>\n <div class=\"search-filter-section mt-2\">\n <div class=\"search flex margin-right-m search-flex\">\n <div class=\"mt-2\">\n <div class=\"search-container\">\n <div class=\"rsearch\">\n <mat-icon\n class=\"color-60 search-icon mat-icon notranslate material-icons mat-icon-no-color\">search</mat-icon>\n <input class=\"sinput color-60 w-full\" [(ngModel)]=\"searchText\" label=\"\"\n (input)=\"applyFilter()\" placeholder=\"Search by designation name\" type=\"Standard\">\n <mat-icon *ngIf=\"searchText.trim().length > 0\"\n class=\"color-60 clear-icon mat-icon notranslate material-icons mat-icon-no-color cursor-pointer\"\n (click)=\"clearSearch()\">clear</mat-icon>\n </div>\n <div class=\"pl-2 mt-2\">\n <input [disabled]=\"searchText.trim()?.length === 0\"\n [ngClass]=\"searchText.trim()?.length === 0 ? 'btn-disable':'btn-active'\"\n type=\"button\" value=\"Search\" (click)=\"applyFilter()\" />\n </div>\n </div>\n\n\n </div>\n\n\n </div>\n <div class=\"filter-section flex margin-top-15\">\n <!-- <div>\n <label class=\"label\">Filter by competency type</label>\n <div>\n <mat-form-field appearance=\"fill\"\n style=\"background: white; border-radius: 25px; padding: 0 12px;\">\n <mat-select [(value)]=\"selectedValue\" placeholder=\"Select Ministry\"\n style=\"border-radius: 25px; background: white;\">\n <mat-option [value]=\"'test'\">Test</mat-option>\n <mat-option [value]=\"'another'\">Another</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div> -->\n <div class=\"btn-group\">\n <div class=\"ml-2\">\n <input class=\"btn-active\" type=\"button\" value=\"Add More Designation\"\n (click)=\"addMoreDesignation()\" />\n </div>\n <!-- <div class=\"ml-2\">\n <button\n [ngClass]=\"selection.selected.length ? 'btn-active-outline' : 'btn-active-outline-disable'\"\n (click)=\"sendForApprovalForm()\">\n <mat-icon>send</mat-icon>\n Send For Approval\n <span *ngIf=\"selection.selected.length\">({{selection.selected.length}})</span>\n </button>\n </div> -->\n\n\n </div>\n </div>\n </div>\n <div class=\"role-mapping-tabs mt-3\">\n <button class=\"role-tab\" [class.active]=\"activeTab === 'matched'\" (click)=\"setDataSoure('matched')\">\n <span class=\"dot\"></span>\n Matched role mappings\n <span class=\"badge blue\">{{matchedRoleMapping}}</span>\n </button>\n\n <button class=\"role-tab table-body-unmatched\" [class.active]=\"activeTab === 'unmatched'\"\n (click)=\"setDataSoure('unmatched')\">\n <span class=\"dot red\"></span>\n Unmatched role mapping\n <span class=\"badge red\">{{unMatchedRoleMapping}}</span>\n </button>\n </div>\n <div class=\"nav-container\">\n <div class=\"sidenav-content\">\n <div class=\"table-class\">\n <ng-container *ngIf=\"dataSource?.filteredData?.length > 0\">\n <!-- <table mat-table [dataSource]=\"dataSource\">\n <ng-container matColumnDef=\"RequestId\">\n <th mat-header-cell *matHeaderCellDef class=\"row-heading\">Request ID </th>\n <td mat-cell class=\"title-class\" *matCellDef=\"let element\">{{element?.demand_id}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"title\">\n <th mat-header-cell *matHeaderCellDef class=\"row-heading\">Title </th>\n <td mat-cell class=\"title-class\" *matCellDef=\"let element\">{{element?.title}}</td>\n </ng-container>\n\n <ng-container matColumnDef=\"requestor\">\n <th mat-header-cell *matHeaderCellDef class=\"row-heading\">Requestor </th>\n <td mat-cell class=\"title-class\" *matCellDef=\"let element\">{{element?.ownerName}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"requestType\">\n <th mat-header-cell *matHeaderCellDef class=\"row-heading\">Request Type </th>\n <td mat-cell class=\"title-class\" *matCellDef=\"let element\">{{element?.requestType}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"requestStatus\">\n <th mat-header-cell *matHeaderCellDef class=\"row-heading\">Request Status </th>\n\n <td mat-cell class=\"title-class\" *matCellDef=\"let element\">\n <span [ngClass]=\"getStatusClass(element?.status)\">{{element?.status ===\n statusKey.fullfill ? 'Fulfilled'\n : element?.status}}</span>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"assignee\">\n <th mat-header-cell *matHeaderCellDef class=\"row-heading\">Assignee </th>\n <td mat-cell class=\"title-class\" *matCellDef=\"let element\">\n {{element?.assignedProvider ?\n element?.assignedProvider : 'Not Assigned' }}</td>\n </ng-container>\n\n <ng-container matColumnDef=\"requestedOn\">\n <th mat-header-cell *matHeaderCellDef class=\"row-heading\">Requested On </th>\n <td mat-cell class=\"title-class\" *matCellDef=\"let element\">{{element?.createdOn |\n date}}</td>\n </ng-container>\n\n <ng-container matColumnDef=\"interests\">\n <th mat-header-cell *matHeaderCellDef class=\"row-heading\">Interests</th>\n <td mat-cell class=\"title-class\" *matCellDef=\"let element\">\n <a class=\"action-btn-view\" *ngIf=\"element?.interestCount!== 0\"\n href=\"javascript:void(0)\" [ngStyle]=\"getPointerEventsStyle(element)\">\n <span (click)=\"handleClick(element)\">\n {{element?.interestCount}}\n </span></a>\n <a class=\"\" *ngIf=\"element?.interestCount === 0\"\n href=\"javascript:void(0)\">{{element?.requestType ==\n 'Single' ? 'N/A' : element?.interestCount}}</a>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"details\">\n <th mat-header-cell *matHeaderCellDef class=\"row-heading\">Details</th>\n <td mat-cell *matCellDef=\"let element\">\n <mat-icon (click)=\"navigateToDetails(element?.demand_id)\"\n class=\"cursor-pointer\">visibility</mat-icon>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell *matHeaderCellDef class=\"row-heading\"></th>\n <td mat-cell *matCellDef=\"let element\">\n\n\n <span>\n <button mat-icon-button [matMenuTriggerFor]=\"menu\"\n aria-label=\"Example icon-button with a menu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"onClickMenu(element,'viewContent')\">\n <span>View</span>\n </button>\n <button\n *ngIf=\"element?.status === statusKey.Unassigned && element?.status!== statusKey.Inprogress && element?.status!== statusKey.invalid \"\n mat-menu-item (click)=\"onClickMenu(element,'invalidContent')\">\n <span>Mark as invalid</span>\n </button>\n <button mat-menu-item\n *ngIf=\"element?.status!== statusKey.Assigned && element?.interestCount >0 && element?.status!== statusKey.Inprogress && element?.status!== statusKey.invalid && element?.status!==statusKey.fullfill\"\n (click)=\"onClickMenu(element,'assignContent')\">\n <span>Assign</span>\n </button>\n <button\n *ngIf=\"element?.status === statusKey.Assigned && element?.status!== statusKey.Inprogress && element?.status!== statusKey.invalid && element?.status!==statusKey.fullfill \"\n mat-menu-item (click)=\"onClickMenu(element,'reAssignContent')\">\n <span> Re-Assign</span>\n </button>\n <button mat-menu-item (click)=\"onClickMenu(element,'copyContent')\">\n <span>Copy</span>\n </button>\n </mat-menu>\n </span>\n </td>\n\n\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\" class=\"table-row-data\"></tr>\n <tr mat-row *matRowDef=\"let row;columns:displayedColumns\"></tr>\n\n\n </table> -->\n <div class=\"table-container mt-4\" style=\"overflow: auto;\">\n <table mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z1\"\n [ngClass]=\"activeTab === 'matched'? 'table-body': 'table-body-unmatched'\">\n <!-- Selection Column -->\n <!-- <ng-container matColumnDef=\"select\">\n <th mat-header-cell *matHeaderCellDef [hidden]=\"activeTab !== 'matched'\">\n <mat-checkbox class=\"radio-style-checkbox\" (change)=\"toggleAllRows($event)\"\n [checked]=\"isAllSelected()\" [indeterminate]=\"isSomeSelected()\"\n [disabled]=\"!hasSelectableRows()\">\n </mat-checkbox>\n </th>\n\n <td mat-cell *matCellDef=\"let row\" [hidden]=\"activeTab !== 'matched'\">\n <span matTooltip=\"Please generate plan to request for approval\"\n [matTooltipDisabled]=\"row?.cbp_plans?.length > 0\">\n <mat-checkbox class=\"radio-style-checkbox\"\n (click)=\"$event.stopPropagation()\" (change)=\"toggleRow(row)\"\n [checked]=\"selection.isSelected(row)\"\n [disabled]=\"!row?.cbp_plans?.length\">\n </mat-checkbox>\n </span>\n </td>\n </ng-container> -->\n <!-- Designation Name -->\n <ng-container matColumnDef=\"designation_name\">\n <th [ngClass]=\"activeTab === 'matched'? 'table-header': 'table-header-unmatched'\"\n mat-header-cell *matHeaderCellDef> Designation\n </th>\n <td class=\"cursor-pointer\" mat-cell *matCellDef=\"let element\"\n (click)=\"viewCBPPlan(element)\">\n <div\n [ngClass]=\"activeTab === 'matched'? 'designation-text': 'designation-text-unmatched'\">\n <p class=\"designation\">{{ element?.designation_name }} </p>\n <p class=\"wing-text mt-2\">Wing/Division - {{\n element?.wing_division_section }} </p>\n </div>\n\n </td>\n </ng-container>\n\n <!-- Role & Responsibilities -->\n <ng-container matColumnDef=\"role_responsibilities\">\n <th [ngClass]=\"activeTab === 'matched'? 'table-header': 'table-header-unmatched'\"\n mat-header-cell *matHeaderCellDef> Role &\n Responsibilities </th>\n <td mat-cell *matCellDef=\"let element\">\n <ul>\n <li class=\"role-item\"\n *ngFor=\"let role of (isResponisbilityExpanded(element.id) ? element.role_responsibilities : element.role_responsibilities.slice(0, 2)); let i = index\">\n {{i+1}}. {{ role }}</li>\n <li *ngIf=\"element.role_responsibilities.length > 2\"\n class=\"view-more-less cursor-pointer\"\n (click)=\"openFullList(element, 'role_responsibilities')\">\n <span style=\"color: #1B4CA1;font-size: 16px;\">\n <!-- {{ isResponisbilityExpanded(element.id) ? 'View Less' : 'View More' }} -->\n View More\n </span>\n </li>\n </ul>\n </td>\n </ng-container>\n <!-- Activities -->\n <ng-container matColumnDef=\"activities\">\n <th [ngClass]=\"activeTab === 'matched'? 'table-header': 'table-header-unmatched'\"\n mat-header-cell *matHeaderCellDef> Activities </th>\n <td mat-cell *matCellDef=\"let element\">\n <ul>\n <li class=\"role-item\"\n *ngFor=\"let activity of (isActivityExpanded(element.id) ? element.activities : element.activities.slice(0, 2)); let i = index\">\n {{i+1}}. {{ activity }}</li>\n <li *ngIf=\"element.activities.length > 2\"\n class=\"view-more-less cursor-pointer\"\n (click)=\"openFullList(element, 'activity')\">\n <span style=\"color: #1B4CA1;font-size: 16px;\">\n View More\n </span>\n </li>\n </ul>\n </td>\n </ng-container>\n\n <!-- Behavioral Competencies -->\n <ng-container matColumnDef=\"behavioral\">\n <th [ngClass]=\"activeTab === 'matched'? 'table-header': 'table-header-unmatched'\"\n mat-header-cell *matHeaderCellDef> Behavioral\n Competencies </th>\n <td mat-cell *matCellDef=\"let element\">\n <ul class=\"competency-list\">\n <li class=\"behavioural-pill\"\n *ngFor=\"let comp of getCompetenciesByType(element.competencies, 'Behavioral')\">\n <span class=\"competency-text-behavioral\"> {{ comp.theme }} - {{\n comp.sub_theme }} </span>\n </li>\n </ul>\n </td>\n </ng-container>\n\n <!-- Functional Competencies -->\n <ng-container matColumnDef=\"functional\">\n <th [ngClass]=\"activeTab === 'matched'? 'table-header': 'table-header-unmatched'\"\n mat-header-cell *matHeaderCellDef> Functional\n Competencies </th>\n <td mat-cell *matCellDef=\"let element\">\n <ul class=\"competency-list\">\n <li class=\"functional-pill\"\n *ngFor=\"let comp of getCompetenciesByType(element.competencies, 'Functional')\">\n <span class=\"competency-text-functional\"> {{ comp.theme }} - {{\n comp.sub_theme }}</span>\n </li>\n </ul>\n </td>\n </ng-container>\n\n <!-- Domain Competencies -->\n <ng-container matColumnDef=\"domain\">\n <th [ngClass]=\"activeTab === 'matched'? 'table-header': 'table-header-unmatched'\"\n mat-header-cell *matHeaderCellDef> Domain\n Competencies </th>\n <td mat-cell *matCellDef=\"let element\">\n <ul class=\"competency-list\">\n <li class=\"domain-pill\"\n *ngFor=\"let comp of getCompetenciesByType(element.competencies, 'Domain')\">\n <span class=\"competency-text-domain\"> {{ comp.theme }} - {{\n comp.sub_theme }}</span>\n </li>\n </ul>\n </td>\n </ng-container>\n\n <!-- Actions -->\n <ng-container matColumnDef=\"action\">\n <th [ngClass]=\"activeTab === 'matched'? 'table-header': 'table-header-unmatched'\"\n mat-header-cell *matHeaderCellDef> Action </th>\n <td mat-cell *matCellDef=\"let element\">\n <button mat-icon-button [matMenuTriggerFor]=\"actionMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #actionMenu=\"matMenu\">\n <button mat-menu-item (click)=\"editRoleMapping(element)\">\n <mat-icon>edit</mat-icon>\n <span>Edit Role Mapping</span>\n </button>\n <button mat-menu-item (click)=\"viewCBPPlan(element)\">\n <mat-icon>visibility</mat-icon>\n <span>View Role Mapping</span>\n </button>\n <button mat-menu-item (click)=\"generateCourseRecommendation(element)\">\n <mat-icon>school</mat-icon>\n <span>Generate Course Recommendation</span>\n </button>\n <button mat-menu-item (click)=\"viewCourseRecommendation(element)\">\n <mat-icon>preview</mat-icon>\n <span>View Course Recommendation</span>\n </button>\n <button mat-menu-item (click)=\"deleteRoleMapping(element)\">\n <mat-icon>delete</mat-icon>\n <span>Delete Role Mapping</span>\n </button>\n </mat-menu>\n </td>\n </ng-container>\n\n <!-- Header & Rows -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n\n <!-- Pagination -->\n <mat-paginator [length]=\"dataSource?.data?.length || 0\" [pageSize]=\"5\"\n [pageSizeOptions]=\"[5, 10, 20]\" showFirstLastButtons>\n </mat-paginator>\n </div>\n\n </ng-container>\n\n <div class=\"no-cbp-data\" *ngIf=\"dataSource?.filteredData?.length === 0\">\n <!-- <div><img src=\"/mdo-assets/images/no-content-data.svg\" alt=\"no-content\"></div> -->\n <div class=\"sub-heading mt-4\">\n <p>No Data Found</p>\n </div>\n <!-- <div class=\" margin-top-m no-content-create\">\n <button mat-button type=\"button\" class=\"search-btns\"\n [routerLink]=\"['/app/home/create-request-form']\">Request Content</button>\n </div> -->\n\n </div>\n\n <!-- <mat-paginator *ngIf=\"dataSource?.filteredData?.length > 0\" [pageSize]=\"pageSize\"\n [length]=\"this.requestCount\" [pageSizeOptions]=\"[10,20,40]\"\n (page)=\"onChangePage($event)\"></mat-paginator> -->\n\n\n </div>\n\n\n\n </div>\n </div>\n </mat-card>\n </div>\n</div>\n\n\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>","import { Component } from '@angular/core';\nimport { MatLegacyTableDataSource as MatTableDataSource } from '@angular/material/legacy-table'\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { Router } from '@angular/router';\nimport { HEADER_DATA } from '../shared/constant/app.constant';\nimport { EventService } from '../shared/services/event.service';\nimport { SharedService } from '../shared/services/shared.service';\n@Component({\n selector: 'initial-screen',\n templateUrl: './initial-screen.component.html',\n styleUrls: ['./initial-screen.component.scss']\n})\nexport class InitialScreenComponent {\n headerData = HEADER_DATA;\n title = 'sunbird-cb-staticweb';\n isMaintenancePage: any\n selectedValue = ''\n searchText = ''\n dataSource: any\n displayedColumns: string[] = ['RequestId', 'title', 'requestor', 'requestType',\n 'requestStatus', 'assignee', 'requestedOn', 'interests', 'action']\n selectedMinistryType: string = 'center';\n ministryData:any = []\n ministryFullData:any = []\n sectorData = [\n {\n value: 'Women and child development'\n },\n {\n value: 'Rural development'\n },\n {\n value: 'Urben development'\n },\n {\n value: 'Healthcare'\n },\n {\n value: 'Agriculture'\n },\n {\n value: 'Others'\n }\n\n ]\n formData: {}\n nextStep = 'initial'\n loginSuccess = false\n cbpFinalObj:any = {}\n userEmail = ''\n constructor(\n private eventSvc: EventService, \n public sharedService: SharedService,\n public snackBar: MatSnackBar, \n private router: Router) {\n this.dataSource = new MatTableDataSource<any>([])\n this.isMaintenancePage = window.location.href.includes('/maintenance')\n }\n\n ngOnInit() { \n \n this.sharedService.loginSuccess.subscribe((data)=>{\n \n if(!data) {\n this.nextStep = 'initial'\n localStorage.clear()\n }\n })\n this.loginSuccess = this.sharedService.checkIfLogin()\n if(this.loginSuccess) {\n \n this.userEmail = localStorage.getItem('userEmail')\n }\n this.cbpFinalObj = this.sharedService.getCBPPlanLocalStorage()\n if(this.cbpFinalObj && this.cbpFinalObj?.ministry && (this.cbpFinalObj?.ministry?.sbOrgType === 'ministry' || this.cbpFinalObj?.ministry?.sbOrgType === 'state') && \n this.cbpFinalObj?.role_mapping_generation?.length) {\n this.nextStep = 'role-mapping'\n } else {\n this.nextStep = 'initial'\n }\n // console.log('this.nextStep',this.nextStep)\n // console.log('this.sharedService.cb', this.sharedService.cbpPlanFinalObj)\n }\n\n\n successRoleMapping(event) {\n this.nextStep = 'role-mapping'\n this.formData = event\n // console.log('event', event)\n }\n\n alreadyAvailableRoleMapping(event) {\n this.nextStep = 'role-mapping'\n // console.log('event', event)\n this.formData = event\n \n \n }\n\n moveToInitialScreen(event) {\n if(event === 'add') {\n this.nextStep = 'initial'\n } else if (event === 'edit') {\n this.nextStep = 'initial'\n }\n \n }\n\n loginSuccessStatus(event) {\n this.loginSuccess = event\n this.nextStep = 'initial'\n }\n\n logout() {\n this.loginSuccess = false\n this.nextStep = 'initial'\n localStorage.clear() \n this.sharedService.logout().subscribe({\n next: (res) => {\n this.snackBar.open('You are logout successfully', 'X', {\n duration: 3000,\n panelClass: ['snackbar-success']\n });\n },\n error: (error) => {\n this.snackBar.open(error?.error?.detail, 'X', {\n duration: 3000,\n panelClass: ['snackbar-error']\n });\n }\n });\n }\n\n goToUploadDocument() {\n this.router.navigate(['/ai/upload-documents']);\n }\n\n \n}\n","<div *ngIf=\"nextStep === 'initial'\">\n <app-role-mapping-generation [loginStatusFlag]=\"loginSuccess\" (successRoleMapping)=\"successRoleMapping($event)\" (loginSuccess)=\"loginSuccessStatus($event)\" (alreadyAvailableRoleMapping)=\"alreadyAvailableRoleMapping($event)\"></app-role-mapping-generation>\n</div>\n<div *ngIf=\"nextStep === 'role-mapping'\">\n <app-role-mapping-list [formData]=\"formData\" (moveToInitialScreen)=\"moveToInitialScreen($event)\"></app-role-mapping-list>\n</div>","import { Pipe, PipeTransform } from '@angular/core'\n\nimport { SharedService } from '../modules/shared/services/shared.service';\n@Pipe({\n name: 'pipePublicURL',\n})\nexport class PipePublicURL implements PipeTransform {\n constructor( private sharedSvc: SharedService, ) {\n\n }\n transform(value: string): any {\n let configDetails = this.sharedSvc.getConfig();\n const mainUrl = value && value.split('/content').pop() || ''\n const finalURL = `${configDetails.portalURL}/${configDetails.contentBucket}/content${mainUrl}`\n return value ? finalURL : ''\n }\n\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { PipePublicURL } from './pipe-public-URL.pipe'\n\n@NgModule({\n declarations: [PipePublicURL],\n imports: [\n CommonModule,\n ],\n exports: [PipePublicURL],\n})\nexport class PipePublicURLModule { }\n","import {\n Directive,\n ElementRef,\n Output,\n EventEmitter,\n HostListener,\n OnInit\n } from \"@angular/core\";\n import { fromEvent } from \"rxjs\";\n import { take } from \"rxjs/operators\";\n \n @Directive({\n selector: \"[clickOutside]\"\n })\n export class ClickOutsideDirective implements OnInit {\n @Output() clickOutside = new EventEmitter();\n \n captured = false;\n \n constructor(private elRef: ElementRef) {}\n \n @HostListener(\"document:click\", [\"$event.target\"])\n onClick(target: any) {\n if (!this.captured) {\n return;\n }\n \n if (!this.elRef.nativeElement.contains(target)) {\n this.clickOutside.emit();\n }\n }\n \n ngOnInit() {\n fromEvent(document, \"click\", { capture: true })\n .pipe(take(1))\n .subscribe(() => (this.captured = true));\n }\n }\n ","import { NgModule } from '@angular/core';\nimport {ClickOutsideDirective} from './clickoutside.directive'\n\n@NgModule({\n imports:[\n ],\n declarations: [\n ClickOutsideDirective\n ],\n exports:[\n ClickOutsideDirective,\n ]\n})\nexport class DirectiveModule { }\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { AiCbpComponent } from './ai-cbp.component';\nimport { DashboardComponent } from './components/dashboard/dashboard.component';\nimport { UploadDocumentPageComponent } from './modules/upload-document-page/upload-document-page.component';\nimport { ApprovalRequestsComponent } from './components/approval-requests/approval-requests.component';\nimport { RoleMappingListComponent } from './components/role-mapping-list/role-mapping-list.component';\nimport { RoleMappingGenerationComponent } from './components/role-mapping-generation/role-mapping-generation.component';\nimport { InitialScreenComponent } from './modules/initial-screen/initial-screen.component';\nimport { ReviewRequestComponent } from './components/review-request/review-request.component';\n\nconst routes: Routes = [\n {\n path: '',\n component: AiCbpComponent,\n children: [\n { path: 'dashboard', component: DashboardComponent },\n { path: 'upload-documents', component: UploadDocumentPageComponent },\n { path: 'approve-requests', component: ApprovalRequestsComponent },\n {\n path: 'list',\n component: RoleMappingListComponent,\n pathMatch: 'full'\n },\n {\n path: 'initial',\n component: RoleMappingGenerationComponent,\n pathMatch: 'full'\n },\n {\n path: 'logout',\n component: InitialScreenComponent,\n pathMatch: 'full'\n },\n {\n path: 'review-request/:request_id',\n component: ReviewRequestComponent,\n pathMatch: 'full'\n },\n ]\n }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class AiCbpRoutingModule { }","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { AiCbpComponent } from './ai-cbp.component';\nimport { ApprovalRequestFormComponent } from './components/approval-request-form/approval-request-form.component';\nimport { ReviewRequestComponent } from './components/review-request/review-request.component';\nimport { ApprovalRequestsComponent } from './components/approval-requests/approval-requests.component';\nimport { DashboardComponent } from './components/dashboard/dashboard.component'; \nimport { UpdateDesignationHierarchyComponent } from './components/update-designation-hierarchy/update-designation-hierarchy.component';\nimport { AddCourseComponent } from './components/add-course/add-course.component';\nimport { RoleMappingService } from './modules/shared/services/role-mapping.service';\nimport { GapAnalysisRecommendedCourseComponent } from './components/gap-analysis-recommended-course/gap-analysis-recommended-course.component';\nimport { OrderByNamePipe } from './modules/shared/pipes/order-by-name.pipe';\nimport { UploadDocumentPageComponent } from './modules/upload-document-page/upload-document-page.component';\nimport { UploadDialogComponent } from './modules/upload-document-page/upload-dialog/upload-dialog.component';\nimport { InitialScreenComponent } from './modules/initial-screen/initial-screen.component';\nimport { ProgressDialogComponent } from './modules/upload-document-page/progress-dialog/progress-dialog.component';\nimport { DeleteRoleMappingPopupComponent } from './components/delete-role-mapping-popup/delete-role-mapping-popup.component';\nimport { ListPopupComponent } from './components/list-popup/list-popup.component';\nimport { SuggestMoreCoursesComponent } from './components/suggest-more-courses/suggest-more-courses.component';\nimport { AddDesignationComponent } from './components/add-designation/add-designation.component';\nimport { AddPersonalisationComponent } from './components/add-personalisation/add-personalisation.component';\nimport { ViewCbpPlanComponent } from './components/view-cbp-plan/view-cbp-plan.component';\nimport { EditCbpPlanComponent } from './components/edit-cbp-plan/edit-cbp-plan.component';\nimport { GenerateCourseRecommendationComponent, RegenerateConfirmationDialog } from './components/generate-course-recommendation/generate-course-recommendation.component';\nimport { ViewCourseRecommendationComponent } from './components/view-course-recommendation/view-course-recommendation.component';\nimport { DeleteRoleMappingComponent } from './components/delete-role-mapping/delete-role-mapping.component';\nimport { ViewFinalCbpPlanComponent } from './components/view-final-cbp-plan/view-final-cbp-plan.component';\nimport { RoleMappingGenerationComponent } from './components/role-mapping-generation/role-mapping-generation.component';\nimport { RoleMappingListComponent } from './components/role-mapping-list/role-mapping-list.component'\nimport { PipePublicURLModule } from './pipe-public-URL/pipe-public-URL.module';\nimport { DirectiveModule } from './modules/shared/directives/directive.module';\n\n\nimport { MatLegacyButtonModule as MatButtonModule } from '@angular/material/legacy-button'\nimport { MatLegacyCardModule as MatCardModule } from '@angular/material/legacy-card'\nimport { MatLegacyChipsModule as MatChipsModule } from '@angular/material/legacy-chips'\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatLegacyFormFieldModule as MatFormFieldModule } from '@angular/material/legacy-form-field'\nimport { MatGridListModule } from '@angular/material/grid-list'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatLegacyInputModule as MatInputModule } from '@angular/material/legacy-input'\nimport { MatLegacyListModule as MatListModule } from '@angular/material/legacy-list'\nimport { MatLegacyRadioModule as MatRadioModule } from '@angular/material/legacy-radio'\nimport { MatSidenavModule } from '@angular/material/sidenav'\nimport { MatLegacySelectModule as MatSelectModule } from '@angular/material/legacy-select'\nimport { MatLegacyCheckboxModule } from '@angular/material/legacy-checkbox';\n\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatMenuModule } from '@angular/material/menu';\n\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTabsModule } from '@angular/material/tabs';\n\nimport { MarkdownModule } from 'ngx-markdown';\n\nimport { DragDropModule } from '@angular/cdk/drag-drop';\n\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { NgxDaterangepickerMd } from 'ngx-daterangepicker-material';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { ToastrModule } from 'ngx-toastr';\nimport { NgbModalModule } from '@ng-bootstrap/ng-bootstrap';\nimport { PaginationModule } from 'ngx-bootstrap/pagination';\nimport { CommonModule } from '@angular/common';\nimport { AiCbpRoutingModule } from './ai-cbp-routing.module';\n\n@NgModule({\n declarations: [\n AiCbpComponent,\n ApprovalRequestFormComponent,\n ReviewRequestComponent,\n ApprovalRequestsComponent,\n DashboardComponent,\n UpdateDesignationHierarchyComponent,\n AddCourseComponent,\n GapAnalysisRecommendedCourseComponent,\n OrderByNamePipe,\n UploadDocumentPageComponent,\n UploadDialogComponent,\n InitialScreenComponent,\n ProgressDialogComponent,\n DeleteRoleMappingPopupComponent,\n ListPopupComponent,\n SuggestMoreCoursesComponent,\n AddDesignationComponent,\n AddPersonalisationComponent,\n ViewCbpPlanComponent,\n EditCbpPlanComponent,\n GenerateCourseRecommendationComponent,\n RegenerateConfirmationDialog,\n ViewCourseRecommendationComponent,\n DeleteRoleMappingComponent,\n ViewFinalCbpPlanComponent,\n RoleMappingGenerationComponent,\n RoleMappingListComponent\n\n \n\n ],\n imports: [\n CommonModule,\n RouterModule,\n MatSidenavModule, MatListModule, MatCardModule, FormsModule,\n MatFormFieldModule, MatInputModule, MatButtonModule, MatIconModule, MatGridListModule,\n MatRadioModule, MatDialogModule, MatChipsModule, MatSelectModule,MatLegacyCheckboxModule,\n MatProgressBarModule,\n ReactiveFormsModule,\n MatProgressSpinnerModule,\n MatSnackBarModule,\n MatTableModule,\n MatPaginatorModule,\n MatMenuModule,\n MatTooltipModule,\n MatTabsModule,\n MarkdownModule.forRoot(),\n DragDropModule,\n MatDatepickerModule,\n MatNativeDateModule,\n NgxDaterangepickerMd.forRoot(),\n PaginationModule.forRoot(),\n ToastrModule.forRoot(),\n NgbModalModule,\n DirectiveModule,\n PipePublicURLModule,\n AiCbpRoutingModule\n ],\n exports: [\n AiCbpComponent,\n ApprovalRequestFormComponent,\n ReviewRequestComponent,\n ApprovalRequestsComponent,\n DashboardComponent,\n UpdateDesignationHierarchyComponent,\n AddCourseComponent,\n GapAnalysisRecommendedCourseComponent,\n OrderByNamePipe,\n UploadDocumentPageComponent,\n UploadDialogComponent,\n InitialScreenComponent,\n ProgressDialogComponent,\n DeleteRoleMappingPopupComponent,\n ListPopupComponent,\n SuggestMoreCoursesComponent,\n AddDesignationComponent,\n AddPersonalisationComponent,\n ViewCbpPlanComponent,\n EditCbpPlanComponent,\n GenerateCourseRecommendationComponent,\n RegenerateConfirmationDialog,\n ViewCourseRecommendationComponent,\n DeleteRoleMappingComponent,\n ViewFinalCbpPlanComponent,\n RoleMappingGenerationComponent,\n RoleMappingListComponent\n ],\n providers: [\n RoleMappingService\n ]\n})\nexport class AiCbpModule { }\n","/*\n * Public API Surface of ai-cbp\n */\n\nexport * from './lib/ai-cbp.service';\nexport * from './lib/ai-cbp.component';\nexport * from './lib/ai-cbp.module';\n\n\nexport * from './lib/modules/upload-document-page/upload-document-page.component';\nexport * from './lib/modules/initial-screen/initial-screen.component';\n\nexport * from './lib/components/role-mapping-generation/role-mapping-generation.component';\nexport * from './lib/components/role-mapping-list/role-mapping-list.component';\nexport * from './lib/components/approval-requests/approval-requests.component';\nexport * from './lib/components/dashboard/dashboard.component';\nexport * from './lib/components/review-request/review-request.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","API_END_POINTS","i2.InitService","i2","i3.SharedService","i4","i5","i8","i9","i10","i11","i1.SharedService","i7","i3","i2.SharedService","i6","i12","i13","i14","i15","i16","i1.EventService","i6.RoleMappingService","i15.GapAnalysisRecommendedCourseComponent","MatTableDataSource","i6.RoleMappingGenerationComponent","i7.RoleMappingListComponent","MatListModule","MatCardModule","MatFormFieldModule","MatInputModule","MatButtonModule","MatRadioModule","MatChipsModule","MatSelectModule"],"mappings":"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"}