cloud-ide-core 1.0.1 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/README.md +49 -10
  2. package/fesm2022/{cloud-ide-core-general-master-type.component-B26auJZw.mjs → cloud-ide-core-general-master-type.component-OPaXxAXW.mjs} +133 -135
  3. package/fesm2022/{cloud-ide-core-general-master-type.component-B26auJZw.mjs.map → cloud-ide-core-general-master-type.component-OPaXxAXW.mjs.map} +1 -1
  4. package/fesm2022/{cloud-ide-core-general-master-type.service-Ab64Jjps.mjs → cloud-ide-core-general-master-type.service-8JWTVijZ.mjs} +7 -7
  5. package/fesm2022/{cloud-ide-core-general-master-type.service-Ab64Jjps.mjs.map → cloud-ide-core-general-master-type.service-8JWTVijZ.mjs.map} +1 -1
  6. package/fesm2022/{cloud-ide-core-general-master.component-B6llTVoV.mjs → cloud-ide-core-general-master.component-BEHWqXvF.mjs} +153 -155
  7. package/fesm2022/{cloud-ide-core-general-master.component-B6llTVoV.mjs.map → cloud-ide-core-general-master.component-BEHWqXvF.mjs.map} +1 -1
  8. package/fesm2022/{cloud-ide-core-page-form.component-CaEca3mB.mjs → cloud-ide-core-page-form.component-BatglsBU.mjs} +26 -26
  9. package/fesm2022/{cloud-ide-core-page-form.component-CaEca3mB.mjs.map → cloud-ide-core-page-form.component-BatglsBU.mjs.map} +1 -1
  10. package/fesm2022/cloud-ide-core.mjs +5089 -1116
  11. package/fesm2022/cloud-ide-core.mjs.map +1 -1
  12. package/index.d.ts +2111 -3
  13. package/package.json +3 -5
  14. package/esm2022/cloud-ide-core.mjs +0 -5
  15. package/esm2022/lib/cloud-ide-core.component.mjs +0 -19
  16. package/esm2022/lib/cloud-ide-core.routes.mjs +0 -137
  17. package/esm2022/lib/cloud-ide-core.service.mjs +0 -14
  18. package/esm2022/lib/core/department-management/components/department-list/department-list.component.mjs +0 -768
  19. package/esm2022/lib/core/department-management/index.mjs +0 -5
  20. package/esm2022/lib/core/department-management/services/department-management.service.mjs +0 -187
  21. package/esm2022/lib/core/designation-management/components/designation-list/designation-list.component.mjs +0 -1122
  22. package/esm2022/lib/core/designation-management/index.mjs +0 -5
  23. package/esm2022/lib/core/designation-management/services/designation-management.service.mjs +0 -194
  24. package/esm2022/lib/core/general-master-management/components/general-master/general-master.component.mjs +0 -738
  25. package/esm2022/lib/core/general-master-management/components/general-master-type/general-master-type.component.mjs +0 -608
  26. package/esm2022/lib/core/general-master-management/services/general-master-type.service.mjs +0 -203
  27. package/esm2022/lib/core/general-master-management/services/general-master.service.mjs +0 -166
  28. package/esm2022/lib/core/grade-level-management/components/grade-level-list/grade-level-list.component.mjs +0 -794
  29. package/esm2022/lib/core/grade-level-management/index.mjs +0 -5
  30. package/esm2022/lib/core/grade-level-management/services/grade-level-management.service.mjs +0 -172
  31. package/esm2022/lib/core/menu-management/components/menu-list/menu-list.component.mjs +0 -1135
  32. package/esm2022/lib/core/menu-management/index.mjs +0 -10
  33. package/esm2022/lib/core/menu-management/interfaces/menu-item.interface.mjs +0 -11
  34. package/esm2022/lib/core/menu-management/mock-data/menu-items.json +0 -311
  35. package/esm2022/lib/core/menu-management/services/menu-management.service.mjs +0 -230
  36. package/esm2022/lib/core/page-management/components/page-controls/page-controls.component.mjs +0 -483
  37. package/esm2022/lib/core/page-management/components/page-form/page-form.component.mjs +0 -212
  38. package/esm2022/lib/core/page-management/components/page-list/page-list.component.mjs +0 -393
  39. package/esm2022/lib/core/page-management/components/page-theme/page-theme.component.mjs +0 -767
  40. package/esm2022/lib/core/page-management/index.mjs +0 -10
  41. package/esm2022/lib/core/page-management/services/page-controls.service.mjs +0 -136
  42. package/esm2022/lib/core/page-management/services/page-management.service.mjs +0 -98
  43. package/esm2022/lib/core/page-management/services/page-theme.service.mjs +0 -107
  44. package/esm2022/public-api.mjs +0 -17
  45. package/lib/cloud-ide-core.component.d.ts +0 -5
  46. package/lib/cloud-ide-core.routes.d.ts +0 -2
  47. package/lib/cloud-ide-core.service.d.ts +0 -6
  48. package/lib/core/department-management/components/department-list/department-list.component.d.ts +0 -178
  49. package/lib/core/department-management/index.d.ts +0 -2
  50. package/lib/core/department-management/services/department-management.service.d.ts +0 -68
  51. package/lib/core/designation-management/components/designation-list/designation-list.component.d.ts +0 -242
  52. package/lib/core/designation-management/index.d.ts +0 -2
  53. package/lib/core/designation-management/services/designation-management.service.d.ts +0 -69
  54. package/lib/core/general-master-management/components/general-master/general-master.component.d.ts +0 -167
  55. package/lib/core/general-master-management/components/general-master-type/general-master-type.component.d.ts +0 -129
  56. package/lib/core/general-master-management/services/general-master-type.service.d.ts +0 -75
  57. package/lib/core/general-master-management/services/general-master.service.d.ts +0 -62
  58. package/lib/core/grade-level-management/components/grade-level-list/grade-level-list.component.d.ts +0 -199
  59. package/lib/core/grade-level-management/index.d.ts +0 -2
  60. package/lib/core/grade-level-management/services/grade-level-management.service.d.ts +0 -69
  61. package/lib/core/menu-management/components/menu-list/menu-list.component.d.ts +0 -278
  62. package/lib/core/menu-management/index.d.ts +0 -3
  63. package/lib/core/menu-management/interfaces/menu-item.interface.d.ts +0 -30
  64. package/lib/core/menu-management/services/menu-management.service.d.ts +0 -85
  65. package/lib/core/page-management/components/page-controls/page-controls.component.d.ts +0 -126
  66. package/lib/core/page-management/components/page-form/page-form.component.d.ts +0 -35
  67. package/lib/core/page-management/components/page-list/page-list.component.d.ts +0 -91
  68. package/lib/core/page-management/components/page-theme/page-theme.component.d.ts +0 -189
  69. package/lib/core/page-management/index.d.ts +0 -6
  70. package/lib/core/page-management/services/page-controls.service.d.ts +0 -54
  71. package/lib/core/page-management/services/page-management.service.d.ts +0 -42
  72. package/lib/core/page-management/services/page-theme.service.d.ts +0 -43
  73. package/public-api.d.ts +0 -8
@@ -1 +1 @@
1
- {"version":3,"file":"cloud-ide-core.mjs","sources":["../../../projects/cloud-ide-core/src/lib/cloud-ide-core.routes.ts","../../../projects/cloud-ide-core/src/lib/cloud-ide-core.service.ts","../../../projects/cloud-ide-core/src/lib/cloud-ide-core.component.ts","../../../projects/cloud-ide-core/src/lib/core/menu-management/services/menu-management.service.ts","../../../projects/cloud-ide-core/src/lib/core/menu-management/components/menu-list/menu-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/menu-management/components/menu-list/menu-list.component.html","../../../projects/cloud-ide-core/src/lib/core/menu-management/interfaces/menu-item.interface.ts","../../../projects/cloud-ide-core/src/lib/core/menu-management/index.ts","../../../projects/cloud-ide-core/src/lib/core/department-management/services/department-management.service.ts","../../../projects/cloud-ide-core/src/lib/core/department-management/components/department-list/department-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/department-management/components/department-list/department-list.component.html","../../../projects/cloud-ide-core/src/lib/core/department-management/index.ts","../../../projects/cloud-ide-core/src/lib/core/designation-management/services/designation-management.service.ts","../../../projects/cloud-ide-core/src/lib/core/grade-level-management/services/grade-level-management.service.ts","../../../projects/cloud-ide-core/src/lib/core/designation-management/components/designation-list/designation-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/designation-management/components/designation-list/designation-list.component.html","../../../projects/cloud-ide-core/src/lib/core/designation-management/index.ts","../../../projects/cloud-ide-core/src/lib/core/grade-level-management/components/grade-level-list/grade-level-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/grade-level-management/components/grade-level-list/grade-level-list.component.html","../../../projects/cloud-ide-core/src/lib/core/grade-level-management/index.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/services/page-management.service.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-list/page-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-list/page-list.component.html","../../../projects/cloud-ide-core/src/lib/core/page-management/services/page-theme.service.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-theme/page-theme.component.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-theme/page-theme.component.html","../../../projects/cloud-ide-core/src/lib/core/page-management/services/page-controls.service.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-controls/page-controls.component.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-controls/page-controls.component.html","../../../projects/cloud-ide-core/src/lib/core/page-management/index.ts","../../../projects/cloud-ide-core/src/public-api.ts","../../../projects/cloud-ide-core/src/cloud-ide-core.ts"],"sourcesContent":["import { Route } from '@angular/router';\r\n\r\nexport const coreRoutes: Route[] = [\r\n {\r\n path: 'menu-management',\r\n loadComponent: () => import('./core/menu-management/components/menu-list/menu-list.component').then(c => c.MenuListComponent),\r\n title: 'Menu Management',\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"core_menu_list\"\r\n }\r\n },{\r\n path: 'department',\r\n loadComponent: () => import('./core/department-management/components/department-list/department-list.component').then(c => c.DepartmentListComponent),\r\n title: 'Department Management',\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"core_department_list\"\r\n }\r\n },\r\n {\r\n path: 'designation',\r\n loadComponent: () => import('./core/designation-management/components/designation-list/designation-list.component').then(c => c.DesignationListComponent),\r\n title: 'Designation Management',\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"core_designation_list\"\r\n }\r\n },\r\n {\r\n path: 'grade-level',\r\n loadComponent: () => import('./core/grade-level-management/components/grade-level-list/grade-level-list.component').then(c => c.GradeLevelListComponent),\r\n title: 'Grade Level Management',\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"core_grade_level_list\"\r\n }\r\n },\r\n {\r\n path: 'page',\r\n loadComponent: () => import('./core/page-management/components/page-list/page-list.component').then(c => c.PageListComponent),\r\n title: 'Page Management',\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"core_page_management\"\r\n }\r\n },\r\n {\r\n path: 'page-form',\r\n loadComponent: () => import('./core/page-management/components/page-form/page-form.component').then(c => c.PageFormComponent),\r\n title: 'Page Form',\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"core_page_management\"\r\n }\r\n },\r\n {\r\n path: 'page-form/:query',\r\n loadComponent: () => import('./core/page-management/components/page-form/page-form.component').then(c => c.PageFormComponent),\r\n title: 'Page Form',\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"core_page_management\"\r\n }\r\n },\r\n {\r\n path: 'page-theme',\r\n loadComponent: () => import('./core/page-management/components/page-theme/page-theme.component').then(c => c.PageThemeComponent),\r\n title: 'Page Theme Management',\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"core_page_theme\"\r\n }\r\n },\r\n {\r\n path: 'page-theme/:query',\r\n loadComponent: () => import('./core/page-management/components/page-theme/page-theme.component').then(c => c.PageThemeComponent),\r\n title: 'Page Theme Management',\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"core_page_theme\"\r\n }\r\n },\r\n {\r\n path: 'page-controls',\r\n loadComponent: () => import('./core/page-management/components/page-controls/page-controls.component').then(c => c.PageControlsComponent),\r\n title: 'Page Controls Management',\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"core_page_controls\"\r\n }\r\n },\r\n {\r\n path: 'page-controls/:query',\r\n loadComponent: () => import('./core/page-management/components/page-controls/page-controls.component').then(c => c.PageControlsComponent),\r\n title: 'Page Controls Management',\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"core_page_controls\"\r\n }\r\n },\r\n {\r\n path: 'general_master_entry',\r\n loadComponent: () => import('./core/general-master-management/components/general-master/general-master.component').then(c => c.GeneralMasterComponent),\r\n title: 'General Master Entry',\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"core_general_master\"\r\n }\r\n },\r\n {\r\n path: 'general_master_entry/:query',\r\n loadComponent: () => import('./core/general-master-management/components/general-master/general-master.component').then(c => c.GeneralMasterComponent),\r\n title: 'General Master Entry',\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"core_general_master\"\r\n }\r\n },\r\n {\r\n path: 'general_type_entry',\r\n loadComponent: () => import('./core/general-master-management/components/general-master-type/general-master-type.component').then(c => c.GeneralMasterTypeComponent),\r\n title: 'General Type Entry',\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"core_general_master_type\"\r\n }\r\n },\r\n {\r\n path: 'general_type_entry/:query',\r\n loadComponent: () => import('./core/general-master-management/components/general-master-type/general-master-type.component').then(c => c.GeneralMasterTypeComponent),\r\n title: 'General Type Entry',\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"core_general_master_type\"\r\n }\r\n }\r\n];\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CloudIdeCoreService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'cide-core',\r\n standalone: true,\r\n imports: [],\r\n template: `\r\n <p>\r\n cloud-ide-core works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class CloudIdeCoreComponent {\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError, BehaviorSubject, of } from 'rxjs';\r\nimport { catchError, tap, map } from 'rxjs/operators';\r\nimport { \r\n cidePath, \r\n coreRoutesUrl, \r\n generateStringFromObject, \r\n hostManagerRoutesUrl, \r\n ICoreSyme, \r\n MCoreSymeDeletePayload, \r\n MCoreSymeGetByIdPayload, \r\n menuByIdControllerResponse, \r\n menuDeleteControllerResponse, \r\n menuListControllerResponse, \r\n MMenuListPayload\r\n} from 'cloud-ide-lms-model';\r\nimport mockMenuData from '../mock-data/menu-items.json';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MenuManagementService {\r\n private apiUrl = `${coreRoutesUrl?.getSidebarMenues}`;\r\n private menuListSubject = new BehaviorSubject<ICoreSyme[]>([]);\r\n public menuList$ = this.menuListSubject.asObservable();\r\n\r\n constructor(private http: HttpClient) {\r\n console.log('MenuManagementService initialized - using real API');\r\n }\r\n\r\n /**\r\n * Get menu list from API\r\n */\r\n getMenuList(body: MMenuListPayload): Observable<menuListControllerResponse> {\r\n const query = generateStringFromObject(body);\r\n return this.http?.get<menuListControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, query]))\r\n .pipe(\r\n tap((response: menuListControllerResponse) => {\r\n if (response?.success) {\r\n this.menuListSubject.next(response?.data || []);\r\n }\r\n }),\r\n catchError(error => {\r\n console.error('MenuManagementService API error:', error);\r\n return this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Get menu list using mock data\r\n */\r\n getMenuListWithMockData(): Observable<menuListControllerResponse> {\r\n console.log('Using mock data for menu list');\r\n // Convert mock data to match ICoreSyme interface\r\n const mockData = {\r\n ...mockMenuData,\r\n data: mockMenuData.data.map((item: Record<string, unknown>) => ({\r\n ...item,\r\n syme_link: (item['syme_link'] as boolean) ? '1' : '0' // Convert boolean to string\r\n }))\r\n };\r\n return of(mockData as menuListControllerResponse).pipe(\r\n tap((response: menuListControllerResponse) => {\r\n if (response?.success) {\r\n this.menuListSubject.next(response?.data || []);\r\n }\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Get menu list from cache (if available)\r\n */\r\n getMenuListFromCache(): ICoreSyme[] {\r\n return this.menuListSubject.value;\r\n }\r\n\r\n /**\r\n * Create new menu item\r\n * POST ${coreRoutesUrl?.menu} - payload: MCoreSymeInsertUpdatePayload, response: menuInsertUpdateControllerResponse\r\n */\r\n createMenuItem(menuItem: ICoreSyme): Observable<menuListControllerResponse> {\r\n console.log('Creating menu item:', menuItem);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu]);\r\n return this.http.post<menuListControllerResponse>(url, menuItem)\r\n .pipe(\r\n tap((response: menuListControllerResponse) => {\r\n if (response.success) {\r\n this.refreshMenuList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Update existing menu item\r\n * POST ${coreRoutesUrl?.menu} - payload: MCoreSymeInsertUpdatePayload, response: menuInsertUpdateControllerResponse\r\n */\r\n updateMenuItem(id: string, menuItem: ICoreSyme): Observable<menuListControllerResponse> {\r\n console.log('Updating menu item:', id, menuItem);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu]);\r\n return this.http.post<menuListControllerResponse>(url, menuItem)\r\n .pipe(\r\n tap((response: menuListControllerResponse) => {\r\n if (response.success) {\r\n this.refreshMenuList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get menu item by ID\r\n * GET ${coreRoutesUrl?.menu}/byId/:query - payload: MCoreSymeGetByIdPayload, response: menuByIdControllerResponse\r\n * TODO: Update to use MCoreSymeGetByIdPayload and menuByIdControllerResponse when available\r\n */\r\n getMenuItemById(id: string): Observable<menuByIdControllerResponse> {\r\n console.log('Getting menu item by ID:', id);\r\n const payload: MCoreSymeGetByIdPayload = { syme_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, 'byId', query]);\r\n return this.http.get<menuByIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete menu item\r\n * DELETE ${coreRoutesUrl?.menu}/:query - payload: MCoreSymeDeletePayload, response: menuDeleteControllerResponse\r\n * TODO: Update to use MCoreSymeDeletePayload and menuDeleteControllerResponse when available\r\n */\r\n deleteMenuItem(id: string): Observable<menuDeleteControllerResponse> {\r\n const payload: MCoreSymeDeletePayload = { syme_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, query]);\r\n return this.http.delete<menuDeleteControllerResponse>(url)\r\n .pipe(\r\n tap((response: menuDeleteControllerResponse) => {\r\n if (response.success) {\r\n this.refreshMenuList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete multiple menu items\r\n * DELETE ${coreRoutesUrl?.menu}/:query - payload: MCoreSymeDeletePayload, response: menuDeleteControllerResponse\r\n * TODO: Update to use MCoreSymeDeletePayload and menuDeleteControllerResponse when available\r\n */\r\n deleteMultipleMenuItems(ids: string[]): Observable<{ success: boolean; message?: string; data?: unknown }> {\r\n console.log('Deleting multiple menu items:', ids);\r\n const payload = { ids };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, query]);\r\n return this.http.delete<{ success: boolean; message?: string; data?: unknown }>(url)\r\n .pipe(\r\n tap((response: { success: boolean; message?: string; data?: unknown }) => {\r\n if (response.success) {\r\n this.refreshMenuList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Toggle menu item active status\r\n */\r\n toggleMenuItemStatus(id: string): Observable<menuListControllerResponse> {\r\n console.log('Toggling menu item status:', id);\r\n const payload = { id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, query]);\r\n return this.http.put<menuListControllerResponse>(url, {})\r\n .pipe(\r\n tap((response: menuListControllerResponse) => {\r\n if (response.success) {\r\n this.refreshMenuList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get available menu types\r\n */\r\n getMenuTypes(): Observable<string[]> {\r\n return this.http.get<{ data: string[] }>('/api/menu/types')\r\n .pipe(\r\n map((response: { data: string[] }) => response.data),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get available icons\r\n */\r\n getAvailableIcons(): Observable<string[]> {\r\n return this.http.get<{ data: string[] }>('/api/menu/icons')\r\n .pipe(\r\n map((response: { data: string[] }) => response.data),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Find menu item by ID (including nested items)\r\n */\r\n findMenuItemById(id: string, items: ICoreSyme[] = this.menuListSubject.value): ICoreSyme | null {\r\n // Local search in current menu list\r\n for (const item of items) {\r\n if (item._id === id) {\r\n return item;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Get parent menu items for dropdown selection\r\n */\r\n getParentMenuItems(excludeId?: string): ICoreSyme[] {\r\n const allItems: ICoreSyme[] = [];\r\n\r\n const flattenItems = (items: ICoreSyme[], level: number = 0) => {\r\n items.forEach(item => {\r\n if (item._id !== excludeId) {\r\n allItems.push({\r\n ...item,\r\n syme_title: ' '.repeat(level) + item.syme_title\r\n });\r\n }\r\n });\r\n };\r\n\r\n flattenItems(this.menuListSubject.value);\r\n return allItems;\r\n }\r\n\r\n /**\r\n * Refresh menu list from server\r\n */\r\n private refreshMenuList(): void {\r\n // Create a default body for getting all menu items\r\n const defaultBody: MMenuListPayload = {\r\n pageIndex: 1,\r\n pageSize: 10\r\n };\r\n this.getMenuList(defaultBody).subscribe({\r\n next: () => {\r\n console.log('Menu list refreshed successfully');\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing menu list:', error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle errors\r\n */\r\n private handleError(error: unknown): Observable<never> {\r\n let errorMessage = 'An error occurred';\r\n\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n } else if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n\r\n console.error('Menu Management Service Error:', errorMessage);\r\n return throwError(() => new Error(errorMessage));\r\n }\r\n} ","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Validators, ReactiveFormsModule, NonNullableFormBuilder, FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ICoreSyme, MMenuListPayload } from 'cloud-ide-lms-model';\nimport { MenuManagementService } from '../../services/menu-management.service';\nimport { CideEleButtonComponent, CideEleDataGridComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\n\n\n\n@Component({\n selector: 'cide-core-app-menu-list',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n CideInputComponent,\n CideSelectComponent,\n CideTextareaComponent,\n CideIconComponent,\n CideEleDropdownComponent\n ],\n templateUrl: './menu-list.component.html',\n styleUrls: []\n})\nexport class MenuListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private menuService = inject(MenuManagementService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n menuDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext<ICoreSyme>>>('menuDetailsRendererTemplate');\n menuTypeRendererTemplate = viewChild.required<TemplateRef<TemplateContext<ICoreSyme>>>('menuTypeRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext<ICoreSyme>>>('actionsDropdownRendererTemplate');\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n menuItems = signal<ICoreSyme[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Modern reactive forms with signals\n selectedParentItem = signal<ICoreSyme | null>(null);\n\n // Retrieved menu item data\n retrievedMenuItem = signal<ICoreSyme | null>(null);\n\n // Edit mode flag\n isEditMode = signal(false);\n\n // Drag order management\n originalOrder = signal<ICoreSyme[]>([]);\n hasOrderChanged = signal(false);\n \n\n\n // Server-side pagination state\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n\n\n\n // Modern reactive form with typed controls\n quickAddForm = this.fb.group({\n syme_title: this.fb.control('', [Validators.required, Validators.minLength(2), Validators.maxLength(100)]),\n syme_desc: this.fb.control('', [Validators.maxLength(255)]),\n syme_type: this.fb.control<'module' | 'section' | 'menu' | 'title'>('module', [Validators.required]),\n syme_id_syme: this.fb.control(''),\n syme_path: this.fb.control('', [Validators.maxLength(255)]),\n syme_icon: this.fb.control('', [Validators.maxLength(50)]),\n syme_link: this.fb.control('', [Validators.maxLength(255)]),\n syme_isactive: this.fb.control(true, [Validators.required]),\n syme_order_by: this.fb.control(1, [Validators.required, Validators.min(1)])\n });\n\n\n\n // Menu type options for quick add - dynamic based on parent selection\n menuTypeOptions = computed(() => {\n if (this.selectedParentItem()) {\n // When parent is selected, allow creating child types only\n return [\n { value: 'section', label: 'Section' },\n { value: 'menu', label: 'Menu Item' },\n { value: 'title', label: 'Title' }\n ];\n } else {\n // When no parent is selected, only allow module creation\n return [\n { value: 'module', label: 'Module' }\n ];\n }\n });\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ICoreSyme>>({\n id: 'menu-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'details',\n header: 'Menu Item',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'menuDetailsRenderer'\n },\n {\n key: 'syme_type',\n header: 'Type',\n type: 'custom',\n width: '120px',\n truncate: false,\n align: 'center',\n renderer: 'menuTypeRenderer'\n },\n {\n key: 'syme_path',\n header: 'Path',\n type: 'text',\n width: '200px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'syme_order_by',\n header: 'Order',\n type: 'order',\n width: '80px',\n truncate: false,\n align: 'center'\n },\n {\n key: 'syme_isactive',\n header: 'Status',\n type: 'status',\n width: '100px',\n truncate: false,\n align: 'center',\n statusConfig: {\n activeValue: true,\n activeLabel: 'Active',\n inactiveLabel: 'Inactive',\n activeClass: 'tw-bg-green-100 tw-text-green-800',\n inactiveClass: 'tw-bg-red-100 tw-text-red-800'\n }\n },\n\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '60px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n\n search: {\n enabled: true,\n placeholder: 'Search menu items...',\n searchableColumns: ['syme_title', 'syme_desc', 'syme_path'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n\n dragDrop: {\n enabled: true,\n orderField: 'syme_order_by',\n dragClass: 'tw-opacity-50 tw-bg-blue-50',\n dropClass: 'tw-bg-green-50'\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none',\n onRefresh: 'onMenuItemRefresh',\n onRowReorder: 'onRowReorder',\n tree: {\n enabled: true,\n primaryKey: '_id',\n foreignKey: 'syme_id_syme',\n childrenKey: 'children',\n levelKey: 'level',\n expandedKey: 'isExpanded',\n hasChildrenKey: 'hasChildren'\n }\n });\n\n // Template renderers using Angular best practices\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext<ICoreSyme>>> => ({\n menuDetailsRenderer: this.menuDetailsRendererTemplate(),\n menuTypeRenderer: this.menuTypeRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\n\n /**\n * Get template renderers for data grid\n * These templates are available for enhanced data grid components\n */\n getTemplateRenderers(): Record<string, TemplateRef<TemplateContext<ICoreSyme>>> {\n return this.templateRenderers();\n }\n\n // Mixed renderers (templates + string functions)\n customRenderers = computed(() => ({\n ...this.templateRenderers()\n }));\n\n /**\n * Get custom renderers adapted for current data grid compatibility\n * Uses template-based renderers converted to string functions\n */\n getCustomRenderers(): Record<string, (value: unknown, row: ICoreSyme) => string> {\n // This method is no longer needed since we're using templates directly\n return {};\n }\n\n // Action handlers for grid actions\n actionHandlers = {\n onEditMenuItem: (row: ICoreSyme) => this.editMenuItem(row._id || ''),\n onToggleMenuItem: (row: ICoreSyme) => this.toggleItemStatus(row._id || ''),\n onDeleteMenuItem: (row: ICoreSyme) => this.deleteMenuItem(row._id || ''),\n onMenuItemRowClick: (row: ICoreSyme) => this.onMenuItemRowClick(row),\n onMenuItemRefresh: () => this.onMenuItemRefresh(),\n onAddChild: (row: ICoreSyme) => this.onAddChild(row),\n resetOrder: () => this.resetDragOrder(),\n saveOrder: () => this.saveMenuOrder()\n };\n\n\n\n hasSelection = computed(() => this.selectedItems().length > 0);\n\n // Pagination computed properties\n totalPages = computed(() => Math.ceil(this.totalItems() / this.pageSize()));\n hasNextPage = computed(() => this.currentPage() < this.totalPages());\n hasPreviousPage = computed(() => this.currentPage() > 1);\n\n // Modern constructor with effects for initialization\n constructor() {\n // Initialize component once on construction\n this.initializeComponent();\n\n // Cleanup effect for event listeners\n this.destroyRef.onDestroy(() => {\n this.cleanupEventListeners();\n });\n }\n\n /**\n * Initialize component with modern patterns\n */\n private initializeComponent(): void {\n console.log('MenuListComponent initialized with modern Angular patterns');\n console.log('Grid config initial:', this.gridConfig());\n this.loadMenuItems();\n this.setupEventListeners();\n this.exposeGlobalFunctions();\n }\n\n /**\n * Setup event listeners for dropdown interactions\n */\n private setupEventListeners(): void {\n document.addEventListener('click', this.handleClickOutside.bind(this));\n document.addEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Cleanup event listeners\n */\n private cleanupEventListeners(): void {\n document.removeEventListener('click', this.handleClickOutside.bind(this));\n document.removeEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Expose global functions for dropdown interactions\n */\n private exposeGlobalFunctions(): void {\n if (typeof window !== 'undefined') {\n (window as unknown as { toggleDropdown: (id: string) => void }).toggleDropdown = this.toggleDropdown.bind(this);\n (window as unknown as { handleMenuAction: (action: string, id: string) => void }).handleMenuAction = this.handleMenuAction.bind(this);\n\n }\n }\n\n /**\n * Get default type based on parent selection (computed for reactivity)\n */\n private getDefaultType = computed(() => {\n return this.selectedParentItem() ? 'section' : 'module';\n });\n\n /**\n * Load menu items from service\n */\n loadMenuItems(): void {\n console.log('🚀 MenuListComponent.loadMenuItems() called');\n this.loading.set(true);\n this.error.set(null);\n\n console.log('📞 Calling menuService.getMenuList()...');\n const requestBody: MMenuListPayload = {\n total: this.totalItems(),\n pageIndex: this.currentPage(),\n pageSize: this.pageSize(),\n query: this.searchTerm(),\n sort: { order: 'asc', key: 'syme_order_by' }\n };\n console.log('📋 Request body:', requestBody);\n\n // Check if service exists\n if (!this.menuService) {\n console.error('❌ MenuService is not available');\n this.error.set('Menu service is not available');\n this.loading.set(false);\n return;\n }\n\n this.menuService.getMenuList(requestBody)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('📥 MenuListComponent received response:', response);\n if (response?.success) {\n console.log('✅ Response successful, setting menu items:', response.data);\n console.log('📊 Total items:', response.total);\n const menuData = response?.data || [];\n this.menuItems.set(menuData);\n this.totalItems.set(response.total || 0);\n\n // Save original order for drag reset functionality\n if (this.originalOrder().length === 0) {\n this.originalOrder.set([...menuData]);\n console.log('💾 Original order saved for drag reset');\n }\n\n this.updateGridData(menuData);\n } else {\n console.error('❌ Response was not successful:', response);\n this.error.set('Failed to load menu items');\n }\n },\n error: (err) => {\n console.error('❌ MenuListComponent error:', err);\n this.error.set(err.message || 'An error occurred while loading menu items');\n },\n complete: () => {\n console.log('MenuListComponent loadMenuItems completed');\n this.loading.set(false);\n }\n });\n }\n\n\n\n\n\n\n\n /**\n * Handle click outside dropdown\n */\n private handleClickOutside(event: Event): void {\n const target = event.target as HTMLElement;\n\n // Check if click is outside any dropdown\n if (!target?.closest('[data-dropdown]') && !target?.closest('[data-action=\"more-actions\"]')) {\n // Close all dropdowns\n document.querySelectorAll('[data-dropdown]').forEach((el: Element) => {\n const dropdown = el as HTMLElement;\n dropdown.classList.add('tw-hidden');\n });\n\n // Reset all button states\n document.querySelectorAll('[data-action=\"more-actions\"]').forEach((el: Element) => {\n const button = el as HTMLElement;\n button.setAttribute('aria-expanded', 'false');\n });\n }\n }\n\n /**\n * Handle dropdown action clicks\n */\n private handleDropdownAction(event: Event): void {\n const target = event.target as HTMLElement;\n const actionButton = target.closest('[data-action]') as HTMLElement;\n\n if (actionButton) {\n const action = actionButton.getAttribute('data-action');\n const itemId = actionButton.getAttribute('data-item-id');\n\n if (action && itemId) {\n event.preventDefault();\n event.stopPropagation();\n\n // Close the dropdown\n const dropdown = actionButton.closest('[data-dropdown]') as HTMLElement;\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n // Handle the action\n switch (action) {\n case 'edit':\n this.editMenuItem(itemId);\n break;\n case 'toggle':\n this.toggleItemStatus(itemId);\n break;\n case 'delete':\n this.deleteMenuItem(itemId);\n break;\n }\n }\n }\n }\n\n\n\n \n\n /**\n * Update grid data\n */\n private updateGridData(menuItems: ICoreSyme[]): void {\n console.log('🔄 updateGridData called with:', menuItems);\n console.log('🔄 Number of items:', menuItems.length);\n \n this.gridConfig.update(config => {\n const newConfig = {\n ...config,\n data: menuItems\n };\n console.log('⚙️ Updated grid config with menu items');\n return newConfig;\n });\n \n console.log('✅ Grid config after update');\n }\n\n\n\n\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ICoreSyme>): void {\n console.log('onGridEvent', event);\n switch (event.type) {\n case 'search':\n this.searchTerm.set(event.data as string);\n this.currentPage.set(1);\n this.loadMenuItems();\n break;\n case 'pageChange': {\n // Handle pagination from data grid\n const pageData = event.data as { page: number; pageSize: number };\n if (pageData) {\n this.currentPage.set(pageData.page);\n this.pageSize.set(pageData.pageSize);\n this.loadMenuItems();\n } else {\n // Handle simple page number\n const page = event.data as number;\n if (page) {\n this.currentPage.set(page);\n this.loadMenuItems();\n }\n }\n break;\n }\n case 'refresh':\n this.onMenuItemRefresh();\n break;\n case 'rowClick':\n this.onMenuItemRowClick(event.data as ICoreSyme);\n break;\n case 'action':\n if (event.action?.key === 'edit') {\n this.editMenuItem(event.data as string);\n } else if (event.action?.key === 'toggle') {\n this.toggleItemStatus(event.data as string);\n } else if (event.action?.key === 'delete') {\n this.deleteMenuItem(event.data as string);\n }\n break;\n case 'rowReorder': {\n this.onRowReorder(event.data as { sourceIndex: number; targetIndex: number; newOrder: ICoreSyme[] });\n break;\n }\n }\n }\n\n /**\n * Handle menu item search\n */\n\n\n\n\n /**\n * Handle menu item refresh\n */\n onMenuItemRefresh(): void {\n this.loadMenuItems();\n }\n\n /**\n * Handle menu item row click\n */\n onMenuItemRowClick(menuItem: ICoreSyme): void {\n // Navigate to edit page or show details\n this.editMenuItem(menuItem._id || '');\n }\n\n /**\n * Handle row reorder event\n */\n onRowReorder(data: { sourceIndex: number; targetIndex: number; newOrder: ICoreSyme[] }) {\n console.log('🔄 Row reorder event:', data);\n\n // Save original order if not already saved\n if (this.originalOrder().length === 0) {\n this.originalOrder.set([...this.menuItems()]);\n }\n\n // Update the displayed data with new order\n this.menuItems.set(data.newOrder);\n\n // Mark that order has changed\n this.hasOrderChanged.set(true);\n\n // Update grid data\n this.updateGridDataAfterReorder();\n console.log('Updated menuItems:', this.menuItems());\n }\n\n /**\n * Update grid data after reordering\n */\n private updateGridDataAfterReorder() {\n const currentConfig = this.gridConfig();\n this.gridConfig.set({\n ...currentConfig,\n data: this.menuItems()\n });\n }\n\n /**\n * Save menu order\n */\n saveMenuOrder() {\n console.log('💾 Saving menu order...');\n // Here you would typically call the API to save the new order\n // For now, we'll just update the original order and reset the change flag\n this.originalOrder.set([...this.menuItems()]);\n this.hasOrderChanged.set(false);\n console.log('✅ Menu order saved successfully');\n }\n\n /**\n * Reset drag order to original state\n */\n resetDragOrder() {\n console.log('🔄 Resetting drag order to original state');\n\n // Restore the original order\n const originalItems = this.originalOrder();\n if (originalItems.length > 0) {\n this.menuItems.set([...originalItems]);\n this.updateGridDataAfterReorder();\n }\n\n // Reset the change flag\n this.hasOrderChanged.set(false);\n\n console.log('✅ Drag order reset successfully');\n }\n\n /**\n * Check if order has changed\n */\n hasOrderChanges(): boolean {\n return this.hasOrderChanged();\n }\n\n /**\n * Toggle item selection\n */\n toggleItemSelection(itemId: string): void {\n const current = this.selectedItems();\n const index = current.indexOf(itemId);\n\n if (index > -1) {\n current.splice(index, 1);\n } else {\n current.push(itemId);\n }\n\n this.selectedItems.set([...current]);\n }\n\n /**\n * Select all items on current page\n */\n selectAllOnPage(): void {\n // This method is no longer needed with data grid\n // Data grid handles selection internally\n }\n\n /**\n * Clear all selections\n */\n clearSelection(): void {\n this.selectedItems.set([]);\n }\n\n /**\n * Navigate to edit menu form\n */\n editMenuItem(itemId: string): void {\n console.log('🔵 editMenuItem called with:', itemId);\n // Set edit mode and get the menu item by ID\n this.isEditMode.set(true);\n this.getMenuItemById(itemId);\n }\n\n /**\n * Get menu item by ID using the API\n * GET ${coreRoutesUrl?.menu}/byId/:query - payload: MCoreSymeGetByIdPayload, response: menuByIdControllerResponse\n */\n getMenuItemById(itemId: string): void {\n console.log('🔵 getMenuItemById called with:', itemId);\n this.loading.set(true);\n\n this.menuService.getMenuItemById(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Menu item retrieved successfully:', response.data);\n // Store the retrieved menu item data in the signal\n // Handle both single item and array responses\n let menuItem: ICoreSyme | null = null;\n menuItem = response.data || null;\n\n this.retrievedMenuItem.set(menuItem);\n\n // If in edit mode, populate the form with the retrieved data\n if (this.isEditMode() && menuItem) {\n this.populateFormForEdit(menuItem);\n }\n } else {\n this.error.set('Failed to retrieve menu item');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while retrieving the menu item');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Populate form with menu item data for editing\n */\n populateFormForEdit(menuItem: ICoreSyme): void {\n console.log('🔵 populateFormForEdit called with:', menuItem);\n\n // Populate the form with the menu item data\n this.quickAddForm.patchValue({\n syme_title: menuItem.syme_title || '',\n syme_desc: menuItem.syme_desc || '',\n syme_type: (menuItem.syme_type as 'module' | 'section' | 'menu' | 'title') || 'module',\n syme_id_syme: menuItem.syme_id_syme || '',\n syme_path: menuItem.syme_path || '',\n syme_icon: menuItem.syme_icon || '',\n syme_link: menuItem.syme_link || '',\n syme_isactive: menuItem.syme_isactive ?? true,\n syme_order_by: menuItem.syme_order_by || 1\n });\n\n // Set the selected parent if this item has a parent\n if (menuItem.syme_id_syme) {\n // Find the parent item in the current menu items\n const parentItem = this.menuItems().find(item => item._id === menuItem.syme_id_syme);\n if (parentItem) {\n this.selectedParentItem.set(parentItem);\n }\n }\n\n console.log('✅ Form populated for editing:', this.quickAddForm.value);\n }\n\n /**\n * Delete menu item\n */\n deleteMenuItem(itemId: string): void {\n console.log('🔵 deleteMenuItem called with:', itemId);\n if (confirm('Are you sure you want to delete this menu item?')) {\n this.loading.set(true);\n\n this.menuService.deleteMenuItem(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadMenuItems(); // Reload the list\n } else {\n this.error.set('Failed to delete menu item');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while deleting the menu item');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n }\n\n /**\n * Delete multiple selected items\n */\n deleteSelectedItems(): void {\n const selected = this.selectedItems();\n\n if (selected.length === 0) {\n return;\n }\n\n if (confirm(`Are you sure you want to delete ${selected.length} selected menu item(s)?`)) {\n this.loading.set(true);\n\n // Use bulk delete service method\n this.menuService.deleteMultipleMenuItems(selected)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Multiple menu items deleted successfully');\n this.loadMenuItems(); // Reload the list\n this.clearSelection();\n } else {\n this.error.set('Failed to delete some menu items');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while deleting menu items');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n }\n\n /**\n * Toggle menu item status\n */\n toggleItemStatus(itemId: string): void {\n console.log('🔵 toggleItemStatus called with:', itemId);\n this.loading.set(true);\n\n this.menuService.toggleMenuItemStatus(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadMenuItems(); // Reload the list\n } else {\n this.error.set('Failed to toggle menu item status');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while toggling status');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Update search term\n */\n onSearchChange(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.searchTerm.set(value);\n }\n\n /**\n * Navigate to specific page\n */\n goToPage(): void {\n // Data grid handles pagination internally\n }\n\n /**\n * Get menu type display name\n */\n getMenuTypeDisplay(type: string): string {\n const typeMap: Record<string, string> = {\n 'module': 'Module',\n 'section': 'Section',\n 'menu': 'Menu Item',\n 'title': 'Title'\n };\n return typeMap[type] || type;\n }\n\n /**\n * Get status display\n */\n getStatusDisplay(isActive: boolean): string {\n return isActive ? 'Active' : 'Inactive';\n }\n\n /**\n * Get status class for styling\n */\n getStatusClass(isActive: boolean): string {\n return isActive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800';\n }\n\n /**\n * Get menu type class for styling\n */\n getMenuTypeClass(type: string): string {\n switch (type) {\n case 'module': return 'tw-bg-purple-100 tw-text-purple-800';\n case 'section': return 'tw-bg-blue-100 tw-text-blue-800';\n case 'menu': return 'tw-bg-green-100 tw-text-green-800';\n case 'title': return 'tw-bg-gray-100 tw-text-gray-800';\n default: return 'tw-bg-gray-100 tw-text-gray-800';\n }\n }\n\n\n\n /**\n * Check if item is selected\n */\n isItemSelected(itemId: string): boolean {\n return this.selectedItems().includes(itemId);\n }\n\n /**\n * Check if all items on current page are selected\n */\n isAllSelectedOnPage(): boolean {\n // This method is no longer needed with data grid\n // Data grid handles selection internally\n return false;\n }\n\n /**\n * Get pagination range\n */\n getPaginationRange(): number[] {\n // This method is no longer needed with data grid\n // Data grid handles pagination internally\n return [];\n }\n\n\n\n /**\n * Track by function for ngFor\n */\n trackByItemId(index: number, item: ICoreSyme): string {\n return item._id || '';\n }\n\n\n\n /**\n * Quick add or update menu item using reactive form\n */\n quickAddMenuItem() {\n if (this.quickAddForm.invalid) return;\n\n const formValue = this.quickAddForm.value;\n\n // Prepare the menu item using ICoreSyme model structure\n const menuItem: Partial<ICoreSyme> = {\n _id: this.retrievedMenuItem()?._id || '',\n syme_title: formValue.syme_title,\n syme_desc: formValue.syme_desc || '',\n syme_type: formValue.syme_type,\n syme_id_syme: formValue.syme_id_syme || undefined,\n syme_path: formValue.syme_path || '',\n syme_icon: formValue.syme_icon || '',\n syme_link: formValue.syme_link || '',\n syme_order_by: formValue.syme_order_by,\n syme_isactive: formValue.syme_isactive\n };\n\n // Check if we're in edit mode\n if (this.isEditMode() && this.retrievedMenuItem()) {\n // Update existing menu item\n const itemId = this.retrievedMenuItem()?._id;\n if (itemId) {\n console.log('🔵 Updating menu item:', itemId);\n this.menuService.updateMenuItem(itemId, menuItem).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Menu item updated successfully');\n // Reset form and exit edit mode\n this.resetQuickAddForm();\n this.isEditMode.set(false);\n this.retrievedMenuItem.set(null);\n // Reload menu items\n this.loadMenuItems();\n }\n },\n error: () => {\n this.error.set('Failed to update menu item');\n }\n });\n }\n } else {\n // Create new menu item\n console.log('🔵 Creating new menu item');\n this.menuService.createMenuItem(menuItem).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Menu item created successfully');\n // Reset reactive form with default values\n this.resetQuickAddForm();\n // Reload menu items\n this.loadMenuItems();\n }\n },\n error: () => {\n this.error.set('Failed to create menu item');\n }\n });\n }\n }\n\n /**\n * Reset the quick add form to default values\n */\n resetQuickAddForm(): void {\n // Clear selected parent to return to module creation mode\n this.selectedParentItem.set(null);\n\n // Clear edit mode and retrieved item\n this.isEditMode.set(false);\n this.retrievedMenuItem.set(null);\n\n this.quickAddForm.reset({\n syme_title: '',\n syme_desc: '',\n syme_type: 'module', // Always default to module on reset\n syme_id_syme: '',\n syme_path: '',\n syme_icon: '',\n syme_link: '',\n syme_isactive: true,\n syme_order_by: 1\n });\n }\n\n /**\n * Handle add child button click from row action\n */\n onAddChild(parentItem: ICoreSyme): void {\n console.log('🔵 onAddChild called with:', parentItem);\n console.log('🔵 Parent title:', parentItem.syme_title);\n\n // Clear edit mode and retrieved item when adding a child\n this.isEditMode.set(false);\n this.retrievedMenuItem.set(null);\n\n // Set the selected parent item first using signal\n this.selectedParentItem.set(parentItem);\n console.log('🔵 selectedParentItem set to:', this.selectedParentItem());\n\n // Update form with parent context (don't call resetQuickAddForm as it clears the parent)\n this.quickAddForm.patchValue({\n syme_title: '',\n syme_desc: '',\n syme_type: 'section', // Default to section for child items\n syme_id_syme: parentItem._id,\n syme_path: '',\n syme_icon: '',\n syme_link: '',\n syme_isactive: true,\n syme_order_by: 1\n });\n\n console.log('🔵 Form updated, parent should be visible:', this.selectedParentItem()?.syme_title);\n }\n\n /**\n * Handle row reorder event\n */\n\n\n /**\n * Toggle dropdown visibility\n */\n toggleDropdown(itemId: string) {\n // Close all other dropdowns first\n document.querySelectorAll('.dropdown-menu').forEach(menu => {\n if (menu.getAttribute('data-dropdown') !== itemId) {\n menu.classList.add('tw-hidden');\n }\n });\n\n // Toggle the clicked dropdown\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.toggle('tw-hidden');\n }\n }\n\n /**\n * Handle menu action clicks\n */\n handleMenuAction(action: string, itemId: string) {\n const item = this.menuItems().find(item => item._id === itemId);\n if (!item) return;\n\n // Close the dropdown\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n // Handle the action\n switch (action) {\n case 'addChild':\n this.addChildMenuItem(itemId, item);\n break;\n case 'edit':\n this.editMenuItem(itemId);\n break;\n case 'toggle':\n this.toggleItemStatus(itemId);\n break;\n case 'delete':\n this.deleteMenuItem(itemId);\n break;\n }\n }\n\n /**\n * Add child menu item - sets parent and scrolls to form\n */\n addChildMenuItem(parentId: string, parentItem: ICoreSyme) {\n // Clear edit mode and retrieved item when adding a child\n this.isEditMode.set(false);\n this.retrievedMenuItem.set(null);\n\n // Set the parent ID in the form\n this.quickAddForm.patchValue({\n syme_id_syme: parentId\n });\n\n // Update UI to show which parent is selected\n this.selectedParentItem.set(parentItem);\n\n // Scroll to the form\n const formElement = document.querySelector('.tw-px-6.tw-py-4.tw-border-b');\n if (formElement) {\n formElement.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n\n // Focus on the title input\n setTimeout(() => {\n const titleInput = document.getElementById('syme_title');\n if (titleInput) {\n titleInput.focus();\n }\n }, 300);\n }\n\n /**\n * Clear selected parent\n */\n clearSelectedParent() {\n this.selectedParentItem.set(null);\n this.quickAddForm.patchValue({\n syme_id_syme: '',\n syme_type: 'module' // Reset to module when no parent\n });\n }\n\n /**\n * Helper methods for templates\n */\n getMenuTypeLabel(type: string): string {\n const typeMap: { [key: string]: string } = {\n 'module': 'Module',\n 'section': 'Section',\n 'menu': 'Menu Item',\n 'title': 'Title'\n };\n return typeMap[type] || 'Unknown';\n }\n\n\n\n\n /**\n * Generate dropdown items for menu actions\n */\n getDropdownItems(row: ICoreSyme): DropdownItem[] {\n return [\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'addChild',\n label: 'Add Child',\n icon: 'add',\n iconColor: 'tw-text-blue-400',\n textColor: 'tw-text-blue-600',\n hoverBgColor: 'hover:tw-bg-blue-50'\n },\n {\n id: 'toggle',\n label: row.syme_isactive ? 'Deactivate' : 'Activate',\n icon: 'power_settings_new',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n iconColor: 'tw-text-red-400',\n textColor: 'tw-text-red-600',\n hoverBgColor: 'hover:tw-bg-red-50'\n }\n ];\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, row: ICoreSyme): void {\n console.log('🔵 onDropdownItemClick called with:', item, row);\n\n switch (item.id) {\n case 'edit':\n console.log('🔵 Calling editMenuItem with:', row._id);\n this.editMenuItem(row._id || '');\n break;\n case 'addChild':\n console.log('🔵 Calling onAddChild with:', row);\n this.onAddChild(row);\n break;\n case 'toggle':\n console.log('🔵 Calling toggleItemStatus with:', row._id);\n this.toggleItemStatus(row._id || '');\n break;\n case 'delete':\n console.log('🔵 Calling deleteMenuItem with:', row._id);\n this.deleteMenuItem(row._id || '');\n break;\n default:\n console.log('🔵 Unknown action:', item.id);\n }\n\n // Close all dropdowns after action\n this.closeAllDropdowns();\n }\n\n /**\n * Close all dropdowns\n */\n private closeAllDropdowns(): void {\n // Close all dropdowns by clicking outside\n const event = new MouseEvent('click', { bubbles: true });\n document.dispatchEvent(event);\n }\n\n\n\n /**\n * Test method to load sample data for debugging\n */\n loadTestData(): void {\n console.log('🧪 Loading test data manually...');\n const testData: ICoreSyme[] = [\n {\n _id: 'test-1',\n syme_title: 'Dashboard',\n syme_desc: 'Main dashboard module',\n syme_type: 'module' as 'module' | 'section' | 'menu' | 'title',\n syme_path: '/dashboard',\n syme_icon: 'dashboard',\n syme_link: '',\n syme_isactive: true,\n syme_order_by: 1,\n syme_id_syme: ''\n },\n {\n _id: 'test-2',\n syme_title: 'User Management',\n syme_desc: 'Manage users and permissions',\n syme_type: 'section' as 'module' | 'section' | 'menu' | 'title',\n syme_path: '/users',\n syme_icon: 'people',\n syme_link: '',\n syme_isactive: true,\n syme_order_by: 1,\n syme_id_syme: 'test-1'\n },\n {\n _id: 'test-3',\n syme_title: 'Settings',\n syme_desc: 'Application settings',\n syme_type: 'menu' as 'module' | 'section' | 'menu' | 'title',\n syme_path: '/settings',\n syme_icon: 'settings',\n syme_link: '/settings',\n syme_isactive: true,\n syme_order_by: 2,\n syme_id_syme: 'test-1'\n }\n ];\n\n this.loading.set(false);\n this.error.set(null);\n this.menuItems.set(testData);\n this.totalItems.set(testData.length);\n\n\n\n this.updateGridData(testData);\n console.log('✅ Test data loaded successfully');\n }\n\n} ","<!-- Menu List Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Quick Add Form Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Menu Item' : 'Quick Add Menu Item' }}</h6>\n </div>\n @if (selectedParentItem()) {\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-2 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child under:' }}</span>\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ selectedParentItem()?.syme_title }}</span>\n </div>\n <button \n cideEleButton \n variant=\"ghost\" \n size=\"xs\" \n type=\"button\" \n (click)=\"clearSelectedParent()\" \n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\n <svg class=\"tw-w-4 tw-h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"/>\n </svg>\n </button>\n </div>\n }\n </div>\n \n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddMenuItem()\">\n <!-- First Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\n <!-- Menu Title -->\n <div>\n <cide-ele-input \n id=\"syme_title\" \n label=\"Title\" \n formControlName=\"syme_title\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Menu Type -->\n <div>\n <cide-ele-select \n label=\"Type*\" \n [options]=\"menuTypeOptions()\" \n formControlName=\"syme_type\"\n placeholder=\"Select type\"\n size=\"sm\">\n </cide-ele-select>\n </div>\n \n <!-- Icon -->\n <div>\n <cide-ele-input \n id=\"quickIcon\" \n type=\"text\"\n label=\"Icon\" \n formControlName=\"syme_icon\"\n placeholder=\"Icon name\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Active Status -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <cide-ele-input \n id=\"quickIsActive\"\n type=\"checkbox\"\n label=\"Active\"\n formControlName=\"syme_isactive\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n \n <!-- Second Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\n <!-- Description -->\n <div>\n <cide-ele-textarea \n id=\"syme_desc\" \n label=\"Description\" \n formControlName=\"syme_desc\"\n placeholder=\"Menu description\"\n rows=\"2\"\n size=\"sm\">\n </cide-ele-textarea>\n </div>\n \n <!-- Path -->\n <div>\n <cide-ele-input \n id=\"quickPath\" \n type=\"text\"\n label=\"Path\" \n formControlName=\"syme_path\"\n placeholder=\"/path/to/route\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Link -->\n <div>\n <cide-ele-input \n id=\"quickLink\" \n type=\"text\"\n label=\"Link\" \n formControlName=\"syme_link\"\n placeholder=\"External link\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <div class=\"tw-flex tw-space-x-2\">\n <button \n cideEleButton \n variant=\"primary\" \n size=\"sm\" \n type=\"submit\"\n [disabled]=\"quickAddForm.invalid\"\n class=\"tw-px-2 tw-py-1 tw-w-20\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n {{ isEditMode() ? 'Update' : 'Add' }}\n </button>\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\"\n (click)=\"resetQuickAddForm()\"\n class=\"tw-px-2 tw-py-1 tw-w-16\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\n Reset\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n\n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">menu</cide-ele-icon>\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Menu Management</h5>\n </div>\n\n <!-- Actions -->\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Actions can be added here if needed -->\n </div>\n </div>\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n\n <!-- Debug Information: Uncomment for development -->\n <!--\n <div class=\"tw-p-2 tw-bg-yellow-100 tw-text-xs tw-border-b tw-flex tw-justify-between tw-items-center\">\n <span>Debug: Loading: {{ loading() }} | Items Count: {{ menuItems().length }} | Total: {{ totalItems() }} | Error: {{ error() }}</span>\n <button cideEleButton variant=\"outline\" size=\"xs\" (click)=\"loadTestData()\" class=\"tw-ml-2\">\n Load Test Data\n </button>\n </div>\n -->\n \n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n \n <cide-ele-data-grid \n [config]=\"gridConfig()\" \n [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\"\n [serverSidePagination]=\"true\" \n [totalServerItems]=\"totalItems()\" \n [currentServerPage]=\"currentPage()\"\n [currentServerPageSize]=\"pageSize()\" \n [dragDropEnabled]=\"true\" \n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n\n </div>\n </div>\n\n</div>\n\n<!-- \n Angular Template References for Grid Renderers (Best Practice)\n \n These ng-template elements represent the Angular best practice for custom rendering.\n They provide:\n - Type safety with template context\n - Component lifecycle integration\n - Change detection optimization\n - Proper event handling\n - Accessibility features\n \n Note: Current data grid uses string renderers for compatibility.\n Templates are maintained for future component enhancement.\n-->\n\n\n\n<!-- Menu Details Renderer Template -->\n<ng-template #menuDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\n <!-- Menu Icon -->\n <div class=\"tw-flex-shrink-0\">\n <cide-ele-icon \n class=\"tw-text-gray-400\" \n size=\"xs\">\n {{ row.syme_icon || 'folder_open' }}\n </cide-ele-icon>\n </div>\n \n <!-- Menu Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-text-xs tw-font-medium tw-text-gray-900 tw-truncate\" \n [title]=\"row.syme_title\">\n {{ row.syme_title || 'Untitled' }}\n </div>\n @if (row.syme_desc) {\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \n [title]=\"row.syme_desc\">\n {{ row.syme_desc }}\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- Menu Type Renderer Template -->\n<ng-template #menuTypeRendererTemplate let-row=\"row\" let-value=\"value\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\n [ngClass]=\"getMenuTypeClass(row.syme_type)\">\n {{ getMenuTypeLabel(row.syme_type) }}\n </span>\n</ng-template>\n\n<!-- Actions Dropdown Renderer Template -->\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown \n [items]=\"getDropdownItems(row)\"\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template>\n\n","import { MMenu } from \"cloud-ide-lms-model\";\r\n\r\n\r\n/**\r\n * Menu Reorder Request\r\n * Used for reordering menu items\r\n */\r\nexport interface MenuReorderRequest {\r\n items: MMenu[];\r\n}\r\n\r\n/**\r\n * Menu Type Options\r\n * Available menu types for selection\r\n */\r\nexport const MENU_TYPES = [\r\n { value: 'module', label: 'Module' },\r\n { value: 'section', label: 'Section' },\r\n { value: 'menu', label: 'Menu Item' },\r\n { value: 'title', label: 'Title' }\r\n] as const;\r\n\r\n/**\r\n * Menu Type\r\n * Type definition for menu types\r\n */\r\nexport type MenuType = 'menu' | 'section' | 'title' | 'module';","/*\r\n * Menu Management Module Exports\r\n */\r\n\r\n// Components\r\nexport * from './components/menu-list/menu-list.component';\r\n\r\n// Services\r\nexport * from './services/menu-management.service';\r\n\r\n// Interfaces\r\nexport * from './interfaces/menu-item.interface'; ","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError, BehaviorSubject } from 'rxjs';\r\nimport { catchError, tap } from 'rxjs/operators';\r\nimport { \r\n cidePath, \r\n coreRoutesUrl, \r\n generateStringFromObject, \r\n hostManagerRoutesUrl, \r\n ICoreSydept, \r\n MDepartmentDeletePayload, \r\n MDepartmentGetByIdPayload, \r\n departmentByIdControllerResponse, \r\n departmentDeleteControllerResponse, \r\n departmentControllerResponse,\r\n MDepartment,\r\n MDepartmentToggleStatusPayload,\r\n departmentToggleStatusControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DepartmentManagementService {\r\n private departmentListSubject = new BehaviorSubject<ICoreSydept[]>([]);\r\n public departmentList$ = this.departmentListSubject.asObservable();\r\n\r\n constructor(private http: HttpClient) {\r\n console.log('DepartmentManagementService initialized - using real API');\r\n }\r\n\r\n /**\r\n * Get department list from API\r\n */\r\n getDepartmentList(body: MDepartment): Observable<departmentControllerResponse> {\r\n const query = generateStringFromObject(body);\r\n return this.http?.get<departmentControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, query]))\r\n .pipe(\r\n tap((response: departmentControllerResponse) => {\r\n if (response?.success) {\r\n this.departmentListSubject.next(response?.data || []);\r\n }\r\n }),\r\n catchError(error => {\r\n console.error('DepartmentManagementService API error:', error);\r\n return this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Get department list from cache (if available)\r\n */\r\n getDepartmentListFromCache(): ICoreSydept[] {\r\n return this.departmentListSubject.value;\r\n }\r\n\r\n /**\r\n * Create new department\r\n * POST ${coreRoutesUrl?.department} - payload: MDepartmentInsertUpdatePayload, response: departmentInsertUpdateControllerResponse\r\n */\r\n createDepartment(department: ICoreSydept): Observable<departmentControllerResponse> {\r\n console.log('Creating department:', department);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department]);\r\n return this.http.post<departmentControllerResponse>(url, department)\r\n .pipe(\r\n tap((response: departmentControllerResponse) => {\r\n if (response.success) {\r\n this.refreshDepartmentList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Update existing department\r\n * POST ${coreRoutesUrl?.department} - payload: MDepartmentInsertUpdatePayload, response: departmentInsertUpdateControllerResponse\r\n */\r\n updateDepartment(id: string, department: ICoreSydept): Observable<departmentControllerResponse> {\r\n console.log('Updating department:', id, department);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department]);\r\n return this.http.post<departmentControllerResponse>(url, department)\r\n .pipe(\r\n tap((response: departmentControllerResponse) => {\r\n if (response.success) {\r\n this.refreshDepartmentList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get department by ID\r\n * GET ${coreRoutesUrl?.department}/byId/:query - payload: MDepartmentGetByIdPayload, response: departmentByIdControllerResponse\r\n */\r\n getDepartmentById(id: string): Observable<departmentByIdControllerResponse> {\r\n console.log('Getting department by ID:', id);\r\n const payload: MDepartmentGetByIdPayload = { sydept_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, 'byId', query]);\r\n return this.http.get<departmentByIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete department\r\n * DELETE ${coreRoutesUrl?.department}/:query - payload: MDepartmentDeletePayload, response: departmentDeleteControllerResponse\r\n */\r\n deleteDepartment(id: string): Observable<departmentDeleteControllerResponse> {\r\n const payload: MDepartmentDeletePayload = { sydept_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, query]);\r\n return this.http.delete<departmentDeleteControllerResponse>(url)\r\n .pipe(\r\n tap((response: departmentDeleteControllerResponse) => {\r\n if (response.success) {\r\n this.refreshDepartmentList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete multiple departments\r\n */\r\n deleteMultipleDepartments(ids: string[]): Observable<{ success: boolean; message?: string; data?: unknown }> {\r\n console.log('Deleting multiple departments:', ids);\r\n const payload = { ids };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, query]);\r\n return this.http.delete<{ success: boolean; message?: string; data?: unknown }>(url)\r\n .pipe(\r\n tap((response: { success: boolean; message?: string; data?: unknown }) => {\r\n if (response.success) {\r\n this.refreshDepartmentList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Toggle department active status\r\n */\r\n toggleDepartmentStatus(payload: MDepartmentToggleStatusPayload): Observable<departmentToggleStatusControllerResponse> {\r\n const query = generateStringFromObject(payload); \r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, 'toggleStatus', query]);\r\n return this.http.put<departmentToggleStatusControllerResponse>(url, {})\r\n .pipe(\r\n tap((response: departmentToggleStatusControllerResponse) => {\r\n if (response.success) {\r\n this.refreshDepartmentList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Find department by ID\r\n */\r\n findDepartmentById(id: string, items: ICoreSydept[] = this.departmentListSubject.value): ICoreSydept | null {\r\n for (const item of items) {\r\n if (item._id === id) {\r\n return item;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Get parent departments for dropdown selection\r\n */\r\n getParentDepartments(excludeId?: string): ICoreSydept[] {\r\n const allItems: ICoreSydept[] = [];\r\n\r\n const flattenItems = (items: ICoreSydept[], level: number = 0) => {\r\n items.forEach(item => {\r\n if (item._id !== excludeId) {\r\n allItems.push({\r\n ...item,\r\n sydept_name: ' '.repeat(level) + item.sydept_name\r\n });\r\n }\r\n });\r\n };\r\n\r\n flattenItems(this.departmentListSubject.value);\r\n return allItems;\r\n }\r\n\r\n /**\r\n * Refresh department list from server\r\n */\r\n private refreshDepartmentList(): void {\r\n const defaultBody = {\r\n pageIndex: 1,\r\n pageSize: 10\r\n };\r\n this.getDepartmentList(defaultBody).subscribe({\r\n next: () => {\r\n console.log('Department list refreshed successfully');\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing department list:', error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle errors\r\n */\r\n private handleError(error: unknown): Observable<never> {\r\n let errorMessage = 'An error occurred';\r\n\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n } else if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n\r\n console.error('Department Management Service Error:', errorMessage);\r\n return throwError(() => new Error(errorMessage));\r\n }\r\n} ","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, NonNullableFormBuilder, FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ICoreSydept } from 'cloud-ide-lms-model';\nimport { DepartmentManagementService } from '../../services/department-management.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideEleDataGridComponent, CideIconComponent, CideInputComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, ConfirmationService, NotificationService, CideEleGlobalNotificationsComponent } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\n\n@Component({\n selector: 'cide-core-app-department-list',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n CideInputComponent,\n CideTextareaComponent,\n CideIconComponent,\n CideEleDropdownComponent,\n CideEleGlobalNotificationsComponent\n ],\n templateUrl: './department-list.component.html',\n styleUrls: []\n})\nexport class DepartmentListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private departmentService = inject(DepartmentManagementService);\n private appState = inject(AppStateHelperService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n private confirmationService = inject(ConfirmationService);\n private notificationService = inject(NotificationService);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n departmentDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('departmentDetailsRendererTemplate');\n departmentStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('departmentStatusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('actionsDropdownRendererTemplate');\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n departments = signal<ICoreSydept[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Modern reactive forms with signals\n selectedParentDepartment = signal<ICoreSydept | null>(null);\n\n // Retrieved department data\n retrievedDepartment = signal<ICoreSydept | null>(null);\n\n // Edit mode flag\n isEditMode = signal(false);\n\n // Server-side pagination state\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n\n // Modern reactive form with typed controls\n quickAddForm = this.fb.group({\n sydept_code: this.fb.control('', []),\n sydept_name: this.fb.control('', []),\n sydept_description: this.fb.control('', []),\n sydept_isactive: this.fb.control(true, []),\n sydept_department_id_sydept: this.fb.control(''),\n sydept_entity_id_syen: this.fb.control(this.appState.getActiveEntityId() || '', [])\n });\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ICoreSydept>>({\n id: 'department-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'details',\n header: 'Department',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'departmentDetailsRenderer'\n },\n {\n key: 'sydept_code',\n header: 'Code',\n type: 'text',\n width: '120px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'sydept_isactive',\n header: 'Status',\n type: 'custom',\n width: '100px',\n truncate: false,\n align: 'center',\n renderer: 'departmentStatusRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '60px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n tree: {\n enabled: true,\n primaryKey: '_id',\n foreignKey: 'sydept_department_id_sydept',\n childrenKey: 'children',\n levelKey: 'level',\n expandedKey: 'expanded',\n hasChildrenKey: 'hasChildren'\n },\n trackBy: '_id',\n pagination: {\n enabled: false,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search departments...',\n searchableColumns: ['sydept_name', 'sydept_code', 'sydept_description'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none',\n onRefresh: 'onDepartmentRefresh'\n });\n\n // Template renderers using Angular best practices\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n departmentDetailsRenderer: this.departmentDetailsRendererTemplate(),\n departmentStatusRenderer: this.departmentStatusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\n\n /**\n * Get template renderers for data grid\n */\n getTemplateRenderers(): Record<string, TemplateRef<TemplateContext>> {\n return this.templateRenderers();\n }\n\n // Mixed renderers (templates + string functions)\n customRenderers = computed(() => ({\n ...this.templateRenderers()\n }));\n\n /**\n * Get custom renderers adapted for current data grid compatibility\n */\n getCustomRenderers(): Record<string, (value: unknown, row: ICoreSydept) => string> {\n return {};\n }\n\n // Action handlers for grid actions\n actionHandlers = {\n onEditDepartment: (row: ICoreSydept) => this.editDepartment(row._id || ''),\n onToggleDepartment: (row: ICoreSydept) => this.toggleDepartmentStatus(row._id || ''),\n onDeleteDepartment: (row: ICoreSydept) => this.deleteDepartment(row._id || ''),\n onDepartmentRowClick: (row: ICoreSydept) => this.onDepartmentRowClick(row),\n onDepartmentRefresh: () => this.onDepartmentRefresh(),\n onAddChild: (row: ICoreSydept) => this.onAddChild(row)\n };\n\n // Computed properties\n filteredItems = computed(() => {\n const items = this.departments();\n const search = this.searchTerm()?.toLowerCase();\n\n if (!search) return items;\n\n return items.filter(item => {\n return item.sydept_name?.toLowerCase().includes(search) ||\n item.sydept_code?.toLowerCase().includes(search) ||\n item.sydept_description?.toLowerCase().includes(search);\n });\n });\n\n hasSelection = computed(() => this.selectedItems().length > 0);\n\n // Pagination computed properties\n totalPages = computed(() => Math.ceil(this.totalItems() / this.pageSize()));\n hasNextPage = computed(() => this.currentPage() < this.totalPages());\n hasPreviousPage = computed(() => this.currentPage() > 1);\n\n // Modern constructor with effects for initialization\n constructor() {\n this.initializeComponent();\n this.destroyRef.onDestroy(() => {\n this.cleanupEventListeners();\n });\n }\n\n /**\n * Initialize component with modern patterns\n */\n private initializeComponent(): void {\n console.log('DepartmentListComponent initialized with modern Angular patterns');\n this.loadDepartments();\n this.setupEventListeners();\n this.exposeGlobalFunctions();\n }\n\n /**\n * Setup event listeners for dropdown interactions\n */\n private setupEventListeners(): void {\n document.addEventListener('click', this.handleClickOutside.bind(this));\n document.addEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Cleanup event listeners\n */\n private cleanupEventListeners(): void {\n document.removeEventListener('click', this.handleClickOutside.bind(this));\n document.removeEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Expose global functions for dropdown interactions\n */\n private exposeGlobalFunctions(): void {\n if (typeof window !== 'undefined') {\n (window as unknown as { toggleDropdown: (id: string) => void }).toggleDropdown = this.toggleDropdown.bind(this);\n (window as unknown as { handleDepartmentAction: (action: string, id: string) => void }).handleDepartmentAction = this.handleDepartmentAction.bind(this);\n }\n }\n\n /**\n * Load departments from service\n */\n loadDepartments(): void {\n console.log('🚀 DepartmentListComponent.loadDepartments() called');\n this.loading.set(true);\n this.error.set(null);\n\n const requestBody = {\n total: this.totalItems(),\n pageIndex: this.currentPage(),\n pageSize: this.pageSize(),\n query: this.searchTerm()\n };\n console.log('📋 Request body:', requestBody);\n\n if (!this.departmentService) {\n console.error('❌ DepartmentService is not available');\n this.error.set('Department service is not available');\n this.loading.set(false);\n return;\n }\n\n this.departmentService.getDepartmentList(requestBody)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('📥 DepartmentListComponent received response:', response);\n if (response?.success) {\n console.log('✅ Response successful, setting departments:', response.data);\n const departmentData = response?.data || [];\n this.departments.set(departmentData);\n this.totalItems.set(response.total || 0);\n this.updateGridData(departmentData);\n } else {\n console.error('❌ Response was not successful:', response);\n this.error.set('Failed to load departments');\n }\n },\n error: (err) => {\n console.error('❌ DepartmentListComponent error:', err);\n this.error.set(err.message || 'An error occurred while loading departments');\n },\n complete: () => {\n console.log('DepartmentListComponent loadDepartments completed');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(departments: ICoreSydept[]): void {\n console.log('🔄 updateGridData called with:', departments);\n \n this.gridConfig.update(config => {\n const newConfig = {\n ...config,\n data: departments\n };\n console.log('⚙️ Updated grid config with departments');\n return newConfig;\n });\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ICoreSydept>): void {\n console.log('onGridEvent', event);\n switch (event.type) {\n case 'search':\n this.searchTerm.set(event.data as string);\n this.currentPage.set(1);\n this.loadDepartments();\n break;\n case 'pageChange': {\n const pageData = event.data as { page: number; pageSize: number };\n if (pageData) {\n this.currentPage.set(pageData.page);\n this.pageSize.set(pageData.pageSize);\n this.loadDepartments();\n } else {\n const page = event.data as number;\n if (page) {\n this.currentPage.set(page);\n this.loadDepartments();\n }\n }\n break;\n }\n case 'refresh':\n this.onDepartmentRefresh();\n break;\n case 'rowClick':\n this.onDepartmentRowClick(event.data as ICoreSydept);\n break;\n case 'action':\n if (event.action?.key === 'edit') {\n this.editDepartment(event.data as string);\n } else if (event.action?.key === 'toggle') {\n this.toggleDepartmentStatus(event.data as string);\n } else if (event.action?.key === 'delete') {\n this.deleteDepartment(event.data as string);\n }\n break;\n }\n }\n\n /**\n * Handle department refresh\n */\n onDepartmentRefresh(): void {\n this.loadDepartments();\n }\n\n /**\n * Handle department row click\n */\n onDepartmentRowClick(department: ICoreSydept): void {\n this.editDepartment(department._id || '');\n }\n\n /**\n * Navigate to edit department form\n */\n editDepartment(itemId: string): void {\n console.log('🔵 editDepartment called with:', itemId);\n this.isEditMode.set(true);\n this.getDepartmentById(itemId);\n }\n\n /**\n * Get department by ID using the API\n */\n getDepartmentById(itemId: string): void {\n console.log('🔵 getDepartmentById called with:', itemId);\n this.loading.set(true);\n\n this.departmentService.getDepartmentById(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Department retrieved successfully:', response.data);\n let department: ICoreSydept | null = null;\n department = response.data || null;\n\n this.retrievedDepartment.set(department);\n\n if (this.isEditMode() && department) {\n this.populateFormForEdit(department);\n }\n } else {\n this.error.set('Failed to retrieve department');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while retrieving the department');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Populate form with department data for editing\n */\n populateFormForEdit(department: ICoreSydept): void {\n console.log('🔵 populateFormForEdit called with:', department);\n\n this.quickAddForm.patchValue({\n sydept_code: department.sydept_code || '',\n sydept_name: department.sydept_name || '',\n sydept_description: department.sydept_description || '',\n sydept_isactive: department.sydept_isactive ?? true,\n sydept_department_id_sydept: department.sydept_department_id_sydept || '',\n sydept_entity_id_syen: department.sydept_entity_id_syen || ''\n });\n\n if (department.sydept_department_id_sydept) {\n const parentDepartment = this.departments().find(item => item._id === department.sydept_department_id_sydept);\n if (parentDepartment) {\n this.selectedParentDepartment.set(parentDepartment);\n }\n }\n\n console.log('✅ Form populated for editing:', this.quickAddForm.value);\n }\n\n /**\n * Delete department\n */\n async deleteDepartment(itemId: string): Promise<void> {\n console.log('🔵 deleteDepartment called with:', itemId);\n \n // Find the department name for better confirmation message\n const department = this.departments().find(d => d._id === itemId);\n const departmentName = department?.sydept_name || 'this department';\n \n try {\n const confirmed = await this.confirmationService.confirmDelete(departmentName);\n \n if (confirmed) {\n this.loading.set(true);\n\n this.departmentService.deleteDepartment(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.notificationService.success(`Department \"${departmentName}\" deleted successfully`);\n this.loadDepartments();\n } else {\n this.notificationService.error('Failed to delete department');\n }\n },\n error: (err) => {\n this.notificationService.error(err.message || 'An error occurred while deleting the department');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n } catch (error) {\n console.log('User cancelled deletion');\n }\n }\n\n /**\n * Toggle department status\n */\n toggleDepartmentStatus(itemId: string): void {\n console.log('🔵 toggleDepartmentStatus called with:', itemId);\n \n // Find the department for better notification message\n const department = this.departments().find(d => d._id === itemId);\n const departmentName = department?.sydept_name || 'department';\n const newStatus = department?.sydept_isactive ? 'inactive' : 'active';\n \n this.loading.set(true);\n\n this.departmentService.toggleDepartmentStatus({ sydept_id: itemId })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.notificationService.success(`Department \"${departmentName}\" ${newStatus} successfully`);\n this.loadDepartments();\n } else {\n this.notificationService.error('Failed to toggle department status');\n }\n },\n error: (err) => {\n this.notificationService.error(err.message || 'An error occurred while toggling status');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Quick add or update department using reactive form\n */\n quickAddDepartment() {\n if (this.quickAddForm.invalid) return;\n\n const formValue = this.quickAddForm.value;\n\n const department: Partial<ICoreSydept> = {\n _id: this.retrievedDepartment()?._id || '',\n sydept_code: formValue.sydept_code,\n sydept_name: formValue.sydept_name,\n sydept_description: formValue.sydept_description || '',\n sydept_isactive: formValue.sydept_isactive,\n sydept_department_id_sydept: formValue.sydept_department_id_sydept || undefined,\n sydept_entity_id_syen: formValue.sydept_entity_id_syen\n };\n\n if (this.isEditMode() && this.retrievedDepartment()) {\n const itemId = this.retrievedDepartment()?._id;\n if (itemId) {\n console.log('🔵 Updating department:', itemId);\n this.departmentService.updateDepartment(itemId, department).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Department updated successfully');\n this.notificationService.success(`Department \"${department.sydept_name}\" updated successfully`);\n this.resetQuickAddForm();\n this.isEditMode.set(false);\n this.retrievedDepartment.set(null);\n this.loadDepartments();\n } else {\n this.notificationService.error('Failed to update department');\n }\n },\n error: (err) => {\n this.notificationService.error(err.message || 'Failed to update department');\n }\n });\n }\n } else {\n console.log('🔵 Creating new department');\n this.departmentService.createDepartment(department).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Department created successfully');\n this.notificationService.success(`Department \"${department.sydept_name}\" created successfully`);\n this.resetQuickAddForm();\n this.loadDepartments();\n } else {\n this.notificationService.error('Failed to create department');\n }\n },\n error: (err) => {\n this.notificationService.error(err.message || 'Failed to create department');\n }\n });\n }\n }\n\n /**\n * Reset the quick add form to default values\n */\n resetQuickAddForm(): void {\n this.selectedParentDepartment.set(null);\n this.isEditMode.set(false);\n this.retrievedDepartment.set(null);\n\n this.quickAddForm.reset({\n sydept_code: '',\n sydept_name: '',\n sydept_description: '',\n sydept_isactive: true,\n sydept_department_id_sydept: '',\n sydept_entity_id_syen: this.appState.getActiveEntityId() || ''\n });\n }\n\n /**\n * Handle adding a child department\n */\n onAddChild(parentItem: ICoreSydept): void {\n console.log('🔵 onAddChild called with:', parentItem);\n console.log('🔵 Parent name:', parentItem.sydept_name);\n\n // Clear edit mode and retrieved item when adding a child\n this.isEditMode.set(false);\n this.retrievedDepartment.set(null);\n\n // Set the selected parent item first using signal\n this.selectedParentDepartment.set(parentItem);\n console.log('🔵 selectedParentDepartment set to:', this.selectedParentDepartment());\n\n // Update form with parent context (don't call resetQuickAddForm as it clears the parent)\n this.quickAddForm.patchValue({\n sydept_code: '',\n sydept_name: '',\n sydept_description: '',\n sydept_isactive: true,\n sydept_department_id_sydept: parentItem._id,\n sydept_entity_id_syen: this.appState.getActiveEntityId() || ''\n });\n\n console.log('🔵 Form updated, parent should be visible:', this.selectedParentDepartment()?.sydept_name);\n }\n\n /**\n * Clear selected parent department\n */\n clearSelectedParent() {\n this.selectedParentDepartment.set(null);\n this.quickAddForm.patchValue({\n sydept_department_id_sydept: ''\n });\n }\n\n /**\n * Handle click outside dropdown\n */\n private handleClickOutside(event: Event): void {\n const target = event.target as HTMLElement;\n\n if (!target?.closest('[data-dropdown]') && !target?.closest('[data-action=\"more-actions\"]')) {\n document.querySelectorAll('[data-dropdown]').forEach((el: Element) => {\n const dropdown = el as HTMLElement;\n dropdown.classList.add('tw-hidden');\n });\n\n document.querySelectorAll('[data-action=\"more-actions\"]').forEach((el: Element) => {\n const button = el as HTMLElement;\n button.setAttribute('aria-expanded', 'false');\n });\n }\n }\n\n /**\n * Handle dropdown action clicks\n */\n private handleDropdownAction(event: Event): void {\n const target = event.target as HTMLElement;\n const actionButton = target.closest('[data-action]') as HTMLElement;\n\n if (actionButton) {\n const action = actionButton.getAttribute('data-action');\n const itemId = actionButton.getAttribute('data-item-id');\n\n if (action && itemId) {\n event.preventDefault();\n event.stopPropagation();\n\n const dropdown = actionButton.closest('[data-dropdown]') as HTMLElement;\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n switch (action) {\n case 'edit':\n this.editDepartment(itemId);\n break;\n case 'toggle':\n this.toggleDepartmentStatus(itemId);\n break;\n case 'delete':\n this.deleteDepartment(itemId);\n break;\n }\n }\n }\n }\n\n /**\n * Toggle dropdown visibility\n */\n toggleDropdown(itemId: string) {\n document.querySelectorAll('.dropdown-menu').forEach(menu => {\n if (menu.getAttribute('data-dropdown') !== itemId) {\n menu.classList.add('tw-hidden');\n }\n });\n\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.toggle('tw-hidden');\n }\n }\n\n /**\n * Handle department action clicks\n */\n handleDepartmentAction(action: string, itemId: string) {\n const item = this.departments().find(item => item._id === itemId);\n if (!item) return;\n\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n switch (action) {\n case 'edit':\n this.editDepartment(itemId);\n break;\n case 'toggle':\n this.toggleDepartmentStatus(itemId);\n break;\n case 'delete':\n this.deleteDepartment(itemId);\n break;\n }\n }\n\n /**\n * Get status display\n */\n getStatusDisplay(isActive: boolean): string {\n return isActive ? 'Active' : 'Inactive';\n }\n\n /**\n * Get status class for styling\n */\n getStatusClass(isActive: boolean): string {\n return isActive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800';\n }\n\n /**\n * Generate dropdown items for department actions\n */\n getDropdownItems(row: ICoreSydept): DropdownItem[] {\n return [\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'addChild',\n label: 'Add Child',\n icon: 'add',\n iconColor: 'tw-text-blue-400',\n textColor: 'tw-text-blue-600',\n hoverBgColor: 'hover:tw-bg-blue-50'\n },\n {\n id: 'toggle',\n label: row.sydept_isactive ? 'Deactivate' : 'Activate',\n icon: 'power_settings_new',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n iconColor: 'tw-text-red-400',\n textColor: 'tw-text-red-600',\n hoverBgColor: 'hover:tw-bg-red-50'\n }\n ];\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, row: ICoreSydept): void {\n console.log('🔵 onDropdownItemClick called with:', item, row);\n\n switch (item.id) {\n case 'edit':\n this.editDepartment(row._id || '');\n break;\n case 'addChild':\n this.onAddChild(row);\n break;\n case 'toggle':\n this.toggleDepartmentStatus(row._id || '');\n break;\n case 'delete':\n this.deleteDepartment(row._id || '');\n break;\n default:\n console.log('🔵 Unknown action:', item.id);\n }\n\n this.closeAllDropdowns();\n }\n\n /**\n * Close all dropdowns\n */\n private closeAllDropdowns(): void {\n const event = new MouseEvent('click', { bubbles: true });\n document.dispatchEvent(event);\n }\n\n /**\n * Track by function for ngFor\n */\n trackByItemId(index: number, item: ICoreSydept): string {\n return item._id || '';\n }\n} ","<!-- Department List Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n<!-- Global Notifications -->\n<cide-ele-global-notifications></cide-ele-global-notifications>\n\n <!-- Quick Add Form Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Department' : 'Quick Add Department' }}</h6>\n </div>\n @if (selectedParentDepartment()) {\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child under:' }}</span>\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ selectedParentDepartment()?.sydept_name }}</span>\n </div>\n <button \n cideEleButton \n variant=\"ghost\" \n size=\"xs\" \n type=\"button\" \n (click)=\"clearSelectedParent()\" \n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\n <svg class=\"tw-w-4 tw-h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"/>\n </svg>\n </button>\n </div>\n }\n </div>\n \n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddDepartment()\">\n <!-- First Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\n <!-- Department Code -->\n <div>\n <cide-ele-input \n id=\"sydept_code\" \n label=\"Code*\" \n formControlName=\"sydept_code\"\n placeholder=\"DEPT001\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Department Name -->\n <div>\n <cide-ele-input \n id=\"sydept_name\" \n label=\"Name*\" \n formControlName=\"sydept_name\"\n placeholder=\"Department name\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n\n \n <!-- Active Status -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <cide-ele-input \n id=\"sydept_isactive\"\n type=\"checkbox\"\n label=\"Active\"\n formControlName=\"sydept_isactive\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n \n <!-- Second Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\n <!-- Description -->\n <div>\n <cide-ele-textarea \n id=\"sydept_description\" \n label=\"Description\" \n formControlName=\"sydept_description\"\n placeholder=\"Department description\"\n rows=\"2\"\n size=\"sm\">\n </cide-ele-textarea>\n </div>\n \n\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <div class=\"tw-flex tw-space-x-2\">\n <button \n cideEleButton \n variant=\"primary\" \n size=\"sm\" \n type=\"submit\"\n [disabled]=\"quickAddForm.invalid\"\n class=\"tw-px-2 tw-py-1 tw-w-20\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n {{ isEditMode() ? 'Update' : 'Add' }}\n </button>\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\"\n (click)=\"resetQuickAddForm()\"\n class=\"tw-px-2 tw-py-1 tw-w-16\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\n Reset\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n\n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">business</cide-ele-icon>\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Department Management</h5>\n </div>\n\n <!-- Actions -->\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Search functionality is handled by the data grid -->\n </div>\n </div>\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n \n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n \n <cide-ele-data-grid \n [config]=\"gridConfig()\" \n [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\"\n [serverSidePagination]=\"true\" \n [totalServerItems]=\"totalItems()\" \n [currentServerPage]=\"currentPage()\"\n [currentServerPageSize]=\"pageSize()\" \n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Department Details Renderer Template -->\n<ng-template #departmentDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\n <!-- Department Icon -->\n <div class=\"tw-flex-shrink-0\">\n <cide-ele-icon \n class=\"tw-text-gray-400\" \n size=\"xs\">\n business\n </cide-ele-icon>\n </div>\n \n <!-- Department Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \n [title]=\"row.sydept_name\">\n {{ row.sydept_name || 'Untitled' }}\n </div>\n @if (row.sydept_description) {\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \n [title]=\"row.sydept_description\">\n {{ row.sydept_description }}\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- Department Status Renderer Template -->\n<ng-template #departmentStatusRendererTemplate let-row=\"row\" let-value=\"value\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\n [ngClass]=\"getStatusClass(row.sydept_isactive)\">\n {{ getStatusDisplay(row.sydept_isactive) }}\n </span>\n</ng-template>\n\n<!-- Actions Dropdown Renderer Template -->\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown \n [items]=\"getDropdownItems(row)\"\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template> ","// Department Management Components\r\nexport * from './components/department-list/department-list.component';\r\n\r\n// Department Management Services\r\nexport * from './services/department-management.service'; ","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, throwError, BehaviorSubject } from 'rxjs';\nimport { catchError, tap } from 'rxjs/operators';\nimport { \n cidePath, \n coreRoutesUrl, \n generateStringFromObject, \n hostManagerRoutesUrl, \n ICoreSydsg, \n MDesignationDeletePayload, \n MDesignationGetByIdPayload, \n MDesignationInsertUpdatePayload,\n designationByIdControllerResponse, \n designationDeleteControllerResponse, \n designationControllerResponse,\n designationInsertUpdateControllerResponse,\n MDesignation,\n} from 'cloud-ide-lms-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DesignationManagementService {\n private apiUrl = `${coreRoutesUrl?.designation}`;\n private designationListSubject = new BehaviorSubject<ICoreSydsg[]>([]);\n public designationList$ = this.designationListSubject.asObservable();\n\n constructor(private http: HttpClient) {\n console.log('DesignationManagementService initialized - using real API');\n }\n\n /**\n * Get designation list from API\n */\n getDesignationList(body: MDesignation): Observable<designationControllerResponse> {\n const query = generateStringFromObject(body);\n return this.http?.get<designationControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation, query]))\n .pipe(\n tap((response: designationControllerResponse) => {\n if (response?.success) {\n this.designationListSubject.next(response?.data || []);\n }\n }),\n catchError(error => {\n console.error('DesignationManagementService API error:', error);\n return this.handleError(error);\n })\n );\n }\n\n /**\n * Get designation list from cache (if available)\n */\n getDesignationListFromCache(): ICoreSydsg[] {\n return this.designationListSubject.value;\n }\n\n /**\n * Create new designation\n * POST ${coreRoutesUrl?.designation} - payload: MDesignationInsertUpdatePayload, response: designationInsertUpdateControllerResponse\n */\n createDesignation(designation: ICoreSydsg): Observable<designationInsertUpdateControllerResponse> {\n console.log('Creating designation:', designation);\n \n // Create proper payload using MDesignationInsertUpdatePayload\n const payload = new MDesignationInsertUpdatePayload(designation);\n \n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation]);\n return this.http.post<designationInsertUpdateControllerResponse>(url, payload)\n .pipe(\n tap((response: designationInsertUpdateControllerResponse) => {\n if (response.success) {\n this.refreshDesignationList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Update existing designation\n * POST ${coreRoutesUrl?.designation} - payload: MDesignationInsertUpdatePayload, response: designationInsertUpdateControllerResponse\n */\n updateDesignation(id: string, designation: ICoreSydsg): Observable<designationInsertUpdateControllerResponse> {\n console.log('Updating designation:', id, designation);\n \n // Create proper payload using MDesignationInsertUpdatePayload\n const payload = new MDesignationInsertUpdatePayload(designation);\n \n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation]);\n return this.http.post<designationInsertUpdateControllerResponse>(url, payload)\n .pipe(\n tap((response: designationInsertUpdateControllerResponse) => {\n if (response.success) {\n this.refreshDesignationList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Get designation by ID\n * GET ${coreRoutesUrl?.designation}/byId/:query - payload: MDesignationGetByIdPayload, response: designationByIdControllerResponse\n */\n getDesignationById(id: string): Observable<designationByIdControllerResponse> {\n console.log('Getting designation by ID:', id);\n const payload: MDesignationGetByIdPayload = { sydsg_id: id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation, 'byId', query]);\n return this.http.get<designationByIdControllerResponse>(url)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Delete designation\n * DELETE ${coreRoutesUrl?.designation}/:query - payload: MDesignationDeletePayload, response: designationDeleteControllerResponse\n */\n deleteDesignation(id: string): Observable<designationDeleteControllerResponse> {\n const payload: MDesignationDeletePayload = { sydsg_id: id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation, query]);\n return this.http.delete<designationDeleteControllerResponse>(url)\n .pipe(\n tap((response: designationDeleteControllerResponse) => {\n if (response.success) {\n this.refreshDesignationList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Delete multiple designations\n */\n deleteMultipleDesignations(ids: string[]): Observable<{ success: boolean; message?: string; data?: unknown }> {\n console.log('Deleting multiple designations:', ids);\n const payload = { ids };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation, query]);\n return this.http.delete<{ success: boolean; message?: string; data?: unknown }>(url)\n .pipe(\n tap((response: { success: boolean; message?: string; data?: unknown }) => {\n if (response.success) {\n this.refreshDesignationList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Toggle designation active status\n */\n toggleDesignationStatus(id: string): Observable<designationControllerResponse> {\n console.log('Toggling designation status:', id);\n const payload = { id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation, query]);\n return this.http.put<designationControllerResponse>(url, {})\n .pipe(\n tap((response: designationControllerResponse) => {\n if (response.success) {\n this.refreshDesignationList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Find designation by ID\n */\n findDesignationById(id: string, items: ICoreSydsg[] = this.designationListSubject.value): ICoreSydsg | null {\n for (const item of items) {\n if (item._id === id) {\n return item;\n }\n }\n return null;\n }\n\n /**\n * Get parent designations for dropdown selection\n */\n getParentDesignations(excludeId?: string): ICoreSydsg[] {\n const allItems: ICoreSydsg[] = [];\n\n const flattenItems = (items: ICoreSydsg[], level: number = 0) => {\n items.forEach(item => {\n if (item._id !== excludeId) {\n allItems.push({\n ...item,\n sydsg_name: ' '.repeat(level) + item.sydsg_name\n });\n }\n });\n };\n\n flattenItems(this.designationListSubject.value);\n return allItems;\n }\n\n /**\n * Refresh designation list from server\n */\n private refreshDesignationList(): void {\n const defaultBody = {\n pageIndex: 1,\n pageSize: 10\n };\n this.getDesignationList(defaultBody).subscribe({\n next: () => {\n console.log('Designation list refreshed successfully');\n },\n error: (error) => {\n console.error('Error refreshing designation list:', error);\n }\n });\n }\n\n /**\n * Handle errors\n */\n private handleError(error: unknown): Observable<never> {\n let errorMessage = 'An error occurred';\n\n if (error instanceof Error) {\n errorMessage = error.message;\n } else if (typeof error === 'string') {\n errorMessage = error;\n }\n\n console.error('Designation Management Service Error:', errorMessage);\n return throwError(() => new Error(errorMessage));\n }\n} ","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError, BehaviorSubject } from 'rxjs';\r\nimport { catchError, tap } from 'rxjs/operators';\r\nimport { \r\n cidePath, \r\n coreRoutesUrl, \r\n generateStringFromObject, \r\n hostManagerRoutesUrl, \r\n ICoreSydsgl, \r\n gradeLevelControllerResponse, \r\n gradeLevelByIdControllerResponse,\r\n MGradeLevel\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GradeLevelManagementService {\r\n private apiUrl = `${coreRoutesUrl?.gradeLevel}`;\r\n private gradeLevelListSubject = new BehaviorSubject<ICoreSydsgl[]>([]);\r\n public gradeLevelList$ = this.gradeLevelListSubject.asObservable();\r\n\r\n constructor(private http: HttpClient) {\r\n console.log('GradeLevelManagementService initialized - using real API');\r\n }\r\n\r\n /**\r\n * Get grade level list from API\r\n */\r\n getGradeLevelList(body: MGradeLevel): Observable<gradeLevelControllerResponse> {\r\n const query = generateStringFromObject(body);\r\n return this.http?.get<gradeLevelControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, query]))\r\n .pipe(\r\n tap((response: gradeLevelControllerResponse) => {\r\n if (response?.success) {\r\n this.gradeLevelListSubject.next(response?.data || []);\r\n }\r\n }),\r\n catchError(error => {\r\n console.error('GradeLevelManagementService API error:', error);\r\n return this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Get grade level list from cache (if available)\r\n */\r\n getGradeLevelListFromCache(): ICoreSydsgl[] {\r\n return this.gradeLevelListSubject.value;\r\n }\r\n\r\n /**\r\n * Create new grade level\r\n * POST ${coreRoutesUrl?.gradeLevel} - payload: MGradeLevel, response: gradeLevelInsertUpdateControllerResponse\r\n */\r\n createGradeLevel(gradeLevel: ICoreSydsgl): Observable<gradeLevelControllerResponse> {\r\n console.log('Creating grade level:', gradeLevel);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel]);\r\n return this.http.post<gradeLevelControllerResponse>(url, gradeLevel)\r\n .pipe(\r\n tap((response: gradeLevelControllerResponse) => {\r\n if (response.success) {\r\n this.refreshGradeLevelList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Update existing grade level\r\n * POST ${coreRoutesUrl?.gradeLevel} - payload: MGradeLevel, response: gradeLevelInsertUpdateControllerResponse\r\n */\r\n updateGradeLevel(id: string, gradeLevel: ICoreSydsgl): Observable<gradeLevelControllerResponse> {\r\n console.log('Updating grade level:', id, gradeLevel);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel]);\r\n return this.http.post<gradeLevelControllerResponse>(url, gradeLevel)\r\n .pipe(\r\n tap((response: gradeLevelControllerResponse) => {\r\n if (response.success) {\r\n this.refreshGradeLevelList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get grade level by ID\r\n * GET ${coreRoutesUrl?.gradeLevel}/byId/:query - payload: { id }, response: gradeLevelByIdControllerResponse\r\n */\r\n getGradeLevelById(id: string): Observable<gradeLevelByIdControllerResponse> {\r\n console.log('Getting grade level by ID:', id);\r\n const payload = { id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, 'byId', query]);\r\n return this.http.get<gradeLevelByIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete grade level\r\n * DELETE ${coreRoutesUrl?.gradeLevel}/:query - payload: { id }, response: { success: boolean }\r\n */\r\n deleteGradeLevel(id: string): Observable<{ success: boolean; message?: string; data?: unknown }> {\r\n const payload = { id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, query]);\r\n return this.http.delete<{ success: boolean; message?: string; data?: unknown }>(url)\r\n .pipe(\r\n tap((response: { success: boolean; message?: string; data?: unknown }) => {\r\n if (response.success) {\r\n this.refreshGradeLevelList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete multiple grade levels\r\n */\r\n deleteMultipleGradeLevels(ids: string[]): Observable<{ success: boolean; message?: string; data?: unknown }> {\r\n console.log('Deleting multiple grade levels:', ids);\r\n const payload = { ids };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, query]);\r\n return this.http.delete<{ success: boolean; message?: string; data?: unknown }>(url)\r\n .pipe(\r\n tap((response: { success: boolean; message?: string; data?: unknown }) => {\r\n if (response.success) {\r\n this.refreshGradeLevelList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Toggle grade level active status\r\n */\r\n toggleGradeLevelStatus(id: string): Observable<gradeLevelControllerResponse> {\r\n console.log('Toggling grade level status:', id);\r\n const payload = { id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, query]);\r\n return this.http.put<gradeLevelControllerResponse>(url, {})\r\n .pipe(\r\n tap((response: gradeLevelControllerResponse) => {\r\n if (response.success) {\r\n this.refreshGradeLevelList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Find grade level by ID\r\n */\r\n findGradeLevelById(id: string, items: ICoreSydsgl[] = this.gradeLevelListSubject.value): ICoreSydsgl | null {\r\n for (const item of items) {\r\n if (item._id === id) {\r\n return item;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Refresh grade level list from server\r\n */\r\n private refreshGradeLevelList(): void {\r\n const defaultBody = {\r\n pageIndex: 1,\r\n pageSize: 10\r\n };\r\n this.getGradeLevelList(defaultBody).subscribe({\r\n next: () => {\r\n console.log('Grade level list refreshed successfully');\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing grade level list:', error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle errors\r\n */\r\n private handleError(error: unknown): Observable<never> {\r\n let errorMessage = 'An error occurred';\r\n\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n } else if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n\r\n console.error('Grade Level Management Service Error:', errorMessage);\r\n return throwError(() => new Error(errorMessage));\r\n }\r\n} ","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Validators, ReactiveFormsModule, NonNullableFormBuilder, FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ICoreSydsg, ICoreSydsgl, ICoreSydept } from 'cloud-ide-lms-model';\nimport { DesignationManagementService } from '../../services/designation-management.service';\nimport { GradeLevelManagementService } from '../../../grade-level-management/services/grade-level-management.service';\nimport { DepartmentManagementService } from '../../../department-management/services/department-management.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideEleDataGridComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\n\ninterface HierarchicalNode {\n _id: string;\n name: string;\n code: string;\n description: string;\n type: 'department' | 'designation';\n level: number;\n expanded: boolean;\n hasChildren: boolean;\n children: HierarchicalNode[];\n status: boolean;\n grade_level: string;\n parentId: string | null;\n}\n\n@Component({\n selector: 'cide-core-app-designation-list',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n CideInputComponent,\n CideSelectComponent,\n CideTextareaComponent,\n CideIconComponent,\n CideEleDropdownComponent\n ],\n templateUrl: './designation-list.component.html',\n styleUrls: []\n})\nexport class DesignationListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private designationService = inject(DesignationManagementService);\n private gradeLevelService = inject(GradeLevelManagementService);\n private departmentService = inject(DepartmentManagementService);\n private appState = inject(AppStateHelperService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n designationDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('designationDetailsRendererTemplate');\n designationStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('designationStatusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('actionsDropdownRendererTemplate');\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n designations = signal<ICoreSydsg[]>([]);\n departments = signal<ICoreSydept[]>([]);\n gradeLevels = signal<ICoreSydsgl[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Modern reactive forms with signals\n selectedParentDesignation = signal<ICoreSydsg | null>(null);\n selectedParentDepartment = signal<ICoreSydept | null>(null);\n\n // Retrieved designation data\n retrievedDesignation = signal<ICoreSydsg | null>(null);\n\n // Edit mode flag\n isEditMode = signal(false);\n\n // Server-side pagination state\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n\n // Modern reactive form with typed controls\n quickAddForm = this.fb.group({\n sydsg_name: this.fb.control('', [Validators.required, Validators.minLength(1), Validators.maxLength(100)]),\n sydsg_code: this.fb.control('', [Validators.required, Validators.minLength(1), Validators.maxLength(20)]),\n sydsg_description: this.fb.control('', [Validators.maxLength(400)]),\n sydsg_prent_id_desg: this.fb.control(''),\n sydsg_department_id_sydpt: this.fb.control('', [Validators.required]),\n sydsg_grade_level_id_sydsgl: this.fb.control('', [Validators.required]),\n sydsg_isactive: this.fb.control(true, [Validators.required]),\n desg_entity_id_syen: this.fb.control(this.appState.getActiveEntityId() || '', [Validators.required])\n });\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ICoreSydsg>>({\n id: 'designation-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'details',\n header: 'Department/Designation',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'designationDetailsRenderer'\n },\n {\n key: 'code',\n header: 'Code',\n type: 'text',\n width: '120px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'grade_level',\n header: 'Grade Level',\n type: 'text',\n width: '120px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'status',\n header: 'Status',\n type: 'custom',\n width: '100px',\n truncate: false,\n align: 'center',\n renderer: 'designationStatusRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '60px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n tree: {\n enabled: true,\n primaryKey: '_id',\n foreignKey: 'parentId',\n childrenKey: 'children',\n levelKey: 'level',\n expandedKey: 'expanded',\n hasChildrenKey: 'hasChildren'\n },\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search departments and designations...',\n searchableColumns: ['name', 'code', 'description'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none',\n onRefresh: 'onDesignationRefresh'\n });\n\n // Template renderers using Angular best practices\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n designationDetailsRenderer: this.designationDetailsRendererTemplate(),\n designationStatusRenderer: this.designationStatusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\n\n /**\n * Get template renderers for data grid\n */\n getTemplateRenderers(): Record<string, TemplateRef<TemplateContext>> {\n return this.templateRenderers();\n }\n\n // Mixed renderers (templates + string functions)\n customRenderers = computed(() => ({\n ...this.templateRenderers()\n }));\n\n /**\n * Get custom renderers adapted for current data grid compatibility\n */\n getCustomRenderers(): Record<string, (value: unknown, row: ICoreSydsg) => string> {\n return {};\n }\n\n // Action handlers for grid actions\n actionHandlers = {\n onEditDesignation: (row: ICoreSydsg) => this.editDesignation(row._id || ''),\n onToggleDesignation: (row: ICoreSydsg) => this.toggleDesignationStatus(row._id || ''),\n onDeleteDesignation: (row: ICoreSydsg) => this.deleteDesignation(row._id || ''),\n onDesignationRowClick: (row: ICoreSydsg) => this.onDesignationRowClick(row),\n onDesignationRefresh: () => this.onDesignationRefresh(),\n onAddChild: (row: ICoreSydsg) => this.onAddChild(row)\n };\n\n // Computed properties\n filteredItems = computed(() => {\n const items = this.designations();\n const search = this.searchTerm()?.toLowerCase();\n\n if (!search) return items;\n\n return items.filter(item => {\n return item.sydsg_name?.toLowerCase().includes(search) ||\n item.sydsg_code?.toLowerCase().includes(search) ||\n item.sydsg_description?.toLowerCase().includes(search);\n });\n });\n\n hasSelection = computed(() => this.selectedItems().length > 0);\n\n // Pagination computed properties\n totalPages = computed(() => Math.ceil(this.totalItems() / this.pageSize()));\n hasNextPage = computed(() => this.currentPage() < this.totalPages());\n hasPreviousPage = computed(() => this.currentPage() > 1);\n\n // Grade level options for dropdown\n gradeLevelOptions = computed(() => {\n return this.gradeLevels().map(gradeLevel => ({\n value: gradeLevel._id || '',\n label: gradeLevel.sydsgl_name || 'Unknown'\n }));\n });\n\n // Department options for dropdown\n departmentOptions = computed(() => {\n return this.departments().map(department => ({\n value: department._id || '',\n label: department.sydept_name || 'Unknown'\n }));\n });\n\n // Modern constructor with effects for initialization\n constructor() {\n this.initializeComponent();\n this.destroyRef.onDestroy(() => {\n this.cleanupEventListeners();\n });\n }\n\n /**\n * Initialize component with modern patterns\n */\n private initializeComponent(): void {\n console.log('DesignationListComponent initialized with modern Angular patterns');\n this.loadDepartments();\n this.loadGradeLevels();\n this.loadDesignations();\n this.setupEventListeners();\n this.exposeGlobalFunctions();\n }\n\n /**\n * Setup event listeners for dropdown interactions\n */\n private setupEventListeners(): void {\n document.addEventListener('click', this.handleClickOutside.bind(this));\n document.addEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Cleanup event listeners\n */\n private cleanupEventListeners(): void {\n document.removeEventListener('click', this.handleClickOutside.bind(this));\n document.removeEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Expose global functions for dropdown interactions\n */\n private exposeGlobalFunctions(): void {\n if (typeof window !== 'undefined') {\n (window as unknown as { toggleDropdown: (id: string) => void }).toggleDropdown = this.toggleDropdown.bind(this);\n (window as unknown as { handleDesignationAction: (action: string, id: string) => void }).handleDesignationAction = this.handleDesignationAction.bind(this);\n }\n }\n\n /**\n * Load designations from service\n */\n loadDesignations(): void {\n console.log('🚀 DesignationListComponent.loadDesignations() called');\n this.loading.set(true);\n this.error.set(null);\n\n const requestBody = {\n total: this.totalItems(),\n pageIndex: this.currentPage(),\n pageSize: this.pageSize(),\n query: this.searchTerm()\n };\n console.log('📋 Request body:', requestBody);\n\n if (!this.designationService) {\n console.error('❌ DesignationService is not available');\n this.error.set('Designation service is not available');\n this.loading.set(false);\n return;\n }\n\n this.designationService.getDesignationList(requestBody)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('📥 DesignationListComponent received response:', response);\n if (response?.success) {\n console.log('✅ Response successful, setting designations:', response.data);\n const designationData = response?.data || [];\n this.designations.set(designationData);\n this.totalItems.set(response.total || 0);\n // Update grid data with hierarchical structure\n this.updateGridData(designationData);\n } else {\n console.error('❌ Response was not successful:', response);\n this.error.set('Failed to load designations');\n }\n },\n error: (err) => {\n console.error('❌ DesignationListComponent error:', err);\n this.error.set(err.message || 'An error occurred while loading designations');\n },\n complete: () => {\n console.log('DesignationListComponent loadDesignations completed');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Load departments from service\n */\n loadDepartments(): void {\n console.log('🚀 DesignationListComponent.loadDepartments() called');\n\n if (!this.departmentService) {\n console.error('❌ DepartmentService is not available');\n return;\n }\n\n const requestBody = {\n total: 0,\n pageIndex: 1,\n pageSize: 1000, // Load all departments\n query: ''\n };\n\n this.departmentService.getDepartmentList(requestBody)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('📥 DesignationListComponent received departments response:', response);\n if (response?.success) {\n console.log('✅ Departments loaded successfully:', response.data);\n const departmentData = response?.data || [];\n this.departments.set(departmentData);\n // Update grid data after loading departments\n this.updateGridData(this.designations());\n } else {\n console.error('❌ Failed to load departments:', response);\n }\n },\n error: (err) => {\n console.error('❌ Error loading departments:', err);\n }\n });\n }\n\n /**\n * Load grade levels from service\n */\n loadGradeLevels(): void {\n console.log('🚀 DesignationListComponent.loadGradeLevels() called');\n\n if (!this.gradeLevelService) {\n console.error('❌ GradeLevelService is not available');\n return;\n }\n\n const requestBody = {\n pageIndex: 1,\n pageSize: 100 // Load all grade levels for dropdown\n };\n\n this.gradeLevelService.getGradeLevelList(requestBody)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('📥 Grade levels response:', response);\n if (response?.success) {\n console.log('✅ Grade levels loaded successfully:', response.data);\n const gradeLevelData = response?.data || [];\n this.gradeLevels.set(gradeLevelData);\n // Update grid data if designations are already loaded\n if (this.designations().length > 0) {\n this.updateGridData(this.designations());\n }\n } else {\n console.error('❌ Failed to load grade levels:', response);\n }\n },\n error: (err) => {\n console.error('❌ Error loading grade levels:', err);\n }\n });\n }\n\n /**\n * Build hierarchical tree structure from departments and designations\n */\n private buildHierarchicalData(): HierarchicalNode[] {\n const departments = this.departments();\n const designations = this.designations();\n \n console.log('🔍 Building hierarchical data with:', {\n departments: departments.length,\n designations: designations.length\n });\n \n // First, build department hierarchy\n const departmentNodes = this.buildDepartmentHierarchy(departments);\n \n // Then, add designations under their respective departments\n this.addDesignationsToDepartments(departmentNodes, designations);\n \n // Add orphaned designations at root level\n const orphanedDesignations = designations.filter(designation => \n !departments.some(dept => dept._id === designation.sydsg_department_id_sydpt)\n );\n \n console.log(`🏷️ Found ${orphanedDesignations.length} orphaned designations`);\n \n orphanedDesignations.forEach(designation => {\n console.log(`👔 Adding orphaned designation: ${designation.sydsg_name}`);\n \n const designationNode: HierarchicalNode = {\n _id: designation._id || '',\n name: designation.sydsg_name || '',\n code: designation.sydsg_code || '',\n description: designation.sydsg_description || '',\n type: 'designation',\n level: 0,\n expanded: false,\n hasChildren: false,\n children: [],\n status: designation.sydsg_isactive ?? true,\n grade_level: this.getGradeLevelName(designation.sydsg_grade_level_id_sydsgl || ''),\n parentId: null\n };\n \n departmentNodes.push(designationNode);\n });\n \n console.log('✅ Final hierarchical data:', departmentNodes);\n return departmentNodes;\n }\n\n /**\n * Build department hierarchy with parent-child relationships\n */\n private buildDepartmentHierarchy(departments: ICoreSydept[]): HierarchicalNode[] {\n const departmentMap = new Map<string, HierarchicalNode>();\n const rootDepartments: HierarchicalNode[] = [];\n \n // First pass: create all department nodes\n departments.forEach(department => {\n console.log(`🏢 Creating department node: ${department.sydept_name} (${department._id})`);\n \n const departmentNode: HierarchicalNode = {\n _id: `dept_${department._id || ''}`,\n name: department.sydept_name || '',\n code: department.sydept_code || '',\n description: department.sydept_description || '',\n type: 'department',\n level: 0, // Will be updated based on hierarchy\n expanded: true,\n hasChildren: false,\n children: [],\n status: department.sydept_isactive ?? true,\n grade_level: 'N/A',\n parentId: department.sydept_department_id_sydept ? `dept_${department.sydept_department_id_sydept}` : null\n };\n \n departmentMap.set(departmentNode._id, departmentNode);\n });\n \n // Second pass: build parent-child relationships\n departments.forEach(department => {\n const departmentNode = departmentMap.get(`dept_${department._id || ''}`);\n if (!departmentNode) return;\n \n if (department.sydept_department_id_sydept) {\n // This department has a parent\n const parentNode = departmentMap.get(`dept_${department.sydept_department_id_sydept}`);\n if (parentNode) {\n parentNode.children.push(departmentNode);\n parentNode.hasChildren = true;\n departmentNode.level = parentNode.level + 1;\n console.log(`📁 Added ${department.sydept_name} as child of ${parentNode.name} (level ${departmentNode.level})`);\n } else {\n // Parent not found, treat as root\n rootDepartments.push(departmentNode);\n console.log(`🏢 Added ${department.sydept_name} as root (parent not found)`);\n }\n } else {\n // This is a root department\n rootDepartments.push(departmentNode);\n console.log(`🏢 Added ${department.sydept_name} as root department`);\n }\n });\n \n console.log(`✅ Built department hierarchy with ${rootDepartments.length} root departments`);\n return rootDepartments;\n }\n\n /**\n * Add designations to their respective departments in the hierarchy\n */\n private addDesignationsToDepartments(departmentNodes: HierarchicalNode[], designations: ICoreSydsg[]): void {\n const addDesignationsToNode = (node: HierarchicalNode) => {\n // Find designations for this department\n const departmentId = node._id.replace('dept_', '');\n const departmentDesignations = designations.filter(designation => \n designation.sydsg_department_id_sydpt === departmentId\n );\n \n console.log(`📋 Found ${departmentDesignations.length} designations for department ${node.name}`);\n \n if (departmentDesignations.length > 0) {\n node.hasChildren = true;\n \n // Add designations as children\n departmentDesignations.forEach(designation => {\n console.log(`👔 Adding designation: ${designation.sydsg_name} under ${node.name}`);\n \n const designationNode: HierarchicalNode = {\n _id: designation._id || '',\n name: designation.sydsg_name || '',\n code: designation.sydsg_code || '',\n description: designation.sydsg_description || '',\n type: 'designation',\n level: node.level + 1,\n expanded: false,\n hasChildren: false,\n children: [],\n status: designation.sydsg_isactive ?? true,\n grade_level: this.getGradeLevelName(designation.sydsg_grade_level_id_sydsgl || ''),\n parentId: node._id\n };\n \n node.children.push(designationNode);\n });\n }\n \n // Recursively process child departments\n node.children.forEach(child => {\n if (child.type === 'department') {\n addDesignationsToNode(child);\n }\n });\n };\n \n // Process all root departments\n departmentNodes.forEach(node => {\n if (node.type === 'department') {\n addDesignationsToNode(node);\n }\n });\n }\n\n /**\n * Get grade level name by ID\n */\n private getGradeLevelName(gradeLevelId: string): string {\n console.log('🔍 getGradeLevelName called with ID:', gradeLevelId);\n console.log('📚 Available grade levels:', this.gradeLevels());\n \n const gradeLevel = this.gradeLevels().find(gl => gl._id === gradeLevelId);\n console.log('🎯 Found grade level:', gradeLevel);\n \n const result = gradeLevel ? (gradeLevel.sydsgl_name || 'N/A') : 'N/A';\n console.log('✅ Returning grade level name:', result);\n return result;\n }\n\n /**\n * Update grid data with hierarchical structure\n */\n private updateGridData(designations: ICoreSydsg[]): void {\n console.log('🔄 updateGridData called with:', designations);\n console.log('📚 Current grade levels:', this.gradeLevels());\n console.log('🏢 Current departments:', this.departments());\n \n const hierarchicalData = this.buildHierarchicalData();\n \n // Flatten the hierarchical data for the grid component\n const flattenedData = this.flattenHierarchicalData(hierarchicalData);\n \n console.log('📊 Flattened data for grid:', flattenedData);\n \n this.gridConfig.update(config => {\n const newConfig = {\n ...config,\n data: flattenedData\n };\n console.log('⚙️ Updated grid config with flattened data:', flattenedData);\n return newConfig;\n });\n }\n\n /**\n * Flatten hierarchical data for grid display\n */\n private flattenHierarchicalData(nodes: HierarchicalNode[]): HierarchicalNode[] {\n const flattened: HierarchicalNode[] = [];\n \n const flattenNode = (node: HierarchicalNode) => {\n flattened.push(node);\n if (node.children && node.children.length > 0) {\n node.children.forEach(child => flattenNode(child));\n }\n };\n \n nodes.forEach(node => flattenNode(node));\n return flattened;\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ICoreSydsg>): void {\n console.log('onGridEvent', event);\n switch (event.type) {\n case 'search':\n this.searchTerm.set(event.data as string);\n this.currentPage.set(1);\n this.loadDesignations();\n break;\n case 'pageChange': {\n const pageData = event.data as { page: number; pageSize: number };\n if (pageData) {\n this.currentPage.set(pageData.page);\n this.pageSize.set(pageData.pageSize);\n this.loadDesignations();\n } else {\n const page = event.data as number;\n if (page) {\n this.currentPage.set(page);\n this.loadDesignations();\n }\n }\n break;\n }\n case 'refresh':\n this.onDesignationRefresh();\n break;\n case 'rowClick':\n this.onDesignationRowClick(event.data as ICoreSydsg);\n break;\n case 'action':\n if (event.action?.key === 'edit') {\n this.editDesignation(event.data as string);\n } else if (event.action?.key === 'toggle') {\n this.toggleDesignationStatus(event.data as string);\n } else if (event.action?.key === 'delete') {\n this.deleteDesignation(event.data as string);\n }\n break;\n }\n }\n\n /**\n * Handle designation refresh\n */\n onDesignationRefresh(): void {\n this.loadDesignations();\n }\n\n /**\n * Handle designation row click\n */\n onDesignationRowClick(designation: ICoreSydsg): void {\n this.editDesignation(designation._id || '');\n }\n\n /**\n * Navigate to edit designation form\n */\n editDesignation(itemId: string): void {\n console.log('🔵 editDesignation called with:', itemId);\n this.isEditMode.set(true);\n this.getDesignationById(itemId);\n }\n\n /**\n * Get designation by ID using the API\n */\n getDesignationById(itemId: string): void {\n console.log('🔵 getDesignationById called with:', itemId);\n this.loading.set(true);\n\n this.designationService.getDesignationById(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Designation retrieved successfully:', response.data);\n let designation: ICoreSydsg | null = null;\n designation = response.data || null;\n\n this.retrievedDesignation.set(designation);\n\n if (this.isEditMode() && designation) {\n this.populateFormForEdit(designation);\n }\n } else {\n this.error.set('Failed to retrieve designation');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while retrieving the designation');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Populate form with designation data for editing\n */\n populateFormForEdit(designation: ICoreSydsg): void {\n console.log('🔵 populateFormForEdit called with:', designation);\n\n this.quickAddForm.patchValue({\n sydsg_name: designation.sydsg_name || '',\n sydsg_code: designation.sydsg_code || '',\n sydsg_description: designation.sydsg_description || '',\n sydsg_prent_id_desg: designation.sydsg_prent_id_desg || '',\n sydsg_department_id_sydpt: designation.sydsg_department_id_sydpt || '',\n sydsg_grade_level_id_sydsgl: designation.sydsg_grade_level_id_sydsgl || '',\n sydsg_isactive: designation.sydsg_isactive ?? true,\n desg_entity_id_syen: designation.desg_entity_id_syen || ''\n });\n\n if (designation.sydsg_prent_id_desg) {\n const parentDesignation = this.designations().find(item => item._id === designation.sydsg_prent_id_desg);\n if (parentDesignation) {\n this.selectedParentDesignation.set(parentDesignation);\n }\n }\n\n if (designation.sydsg_department_id_sydpt) {\n const parentDepartment = this.departments().find(item => item._id === designation.sydsg_department_id_sydpt);\n if (parentDepartment) {\n this.selectedParentDepartment.set(parentDepartment);\n }\n }\n\n console.log('✅ Form populated for editing:', this.quickAddForm.value);\n }\n\n /**\n * Delete designation\n */\n deleteDesignation(itemId: string): void {\n console.log('🔵 deleteDesignation called with:', itemId);\n if (confirm('Are you sure you want to delete this designation?')) {\n this.loading.set(true);\n\n this.designationService.deleteDesignation(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadDesignations();\n } else {\n this.error.set('Failed to delete designation');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while deleting the designation');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n }\n\n /**\n * Toggle designation status\n */\n toggleDesignationStatus(itemId: string): void {\n console.log('🔵 toggleDesignationStatus called with:', itemId);\n this.loading.set(true);\n\n this.designationService.toggleDesignationStatus(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadDesignations();\n } else {\n this.error.set('Failed to toggle designation status');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while toggling status');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Quick add or update designation using reactive form\n */\n quickAddDesignation() {\n if (this.quickAddForm.invalid) {\n console.log('❌ Form is invalid:', this.quickAddForm.errors);\n return;\n }\n\n const formValue = this.quickAddForm.value;\n\n // Create payload according to MDesignationInsertUpdatePayload model\n const designation: Partial<ICoreSydsg> = {\n _id: this.retrievedDesignation()?._id || '',\n sydsg_name: formValue.sydsg_name,\n sydsg_code: formValue.sydsg_code,\n sydsg_description: formValue.sydsg_description || '',\n sydsg_prent_id_desg: formValue.sydsg_prent_id_desg || undefined,\n sydsg_department_id_sydpt: formValue.sydsg_department_id_sydpt,\n sydsg_grade_level_id_sydsgl: formValue.sydsg_grade_level_id_sydsgl,\n sydsg_isactive: formValue.sydsg_isactive,\n desg_entity_id_syen: formValue.desg_entity_id_syen\n };\n\n // Validate required fields according to model\n if (!designation.sydsg_name || !designation.sydsg_code || !designation.sydsg_department_id_sydpt || \n !designation.sydsg_grade_level_id_sydsgl || !designation.desg_entity_id_syen) {\n this.error.set('Please fill in all required fields');\n return;\n }\n\n if (this.isEditMode() && this.retrievedDesignation()) {\n const itemId = this.retrievedDesignation()?._id;\n if (itemId) {\n console.log('🔵 Updating designation:', itemId, designation);\n this.designationService.updateDesignation(itemId, designation).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Designation updated successfully');\n this.resetQuickAddForm();\n this.isEditMode.set(false);\n this.retrievedDesignation.set(null);\n this.loadDesignations();\n } else {\n this.error.set(response.message || 'Failed to update designation');\n }\n },\n error: (err) => {\n console.error('❌ Error updating designation:', err);\n this.error.set(err.message || 'Failed to update designation');\n }\n });\n }\n } else {\n console.log('🔵 Creating new designation:', designation);\n this.designationService.createDesignation(designation).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Designation created successfully');\n this.resetQuickAddForm();\n this.loadDesignations();\n } else {\n this.error.set(response.message || 'Failed to create designation');\n }\n },\n error: (err) => {\n console.error('❌ Error creating designation:', err);\n this.error.set(err.message || 'Failed to create designation');\n }\n });\n }\n }\n\n /**\n * Reset the quick add form to default values\n */\n resetQuickAddForm(): void {\n this.selectedParentDesignation.set(null);\n this.selectedParentDepartment.set(null);\n this.isEditMode.set(false);\n this.retrievedDesignation.set(null);\n\n this.quickAddForm.reset({\n sydsg_name: '',\n sydsg_code: '',\n sydsg_description: '',\n sydsg_prent_id_desg: '',\n sydsg_department_id_sydpt: '',\n sydsg_grade_level_id_sydsgl: '',\n sydsg_isactive: true,\n desg_entity_id_syen: this.appState.getActiveEntityId() || ''\n });\n\n // Clear any previous errors\n this.error.set(null);\n }\n\n /**\n * Handle adding a child designation\n */\n onAddChild(parentItem: ICoreSydsg): void {\n console.log('🔵 onAddChild called with:', parentItem);\n console.log('🔵 Parent name:', parentItem.sydsg_name);\n\n // Clear edit mode and retrieved item when adding a child\n this.isEditMode.set(false);\n this.retrievedDesignation.set(null);\n\n // Set the selected parent item first using signal\n this.selectedParentDesignation.set(parentItem);\n console.log('🔵 selectedParentDesignation set to:', this.selectedParentDesignation());\n\n // Update form with parent context (don't call resetQuickAddForm as it clears the parent)\n this.quickAddForm.patchValue({\n sydsg_name: '',\n sydsg_code: '',\n sydsg_description: '',\n sydsg_prent_id_desg: parentItem._id,\n sydsg_department_id_sydpt: parentItem.sydsg_department_id_sydpt || '', // Inherit department from parent\n sydsg_grade_level_id_sydsgl: '',\n sydsg_isactive: true,\n desg_entity_id_syen: this.appState.getActiveEntityId() || ''\n });\n\n // If parent has a department, set it as selected\n if (parentItem.sydsg_department_id_sydpt) {\n const parentDepartment = this.departments().find(d => d._id === parentItem.sydsg_department_id_sydpt);\n if (parentDepartment) {\n this.selectedParentDepartment.set(parentDepartment);\n }\n }\n\n console.log('🔵 Form updated, parent should be visible:', this.selectedParentDesignation()?.sydsg_name);\n }\n\n /**\n * Clear selected parent designation\n */\n clearSelectedParent() {\n this.selectedParentDesignation.set(null);\n this.quickAddForm.patchValue({\n sydsg_prent_id_desg: ''\n });\n }\n\n /**\n * Clear selected parent department\n */\n clearSelectedParentDepartment() {\n this.selectedParentDepartment.set(null);\n this.quickAddForm.patchValue({\n sydsg_department_id_sydpt: ''\n });\n }\n\n /**\n * Handle department selection\n */\n onDepartmentSelect(department: ICoreSydept): void {\n console.log('🔵 onDepartmentSelect called with:', department);\n this.selectedParentDepartment.set(department);\n this.quickAddForm.patchValue({\n sydsg_department_id_sydpt: department._id\n });\n }\n\n /**\n * Handle click outside dropdown\n */\n private handleClickOutside(event: Event): void {\n const target = event.target as HTMLElement;\n\n if (!target?.closest('[data-dropdown]') && !target?.closest('[data-action=\"more-actions\"]')) {\n document.querySelectorAll('[data-dropdown]').forEach((el: Element) => {\n const dropdown = el as HTMLElement;\n dropdown.classList.add('tw-hidden');\n });\n\n document.querySelectorAll('[data-action=\"more-actions\"]').forEach((el: Element) => {\n const button = el as HTMLElement;\n button.setAttribute('aria-expanded', 'false');\n });\n }\n }\n\n /**\n * Handle dropdown action clicks\n */\n private handleDropdownAction(event: Event): void {\n const target = event.target as HTMLElement;\n const actionButton = target.closest('[data-action]') as HTMLElement;\n\n if (actionButton) {\n const action = actionButton.getAttribute('data-action');\n const itemId = actionButton.getAttribute('data-item-id');\n\n if (action && itemId) {\n event.preventDefault();\n event.stopPropagation();\n\n const dropdown = actionButton.closest('[data-dropdown]') as HTMLElement;\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n switch (action) {\n case 'edit':\n this.editDesignation(itemId);\n break;\n case 'toggle':\n this.toggleDesignationStatus(itemId);\n break;\n case 'delete':\n this.deleteDesignation(itemId);\n break;\n }\n }\n }\n }\n\n /**\n * Toggle dropdown visibility\n */\n toggleDropdown(itemId: string) {\n document.querySelectorAll('.dropdown-menu').forEach(menu => {\n if (menu.getAttribute('data-dropdown') !== itemId) {\n menu.classList.add('tw-hidden');\n }\n });\n\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.toggle('tw-hidden');\n }\n }\n\n /**\n * Handle designation action clicks\n */\n handleDesignationAction(action: string, itemId: string) {\n const item = this.designations().find(item => item._id === itemId);\n if (!item) return;\n\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n switch (action) {\n case 'edit':\n this.editDesignation(itemId);\n break;\n case 'toggle':\n this.toggleDesignationStatus(itemId);\n break;\n case 'delete':\n this.deleteDesignation(itemId);\n break;\n }\n }\n\n /**\n * Get status display\n */\n getStatusDisplay(isActive: boolean): string {\n return isActive ? 'Active' : 'Inactive';\n }\n\n /**\n * Get status class for styling\n */\n getStatusClass(isActive: boolean): string {\n return isActive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800';\n }\n\n /**\n * Generate dropdown items for designation actions\n */\n getDropdownItems(row: HierarchicalNode): DropdownItem[] {\n // Handle hierarchical data structure\n if (row.type === 'department') {\n return [\n {\n id: 'addDesignation',\n label: 'Add Designation',\n icon: 'add',\n iconColor: 'tw-text-blue-400',\n textColor: 'tw-text-blue-600',\n hoverBgColor: 'hover:tw-bg-blue-50'\n }\n ];\n } else {\n // For designations\n return [\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'addChild',\n label: 'Add Child',\n icon: 'add',\n iconColor: 'tw-text-blue-400',\n textColor: 'tw-text-blue-600',\n hoverBgColor: 'hover:tw-bg-blue-50'\n },\n {\n id: 'toggle',\n label: row.status ? 'Deactivate' : 'Activate',\n icon: 'power_settings_new',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n iconColor: 'tw-text-red-400',\n textColor: 'tw-text-red-600',\n hoverBgColor: 'hover:tw-bg-red-50'\n }\n ];\n }\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, row: HierarchicalNode): void {\n console.log('🔵 onDropdownItemClick called with:', item, row);\n\n switch (item.id) {\n case 'edit':\n if (row.type === 'designation') {\n this.editDesignation(row._id);\n }\n break;\n case 'addChild':\n if (row.type === 'designation') {\n // Find the original designation object\n const designation = this.designations().find(d => d._id === row._id);\n if (designation) {\n this.onAddChild(designation);\n }\n }\n break;\n case 'addDesignation':\n if (row.type === 'department') {\n // Extract department ID from the prefixed ID\n const departmentId = row._id.replace('dept_', '');\n const department = this.departments().find(d => d._id === departmentId);\n if (department) {\n console.log('🔵 Adding designation to department:', department.sydept_name);\n this.onDepartmentSelect(department);\n // Reset form to add mode\n this.isEditMode.set(false);\n this.retrievedDesignation.set(null);\n this.selectedParentDesignation.set(null);\n this.resetQuickAddForm();\n }\n }\n break;\n case 'toggle':\n if (row.type === 'designation') {\n this.toggleDesignationStatus(row._id);\n }\n break;\n case 'delete':\n if (row.type === 'designation') {\n this.deleteDesignation(row._id);\n }\n break;\n default:\n console.log('🔵 Unknown action:', item.id);\n }\n\n this.closeAllDropdowns();\n }\n\n /**\n * Close all dropdowns\n */\n private closeAllDropdowns(): void {\n const event = new MouseEvent('click', { bubbles: true });\n document.dispatchEvent(event);\n }\n\n /**\n * Track by function for ngFor\n */\n trackByItemId(index: number, item: ICoreSydsg): string {\n return item._id || '';\n }\n} ","<!-- Designation List Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Quick Add Form Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Designation' : 'Quick Add Designation' }}</h6>\n </div>\n @if (selectedParentDesignation()) {\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child under:' }}</span>\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ selectedParentDesignation()?.sydsg_name }}</span>\n </div>\n <button \n cideEleButton \n variant=\"ghost\" \n size=\"xs\" \n type=\"button\" \n (click)=\"clearSelectedParent()\" \n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\n <svg class=\"tw-w-4 tw-h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"/>\n </svg>\n </button>\n </div>\n }\n @if (selectedParentDepartment()) {\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-green-50 tw-border tw-border-green-200 tw-px-4 tw-py-1 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-green-600 tw-w-4 tw-h-4\">business</cide-ele-icon>\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <span class=\"tw-text-sm tw-text-green-600 tw-font-medium\">{{ isEditMode() ? 'Department:' : 'Department:' }}</span>\n <span class=\"tw-text-sm tw-text-green-800 tw-font-semibold\">{{ selectedParentDepartment()?.sydept_name }}</span>\n </div>\n <button \n cideEleButton \n variant=\"ghost\" \n size=\"xs\" \n type=\"button\" \n (click)=\"clearSelectedParentDepartment()\" \n class=\"tw-text-green-400 hover:tw-text-green-600\">\n <svg class=\"tw-w-4 tw-h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"/>\n </svg>\n </button>\n </div>\n }\n </div>\n \n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddDesignation()\">\n <!-- First Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-5 tw-gap-3 tw-mb-3\">\n <!-- Designation Name -->\n <div>\n <cide-ele-input \n id=\"sydsg_name\" \n label=\"Name*\" \n formControlName=\"sydsg_name\"\n placeholder=\"Designation name\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Designation Code -->\n <div>\n <cide-ele-input \n id=\"sydsg_code\" \n label=\"Code*\" \n formControlName=\"sydsg_code\"\n placeholder=\"DESG001\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Grade Level -->\n <div>\n <cide-ele-select \n id=\"sydsg_grade_level_id_sydsgl\"\n label=\"Grade Level*\" \n [options]=\"gradeLevelOptions()\" \n formControlName=\"sydsg_grade_level_id_sydsgl\"\n placeholder=\"Select grade level\"\n size=\"sm\">\n </cide-ele-select>\n </div>\n \n <!-- Department -->\n <div>\n <cide-ele-select \n id=\"sydsg_department_id_sydpt\"\n label=\"Department*\" \n [options]=\"departmentOptions()\" \n formControlName=\"sydsg_department_id_sydpt\"\n placeholder=\"Select department\"\n size=\"sm\">\n </cide-ele-select>\n </div>\n \n <!-- Active Status -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <cide-ele-input \n id=\"sydsg_isactive\"\n type=\"checkbox\"\n label=\"Active\"\n formControlName=\"sydsg_isactive\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n \n <!-- Second Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\n <!-- Description -->\n <div>\n <cide-ele-textarea \n id=\"sydsg_description\" \n label=\"Description\" \n formControlName=\"sydsg_description\"\n placeholder=\"Designation description\"\n rows=\"2\"\n size=\"sm\">\n </cide-ele-textarea>\n </div>\n \n <!-- Entity ID (Hidden) -->\n <div class=\"tw-hidden\">\n <cide-ele-input \n id=\"desg_entity_id_syen\" \n label=\"Entity ID*\" \n formControlName=\"desg_entity_id_syen\"\n placeholder=\"Entity ID\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <div class=\"tw-flex tw-space-x-2\">\n <button \n cideEleButton \n variant=\"primary\" \n size=\"sm\" \n type=\"submit\"\n [disabled]=\"quickAddForm.invalid\"\n class=\"tw-px-2 tw-py-1 tw-w-20\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n {{ isEditMode() ? 'Update' : 'Add' }}\n </button>\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\"\n (click)=\"resetQuickAddForm()\"\n class=\"tw-px-2 tw-py-1 tw-w-16\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\n Reset\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n\n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">work</cide-ele-icon>\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Designation Management</h5>\n </div>\n\n <!-- Actions -->\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Search functionality is handled by the data grid -->\n </div>\n </div>\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n \n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n \n <cide-ele-data-grid \n [config]=\"gridConfig()\" \n [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\"\n [serverSidePagination]=\"true\" \n [totalServerItems]=\"totalItems()\" \n [currentServerPage]=\"currentPage()\"\n [currentServerPageSize]=\"pageSize()\" \n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Designation Details Renderer Template -->\n<ng-template #designationDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\n <!-- Dynamic Icon based on type -->\n <div class=\"tw-flex-shrink-0\">\n <cide-ele-icon \n [class]=\"row.type === 'department' ? 'tw-text-green-500' : 'tw-text-blue-500'\" \n size=\"xs\">\n {{ row.type === 'department' ? 'business' : 'work' }}\n </cide-ele-icon>\n </div>\n \n <!-- Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \n [title]=\"row.name\">\n {{ row.name || 'Untitled' }}\n </div>\n @if (row.type === 'department') {\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\n Department\n </span>\n }\n </div>\n @if (row.description) {\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \n [title]=\"row.description\">\n {{ row.description }}\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- Designation Status Renderer Template -->\n<ng-template #designationStatusRendererTemplate let-row=\"row\" let-value=\"value\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\n [ngClass]=\"getStatusClass(row.status)\">\n {{ getStatusDisplay(row.status) }}\n </span>\n</ng-template>\n\n<!-- Actions Dropdown Renderer Template -->\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown \n [items]=\"getDropdownItems(row)\"\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template> ","// Designation Management Components\r\nexport * from './components/designation-list/designation-list.component';\r\n\r\n// Designation Management Services\r\nexport * from './services/designation-management.service'; ","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Validators, ReactiveFormsModule, NonNullableFormBuilder, FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ICoreSydsgl } from 'cloud-ide-lms-model';\nimport { GradeLevelManagementService } from '../../services/grade-level-management.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideEleDataGridComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\n\n@Component({\n selector: 'cide-core-app-grade-level-list',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n CideInputComponent,\n CideSelectComponent,\n CideTextareaComponent,\n CideIconComponent,\n CideEleDropdownComponent\n ],\n templateUrl: './grade-level-list.component.html',\n styleUrls: []\n})\nexport class GradeLevelListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private gradeLevelService = inject(GradeLevelManagementService);\n private appState = inject(AppStateHelperService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n dragHandleRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('dragHandleRendererTemplate');\n gradeLevelDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('gradeLevelDetailsRendererTemplate');\n gradeLevelStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('gradeLevelStatusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('actionsDropdownRendererTemplate');\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n gradeLevels = signal<ICoreSydsgl[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Retrieved grade level data\n retrievedGradeLevel = signal<ICoreSydsgl | null>(null);\n\n // Edit mode flag\n isEditMode = signal(false);\n\n // Drag order management\n originalOrder = signal<ICoreSydsgl[]>([]);\n hasOrderChanged = signal(false);\n\n // Server-side pagination state\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n\n // Modern reactive form with typed controls\n quickAddForm = this.fb.group({\n sydsgl_name: this.fb.control('', [Validators.required, Validators.minLength(1), Validators.maxLength(20)]),\n sydsgl_description: this.fb.control('', [Validators.maxLength(400)]),\n sydsgl_order: this.fb.control(1, [Validators.required, Validators.min(1), Validators.max(100)]),\n sydsgl_isactive: this.fb.control(true, [Validators.required]),\n sydsgl_entity_id_syen: this.fb.control(this.appState.getActiveEntityId() || '', [Validators.required])\n });\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ICoreSydsgl>>({\n id: 'grade-level-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'dragHandle',\n header: '',\n type: 'custom',\n width: '40px',\n truncate: false,\n align: 'center',\n renderer: 'dragHandleRenderer'\n },\n {\n key: 'details',\n header: 'Grade Level',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'gradeLevelDetailsRenderer'\n },\n {\n key: 'sydsgl_isactive',\n header: 'Status',\n type: 'custom',\n width: '100px',\n truncate: false,\n align: 'center',\n renderer: 'gradeLevelStatusRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '60px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n dragDrop: {\n enabled: true,\n orderField: 'sydsgl_order',\n dragClass: 'tw-opacity-50 tw-bg-blue-50',\n dropClass: 'tw-bg-green-50'\n },\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search grade levels...',\n searchableColumns: ['sydsgl_name', 'sydsgl_description'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none',\n onRefresh: 'onGradeLevelRefresh'\n });\n\n // Template renderers using Angular best practices\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n dragHandleRenderer: this.dragHandleRendererTemplate(),\n gradeLevelDetailsRenderer: this.gradeLevelDetailsRendererTemplate(),\n gradeLevelStatusRenderer: this.gradeLevelStatusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\n\n /**\n * Get template renderers for data grid\n */\n getTemplateRenderers(): Record<string, TemplateRef<TemplateContext>> {\n return this.templateRenderers();\n }\n\n // Mixed renderers (templates + string functions)\n customRenderers = computed(() => ({\n ...this.templateRenderers()\n }));\n\n /**\n * Get custom renderers adapted for current data grid compatibility\n */\n getCustomRenderers(): Record<string, (value: unknown, row: ICoreSydsgl) => string> {\n return {};\n }\n\n // Action handlers for grid actions\n actionHandlers = {\n onEditGradeLevel: (row: ICoreSydsgl) => this.editGradeLevel(row._id || ''),\n onToggleGradeLevel: (row: ICoreSydsgl) => this.toggleGradeLevelStatus(row._id || ''),\n onDeleteGradeLevel: (row: ICoreSydsgl) => this.deleteGradeLevel(row._id || ''),\n onGradeLevelRowClick: (row: ICoreSydsgl) => this.onGradeLevelRowClick(row),\n onGradeLevelRefresh: () => this.onGradeLevelRefresh(),\n resetOrder: () => this.resetDragOrder(),\n saveOrder: () => this.saveGradeLevelOrder()\n };\n\n // Computed properties\n filteredItems = computed(() => {\n const items = this.gradeLevels();\n const search = this.searchTerm()?.toLowerCase();\n\n if (!search) return items;\n\n return items.filter(item => {\n return item.sydsgl_name?.toLowerCase().includes(search) ||\n item.sydsgl_description?.toLowerCase().includes(search);\n });\n });\n\n hasSelection = computed(() => this.selectedItems().length > 0);\n\n // Pagination computed properties\n totalPages = computed(() => Math.ceil(this.totalItems() / this.pageSize()));\n hasNextPage = computed(() => this.currentPage() < this.totalPages());\n hasPreviousPage = computed(() => this.currentPage() > 1);\n\n // Computed property for next order\n nextOrder = computed(() => this.calculateNextOrder());\n\n // Modern constructor with effects for initialization\n constructor() {\n this.initializeComponent();\n this.destroyRef.onDestroy(() => {\n this.cleanupEventListeners();\n });\n }\n\n /**\n * Initialize component with modern patterns\n */\n private initializeComponent(): void {\n console.log('GradeLevelListComponent initialized with modern Angular patterns');\n this.loadGradeLevels();\n this.setupEventListeners();\n this.exposeGlobalFunctions();\n }\n\n /**\n * Setup event listeners for dropdown interactions\n */\n private setupEventListeners(): void {\n document.addEventListener('click', this.handleClickOutside.bind(this));\n document.addEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Cleanup event listeners\n */\n private cleanupEventListeners(): void {\n document.removeEventListener('click', this.handleClickOutside.bind(this));\n document.removeEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Expose global functions for dropdown interactions\n */\n private exposeGlobalFunctions(): void {\n if (typeof window !== 'undefined') {\n (window as unknown as { toggleDropdown: (id: string) => void }).toggleDropdown = this.toggleDropdown.bind(this);\n (window as unknown as { handleGradeLevelAction: (action: string, id: string) => void }).handleGradeLevelAction = this.handleGradeLevelAction.bind(this);\n }\n }\n\n /**\n * Load grade levels from service\n */\n loadGradeLevels(): void {\n console.log('🚀 GradeLevelListComponent.loadGradeLevels() called');\n this.loading.set(true);\n this.error.set(null);\n\n const requestBody = {\n total: this.totalItems(),\n pageIndex: this.currentPage(),\n pageSize: this.pageSize(),\n query: this.searchTerm()\n };\n console.log('📋 Request body:', requestBody);\n\n if (!this.gradeLevelService) {\n console.error('❌ GradeLevelService is not available');\n this.error.set('Grade level service is not available');\n this.loading.set(false);\n return;\n }\n\n this.gradeLevelService.getGradeLevelList(requestBody)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('📥 GradeLevelListComponent received response:', response);\n if (response?.success) {\n console.log('✅ Response successful, setting grade levels:', response.data);\n const gradeLevelData = response?.data || [];\n this.gradeLevels.set(gradeLevelData);\n this.totalItems.set(response.total || 0);\n this.updateGridData(gradeLevelData);\n \n // Update the order field in the form if not in edit mode\n if (!this.isEditMode()) {\n const nextOrder = this.calculateNextOrder();\n this.quickAddForm.patchValue({ sydsgl_order: nextOrder });\n }\n } else {\n console.error('❌ Response was not successful:', response);\n this.error.set('Failed to load grade levels');\n }\n },\n error: (err) => {\n console.error('❌ GradeLevelListComponent error:', err);\n this.error.set(err.message || 'An error occurred while loading grade levels');\n },\n complete: () => {\n console.log('GradeLevelListComponent loadGradeLevels completed');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(gradeLevels: ICoreSydsgl[]): void {\n console.log('🔄 updateGridData called with:', gradeLevels);\n \n this.gridConfig.update(config => {\n const newConfig = {\n ...config,\n data: gradeLevels\n };\n console.log('⚙️ Updated grid config with grade levels');\n return newConfig;\n });\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ICoreSydsgl>): void {\n console.log('onGridEvent', event);\n switch (event.type) {\n case 'search':\n this.searchTerm.set(event.data as string);\n this.currentPage.set(1);\n this.loadGradeLevels();\n break;\n case 'pageChange': {\n const pageData = event.data as { page: number; pageSize: number };\n if (pageData) {\n this.currentPage.set(pageData.page);\n this.pageSize.set(pageData.pageSize);\n this.loadGradeLevels();\n } else {\n const page = event.data as number;\n if (page) {\n this.currentPage.set(page);\n this.loadGradeLevels();\n }\n }\n break;\n }\n case 'refresh':\n this.onGradeLevelRefresh();\n break;\n case 'rowClick':\n this.onGradeLevelRowClick(event.data as ICoreSydsgl);\n break;\n case 'rowReorder':\n this.onGradeLevelReorder(event.data as { sourceIndex: number; targetIndex: number; newOrder: ICoreSydsgl[] });\n break;\n case 'action':\n if (event.action?.key === 'edit') {\n this.editGradeLevel(event.data as string);\n } else if (event.action?.key === 'toggle') {\n this.toggleGradeLevelStatus(event.data as string);\n } else if (event.action?.key === 'delete') {\n this.deleteGradeLevel(event.data as string);\n }\n break;\n }\n }\n\n /**\n * Handle grade level refresh\n */\n onGradeLevelRefresh(): void {\n this.loadGradeLevels();\n }\n\n /**\n * Handle grade level reorder via drag and drop\n */\n onGradeLevelReorder(data: { sourceIndex: number; targetIndex: number; newOrder: ICoreSydsgl[] }): void {\n console.log('🔄 Grade level reorder event:', data);\n\n // Save original order if not already saved\n if (this.originalOrder().length === 0) {\n this.originalOrder.set([...this.gradeLevels()]);\n }\n\n // Update the displayed data with new order\n const updatedItems = data.newOrder.map((item, index) => ({\n ...item,\n sydsgl_order: index + 1\n }));\n \n this.gradeLevels.set(updatedItems);\n\n // Mark that order has changed\n this.hasOrderChanged.set(true);\n\n // Update grid data\n this.updateGridDataAfterReorder();\n console.log('Updated gradeLevels:', this.gradeLevels());\n }\n\n /**\n * Update grid data after reordering\n */\n private updateGridDataAfterReorder() {\n const currentConfig = this.gridConfig();\n this.gridConfig.set({\n ...currentConfig,\n data: this.gradeLevels()\n });\n }\n\n /**\n * Save grade level order\n */\n saveGradeLevelOrder() {\n console.log('💾 Saving grade level order...');\n \n // Send updates to the server for each item that changed order\n const promises = this.gradeLevels().map(item => {\n return this.gradeLevelService.updateGradeLevel(item._id || '', {\n sydsgl_order: item.sydsgl_order\n }).toPromise();\n });\n\n // Wait for all updates to complete\n Promise.all(promises)\n .then(() => {\n console.log('✅ All grade level orders updated successfully');\n // Update original order and reset change flag\n this.originalOrder.set([...this.gradeLevels()]);\n this.hasOrderChanged.set(false);\n })\n .catch((error) => {\n console.error('❌ Error updating grade level orders:', error);\n this.error.set('Failed to update grade level order');\n });\n }\n\n /**\n * Reset drag order to original state\n */\n resetDragOrder() {\n console.log('🔄 Resetting drag order to original state');\n\n // Restore the original order\n const originalItems = this.originalOrder();\n if (originalItems.length > 0) {\n this.gradeLevels.set([...originalItems]);\n this.updateGridDataAfterReorder();\n }\n\n // Reset the change flag\n this.hasOrderChanged.set(false);\n\n console.log('✅ Drag order reset successfully');\n }\n\n /**\n * Check if order has changed\n */\n hasOrderChanges(): boolean {\n return this.hasOrderChanged();\n }\n\n /**\n * Handle grade level row click\n */\n onGradeLevelRowClick(gradeLevel: ICoreSydsgl): void {\n this.editGradeLevel(gradeLevel._id || '');\n }\n\n /**\n * Navigate to edit grade level form\n */\n editGradeLevel(itemId: string): void {\n console.log('🔵 editGradeLevel called with:', itemId);\n this.isEditMode.set(true);\n this.getGradeLevelById(itemId);\n }\n\n /**\n * Get grade level by ID using the API\n */\n getGradeLevelById(itemId: string): void {\n console.log('🔵 getGradeLevelById called with:', itemId);\n this.loading.set(true);\n\n this.gradeLevelService.getGradeLevelById(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Grade level retrieved successfully:', response.data);\n let gradeLevel: ICoreSydsgl | null = null;\n gradeLevel = response.data || null;\n\n this.retrievedGradeLevel.set(gradeLevel);\n\n if (this.isEditMode() && gradeLevel) {\n this.populateFormForEdit(gradeLevel);\n }\n } else {\n this.error.set('Failed to retrieve grade level');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while retrieving the grade level');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Populate form with grade level data for editing\n */\n populateFormForEdit(gradeLevel: ICoreSydsgl): void {\n console.log('🔵 populateFormForEdit called with:', gradeLevel);\n\n this.quickAddForm.patchValue({\n sydsgl_name: gradeLevel.sydsgl_name || '',\n sydsgl_description: gradeLevel.sydsgl_description || '',\n sydsgl_order: gradeLevel.sydsgl_order || 1,\n sydsgl_isactive: gradeLevel.sydsgl_isactive ?? true,\n sydsgl_entity_id_syen: gradeLevel.sydsgl_entity_id_syen || ''\n });\n\n console.log('✅ Form populated for editing:', this.quickAddForm.value);\n }\n\n /**\n * Delete grade level\n */\n deleteGradeLevel(itemId: string): void {\n console.log('🔵 deleteGradeLevel called with:', itemId);\n if (confirm('Are you sure you want to delete this grade level?')) {\n this.loading.set(true);\n\n this.gradeLevelService.deleteGradeLevel(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadGradeLevels();\n } else {\n this.error.set('Failed to delete grade level');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while deleting the grade level');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n }\n\n /**\n * Toggle grade level status\n */\n toggleGradeLevelStatus(itemId: string): void {\n console.log('🔵 toggleGradeLevelStatus called with:', itemId);\n this.loading.set(true);\n\n this.gradeLevelService.toggleGradeLevelStatus(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadGradeLevels();\n } else {\n this.error.set('Failed to toggle grade level status');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while toggling status');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Quick add or update grade level using reactive form\n */\n quickAddGradeLevel() {\n if (this.quickAddForm.invalid) return;\n\n const formValue = this.quickAddForm.value;\n\n // For new grade levels, ensure the order is set to the calculated next order\n let order = formValue.sydsgl_order;\n if (!this.isEditMode()) {\n order = this.calculateNextOrder();\n }\n\n const gradeLevel: Partial<ICoreSydsgl> = {\n _id: this.retrievedGradeLevel()?._id || '',\n sydsgl_name: formValue.sydsgl_name,\n sydsgl_description: formValue.sydsgl_description || '',\n sydsgl_order: order,\n sydsgl_isactive: formValue.sydsgl_isactive,\n sydsgl_entity_id_syen: formValue.sydsgl_entity_id_syen\n };\n\n if (this.isEditMode() && this.retrievedGradeLevel()) {\n const itemId = this.retrievedGradeLevel()?._id;\n if (itemId) {\n console.log('🔵 Updating grade level:', itemId);\n this.gradeLevelService.updateGradeLevel(itemId, gradeLevel).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Grade level updated successfully');\n this.resetQuickAddForm();\n this.isEditMode.set(false);\n this.retrievedGradeLevel.set(null);\n this.loadGradeLevels();\n }\n },\n error: () => {\n this.error.set('Failed to update grade level');\n }\n });\n }\n } else {\n console.log('🔵 Creating new grade level');\n this.gradeLevelService.createGradeLevel(gradeLevel).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Grade level created successfully');\n this.resetQuickAddForm();\n this.loadGradeLevels();\n }\n },\n error: () => {\n this.error.set('Failed to create grade level');\n }\n });\n }\n }\n\n /**\n * Calculate the highest order from existing grade levels\n */\n private calculateNextOrder(): number {\n const currentGradeLevels = this.gradeLevels();\n if (currentGradeLevels.length === 0) {\n return 1;\n }\n \n const maxOrder = Math.max(...currentGradeLevels.map(level => level.sydsgl_order || 0));\n return maxOrder + 1;\n }\n\n /**\n * Reset the quick add form to default values\n */\n resetQuickAddForm(): void {\n this.isEditMode.set(false);\n this.retrievedGradeLevel.set(null);\n\n // Calculate the next order automatically\n const nextOrder = this.calculateNextOrder();\n\n this.quickAddForm.reset({\n sydsgl_name: '',\n sydsgl_description: '',\n sydsgl_order: nextOrder,\n sydsgl_isactive: true,\n sydsgl_entity_id_syen: this.appState.getActiveEntityId() || ''\n });\n }\n\n /**\n * Handle click outside dropdown\n */\n private handleClickOutside(event: Event): void {\n const target = event.target as HTMLElement;\n\n if (!target?.closest('[data-dropdown]') && !target?.closest('[data-action=\"more-actions\"]')) {\n document.querySelectorAll('[data-dropdown]').forEach((el: Element) => {\n const dropdown = el as HTMLElement;\n dropdown.classList.add('tw-hidden');\n });\n\n document.querySelectorAll('[data-action=\"more-actions\"]').forEach((el: Element) => {\n const button = el as HTMLElement;\n button.setAttribute('aria-expanded', 'false');\n });\n }\n }\n\n /**\n * Handle dropdown action clicks\n */\n private handleDropdownAction(event: Event): void {\n const target = event.target as HTMLElement;\n const actionButton = target.closest('[data-action]') as HTMLElement;\n\n if (actionButton) {\n const action = actionButton.getAttribute('data-action');\n const itemId = actionButton.getAttribute('data-item-id');\n\n if (action && itemId) {\n event.preventDefault();\n event.stopPropagation();\n\n const dropdown = actionButton.closest('[data-dropdown]') as HTMLElement;\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n switch (action) {\n case 'edit':\n this.editGradeLevel(itemId);\n break;\n case 'toggle':\n this.toggleGradeLevelStatus(itemId);\n break;\n case 'delete':\n this.deleteGradeLevel(itemId);\n break;\n }\n }\n }\n }\n\n /**\n * Toggle dropdown visibility\n */\n toggleDropdown(itemId: string) {\n document.querySelectorAll('.dropdown-menu').forEach(menu => {\n if (menu.getAttribute('data-dropdown') !== itemId) {\n menu.classList.add('tw-hidden');\n }\n });\n\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.toggle('tw-hidden');\n }\n }\n\n /**\n * Handle grade level action clicks\n */\n handleGradeLevelAction(action: string, itemId: string) {\n const item = this.gradeLevels().find(item => item._id === itemId);\n if (!item) return;\n\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n switch (action) {\n case 'edit':\n this.editGradeLevel(itemId);\n break;\n case 'toggle':\n this.toggleGradeLevelStatus(itemId);\n break;\n case 'delete':\n this.deleteGradeLevel(itemId);\n break;\n }\n }\n\n /**\n * Get status display\n */\n getStatusDisplay(isActive: boolean): string {\n return isActive ? 'Active' : 'Inactive';\n }\n\n /**\n * Get status class for styling\n */\n getStatusClass(isActive: boolean): string {\n return isActive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800';\n }\n\n /**\n * Generate dropdown items for grade level actions\n */\n getDropdownItems(row: ICoreSydsgl): DropdownItem[] {\n return [\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'toggle',\n label: row.sydsgl_isactive ? 'Deactivate' : 'Activate',\n icon: 'power_settings_new',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n iconColor: 'tw-text-red-400',\n textColor: 'tw-text-red-600',\n hoverBgColor: 'hover:tw-bg-red-50'\n }\n ];\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, row: ICoreSydsgl): void {\n console.log('🔵 onDropdownItemClick called with:', item, row);\n\n switch (item.id) {\n case 'edit':\n this.editGradeLevel(row._id || '');\n break;\n case 'toggle':\n this.toggleGradeLevelStatus(row._id || '');\n break;\n case 'delete':\n this.deleteGradeLevel(row._id || '');\n break;\n default:\n console.log('🔵 Unknown action:', item.id);\n }\n\n this.closeAllDropdowns();\n }\n\n /**\n * Close all dropdowns\n */\n private closeAllDropdowns(): void {\n const event = new MouseEvent('click', { bubbles: true });\n document.dispatchEvent(event);\n }\n\n /**\n * Track by function for ngFor\n */\n trackByItemId(index: number, item: ICoreSydsgl): string {\n return item._id || '';\n }\n} ","<!-- Grade Level List Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Quick Add Form Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Grade Level' : 'Quick Add Grade Level' }}</h6>\n </div>\n </div>\n \n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddGradeLevel()\">\n <!-- First Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\n <!-- Grade Level Name -->\n <div>\n <cide-ele-input \n id=\"sydsgl_name\" \n label=\"Name*\" \n formControlName=\"sydsgl_name\"\n placeholder=\"Grade level name\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Active Status -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <cide-ele-input \n id=\"sydsgl_isactive\"\n type=\"checkbox\"\n label=\"Active\"\n formControlName=\"sydsgl_isactive\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n \n <!-- Second Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\n <!-- Description -->\n <div>\n <cide-ele-textarea \n id=\"sydsgl_description\" \n label=\"Description\" \n formControlName=\"sydsgl_description\"\n placeholder=\"Grade level description\"\n rows=\"2\"\n size=\"sm\">\n </cide-ele-textarea>\n </div>\n \n <!-- Entity ID (Hidden) -->\n <div class=\"tw-hidden\">\n <cide-ele-input \n id=\"sydsgl_entity_id_syen\" \n label=\"Entity ID*\" \n formControlName=\"sydsgl_entity_id_syen\"\n placeholder=\"Entity ID\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <div class=\"tw-flex tw-space-x-2\">\n <button \n cideEleButton \n variant=\"primary\" \n size=\"sm\" \n type=\"submit\"\n [disabled]=\"quickAddForm.invalid\"\n class=\"tw-px-2 tw-py-1 tw-w-20\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n {{ isEditMode() ? 'Update' : 'Add' }}\n </button>\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\"\n (click)=\"resetQuickAddForm()\"\n class=\"tw-px-2 tw-py-1 tw-w-16\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\n Reset\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n\n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">school</cide-ele-icon>\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Grade Level Management</h5>\n </div>\n\n <!-- Actions -->\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Search functionality is handled by the data grid -->\n </div>\n </div>\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n \n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n \n <cide-ele-data-grid \n [config]=\"gridConfig()\" \n [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\"\n [serverSidePagination]=\"true\" \n [totalServerItems]=\"totalItems()\" \n [currentServerPage]=\"currentPage()\"\n [currentServerPageSize]=\"pageSize()\" \n [dragDropEnabled]=\"true\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Drag Handle Renderer Template -->\n<ng-template #dragHandleRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-justify-center tw-w-full tw-h-full tw-cursor-move drag-handle\">\n <cide-ele-icon \n class=\"tw-text-gray-400 hover:tw-text-gray-600 tw-transition-colors\" \n size=\"xs\">\n drag_indicator\n </cide-ele-icon>\n </div>\n</ng-template>\n\n<!-- Grade Level Details Renderer Template -->\n<ng-template #gradeLevelDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\n <!-- Grade Level Icon -->\n <div class=\"tw-flex-shrink-0\">\n <cide-ele-icon \n class=\"tw-text-gray-400\" \n size=\"xs\">\n school\n </cide-ele-icon>\n </div>\n \n <!-- Grade Level Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \n [title]=\"row.sydsgl_name\">\n {{ row.sydsgl_name || 'Untitled' }}\n </div>\n @if (row.sydsgl_description) {\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \n [title]=\"row.sydsgl_description\">\n {{ row.sydsgl_description }}\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- Grade Level Status Renderer Template -->\n<ng-template #gradeLevelStatusRendererTemplate let-row=\"row\" let-value=\"value\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\n [ngClass]=\"getStatusClass(row.sydsgl_isactive)\">\n {{ getStatusDisplay(row.sydsgl_isactive) }}\n </span>\n</ng-template>\n\n<!-- Actions Dropdown Renderer Template -->\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown \n [items]=\"getDropdownItems(row)\"\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template> ","// Grade Level Management Components\r\nexport * from './components/grade-level-list/grade-level-list.component';\r\n\r\n// Grade Level Management Services\r\nexport * from './services/grade-level-management.service'; ","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\nimport {\r\n cidePath,\r\n coreRoutesUrl,\r\n generateStringFromObject,\r\n hostManagerRoutesUrl,\r\n MSystemPages,\r\n MSystemPagesCheckCodeExistsPayload,\r\n MSystemPagesDeletePayload,\r\n MSystemPagesGetByIdPayload,\r\n MSystemPagesInsertUpdatePayload,\r\n MSystemPagesToggleStatusPayload,\r\n systemPagesByIdControllerResponse,\r\n systemPagesCheckCodeExistsControllerResponse,\r\n systemPagesControllerResponse,\r\n systemPagesDeleteControllerResponse,\r\n systemPagesInsertUpdateControllerResponse,\r\n systemPagesToggleStatusControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PageManagementService {\r\n constructor(private http: HttpClient) { }\r\n\r\n /**\r\n * Get page list from API\r\n */\r\n getPageList(body: MSystemPages): Observable<systemPagesControllerResponse> {\r\n const query = generateStringFromObject(body);\r\n return this.http?.get<systemPagesControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.page, query]))\r\n .pipe(\r\n catchError(error => {\r\n console.error('PageManagementService API error:', error);\r\n return this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Create or update page using single API endpoint\r\n */\r\n createOrUpdatePage(payload: MSystemPagesInsertUpdatePayload): Observable<systemPagesInsertUpdateControllerResponse> {\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.page]);\r\n return this.http.post<systemPagesInsertUpdateControllerResponse>(url, payload)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n\r\n /**\r\n * Get page by ID\r\n */\r\n getPageById(id: string): Observable<systemPagesByIdControllerResponse> {\r\n console.log('Getting page by ID:', id);\r\n const payload: MSystemPagesGetByIdPayload = { sypg_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.page, 'byId', query]);\r\n return this.http.get<systemPagesByIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete page\r\n */\r\n deletePage(id: string): Observable<systemPagesDeleteControllerResponse> {\r\n const payload: MSystemPagesDeletePayload = { sypg_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.page, query]);\r\n return this.http.delete<systemPagesDeleteControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n\r\n\r\n /**\r\n * Toggle page active status\r\n */\r\n togglePageStatus(payload: MSystemPagesToggleStatusPayload): Observable<systemPagesToggleStatusControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.page, query]);\r\n return this.http.put<systemPagesToggleStatusControllerResponse>(url, {})\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Find page by ID using API\r\n */\r\n findPageById(payload: MSystemPagesCheckCodeExistsPayload): Observable<systemPagesCheckCodeExistsControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.page, 'checkCodeExists', query]);\r\n return this.http.get<systemPagesCheckCodeExistsControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Check if page code already exists\r\n */\r\n checkPageCodeExists(payload: MSystemPagesCheckCodeExistsPayload): Observable<boolean> {\r\n return this.findPageById(payload).pipe(\r\n map((response: systemPagesCheckCodeExistsControllerResponse) => response.success || false)\r\n );\r\n }\r\n\r\n\r\n\r\n /**\r\n * Handle errors\r\n */\r\n private handleError(error: unknown): Observable<never> {\r\n let errorMessage = 'An error occurred';\r\n\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n } else if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n\r\n console.error('Page Management Service Error:', errorMessage);\r\n return throwError(() => new Error(errorMessage));\r\n }\r\n} ","import { Component, signal, viewChild, TemplateRef, DestroyRef, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { PageManagementService } from '../../services/page-management.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideEleDataGridComponent, CideIconComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { ICoreSypg, systemPagesControllerResponse, generateStringFromObject } from 'cloud-ide-lms-model';\n\n@Component({\n selector: 'cide-core-app-page-list',\n standalone: true,\n imports: [\n CommonModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n CideIconComponent,\n CideEleDropdownComponent\n ],\n templateUrl: './page-list.component.html'\n})\nexport class PageListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private pageService = inject(PageManagementService);\n private appState = inject(AppStateHelperService);\n private router = inject(Router);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n pageDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('pageDetailsRendererTemplate');\n pageStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('pageStatusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('actionsDropdownRendererTemplate');\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n pages = signal<ICoreSypg[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Pagination signals\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ICoreSypg>>({\n id: 'page-list-grid',\n columns: [\n {\n key: 'details',\n header: 'Page Details',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'pageDetailsRenderer'\n },\n {\n key: 'sypg_page_code',\n header: 'Page Code',\n type: 'text',\n width: '150px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'sypg_isactive',\n header: 'Status',\n type: 'custom',\n width: '100px',\n truncate: false,\n align: 'center',\n renderer: 'pageStatusRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '120px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search pages...',\n searchableColumns: ['sypg_title', 'sypg_desc', 'sypg_page_code'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false\n });\n\n // Action handlers for grid\n actionHandlers = {\n onEdit: (item: ICoreSypg) => this.editPage(item),\n onDelete: (item: ICoreSypg) => this.deletePage(item),\n onToggleStatus: (item: ICoreSypg) => this.togglePageStatus(item),\n onManageThemes: (item: ICoreSypg) => this.manageThemes(item),\n onManageControls: (item: ICoreSypg) => this.manageControls(item)\n };\n\n constructor() {\n this.initializeComponent();\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n this.loadPages();\n }\n\n /**\n * Load pages from API\n */\n private loadPages(): void {\n this.loading.set(true);\n this.error.set(null);\n\n const request = {\n pageIndex: this.currentPage(),\n pageSize: this.pageSize(),\n search: this.searchTerm() || undefined\n };\n\n this.pageService.getPageList(request)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: systemPagesControllerResponse) => {\n if (response.success) {\n this.pages.set(response.data || []);\n this.totalItems.set(response.total || 0);\n this.updateGridData();\n } else {\n this.error.set(response.message || 'Failed to load pages');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error loading pages:', error);\n this.error.set('Failed to load pages. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(): void {\n this.gridConfig.update(config => ({\n ...config,\n data: this.pages()\n }));\n }\n\n /**\n * Get template renderers for grid\n */\n getTemplateRenderers(): Record<string, TemplateRef<TemplateContext>> {\n return {\n pageDetailsRenderer: this.pageDetailsRendererTemplate(),\n pageStatusRenderer: this.pageStatusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n };\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ICoreSypg>): void {\n switch (event.type) {\n case 'pageChange':\n console.log('🔵 Page change event:', event);\n if (event.data && typeof event.data === 'object' && 'page' in event.data && 'pageSize' in event.data) {\n this.currentPage.set(event.data['page'] as number);\n this.pageSize.set(event.data['pageSize'] as number);\n this.loadPages();\n }\n break;\n case 'search':\n if (event.data && typeof event.data === 'string') {\n this.searchTerm.set(event.data);\n this.currentPage.set(1);\n this.loadPages();\n }\n break;\n case 'refresh':\n this.loadPages();\n break;\n case 'action':\n // Handle action events if needed\n console.log('Action event:', event);\n break;\n case 'rowClick':\n // Handle row click events if needed\n console.log('Row click event:', event);\n break;\n case 'sort':\n // Handle sort events if needed\n console.log('Sort event:', event);\n break;\n case 'export':\n // Handle export events if needed\n console.log('Export event:', event);\n break;\n case 'rowReorder':\n // Handle row reorder events if needed\n console.log('Row reorder event:', event);\n break;\n }\n }\n\n /**\n * Navigate to create page\n */\n createPage(): void {\n this.router.navigate(['/control-panel/page-form']);\n }\n\n /**\n * Edit page - navigate to edit page\n */\n editPage(page: ICoreSypg): void {\n const query: string = generateStringFromObject({\n sypg_id: page._id,\n sypg_title: page.sypg_title\n });\n this.router.navigate(['/control-panel/page-form', query]);\n }\n\n /**\n * Delete page\n */\n deletePage(page: ICoreSypg): void {\n if (confirm(`Are you sure you want to delete the page \"${page.sypg_title}\"?`)) {\n this.loading.set(true);\n this.pageService.deletePage(page._id || '')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadPages();\n console.log('✅ Page deleted successfully');\n } else {\n console.error('❌ Failed to delete page:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error deleting page:', error);\n console.error('❌ Failed to delete page. Please try again.');\n this.loading.set(false);\n }\n });\n }\n }\n\n /**\n * Toggle page status\n */\n togglePageStatus(page: ICoreSypg): void {\n this.loading.set(true);\n this.pageService.togglePageStatus({ sypg_id: page._id || '', sypg_isactive: !page.sypg_isactive })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadPages();\n console.log(`✅ Page ${page.sypg_isactive ? 'deactivated' : 'activated'} successfully`);\n } else {\n console.error('❌ Failed to toggle page status:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error toggling page status:', error);\n console.error('❌ Failed to toggle page status. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Manage themes for a page\n */\n manageThemes(page: ICoreSypg): void {\n const query: string = generateStringFromObject({ sypg_id: page._id, sypg_title: page.sypg_title })\n this.router.navigate(['control-panel', 'page-theme', query]);\n }\n\n /**\n * Manage controls for a page\n */\n manageControls(page: ICoreSypg): void {\n const query: string = generateStringFromObject({ sypg_id: page._id, sypg_title: page.sypg_title })\n this.router.navigate(['control-panel', 'page-controls', query]);\n }\n\n /**\n * Get dropdown items for actions\n */\n getActionDropdownItems(page: ICoreSypg): DropdownItem[] {\n return [\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n disabled: false\n },\n {\n id: 'themes',\n label: 'Manage Themes',\n icon: 'palette',\n disabled: false\n },\n {\n id: 'controls',\n label: 'Manage Controls',\n icon: 'settings',\n disabled: false\n },\n {\n id: 'toggle',\n label: page.sypg_isactive ? 'Deactivate' : 'Activate',\n icon: page.sypg_isactive ? 'block' : 'check_circle',\n disabled: false\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n disabled: false\n }\n ];\n }\n\n /**\n * Handle dropdown item click\n * This method handles clicks on dropdown menu items in the actions column\n */\n onDropdownItemClick(item: DropdownItem, row: ICoreSypg): void {\n console.log('🔵 onDropdownItemClick called with:', item, row);\n\n switch (item.id) {\n case 'edit':\n console.log('🔵 Calling editPage with:', row);\n this.editPage(row);\n break;\n case 'themes':\n console.log('🔵 Calling manageThemes with:', row);\n this.manageThemes(row);\n break;\n case 'controls':\n console.log('🔵 Calling manageControls with:', row);\n this.manageControls(row);\n break;\n case 'toggle':\n console.log('🔵 Calling togglePageStatus with:', row);\n this.togglePageStatus(row);\n break;\n case 'delete':\n console.log('🔵 Calling deletePage with:', row);\n this.deletePage(row);\n break;\n default:\n console.log('🔵 Unknown action:', item.id);\n }\n\n // Close all dropdowns after action\n this.closeAllDropdowns();\n }\n\n /**\n * Close all dropdowns\n */\n private closeAllDropdowns(): void {\n // Close all dropdowns by clicking outside\n const event = new MouseEvent('click', { bubbles: true });\n document.dispatchEvent(event);\n }\n} ","<!-- Page List Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n\n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">web</cide-ele-icon>\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Page Management</h5>\n </div>\n\n <!-- Actions -->\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Add Page Button -->\n <button\n cideEleButton\n variant=\"primary\"\n size=\"sm\"\n (click)=\"createPage()\"\n leftIcon=\"add\"\n class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\n Create New Page\n </button>\n </div>\n </div>\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\">error</cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n \n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n <cide-ele-data-grid\n [config]=\"gridConfig()\"\n [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\"\n [serverSidePagination]=\"true\"\n [totalServerItems]=\"totalItems()\"\n [currentServerPage]=\"currentPage()\"\n [currentServerPageSize]=\"pageSize()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Page Details Renderer Template -->\n<ng-template #pageDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\n <!-- Page Icon -->\n <div class=\"tw-flex-shrink-0\">\n <cide-ele-icon class=\"tw-text-gray-400 tw-w-4 tw-h-4\">web</cide-ele-icon>\n </div>\n \n <!-- Page Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \n [title]=\"row.sypg_title\">\n {{ row.sypg_title || 'Untitled' }}\n </div>\n @if (row.sypg_desc) {\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \n [title]=\"row.sypg_desc\">\n {{ row.sypg_desc }}\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- Page Status Renderer Template -->\n<ng-template #pageStatusRendererTemplate let-row=\"row\" let-value=\"value\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\n [ngClass]=\"row.sypg_isactive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800'\">\n {{ row.sypg_isactive ? 'Active' : 'Inactive' }}\n </span>\n</ng-template>\n\n<!-- Actions Dropdown Renderer Template -->\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(row)\"\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template> ","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\nimport { \r\n cidePath, \r\n coreRoutesUrl, \r\n generateStringFromObject, \r\n hostManagerRoutesUrl,\r\n MSystemPagesTheme,\r\n MSystemPagesThemeGetByIdPayload,\r\n MSystemPagesThemeDeletePayload,\r\n MSystemPagesThemeInsertUpdatePayload,\r\n MSystemPagesThemeToggleStatusPayload,\r\n MSystemPagesThemeByPageIdPayload,\r\n systemPagesThemeControllerResponse,\r\n systemPagesThemeByIdControllerResponse,\r\n systemPagesThemeInsertUpdateControllerResponse,\r\n systemPagesThemeDeleteControllerResponse,\r\n systemPagesThemeToggleStatusControllerResponse,\r\n systemPagesThemeByPageIdControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PageThemeService {\r\n private apiUrl = `${coreRoutesUrl?.pageTheme}`;\r\n\r\n constructor(private http: HttpClient) {\r\n console.log('PageThemeService initialized - using real API');\r\n }\r\n\r\n /**\r\n * Get theme list from API\r\n */\r\n getThemeList(body: MSystemPagesTheme): Observable<systemPagesThemeControllerResponse> {\r\n const query = generateStringFromObject(body);\r\n return this.http?.get<systemPagesThemeControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageTheme, query]))\r\n .pipe(\r\n catchError(error => {\r\n console.error('PageThemeService API error:', error);\r\n return this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Create new theme\r\n */\r\n createTheme(payload: MSystemPagesThemeInsertUpdatePayload): Observable<systemPagesThemeInsertUpdateControllerResponse> {\r\n console.log('Creating theme:', payload);\r\n \r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageTheme]);\r\n return this.http.post<systemPagesThemeInsertUpdateControllerResponse>(url, payload)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Update existing theme\r\n */\r\n updateTheme(payload: MSystemPagesThemeInsertUpdatePayload): Observable<systemPagesThemeInsertUpdateControllerResponse> {\r\n console.log('Updating theme:', payload);\r\n \r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageTheme]);\r\n return this.http.post<systemPagesThemeInsertUpdateControllerResponse>(url, payload)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get theme by ID\r\n */\r\n getThemeById(id: string): Observable<systemPagesThemeByIdControllerResponse> {\r\n console.log('Getting theme by ID:', id);\r\n const payload: MSystemPagesThemeGetByIdPayload = { sytm_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageTheme, 'byId', query]);\r\n return this.http.get<systemPagesThemeByIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get themes by page ID\r\n */\r\n getThemesByPageId(pageId: string): Observable<systemPagesThemeByPageIdControllerResponse> {\r\n console.log('Getting themes by page ID:', pageId);\r\n const payload: MSystemPagesThemeByPageIdPayload = { sytm_page_id_sypg: pageId };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageTheme, 'byPage', query]);\r\n return this.http.get<systemPagesThemeByPageIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete theme\r\n */\r\n deleteTheme(id: string): Observable<systemPagesThemeDeleteControllerResponse> {\r\n const payload: MSystemPagesThemeDeletePayload = { sytm_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageTheme, query]);\r\n return this.http.delete<systemPagesThemeDeleteControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Toggle theme active status\r\n */\r\n toggleThemeStatus(payload: MSystemPagesThemeToggleStatusPayload): Observable<systemPagesThemeToggleStatusControllerResponse> {\r\n console.log('Toggling theme status:', payload);\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageTheme, query]);\r\n return this.http.put<systemPagesThemeToggleStatusControllerResponse>(url, {})\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n\r\n\r\n /**\r\n * Handle errors\r\n */\r\n private handleError(error: unknown): Observable<never> {\r\n let errorMessage = 'An error occurred';\r\n\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n } else if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n\r\n console.error('Page Theme Service Error:', errorMessage);\r\n return throwError(() => new Error(errorMessage));\r\n }\r\n} ","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Validators, ReactiveFormsModule, NonNullableFormBuilder, FormsModule, FormArray, FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { PageThemeService } from '../../services/page-theme.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideEleDataGridComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, CideEleJsonEditorComponent, CideSelectOptionComponent } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { ICoreSytm, MSystemPagesThemeInsertUpdatePayload, ICoreSythDrawer, MSystemPagesTheme, generateObjectFromString } from 'cloud-ide-lms-model';\n\n@Component({\n selector: 'cide-core-app-page-theme',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n CideInputComponent,\n CideSelectComponent,\n CideTextareaComponent,\n CideIconComponent,\n CideEleDropdownComponent,\n CideEleJsonEditorComponent,\n CideSelectOptionComponent\n],\n templateUrl: './page-theme.component.html',\n styleUrls: []\n})\nexport class PageThemeComponent implements OnInit {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private themeService = inject(PageThemeService);\n private appState = inject(AppStateHelperService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n themeDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('themeDetailsRendererTemplate');\n themeStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('themeStatusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('actionsDropdownRendererTemplate');\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n themes = signal<ICoreSytm[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Derived list filtered by searchTerm\n filteredThemes = computed(() => {\n const q = (this.searchTerm() || '').toLowerCase().trim();\n const items = this.themes() || [];\n if (!q) return items;\n return items.filter(t => {\n const title = (t.sytm_title || '').toLowerCase();\n const code = (t.sytm_theme_code || '').toLowerCase();\n const desc = (t.sytm_desc || '').toLowerCase();\n return title.includes(q) || code.includes(q) || desc.includes(q);\n });\n });\n\n // Helper to resolve preview image URL safely\n getPreviewUrl(theme: ICoreSytm): string {\n const id = theme?.sytm_preview_id_fm || '';\n if (!id) return '';\n\n type WithPreviewUrl = { getPreviewUrl: (pid: string) => string };\n const svcUnknown: unknown = this.themeService;\n\n const hasGetPreviewUrl = (svc: unknown): svc is WithPreviewUrl =>\n typeof svc === 'object' && svc !== null &&\n 'getPreviewUrl' in (svc as Record<string, unknown>) &&\n typeof (svc as Record<string, unknown>)['getPreviewUrl'] === 'function';\n\n if (hasGetPreviewUrl(svcUnknown)) {\n return svcUnknown.getPreviewUrl(id);\n }\n return '';\n }\n\n // Input handler to avoid $any casts in template\n onGallerySearchInput(event: Event): void {\n const target = event.target as HTMLInputElement | null;\n this.searchTerm.set(target?.value ?? '');\n }\n\n // Page information\n pageId = signal<string>('');\n pageTitle = signal<string>('');\n\n // Form state\n isEditMode = signal(false);\n editingThemeId = signal<string | null>(null);\n retrievedTheme = signal<ICoreSytm | null>(null);\n\n // Pagination signals\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n\n // Modern reactive forms with signals\n themeForm = this.fb.group({\n sytm_title: ['', [Validators.required]],\n sytm_desc: [''],\n sytm_theme_code: ['', [Validators.required]],\n sytm_preview_id_fm: [''],\n sytm_sub_title: [''],\n sytm_configuration: ['{}'],\n sytm_entity_id_syen: [''],\n sytm_isselected: [false],\n sytm_layout: this.fb.group({\n sytm_layout_sidebar: this.fb.group({ status: [true] }),\n sytm_layout_header: this.fb.group({ status: [true] }),\n sytm_layout_footer: this.fb.group({ status: [false] }),\n sytm_layout_breadcrumb: this.fb.group({ status: [true] }),\n sytm_layout_console: this.fb.group({ status: [false] }),\n sytm_layout_request: this.fb.group({ status: [false] }),\n sytm_layout_drawer: this.fb.array([] as ICoreSythDrawer[])\n }),\n sytm_isactive: [true]\n });\n\n // Computed values\n isFormDirty = computed(() => this.themeForm.dirty);\n\n // Multi-select options for layout sections\n layoutOptions = [\n { value: 'sidebar', label: 'Sidebar' },\n { value: 'header', label: 'Header' },\n { value: 'footer', label: 'Footer' },\n { value: 'breadcrumb', label: 'Breadcrumb' },\n { value: 'console', label: 'Console' },\n { value: 'request', label: 'Request' }\n ] as const;\n\n // Read enabled selections from form values\n enabledLayoutSelections(): string[] {\n const layout = this.themeForm.get('sytm_layout');\n if (!layout) return [];\n const selections: string[] = [];\n\n const getBool = (path: string) => Boolean(this.themeForm.get(path)?.value);\n\n if (getBool('sytm_layout.sytm_layout_sidebar.status')) selections.push('sidebar');\n if (getBool('sytm_layout.sytm_layout_header.status')) selections.push('header');\n if (getBool('sytm_layout.sytm_layout_footer.status')) selections.push('footer');\n if (getBool('sytm_layout.sytm_layout_breadcrumb.status')) selections.push('breadcrumb');\n if (getBool('sytm_layout.sytm_layout_console.status')) selections.push('console');\n if (getBool('sytm_layout.sytm_layout_request.status')) selections.push('request');\n\n return selections;\n }\n\n // Update form booleans from multi-select change\n onEnabledLayoutChange(values: string[]): void {\n const setBool = (path: string, val: boolean) => this.themeForm.get(path)?.setValue(val);\n\n const selected = new Set(values);\n setBool('sytm_layout.sytm_layout_sidebar.status', selected.has('sidebar'));\n setBool('sytm_layout.sytm_layout_header.status', selected.has('header'));\n setBool('sytm_layout.sytm_layout_footer.status', selected.has('footer'));\n setBool('sytm_layout.sytm_layout_breadcrumb.status', selected.has('breadcrumb'));\n setBool('sytm_layout.sytm_layout_console.status', selected.has('console'));\n setBool('sytm_layout.sytm_layout_request.status', selected.has('request'));\n }\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ICoreSytm>>({\n id: 'theme-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'details',\n header: 'Theme Details',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'themeDetailsRenderer'\n },\n {\n key: 'sytm_theme_code',\n header: 'Theme Code',\n type: 'text',\n width: '150px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'sytm_isactive',\n header: 'Status',\n type: 'custom',\n width: '100px',\n truncate: false,\n align: 'center',\n renderer: 'themeStatusRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '120px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search themes...',\n searchableColumns: ['sytm_title', 'sytm_desc', 'sytm_theme_code'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none'\n });\n\n // Action handlers for grid\n actionHandlers = {\n onEdit: (item: ICoreSytm) => this.editTheme(item),\n onDelete: (item: ICoreSytm) => this.deleteTheme(item),\n onToggleStatus: (item: ICoreSytm) => this.toggleThemeStatus(item)\n };\n\n ngOnInit(): void {\n this.initializeComponent();\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n // Get page information from route\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\n console.log('🔍 Query params:', params);\n const queryParams = params['query'];\n const queryData = generateObjectFromString(queryParams);\n\n this.pageId.set(queryData?.sypg_id || '');\n this.pageTitle.set(queryData?.sypg_title || '');\n\n if (this.pageId()) {\n this.loadThemes();\n this.setupFormSubscriptions();\n } else {\n this.error.set('No page ID provided');\n }\n });\n }\n\n /**\n * Load themes from API\n */\n private loadThemes(): void {\n this.loading.set(true);\n this.error.set(null);\n\n const request: MSystemPagesTheme = {\n sytm_page_id_sypg: this.pageId()\n };\n\n this.themeService.getThemeList(request)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.themes.set(response.data || []);\n this.totalItems.set(response.total || 0);\n this.updateGridData();\n } else {\n this.error.set(response.message || 'Failed to load themes');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error loading themes:', error);\n this.error.set('Failed to load themes. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Setup form subscriptions\n */\n private setupFormSubscriptions(): void {\n // Watch for form changes to enable/disable save button\n this.themeForm.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n // Form validation is handled by computed signals\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(): void {\n this.gridConfig.update(config => ({\n ...config,\n data: this.themes()\n }));\n }\n\n /**\n * Get custom renderers for grid\n */\n\n\n /**\n * Get template renderers for grid\n */\n getTemplateRenderers(): Record<string, TemplateRef<TemplateContext>> {\n return {\n themeDetailsRenderer: this.themeDetailsRendererTemplate(),\n themeStatusRenderer: this.themeStatusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n };\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ICoreSytm>): void {\n switch (event.type) {\n case 'pageChange':\n if (event.data && typeof event.data === 'object' && 'pageIndex' in event.data && 'pageSize' in event.data) {\n this.currentPage.set(event.data['pageIndex'] as number);\n this.pageSize.set(event.data['pageSize'] as number);\n this.loadThemes();\n }\n break;\n case 'search':\n if (event.data && typeof event.data === 'string') {\n this.searchTerm.set(event.data);\n this.currentPage.set(1);\n this.loadThemes();\n }\n break;\n case 'refresh':\n this.loadThemes();\n break;\n case 'action':\n // Handle action events if needed\n console.log('Action event:', event);\n break;\n case 'rowClick':\n // Handle row click events if needed\n console.log('Row click event:', event);\n break;\n case 'sort':\n // Handle sort events if needed\n console.log('Sort event:', event);\n break;\n case 'export':\n // Handle export events if needed\n console.log('Export event:', event);\n break;\n case 'rowReorder':\n // Handle row reorder events if needed\n console.log('Row reorder event:', event);\n break;\n }\n }\n\n /**\n * Create new theme\n */\n createTheme(): void {\n if (!this.themeForm.valid) {\n this.markFormAsTouched();\n return;\n }\n\n const formValue = this.themeForm.getRawValue();\n const newTheme: MSystemPagesThemeInsertUpdatePayload = {\n sytm_title: formValue.sytm_title,\n sytm_desc: formValue.sytm_desc,\n sytm_theme_code: formValue.sytm_theme_code,\n sytm_preview_id_fm: formValue.sytm_preview_id_fm,\n sytm_page_id_sypg: this.pageId(),\n sytm_configuration: JSON.parse(formValue.sytm_configuration),\n sytm_sub_title: formValue.sytm_sub_title,\n sytm_entity_id_syen: formValue.sytm_entity_id_syen || this.appState.getActiveEntityId(),\n sytm_isselected: Boolean(formValue.sytm_isselected),\n sytm_layout: {\n sytm_layout_sidebar: { status: Boolean(formValue.sytm_layout.sytm_layout_sidebar.status) },\n sytm_layout_header: { status: Boolean(formValue.sytm_layout.sytm_layout_header.status) },\n sytm_layout_footer: { status: Boolean(formValue.sytm_layout.sytm_layout_footer.status) },\n sytm_layout_breadcrumb: { status: Boolean(formValue.sytm_layout.sytm_layout_breadcrumb.status) },\n sytm_layout_console: { status: Boolean(formValue.sytm_layout.sytm_layout_console.status) },\n sytm_layout_request: { status: Boolean(formValue.sytm_layout.sytm_layout_request.status) },\n sytm_layout_drawer: formValue.sytm_layout.sytm_layout_drawer as ICoreSythDrawer[]\n },\n sytm_isactive: formValue.sytm_isactive\n };\n\n this.loading.set(true);\n this.themeService.createTheme(newTheme)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.resetForm();\n this.loadThemes();\n console.log('✅ Theme created successfully');\n } else {\n console.error('❌ Failed to create theme:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error creating theme:', error);\n console.error('❌ Failed to create theme. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Update existing theme\n */\n updateTheme(): void {\n if (!this.themeForm.valid || !this.editingThemeId()) {\n this.markFormAsTouched();\n return;\n }\n\n const formValue = this.themeForm.getRawValue();\n const updatedTheme: MSystemPagesThemeInsertUpdatePayload = {\n _id: this.editingThemeId() || '',\n sytm_title: formValue.sytm_title,\n sytm_desc: formValue.sytm_desc,\n sytm_theme_code: formValue.sytm_theme_code,\n sytm_preview_id_fm: formValue.sytm_preview_id_fm,\n sytm_page_id_sypg: this.pageId(),\n sytm_configuration: JSON.parse(formValue.sytm_configuration),\n sytm_sub_title: formValue.sytm_sub_title,\n sytm_entity_id_syen: formValue.sytm_entity_id_syen || this.appState.getActiveEntityId(),\n sytm_isselected: Boolean(formValue.sytm_isselected),\n sytm_layout: {\n sytm_layout_sidebar: { status: Boolean(formValue.sytm_layout.sytm_layout_sidebar.status) },\n sytm_layout_header: { status: Boolean(formValue.sytm_layout.sytm_layout_header.status) },\n sytm_layout_footer: { status: Boolean(formValue.sytm_layout.sytm_layout_footer.status) },\n sytm_layout_breadcrumb: { status: Boolean(formValue.sytm_layout.sytm_layout_breadcrumb.status) },\n sytm_layout_console: { status: Boolean(formValue.sytm_layout.sytm_layout_console.status) },\n sytm_layout_request: { status: Boolean(formValue.sytm_layout.sytm_layout_request.status) },\n sytm_layout_drawer: formValue.sytm_layout.sytm_layout_drawer as ICoreSythDrawer[]\n },\n sytm_isactive: formValue.sytm_isactive\n };\n\n this.loading.set(true);\n this.themeService.updateTheme(updatedTheme)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.resetForm();\n this.loadThemes();\n console.log('✅ Theme updated successfully');\n } else {\n console.error('❌ Failed to update theme:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error updating theme:', error);\n console.error('❌ Failed to update theme. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Edit theme\n */\n editTheme(theme: ICoreSytm): void {\n this.isEditMode.set(true);\n this.editingThemeId.set(theme._id || null);\n this.retrievedTheme.set(theme);\n\n this.themeForm.patchValue({\n sytm_title: theme.sytm_title || '',\n sytm_desc: theme.sytm_desc || '',\n sytm_theme_code: theme.sytm_theme_code || '',\n sytm_preview_id_fm: theme.sytm_preview_id_fm || '',\n sytm_sub_title: theme.sytm_sub_title || '',\n sytm_configuration: JSON.stringify(theme.sytm_configuration || {}, null, 2),\n sytm_entity_id_syen: theme.sytm_entity_id_syen || this.appState.getActiveEntityId(),\n sytm_isselected: theme.sytm_isselected ?? false,\n sytm_layout: {\n sytm_layout_sidebar: { status: theme.sytm_layout?.sytm_layout_sidebar?.status ?? true },\n sytm_layout_header: { status: theme.sytm_layout?.sytm_layout_header?.status ?? true },\n sytm_layout_footer: { status: theme.sytm_layout?.sytm_layout_footer?.status ?? false },\n sytm_layout_breadcrumb: { status: theme.sytm_layout?.sytm_layout_breadcrumb?.status ?? true },\n sytm_layout_console: { status: theme.sytm_layout?.sytm_layout_console?.status ?? false },\n sytm_layout_request: { status: theme.sytm_layout?.sytm_layout_request?.status ?? false },\n sytm_layout_drawer: theme.sytm_layout?.sytm_layout_drawer || []\n },\n sytm_isactive: theme.sytm_isactive ?? true\n });\n\n // Rebuild drawer array controls from data\n while (this.drawerArray.length) {\n this.drawerArray.removeAt(0);\n }\n (theme.sytm_layout?.sytm_layout_drawer || []).forEach(d => {\n this.drawerArray.push(this.createDrawerGroup({\n syth_status: d?.syth_status ?? true,\n syth_config_syco_for: d?.syth_config_syco_for ?? 'drawer_notes'\n }));\n });\n\n this.themeForm.markAsPristine();\n }\n\n /**\n * Delete theme\n */\n deleteTheme(theme: ICoreSytm): void {\n if (confirm(`Are you sure you want to delete the theme \"${theme.sytm_title}\"?`)) {\n this.loading.set(true);\n this.themeService.deleteTheme(theme._id || '')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadThemes();\n console.log('✅ Theme deleted successfully');\n } else {\n console.error('❌ Failed to delete theme:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error deleting theme:', error);\n console.error('❌ Failed to delete theme. Please try again.');\n this.loading.set(false);\n }\n });\n }\n }\n\n /**\n * Toggle theme status\n */\n toggleThemeStatus(theme: ICoreSytm): void {\n this.loading.set(true);\n this.themeService.toggleThemeStatus({ sytm_id: theme._id || '', sytm_isactive: !theme.sytm_isactive })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadThemes();\n console.log(`✅ Theme ${theme.sytm_isactive ? 'deactivated' : 'activated'} successfully`);\n } else {\n console.error('❌ Failed to toggle theme status:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error toggling theme status:', error);\n console.error('❌ Failed to toggle theme status. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Save theme (create or update)\n */\n saveTheme(): void {\n if (this.isEditMode()) {\n this.updateTheme();\n } else {\n this.createTheme();\n }\n }\n\n /**\n * Cancel form\n */\n cancelForm(): void {\n this.resetForm();\n }\n\n /**\n * Go back to page list\n */\n goBack(): void {\n this.router.navigate(['/core/page']);\n }\n\n /**\n * Reset form\n */\n private resetForm(): void {\n this.themeForm.reset({\n sytm_title: '',\n sytm_desc: '',\n sytm_theme_code: '',\n sytm_preview_id_fm: '',\n sytm_sub_title: '',\n sytm_configuration: '{}',\n sytm_entity_id_syen: '',\n sytm_isselected: false,\n sytm_layout: {\n sytm_layout_sidebar: { status: true },\n sytm_layout_header: { status: true },\n sytm_layout_footer: { status: false },\n sytm_layout_breadcrumb: { status: true },\n sytm_layout_console: { status: false },\n sytm_layout_request: { status: false },\n sytm_layout_drawer: [] as ICoreSythDrawer[]\n },\n sytm_isactive: true\n });\n\n // Explicitly clear the FormArray for drawers\n while (this.drawerArray.length) {\n this.drawerArray.removeAt(0);\n }\n\n this.isEditMode.set(false);\n this.editingThemeId.set(null);\n this.retrievedTheme.set(null);\n this.themeForm.markAsPristine();\n this.themeForm.markAsUntouched();\n }\n\n /**\n * Mark form as touched to trigger validation display\n */\n private markFormAsTouched(): void {\n Object.keys(this.themeForm.controls).forEach(key => {\n const control = this.themeForm.get(key);\n control?.markAsTouched();\n });\n }\n\n /**\n * Get dropdown items for actions\n */\n getActionDropdownItems(theme: ICoreSytm): DropdownItem[] {\n return [\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n disabled: false\n },\n {\n id: 'toggle',\n label: theme.sytm_isactive ? 'Deactivate' : 'Activate',\n icon: theme.sytm_isactive ? 'block' : 'check_circle',\n disabled: false\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n disabled: false\n }\n ];\n }\n\n /**\n * Handle dropdown item click\n * This method handles clicks on dropdown menu items in the actions column\n */\n onDropdownItemClick(item: DropdownItem, row: ICoreSytm): void {\n console.log('🔵 onDropdownItemClick called with:', item, row);\n\n switch (item.id) {\n case 'edit':\n console.log('🔵 Calling editTheme with:', row);\n this.editTheme(row);\n break;\n case 'toggle':\n console.log('🔵 Calling toggleThemeStatus with:', row);\n this.toggleThemeStatus(row);\n break;\n case 'delete':\n console.log('🔵 Calling deleteTheme with:', row);\n this.deleteTheme(row);\n break;\n default:\n console.log('🔵 Unknown action:', item.id);\n }\n\n // Close all dropdowns after action\n this.closeAllDropdowns();\n }\n\n /**\n * Close all dropdowns\n */\n private closeAllDropdowns(): void {\n // Close all dropdowns by clicking outside\n const event = new MouseEvent('click', { bubbles: true });\n document.dispatchEvent(event);\n }\n\n // ===== Drawer (sytm_layout_drawer) helpers =====\n drawerConfigOptions = [\n { value: 'drawer_notes', label: 'Drawer Notes' },\n { value: 'drawer_theme', label: 'Drawer Theme' }\n ];\n\n get drawerArray(): FormArray<FormGroup> {\n return this.themeForm.get('sytm_layout.sytm_layout_drawer') as unknown as FormArray<FormGroup>;\n }\n\n private createDrawerGroup(drawer?: Partial<ICoreSythDrawer>): FormGroup {\n return this.fb.group({\n syth_status: [drawer?.syth_status ?? true],\n syth_config_syco_for: [drawer?.syth_config_syco_for ?? 'drawer_notes']\n }) as unknown as FormGroup;\n }\n\n addDrawer(): void {\n this.drawerArray.push(this.createDrawerGroup());\n this.themeForm.markAsDirty();\n }\n\n removeDrawer(index: number): void {\n if (index >= 0 && index < this.drawerArray.length) {\n this.drawerArray.removeAt(index);\n this.themeForm.markAsDirty();\n }\n }\n\n /**\n * Set selected theme (only one can be selected per page)\n */\n setSelectedTheme(theme: ICoreSytm): void {\n if (!theme || theme.sytm_isselected) return; // already selected\n\n const previouslySelected = this.themes().find(t => t.sytm_isselected && t._id !== theme._id);\n\n // Disable previous selection (best-effort)\n if (previouslySelected) {\n const disablePayload: MSystemPagesThemeInsertUpdatePayload = {\n _id: previouslySelected._id || '',\n sytm_title: previouslySelected.sytm_title || '',\n sytm_desc: previouslySelected.sytm_desc || '',\n sytm_theme_code: previouslySelected.sytm_theme_code || '',\n sytm_preview_id_fm: previouslySelected.sytm_preview_id_fm || '',\n sytm_page_id_sypg: this.pageId(),\n sytm_configuration: previouslySelected.sytm_configuration || {},\n sytm_sub_title: previouslySelected.sytm_sub_title || '',\n sytm_entity_id_syen: previouslySelected.sytm_entity_id_syen || this.appState.getActiveEntityId(),\n sytm_isselected: false,\n sytm_layout: previouslySelected.sytm_layout,\n sytm_isactive: previouslySelected.sytm_isactive ?? true\n };\n this.themeService.updateTheme(disablePayload).pipe(takeUntilDestroyed(this.destroyRef)).subscribe({ next: () => {}, error: () => {} });\n }\n\n // Enable current selection\n const enablePayload: MSystemPagesThemeInsertUpdatePayload = {\n _id: theme._id || '',\n sytm_title: theme.sytm_title || '',\n sytm_desc: theme.sytm_desc || '',\n sytm_theme_code: theme.sytm_theme_code || '',\n sytm_preview_id_fm: theme.sytm_preview_id_fm || '',\n sytm_page_id_sypg: this.pageId(),\n sytm_configuration: theme.sytm_configuration || {},\n sytm_sub_title: theme.sytm_sub_title || '',\n sytm_entity_id_syen: theme.sytm_entity_id_syen || this.appState.getActiveEntityId(),\n sytm_isselected: true,\n sytm_layout: theme.sytm_layout,\n sytm_isactive: theme.sytm_isactive ?? true\n };\n\n this.loading.set(true);\n this.themeService.updateTheme(enablePayload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: () => { this.loadThemes(); this.loading.set(false); },\n error: () => { this.loading.set(false); }\n });\n }\n}","<!-- Page Theme Container -->\r\n<div class=\"tw-flex tw-h-full tw-w-full\">\r\n \r\n <!-- Left: Form and header (60%) -->\r\n <div class=\"tw-w-full lg:tw-w-3/5 tw-flex tw-flex-col tw-border-r tw-border-gray-200\">\r\n\r\n <!-- Header Section -->\r\n <div class=\"tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n\r\n <!-- Title and Back Button -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-4\">\r\n <button cideEleButton variant=\"ghost\" size=\"sm\" (click)=\"goBack()\" class=\"tw-text-gray-600 hover:tw-text-gray-900\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">arrow_back</cide-ele-icon>\r\n </button>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">palette</cide-ele-icon>\r\n <div>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Theme Management</h5>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-m-0\">Page: {{ pageTitle() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Quick Add/Edit Form Section -->\r\n <div class=\"tw-px-6 tw-py-4 tw-bg-white tw-overflow-auto\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Theme' : 'Quick Add Theme' }}</h6>\r\n </div>\r\n </div>\r\n\r\n <!-- Form (kept as-is) -->\r\n <form [formGroup]=\"themeForm\" (ngSubmit)=\"saveTheme()\" class=\"tw-space-y-4\">\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-4\">\r\n <!-- Theme Title -->\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_title\" formControlName=\"sytm_title\" placeholder=\"Enter theme title\" label=\"Theme Title*\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n <!-- Theme Code -->\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_theme_code\" formControlName=\"sytm_theme_code\" placeholder=\"Enter theme code\" label=\"Theme Code*\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n <!-- Status -->\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input\r\n id=\"sytm_isactive_cb\"\r\n type=\"checkbox\"\r\n label=\"Active\"\r\n size=\"sm\"\r\n formControlName=\"sytm_isactive\">\r\n </cide-ele-input>\r\n </div>\r\n <!-- Sub Title -->\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_sub_title\" formControlName=\"sytm_sub_title\" placeholder=\"Enter sub title\" label=\"Sub Title\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n <!-- Preview ID -->\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_preview_id_fm\" formControlName=\"sytm_preview_id_fm\" placeholder=\"Enter preview image ID\" label=\"Preview Image ID\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n <!-- Description -->\r\n <div class=\"tw-space-y-2 md:tw-col-span-2\">\r\n <cide-ele-textarea id=\"sytm_desc\" formControlName=\"sytm_desc\" placeholder=\"Enter theme description\" rows=\"2\" label=\"Description\" size=\"sm\"></cide-ele-textarea>\r\n </div>\r\n <!-- Configuration JSON -->\r\n <div class=\"tw-space-y-2 md:tw-col-span-3\">\r\n <cide-ele-json-editor label=\"Configuration JSON\" formControlName=\"sytm_configuration\" [required]=\"true\" [config]=\"{\r\n showLineNumbers: true,\r\n autoFormat: true,\r\n validateOnChange: true,\r\n minHeight: 150,\r\n maxHeight: 300,\r\n placeholder: 'Enter theme configuration JSON...'\r\n }\" helperText=\"Enter valid JSON configuration for the theme\"></cide-ele-json-editor>\r\n </div>\r\n <!-- Layout Configuration + Selection: right-side checkbox list -->\r\n <div class=\"lg:tw-col-span-1 tw-space-y-2\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Layout & Selection</div>\r\n <!-- Selected toggle -->\r\n <div class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-md tw-px-3 tw-py-2\">\r\n <cide-ele-input\r\n id=\"sytm_isselected\"\r\n type=\"checkbox\"\r\n label=\"Selected (Default)\"\r\n size=\"sm\"\r\n formControlName=\"sytm_isselected\">\r\n </cide-ele-input>\r\n </div>\r\n <div formGroupName=\"sytm_layout\" class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-md tw-divide-y tw-overflow-hidden\">\r\n <!-- Sidebar -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_sidebar\">\r\n <cide-ele-input id=\"layout_sidebar_status\" type=\"checkbox\" label=\"Sidebar\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Header -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_header\">\r\n <cide-ele-input id=\"layout_header_status\" type=\"checkbox\" label=\"Header\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Footer -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_footer\">\r\n <cide-ele-input id=\"layout_footer_status\" type=\"checkbox\" label=\"Footer\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Breadcrumb -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_breadcrumb\">\r\n <cide-ele-input id=\"layout_breadcrumb_status\" type=\"checkbox\" label=\"Breadcrumb\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Console -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_console\">\r\n <cide-ele-input id=\"layout_console_status\" type=\"checkbox\" label=\"Console\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Request -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_request\">\r\n <cide-ele-input id=\"layout_request_status\" type=\"checkbox\" label=\"Request\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n </div>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-pt-1\">Toggle active sections. Only one theme can be selected as default. More options can be added here later.</p>\r\n </div>\r\n <!-- Drawer Configuration -->\r\n <div class=\"tw-space-y-2 md:tw-col-span-3\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Drawers</div>\r\n <button cideEleButton type=\"button\" size=\"xs\" variant=\"outline\" (click)=\"addDrawer()\">\r\n Add Drawer\r\n </button>\r\n </div>\r\n\r\n <div formGroupName=\"sytm_layout\">\r\n <div class=\"tw-space-y-2\" formArrayName=\"sytm_layout_drawer\">\r\n <div *ngFor=\"let drawerGrp of drawerArray.controls; let i = index\" [formGroupName]=\"i\" class=\"tw-border tw-border-gray-200 tw-rounded-md tw-p-3 tw-flex tw-items-center tw-gap-3\">\r\n <cide-ele-input id=\"drawer_active_{{i}}\" type=\"checkbox\" label=\"Active\" size=\"sm\" formControlName=\"syth_status\"></cide-ele-input>\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-select\r\n id=\"drawer_config_{{i}}\"\r\n label=\"Drawer For\"\r\n size=\"sm\"\r\n [options]=\"drawerConfigOptions\"\r\n formControlName=\"syth_config_syco_for\">\r\n </cide-ele-select>\r\n </div>\r\n <button cideEleButton type=\"button\" size=\"xs\" variant=\"ghost\" (click)=\"removeDrawer(i)\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n <p class=\"tw-text-xs tw-text-gray-500\">Configure multiple drawers as needed.</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-flex tw-flex-col tw-gap-2 tw-pt-4 tw-border-t tw-border-gray-200\">\r\n <div class=\"tw-flex tw-items-center tw-justify-end tw-space-x-3\">\r\n <button cideEleButton type=\"button\" variant=\"outline\" (click)=\"cancelForm()\" [disabled]=\"loading()\">Cancel</button>\r\n <button cideEleButton type=\"submit\" variant=\"primary\" leftIcon=\"add\" [disabled]=\"!themeForm.valid || loading()\" [loading]=\"loading()\">\r\n {{ isEditMode() ? 'Update Theme' : 'Create Theme' }}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Right: Theme gallery (40%) -->\r\n <div class=\"tw-hidden lg:tw-flex tw-w-2/5 tw-flex-col\">\r\n <!-- (Header consolidated above) -->\r\n\r\n <!-- Gallery list -->\r\n <div class=\"tw-flex-1 tw-overflow-auto tw-bg-gray-50\">\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3 tw-p-4\">\r\n @for (theme of filteredThemes(); track theme._id) {\r\n <div class=\"tw-rounded-md tw-transition tw-cursor-pointer tw-relative\"\r\n [ngClass]=\"theme.sytm_isselected\r\n ? 'tw-border tw-border-blue-500 tw-ring-2 tw-ring-blue-200 tw-bg-blue-50/50'\r\n : 'tw-bg-white tw-border tw-border-gray-200 hover:tw-shadow-sm'\"\r\n (click)=\"editTheme(theme)\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n [attr.aria-selected]=\"theme.sytm_isselected ? 'true' : 'false'\"\r\n [attr.aria-label]=\"'Edit theme ' + (theme.sytm_title || theme.sytm_theme_code)\"\r\n (keydown.enter)=\"editTheme(theme)\"\r\n (keydown.space)=\"$event.preventDefault(); editTheme(theme)\">\r\n\r\n <!-- Selected badge -->\r\n <div *ngIf=\"theme.sytm_isselected\"\r\n class=\"tw-absolute tw-top-2 tw-right-2 tw-flex tw-items-center tw-justify-center tw-w-6 tw-h-6 tw-rounded-full tw-bg-blue-600 tw-text-white\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">check</cide-ele-icon>\r\n </div>\r\n \r\n <div class=\"tw-aspect-[16/9] tw-bg-gray-100 tw-rounded-t-md tw-overflow-hidden tw-flex tw-items-center tw-justify-center\">\r\n @if (getPreviewUrl(theme)) {\r\n <img [src]=\"getPreviewUrl(theme)\" class=\"tw-w-full tw-h-full tw-object-cover\" alt=\"Preview\" />\r\n } @else {\r\n <div class=\"tw-text-gray-400 tw-text-xs\">No preview</div>\r\n }\r\n </div>\r\n <div class=\"tw-p-3 tw-space-y-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"theme.sytm_title\">{{ theme.sytm_title || 'Untitled Theme' }}</div>\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" [title]=\"theme.sytm_theme_code\">{{ theme.sytm_theme_code }}</div>\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-pt-1\">\r\n <span class=\"tw-inline-flex tw-items-center tw-gap-1 tw-text-xs\" [ngClass]=\"theme.sytm_isactive ? 'tw-text-green-700' : 'tw-text-red-700'\">\r\n <span class=\"tw-w-1.5 tw-h-1.5 tw-rounded-full\" [ngClass]=\"theme.sytm_isactive ? 'tw-bg-green-500' : 'tw-bg-red-500'\"></span>\r\n {{ theme.sytm_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n <div class=\"tw-flex tw-items-center tw-gap-1\">\r\n <!-- Set Selected Button - Clear and Simple -->\r\n @if (theme.sytm_isselected) {\r\n <span class=\"tw-inline-flex tw-items-center tw-gap-1 tw-px-2 tw-py-1 tw-bg-green-100 tw-text-green-800 tw-rounded-md tw-text-xs tw-font-medium\">\r\n <cide-ele-icon class=\"tw-w-3 tw-h-3\">check</cide-ele-icon>\r\n Selected\r\n </span>\r\n } @else {\r\n <button cideEleButton \r\n variant=\"outline\" \r\n size=\"xs\"\r\n (click)=\"$event.stopPropagation(); setSelectedTheme(theme)\"\r\n [attr.aria-label]=\"'Select ' + (theme.sytm_title || theme.sytm_theme_code) + ' theme'\"\r\n class=\"tw-text-xs\">\r\n Select\r\n </button>\r\n }\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" (click)=\"$event.stopPropagation(); editTheme(theme)\"\r\n [attr.aria-label]=\"'Edit theme ' + (theme.sytm_title || theme.sytm_theme_code)\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">edit</cide-ele-icon>\r\n </button>\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" (click)=\"$event.stopPropagation(); deleteTheme(theme)\"\r\n [attr.aria-label]=\"'Delete theme ' + (theme.sytm_title || theme.sytm_theme_code)\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (!loading() && filteredThemes().length === 0) {\r\n <div class=\"tw-col-span-full tw-text-center tw-text-xs tw-text-gray-500 tw-py-8\">No themes found</div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- \r\n Angular Template References for Grid Renderers (Best Practice)\r\n \r\n These ng-template elements represent the Angular best practice for custom rendering.\r\n They provide:\r\n - Type safety with template context\r\n - Component lifecycle integration\r\n - Change detection optimization\r\n - Proper event handling\r\n - Accessibility features\r\n \r\n Note: Current data grid uses string renderers for compatibility.\r\n Templates are maintained for future component enhancement.\r\n-->\r\n\r\n<!-- Theme Details Renderer Template -->\r\n<ng-template #themeDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Theme Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon \r\n class=\"tw-text-purple-600\" \r\n size=\"xs\">\r\n palette\r\n </cide-ele-icon>\r\n </div>\r\n \r\n <!-- Theme Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \r\n [title]=\"row.sytm_title\">\r\n {{ row.sytm_title || 'Untitled' }}\r\n </div>\r\n @if (row.sytm_desc) {\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \r\n [title]=\"row.sytm_desc\">\r\n {{ row.sytm_desc }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Theme Status Renderer Template -->\r\n<ng-template #themeStatusRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\r\n [ngClass]=\"row.sytm_isactive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800'\">\r\n {{ row.sytm_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown Renderer Template -->\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown \r\n [items]=\"getActionDropdownItems(row)\"\r\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template> ","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\nimport { \r\n cidePath, \r\n coreRoutesUrl, \r\n generateStringFromObject, \r\n hostManagerRoutesUrl,\r\n MPageElements,\r\n MPageElementsGetByIdPayload,\r\n MPageElementsDeletePayload,\r\n MPageElementsInsertUpdatePayload,\r\n MPageElementsToggleStatusPayload,\r\n MPageElementsByPageIdPayload,\r\n MPageElementsMappingDeletePayload,\r\n MPageElementsMappingInsertUpdatePayload,\r\n MPageElementsMappingByPageIdPayload,\r\n pageElementsControllerResponse,\r\n pageElementsByIdControllerResponse,\r\n pageElementsInsertUpdateControllerResponse,\r\n pageElementsDeleteControllerResponse,\r\n pageElementsToggleStatusControllerResponse,\r\n pageElementsByPageIdControllerResponse,\r\n pageElementsMappingInsertUpdateControllerResponse,\r\n pageElementsMappingDeleteControllerResponse,\r\n pageElementsMappingByPageIdControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PageControlsService {\r\n constructor(private http: HttpClient) {\r\n console.log('PageControlsService initialized - using real API');\r\n }\r\n\r\n /**\r\n * Get control list from API\r\n */\r\n getControlList(body: MPageElements): Observable<pageElementsControllerResponse> {\r\n const query = generateStringFromObject(body);\r\n return this.http?.get<pageElementsControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControl, query]))\r\n .pipe(\r\n catchError(error => {\r\n console.error('PageControlsService API error:', error);\r\n return this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Create new control\r\n */\r\n createControl(payload: MPageElementsInsertUpdatePayload): Observable<pageElementsInsertUpdateControllerResponse> {\r\n console.log('Creating control:', payload);\r\n \r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControl]);\r\n return this.http.post<pageElementsInsertUpdateControllerResponse>(url, payload)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Update existing control\r\n */\r\n updateControl(payload: MPageElementsInsertUpdatePayload): Observable<pageElementsInsertUpdateControllerResponse> {\r\n console.log('Updating control:', payload);\r\n \r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControl]);\r\n return this.http.post<pageElementsInsertUpdateControllerResponse>(url, payload)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get control by ID\r\n */\r\n getControlById(id: string): Observable<pageElementsByIdControllerResponse> {\r\n console.log('Getting control by ID:', id);\r\n const payload: MPageElementsGetByIdPayload = { sype_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControl, 'byId', query]);\r\n return this.http.get<pageElementsByIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get controls by page ID\r\n */\r\n getControlsByPageId(pageId: string): Observable<pageElementsByPageIdControllerResponse> {\r\n console.log('Getting controls by page ID:', pageId);\r\n const payload: MPageElementsByPageIdPayload = { sype_page_id_sypg: pageId };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControl, 'byPage', query]);\r\n return this.http.get<pageElementsByPageIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get control mappings by page ID\r\n */\r\n getControlMappingsByPageId(pageId: string): Observable<pageElementsMappingByPageIdControllerResponse> {\r\n console.log('Getting control mappings by page ID:', pageId);\r\n const payload: MPageElementsMappingByPageIdPayload = { sypem_id_sypg: pageId };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControlMapping, query]);\r\n return this.http.get<pageElementsMappingByPageIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Create control mapping\r\n */\r\n createControlMapping(payload: MPageElementsMappingInsertUpdatePayload): Observable<pageElementsMappingInsertUpdateControllerResponse> {\r\n console.log('Creating control mapping:', payload);\r\n \r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControlMapping]);\r\n return this.http.post<pageElementsMappingInsertUpdateControllerResponse>(url, payload)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete control mapping\r\n */\r\n deleteControlMapping(id: string): Observable<pageElementsMappingDeleteControllerResponse> {\r\n const payload: MPageElementsMappingDeletePayload = { sypem_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControlMapping, query]);\r\n return this.http.delete<pageElementsMappingDeleteControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete control\r\n */\r\n deleteControl(id: string): Observable<pageElementsDeleteControllerResponse> {\r\n const payload: MPageElementsDeletePayload = { sype_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControl, query]);\r\n return this.http.delete<pageElementsDeleteControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Toggle control active status\r\n */\r\n toggleControlStatus(payload: MPageElementsToggleStatusPayload): Observable<pageElementsToggleStatusControllerResponse> {\r\n console.log('Toggling control status:', payload);\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControl, query]);\r\n return this.http.put<pageElementsToggleStatusControllerResponse>(url, {})\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n\r\n\r\n /**\r\n * Handle errors\r\n */\r\n private handleError(error: unknown): Observable<never> {\r\n let errorMessage = 'An error occurred';\r\n\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n } else if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n\r\n console.error('Page Controls Service Error:', errorMessage);\r\n return throwError(() => new Error(errorMessage));\r\n }\r\n} ","import { Component, signal, computed, DestroyRef, inject, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule, NonNullableFormBuilder, FormsModule } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\nimport { PageControlsService } from '../../services/page-controls.service';\r\nimport { AppStateHelperService } from 'cloud-ide-layout';\r\nimport { CideEleButtonComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideEleDropdownComponent, DropdownItem } from 'cloud-ide-element';\r\nimport { controlType, generateObjectFromString, ICoreSype, MPageElements, MPageElementsInsertUpdatePayload, themeSize } from 'cloud-ide-lms-model';\r\n\r\n@Component({\r\n selector: 'cide-core-app-page-controls',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n CideEleButtonComponent,\r\n CideInputComponent,\r\n CideSelectComponent,\r\n CideIconComponent,\r\n CideEleDropdownComponent\r\n ],\r\n templateUrl: './page-controls.component.html',\r\n styleUrls: ['./page-controls.component.scss']\r\n})\r\nexport class PageControlsComponent implements OnInit {\r\n // Dependency injection\r\n private destroyRef = inject(DestroyRef);\r\n private controlsService = inject(PageControlsService);\r\n private appState = inject(AppStateHelperService);\r\n private fb = inject(NonNullableFormBuilder);\r\n private router = inject(Router);\r\n private route = inject(ActivatedRoute);\r\n\r\n\r\n\r\n // Make Math available in template\r\n Math = Math;\r\n\r\n // Signals for reactive state management\r\n controls = signal<ICoreSype[]>([]);\r\n loading = signal(false);\r\n error = signal<string | null>(null);\r\n selectedItems = signal<string[]>([]);\r\n searchTerm = signal('');\r\n\r\n // Page information\r\n pageId = signal<string>('');\r\n pageTitle = signal<string>('');\r\n\r\n // Form state\r\n isEditMode = signal(false);\r\n editingControlId = signal<string | null>(null);\r\n retrievedControl = signal<ICoreSype | null>(null);\r\n\r\n // Control selection for new layout\r\n selectedControlId = signal<string | null>(null);\r\n\r\n // Pagination signals\r\n currentPage = signal(1);\r\n pageSize = signal(10);\r\n totalItems = signal(0);\r\n\r\n // Modern reactive forms with signals - No validators for simplicity\r\n controlForm = this.fb.group({\r\n sype_key: [''],\r\n sype_label: [''],\r\n sype_label_hide: [false],\r\n sype_auto_complete: [false], // Changed to boolean for checkbox\r\n sype_hide_helper_and_error_text: [false],\r\n sype_type: [''], // controlType\r\n sype_option_key: [''],\r\n sype_placeholder: [''],\r\n sype_min_length: [0],\r\n sype_max_length: [20],\r\n sype_regex: [''],\r\n sype_required: [false],\r\n sype_disabled: [false],\r\n sype_width: [''], // Changed to string for px values like \"20px\"\r\n sype_height: [''], // Changed to string for px values like \"20px\"\r\n sype_label_placement: ['left' as 'floating' | 'fixed'],\r\n sype_helper_text_collapse: [false],\r\n sype_default: ['' as string | number | boolean],\r\n sype_tooltip: [''],\r\n sype_size: ['sm' as themeSize], // Changed default to small\r\n sype_leading_icon: [''],\r\n sype_isactive: [true],\r\n sype_entity_id_syen: ['']\r\n });\r\n\r\n // Computed values\r\n isFormDirty = computed(() => this.controlForm.dirty);\r\n\r\n\r\n\r\n ngOnInit(): void {\r\n this.initializeComponent();\r\n }\r\n\r\n /**\r\n * Initialize component\r\n */\r\n private initializeComponent(): void {\r\n // Get page information from route\r\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\r\n const queryParams = params['query'];\r\n const queryData = generateObjectFromString(queryParams);\r\n this.pageId.set(queryData?.sypg_id || '');\r\n this.pageTitle.set(queryData?.sypg_title || '');\r\n\r\n if (this.pageId()) {\r\n this.loadControls();\r\n this.setupFormSubscriptions();\r\n this.setEntityIdFromAppState();\r\n } else {\r\n this.error.set('No page ID provided');\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Set entity ID from app state - auto-assigned internally\r\n */\r\n private setEntityIdFromAppState(): void {\r\n const entityId = this.appState.getActiveEntityId();\r\n if (entityId) {\r\n this.controlForm.patchValue({\r\n sype_entity_id_syen: entityId\r\n });\r\n // Disable the entity field since it's auto-assigned\r\n this.controlForm.get('sype_entity_id_syen')?.disable();\r\n }\r\n }\r\n\r\n /**\r\n * Load controls from API\r\n */\r\n private loadControls(): void {\r\n this.loading.set(true);\r\n this.error.set(null);\r\n\r\n const request: MPageElements = {\r\n sype_page_id_sypg: this.pageId()\r\n };\r\n\r\n this.controlsService.getControlList(request)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response.success) {\r\n this.controls.set(response.data || []);\r\n this.totalItems.set(response.total || 0);\r\n } else {\r\n this.error.set(response.message || 'Failed to load controls');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error) => {\r\n console.error('Error loading controls:', error);\r\n this.error.set('Failed to load controls. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Setup form subscriptions\r\n */\r\n private setupFormSubscriptions(): void {\r\n // Watch for form changes to enable/disable save button\r\n this.controlForm.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => {\r\n // Form validation is handled by computed signals\r\n });\r\n }\r\n\r\n\r\n\r\n /**\r\n * Create new control\r\n */\r\n createControl(): void {\r\n\r\n const formValue = this.controlForm.getRawValue();\r\n const entityId = this.appState.getActiveEntityId();\r\n\r\n const newControl: MPageElementsInsertUpdatePayload = {\r\n _id: '',\r\n sype_key: formValue.sype_key,\r\n sype_page_id_sypg: this.pageId(),\r\n sype_label: formValue.sype_label,\r\n sype_label_hide: formValue.sype_label_hide,\r\n sype_auto_complete: formValue.sype_auto_complete,\r\n sype_hide_helper_and_error_text: formValue.sype_hide_helper_and_error_text,\r\n sype_type: formValue.sype_type as controlType,\r\n sype_option_key: formValue.sype_option_key,\r\n sype_placeholder: formValue.sype_placeholder,\r\n sype_min_length: formValue.sype_min_length,\r\n sype_max_length: formValue.sype_max_length,\r\n sype_regex: formValue.sype_regex,\r\n sype_required: formValue.sype_required,\r\n sype_disabled: formValue.sype_disabled,\r\n sype_width: formValue.sype_width,\r\n sype_height: formValue.sype_height,\r\n sype_label_placement: formValue.sype_label_placement,\r\n sype_helper_text_collapse: formValue.sype_helper_text_collapse,\r\n sype_default: formValue.sype_default,\r\n sype_tooltip: formValue.sype_tooltip,\r\n sype_size: formValue.sype_size,\r\n sype_leading_icon: formValue.sype_leading_icon,\r\n sype_isactive: formValue.sype_isactive,\r\n sype_entity_id_syen: entityId || formValue.sype_entity_id_syen\r\n };\r\n\r\n this.loading.set(true);\r\n this.controlsService.createControl(newControl)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response.success) {\r\n this.resetForm();\r\n this.loadControls();\r\n console.log('Control created successfully');\r\n } else {\r\n console.error(response.message || 'Failed to create control');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error) => {\r\n console.error('Error creating control:', error);\r\n console.error('Failed to create control. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Update existing control\r\n */\r\n updateControl(): void {\r\n if (!this.editingControlId()) {\r\n return;\r\n }\r\n\r\n const formValue = this.controlForm.getRawValue();\r\n const entityId = this.appState.getActiveEntityId();\r\n\r\n const updatedControl: MPageElementsInsertUpdatePayload = {\r\n _id: this.editingControlId()!,\r\n sype_key: formValue.sype_key,\r\n sype_page_id_sypg: this.pageId(),\r\n sype_label: formValue.sype_label,\r\n sype_label_hide: formValue.sype_label_hide,\r\n sype_auto_complete: Boolean(formValue.sype_auto_complete),\r\n sype_hide_helper_and_error_text: formValue.sype_hide_helper_and_error_text,\r\n sype_type: formValue.sype_type as controlType,\r\n sype_option_key: formValue.sype_option_key,\r\n sype_placeholder: formValue.sype_placeholder,\r\n sype_min_length: formValue.sype_min_length,\r\n sype_max_length: formValue.sype_max_length,\r\n sype_regex: formValue.sype_regex,\r\n sype_required: formValue.sype_required,\r\n sype_disabled: formValue.sype_disabled,\r\n sype_width: formValue.sype_width,\r\n sype_height: formValue.sype_height,\r\n sype_label_placement: formValue.sype_label_placement,\r\n sype_helper_text_collapse: formValue.sype_helper_text_collapse,\r\n sype_default: formValue.sype_default,\r\n sype_tooltip: formValue.sype_tooltip,\r\n sype_size: formValue.sype_size,\r\n sype_leading_icon: formValue.sype_leading_icon,\r\n sype_isactive: formValue.sype_isactive,\r\n sype_entity_id_syen: entityId || formValue.sype_entity_id_syen\r\n };\r\n\r\n this.loading.set(true);\r\n this.controlsService.updateControl(updatedControl)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response.success) {\r\n this.resetForm();\r\n this.loadControls();\r\n console.log('Control updated successfully');\r\n } else {\r\n console.error(response.message || 'Failed to update control');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error) => {\r\n console.error('Error updating control:', error);\r\n console.error('Failed to update control. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Edit control\r\n */\r\n editControl(control: ICoreSype): void {\r\n this.isEditMode.set(true);\r\n this.editingControlId.set(control._id || null);\r\n this.retrievedControl.set(control);\r\n\r\n this.controlForm.patchValue({\r\n sype_key: control.sype_key,\r\n sype_label: control.sype_label,\r\n sype_label_hide: control.sype_label_hide,\r\n sype_auto_complete: control.sype_auto_complete ? true : false,\r\n sype_hide_helper_and_error_text: control.sype_hide_helper_and_error_text,\r\n sype_type: control.sype_type,\r\n sype_option_key: control.sype_option_key,\r\n sype_placeholder: control.sype_placeholder,\r\n sype_min_length: control.sype_min_length,\r\n sype_max_length: control.sype_max_length,\r\n sype_regex: control.sype_regex,\r\n sype_required: control.sype_required,\r\n sype_disabled: control.sype_disabled,\r\n sype_width: control.sype_width?.toString() || '',\r\n sype_height: control.sype_height?.toString() || '',\r\n sype_label_placement: control.sype_label_placement,\r\n sype_helper_text_collapse: control.sype_helper_text_collapse,\r\n sype_default: control.sype_default as string | number | boolean,\r\n sype_tooltip: control.sype_tooltip,\r\n sype_size: control.sype_size as themeSize,\r\n sype_leading_icon: control.sype_leading_icon,\r\n sype_isactive: control.sype_isactive,\r\n sype_entity_id_syen: String(control.sype_entity_id_syen || '')\r\n });\r\n\r\n this.controlForm.markAsPristine();\r\n }\r\n\r\n /**\r\n * Delete control\r\n */\r\n deleteControl(control: ICoreSype): void {\r\n if (confirm(`Are you sure you want to delete the control \"${control.sype_label}\"?`)) {\r\n this.loading.set(true);\r\n this.controlsService.deleteControl(control._id || '')\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response.success) {\r\n this.loadControls();\r\n console.log('Control deleted successfully');\r\n } else {\r\n console.error(response.message || 'Failed to delete control');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error) => {\r\n console.error('Error deleting control:', error);\r\n console.error('Failed to delete control. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Toggle control status\r\n */\r\n toggleControlStatus(control: ICoreSype): void {\r\n this.loading.set(true);\r\n this.controlsService.toggleControlStatus({ sype_id: control._id || '', sype_isactive: !control.sype_isactive })\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response.success) {\r\n this.loadControls();\r\n console.log(`Control ${control.sype_isactive ? 'deactivated' : 'activated'} successfully`);\r\n } else {\r\n console.error(response.message || 'Failed to toggle control status');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error) => {\r\n console.error('Error toggling control status:', error);\r\n console.error('Failed to toggle control status. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Save control (create or update)\r\n */\r\n saveControl(): void {\r\n if (this.isEditMode()) {\r\n this.updateControl();\r\n } else {\r\n this.createControl();\r\n }\r\n }\r\n\r\n /**\r\n * Cancel form\r\n */\r\n cancelForm(): void {\r\n this.resetForm();\r\n }\r\n\r\n /**\r\n * Go back to page list\r\n */\r\n goBack(): void {\r\n this.router.navigate(['/core/page']);\r\n }\r\n\r\n /**\r\n * Reset form\r\n */\r\n private resetForm(): void {\r\n const entityId = this.appState.getActiveEntityId();\r\n\r\n this.controlForm.reset({\r\n sype_key: '',\r\n sype_label: '',\r\n sype_label_hide: false,\r\n sype_auto_complete: false,\r\n sype_hide_helper_and_error_text: false,\r\n sype_type: '',\r\n sype_option_key: '',\r\n sype_placeholder: '',\r\n sype_min_length: 0,\r\n sype_max_length: 20,\r\n sype_regex: '',\r\n sype_required: false,\r\n sype_disabled: false,\r\n sype_width: '',\r\n sype_height: '',\r\n sype_label_placement: 'floating',\r\n sype_helper_text_collapse: false,\r\n sype_default: '' as string | number | boolean,\r\n sype_tooltip: '',\r\n sype_size: 'md',\r\n sype_leading_icon: '',\r\n sype_isactive: true,\r\n sype_entity_id_syen: entityId || ''\r\n });\r\n this.isEditMode.set(false);\r\n this.editingControlId.set(null);\r\n this.retrievedControl.set(null);\r\n this.controlForm.markAsPristine();\r\n this.controlForm.markAsUntouched();\r\n }\r\n\r\n /**\r\n * Mark form as touched to trigger validation display\r\n */\r\n private markFormAsTouched(): void {\r\n Object.keys(this.controlForm.controls).forEach(key => {\r\n const control = this.controlForm.get(key);\r\n control?.markAsTouched();\r\n });\r\n }\r\n\r\n /**\r\n * Get dropdown items for actions\r\n */\r\n getActionDropdownItems(control: ICoreSype): DropdownItem[] {\r\n return [\r\n {\r\n id: 'edit',\r\n label: 'Edit',\r\n icon: 'edit'\r\n },\r\n {\r\n id: 'toggle',\r\n label: control.sype_isactive ? 'Deactivate' : 'Activate',\r\n icon: control.sype_isactive ? 'block' : 'check_circle'\r\n },\r\n {\r\n id: 'delete',\r\n label: 'Delete',\r\n icon: 'delete'\r\n }\r\n ];\r\n }\r\n\r\n /**\r\n * Handle dropdown item click\r\n */\r\n onDropdownItemClick(item: DropdownItem, control: ICoreSype): void {\r\n switch (item.id) {\r\n case 'edit':\r\n this.editControl(control);\r\n break;\r\n case 'toggle':\r\n this.toggleControlStatus(control);\r\n break;\r\n case 'delete':\r\n this.deleteControl(control);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Close all dropdowns\r\n */\r\n closeAllDropdowns(): void {\r\n // This method can be used to close dropdowns if needed\r\n }\r\n\r\n // New methods for the vertical layout\r\n selectControl(control: ICoreSype): void {\r\n this.selectedControlId.set(control._id || null);\r\n console.log('Selected control:', control);\r\n }\r\n\r\n trackByControlId(index: number, control: ICoreSype): string {\r\n return control._id || '';\r\n }\r\n} ","<!-- Page Controls Container -->\n<div class=\"page-controls-container\">\n <!-- Header Section -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <button \n cideEleButton\n variant=\"ghost\"\n size=\"sm\"\n (click)=\"goBack()\"\n class=\"back-button\">\n <cide-ele-icon>arrow_back</cide-ele-icon>\n </button>\n <div class=\"title-section\">\n <cide-ele-icon class=\"title-icon\">settings</cide-ele-icon>\n <div>\n <h1 class=\"title\">Control Management</h1>\n <p class=\"subtitle\">Page: {{ pageTitle() }}</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Error Message -->\n <div class=\"error-message\" *ngIf=\"error()\">\n <cide-ele-icon>error</cide-ele-icon>\n <div>\n <h3>Error</h3>\n <p>{{ error() }}</p>\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"main-content\">\n <!-- Form Section -->\n <div class=\"form-section\">\n <div class=\"form-header\">\n <cide-ele-icon>{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h3>{{ isEditMode() ? 'Edit Control' : 'Quick Add Control' }}</h3>\n </div>\n\n <!-- Form -->\n <form [formGroup]=\"controlForm\" (ngSubmit)=\"saveControl()\" class=\"control-form tw-overflow-y-auto\">\n <div class=\"form-grid\">\n \n <!-- Basic Information Section -->\n <!-- Control Key -->\n <div class=\"form-group\">\n <cide-ele-input\n id=\"sype_key\"\n formControlName=\"sype_key\"\n placeholder=\"Enter control key\"\n label=\"Control Key\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Control Label -->\n <div class=\"form-group\">\n <cide-ele-input\n id=\"sype_label\"\n formControlName=\"sype_label\"\n placeholder=\"Enter control label\"\n label=\"Control Label\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Control Type -->\n <div class=\"form-group\">\n <cide-ele-select\n id=\"sype_type\"\n formControlName=\"sype_type\"\n [options]=\"[\n { value: 'text', label: 'Text Input' },\n { value: 'textarea', label: 'Text Area' },\n { value: 'select', label: 'Select' },\n { value: 'checkbox', label: 'Checkbox' },\n { value: 'radio', label: 'Radio' },\n { value: 'date', label: 'Date' },\n { value: 'number', label: 'Number' },\n { value: 'email', label: 'Email' },\n { value: 'password', label: 'Password' },\n { value: 'file', label: 'File Upload' }\n ]\"\n label=\"Control Type\"\n size=\"sm\">\n </cide-ele-select>\n </div>\n\n <!-- Status - Checkbox aligned properly -->\n <div class=\"form-group\">\n <cide-ele-input\n id=\"sype_isactive\"\n type=\"checkbox\"\n formControlName=\"sype_isactive\"\n label=\"Active Status\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Placeholder -->\n <div class=\"form-group\">\n <cide-ele-input\n id=\"sype_placeholder\"\n formControlName=\"sype_placeholder\"\n placeholder=\"Enter placeholder text\"\n label=\"Placeholder\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Auto Complete - Checkbox aligned properly -->\n <div class=\"form-group\">\n <cide-ele-input\n id=\"sype_auto_complete\"\n type=\"checkbox\"\n formControlName=\"sype_auto_complete\"\n label=\"Auto Complete\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Tooltip -->\n <div class=\"form-group\">\n <cide-ele-input\n id=\"sype_tooltip\"\n formControlName=\"sype_tooltip\"\n placeholder=\"Enter tooltip text\"\n label=\"Tooltip\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Validation & Sizing Section -->\n <!-- Min/Max Length - Side by side -->\n <div class=\"form-group form-group-row\">\n <div class=\"form-group-half\">\n <cide-ele-input\n id=\"sype_min_length\"\n type=\"number\"\n formControlName=\"sype_min_length\"\n placeholder=\"0\"\n label=\"Min Length\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n <div class=\"form-group-half\">\n <cide-ele-input\n id=\"sype_max_length\"\n type=\"number\"\n formControlName=\"sype_max_length\"\n placeholder=\"20\"\n label=\"Max Length\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Size & Label Placement - Side by side -->\n <div class=\"form-group form-group-row\">\n <div class=\"form-group-half\">\n <cide-ele-select\n id=\"sype_size\"\n formControlName=\"sype_size\"\n label=\"Size\"\n size=\"xs\"\n [options]=\"[\n { value: 'xs', label: 'XS' },\n { value: 'sm', label: 'SM' },\n { value: 'md', label: 'MD' },\n { value: 'lg', label: 'LG' },\n { value: 'xl', label: 'XL' },\n { value: 'xxl', label: 'XXL' }\n ]\">\n </cide-ele-select>\n </div>\n <div class=\"form-group-half\">\n <cide-ele-select\n id=\"sype_label_placement\"\n formControlName=\"sype_label_placement\"\n label=\"Label Placement\"\n size=\"xs\"\n [options]=\"[\n { value: 'left', label: 'Left' },\n { value: 'floating', label: 'Floating' },\n { value: 'fixed', label: 'Fixed' }\n ]\">\n </cide-ele-select>\n </div>\n </div>\n\n <!-- Width & Height - Side by side -->\n <div class=\"form-group form-group-row\">\n <div class=\"form-group-half\">\n <cide-ele-input\n id=\"sype_width\"\n type=\"text\"\n formControlName=\"sype_width\"\n placeholder=\"20px\"\n label=\"Width\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n <div class=\"form-group-half\">\n <cide-ele-input\n id=\"sype_height\"\n type=\"text\"\n formControlName=\"sype_height\"\n placeholder=\"20px\"\n label=\"Height\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Leading Icon -->\n <div class=\"form-group\">\n <cide-ele-input\n id=\"sype_leading_icon\"\n formControlName=\"sype_leading_icon\"\n placeholder=\"Enter icon name\"\n label=\"Leading Icon\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Default Value -->\n <div class=\"form-group\">\n <cide-ele-input\n id=\"sype_default\"\n formControlName=\"sype_default\"\n placeholder=\"Enter default value\"\n label=\"Default Value\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Regex Pattern -->\n <div class=\"form-group\">\n <cide-ele-input\n id=\"sype_regex\"\n formControlName=\"sype_regex\"\n placeholder=\"Enter regex pattern\"\n label=\"Regex Pattern\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Option Key -->\n <div class=\"form-group\">\n <cide-ele-input\n id=\"sype_option_key\"\n formControlName=\"sype_option_key\"\n placeholder=\"Enter option key\"\n label=\"Option Key\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Entity ID (Auto-assigned from AppState) - Hidden -->\n <div class=\"form-group\" style=\"display: none;\">\n <cide-ele-input\n id=\"sype_entity_id_syen\"\n formControlName=\"sype_entity_id_syen\"\n placeholder=\"Auto-assigned from system\"\n label=\"Entity ID (Auto-assigned)\"\n size=\"sm\"\n readonly>\n </cide-ele-input>\n </div>\n\n <!-- Control Options -->\n <div class=\"form-group full-width\">\n <h6 class=\"options-title\">Control Options</h6>\n <div class=\"options-grid\">\n \n <!-- Required -->\n <div class=\"option-item\">\n <cide-ele-input\n id=\"sype_required\"\n type=\"checkbox\"\n formControlName=\"sype_required\"\n label=\"Required\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n\n <!-- Disabled -->\n <div class=\"option-item\">\n <cide-ele-input\n id=\"sype_disabled\"\n type=\"checkbox\"\n formControlName=\"sype_disabled\"\n label=\"Disabled\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n\n <!-- Hide Label -->\n <div class=\"option-item\">\n <cide-ele-input\n id=\"sype_label_hide\"\n type=\"checkbox\"\n formControlName=\"sype_label_hide\"\n label=\"Hide Label\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n\n <!-- Hide Helper Text -->\n <div class=\"option-item\">\n <cide-ele-input\n id=\"sype_hide_helper_and_error_text\"\n type=\"checkbox\"\n formControlName=\"sype_hide_helper_and_error_text\"\n label=\"Hide Helper Text\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n\n <!-- Helper Text Collapse -->\n <div class=\"option-item\">\n <cide-ele-input\n id=\"sype_helper_text_collapse\"\n type=\"checkbox\"\n formControlName=\"sype_helper_text_collapse\"\n label=\"Collapse Helper\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n\n </div>\n </div>\n\n </div>\n\n <!-- Form Actions -->\n <div class=\"form-actions\">\n <button \n cideEleButton\n type=\"button\"\n variant=\"outline\"\n (click)=\"cancelForm()\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n <button \n cideEleButton\n type=\"submit\"\n variant=\"primary\"\n [disabled]=\"loading()\">\n {{ isEditMode() ? 'Update Control' : 'Create Control' }}\n </button>\n </div>\n </form>\n </div>\n\n <!-- Controls List Section -->\n <div class=\"controls-list-section\">\n <div class=\"controls-header\">\n <h3>Page Controls</h3>\n <p>Controls connected to this page</p>\n </div>\n \n <div class=\"controls-list\" *ngIf=\"!loading() && controls().length > 0\">\n <div \n class=\"control-item\" \n *ngFor=\"let control of controls(); trackBy: trackByControlId\"\n [class.selected]=\"selectedControlId() === control._id\"\n (click)=\"selectControl(control)\"\n (keyup.enter)=\"selectControl(control)\"\n (keyup.space)=\"selectControl(control)\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"'Select control ' + (control.sype_label || control.sype_key)\">\n <div class=\"control-header\">\n <div class=\"control-icon\">\n <cide-ele-icon>settings_input_component</cide-ele-icon>\n </div>\n <div class=\"control-info\">\n <h4>{{ control.sype_label || control.sype_key }}</h4>\n <p>{{ control.sype_tooltip || 'No tooltip' }}</p>\n <div class=\"control-meta\">\n <span class=\"control-type\">{{ control.sype_type }}</span>\n <span class=\"control-status\" [class.active]=\"control.sype_isactive\">\n {{ control.sype_isactive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n </div>\n <div class=\"control-actions\">\n <button \n cideEleButton\n variant=\"ghost\"\n size=\"sm\"\n (click)=\"editControl(control); $event.stopPropagation()\">\n <cide-ele-icon>edit</cide-ele-icon>\n </button>\n <button \n cideEleButton\n variant=\"ghost\"\n size=\"sm\"\n (click)=\"deleteControl(control); $event.stopPropagation()\">\n <cide-ele-icon>delete</cide-ele-icon>\n </button>\n </div>\n </div>\n \n \n </div>\n </div>\n\n <div class=\"controls-list-empty\" *ngIf=\"!loading() && controls().length === 0\">\n <cide-ele-icon>settings_input_component</cide-ele-icon>\n <p>No controls available</p>\n <small>Create controls using the form on the left</small>\n </div>\n\n <div class=\"controls-list-loading\" *ngIf=\"loading()\">\n <cide-ele-icon class=\"spinning\">refresh</cide-ele-icon>\n <p>Loading controls...</p>\n </div>\n </div>\n </div>\n</div>\n\n ","// Page Management Components\r\nexport * from './components/page-list/page-list.component';\r\nexport * from './components/page-theme/page-theme.component';\r\nexport * from './components/page-controls/page-controls.component';\r\n\r\n// Page Management Services\r\nexport * from './services/page-management.service';\r\nexport * from './services/page-theme.service';\r\nexport * from './services/page-controls.service';\r\n\r\n// Page Management Interfaces - Now using model interfaces from cloud-ide-lms-model ","/*\n * Public API Surface of cloud-ide-core\n */\nexport * from './lib/cloud-ide-core.routes';\nexport * from './lib/cloud-ide-core.service';\nexport * from './lib/cloud-ide-core.component';\n\n// Menu Management Module\nexport * from './lib/core/menu-management';\n\n// Department Management Module\nexport * from './lib/core/department-management';\n\n// Designation Management Module\nexport * from './lib/core/designation-management';\n\n// Grade Level Management Module\nexport * from './lib/core/grade-level-management';\n\n// Page Management Components\nexport * from './lib/core/page-management';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"cloud-ide-core.mjs","sources":["../../../projects/cloud-ide-core/src/lib/cloud-ide-core.routes.ts","../../../projects/cloud-ide-core/src/lib/cloud-ide-core.service.ts","../../../projects/cloud-ide-core/src/lib/cloud-ide-core.component.ts","../../../projects/cloud-ide-core/src/lib/core/menu-management/services/menu-management.service.ts","../../../projects/cloud-ide-core/src/lib/core/menu-management/components/menu-list/menu-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/menu-management/components/menu-list/menu-list.component.html","../../../projects/cloud-ide-core/src/lib/core/menu-management/interfaces/menu-item.interface.ts","../../../projects/cloud-ide-core/src/lib/core/menu-management/index.ts","../../../projects/cloud-ide-core/src/lib/core/department-management/services/department-management.service.ts","../../../projects/cloud-ide-core/src/lib/core/department-management/components/department-list/department-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/department-management/components/department-list/department-list.component.html","../../../projects/cloud-ide-core/src/lib/core/department-management/index.ts","../../../projects/cloud-ide-core/src/lib/core/designation-management/services/designation-management.service.ts","../../../projects/cloud-ide-core/src/lib/core/grade-level-management/services/grade-level-management.service.ts","../../../projects/cloud-ide-core/src/lib/core/designation-management/components/designation-list/designation-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/designation-management/components/designation-list/designation-list.component.html","../../../projects/cloud-ide-core/src/lib/core/designation-management/index.ts","../../../projects/cloud-ide-core/src/lib/core/grade-level-management/components/grade-level-list/grade-level-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/grade-level-management/components/grade-level-list/grade-level-list.component.html","../../../projects/cloud-ide-core/src/lib/core/grade-level-management/index.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/services/page-management.service.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-list/page-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-list/page-list.component.html","../../../projects/cloud-ide-core/src/lib/core/page-management/services/page-theme.service.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-theme/page-theme.component.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-theme/page-theme.component.html","../../../projects/cloud-ide-core/src/lib/core/page-management/services/page-controls.service.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-controls/page-controls.component.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-controls/page-controls.component.html","../../../projects/cloud-ide-core/src/lib/core/page-management/index.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/services/cide-adm-user-master.service.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/services/cide-adm-user-master-list.service.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/services/entity-select.service.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/services/role-select.service.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/services/designation-select.service.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/services/department-select.service.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/services/index.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-create/user-create.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-create/user-create.component.html","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-list/user-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-list/user-list.component.html","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-forms/cide-adm-user-attributes.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-forms/cide-adm-user-contact-addresses.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-forms/cide-adm-user-documents.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-forms/cide-adm-user-entity-access.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-forms/cide-adm-user-family-details.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/index.ts","../../../projects/cloud-ide-core/src/public-api.ts","../../../projects/cloud-ide-core/src/cloud-ide-core.ts"],"sourcesContent":["import { Route } from '@angular/router';\n\nexport const coreRoutes: Route[] = [\n {\n path: 'menu-management',\n loadComponent: () => import('./core/menu-management/components/menu-list/menu-list.component').then(c => c.MenuListComponent),\n title: 'Menu Management',\n data: {\n reuseTab: true,\n sypg_page_code: \"core_menu_list\"\n }\n },{\n path: 'department',\n loadComponent: () => import('./core/department-management/components/department-list/department-list.component').then(c => c.DepartmentListComponent),\n title: 'Department Management',\n data: {\n reuseTab: true,\n sypg_page_code: \"core_department_list\"\n }\n },\n {\n path: 'designation',\n loadComponent: () => import('./core/designation-management/components/designation-list/designation-list.component').then(c => c.DesignationListComponent),\n title: 'Designation Management',\n data: {\n reuseTab: true,\n sypg_page_code: \"core_designation_list\"\n }\n },\n {\n path: 'grade-level',\n loadComponent: () => import('./core/grade-level-management/components/grade-level-list/grade-level-list.component').then(c => c.GradeLevelListComponent),\n title: 'Grade Level Management',\n data: {\n reuseTab: true,\n sypg_page_code: \"core_grade_level_list\"\n }\n },\n {\n path: 'page',\n loadComponent: () => import('./core/page-management/components/page-list/page-list.component').then(c => c.PageListComponent),\n title: 'Page Management',\n data: {\n reuseTab: true,\n sypg_page_code: \"core_page_management\"\n }\n },\n {\n path: 'page-form',\n loadComponent: () => import('./core/page-management/components/page-form/page-form.component').then(c => c.PageFormComponent),\n title: 'Page Form',\n data: {\n reuseTab: true,\n sypg_page_code: \"core_page_management\"\n }\n },\n {\n path: 'page-form/:query',\n loadComponent: () => import('./core/page-management/components/page-form/page-form.component').then(c => c.PageFormComponent),\n title: 'Page Form',\n data: {\n reuseTab: true,\n sypg_page_code: \"core_page_management\"\n }\n },\n {\n path: 'page-theme',\n loadComponent: () => import('./core/page-management/components/page-theme/page-theme.component').then(c => c.PageThemeComponent),\n title: 'Page Theme Management',\n data: {\n reuseTab: true,\n sypg_page_code: \"core_page_theme\"\n }\n },\n {\n path: 'page-theme/:query',\n loadComponent: () => import('./core/page-management/components/page-theme/page-theme.component').then(c => c.PageThemeComponent),\n title: 'Page Theme Management',\n data: {\n reuseTab: true,\n sypg_page_code: \"core_page_theme\"\n }\n },\n {\n path: 'page-controls',\n loadComponent: () => import('./core/page-management/components/page-controls/page-controls.component').then(c => c.PageControlsComponent),\n title: 'Page Controls Management',\n data: {\n reuseTab: true,\n sypg_page_code: \"core_page_controls\"\n }\n },\n {\n path: 'page-controls/:query',\n loadComponent: () => import('./core/page-management/components/page-controls/page-controls.component').then(c => c.PageControlsComponent),\n title: 'Page Controls Management',\n data: {\n reuseTab: true,\n sypg_page_code: \"core_page_controls\"\n }\n },\n {\n path: 'general_master_entry',\n loadComponent: () => import('./core/general-master-management/components/general-master/general-master.component').then(c => c.GeneralMasterComponent),\n title: 'General Master Entry',\n data: {\n reuseTab: true,\n sypg_page_code: \"core_general_master\"\n }\n },\n {\n path: 'general_master_entry/:query',\n loadComponent: () => import('./core/general-master-management/components/general-master/general-master.component').then(c => c.GeneralMasterComponent),\n title: 'General Master Entry',\n data: {\n reuseTab: true,\n sypg_page_code: \"core_general_master\"\n }\n },\n {\n path: 'general_type_entry',\n loadComponent: () => import('./core/general-master-management/components/general-master-type/general-master-type.component').then(c => c.GeneralMasterTypeComponent),\n title: 'General Type Entry',\n data: {\n reuseTab: true,\n sypg_page_code: \"core_general_master_type\"\n }\n },\n {\n path: 'general_type_entry/:query',\n loadComponent: () => import('./core/general-master-management/components/general-master-type/general-master-type.component').then(c => c.GeneralMasterTypeComponent),\n title: 'General Type Entry',\n data: {\n reuseTab: true,\n sypg_page_code: \"core_general_master_type\"\n }\n },\n // User Management Routes\n {\n path: 'user-master',\n loadComponent: () => import('./core/user-management/components/user-list/user-list.component').then(c => c.UserListComponent),\n title: 'User Management',\n data: {\n reuseTab: true,\n sypg_page_code: \"auth_user_mst\"\n }\n },\n {\n path: 'user-master/create',\n loadComponent: () => import('./core/user-management/components/user-create/user-create.component').then(c => c.UserCreateComponent),\n title: 'Create User',\n data: {\n reuseTab: true,\n sypg_page_code: \"core_user_management_create\"\n }\n },\n {\n path: 'user-master/edit/:id',\n loadComponent: () => import('./core/user-management/components/user-create/user-create.component').then(c => c.UserCreateComponent),\n title: 'Edit User',\n data: {\n reuseTab: true,\n sypg_page_code: \"core_user_management_create\"\n }\n },\n {\n path: 'user-master/view/:id',\n loadComponent: () => import('./core/user-management/components/user-create/user-create.component').then(c => c.UserCreateComponent),\n title: 'View User',\n data: {\n reuseTab: true,\n sypg_page_code: \"core_user_management_create\"\n }\n }\n];\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CloudIdeCoreService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'cide-core',\r\n standalone: true,\r\n imports: [],\r\n template: `\r\n <p>\r\n cloud-ide-core works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class CloudIdeCoreComponent {\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError, BehaviorSubject, of } from 'rxjs';\r\nimport { catchError, tap, map } from 'rxjs/operators';\r\nimport { \r\n cidePath, \r\n coreRoutesUrl, \r\n generateStringFromObject, \r\n hostManagerRoutesUrl, \r\n ICoreSyme, \r\n MCoreSymeDeletePayload, \r\n MCoreSymeGetByIdPayload, \r\n menuByIdControllerResponse, \r\n menuDeleteControllerResponse, \r\n menuListControllerResponse, \r\n MMenuListPayload\r\n} from 'cloud-ide-lms-model';\r\nimport mockMenuData from '../mock-data/menu-items.json';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MenuManagementService {\r\n private apiUrl = `${coreRoutesUrl?.getSidebarMenues}`;\r\n private menuListSubject = new BehaviorSubject<ICoreSyme[]>([]);\r\n public menuList$ = this.menuListSubject.asObservable();\r\n\r\n constructor(private http: HttpClient) {\r\n console.log('MenuManagementService initialized - using real API');\r\n }\r\n\r\n /**\r\n * Get menu list from API\r\n */\r\n getMenuList(body: MMenuListPayload): Observable<menuListControllerResponse> {\r\n const query = generateStringFromObject(body);\r\n return this.http?.get<menuListControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, query]))\r\n .pipe(\r\n tap((response: menuListControllerResponse) => {\r\n if (response?.success) {\r\n this.menuListSubject.next(response?.data || []);\r\n }\r\n }),\r\n catchError(error => {\r\n console.error('MenuManagementService API error:', error);\r\n return this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Get menu list using mock data\r\n */\r\n getMenuListWithMockData(): Observable<menuListControllerResponse> {\r\n console.log('Using mock data for menu list');\r\n // Convert mock data to match ICoreSyme interface\r\n const mockData = {\r\n ...mockMenuData,\r\n data: mockMenuData.data.map((item: Record<string, unknown>) => ({\r\n ...item,\r\n syme_link: (item['syme_link'] as boolean) ? '1' : '0' // Convert boolean to string\r\n }))\r\n };\r\n return of(mockData as menuListControllerResponse).pipe(\r\n tap((response: menuListControllerResponse) => {\r\n if (response?.success) {\r\n this.menuListSubject.next(response?.data || []);\r\n }\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Get menu list from cache (if available)\r\n */\r\n getMenuListFromCache(): ICoreSyme[] {\r\n return this.menuListSubject.value;\r\n }\r\n\r\n /**\r\n * Create new menu item\r\n * POST ${coreRoutesUrl?.menu} - payload: MCoreSymeInsertUpdatePayload, response: menuInsertUpdateControllerResponse\r\n */\r\n createMenuItem(menuItem: ICoreSyme): Observable<menuListControllerResponse> {\r\n console.log('Creating menu item:', menuItem);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu]);\r\n return this.http.post<menuListControllerResponse>(url, menuItem)\r\n .pipe(\r\n tap((response: menuListControllerResponse) => {\r\n if (response.success) {\r\n this.refreshMenuList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Update existing menu item\r\n * POST ${coreRoutesUrl?.menu} - payload: MCoreSymeInsertUpdatePayload, response: menuInsertUpdateControllerResponse\r\n */\r\n updateMenuItem(id: string, menuItem: ICoreSyme): Observable<menuListControllerResponse> {\r\n console.log('Updating menu item:', id, menuItem);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu]);\r\n return this.http.post<menuListControllerResponse>(url, menuItem)\r\n .pipe(\r\n tap((response: menuListControllerResponse) => {\r\n if (response.success) {\r\n this.refreshMenuList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get menu item by ID\r\n * GET ${coreRoutesUrl?.menu}/byId/:query - payload: MCoreSymeGetByIdPayload, response: menuByIdControllerResponse\r\n * TODO: Update to use MCoreSymeGetByIdPayload and menuByIdControllerResponse when available\r\n */\r\n getMenuItemById(id: string): Observable<menuByIdControllerResponse> {\r\n console.log('Getting menu item by ID:', id);\r\n const payload: MCoreSymeGetByIdPayload = { syme_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, 'byId', query]);\r\n return this.http.get<menuByIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete menu item\r\n * DELETE ${coreRoutesUrl?.menu}/:query - payload: MCoreSymeDeletePayload, response: menuDeleteControllerResponse\r\n * TODO: Update to use MCoreSymeDeletePayload and menuDeleteControllerResponse when available\r\n */\r\n deleteMenuItem(id: string): Observable<menuDeleteControllerResponse> {\r\n const payload: MCoreSymeDeletePayload = { syme_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, query]);\r\n return this.http.delete<menuDeleteControllerResponse>(url)\r\n .pipe(\r\n tap((response: menuDeleteControllerResponse) => {\r\n if (response.success) {\r\n this.refreshMenuList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete multiple menu items\r\n * DELETE ${coreRoutesUrl?.menu}/:query - payload: MCoreSymeDeletePayload, response: menuDeleteControllerResponse\r\n * TODO: Update to use MCoreSymeDeletePayload and menuDeleteControllerResponse when available\r\n */\r\n deleteMultipleMenuItems(ids: string[]): Observable<{ success: boolean; message?: string; data?: unknown }> {\r\n console.log('Deleting multiple menu items:', ids);\r\n const payload = { ids };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, query]);\r\n return this.http.delete<{ success: boolean; message?: string; data?: unknown }>(url)\r\n .pipe(\r\n tap((response: { success: boolean; message?: string; data?: unknown }) => {\r\n if (response.success) {\r\n this.refreshMenuList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Toggle menu item active status\r\n */\r\n toggleMenuItemStatus(id: string): Observable<menuListControllerResponse> {\r\n console.log('Toggling menu item status:', id);\r\n const payload = { id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, query]);\r\n return this.http.put<menuListControllerResponse>(url, {})\r\n .pipe(\r\n tap((response: menuListControllerResponse) => {\r\n if (response.success) {\r\n this.refreshMenuList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get available menu types\r\n */\r\n getMenuTypes(): Observable<string[]> {\r\n return this.http.get<{ data: string[] }>('/api/menu/types')\r\n .pipe(\r\n map((response: { data: string[] }) => response.data),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get available icons\r\n */\r\n getAvailableIcons(): Observable<string[]> {\r\n return this.http.get<{ data: string[] }>('/api/menu/icons')\r\n .pipe(\r\n map((response: { data: string[] }) => response.data),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Find menu item by ID (including nested items)\r\n */\r\n findMenuItemById(id: string, items: ICoreSyme[] = this.menuListSubject.value): ICoreSyme | null {\r\n // Local search in current menu list\r\n for (const item of items) {\r\n if (item._id === id) {\r\n return item;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Get parent menu items for dropdown selection\r\n */\r\n getParentMenuItems(excludeId?: string): ICoreSyme[] {\r\n const allItems: ICoreSyme[] = [];\r\n\r\n const flattenItems = (items: ICoreSyme[], level: number = 0) => {\r\n items.forEach(item => {\r\n if (item._id !== excludeId) {\r\n allItems.push({\r\n ...item,\r\n syme_title: ' '.repeat(level) + item.syme_title\r\n });\r\n }\r\n });\r\n };\r\n\r\n flattenItems(this.menuListSubject.value);\r\n return allItems;\r\n }\r\n\r\n /**\r\n * Refresh menu list from server\r\n */\r\n private refreshMenuList(): void {\r\n // Create a default body for getting all menu items\r\n const defaultBody: MMenuListPayload = {\r\n pageIndex: 1,\r\n pageSize: 10\r\n };\r\n this.getMenuList(defaultBody).subscribe({\r\n next: () => {\r\n console.log('Menu list refreshed successfully');\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing menu list:', error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle errors\r\n */\r\n private handleError(error: unknown): Observable<never> {\r\n let errorMessage = 'An error occurred';\r\n\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n } else if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n\r\n console.error('Menu Management Service Error:', errorMessage);\r\n return throwError(() => new Error(errorMessage));\r\n }\r\n} ","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Validators, ReactiveFormsModule, NonNullableFormBuilder, FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ICoreSyme, MMenuListPayload } from 'cloud-ide-lms-model';\nimport { MenuManagementService } from '../../services/menu-management.service';\nimport { CideEleButtonComponent, CideEleDataGridComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\n\n\n\n@Component({\n selector: 'cide-core-app-menu-list',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n CideInputComponent,\n CideSelectComponent,\n CideTextareaComponent,\n CideIconComponent,\n CideEleDropdownComponent\n ],\n templateUrl: './menu-list.component.html',\n styleUrls: []\n})\nexport class MenuListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private menuService = inject(MenuManagementService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n menuDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext<ICoreSyme>>>('menuDetailsRendererTemplate');\n menuTypeRendererTemplate = viewChild.required<TemplateRef<TemplateContext<ICoreSyme>>>('menuTypeRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext<ICoreSyme>>>('actionsDropdownRendererTemplate');\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n menuItems = signal<ICoreSyme[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Modern reactive forms with signals\n selectedParentItem = signal<ICoreSyme | null>(null);\n\n // Retrieved menu item data\n retrievedMenuItem = signal<ICoreSyme | null>(null);\n\n // Edit mode flag\n isEditMode = signal(false);\n\n // Drag order management\n originalOrder = signal<ICoreSyme[]>([]);\n hasOrderChanged = signal(false);\n \n\n\n // Server-side pagination state\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n\n\n\n // Modern reactive form with typed controls\n quickAddForm = this.fb.group({\n syme_title: this.fb.control('', [Validators.required, Validators.minLength(2), Validators.maxLength(100)]),\n syme_desc: this.fb.control('', [Validators.maxLength(255)]),\n syme_type: this.fb.control<'module' | 'section' | 'menu' | 'title'>('module', [Validators.required]),\n syme_id_syme: this.fb.control(''),\n syme_path: this.fb.control('', [Validators.maxLength(255)]),\n syme_icon: this.fb.control('', [Validators.maxLength(50)]),\n syme_link: this.fb.control('', [Validators.maxLength(255)]),\n syme_isactive: this.fb.control(true, [Validators.required]),\n syme_order_by: this.fb.control(1, [Validators.required, Validators.min(1)])\n });\n\n\n\n // Menu type options for quick add - dynamic based on parent selection\n menuTypeOptions = computed(() => {\n if (this.selectedParentItem()) {\n // When parent is selected, allow creating child types only\n return [\n { value: 'section', label: 'Section' },\n { value: 'menu', label: 'Menu Item' },\n { value: 'title', label: 'Title' }\n ];\n } else {\n // When no parent is selected, only allow module creation\n return [\n { value: 'module', label: 'Module' }\n ];\n }\n });\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ICoreSyme>>({\n id: 'menu-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'details',\n header: 'Menu Item',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'menuDetailsRenderer'\n },\n {\n key: 'syme_type',\n header: 'Type',\n type: 'custom',\n width: '120px',\n truncate: false,\n align: 'center',\n renderer: 'menuTypeRenderer'\n },\n {\n key: 'syme_path',\n header: 'Path',\n type: 'text',\n width: '200px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'syme_order_by',\n header: 'Order',\n type: 'order',\n width: '80px',\n truncate: false,\n align: 'center'\n },\n {\n key: 'syme_isactive',\n header: 'Status',\n type: 'status',\n width: '100px',\n truncate: false,\n align: 'center',\n statusConfig: {\n activeValue: true,\n activeLabel: 'Active',\n inactiveLabel: 'Inactive',\n activeClass: 'tw-bg-green-100 tw-text-green-800',\n inactiveClass: 'tw-bg-red-100 tw-text-red-800'\n }\n },\n\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '60px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n\n search: {\n enabled: true,\n placeholder: 'Search menu items...',\n searchableColumns: ['syme_title', 'syme_desc', 'syme_path'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n\n dragDrop: {\n enabled: true,\n orderField: 'syme_order_by',\n dragClass: 'tw-opacity-50 tw-bg-blue-50',\n dropClass: 'tw-bg-green-50'\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none',\n onRefresh: 'onMenuItemRefresh',\n onRowReorder: 'onRowReorder',\n tree: {\n enabled: true,\n primaryKey: '_id',\n foreignKey: 'syme_id_syme',\n childrenKey: 'children',\n levelKey: 'level',\n expandedKey: 'isExpanded',\n hasChildrenKey: 'hasChildren'\n }\n });\n\n // Template renderers using Angular best practices\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext<ICoreSyme>>> => ({\n menuDetailsRenderer: this.menuDetailsRendererTemplate(),\n menuTypeRenderer: this.menuTypeRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\n\n /**\n * Get template renderers for data grid\n * These templates are available for enhanced data grid components\n */\n getTemplateRenderers(): Record<string, TemplateRef<TemplateContext<ICoreSyme>>> {\n return this.templateRenderers();\n }\n\n // Mixed renderers (templates + string functions)\n customRenderers = computed(() => ({\n ...this.templateRenderers()\n }));\n\n /**\n * Get custom renderers adapted for current data grid compatibility\n * Uses template-based renderers converted to string functions\n */\n getCustomRenderers(): Record<string, (value: unknown, row: ICoreSyme) => string> {\n // This method is no longer needed since we're using templates directly\n return {};\n }\n\n // Action handlers for grid actions\n actionHandlers = {\n onEditMenuItem: (row: ICoreSyme) => this.editMenuItem(row._id || ''),\n onToggleMenuItem: (row: ICoreSyme) => this.toggleItemStatus(row._id || ''),\n onDeleteMenuItem: (row: ICoreSyme) => this.deleteMenuItem(row._id || ''),\n onMenuItemRowClick: (row: ICoreSyme) => this.onMenuItemRowClick(row),\n onMenuItemRefresh: () => this.onMenuItemRefresh(),\n onAddChild: (row: ICoreSyme) => this.onAddChild(row),\n resetOrder: () => this.resetDragOrder(),\n saveOrder: () => this.saveMenuOrder()\n };\n\n\n\n hasSelection = computed(() => this.selectedItems().length > 0);\n\n // Pagination computed properties\n totalPages = computed(() => Math.ceil(this.totalItems() / this.pageSize()));\n hasNextPage = computed(() => this.currentPage() < this.totalPages());\n hasPreviousPage = computed(() => this.currentPage() > 1);\n\n // Modern constructor with effects for initialization\n constructor() {\n // Initialize component once on construction\n this.initializeComponent();\n\n // Cleanup effect for event listeners\n this.destroyRef.onDestroy(() => {\n this.cleanupEventListeners();\n });\n }\n\n /**\n * Initialize component with modern patterns\n */\n private initializeComponent(): void {\n console.log('MenuListComponent initialized with modern Angular patterns');\n console.log('Grid config initial:', this.gridConfig());\n this.loadMenuItems();\n this.setupEventListeners();\n this.exposeGlobalFunctions();\n }\n\n /**\n * Setup event listeners for dropdown interactions\n */\n private setupEventListeners(): void {\n document.addEventListener('click', this.handleClickOutside.bind(this));\n document.addEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Cleanup event listeners\n */\n private cleanupEventListeners(): void {\n document.removeEventListener('click', this.handleClickOutside.bind(this));\n document.removeEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Expose global functions for dropdown interactions\n */\n private exposeGlobalFunctions(): void {\n if (typeof window !== 'undefined') {\n (window as unknown as { toggleDropdown: (id: string) => void }).toggleDropdown = this.toggleDropdown.bind(this);\n (window as unknown as { handleMenuAction: (action: string, id: string) => void }).handleMenuAction = this.handleMenuAction.bind(this);\n\n }\n }\n\n /**\n * Get default type based on parent selection (computed for reactivity)\n */\n private getDefaultType = computed(() => {\n return this.selectedParentItem() ? 'section' : 'module';\n });\n\n /**\n * Load menu items from service\n */\n loadMenuItems(): void {\n console.log('🚀 MenuListComponent.loadMenuItems() called');\n this.loading.set(true);\n this.error.set(null);\n\n console.log('📞 Calling menuService.getMenuList()...');\n const requestBody: MMenuListPayload = {\n total: this.totalItems(),\n pageIndex: this.currentPage(),\n pageSize: this.pageSize(),\n query: this.searchTerm(),\n sort: { order: 'asc', key: 'syme_order_by' }\n };\n console.log('📋 Request body:', requestBody);\n\n // Check if service exists\n if (!this.menuService) {\n console.error('❌ MenuService is not available');\n this.error.set('Menu service is not available');\n this.loading.set(false);\n return;\n }\n\n this.menuService.getMenuList(requestBody)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('📥 MenuListComponent received response:', response);\n if (response?.success) {\n console.log('✅ Response successful, setting menu items:', response.data);\n console.log('📊 Total items:', response.total);\n const menuData = response?.data || [];\n this.menuItems.set(menuData);\n this.totalItems.set(response.total || 0);\n\n // Save original order for drag reset functionality\n if (this.originalOrder().length === 0) {\n this.originalOrder.set([...menuData]);\n console.log('💾 Original order saved for drag reset');\n }\n\n this.updateGridData(menuData);\n } else {\n console.error('❌ Response was not successful:', response);\n this.error.set('Failed to load menu items');\n }\n },\n error: (err) => {\n console.error('❌ MenuListComponent error:', err);\n this.error.set(err.message || 'An error occurred while loading menu items');\n },\n complete: () => {\n console.log('MenuListComponent loadMenuItems completed');\n this.loading.set(false);\n }\n });\n }\n\n\n\n\n\n\n\n /**\n * Handle click outside dropdown\n */\n private handleClickOutside(event: Event): void {\n const target = event.target as HTMLElement;\n\n // Check if click is outside any dropdown\n if (!target?.closest('[data-dropdown]') && !target?.closest('[data-action=\"more-actions\"]')) {\n // Close all dropdowns\n document.querySelectorAll('[data-dropdown]').forEach((el: Element) => {\n const dropdown = el as HTMLElement;\n dropdown.classList.add('tw-hidden');\n });\n\n // Reset all button states\n document.querySelectorAll('[data-action=\"more-actions\"]').forEach((el: Element) => {\n const button = el as HTMLElement;\n button.setAttribute('aria-expanded', 'false');\n });\n }\n }\n\n /**\n * Handle dropdown action clicks\n */\n private handleDropdownAction(event: Event): void {\n const target = event.target as HTMLElement;\n const actionButton = target.closest('[data-action]') as HTMLElement;\n\n if (actionButton) {\n const action = actionButton.getAttribute('data-action');\n const itemId = actionButton.getAttribute('data-item-id');\n\n if (action && itemId) {\n event.preventDefault();\n event.stopPropagation();\n\n // Close the dropdown\n const dropdown = actionButton.closest('[data-dropdown]') as HTMLElement;\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n // Handle the action\n switch (action) {\n case 'edit':\n this.editMenuItem(itemId);\n break;\n case 'toggle':\n this.toggleItemStatus(itemId);\n break;\n case 'delete':\n this.deleteMenuItem(itemId);\n break;\n }\n }\n }\n }\n\n\n\n \n\n /**\n * Update grid data\n */\n private updateGridData(menuItems: ICoreSyme[]): void {\n console.log('🔄 updateGridData called with:', menuItems);\n console.log('🔄 Number of items:', menuItems.length);\n \n this.gridConfig.update(config => {\n const newConfig = {\n ...config,\n data: menuItems\n };\n console.log('⚙️ Updated grid config with menu items');\n return newConfig;\n });\n \n console.log('✅ Grid config after update');\n }\n\n\n\n\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ICoreSyme>): void {\n console.log('onGridEvent', event);\n switch (event.type) {\n case 'search':\n this.searchTerm.set(event.data as string);\n this.currentPage.set(1);\n this.loadMenuItems();\n break;\n case 'pageChange': {\n // Handle pagination from data grid\n const pageData = event.data as { page: number; pageSize: number };\n if (pageData) {\n this.currentPage.set(pageData.page);\n this.pageSize.set(pageData.pageSize);\n this.loadMenuItems();\n } else {\n // Handle simple page number\n const page = event.data as number;\n if (page) {\n this.currentPage.set(page);\n this.loadMenuItems();\n }\n }\n break;\n }\n case 'refresh':\n this.onMenuItemRefresh();\n break;\n case 'rowClick':\n this.onMenuItemRowClick(event.data as ICoreSyme);\n break;\n case 'action':\n if (event.action?.key === 'edit') {\n this.editMenuItem(event.data as string);\n } else if (event.action?.key === 'toggle') {\n this.toggleItemStatus(event.data as string);\n } else if (event.action?.key === 'delete') {\n this.deleteMenuItem(event.data as string);\n }\n break;\n case 'rowReorder': {\n this.onRowReorder(event.data as { sourceIndex: number; targetIndex: number; newOrder: ICoreSyme[] });\n break;\n }\n }\n }\n\n /**\n * Handle menu item search\n */\n\n\n\n\n /**\n * Handle menu item refresh\n */\n onMenuItemRefresh(): void {\n this.loadMenuItems();\n }\n\n /**\n * Handle menu item row click\n */\n onMenuItemRowClick(menuItem: ICoreSyme): void {\n // Navigate to edit page or show details\n this.editMenuItem(menuItem._id || '');\n }\n\n /**\n * Handle row reorder event\n */\n onRowReorder(data: { sourceIndex: number; targetIndex: number; newOrder: ICoreSyme[] }) {\n console.log('🔄 Row reorder event:', data);\n\n // Save original order if not already saved\n if (this.originalOrder().length === 0) {\n this.originalOrder.set([...this.menuItems()]);\n }\n\n // Update the displayed data with new order\n this.menuItems.set(data.newOrder);\n\n // Mark that order has changed\n this.hasOrderChanged.set(true);\n\n // Update grid data\n this.updateGridDataAfterReorder();\n console.log('Updated menuItems:', this.menuItems());\n }\n\n /**\n * Update grid data after reordering\n */\n private updateGridDataAfterReorder() {\n const currentConfig = this.gridConfig();\n this.gridConfig.set({\n ...currentConfig,\n data: this.menuItems()\n });\n }\n\n /**\n * Save menu order\n */\n saveMenuOrder() {\n console.log('💾 Saving menu order...');\n // Here you would typically call the API to save the new order\n // For now, we'll just update the original order and reset the change flag\n this.originalOrder.set([...this.menuItems()]);\n this.hasOrderChanged.set(false);\n console.log('✅ Menu order saved successfully');\n }\n\n /**\n * Reset drag order to original state\n */\n resetDragOrder() {\n console.log('🔄 Resetting drag order to original state');\n\n // Restore the original order\n const originalItems = this.originalOrder();\n if (originalItems.length > 0) {\n this.menuItems.set([...originalItems]);\n this.updateGridDataAfterReorder();\n }\n\n // Reset the change flag\n this.hasOrderChanged.set(false);\n\n console.log('✅ Drag order reset successfully');\n }\n\n /**\n * Check if order has changed\n */\n hasOrderChanges(): boolean {\n return this.hasOrderChanged();\n }\n\n /**\n * Toggle item selection\n */\n toggleItemSelection(itemId: string): void {\n const current = this.selectedItems();\n const index = current.indexOf(itemId);\n\n if (index > -1) {\n current.splice(index, 1);\n } else {\n current.push(itemId);\n }\n\n this.selectedItems.set([...current]);\n }\n\n /**\n * Select all items on current page\n */\n selectAllOnPage(): void {\n // This method is no longer needed with data grid\n // Data grid handles selection internally\n }\n\n /**\n * Clear all selections\n */\n clearSelection(): void {\n this.selectedItems.set([]);\n }\n\n /**\n * Navigate to edit menu form\n */\n editMenuItem(itemId: string): void {\n console.log('🔵 editMenuItem called with:', itemId);\n // Set edit mode and get the menu item by ID\n this.isEditMode.set(true);\n this.getMenuItemById(itemId);\n }\n\n /**\n * Get menu item by ID using the API\n * GET ${coreRoutesUrl?.menu}/byId/:query - payload: MCoreSymeGetByIdPayload, response: menuByIdControllerResponse\n */\n getMenuItemById(itemId: string): void {\n console.log('🔵 getMenuItemById called with:', itemId);\n this.loading.set(true);\n\n this.menuService.getMenuItemById(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Menu item retrieved successfully:', response.data);\n // Store the retrieved menu item data in the signal\n // Handle both single item and array responses\n let menuItem: ICoreSyme | null = null;\n menuItem = response.data || null;\n\n this.retrievedMenuItem.set(menuItem);\n\n // If in edit mode, populate the form with the retrieved data\n if (this.isEditMode() && menuItem) {\n this.populateFormForEdit(menuItem);\n }\n } else {\n this.error.set('Failed to retrieve menu item');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while retrieving the menu item');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Populate form with menu item data for editing\n */\n populateFormForEdit(menuItem: ICoreSyme): void {\n console.log('🔵 populateFormForEdit called with:', menuItem);\n\n // Populate the form with the menu item data\n this.quickAddForm.patchValue({\n syme_title: menuItem.syme_title || '',\n syme_desc: menuItem.syme_desc || '',\n syme_type: (menuItem.syme_type as 'module' | 'section' | 'menu' | 'title') || 'module',\n syme_id_syme: menuItem.syme_id_syme || '',\n syme_path: menuItem.syme_path || '',\n syme_icon: menuItem.syme_icon || '',\n syme_link: menuItem.syme_link || '',\n syme_isactive: menuItem.syme_isactive ?? true,\n syme_order_by: menuItem.syme_order_by || 1\n });\n\n // Set the selected parent if this item has a parent\n if (menuItem.syme_id_syme) {\n // Find the parent item in the current menu items\n const parentItem = this.menuItems().find(item => item._id === menuItem.syme_id_syme);\n if (parentItem) {\n this.selectedParentItem.set(parentItem);\n }\n }\n\n console.log('✅ Form populated for editing:', this.quickAddForm.value);\n }\n\n /**\n * Delete menu item\n */\n deleteMenuItem(itemId: string): void {\n console.log('🔵 deleteMenuItem called with:', itemId);\n if (confirm('Are you sure you want to delete this menu item?')) {\n this.loading.set(true);\n\n this.menuService.deleteMenuItem(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadMenuItems(); // Reload the list\n } else {\n this.error.set('Failed to delete menu item');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while deleting the menu item');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n }\n\n /**\n * Delete multiple selected items\n */\n deleteSelectedItems(): void {\n const selected = this.selectedItems();\n\n if (selected.length === 0) {\n return;\n }\n\n if (confirm(`Are you sure you want to delete ${selected.length} selected menu item(s)?`)) {\n this.loading.set(true);\n\n // Use bulk delete service method\n this.menuService.deleteMultipleMenuItems(selected)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Multiple menu items deleted successfully');\n this.loadMenuItems(); // Reload the list\n this.clearSelection();\n } else {\n this.error.set('Failed to delete some menu items');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while deleting menu items');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n }\n\n /**\n * Toggle menu item status\n */\n toggleItemStatus(itemId: string): void {\n console.log('🔵 toggleItemStatus called with:', itemId);\n this.loading.set(true);\n\n this.menuService.toggleMenuItemStatus(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadMenuItems(); // Reload the list\n } else {\n this.error.set('Failed to toggle menu item status');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while toggling status');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Update search term\n */\n onSearchChange(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.searchTerm.set(value);\n }\n\n /**\n * Navigate to specific page\n */\n goToPage(): void {\n // Data grid handles pagination internally\n }\n\n /**\n * Get menu type display name\n */\n getMenuTypeDisplay(type: string): string {\n const typeMap: Record<string, string> = {\n 'module': 'Module',\n 'section': 'Section',\n 'menu': 'Menu Item',\n 'title': 'Title'\n };\n return typeMap[type] || type;\n }\n\n /**\n * Get status display\n */\n getStatusDisplay(isActive: boolean): string {\n return isActive ? 'Active' : 'Inactive';\n }\n\n /**\n * Get status class for styling\n */\n getStatusClass(isActive: boolean): string {\n return isActive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800';\n }\n\n /**\n * Get menu type class for styling\n */\n getMenuTypeClass(type: string): string {\n switch (type) {\n case 'module': return 'tw-bg-purple-100 tw-text-purple-800';\n case 'section': return 'tw-bg-blue-100 tw-text-blue-800';\n case 'menu': return 'tw-bg-green-100 tw-text-green-800';\n case 'title': return 'tw-bg-gray-100 tw-text-gray-800';\n default: return 'tw-bg-gray-100 tw-text-gray-800';\n }\n }\n\n\n\n /**\n * Check if item is selected\n */\n isItemSelected(itemId: string): boolean {\n return this.selectedItems().includes(itemId);\n }\n\n /**\n * Check if all items on current page are selected\n */\n isAllSelectedOnPage(): boolean {\n // This method is no longer needed with data grid\n // Data grid handles selection internally\n return false;\n }\n\n /**\n * Get pagination range\n */\n getPaginationRange(): number[] {\n // This method is no longer needed with data grid\n // Data grid handles pagination internally\n return [];\n }\n\n\n\n /**\n * Track by function for ngFor\n */\n trackByItemId(index: number, item: ICoreSyme): string {\n return item._id || '';\n }\n\n\n\n /**\n * Quick add or update menu item using reactive form\n */\n quickAddMenuItem() {\n if (this.quickAddForm.invalid) return;\n\n const formValue = this.quickAddForm.value;\n\n // Prepare the menu item using ICoreSyme model structure\n const menuItem: Partial<ICoreSyme> = {\n _id: this.retrievedMenuItem()?._id || '',\n syme_title: formValue.syme_title,\n syme_desc: formValue.syme_desc || '',\n syme_type: formValue.syme_type,\n syme_id_syme: formValue.syme_id_syme || undefined,\n syme_path: formValue.syme_path || '',\n syme_icon: formValue.syme_icon || '',\n syme_link: formValue.syme_link || '',\n syme_order_by: formValue.syme_order_by,\n syme_isactive: formValue.syme_isactive\n };\n\n // Check if we're in edit mode\n if (this.isEditMode() && this.retrievedMenuItem()) {\n // Update existing menu item\n const itemId = this.retrievedMenuItem()?._id;\n if (itemId) {\n console.log('🔵 Updating menu item:', itemId);\n this.menuService.updateMenuItem(itemId, menuItem).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Menu item updated successfully');\n // Reset form and exit edit mode\n this.resetQuickAddForm();\n this.isEditMode.set(false);\n this.retrievedMenuItem.set(null);\n // Reload menu items\n this.loadMenuItems();\n }\n },\n error: () => {\n this.error.set('Failed to update menu item');\n }\n });\n }\n } else {\n // Create new menu item\n console.log('🔵 Creating new menu item');\n this.menuService.createMenuItem(menuItem).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Menu item created successfully');\n // Reset reactive form with default values\n this.resetQuickAddForm();\n // Reload menu items\n this.loadMenuItems();\n }\n },\n error: () => {\n this.error.set('Failed to create menu item');\n }\n });\n }\n }\n\n /**\n * Reset the quick add form to default values\n */\n resetQuickAddForm(): void {\n // Clear selected parent to return to module creation mode\n this.selectedParentItem.set(null);\n\n // Clear edit mode and retrieved item\n this.isEditMode.set(false);\n this.retrievedMenuItem.set(null);\n\n this.quickAddForm.reset({\n syme_title: '',\n syme_desc: '',\n syme_type: 'module', // Always default to module on reset\n syme_id_syme: '',\n syme_path: '',\n syme_icon: '',\n syme_link: '',\n syme_isactive: true,\n syme_order_by: 1\n });\n }\n\n /**\n * Handle add child button click from row action\n */\n onAddChild(parentItem: ICoreSyme): void {\n console.log('🔵 onAddChild called with:', parentItem);\n console.log('🔵 Parent title:', parentItem.syme_title);\n\n // Clear edit mode and retrieved item when adding a child\n this.isEditMode.set(false);\n this.retrievedMenuItem.set(null);\n\n // Set the selected parent item first using signal\n this.selectedParentItem.set(parentItem);\n console.log('🔵 selectedParentItem set to:', this.selectedParentItem());\n\n // Update form with parent context (don't call resetQuickAddForm as it clears the parent)\n this.quickAddForm.patchValue({\n syme_title: '',\n syme_desc: '',\n syme_type: 'section', // Default to section for child items\n syme_id_syme: parentItem._id,\n syme_path: '',\n syme_icon: '',\n syme_link: '',\n syme_isactive: true,\n syme_order_by: 1\n });\n\n console.log('🔵 Form updated, parent should be visible:', this.selectedParentItem()?.syme_title);\n }\n\n /**\n * Handle row reorder event\n */\n\n\n /**\n * Toggle dropdown visibility\n */\n toggleDropdown(itemId: string) {\n // Close all other dropdowns first\n document.querySelectorAll('.dropdown-menu').forEach(menu => {\n if (menu.getAttribute('data-dropdown') !== itemId) {\n menu.classList.add('tw-hidden');\n }\n });\n\n // Toggle the clicked dropdown\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.toggle('tw-hidden');\n }\n }\n\n /**\n * Handle menu action clicks\n */\n handleMenuAction(action: string, itemId: string) {\n const item = this.menuItems().find(item => item._id === itemId);\n if (!item) return;\n\n // Close the dropdown\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n // Handle the action\n switch (action) {\n case 'addChild':\n this.addChildMenuItem(itemId, item);\n break;\n case 'edit':\n this.editMenuItem(itemId);\n break;\n case 'toggle':\n this.toggleItemStatus(itemId);\n break;\n case 'delete':\n this.deleteMenuItem(itemId);\n break;\n }\n }\n\n /**\n * Add child menu item - sets parent and scrolls to form\n */\n addChildMenuItem(parentId: string, parentItem: ICoreSyme) {\n // Clear edit mode and retrieved item when adding a child\n this.isEditMode.set(false);\n this.retrievedMenuItem.set(null);\n\n // Set the parent ID in the form\n this.quickAddForm.patchValue({\n syme_id_syme: parentId\n });\n\n // Update UI to show which parent is selected\n this.selectedParentItem.set(parentItem);\n\n // Scroll to the form\n const formElement = document.querySelector('.tw-px-6.tw-py-4.tw-border-b');\n if (formElement) {\n formElement.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n\n // Focus on the title input\n setTimeout(() => {\n const titleInput = document.getElementById('syme_title');\n if (titleInput) {\n titleInput.focus();\n }\n }, 300);\n }\n\n /**\n * Clear selected parent\n */\n clearSelectedParent() {\n this.selectedParentItem.set(null);\n this.quickAddForm.patchValue({\n syme_id_syme: '',\n syme_type: 'module' // Reset to module when no parent\n });\n }\n\n /**\n * Helper methods for templates\n */\n getMenuTypeLabel(type: string): string {\n const typeMap: { [key: string]: string } = {\n 'module': 'Module',\n 'section': 'Section',\n 'menu': 'Menu Item',\n 'title': 'Title'\n };\n return typeMap[type] || 'Unknown';\n }\n\n\n\n\n /**\n * Generate dropdown items for menu actions\n */\n getDropdownItems(row: ICoreSyme): DropdownItem[] {\n return [\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'addChild',\n label: 'Add Child',\n icon: 'add',\n iconColor: 'tw-text-blue-400',\n textColor: 'tw-text-blue-600',\n hoverBgColor: 'hover:tw-bg-blue-50'\n },\n {\n id: 'toggle',\n label: row.syme_isactive ? 'Deactivate' : 'Activate',\n icon: 'power_settings_new',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n iconColor: 'tw-text-red-400',\n textColor: 'tw-text-red-600',\n hoverBgColor: 'hover:tw-bg-red-50'\n }\n ];\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, row: ICoreSyme): void {\n console.log('🔵 onDropdownItemClick called with:', item, row);\n\n switch (item.id) {\n case 'edit':\n console.log('🔵 Calling editMenuItem with:', row._id);\n this.editMenuItem(row._id || '');\n break;\n case 'addChild':\n console.log('🔵 Calling onAddChild with:', row);\n this.onAddChild(row);\n break;\n case 'toggle':\n console.log('🔵 Calling toggleItemStatus with:', row._id);\n this.toggleItemStatus(row._id || '');\n break;\n case 'delete':\n console.log('🔵 Calling deleteMenuItem with:', row._id);\n this.deleteMenuItem(row._id || '');\n break;\n default:\n console.log('🔵 Unknown action:', item.id);\n }\n\n // Close all dropdowns after action\n this.closeAllDropdowns();\n }\n\n /**\n * Close all dropdowns\n */\n private closeAllDropdowns(): void {\n // Close all dropdowns by clicking outside\n const event = new MouseEvent('click', { bubbles: true });\n document.dispatchEvent(event);\n }\n\n\n\n /**\n * Test method to load sample data for debugging\n */\n loadTestData(): void {\n console.log('🧪 Loading test data manually...');\n const testData: ICoreSyme[] = [\n {\n _id: 'test-1',\n syme_title: 'Dashboard',\n syme_desc: 'Main dashboard module',\n syme_type: 'module' as 'module' | 'section' | 'menu' | 'title',\n syme_path: '/dashboard',\n syme_icon: 'dashboard',\n syme_link: '',\n syme_isactive: true,\n syme_order_by: 1,\n syme_id_syme: ''\n },\n {\n _id: 'test-2',\n syme_title: 'User Management',\n syme_desc: 'Manage users and permissions',\n syme_type: 'section' as 'module' | 'section' | 'menu' | 'title',\n syme_path: '/users',\n syme_icon: 'people',\n syme_link: '',\n syme_isactive: true,\n syme_order_by: 1,\n syme_id_syme: 'test-1'\n },\n {\n _id: 'test-3',\n syme_title: 'Settings',\n syme_desc: 'Application settings',\n syme_type: 'menu' as 'module' | 'section' | 'menu' | 'title',\n syme_path: '/settings',\n syme_icon: 'settings',\n syme_link: '/settings',\n syme_isactive: true,\n syme_order_by: 2,\n syme_id_syme: 'test-1'\n }\n ];\n\n this.loading.set(false);\n this.error.set(null);\n this.menuItems.set(testData);\n this.totalItems.set(testData.length);\n\n\n\n this.updateGridData(testData);\n console.log('✅ Test data loaded successfully');\n }\n\n} ","<!-- Menu List Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Quick Add Form Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Menu Item' : 'Quick Add Menu Item' }}</h6>\n </div>\n @if (selectedParentItem()) {\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-2 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child under:' }}</span>\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ selectedParentItem()?.syme_title }}</span>\n </div>\n <button \n cideEleButton \n variant=\"ghost\" \n size=\"xs\" \n type=\"button\" \n (click)=\"clearSelectedParent()\" \n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\n <svg class=\"tw-w-4 tw-h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"/>\n </svg>\n </button>\n </div>\n }\n </div>\n \n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddMenuItem()\">\n <!-- First Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\n <!-- Menu Title -->\n <div>\n <cide-ele-input \n id=\"syme_title\" \n label=\"Title\" \n formControlName=\"syme_title\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Menu Type -->\n <div>\n <cide-ele-select \n label=\"Type*\" \n [options]=\"menuTypeOptions()\" \n formControlName=\"syme_type\"\n placeholder=\"Select type\"\n size=\"sm\">\n </cide-ele-select>\n </div>\n \n <!-- Icon -->\n <div>\n <cide-ele-input \n id=\"quickIcon\" \n type=\"text\"\n label=\"Icon\" \n formControlName=\"syme_icon\"\n placeholder=\"Icon name\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Active Status -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <cide-ele-input \n id=\"quickIsActive\"\n type=\"checkbox\"\n label=\"Active\"\n formControlName=\"syme_isactive\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n \n <!-- Second Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\n <!-- Description -->\n <div>\n <cide-ele-textarea \n id=\"syme_desc\" \n label=\"Description\" \n formControlName=\"syme_desc\"\n placeholder=\"Menu description\"\n rows=\"2\"\n size=\"sm\">\n </cide-ele-textarea>\n </div>\n \n <!-- Path -->\n <div>\n <cide-ele-input \n id=\"quickPath\" \n type=\"text\"\n label=\"Path\" \n formControlName=\"syme_path\"\n placeholder=\"/path/to/route\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Link -->\n <div>\n <cide-ele-input \n id=\"quickLink\" \n type=\"text\"\n label=\"Link\" \n formControlName=\"syme_link\"\n placeholder=\"External link\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <div class=\"tw-flex tw-space-x-2\">\n <button \n cideEleButton \n variant=\"primary\" \n size=\"sm\" \n type=\"submit\"\n [disabled]=\"quickAddForm.invalid\"\n class=\"tw-px-2 tw-py-1 tw-w-20\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n {{ isEditMode() ? 'Update' : 'Add' }}\n </button>\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\"\n (click)=\"resetQuickAddForm()\"\n class=\"tw-px-2 tw-py-1 tw-w-16\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\n Reset\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n\n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">menu</cide-ele-icon>\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Menu Management</h5>\n </div>\n\n <!-- Actions -->\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Actions can be added here if needed -->\n </div>\n </div>\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n\n <!-- Debug Information: Uncomment for development -->\n <!--\n <div class=\"tw-p-2 tw-bg-yellow-100 tw-text-xs tw-border-b tw-flex tw-justify-between tw-items-center\">\n <span>Debug: Loading: {{ loading() }} | Items Count: {{ menuItems().length }} | Total: {{ totalItems() }} | Error: {{ error() }}</span>\n <button cideEleButton variant=\"outline\" size=\"xs\" (click)=\"loadTestData()\" class=\"tw-ml-2\">\n Load Test Data\n </button>\n </div>\n -->\n \n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n \n <cide-ele-data-grid \n [config]=\"gridConfig()\" \n [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\"\n [serverSidePagination]=\"true\" \n [totalServerItems]=\"totalItems()\" \n [currentServerPage]=\"currentPage()\"\n [currentServerPageSize]=\"pageSize()\" \n [dragDropEnabled]=\"true\" \n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n\n </div>\n </div>\n\n</div>\n\n<!-- \n Angular Template References for Grid Renderers (Best Practice)\n \n These ng-template elements represent the Angular best practice for custom rendering.\n They provide:\n - Type safety with template context\n - Component lifecycle integration\n - Change detection optimization\n - Proper event handling\n - Accessibility features\n \n Note: Current data grid uses string renderers for compatibility.\n Templates are maintained for future component enhancement.\n-->\n\n\n\n<!-- Menu Details Renderer Template -->\n<ng-template #menuDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\n <!-- Menu Icon -->\n <div class=\"tw-flex-shrink-0\">\n <cide-ele-icon \n class=\"tw-text-gray-400\" \n size=\"xs\">\n {{ row.syme_icon || 'folder_open' }}\n </cide-ele-icon>\n </div>\n \n <!-- Menu Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-text-xs tw-font-medium tw-text-gray-900 tw-truncate\" \n [title]=\"row.syme_title\">\n {{ row.syme_title || 'Untitled' }}\n </div>\n @if (row.syme_desc) {\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \n [title]=\"row.syme_desc\">\n {{ row.syme_desc }}\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- Menu Type Renderer Template -->\n<ng-template #menuTypeRendererTemplate let-row=\"row\" let-value=\"value\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\n [ngClass]=\"getMenuTypeClass(row.syme_type)\">\n {{ getMenuTypeLabel(row.syme_type) }}\n </span>\n</ng-template>\n\n<!-- Actions Dropdown Renderer Template -->\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown \n [items]=\"getDropdownItems(row)\"\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template>\n\n","import { MMenu } from \"cloud-ide-lms-model\";\r\n\r\n\r\n/**\r\n * Menu Reorder Request\r\n * Used for reordering menu items\r\n */\r\nexport interface MenuReorderRequest {\r\n items: MMenu[];\r\n}\r\n\r\n/**\r\n * Menu Type Options\r\n * Available menu types for selection\r\n */\r\nexport const MENU_TYPES = [\r\n { value: 'module', label: 'Module' },\r\n { value: 'section', label: 'Section' },\r\n { value: 'menu', label: 'Menu Item' },\r\n { value: 'title', label: 'Title' }\r\n] as const;\r\n\r\n/**\r\n * Menu Type\r\n * Type definition for menu types\r\n */\r\nexport type MenuType = 'menu' | 'section' | 'title' | 'module';","/*\r\n * Menu Management Module Exports\r\n */\r\n\r\n// Components\r\nexport * from './components/menu-list/menu-list.component';\r\n\r\n// Services\r\nexport * from './services/menu-management.service';\r\n\r\n// Interfaces\r\nexport * from './interfaces/menu-item.interface'; ","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError, BehaviorSubject } from 'rxjs';\r\nimport { catchError, tap } from 'rxjs/operators';\r\nimport { \r\n cidePath, \r\n coreRoutesUrl, \r\n generateStringFromObject, \r\n hostManagerRoutesUrl, \r\n ICoreSydept, \r\n MDepartmentDeletePayload, \r\n MDepartmentGetByIdPayload, \r\n departmentByIdControllerResponse, \r\n departmentDeleteControllerResponse, \r\n departmentControllerResponse,\r\n MDepartment,\r\n MDepartmentToggleStatusPayload,\r\n departmentToggleStatusControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DepartmentManagementService {\r\n private departmentListSubject = new BehaviorSubject<ICoreSydept[]>([]);\r\n public departmentList$ = this.departmentListSubject.asObservable();\r\n\r\n constructor(private http: HttpClient) {\r\n console.log('DepartmentManagementService initialized - using real API');\r\n }\r\n\r\n /**\r\n * Get department list from API\r\n */\r\n getDepartmentList(body: MDepartment): Observable<departmentControllerResponse> {\r\n const query = generateStringFromObject(body);\r\n return this.http?.get<departmentControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, query]))\r\n .pipe(\r\n tap((response: departmentControllerResponse) => {\r\n if (response?.success) {\r\n this.departmentListSubject.next(response?.data || []);\r\n }\r\n }),\r\n catchError(error => {\r\n console.error('DepartmentManagementService API error:', error);\r\n return this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Get department list from cache (if available)\r\n */\r\n getDepartmentListFromCache(): ICoreSydept[] {\r\n return this.departmentListSubject.value;\r\n }\r\n\r\n /**\r\n * Create new department\r\n * POST ${coreRoutesUrl?.department} - payload: MDepartmentInsertUpdatePayload, response: departmentInsertUpdateControllerResponse\r\n */\r\n createDepartment(department: ICoreSydept): Observable<departmentControllerResponse> {\r\n console.log('Creating department:', department);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department]);\r\n return this.http.post<departmentControllerResponse>(url, department)\r\n .pipe(\r\n tap((response: departmentControllerResponse) => {\r\n if (response.success) {\r\n this.refreshDepartmentList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Update existing department\r\n * POST ${coreRoutesUrl?.department} - payload: MDepartmentInsertUpdatePayload, response: departmentInsertUpdateControllerResponse\r\n */\r\n updateDepartment(id: string, department: ICoreSydept): Observable<departmentControllerResponse> {\r\n console.log('Updating department:', id, department);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department]);\r\n return this.http.post<departmentControllerResponse>(url, department)\r\n .pipe(\r\n tap((response: departmentControllerResponse) => {\r\n if (response.success) {\r\n this.refreshDepartmentList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get department by ID\r\n * GET ${coreRoutesUrl?.department}/byId/:query - payload: MDepartmentGetByIdPayload, response: departmentByIdControllerResponse\r\n */\r\n getDepartmentById(id: string): Observable<departmentByIdControllerResponse> {\r\n console.log('Getting department by ID:', id);\r\n const payload: MDepartmentGetByIdPayload = { sydept_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, 'byId', query]);\r\n return this.http.get<departmentByIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete department\r\n * DELETE ${coreRoutesUrl?.department}/:query - payload: MDepartmentDeletePayload, response: departmentDeleteControllerResponse\r\n */\r\n deleteDepartment(id: string): Observable<departmentDeleteControllerResponse> {\r\n const payload: MDepartmentDeletePayload = { sydept_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, query]);\r\n return this.http.delete<departmentDeleteControllerResponse>(url)\r\n .pipe(\r\n tap((response: departmentDeleteControllerResponse) => {\r\n if (response.success) {\r\n this.refreshDepartmentList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete multiple departments\r\n */\r\n deleteMultipleDepartments(ids: string[]): Observable<{ success: boolean; message?: string; data?: unknown }> {\r\n console.log('Deleting multiple departments:', ids);\r\n const payload = { ids };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, query]);\r\n return this.http.delete<{ success: boolean; message?: string; data?: unknown }>(url)\r\n .pipe(\r\n tap((response: { success: boolean; message?: string; data?: unknown }) => {\r\n if (response.success) {\r\n this.refreshDepartmentList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Toggle department active status\r\n */\r\n toggleDepartmentStatus(payload: MDepartmentToggleStatusPayload): Observable<departmentToggleStatusControllerResponse> {\r\n const query = generateStringFromObject(payload); \r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, 'toggleStatus', query]);\r\n return this.http.put<departmentToggleStatusControllerResponse>(url, {})\r\n .pipe(\r\n tap((response: departmentToggleStatusControllerResponse) => {\r\n if (response.success) {\r\n this.refreshDepartmentList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Find department by ID\r\n */\r\n findDepartmentById(id: string, items: ICoreSydept[] = this.departmentListSubject.value): ICoreSydept | null {\r\n for (const item of items) {\r\n if (item._id === id) {\r\n return item;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Get parent departments for dropdown selection\r\n */\r\n getParentDepartments(excludeId?: string): ICoreSydept[] {\r\n const allItems: ICoreSydept[] = [];\r\n\r\n const flattenItems = (items: ICoreSydept[], level: number = 0) => {\r\n items.forEach(item => {\r\n if (item._id !== excludeId) {\r\n allItems.push({\r\n ...item,\r\n sydept_name: ' '.repeat(level) + item.sydept_name\r\n });\r\n }\r\n });\r\n };\r\n\r\n flattenItems(this.departmentListSubject.value);\r\n return allItems;\r\n }\r\n\r\n /**\r\n * Refresh department list from server\r\n */\r\n private refreshDepartmentList(): void {\r\n const defaultBody = {\r\n pageIndex: 1,\r\n pageSize: 10\r\n };\r\n this.getDepartmentList(defaultBody).subscribe({\r\n next: () => {\r\n console.log('Department list refreshed successfully');\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing department list:', error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle errors\r\n */\r\n private handleError(error: unknown): Observable<never> {\r\n let errorMessage = 'An error occurred';\r\n\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n } else if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n\r\n console.error('Department Management Service Error:', errorMessage);\r\n return throwError(() => new Error(errorMessage));\r\n }\r\n} ","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, NonNullableFormBuilder, FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ICoreSydept } from 'cloud-ide-lms-model';\nimport { DepartmentManagementService } from '../../services/department-management.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideEleDataGridComponent, CideIconComponent, CideInputComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, ConfirmationService, NotificationService, CideEleGlobalNotificationsComponent } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\n\n@Component({\n selector: 'cide-core-app-department-list',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n CideInputComponent,\n CideTextareaComponent,\n CideIconComponent,\n CideEleDropdownComponent,\n CideEleGlobalNotificationsComponent\n ],\n templateUrl: './department-list.component.html',\n styleUrls: []\n})\nexport class DepartmentListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private departmentService = inject(DepartmentManagementService);\n private appState = inject(AppStateHelperService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n private confirmationService = inject(ConfirmationService);\n private notificationService = inject(NotificationService);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n departmentDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('departmentDetailsRendererTemplate');\n departmentStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('departmentStatusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('actionsDropdownRendererTemplate');\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n departments = signal<ICoreSydept[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Modern reactive forms with signals\n selectedParentDepartment = signal<ICoreSydept | null>(null);\n\n // Retrieved department data\n retrievedDepartment = signal<ICoreSydept | null>(null);\n\n // Edit mode flag\n isEditMode = signal(false);\n\n // Server-side pagination state\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n\n // Modern reactive form with typed controls\n quickAddForm = this.fb.group({\n sydept_code: this.fb.control('', []),\n sydept_name: this.fb.control('', []),\n sydept_description: this.fb.control('', []),\n sydept_isactive: this.fb.control(true, []),\n sydept_department_id_sydept: this.fb.control(''),\n sydept_entity_id_syen: this.fb.control(this.appState.getActiveEntityId() || '', [])\n });\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ICoreSydept>>({\n id: 'department-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'details',\n header: 'Department',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'departmentDetailsRenderer'\n },\n {\n key: 'sydept_code',\n header: 'Code',\n type: 'text',\n width: '120px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'sydept_isactive',\n header: 'Status',\n type: 'custom',\n width: '100px',\n truncate: false,\n align: 'center',\n renderer: 'departmentStatusRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '60px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n tree: {\n enabled: true,\n primaryKey: '_id',\n foreignKey: 'sydept_department_id_sydept',\n childrenKey: 'children',\n levelKey: 'level',\n expandedKey: 'expanded',\n hasChildrenKey: 'hasChildren'\n },\n trackBy: '_id',\n pagination: {\n enabled: false,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search departments...',\n searchableColumns: ['sydept_name', 'sydept_code', 'sydept_description'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none',\n onRefresh: 'onDepartmentRefresh'\n });\n\n // Template renderers using Angular best practices\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n departmentDetailsRenderer: this.departmentDetailsRendererTemplate(),\n departmentStatusRenderer: this.departmentStatusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\n\n /**\n * Get template renderers for data grid\n */\n getTemplateRenderers(): Record<string, TemplateRef<TemplateContext>> {\n return this.templateRenderers();\n }\n\n // Mixed renderers (templates + string functions)\n customRenderers = computed(() => ({\n ...this.templateRenderers()\n }));\n\n /**\n * Get custom renderers adapted for current data grid compatibility\n */\n getCustomRenderers(): Record<string, (value: unknown, row: ICoreSydept) => string> {\n return {};\n }\n\n // Action handlers for grid actions\n actionHandlers = {\n onEditDepartment: (row: ICoreSydept) => this.editDepartment(row._id || ''),\n onToggleDepartment: (row: ICoreSydept) => this.toggleDepartmentStatus(row._id || ''),\n onDeleteDepartment: (row: ICoreSydept) => this.deleteDepartment(row._id || ''),\n onDepartmentRowClick: (row: ICoreSydept) => this.onDepartmentRowClick(row),\n onDepartmentRefresh: () => this.onDepartmentRefresh(),\n onAddChild: (row: ICoreSydept) => this.onAddChild(row)\n };\n\n // Computed properties\n filteredItems = computed(() => {\n const items = this.departments();\n const search = this.searchTerm()?.toLowerCase();\n\n if (!search) return items;\n\n return items.filter(item => {\n return item.sydept_name?.toLowerCase().includes(search) ||\n item.sydept_code?.toLowerCase().includes(search) ||\n item.sydept_description?.toLowerCase().includes(search);\n });\n });\n\n hasSelection = computed(() => this.selectedItems().length > 0);\n\n // Pagination computed properties\n totalPages = computed(() => Math.ceil(this.totalItems() / this.pageSize()));\n hasNextPage = computed(() => this.currentPage() < this.totalPages());\n hasPreviousPage = computed(() => this.currentPage() > 1);\n\n // Modern constructor with effects for initialization\n constructor() {\n this.initializeComponent();\n this.destroyRef.onDestroy(() => {\n this.cleanupEventListeners();\n });\n }\n\n /**\n * Initialize component with modern patterns\n */\n private initializeComponent(): void {\n console.log('DepartmentListComponent initialized with modern Angular patterns');\n this.loadDepartments();\n this.setupEventListeners();\n this.exposeGlobalFunctions();\n }\n\n /**\n * Setup event listeners for dropdown interactions\n */\n private setupEventListeners(): void {\n document.addEventListener('click', this.handleClickOutside.bind(this));\n document.addEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Cleanup event listeners\n */\n private cleanupEventListeners(): void {\n document.removeEventListener('click', this.handleClickOutside.bind(this));\n document.removeEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Expose global functions for dropdown interactions\n */\n private exposeGlobalFunctions(): void {\n if (typeof window !== 'undefined') {\n (window as unknown as { toggleDropdown: (id: string) => void }).toggleDropdown = this.toggleDropdown.bind(this);\n (window as unknown as { handleDepartmentAction: (action: string, id: string) => void }).handleDepartmentAction = this.handleDepartmentAction.bind(this);\n }\n }\n\n /**\n * Load departments from service\n */\n loadDepartments(): void {\n console.log('🚀 DepartmentListComponent.loadDepartments() called');\n this.loading.set(true);\n this.error.set(null);\n\n const requestBody = {\n total: this.totalItems(),\n pageIndex: this.currentPage(),\n pageSize: this.pageSize(),\n query: this.searchTerm()\n };\n console.log('📋 Request body:', requestBody);\n\n if (!this.departmentService) {\n console.error('❌ DepartmentService is not available');\n this.error.set('Department service is not available');\n this.loading.set(false);\n return;\n }\n\n this.departmentService.getDepartmentList(requestBody)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('📥 DepartmentListComponent received response:', response);\n if (response?.success) {\n console.log('✅ Response successful, setting departments:', response.data);\n const departmentData = response?.data || [];\n this.departments.set(departmentData);\n this.totalItems.set(response.total || 0);\n this.updateGridData(departmentData);\n } else {\n console.error('❌ Response was not successful:', response);\n this.error.set('Failed to load departments');\n }\n },\n error: (err) => {\n console.error('❌ DepartmentListComponent error:', err);\n this.error.set(err.message || 'An error occurred while loading departments');\n },\n complete: () => {\n console.log('DepartmentListComponent loadDepartments completed');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(departments: ICoreSydept[]): void {\n console.log('🔄 updateGridData called with:', departments);\n \n this.gridConfig.update(config => {\n const newConfig = {\n ...config,\n data: departments\n };\n console.log('⚙️ Updated grid config with departments');\n return newConfig;\n });\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ICoreSydept>): void {\n console.log('onGridEvent', event);\n switch (event.type) {\n case 'search':\n this.searchTerm.set(event.data as string);\n this.currentPage.set(1);\n this.loadDepartments();\n break;\n case 'pageChange': {\n const pageData = event.data as { page: number; pageSize: number };\n if (pageData) {\n this.currentPage.set(pageData.page);\n this.pageSize.set(pageData.pageSize);\n this.loadDepartments();\n } else {\n const page = event.data as number;\n if (page) {\n this.currentPage.set(page);\n this.loadDepartments();\n }\n }\n break;\n }\n case 'refresh':\n this.onDepartmentRefresh();\n break;\n case 'rowClick':\n this.onDepartmentRowClick(event.data as ICoreSydept);\n break;\n case 'action':\n if (event.action?.key === 'edit') {\n this.editDepartment(event.data as string);\n } else if (event.action?.key === 'toggle') {\n this.toggleDepartmentStatus(event.data as string);\n } else if (event.action?.key === 'delete') {\n this.deleteDepartment(event.data as string);\n }\n break;\n }\n }\n\n /**\n * Handle department refresh\n */\n onDepartmentRefresh(): void {\n this.loadDepartments();\n }\n\n /**\n * Handle department row click\n */\n onDepartmentRowClick(department: ICoreSydept): void {\n this.editDepartment(department._id || '');\n }\n\n /**\n * Navigate to edit department form\n */\n editDepartment(itemId: string): void {\n console.log('🔵 editDepartment called with:', itemId);\n this.isEditMode.set(true);\n this.getDepartmentById(itemId);\n }\n\n /**\n * Get department by ID using the API\n */\n getDepartmentById(itemId: string): void {\n console.log('🔵 getDepartmentById called with:', itemId);\n this.loading.set(true);\n\n this.departmentService.getDepartmentById(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Department retrieved successfully:', response.data);\n let department: ICoreSydept | null = null;\n department = response.data || null;\n\n this.retrievedDepartment.set(department);\n\n if (this.isEditMode() && department) {\n this.populateFormForEdit(department);\n }\n } else {\n this.error.set('Failed to retrieve department');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while retrieving the department');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Populate form with department data for editing\n */\n populateFormForEdit(department: ICoreSydept): void {\n console.log('🔵 populateFormForEdit called with:', department);\n\n this.quickAddForm.patchValue({\n sydept_code: department.sydept_code || '',\n sydept_name: department.sydept_name || '',\n sydept_description: department.sydept_description || '',\n sydept_isactive: department.sydept_isactive ?? true,\n sydept_department_id_sydept: department.sydept_department_id_sydept || '',\n sydept_entity_id_syen: department.sydept_entity_id_syen || ''\n });\n\n if (department.sydept_department_id_sydept) {\n const parentDepartment = this.departments().find(item => item._id === department.sydept_department_id_sydept);\n if (parentDepartment) {\n this.selectedParentDepartment.set(parentDepartment);\n }\n }\n\n console.log('✅ Form populated for editing:', this.quickAddForm.value);\n }\n\n /**\n * Delete department\n */\n async deleteDepartment(itemId: string): Promise<void> {\n console.log('🔵 deleteDepartment called with:', itemId);\n \n // Find the department name for better confirmation message\n const department = this.departments().find(d => d._id === itemId);\n const departmentName = department?.sydept_name || 'this department';\n \n try {\n const confirmed = await this.confirmationService.confirmDelete(departmentName);\n \n if (confirmed) {\n this.loading.set(true);\n\n this.departmentService.deleteDepartment(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.notificationService.success(`Department \"${departmentName}\" deleted successfully`);\n this.loadDepartments();\n } else {\n this.notificationService.error('Failed to delete department');\n }\n },\n error: (err) => {\n this.notificationService.error(err.message || 'An error occurred while deleting the department');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n } catch (error) {\n console.log('User cancelled deletion');\n }\n }\n\n /**\n * Toggle department status\n */\n toggleDepartmentStatus(itemId: string): void {\n console.log('🔵 toggleDepartmentStatus called with:', itemId);\n \n // Find the department for better notification message\n const department = this.departments().find(d => d._id === itemId);\n const departmentName = department?.sydept_name || 'department';\n const newStatus = department?.sydept_isactive ? 'inactive' : 'active';\n \n this.loading.set(true);\n\n this.departmentService.toggleDepartmentStatus({ sydept_id: itemId })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.notificationService.success(`Department \"${departmentName}\" ${newStatus} successfully`);\n this.loadDepartments();\n } else {\n this.notificationService.error('Failed to toggle department status');\n }\n },\n error: (err) => {\n this.notificationService.error(err.message || 'An error occurred while toggling status');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Quick add or update department using reactive form\n */\n quickAddDepartment() {\n if (this.quickAddForm.invalid) return;\n\n const formValue = this.quickAddForm.value;\n\n const department: Partial<ICoreSydept> = {\n _id: this.retrievedDepartment()?._id || '',\n sydept_code: formValue.sydept_code,\n sydept_name: formValue.sydept_name,\n sydept_description: formValue.sydept_description || '',\n sydept_isactive: formValue.sydept_isactive,\n sydept_department_id_sydept: formValue.sydept_department_id_sydept || undefined,\n sydept_entity_id_syen: formValue.sydept_entity_id_syen\n };\n\n if (this.isEditMode() && this.retrievedDepartment()) {\n const itemId = this.retrievedDepartment()?._id;\n if (itemId) {\n console.log('🔵 Updating department:', itemId);\n this.departmentService.updateDepartment(itemId, department).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Department updated successfully');\n this.notificationService.success(`Department \"${department.sydept_name}\" updated successfully`);\n this.resetQuickAddForm();\n this.isEditMode.set(false);\n this.retrievedDepartment.set(null);\n this.loadDepartments();\n } else {\n this.notificationService.error('Failed to update department');\n }\n },\n error: (err) => {\n this.notificationService.error(err.message || 'Failed to update department');\n }\n });\n }\n } else {\n console.log('🔵 Creating new department');\n this.departmentService.createDepartment(department).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Department created successfully');\n this.notificationService.success(`Department \"${department.sydept_name}\" created successfully`);\n this.resetQuickAddForm();\n this.loadDepartments();\n } else {\n this.notificationService.error('Failed to create department');\n }\n },\n error: (err) => {\n this.notificationService.error(err.message || 'Failed to create department');\n }\n });\n }\n }\n\n /**\n * Reset the quick add form to default values\n */\n resetQuickAddForm(): void {\n this.selectedParentDepartment.set(null);\n this.isEditMode.set(false);\n this.retrievedDepartment.set(null);\n\n this.quickAddForm.reset({\n sydept_code: '',\n sydept_name: '',\n sydept_description: '',\n sydept_isactive: true,\n sydept_department_id_sydept: '',\n sydept_entity_id_syen: this.appState.getActiveEntityId() || ''\n });\n }\n\n /**\n * Handle adding a child department\n */\n onAddChild(parentItem: ICoreSydept): void {\n console.log('🔵 onAddChild called with:', parentItem);\n console.log('🔵 Parent name:', parentItem.sydept_name);\n\n // Clear edit mode and retrieved item when adding a child\n this.isEditMode.set(false);\n this.retrievedDepartment.set(null);\n\n // Set the selected parent item first using signal\n this.selectedParentDepartment.set(parentItem);\n console.log('🔵 selectedParentDepartment set to:', this.selectedParentDepartment());\n\n // Update form with parent context (don't call resetQuickAddForm as it clears the parent)\n this.quickAddForm.patchValue({\n sydept_code: '',\n sydept_name: '',\n sydept_description: '',\n sydept_isactive: true,\n sydept_department_id_sydept: parentItem._id,\n sydept_entity_id_syen: this.appState.getActiveEntityId() || ''\n });\n\n console.log('🔵 Form updated, parent should be visible:', this.selectedParentDepartment()?.sydept_name);\n }\n\n /**\n * Clear selected parent department\n */\n clearSelectedParent() {\n this.selectedParentDepartment.set(null);\n this.quickAddForm.patchValue({\n sydept_department_id_sydept: ''\n });\n }\n\n /**\n * Handle click outside dropdown\n */\n private handleClickOutside(event: Event): void {\n const target = event.target as HTMLElement;\n\n if (!target?.closest('[data-dropdown]') && !target?.closest('[data-action=\"more-actions\"]')) {\n document.querySelectorAll('[data-dropdown]').forEach((el: Element) => {\n const dropdown = el as HTMLElement;\n dropdown.classList.add('tw-hidden');\n });\n\n document.querySelectorAll('[data-action=\"more-actions\"]').forEach((el: Element) => {\n const button = el as HTMLElement;\n button.setAttribute('aria-expanded', 'false');\n });\n }\n }\n\n /**\n * Handle dropdown action clicks\n */\n private handleDropdownAction(event: Event): void {\n const target = event.target as HTMLElement;\n const actionButton = target.closest('[data-action]') as HTMLElement;\n\n if (actionButton) {\n const action = actionButton.getAttribute('data-action');\n const itemId = actionButton.getAttribute('data-item-id');\n\n if (action && itemId) {\n event.preventDefault();\n event.stopPropagation();\n\n const dropdown = actionButton.closest('[data-dropdown]') as HTMLElement;\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n switch (action) {\n case 'edit':\n this.editDepartment(itemId);\n break;\n case 'toggle':\n this.toggleDepartmentStatus(itemId);\n break;\n case 'delete':\n this.deleteDepartment(itemId);\n break;\n }\n }\n }\n }\n\n /**\n * Toggle dropdown visibility\n */\n toggleDropdown(itemId: string) {\n document.querySelectorAll('.dropdown-menu').forEach(menu => {\n if (menu.getAttribute('data-dropdown') !== itemId) {\n menu.classList.add('tw-hidden');\n }\n });\n\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.toggle('tw-hidden');\n }\n }\n\n /**\n * Handle department action clicks\n */\n handleDepartmentAction(action: string, itemId: string) {\n const item = this.departments().find(item => item._id === itemId);\n if (!item) return;\n\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n switch (action) {\n case 'edit':\n this.editDepartment(itemId);\n break;\n case 'toggle':\n this.toggleDepartmentStatus(itemId);\n break;\n case 'delete':\n this.deleteDepartment(itemId);\n break;\n }\n }\n\n /**\n * Get status display\n */\n getStatusDisplay(isActive: boolean): string {\n return isActive ? 'Active' : 'Inactive';\n }\n\n /**\n * Get status class for styling\n */\n getStatusClass(isActive: boolean): string {\n return isActive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800';\n }\n\n /**\n * Generate dropdown items for department actions\n */\n getDropdownItems(row: ICoreSydept): DropdownItem[] {\n return [\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'addChild',\n label: 'Add Child',\n icon: 'add',\n iconColor: 'tw-text-blue-400',\n textColor: 'tw-text-blue-600',\n hoverBgColor: 'hover:tw-bg-blue-50'\n },\n {\n id: 'toggle',\n label: row.sydept_isactive ? 'Deactivate' : 'Activate',\n icon: 'power_settings_new',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n iconColor: 'tw-text-red-400',\n textColor: 'tw-text-red-600',\n hoverBgColor: 'hover:tw-bg-red-50'\n }\n ];\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, row: ICoreSydept): void {\n console.log('🔵 onDropdownItemClick called with:', item, row);\n\n switch (item.id) {\n case 'edit':\n this.editDepartment(row._id || '');\n break;\n case 'addChild':\n this.onAddChild(row);\n break;\n case 'toggle':\n this.toggleDepartmentStatus(row._id || '');\n break;\n case 'delete':\n this.deleteDepartment(row._id || '');\n break;\n default:\n console.log('🔵 Unknown action:', item.id);\n }\n\n this.closeAllDropdowns();\n }\n\n /**\n * Close all dropdowns\n */\n private closeAllDropdowns(): void {\n const event = new MouseEvent('click', { bubbles: true });\n document.dispatchEvent(event);\n }\n\n /**\n * Track by function for ngFor\n */\n trackByItemId(index: number, item: ICoreSydept): string {\n return item._id || '';\n }\n} ","<!-- Department List Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n<!-- Global Notifications -->\n<cide-ele-global-notifications></cide-ele-global-notifications>\n\n <!-- Quick Add Form Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Department' : 'Quick Add Department' }}</h6>\n </div>\n @if (selectedParentDepartment()) {\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child under:' }}</span>\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ selectedParentDepartment()?.sydept_name }}</span>\n </div>\n <button \n cideEleButton \n variant=\"ghost\" \n size=\"xs\" \n type=\"button\" \n (click)=\"clearSelectedParent()\" \n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\n <svg class=\"tw-w-4 tw-h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"/>\n </svg>\n </button>\n </div>\n }\n </div>\n \n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddDepartment()\">\n <!-- First Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\n <!-- Department Code -->\n <div>\n <cide-ele-input \n id=\"sydept_code\" \n label=\"Code*\" \n formControlName=\"sydept_code\"\n placeholder=\"DEPT001\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Department Name -->\n <div>\n <cide-ele-input \n id=\"sydept_name\" \n label=\"Name*\" \n formControlName=\"sydept_name\"\n placeholder=\"Department name\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n\n \n <!-- Active Status -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <cide-ele-input \n id=\"sydept_isactive\"\n type=\"checkbox\"\n label=\"Active\"\n formControlName=\"sydept_isactive\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n \n <!-- Second Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\n <!-- Description -->\n <div>\n <cide-ele-textarea \n id=\"sydept_description\" \n label=\"Description\" \n formControlName=\"sydept_description\"\n placeholder=\"Department description\"\n rows=\"2\"\n size=\"sm\">\n </cide-ele-textarea>\n </div>\n \n\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <div class=\"tw-flex tw-space-x-2\">\n <button \n cideEleButton \n variant=\"primary\" \n size=\"sm\" \n type=\"submit\"\n [disabled]=\"quickAddForm.invalid\"\n class=\"tw-px-2 tw-py-1 tw-w-20\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n {{ isEditMode() ? 'Update' : 'Add' }}\n </button>\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\"\n (click)=\"resetQuickAddForm()\"\n class=\"tw-px-2 tw-py-1 tw-w-16\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\n Reset\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n\n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">business</cide-ele-icon>\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Department Management</h5>\n </div>\n\n <!-- Actions -->\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Search functionality is handled by the data grid -->\n </div>\n </div>\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n \n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n \n <cide-ele-data-grid \n [config]=\"gridConfig()\" \n [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\"\n [serverSidePagination]=\"true\" \n [totalServerItems]=\"totalItems()\" \n [currentServerPage]=\"currentPage()\"\n [currentServerPageSize]=\"pageSize()\" \n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Department Details Renderer Template -->\n<ng-template #departmentDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\n <!-- Department Icon -->\n <div class=\"tw-flex-shrink-0\">\n <cide-ele-icon \n class=\"tw-text-gray-400\" \n size=\"xs\">\n business\n </cide-ele-icon>\n </div>\n \n <!-- Department Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \n [title]=\"row.sydept_name\">\n {{ row.sydept_name || 'Untitled' }}\n </div>\n @if (row.sydept_description) {\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \n [title]=\"row.sydept_description\">\n {{ row.sydept_description }}\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- Department Status Renderer Template -->\n<ng-template #departmentStatusRendererTemplate let-row=\"row\" let-value=\"value\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\n [ngClass]=\"getStatusClass(row.sydept_isactive)\">\n {{ getStatusDisplay(row.sydept_isactive) }}\n </span>\n</ng-template>\n\n<!-- Actions Dropdown Renderer Template -->\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown \n [items]=\"getDropdownItems(row)\"\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template> ","// Department Management Components\r\nexport * from './components/department-list/department-list.component';\r\n\r\n// Department Management Services\r\nexport * from './services/department-management.service'; ","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, throwError, BehaviorSubject } from 'rxjs';\nimport { catchError, tap } from 'rxjs/operators';\nimport { \n cidePath, \n coreRoutesUrl, \n generateStringFromObject, \n hostManagerRoutesUrl, \n ICoreSydsg, \n MDesignationDeletePayload, \n MDesignationGetByIdPayload, \n MDesignationInsertUpdatePayload,\n designationByIdControllerResponse, \n designationDeleteControllerResponse, \n designationControllerResponse,\n designationInsertUpdateControllerResponse,\n MDesignation,\n} from 'cloud-ide-lms-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DesignationManagementService {\n private apiUrl = `${coreRoutesUrl?.designation}`;\n private designationListSubject = new BehaviorSubject<ICoreSydsg[]>([]);\n public designationList$ = this.designationListSubject.asObservable();\n\n constructor(private http: HttpClient) {\n console.log('DesignationManagementService initialized - using real API');\n }\n\n /**\n * Get designation list from API\n */\n getDesignationList(body: MDesignation): Observable<designationControllerResponse> {\n const query = generateStringFromObject(body);\n return this.http?.get<designationControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation, query]))\n .pipe(\n tap((response: designationControllerResponse) => {\n if (response?.success) {\n this.designationListSubject.next(response?.data || []);\n }\n }),\n catchError(error => {\n console.error('DesignationManagementService API error:', error);\n return this.handleError(error);\n })\n );\n }\n\n /**\n * Get designation list from cache (if available)\n */\n getDesignationListFromCache(): ICoreSydsg[] {\n return this.designationListSubject.value;\n }\n\n /**\n * Create new designation\n * POST ${coreRoutesUrl?.designation} - payload: MDesignationInsertUpdatePayload, response: designationInsertUpdateControllerResponse\n */\n createDesignation(designation: ICoreSydsg): Observable<designationInsertUpdateControllerResponse> {\n console.log('Creating designation:', designation);\n \n // Create proper payload using MDesignationInsertUpdatePayload\n const payload = new MDesignationInsertUpdatePayload(designation);\n \n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation]);\n return this.http.post<designationInsertUpdateControllerResponse>(url, payload)\n .pipe(\n tap((response: designationInsertUpdateControllerResponse) => {\n if (response.success) {\n this.refreshDesignationList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Update existing designation\n * POST ${coreRoutesUrl?.designation} - payload: MDesignationInsertUpdatePayload, response: designationInsertUpdateControllerResponse\n */\n updateDesignation(id: string, designation: ICoreSydsg): Observable<designationInsertUpdateControllerResponse> {\n console.log('Updating designation:', id, designation);\n \n // Create proper payload using MDesignationInsertUpdatePayload\n const payload = new MDesignationInsertUpdatePayload(designation);\n \n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation]);\n return this.http.post<designationInsertUpdateControllerResponse>(url, payload)\n .pipe(\n tap((response: designationInsertUpdateControllerResponse) => {\n if (response.success) {\n this.refreshDesignationList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Get designation by ID\n * GET ${coreRoutesUrl?.designation}/byId/:query - payload: MDesignationGetByIdPayload, response: designationByIdControllerResponse\n */\n getDesignationById(id: string): Observable<designationByIdControllerResponse> {\n console.log('Getting designation by ID:', id);\n const payload: MDesignationGetByIdPayload = { sydsg_id: id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation, 'byId', query]);\n return this.http.get<designationByIdControllerResponse>(url)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Delete designation\n * DELETE ${coreRoutesUrl?.designation}/:query - payload: MDesignationDeletePayload, response: designationDeleteControllerResponse\n */\n deleteDesignation(id: string): Observable<designationDeleteControllerResponse> {\n const payload: MDesignationDeletePayload = { sydsg_id: id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation, query]);\n return this.http.delete<designationDeleteControllerResponse>(url)\n .pipe(\n tap((response: designationDeleteControllerResponse) => {\n if (response.success) {\n this.refreshDesignationList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Delete multiple designations\n */\n deleteMultipleDesignations(ids: string[]): Observable<{ success: boolean; message?: string; data?: unknown }> {\n console.log('Deleting multiple designations:', ids);\n const payload = { ids };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation, query]);\n return this.http.delete<{ success: boolean; message?: string; data?: unknown }>(url)\n .pipe(\n tap((response: { success: boolean; message?: string; data?: unknown }) => {\n if (response.success) {\n this.refreshDesignationList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Toggle designation active status\n */\n toggleDesignationStatus(id: string): Observable<designationControllerResponse> {\n console.log('Toggling designation status:', id);\n const payload = { id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation, query]);\n return this.http.put<designationControllerResponse>(url, {})\n .pipe(\n tap((response: designationControllerResponse) => {\n if (response.success) {\n this.refreshDesignationList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Find designation by ID\n */\n findDesignationById(id: string, items: ICoreSydsg[] = this.designationListSubject.value): ICoreSydsg | null {\n for (const item of items) {\n if (item._id === id) {\n return item;\n }\n }\n return null;\n }\n\n /**\n * Get parent designations for dropdown selection\n */\n getParentDesignations(excludeId?: string): ICoreSydsg[] {\n const allItems: ICoreSydsg[] = [];\n\n const flattenItems = (items: ICoreSydsg[], level: number = 0) => {\n items.forEach(item => {\n if (item._id !== excludeId) {\n allItems.push({\n ...item,\n sydsg_name: ' '.repeat(level) + item.sydsg_name\n });\n }\n });\n };\n\n flattenItems(this.designationListSubject.value);\n return allItems;\n }\n\n /**\n * Refresh designation list from server\n */\n private refreshDesignationList(): void {\n const defaultBody = {\n pageIndex: 1,\n pageSize: 10\n };\n this.getDesignationList(defaultBody).subscribe({\n next: () => {\n console.log('Designation list refreshed successfully');\n },\n error: (error) => {\n console.error('Error refreshing designation list:', error);\n }\n });\n }\n\n /**\n * Handle errors\n */\n private handleError(error: unknown): Observable<never> {\n let errorMessage = 'An error occurred';\n\n if (error instanceof Error) {\n errorMessage = error.message;\n } else if (typeof error === 'string') {\n errorMessage = error;\n }\n\n console.error('Designation Management Service Error:', errorMessage);\n return throwError(() => new Error(errorMessage));\n }\n} ","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError, BehaviorSubject } from 'rxjs';\r\nimport { catchError, tap } from 'rxjs/operators';\r\nimport { \r\n cidePath, \r\n coreRoutesUrl, \r\n generateStringFromObject, \r\n hostManagerRoutesUrl, \r\n ICoreSydsgl, \r\n gradeLevelControllerResponse, \r\n gradeLevelByIdControllerResponse,\r\n MGradeLevel\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GradeLevelManagementService {\r\n private apiUrl = `${coreRoutesUrl?.gradeLevel}`;\r\n private gradeLevelListSubject = new BehaviorSubject<ICoreSydsgl[]>([]);\r\n public gradeLevelList$ = this.gradeLevelListSubject.asObservable();\r\n\r\n constructor(private http: HttpClient) {\r\n console.log('GradeLevelManagementService initialized - using real API');\r\n }\r\n\r\n /**\r\n * Get grade level list from API\r\n */\r\n getGradeLevelList(body: MGradeLevel): Observable<gradeLevelControllerResponse> {\r\n const query = generateStringFromObject(body);\r\n return this.http?.get<gradeLevelControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, query]))\r\n .pipe(\r\n tap((response: gradeLevelControllerResponse) => {\r\n if (response?.success) {\r\n this.gradeLevelListSubject.next(response?.data || []);\r\n }\r\n }),\r\n catchError(error => {\r\n console.error('GradeLevelManagementService API error:', error);\r\n return this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Get grade level list from cache (if available)\r\n */\r\n getGradeLevelListFromCache(): ICoreSydsgl[] {\r\n return this.gradeLevelListSubject.value;\r\n }\r\n\r\n /**\r\n * Create new grade level\r\n * POST ${coreRoutesUrl?.gradeLevel} - payload: MGradeLevel, response: gradeLevelInsertUpdateControllerResponse\r\n */\r\n createGradeLevel(gradeLevel: ICoreSydsgl): Observable<gradeLevelControllerResponse> {\r\n console.log('Creating grade level:', gradeLevel);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel]);\r\n return this.http.post<gradeLevelControllerResponse>(url, gradeLevel)\r\n .pipe(\r\n tap((response: gradeLevelControllerResponse) => {\r\n if (response.success) {\r\n this.refreshGradeLevelList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Update existing grade level\r\n * POST ${coreRoutesUrl?.gradeLevel} - payload: MGradeLevel, response: gradeLevelInsertUpdateControllerResponse\r\n */\r\n updateGradeLevel(id: string, gradeLevel: ICoreSydsgl): Observable<gradeLevelControllerResponse> {\r\n console.log('Updating grade level:', id, gradeLevel);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel]);\r\n return this.http.post<gradeLevelControllerResponse>(url, gradeLevel)\r\n .pipe(\r\n tap((response: gradeLevelControllerResponse) => {\r\n if (response.success) {\r\n this.refreshGradeLevelList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get grade level by ID\r\n * GET ${coreRoutesUrl?.gradeLevel}/byId/:query - payload: { id }, response: gradeLevelByIdControllerResponse\r\n */\r\n getGradeLevelById(id: string): Observable<gradeLevelByIdControllerResponse> {\r\n console.log('Getting grade level by ID:', id);\r\n const payload = { id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, 'byId', query]);\r\n return this.http.get<gradeLevelByIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete grade level\r\n * DELETE ${coreRoutesUrl?.gradeLevel}/:query - payload: { id }, response: { success: boolean }\r\n */\r\n deleteGradeLevel(id: string): Observable<{ success: boolean; message?: string; data?: unknown }> {\r\n const payload = { id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, query]);\r\n return this.http.delete<{ success: boolean; message?: string; data?: unknown }>(url)\r\n .pipe(\r\n tap((response: { success: boolean; message?: string; data?: unknown }) => {\r\n if (response.success) {\r\n this.refreshGradeLevelList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete multiple grade levels\r\n */\r\n deleteMultipleGradeLevels(ids: string[]): Observable<{ success: boolean; message?: string; data?: unknown }> {\r\n console.log('Deleting multiple grade levels:', ids);\r\n const payload = { ids };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, query]);\r\n return this.http.delete<{ success: boolean; message?: string; data?: unknown }>(url)\r\n .pipe(\r\n tap((response: { success: boolean; message?: string; data?: unknown }) => {\r\n if (response.success) {\r\n this.refreshGradeLevelList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Toggle grade level active status\r\n */\r\n toggleGradeLevelStatus(id: string): Observable<gradeLevelControllerResponse> {\r\n console.log('Toggling grade level status:', id);\r\n const payload = { id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, query]);\r\n return this.http.put<gradeLevelControllerResponse>(url, {})\r\n .pipe(\r\n tap((response: gradeLevelControllerResponse) => {\r\n if (response.success) {\r\n this.refreshGradeLevelList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Find grade level by ID\r\n */\r\n findGradeLevelById(id: string, items: ICoreSydsgl[] = this.gradeLevelListSubject.value): ICoreSydsgl | null {\r\n for (const item of items) {\r\n if (item._id === id) {\r\n return item;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Refresh grade level list from server\r\n */\r\n private refreshGradeLevelList(): void {\r\n const defaultBody = {\r\n pageIndex: 1,\r\n pageSize: 10\r\n };\r\n this.getGradeLevelList(defaultBody).subscribe({\r\n next: () => {\r\n console.log('Grade level list refreshed successfully');\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing grade level list:', error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle errors\r\n */\r\n private handleError(error: unknown): Observable<never> {\r\n let errorMessage = 'An error occurred';\r\n\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n } else if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n\r\n console.error('Grade Level Management Service Error:', errorMessage);\r\n return throwError(() => new Error(errorMessage));\r\n }\r\n} ","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Validators, ReactiveFormsModule, NonNullableFormBuilder, FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ICoreSydsg, ICoreSydsgl, ICoreSydept } from 'cloud-ide-lms-model';\nimport { DesignationManagementService } from '../../services/designation-management.service';\nimport { GradeLevelManagementService } from '../../../grade-level-management/services/grade-level-management.service';\nimport { DepartmentManagementService } from '../../../department-management/services/department-management.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideEleDataGridComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\n\ninterface HierarchicalNode {\n _id: string;\n name: string;\n code: string;\n description: string;\n type: 'department' | 'designation';\n level: number;\n expanded: boolean;\n hasChildren: boolean;\n children: HierarchicalNode[];\n status: boolean;\n grade_level: string;\n parentId: string | null;\n}\n\n@Component({\n selector: 'cide-core-app-designation-list',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n CideInputComponent,\n CideSelectComponent,\n CideTextareaComponent,\n CideIconComponent,\n CideEleDropdownComponent\n ],\n templateUrl: './designation-list.component.html',\n styleUrls: []\n})\nexport class DesignationListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private designationService = inject(DesignationManagementService);\n private gradeLevelService = inject(GradeLevelManagementService);\n private departmentService = inject(DepartmentManagementService);\n private appState = inject(AppStateHelperService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n designationDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('designationDetailsRendererTemplate');\n designationStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('designationStatusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('actionsDropdownRendererTemplate');\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n designations = signal<ICoreSydsg[]>([]);\n departments = signal<ICoreSydept[]>([]);\n gradeLevels = signal<ICoreSydsgl[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Modern reactive forms with signals\n selectedParentDesignation = signal<ICoreSydsg | null>(null);\n selectedParentDepartment = signal<ICoreSydept | null>(null);\n\n // Retrieved designation data\n retrievedDesignation = signal<ICoreSydsg | null>(null);\n\n // Edit mode flag\n isEditMode = signal(false);\n\n // Server-side pagination state\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n\n // Modern reactive form with typed controls\n quickAddForm = this.fb.group({\n sydsg_name: this.fb.control('', [Validators.required, Validators.minLength(1), Validators.maxLength(100)]),\n sydsg_code: this.fb.control('', [Validators.required, Validators.minLength(1), Validators.maxLength(20)]),\n sydsg_description: this.fb.control('', [Validators.maxLength(400)]),\n sydsg_prent_id_desg: this.fb.control(''),\n sydsg_department_id_sydpt: this.fb.control('', [Validators.required]),\n sydsg_grade_level_id_sydsgl: this.fb.control('', [Validators.required]),\n sydsg_isactive: this.fb.control(true, [Validators.required]),\n desg_entity_id_syen: this.fb.control(this.appState.getActiveEntityId() || '', [Validators.required])\n });\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ICoreSydsg>>({\n id: 'designation-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'details',\n header: 'Department/Designation',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'designationDetailsRenderer'\n },\n {\n key: 'code',\n header: 'Code',\n type: 'text',\n width: '120px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'grade_level',\n header: 'Grade Level',\n type: 'text',\n width: '120px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'status',\n header: 'Status',\n type: 'custom',\n width: '100px',\n truncate: false,\n align: 'center',\n renderer: 'designationStatusRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '60px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n tree: {\n enabled: true,\n primaryKey: '_id',\n foreignKey: 'parentId',\n childrenKey: 'children',\n levelKey: 'level',\n expandedKey: 'expanded',\n hasChildrenKey: 'hasChildren'\n },\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search departments and designations...',\n searchableColumns: ['name', 'code', 'description'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none',\n onRefresh: 'onDesignationRefresh'\n });\n\n // Template renderers using Angular best practices\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n designationDetailsRenderer: this.designationDetailsRendererTemplate(),\n designationStatusRenderer: this.designationStatusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\n\n /**\n * Get template renderers for data grid\n */\n getTemplateRenderers(): Record<string, TemplateRef<TemplateContext>> {\n return this.templateRenderers();\n }\n\n // Mixed renderers (templates + string functions)\n customRenderers = computed(() => ({\n ...this.templateRenderers()\n }));\n\n /**\n * Get custom renderers adapted for current data grid compatibility\n */\n getCustomRenderers(): Record<string, (value: unknown, row: ICoreSydsg) => string> {\n return {};\n }\n\n // Action handlers for grid actions\n actionHandlers = {\n onEditDesignation: (row: ICoreSydsg) => this.editDesignation(row._id || ''),\n onToggleDesignation: (row: ICoreSydsg) => this.toggleDesignationStatus(row._id || ''),\n onDeleteDesignation: (row: ICoreSydsg) => this.deleteDesignation(row._id || ''),\n onDesignationRowClick: (row: ICoreSydsg) => this.onDesignationRowClick(row),\n onDesignationRefresh: () => this.onDesignationRefresh(),\n onAddChild: (row: ICoreSydsg) => this.onAddChild(row)\n };\n\n // Computed properties\n filteredItems = computed(() => {\n const items = this.designations();\n const search = this.searchTerm()?.toLowerCase();\n\n if (!search) return items;\n\n return items.filter(item => {\n return item.sydsg_name?.toLowerCase().includes(search) ||\n item.sydsg_code?.toLowerCase().includes(search) ||\n item.sydsg_description?.toLowerCase().includes(search);\n });\n });\n\n hasSelection = computed(() => this.selectedItems().length > 0);\n\n // Pagination computed properties\n totalPages = computed(() => Math.ceil(this.totalItems() / this.pageSize()));\n hasNextPage = computed(() => this.currentPage() < this.totalPages());\n hasPreviousPage = computed(() => this.currentPage() > 1);\n\n // Grade level options for dropdown\n gradeLevelOptions = computed(() => {\n return this.gradeLevels().map(gradeLevel => ({\n value: gradeLevel._id || '',\n label: gradeLevel.sydsgl_name || 'Unknown'\n }));\n });\n\n // Department options for dropdown\n departmentOptions = computed(() => {\n return this.departments().map(department => ({\n value: department._id || '',\n label: department.sydept_name || 'Unknown'\n }));\n });\n\n // Modern constructor with effects for initialization\n constructor() {\n this.initializeComponent();\n this.destroyRef.onDestroy(() => {\n this.cleanupEventListeners();\n });\n }\n\n /**\n * Initialize component with modern patterns\n */\n private initializeComponent(): void {\n console.log('DesignationListComponent initialized with modern Angular patterns');\n this.loadDepartments();\n this.loadGradeLevels();\n this.loadDesignations();\n this.setupEventListeners();\n this.exposeGlobalFunctions();\n }\n\n /**\n * Setup event listeners for dropdown interactions\n */\n private setupEventListeners(): void {\n document.addEventListener('click', this.handleClickOutside.bind(this));\n document.addEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Cleanup event listeners\n */\n private cleanupEventListeners(): void {\n document.removeEventListener('click', this.handleClickOutside.bind(this));\n document.removeEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Expose global functions for dropdown interactions\n */\n private exposeGlobalFunctions(): void {\n if (typeof window !== 'undefined') {\n (window as unknown as { toggleDropdown: (id: string) => void }).toggleDropdown = this.toggleDropdown.bind(this);\n (window as unknown as { handleDesignationAction: (action: string, id: string) => void }).handleDesignationAction = this.handleDesignationAction.bind(this);\n }\n }\n\n /**\n * Load designations from service\n */\n loadDesignations(): void {\n console.log('🚀 DesignationListComponent.loadDesignations() called');\n this.loading.set(true);\n this.error.set(null);\n\n const requestBody = {\n total: this.totalItems(),\n pageIndex: this.currentPage(),\n pageSize: this.pageSize(),\n query: this.searchTerm()\n };\n console.log('📋 Request body:', requestBody);\n\n if (!this.designationService) {\n console.error('❌ DesignationService is not available');\n this.error.set('Designation service is not available');\n this.loading.set(false);\n return;\n }\n\n this.designationService.getDesignationList(requestBody)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('📥 DesignationListComponent received response:', response);\n if (response?.success) {\n console.log('✅ Response successful, setting designations:', response.data);\n const designationData = response?.data || [];\n this.designations.set(designationData);\n this.totalItems.set(response.total || 0);\n // Update grid data with hierarchical structure\n this.updateGridData(designationData);\n } else {\n console.error('❌ Response was not successful:', response);\n this.error.set('Failed to load designations');\n }\n },\n error: (err) => {\n console.error('❌ DesignationListComponent error:', err);\n this.error.set(err.message || 'An error occurred while loading designations');\n },\n complete: () => {\n console.log('DesignationListComponent loadDesignations completed');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Load departments from service\n */\n loadDepartments(): void {\n console.log('🚀 DesignationListComponent.loadDepartments() called');\n\n if (!this.departmentService) {\n console.error('❌ DepartmentService is not available');\n return;\n }\n\n const requestBody = {\n total: 0,\n pageIndex: 1,\n pageSize: 1000, // Load all departments\n query: ''\n };\n\n this.departmentService.getDepartmentList(requestBody)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('📥 DesignationListComponent received departments response:', response);\n if (response?.success) {\n console.log('✅ Departments loaded successfully:', response.data);\n const departmentData = response?.data || [];\n this.departments.set(departmentData);\n // Update grid data after loading departments\n this.updateGridData(this.designations());\n } else {\n console.error('❌ Failed to load departments:', response);\n }\n },\n error: (err) => {\n console.error('❌ Error loading departments:', err);\n }\n });\n }\n\n /**\n * Load grade levels from service\n */\n loadGradeLevels(): void {\n console.log('🚀 DesignationListComponent.loadGradeLevels() called');\n\n if (!this.gradeLevelService) {\n console.error('❌ GradeLevelService is not available');\n return;\n }\n\n const requestBody = {\n pageIndex: 1,\n pageSize: 100 // Load all grade levels for dropdown\n };\n\n this.gradeLevelService.getGradeLevelList(requestBody)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('📥 Grade levels response:', response);\n if (response?.success) {\n console.log('✅ Grade levels loaded successfully:', response.data);\n const gradeLevelData = response?.data || [];\n this.gradeLevels.set(gradeLevelData);\n // Update grid data if designations are already loaded\n if (this.designations().length > 0) {\n this.updateGridData(this.designations());\n }\n } else {\n console.error('❌ Failed to load grade levels:', response);\n }\n },\n error: (err) => {\n console.error('❌ Error loading grade levels:', err);\n }\n });\n }\n\n /**\n * Build hierarchical tree structure from departments and designations\n */\n private buildHierarchicalData(): HierarchicalNode[] {\n const departments = this.departments();\n const designations = this.designations();\n \n console.log('🔍 Building hierarchical data with:', {\n departments: departments.length,\n designations: designations.length\n });\n \n // First, build department hierarchy\n const departmentNodes = this.buildDepartmentHierarchy(departments);\n \n // Then, add designations under their respective departments\n this.addDesignationsToDepartments(departmentNodes, designations);\n \n // Add orphaned designations at root level\n const orphanedDesignations = designations.filter(designation => \n !departments.some(dept => dept._id === designation.sydsg_department_id_sydpt)\n );\n \n console.log(`🏷️ Found ${orphanedDesignations.length} orphaned designations`);\n \n orphanedDesignations.forEach(designation => {\n console.log(`👔 Adding orphaned designation: ${designation.sydsg_name}`);\n \n const designationNode: HierarchicalNode = {\n _id: designation._id || '',\n name: designation.sydsg_name || '',\n code: designation.sydsg_code || '',\n description: designation.sydsg_description || '',\n type: 'designation',\n level: 0,\n expanded: false,\n hasChildren: false,\n children: [],\n status: designation.sydsg_isactive ?? true,\n grade_level: this.getGradeLevelName(designation.sydsg_grade_level_id_sydsgl || ''),\n parentId: null\n };\n \n departmentNodes.push(designationNode);\n });\n \n console.log('✅ Final hierarchical data:', departmentNodes);\n return departmentNodes;\n }\n\n /**\n * Build department hierarchy with parent-child relationships\n */\n private buildDepartmentHierarchy(departments: ICoreSydept[]): HierarchicalNode[] {\n const departmentMap = new Map<string, HierarchicalNode>();\n const rootDepartments: HierarchicalNode[] = [];\n \n // First pass: create all department nodes\n departments.forEach(department => {\n console.log(`🏢 Creating department node: ${department.sydept_name} (${department._id})`);\n \n const departmentNode: HierarchicalNode = {\n _id: `dept_${department._id || ''}`,\n name: department.sydept_name || '',\n code: department.sydept_code || '',\n description: department.sydept_description || '',\n type: 'department',\n level: 0, // Will be updated based on hierarchy\n expanded: true,\n hasChildren: false,\n children: [],\n status: department.sydept_isactive ?? true,\n grade_level: 'N/A',\n parentId: department.sydept_department_id_sydept ? `dept_${department.sydept_department_id_sydept}` : null\n };\n \n departmentMap.set(departmentNode._id, departmentNode);\n });\n \n // Second pass: build parent-child relationships\n departments.forEach(department => {\n const departmentNode = departmentMap.get(`dept_${department._id || ''}`);\n if (!departmentNode) return;\n \n if (department.sydept_department_id_sydept) {\n // This department has a parent\n const parentNode = departmentMap.get(`dept_${department.sydept_department_id_sydept}`);\n if (parentNode) {\n parentNode.children.push(departmentNode);\n parentNode.hasChildren = true;\n departmentNode.level = parentNode.level + 1;\n console.log(`📁 Added ${department.sydept_name} as child of ${parentNode.name} (level ${departmentNode.level})`);\n } else {\n // Parent not found, treat as root\n rootDepartments.push(departmentNode);\n console.log(`🏢 Added ${department.sydept_name} as root (parent not found)`);\n }\n } else {\n // This is a root department\n rootDepartments.push(departmentNode);\n console.log(`🏢 Added ${department.sydept_name} as root department`);\n }\n });\n \n console.log(`✅ Built department hierarchy with ${rootDepartments.length} root departments`);\n return rootDepartments;\n }\n\n /**\n * Add designations to their respective departments in the hierarchy\n */\n private addDesignationsToDepartments(departmentNodes: HierarchicalNode[], designations: ICoreSydsg[]): void {\n const addDesignationsToNode = (node: HierarchicalNode) => {\n // Find designations for this department\n const departmentId = node._id.replace('dept_', '');\n const departmentDesignations = designations.filter(designation => \n designation.sydsg_department_id_sydpt === departmentId\n );\n \n console.log(`📋 Found ${departmentDesignations.length} designations for department ${node.name}`);\n \n if (departmentDesignations.length > 0) {\n node.hasChildren = true;\n \n // Add designations as children\n departmentDesignations.forEach(designation => {\n console.log(`👔 Adding designation: ${designation.sydsg_name} under ${node.name}`);\n \n const designationNode: HierarchicalNode = {\n _id: designation._id || '',\n name: designation.sydsg_name || '',\n code: designation.sydsg_code || '',\n description: designation.sydsg_description || '',\n type: 'designation',\n level: node.level + 1,\n expanded: false,\n hasChildren: false,\n children: [],\n status: designation.sydsg_isactive ?? true,\n grade_level: this.getGradeLevelName(designation.sydsg_grade_level_id_sydsgl || ''),\n parentId: node._id\n };\n \n node.children.push(designationNode);\n });\n }\n \n // Recursively process child departments\n node.children.forEach(child => {\n if (child.type === 'department') {\n addDesignationsToNode(child);\n }\n });\n };\n \n // Process all root departments\n departmentNodes.forEach(node => {\n if (node.type === 'department') {\n addDesignationsToNode(node);\n }\n });\n }\n\n /**\n * Get grade level name by ID\n */\n private getGradeLevelName(gradeLevelId: string): string {\n console.log('🔍 getGradeLevelName called with ID:', gradeLevelId);\n console.log('📚 Available grade levels:', this.gradeLevels());\n \n const gradeLevel = this.gradeLevels().find(gl => gl._id === gradeLevelId);\n console.log('🎯 Found grade level:', gradeLevel);\n \n const result = gradeLevel ? (gradeLevel.sydsgl_name || 'N/A') : 'N/A';\n console.log('✅ Returning grade level name:', result);\n return result;\n }\n\n /**\n * Update grid data with hierarchical structure\n */\n private updateGridData(designations: ICoreSydsg[]): void {\n console.log('🔄 updateGridData called with:', designations);\n console.log('📚 Current grade levels:', this.gradeLevels());\n console.log('🏢 Current departments:', this.departments());\n \n const hierarchicalData = this.buildHierarchicalData();\n \n // Flatten the hierarchical data for the grid component\n const flattenedData = this.flattenHierarchicalData(hierarchicalData);\n \n console.log('📊 Flattened data for grid:', flattenedData);\n \n this.gridConfig.update(config => {\n const newConfig = {\n ...config,\n data: flattenedData\n };\n console.log('⚙️ Updated grid config with flattened data:', flattenedData);\n return newConfig;\n });\n }\n\n /**\n * Flatten hierarchical data for grid display\n */\n private flattenHierarchicalData(nodes: HierarchicalNode[]): HierarchicalNode[] {\n const flattened: HierarchicalNode[] = [];\n \n const flattenNode = (node: HierarchicalNode) => {\n flattened.push(node);\n if (node.children && node.children.length > 0) {\n node.children.forEach(child => flattenNode(child));\n }\n };\n \n nodes.forEach(node => flattenNode(node));\n return flattened;\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ICoreSydsg>): void {\n console.log('onGridEvent', event);\n switch (event.type) {\n case 'search':\n this.searchTerm.set(event.data as string);\n this.currentPage.set(1);\n this.loadDesignations();\n break;\n case 'pageChange': {\n const pageData = event.data as { page: number; pageSize: number };\n if (pageData) {\n this.currentPage.set(pageData.page);\n this.pageSize.set(pageData.pageSize);\n this.loadDesignations();\n } else {\n const page = event.data as number;\n if (page) {\n this.currentPage.set(page);\n this.loadDesignations();\n }\n }\n break;\n }\n case 'refresh':\n this.onDesignationRefresh();\n break;\n case 'rowClick':\n this.onDesignationRowClick(event.data as ICoreSydsg);\n break;\n case 'action':\n if (event.action?.key === 'edit') {\n this.editDesignation(event.data as string);\n } else if (event.action?.key === 'toggle') {\n this.toggleDesignationStatus(event.data as string);\n } else if (event.action?.key === 'delete') {\n this.deleteDesignation(event.data as string);\n }\n break;\n }\n }\n\n /**\n * Handle designation refresh\n */\n onDesignationRefresh(): void {\n this.loadDesignations();\n }\n\n /**\n * Handle designation row click\n */\n onDesignationRowClick(designation: ICoreSydsg): void {\n this.editDesignation(designation._id || '');\n }\n\n /**\n * Navigate to edit designation form\n */\n editDesignation(itemId: string): void {\n console.log('🔵 editDesignation called with:', itemId);\n this.isEditMode.set(true);\n this.getDesignationById(itemId);\n }\n\n /**\n * Get designation by ID using the API\n */\n getDesignationById(itemId: string): void {\n console.log('🔵 getDesignationById called with:', itemId);\n this.loading.set(true);\n\n this.designationService.getDesignationById(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Designation retrieved successfully:', response.data);\n let designation: ICoreSydsg | null = null;\n designation = response.data || null;\n\n this.retrievedDesignation.set(designation);\n\n if (this.isEditMode() && designation) {\n this.populateFormForEdit(designation);\n }\n } else {\n this.error.set('Failed to retrieve designation');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while retrieving the designation');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Populate form with designation data for editing\n */\n populateFormForEdit(designation: ICoreSydsg): void {\n console.log('🔵 populateFormForEdit called with:', designation);\n\n this.quickAddForm.patchValue({\n sydsg_name: designation.sydsg_name || '',\n sydsg_code: designation.sydsg_code || '',\n sydsg_description: designation.sydsg_description || '',\n sydsg_prent_id_desg: designation.sydsg_prent_id_desg || '',\n sydsg_department_id_sydpt: designation.sydsg_department_id_sydpt || '',\n sydsg_grade_level_id_sydsgl: designation.sydsg_grade_level_id_sydsgl || '',\n sydsg_isactive: designation.sydsg_isactive ?? true,\n desg_entity_id_syen: designation.desg_entity_id_syen || ''\n });\n\n if (designation.sydsg_prent_id_desg) {\n const parentDesignation = this.designations().find(item => item._id === designation.sydsg_prent_id_desg);\n if (parentDesignation) {\n this.selectedParentDesignation.set(parentDesignation);\n }\n }\n\n if (designation.sydsg_department_id_sydpt) {\n const parentDepartment = this.departments().find(item => item._id === designation.sydsg_department_id_sydpt);\n if (parentDepartment) {\n this.selectedParentDepartment.set(parentDepartment);\n }\n }\n\n console.log('✅ Form populated for editing:', this.quickAddForm.value);\n }\n\n /**\n * Delete designation\n */\n deleteDesignation(itemId: string): void {\n console.log('🔵 deleteDesignation called with:', itemId);\n if (confirm('Are you sure you want to delete this designation?')) {\n this.loading.set(true);\n\n this.designationService.deleteDesignation(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadDesignations();\n } else {\n this.error.set('Failed to delete designation');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while deleting the designation');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n }\n\n /**\n * Toggle designation status\n */\n toggleDesignationStatus(itemId: string): void {\n console.log('🔵 toggleDesignationStatus called with:', itemId);\n this.loading.set(true);\n\n this.designationService.toggleDesignationStatus(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadDesignations();\n } else {\n this.error.set('Failed to toggle designation status');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while toggling status');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Quick add or update designation using reactive form\n */\n quickAddDesignation() {\n if (this.quickAddForm.invalid) {\n console.log('❌ Form is invalid:', this.quickAddForm.errors);\n return;\n }\n\n const formValue = this.quickAddForm.value;\n\n // Create payload according to MDesignationInsertUpdatePayload model\n const designation: Partial<ICoreSydsg> = {\n _id: this.retrievedDesignation()?._id || '',\n sydsg_name: formValue.sydsg_name,\n sydsg_code: formValue.sydsg_code,\n sydsg_description: formValue.sydsg_description || '',\n sydsg_prent_id_desg: formValue.sydsg_prent_id_desg || undefined,\n sydsg_department_id_sydpt: formValue.sydsg_department_id_sydpt,\n sydsg_grade_level_id_sydsgl: formValue.sydsg_grade_level_id_sydsgl,\n sydsg_isactive: formValue.sydsg_isactive,\n desg_entity_id_syen: formValue.desg_entity_id_syen\n };\n\n // Validate required fields according to model\n if (!designation.sydsg_name || !designation.sydsg_code || !designation.sydsg_department_id_sydpt || \n !designation.sydsg_grade_level_id_sydsgl || !designation.desg_entity_id_syen) {\n this.error.set('Please fill in all required fields');\n return;\n }\n\n if (this.isEditMode() && this.retrievedDesignation()) {\n const itemId = this.retrievedDesignation()?._id;\n if (itemId) {\n console.log('🔵 Updating designation:', itemId, designation);\n this.designationService.updateDesignation(itemId, designation).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Designation updated successfully');\n this.resetQuickAddForm();\n this.isEditMode.set(false);\n this.retrievedDesignation.set(null);\n this.loadDesignations();\n } else {\n this.error.set(response.message || 'Failed to update designation');\n }\n },\n error: (err) => {\n console.error('❌ Error updating designation:', err);\n this.error.set(err.message || 'Failed to update designation');\n }\n });\n }\n } else {\n console.log('🔵 Creating new designation:', designation);\n this.designationService.createDesignation(designation).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Designation created successfully');\n this.resetQuickAddForm();\n this.loadDesignations();\n } else {\n this.error.set(response.message || 'Failed to create designation');\n }\n },\n error: (err) => {\n console.error('❌ Error creating designation:', err);\n this.error.set(err.message || 'Failed to create designation');\n }\n });\n }\n }\n\n /**\n * Reset the quick add form to default values\n */\n resetQuickAddForm(): void {\n this.selectedParentDesignation.set(null);\n this.selectedParentDepartment.set(null);\n this.isEditMode.set(false);\n this.retrievedDesignation.set(null);\n\n this.quickAddForm.reset({\n sydsg_name: '',\n sydsg_code: '',\n sydsg_description: '',\n sydsg_prent_id_desg: '',\n sydsg_department_id_sydpt: '',\n sydsg_grade_level_id_sydsgl: '',\n sydsg_isactive: true,\n desg_entity_id_syen: this.appState.getActiveEntityId() || ''\n });\n\n // Clear any previous errors\n this.error.set(null);\n }\n\n /**\n * Handle adding a child designation\n */\n onAddChild(parentItem: ICoreSydsg): void {\n console.log('🔵 onAddChild called with:', parentItem);\n console.log('🔵 Parent name:', parentItem.sydsg_name);\n\n // Clear edit mode and retrieved item when adding a child\n this.isEditMode.set(false);\n this.retrievedDesignation.set(null);\n\n // Set the selected parent item first using signal\n this.selectedParentDesignation.set(parentItem);\n console.log('🔵 selectedParentDesignation set to:', this.selectedParentDesignation());\n\n // Update form with parent context (don't call resetQuickAddForm as it clears the parent)\n this.quickAddForm.patchValue({\n sydsg_name: '',\n sydsg_code: '',\n sydsg_description: '',\n sydsg_prent_id_desg: parentItem._id,\n sydsg_department_id_sydpt: parentItem.sydsg_department_id_sydpt || '', // Inherit department from parent\n sydsg_grade_level_id_sydsgl: '',\n sydsg_isactive: true,\n desg_entity_id_syen: this.appState.getActiveEntityId() || ''\n });\n\n // If parent has a department, set it as selected\n if (parentItem.sydsg_department_id_sydpt) {\n const parentDepartment = this.departments().find(d => d._id === parentItem.sydsg_department_id_sydpt);\n if (parentDepartment) {\n this.selectedParentDepartment.set(parentDepartment);\n }\n }\n\n console.log('🔵 Form updated, parent should be visible:', this.selectedParentDesignation()?.sydsg_name);\n }\n\n /**\n * Clear selected parent designation\n */\n clearSelectedParent() {\n this.selectedParentDesignation.set(null);\n this.quickAddForm.patchValue({\n sydsg_prent_id_desg: ''\n });\n }\n\n /**\n * Clear selected parent department\n */\n clearSelectedParentDepartment() {\n this.selectedParentDepartment.set(null);\n this.quickAddForm.patchValue({\n sydsg_department_id_sydpt: ''\n });\n }\n\n /**\n * Handle department selection\n */\n onDepartmentSelect(department: ICoreSydept): void {\n console.log('🔵 onDepartmentSelect called with:', department);\n this.selectedParentDepartment.set(department);\n this.quickAddForm.patchValue({\n sydsg_department_id_sydpt: department._id\n });\n }\n\n /**\n * Handle click outside dropdown\n */\n private handleClickOutside(event: Event): void {\n const target = event.target as HTMLElement;\n\n if (!target?.closest('[data-dropdown]') && !target?.closest('[data-action=\"more-actions\"]')) {\n document.querySelectorAll('[data-dropdown]').forEach((el: Element) => {\n const dropdown = el as HTMLElement;\n dropdown.classList.add('tw-hidden');\n });\n\n document.querySelectorAll('[data-action=\"more-actions\"]').forEach((el: Element) => {\n const button = el as HTMLElement;\n button.setAttribute('aria-expanded', 'false');\n });\n }\n }\n\n /**\n * Handle dropdown action clicks\n */\n private handleDropdownAction(event: Event): void {\n const target = event.target as HTMLElement;\n const actionButton = target.closest('[data-action]') as HTMLElement;\n\n if (actionButton) {\n const action = actionButton.getAttribute('data-action');\n const itemId = actionButton.getAttribute('data-item-id');\n\n if (action && itemId) {\n event.preventDefault();\n event.stopPropagation();\n\n const dropdown = actionButton.closest('[data-dropdown]') as HTMLElement;\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n switch (action) {\n case 'edit':\n this.editDesignation(itemId);\n break;\n case 'toggle':\n this.toggleDesignationStatus(itemId);\n break;\n case 'delete':\n this.deleteDesignation(itemId);\n break;\n }\n }\n }\n }\n\n /**\n * Toggle dropdown visibility\n */\n toggleDropdown(itemId: string) {\n document.querySelectorAll('.dropdown-menu').forEach(menu => {\n if (menu.getAttribute('data-dropdown') !== itemId) {\n menu.classList.add('tw-hidden');\n }\n });\n\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.toggle('tw-hidden');\n }\n }\n\n /**\n * Handle designation action clicks\n */\n handleDesignationAction(action: string, itemId: string) {\n const item = this.designations().find(item => item._id === itemId);\n if (!item) return;\n\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n switch (action) {\n case 'edit':\n this.editDesignation(itemId);\n break;\n case 'toggle':\n this.toggleDesignationStatus(itemId);\n break;\n case 'delete':\n this.deleteDesignation(itemId);\n break;\n }\n }\n\n /**\n * Get status display\n */\n getStatusDisplay(isActive: boolean): string {\n return isActive ? 'Active' : 'Inactive';\n }\n\n /**\n * Get status class for styling\n */\n getStatusClass(isActive: boolean): string {\n return isActive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800';\n }\n\n /**\n * Generate dropdown items for designation actions\n */\n getDropdownItems(row: HierarchicalNode): DropdownItem[] {\n // Handle hierarchical data structure\n if (row.type === 'department') {\n return [\n {\n id: 'addDesignation',\n label: 'Add Designation',\n icon: 'add',\n iconColor: 'tw-text-blue-400',\n textColor: 'tw-text-blue-600',\n hoverBgColor: 'hover:tw-bg-blue-50'\n }\n ];\n } else {\n // For designations\n return [\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'addChild',\n label: 'Add Child',\n icon: 'add',\n iconColor: 'tw-text-blue-400',\n textColor: 'tw-text-blue-600',\n hoverBgColor: 'hover:tw-bg-blue-50'\n },\n {\n id: 'toggle',\n label: row.status ? 'Deactivate' : 'Activate',\n icon: 'power_settings_new',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n iconColor: 'tw-text-red-400',\n textColor: 'tw-text-red-600',\n hoverBgColor: 'hover:tw-bg-red-50'\n }\n ];\n }\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, row: HierarchicalNode): void {\n console.log('🔵 onDropdownItemClick called with:', item, row);\n\n switch (item.id) {\n case 'edit':\n if (row.type === 'designation') {\n this.editDesignation(row._id);\n }\n break;\n case 'addChild':\n if (row.type === 'designation') {\n // Find the original designation object\n const designation = this.designations().find(d => d._id === row._id);\n if (designation) {\n this.onAddChild(designation);\n }\n }\n break;\n case 'addDesignation':\n if (row.type === 'department') {\n // Extract department ID from the prefixed ID\n const departmentId = row._id.replace('dept_', '');\n const department = this.departments().find(d => d._id === departmentId);\n if (department) {\n console.log('🔵 Adding designation to department:', department.sydept_name);\n this.onDepartmentSelect(department);\n // Reset form to add mode\n this.isEditMode.set(false);\n this.retrievedDesignation.set(null);\n this.selectedParentDesignation.set(null);\n this.resetQuickAddForm();\n }\n }\n break;\n case 'toggle':\n if (row.type === 'designation') {\n this.toggleDesignationStatus(row._id);\n }\n break;\n case 'delete':\n if (row.type === 'designation') {\n this.deleteDesignation(row._id);\n }\n break;\n default:\n console.log('🔵 Unknown action:', item.id);\n }\n\n this.closeAllDropdowns();\n }\n\n /**\n * Close all dropdowns\n */\n private closeAllDropdowns(): void {\n const event = new MouseEvent('click', { bubbles: true });\n document.dispatchEvent(event);\n }\n\n /**\n * Track by function for ngFor\n */\n trackByItemId(index: number, item: ICoreSydsg): string {\n return item._id || '';\n }\n} ","<!-- Designation List Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Quick Add Form Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Designation' : 'Quick Add Designation' }}</h6>\n </div>\n @if (selectedParentDesignation()) {\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child under:' }}</span>\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ selectedParentDesignation()?.sydsg_name }}</span>\n </div>\n <button \n cideEleButton \n variant=\"ghost\" \n size=\"xs\" \n type=\"button\" \n (click)=\"clearSelectedParent()\" \n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\n <svg class=\"tw-w-4 tw-h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"/>\n </svg>\n </button>\n </div>\n }\n @if (selectedParentDepartment()) {\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-green-50 tw-border tw-border-green-200 tw-px-4 tw-py-1 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-green-600 tw-w-4 tw-h-4\">business</cide-ele-icon>\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <span class=\"tw-text-sm tw-text-green-600 tw-font-medium\">{{ isEditMode() ? 'Department:' : 'Department:' }}</span>\n <span class=\"tw-text-sm tw-text-green-800 tw-font-semibold\">{{ selectedParentDepartment()?.sydept_name }}</span>\n </div>\n <button \n cideEleButton \n variant=\"ghost\" \n size=\"xs\" \n type=\"button\" \n (click)=\"clearSelectedParentDepartment()\" \n class=\"tw-text-green-400 hover:tw-text-green-600\">\n <svg class=\"tw-w-4 tw-h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"/>\n </svg>\n </button>\n </div>\n }\n </div>\n \n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddDesignation()\">\n <!-- First Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-5 tw-gap-3 tw-mb-3\">\n <!-- Designation Name -->\n <div>\n <cide-ele-input \n id=\"sydsg_name\" \n label=\"Name*\" \n formControlName=\"sydsg_name\"\n placeholder=\"Designation name\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Designation Code -->\n <div>\n <cide-ele-input \n id=\"sydsg_code\" \n label=\"Code*\" \n formControlName=\"sydsg_code\"\n placeholder=\"DESG001\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Grade Level -->\n <div>\n <cide-ele-select \n id=\"sydsg_grade_level_id_sydsgl\"\n label=\"Grade Level*\" \n [options]=\"gradeLevelOptions()\" \n formControlName=\"sydsg_grade_level_id_sydsgl\"\n placeholder=\"Select grade level\"\n size=\"sm\">\n </cide-ele-select>\n </div>\n \n <!-- Department -->\n <div>\n <cide-ele-select \n id=\"sydsg_department_id_sydpt\"\n label=\"Department*\" \n [options]=\"departmentOptions()\" \n formControlName=\"sydsg_department_id_sydpt\"\n placeholder=\"Select department\"\n size=\"sm\">\n </cide-ele-select>\n </div>\n \n <!-- Active Status -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <cide-ele-input \n id=\"sydsg_isactive\"\n type=\"checkbox\"\n label=\"Active\"\n formControlName=\"sydsg_isactive\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n \n <!-- Second Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\n <!-- Description -->\n <div>\n <cide-ele-textarea \n id=\"sydsg_description\" \n label=\"Description\" \n formControlName=\"sydsg_description\"\n placeholder=\"Designation description\"\n rows=\"2\"\n size=\"sm\">\n </cide-ele-textarea>\n </div>\n \n <!-- Entity ID (Hidden) -->\n <div class=\"tw-hidden\">\n <cide-ele-input \n id=\"desg_entity_id_syen\" \n label=\"Entity ID*\" \n formControlName=\"desg_entity_id_syen\"\n placeholder=\"Entity ID\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <div class=\"tw-flex tw-space-x-2\">\n <button \n cideEleButton \n variant=\"primary\" \n size=\"sm\" \n type=\"submit\"\n [disabled]=\"quickAddForm.invalid\"\n class=\"tw-px-2 tw-py-1 tw-w-20\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n {{ isEditMode() ? 'Update' : 'Add' }}\n </button>\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\"\n (click)=\"resetQuickAddForm()\"\n class=\"tw-px-2 tw-py-1 tw-w-16\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\n Reset\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n\n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">work</cide-ele-icon>\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Designation Management</h5>\n </div>\n\n <!-- Actions -->\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Search functionality is handled by the data grid -->\n </div>\n </div>\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n \n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n \n <cide-ele-data-grid \n [config]=\"gridConfig()\" \n [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\"\n [serverSidePagination]=\"true\" \n [totalServerItems]=\"totalItems()\" \n [currentServerPage]=\"currentPage()\"\n [currentServerPageSize]=\"pageSize()\" \n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Designation Details Renderer Template -->\n<ng-template #designationDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\n <!-- Dynamic Icon based on type -->\n <div class=\"tw-flex-shrink-0\">\n <cide-ele-icon \n [class]=\"row.type === 'department' ? 'tw-text-green-500' : 'tw-text-blue-500'\" \n size=\"xs\">\n {{ row.type === 'department' ? 'business' : 'work' }}\n </cide-ele-icon>\n </div>\n \n <!-- Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \n [title]=\"row.name\">\n {{ row.name || 'Untitled' }}\n </div>\n @if (row.type === 'department') {\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\n Department\n </span>\n }\n </div>\n @if (row.description) {\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \n [title]=\"row.description\">\n {{ row.description }}\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- Designation Status Renderer Template -->\n<ng-template #designationStatusRendererTemplate let-row=\"row\" let-value=\"value\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\n [ngClass]=\"getStatusClass(row.status)\">\n {{ getStatusDisplay(row.status) }}\n </span>\n</ng-template>\n\n<!-- Actions Dropdown Renderer Template -->\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown \n [items]=\"getDropdownItems(row)\"\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template> ","// Designation Management Components\r\nexport * from './components/designation-list/designation-list.component';\r\n\r\n// Designation Management Services\r\nexport * from './services/designation-management.service'; ","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Validators, ReactiveFormsModule, NonNullableFormBuilder, FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ICoreSydsgl } from 'cloud-ide-lms-model';\nimport { GradeLevelManagementService } from '../../services/grade-level-management.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideEleDataGridComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\n\n@Component({\n selector: 'cide-core-app-grade-level-list',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n CideInputComponent,\n CideSelectComponent,\n CideTextareaComponent,\n CideIconComponent,\n CideEleDropdownComponent\n ],\n templateUrl: './grade-level-list.component.html',\n styleUrls: []\n})\nexport class GradeLevelListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private gradeLevelService = inject(GradeLevelManagementService);\n private appState = inject(AppStateHelperService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n dragHandleRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('dragHandleRendererTemplate');\n gradeLevelDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('gradeLevelDetailsRendererTemplate');\n gradeLevelStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('gradeLevelStatusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('actionsDropdownRendererTemplate');\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n gradeLevels = signal<ICoreSydsgl[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Retrieved grade level data\n retrievedGradeLevel = signal<ICoreSydsgl | null>(null);\n\n // Edit mode flag\n isEditMode = signal(false);\n\n // Drag order management\n originalOrder = signal<ICoreSydsgl[]>([]);\n hasOrderChanged = signal(false);\n\n // Server-side pagination state\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n\n // Modern reactive form with typed controls\n quickAddForm = this.fb.group({\n sydsgl_name: this.fb.control('', [Validators.required, Validators.minLength(1), Validators.maxLength(20)]),\n sydsgl_description: this.fb.control('', [Validators.maxLength(400)]),\n sydsgl_order: this.fb.control(1, [Validators.required, Validators.min(1), Validators.max(100)]),\n sydsgl_isactive: this.fb.control(true, [Validators.required]),\n sydsgl_entity_id_syen: this.fb.control(this.appState.getActiveEntityId() || '', [Validators.required])\n });\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ICoreSydsgl>>({\n id: 'grade-level-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'dragHandle',\n header: '',\n type: 'custom',\n width: '40px',\n truncate: false,\n align: 'center',\n renderer: 'dragHandleRenderer'\n },\n {\n key: 'details',\n header: 'Grade Level',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'gradeLevelDetailsRenderer'\n },\n {\n key: 'sydsgl_isactive',\n header: 'Status',\n type: 'custom',\n width: '100px',\n truncate: false,\n align: 'center',\n renderer: 'gradeLevelStatusRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '60px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n dragDrop: {\n enabled: true,\n orderField: 'sydsgl_order',\n dragClass: 'tw-opacity-50 tw-bg-blue-50',\n dropClass: 'tw-bg-green-50'\n },\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search grade levels...',\n searchableColumns: ['sydsgl_name', 'sydsgl_description'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none',\n onRefresh: 'onGradeLevelRefresh'\n });\n\n // Template renderers using Angular best practices\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n dragHandleRenderer: this.dragHandleRendererTemplate(),\n gradeLevelDetailsRenderer: this.gradeLevelDetailsRendererTemplate(),\n gradeLevelStatusRenderer: this.gradeLevelStatusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\n\n /**\n * Get template renderers for data grid\n */\n getTemplateRenderers(): Record<string, TemplateRef<TemplateContext>> {\n return this.templateRenderers();\n }\n\n // Mixed renderers (templates + string functions)\n customRenderers = computed(() => ({\n ...this.templateRenderers()\n }));\n\n /**\n * Get custom renderers adapted for current data grid compatibility\n */\n getCustomRenderers(): Record<string, (value: unknown, row: ICoreSydsgl) => string> {\n return {};\n }\n\n // Action handlers for grid actions\n actionHandlers = {\n onEditGradeLevel: (row: ICoreSydsgl) => this.editGradeLevel(row._id || ''),\n onToggleGradeLevel: (row: ICoreSydsgl) => this.toggleGradeLevelStatus(row._id || ''),\n onDeleteGradeLevel: (row: ICoreSydsgl) => this.deleteGradeLevel(row._id || ''),\n onGradeLevelRowClick: (row: ICoreSydsgl) => this.onGradeLevelRowClick(row),\n onGradeLevelRefresh: () => this.onGradeLevelRefresh(),\n resetOrder: () => this.resetDragOrder(),\n saveOrder: () => this.saveGradeLevelOrder()\n };\n\n // Computed properties\n filteredItems = computed(() => {\n const items = this.gradeLevels();\n const search = this.searchTerm()?.toLowerCase();\n\n if (!search) return items;\n\n return items.filter(item => {\n return item.sydsgl_name?.toLowerCase().includes(search) ||\n item.sydsgl_description?.toLowerCase().includes(search);\n });\n });\n\n hasSelection = computed(() => this.selectedItems().length > 0);\n\n // Pagination computed properties\n totalPages = computed(() => Math.ceil(this.totalItems() / this.pageSize()));\n hasNextPage = computed(() => this.currentPage() < this.totalPages());\n hasPreviousPage = computed(() => this.currentPage() > 1);\n\n // Computed property for next order\n nextOrder = computed(() => this.calculateNextOrder());\n\n // Modern constructor with effects for initialization\n constructor() {\n this.initializeComponent();\n this.destroyRef.onDestroy(() => {\n this.cleanupEventListeners();\n });\n }\n\n /**\n * Initialize component with modern patterns\n */\n private initializeComponent(): void {\n console.log('GradeLevelListComponent initialized with modern Angular patterns');\n this.loadGradeLevels();\n this.setupEventListeners();\n this.exposeGlobalFunctions();\n }\n\n /**\n * Setup event listeners for dropdown interactions\n */\n private setupEventListeners(): void {\n document.addEventListener('click', this.handleClickOutside.bind(this));\n document.addEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Cleanup event listeners\n */\n private cleanupEventListeners(): void {\n document.removeEventListener('click', this.handleClickOutside.bind(this));\n document.removeEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Expose global functions for dropdown interactions\n */\n private exposeGlobalFunctions(): void {\n if (typeof window !== 'undefined') {\n (window as unknown as { toggleDropdown: (id: string) => void }).toggleDropdown = this.toggleDropdown.bind(this);\n (window as unknown as { handleGradeLevelAction: (action: string, id: string) => void }).handleGradeLevelAction = this.handleGradeLevelAction.bind(this);\n }\n }\n\n /**\n * Load grade levels from service\n */\n loadGradeLevels(): void {\n console.log('🚀 GradeLevelListComponent.loadGradeLevels() called');\n this.loading.set(true);\n this.error.set(null);\n\n const requestBody = {\n total: this.totalItems(),\n pageIndex: this.currentPage(),\n pageSize: this.pageSize(),\n query: this.searchTerm()\n };\n console.log('📋 Request body:', requestBody);\n\n if (!this.gradeLevelService) {\n console.error('❌ GradeLevelService is not available');\n this.error.set('Grade level service is not available');\n this.loading.set(false);\n return;\n }\n\n this.gradeLevelService.getGradeLevelList(requestBody)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('📥 GradeLevelListComponent received response:', response);\n if (response?.success) {\n console.log('✅ Response successful, setting grade levels:', response.data);\n const gradeLevelData = response?.data || [];\n this.gradeLevels.set(gradeLevelData);\n this.totalItems.set(response.total || 0);\n this.updateGridData(gradeLevelData);\n \n // Update the order field in the form if not in edit mode\n if (!this.isEditMode()) {\n const nextOrder = this.calculateNextOrder();\n this.quickAddForm.patchValue({ sydsgl_order: nextOrder });\n }\n } else {\n console.error('❌ Response was not successful:', response);\n this.error.set('Failed to load grade levels');\n }\n },\n error: (err) => {\n console.error('❌ GradeLevelListComponent error:', err);\n this.error.set(err.message || 'An error occurred while loading grade levels');\n },\n complete: () => {\n console.log('GradeLevelListComponent loadGradeLevels completed');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(gradeLevels: ICoreSydsgl[]): void {\n console.log('🔄 updateGridData called with:', gradeLevels);\n \n this.gridConfig.update(config => {\n const newConfig = {\n ...config,\n data: gradeLevels\n };\n console.log('⚙️ Updated grid config with grade levels');\n return newConfig;\n });\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ICoreSydsgl>): void {\n console.log('onGridEvent', event);\n switch (event.type) {\n case 'search':\n this.searchTerm.set(event.data as string);\n this.currentPage.set(1);\n this.loadGradeLevels();\n break;\n case 'pageChange': {\n const pageData = event.data as { page: number; pageSize: number };\n if (pageData) {\n this.currentPage.set(pageData.page);\n this.pageSize.set(pageData.pageSize);\n this.loadGradeLevels();\n } else {\n const page = event.data as number;\n if (page) {\n this.currentPage.set(page);\n this.loadGradeLevels();\n }\n }\n break;\n }\n case 'refresh':\n this.onGradeLevelRefresh();\n break;\n case 'rowClick':\n this.onGradeLevelRowClick(event.data as ICoreSydsgl);\n break;\n case 'rowReorder':\n this.onGradeLevelReorder(event.data as { sourceIndex: number; targetIndex: number; newOrder: ICoreSydsgl[] });\n break;\n case 'action':\n if (event.action?.key === 'edit') {\n this.editGradeLevel(event.data as string);\n } else if (event.action?.key === 'toggle') {\n this.toggleGradeLevelStatus(event.data as string);\n } else if (event.action?.key === 'delete') {\n this.deleteGradeLevel(event.data as string);\n }\n break;\n }\n }\n\n /**\n * Handle grade level refresh\n */\n onGradeLevelRefresh(): void {\n this.loadGradeLevels();\n }\n\n /**\n * Handle grade level reorder via drag and drop\n */\n onGradeLevelReorder(data: { sourceIndex: number; targetIndex: number; newOrder: ICoreSydsgl[] }): void {\n console.log('🔄 Grade level reorder event:', data);\n\n // Save original order if not already saved\n if (this.originalOrder().length === 0) {\n this.originalOrder.set([...this.gradeLevels()]);\n }\n\n // Update the displayed data with new order\n const updatedItems = data.newOrder.map((item, index) => ({\n ...item,\n sydsgl_order: index + 1\n }));\n \n this.gradeLevels.set(updatedItems);\n\n // Mark that order has changed\n this.hasOrderChanged.set(true);\n\n // Update grid data\n this.updateGridDataAfterReorder();\n console.log('Updated gradeLevels:', this.gradeLevels());\n }\n\n /**\n * Update grid data after reordering\n */\n private updateGridDataAfterReorder() {\n const currentConfig = this.gridConfig();\n this.gridConfig.set({\n ...currentConfig,\n data: this.gradeLevels()\n });\n }\n\n /**\n * Save grade level order\n */\n saveGradeLevelOrder() {\n console.log('💾 Saving grade level order...');\n \n // Send updates to the server for each item that changed order\n const promises = this.gradeLevels().map(item => {\n return this.gradeLevelService.updateGradeLevel(item._id || '', {\n sydsgl_order: item.sydsgl_order\n }).toPromise();\n });\n\n // Wait for all updates to complete\n Promise.all(promises)\n .then(() => {\n console.log('✅ All grade level orders updated successfully');\n // Update original order and reset change flag\n this.originalOrder.set([...this.gradeLevels()]);\n this.hasOrderChanged.set(false);\n })\n .catch((error) => {\n console.error('❌ Error updating grade level orders:', error);\n this.error.set('Failed to update grade level order');\n });\n }\n\n /**\n * Reset drag order to original state\n */\n resetDragOrder() {\n console.log('🔄 Resetting drag order to original state');\n\n // Restore the original order\n const originalItems = this.originalOrder();\n if (originalItems.length > 0) {\n this.gradeLevels.set([...originalItems]);\n this.updateGridDataAfterReorder();\n }\n\n // Reset the change flag\n this.hasOrderChanged.set(false);\n\n console.log('✅ Drag order reset successfully');\n }\n\n /**\n * Check if order has changed\n */\n hasOrderChanges(): boolean {\n return this.hasOrderChanged();\n }\n\n /**\n * Handle grade level row click\n */\n onGradeLevelRowClick(gradeLevel: ICoreSydsgl): void {\n this.editGradeLevel(gradeLevel._id || '');\n }\n\n /**\n * Navigate to edit grade level form\n */\n editGradeLevel(itemId: string): void {\n console.log('🔵 editGradeLevel called with:', itemId);\n this.isEditMode.set(true);\n this.getGradeLevelById(itemId);\n }\n\n /**\n * Get grade level by ID using the API\n */\n getGradeLevelById(itemId: string): void {\n console.log('🔵 getGradeLevelById called with:', itemId);\n this.loading.set(true);\n\n this.gradeLevelService.getGradeLevelById(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Grade level retrieved successfully:', response.data);\n let gradeLevel: ICoreSydsgl | null = null;\n gradeLevel = response.data || null;\n\n this.retrievedGradeLevel.set(gradeLevel);\n\n if (this.isEditMode() && gradeLevel) {\n this.populateFormForEdit(gradeLevel);\n }\n } else {\n this.error.set('Failed to retrieve grade level');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while retrieving the grade level');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Populate form with grade level data for editing\n */\n populateFormForEdit(gradeLevel: ICoreSydsgl): void {\n console.log('🔵 populateFormForEdit called with:', gradeLevel);\n\n this.quickAddForm.patchValue({\n sydsgl_name: gradeLevel.sydsgl_name || '',\n sydsgl_description: gradeLevel.sydsgl_description || '',\n sydsgl_order: gradeLevel.sydsgl_order || 1,\n sydsgl_isactive: gradeLevel.sydsgl_isactive ?? true,\n sydsgl_entity_id_syen: gradeLevel.sydsgl_entity_id_syen || ''\n });\n\n console.log('✅ Form populated for editing:', this.quickAddForm.value);\n }\n\n /**\n * Delete grade level\n */\n deleteGradeLevel(itemId: string): void {\n console.log('🔵 deleteGradeLevel called with:', itemId);\n if (confirm('Are you sure you want to delete this grade level?')) {\n this.loading.set(true);\n\n this.gradeLevelService.deleteGradeLevel(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadGradeLevels();\n } else {\n this.error.set('Failed to delete grade level');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while deleting the grade level');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n }\n\n /**\n * Toggle grade level status\n */\n toggleGradeLevelStatus(itemId: string): void {\n console.log('🔵 toggleGradeLevelStatus called with:', itemId);\n this.loading.set(true);\n\n this.gradeLevelService.toggleGradeLevelStatus(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadGradeLevels();\n } else {\n this.error.set('Failed to toggle grade level status');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while toggling status');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Quick add or update grade level using reactive form\n */\n quickAddGradeLevel() {\n if (this.quickAddForm.invalid) return;\n\n const formValue = this.quickAddForm.value;\n\n // For new grade levels, ensure the order is set to the calculated next order\n let order = formValue.sydsgl_order;\n if (!this.isEditMode()) {\n order = this.calculateNextOrder();\n }\n\n const gradeLevel: Partial<ICoreSydsgl> = {\n _id: this.retrievedGradeLevel()?._id || '',\n sydsgl_name: formValue.sydsgl_name,\n sydsgl_description: formValue.sydsgl_description || '',\n sydsgl_order: order,\n sydsgl_isactive: formValue.sydsgl_isactive,\n sydsgl_entity_id_syen: formValue.sydsgl_entity_id_syen\n };\n\n if (this.isEditMode() && this.retrievedGradeLevel()) {\n const itemId = this.retrievedGradeLevel()?._id;\n if (itemId) {\n console.log('🔵 Updating grade level:', itemId);\n this.gradeLevelService.updateGradeLevel(itemId, gradeLevel).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Grade level updated successfully');\n this.resetQuickAddForm();\n this.isEditMode.set(false);\n this.retrievedGradeLevel.set(null);\n this.loadGradeLevels();\n }\n },\n error: () => {\n this.error.set('Failed to update grade level');\n }\n });\n }\n } else {\n console.log('🔵 Creating new grade level');\n this.gradeLevelService.createGradeLevel(gradeLevel).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Grade level created successfully');\n this.resetQuickAddForm();\n this.loadGradeLevels();\n }\n },\n error: () => {\n this.error.set('Failed to create grade level');\n }\n });\n }\n }\n\n /**\n * Calculate the highest order from existing grade levels\n */\n private calculateNextOrder(): number {\n const currentGradeLevels = this.gradeLevels();\n if (currentGradeLevels.length === 0) {\n return 1;\n }\n \n const maxOrder = Math.max(...currentGradeLevels.map(level => level.sydsgl_order || 0));\n return maxOrder + 1;\n }\n\n /**\n * Reset the quick add form to default values\n */\n resetQuickAddForm(): void {\n this.isEditMode.set(false);\n this.retrievedGradeLevel.set(null);\n\n // Calculate the next order automatically\n const nextOrder = this.calculateNextOrder();\n\n this.quickAddForm.reset({\n sydsgl_name: '',\n sydsgl_description: '',\n sydsgl_order: nextOrder,\n sydsgl_isactive: true,\n sydsgl_entity_id_syen: this.appState.getActiveEntityId() || ''\n });\n }\n\n /**\n * Handle click outside dropdown\n */\n private handleClickOutside(event: Event): void {\n const target = event.target as HTMLElement;\n\n if (!target?.closest('[data-dropdown]') && !target?.closest('[data-action=\"more-actions\"]')) {\n document.querySelectorAll('[data-dropdown]').forEach((el: Element) => {\n const dropdown = el as HTMLElement;\n dropdown.classList.add('tw-hidden');\n });\n\n document.querySelectorAll('[data-action=\"more-actions\"]').forEach((el: Element) => {\n const button = el as HTMLElement;\n button.setAttribute('aria-expanded', 'false');\n });\n }\n }\n\n /**\n * Handle dropdown action clicks\n */\n private handleDropdownAction(event: Event): void {\n const target = event.target as HTMLElement;\n const actionButton = target.closest('[data-action]') as HTMLElement;\n\n if (actionButton) {\n const action = actionButton.getAttribute('data-action');\n const itemId = actionButton.getAttribute('data-item-id');\n\n if (action && itemId) {\n event.preventDefault();\n event.stopPropagation();\n\n const dropdown = actionButton.closest('[data-dropdown]') as HTMLElement;\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n switch (action) {\n case 'edit':\n this.editGradeLevel(itemId);\n break;\n case 'toggle':\n this.toggleGradeLevelStatus(itemId);\n break;\n case 'delete':\n this.deleteGradeLevel(itemId);\n break;\n }\n }\n }\n }\n\n /**\n * Toggle dropdown visibility\n */\n toggleDropdown(itemId: string) {\n document.querySelectorAll('.dropdown-menu').forEach(menu => {\n if (menu.getAttribute('data-dropdown') !== itemId) {\n menu.classList.add('tw-hidden');\n }\n });\n\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.toggle('tw-hidden');\n }\n }\n\n /**\n * Handle grade level action clicks\n */\n handleGradeLevelAction(action: string, itemId: string) {\n const item = this.gradeLevels().find(item => item._id === itemId);\n if (!item) return;\n\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n switch (action) {\n case 'edit':\n this.editGradeLevel(itemId);\n break;\n case 'toggle':\n this.toggleGradeLevelStatus(itemId);\n break;\n case 'delete':\n this.deleteGradeLevel(itemId);\n break;\n }\n }\n\n /**\n * Get status display\n */\n getStatusDisplay(isActive: boolean): string {\n return isActive ? 'Active' : 'Inactive';\n }\n\n /**\n * Get status class for styling\n */\n getStatusClass(isActive: boolean): string {\n return isActive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800';\n }\n\n /**\n * Generate dropdown items for grade level actions\n */\n getDropdownItems(row: ICoreSydsgl): DropdownItem[] {\n return [\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'toggle',\n label: row.sydsgl_isactive ? 'Deactivate' : 'Activate',\n icon: 'power_settings_new',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n iconColor: 'tw-text-red-400',\n textColor: 'tw-text-red-600',\n hoverBgColor: 'hover:tw-bg-red-50'\n }\n ];\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, row: ICoreSydsgl): void {\n console.log('🔵 onDropdownItemClick called with:', item, row);\n\n switch (item.id) {\n case 'edit':\n this.editGradeLevel(row._id || '');\n break;\n case 'toggle':\n this.toggleGradeLevelStatus(row._id || '');\n break;\n case 'delete':\n this.deleteGradeLevel(row._id || '');\n break;\n default:\n console.log('🔵 Unknown action:', item.id);\n }\n\n this.closeAllDropdowns();\n }\n\n /**\n * Close all dropdowns\n */\n private closeAllDropdowns(): void {\n const event = new MouseEvent('click', { bubbles: true });\n document.dispatchEvent(event);\n }\n\n /**\n * Track by function for ngFor\n */\n trackByItemId(index: number, item: ICoreSydsgl): string {\n return item._id || '';\n }\n} ","<!-- Grade Level List Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Quick Add Form Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Grade Level' : 'Quick Add Grade Level' }}</h6>\n </div>\n </div>\n \n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddGradeLevel()\">\n <!-- First Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\n <!-- Grade Level Name -->\n <div>\n <cide-ele-input \n id=\"sydsgl_name\" \n label=\"Name*\" \n formControlName=\"sydsgl_name\"\n placeholder=\"Grade level name\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Active Status -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <cide-ele-input \n id=\"sydsgl_isactive\"\n type=\"checkbox\"\n label=\"Active\"\n formControlName=\"sydsgl_isactive\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n \n <!-- Second Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\n <!-- Description -->\n <div>\n <cide-ele-textarea \n id=\"sydsgl_description\" \n label=\"Description\" \n formControlName=\"sydsgl_description\"\n placeholder=\"Grade level description\"\n rows=\"2\"\n size=\"sm\">\n </cide-ele-textarea>\n </div>\n \n <!-- Entity ID (Hidden) -->\n <div class=\"tw-hidden\">\n <cide-ele-input \n id=\"sydsgl_entity_id_syen\" \n label=\"Entity ID*\" \n formControlName=\"sydsgl_entity_id_syen\"\n placeholder=\"Entity ID\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <div class=\"tw-flex tw-space-x-2\">\n <button \n cideEleButton \n variant=\"primary\" \n size=\"sm\" \n type=\"submit\"\n [disabled]=\"quickAddForm.invalid\"\n class=\"tw-px-2 tw-py-1 tw-w-20\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n {{ isEditMode() ? 'Update' : 'Add' }}\n </button>\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\"\n (click)=\"resetQuickAddForm()\"\n class=\"tw-px-2 tw-py-1 tw-w-16\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\n Reset\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n\n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">school</cide-ele-icon>\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Grade Level Management</h5>\n </div>\n\n <!-- Actions -->\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Search functionality is handled by the data grid -->\n </div>\n </div>\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n \n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n \n <cide-ele-data-grid \n [config]=\"gridConfig()\" \n [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\"\n [serverSidePagination]=\"true\" \n [totalServerItems]=\"totalItems()\" \n [currentServerPage]=\"currentPage()\"\n [currentServerPageSize]=\"pageSize()\" \n [dragDropEnabled]=\"true\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Drag Handle Renderer Template -->\n<ng-template #dragHandleRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-justify-center tw-w-full tw-h-full tw-cursor-move drag-handle\">\n <cide-ele-icon \n class=\"tw-text-gray-400 hover:tw-text-gray-600 tw-transition-colors\" \n size=\"xs\">\n drag_indicator\n </cide-ele-icon>\n </div>\n</ng-template>\n\n<!-- Grade Level Details Renderer Template -->\n<ng-template #gradeLevelDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\n <!-- Grade Level Icon -->\n <div class=\"tw-flex-shrink-0\">\n <cide-ele-icon \n class=\"tw-text-gray-400\" \n size=\"xs\">\n school\n </cide-ele-icon>\n </div>\n \n <!-- Grade Level Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \n [title]=\"row.sydsgl_name\">\n {{ row.sydsgl_name || 'Untitled' }}\n </div>\n @if (row.sydsgl_description) {\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \n [title]=\"row.sydsgl_description\">\n {{ row.sydsgl_description }}\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- Grade Level Status Renderer Template -->\n<ng-template #gradeLevelStatusRendererTemplate let-row=\"row\" let-value=\"value\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\n [ngClass]=\"getStatusClass(row.sydsgl_isactive)\">\n {{ getStatusDisplay(row.sydsgl_isactive) }}\n </span>\n</ng-template>\n\n<!-- Actions Dropdown Renderer Template -->\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown \n [items]=\"getDropdownItems(row)\"\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template> ","// Grade Level Management Components\r\nexport * from './components/grade-level-list/grade-level-list.component';\r\n\r\n// Grade Level Management Services\r\nexport * from './services/grade-level-management.service'; ","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\nimport {\r\n cidePath,\r\n coreRoutesUrl,\r\n generateStringFromObject,\r\n hostManagerRoutesUrl,\r\n MSystemPages,\r\n MSystemPagesCheckCodeExistsPayload,\r\n MSystemPagesDeletePayload,\r\n MSystemPagesGetByIdPayload,\r\n MSystemPagesInsertUpdatePayload,\r\n MSystemPagesToggleStatusPayload,\r\n systemPagesByIdControllerResponse,\r\n systemPagesCheckCodeExistsControllerResponse,\r\n systemPagesControllerResponse,\r\n systemPagesDeleteControllerResponse,\r\n systemPagesInsertUpdateControllerResponse,\r\n systemPagesToggleStatusControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PageManagementService {\r\n constructor(private http: HttpClient) { }\r\n\r\n /**\r\n * Get page list from API\r\n */\r\n getPageList(body: MSystemPages): Observable<systemPagesControllerResponse> {\r\n const query = generateStringFromObject(body);\r\n return this.http?.get<systemPagesControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.page, query]))\r\n .pipe(\r\n catchError(error => {\r\n console.error('PageManagementService API error:', error);\r\n return this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Create or update page using single API endpoint\r\n */\r\n createOrUpdatePage(payload: MSystemPagesInsertUpdatePayload): Observable<systemPagesInsertUpdateControllerResponse> {\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.page]);\r\n return this.http.post<systemPagesInsertUpdateControllerResponse>(url, payload)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n\r\n /**\r\n * Get page by ID\r\n */\r\n getPageById(id: string): Observable<systemPagesByIdControllerResponse> {\r\n console.log('Getting page by ID:', id);\r\n const payload: MSystemPagesGetByIdPayload = { sypg_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.page, 'byId', query]);\r\n return this.http.get<systemPagesByIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete page\r\n */\r\n deletePage(id: string): Observable<systemPagesDeleteControllerResponse> {\r\n const payload: MSystemPagesDeletePayload = { sypg_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.page, query]);\r\n return this.http.delete<systemPagesDeleteControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n\r\n\r\n /**\r\n * Toggle page active status\r\n */\r\n togglePageStatus(payload: MSystemPagesToggleStatusPayload): Observable<systemPagesToggleStatusControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.page, query]);\r\n return this.http.put<systemPagesToggleStatusControllerResponse>(url, {})\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Find page by ID using API\r\n */\r\n findPageById(payload: MSystemPagesCheckCodeExistsPayload): Observable<systemPagesCheckCodeExistsControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.page, 'checkCodeExists', query]);\r\n return this.http.get<systemPagesCheckCodeExistsControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Check if page code already exists\r\n */\r\n checkPageCodeExists(payload: MSystemPagesCheckCodeExistsPayload): Observable<boolean> {\r\n return this.findPageById(payload).pipe(\r\n map((response: systemPagesCheckCodeExistsControllerResponse) => response.success || false)\r\n );\r\n }\r\n\r\n\r\n\r\n /**\r\n * Handle errors\r\n */\r\n private handleError(error: unknown): Observable<never> {\r\n let errorMessage = 'An error occurred';\r\n\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n } else if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n\r\n console.error('Page Management Service Error:', errorMessage);\r\n return throwError(() => new Error(errorMessage));\r\n }\r\n} ","import { Component, signal, viewChild, TemplateRef, DestroyRef, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { PageManagementService } from '../../services/page-management.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideEleDataGridComponent, CideIconComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { ICoreSypg, systemPagesControllerResponse, generateStringFromObject } from 'cloud-ide-lms-model';\n\n@Component({\n selector: 'cide-core-app-page-list',\n standalone: true,\n imports: [\n CommonModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n CideIconComponent,\n CideEleDropdownComponent\n ],\n templateUrl: './page-list.component.html'\n})\nexport class PageListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private pageService = inject(PageManagementService);\n private appState = inject(AppStateHelperService);\n private router = inject(Router);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n pageDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('pageDetailsRendererTemplate');\n pageStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('pageStatusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('actionsDropdownRendererTemplate');\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n pages = signal<ICoreSypg[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Pagination signals\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ICoreSypg>>({\n id: 'page-list-grid',\n columns: [\n {\n key: 'details',\n header: 'Page Details',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'pageDetailsRenderer'\n },\n {\n key: 'sypg_page_code',\n header: 'Page Code',\n type: 'text',\n width: '150px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'sypg_isactive',\n header: 'Status',\n type: 'custom',\n width: '100px',\n truncate: false,\n align: 'center',\n renderer: 'pageStatusRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '120px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search pages...',\n searchableColumns: ['sypg_title', 'sypg_desc', 'sypg_page_code'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false\n });\n\n // Action handlers for grid\n actionHandlers = {\n onEdit: (item: ICoreSypg) => this.editPage(item),\n onDelete: (item: ICoreSypg) => this.deletePage(item),\n onToggleStatus: (item: ICoreSypg) => this.togglePageStatus(item),\n onManageThemes: (item: ICoreSypg) => this.manageThemes(item),\n onManageControls: (item: ICoreSypg) => this.manageControls(item)\n };\n\n constructor() {\n this.initializeComponent();\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n this.loadPages();\n }\n\n /**\n * Load pages from API\n */\n private loadPages(): void {\n this.loading.set(true);\n this.error.set(null);\n\n const request = {\n pageIndex: this.currentPage(),\n pageSize: this.pageSize(),\n search: this.searchTerm() || undefined\n };\n\n this.pageService.getPageList(request)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: systemPagesControllerResponse) => {\n if (response.success) {\n this.pages.set(response.data || []);\n this.totalItems.set(response.total || 0);\n this.updateGridData();\n } else {\n this.error.set(response.message || 'Failed to load pages');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error loading pages:', error);\n this.error.set('Failed to load pages. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(): void {\n this.gridConfig.update(config => ({\n ...config,\n data: this.pages()\n }));\n }\n\n /**\n * Get template renderers for grid\n */\n getTemplateRenderers(): Record<string, TemplateRef<TemplateContext>> {\n return {\n pageDetailsRenderer: this.pageDetailsRendererTemplate(),\n pageStatusRenderer: this.pageStatusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n };\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ICoreSypg>): void {\n switch (event.type) {\n case 'pageChange':\n console.log('🔵 Page change event:', event);\n if (event.data && typeof event.data === 'object' && 'page' in event.data && 'pageSize' in event.data) {\n this.currentPage.set(event.data['page'] as number);\n this.pageSize.set(event.data['pageSize'] as number);\n this.loadPages();\n }\n break;\n case 'search':\n if (event.data && typeof event.data === 'string') {\n this.searchTerm.set(event.data);\n this.currentPage.set(1);\n this.loadPages();\n }\n break;\n case 'refresh':\n this.loadPages();\n break;\n case 'action':\n // Handle action events if needed\n console.log('Action event:', event);\n break;\n case 'rowClick':\n // Handle row click events if needed\n console.log('Row click event:', event);\n break;\n case 'sort':\n // Handle sort events if needed\n console.log('Sort event:', event);\n break;\n case 'export':\n // Handle export events if needed\n console.log('Export event:', event);\n break;\n case 'rowReorder':\n // Handle row reorder events if needed\n console.log('Row reorder event:', event);\n break;\n }\n }\n\n /**\n * Navigate to create page\n */\n createPage(): void {\n this.router.navigate(['/control-panel/page-form']);\n }\n\n /**\n * Edit page - navigate to edit page\n */\n editPage(page: ICoreSypg): void {\n const query: string = generateStringFromObject({\n sypg_id: page._id,\n sypg_title: page.sypg_title\n });\n this.router.navigate(['/control-panel/page-form', query]);\n }\n\n /**\n * Delete page\n */\n deletePage(page: ICoreSypg): void {\n if (confirm(`Are you sure you want to delete the page \"${page.sypg_title}\"?`)) {\n this.loading.set(true);\n this.pageService.deletePage(page._id || '')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadPages();\n console.log('✅ Page deleted successfully');\n } else {\n console.error('❌ Failed to delete page:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error deleting page:', error);\n console.error('❌ Failed to delete page. Please try again.');\n this.loading.set(false);\n }\n });\n }\n }\n\n /**\n * Toggle page status\n */\n togglePageStatus(page: ICoreSypg): void {\n this.loading.set(true);\n this.pageService.togglePageStatus({ sypg_id: page._id || '', sypg_isactive: !page.sypg_isactive })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadPages();\n console.log(`✅ Page ${page.sypg_isactive ? 'deactivated' : 'activated'} successfully`);\n } else {\n console.error('❌ Failed to toggle page status:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error toggling page status:', error);\n console.error('❌ Failed to toggle page status. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Manage themes for a page\n */\n manageThemes(page: ICoreSypg): void {\n const query: string = generateStringFromObject({ sypg_id: page._id, sypg_title: page.sypg_title })\n this.router.navigate(['control-panel', 'page-theme', query]);\n }\n\n /**\n * Manage controls for a page\n */\n manageControls(page: ICoreSypg): void {\n const query: string = generateStringFromObject({ sypg_id: page._id, sypg_title: page.sypg_title })\n this.router.navigate(['control-panel', 'page-controls', query]);\n }\n\n /**\n * Get dropdown items for actions\n */\n getActionDropdownItems(page: ICoreSypg): DropdownItem[] {\n return [\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n disabled: false\n },\n {\n id: 'themes',\n label: 'Manage Themes',\n icon: 'palette',\n disabled: false\n },\n {\n id: 'controls',\n label: 'Manage Controls',\n icon: 'settings',\n disabled: false\n },\n {\n id: 'toggle',\n label: page.sypg_isactive ? 'Deactivate' : 'Activate',\n icon: page.sypg_isactive ? 'block' : 'check_circle',\n disabled: false\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n disabled: false\n }\n ];\n }\n\n /**\n * Handle dropdown item click\n * This method handles clicks on dropdown menu items in the actions column\n */\n onDropdownItemClick(item: DropdownItem, row: ICoreSypg): void {\n console.log('🔵 onDropdownItemClick called with:', item, row);\n\n switch (item.id) {\n case 'edit':\n console.log('🔵 Calling editPage with:', row);\n this.editPage(row);\n break;\n case 'themes':\n console.log('🔵 Calling manageThemes with:', row);\n this.manageThemes(row);\n break;\n case 'controls':\n console.log('🔵 Calling manageControls with:', row);\n this.manageControls(row);\n break;\n case 'toggle':\n console.log('🔵 Calling togglePageStatus with:', row);\n this.togglePageStatus(row);\n break;\n case 'delete':\n console.log('🔵 Calling deletePage with:', row);\n this.deletePage(row);\n break;\n default:\n console.log('🔵 Unknown action:', item.id);\n }\n\n // Close all dropdowns after action\n this.closeAllDropdowns();\n }\n\n /**\n * Close all dropdowns\n */\n private closeAllDropdowns(): void {\n // Close all dropdowns by clicking outside\n const event = new MouseEvent('click', { bubbles: true });\n document.dispatchEvent(event);\n }\n} ","<!-- Page List Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n\n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">web</cide-ele-icon>\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Page Management</h5>\n </div>\n\n <!-- Actions -->\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Add Page Button -->\n <button\n cideEleButton\n variant=\"primary\"\n size=\"sm\"\n (click)=\"createPage()\"\n leftIcon=\"add\"\n class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\n Create New Page\n </button>\n </div>\n </div>\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\">error</cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n \n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n <cide-ele-data-grid\n [config]=\"gridConfig()\"\n [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\"\n [serverSidePagination]=\"true\"\n [totalServerItems]=\"totalItems()\"\n [currentServerPage]=\"currentPage()\"\n [currentServerPageSize]=\"pageSize()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Page Details Renderer Template -->\n<ng-template #pageDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\n <!-- Page Icon -->\n <div class=\"tw-flex-shrink-0\">\n <cide-ele-icon class=\"tw-text-gray-400 tw-w-4 tw-h-4\">web</cide-ele-icon>\n </div>\n \n <!-- Page Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \n [title]=\"row.sypg_title\">\n {{ row.sypg_title || 'Untitled' }}\n </div>\n @if (row.sypg_desc) {\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \n [title]=\"row.sypg_desc\">\n {{ row.sypg_desc }}\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- Page Status Renderer Template -->\n<ng-template #pageStatusRendererTemplate let-row=\"row\" let-value=\"value\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\n [ngClass]=\"row.sypg_isactive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800'\">\n {{ row.sypg_isactive ? 'Active' : 'Inactive' }}\n </span>\n</ng-template>\n\n<!-- Actions Dropdown Renderer Template -->\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(row)\"\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template> ","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\nimport { \r\n cidePath, \r\n coreRoutesUrl, \r\n generateStringFromObject, \r\n hostManagerRoutesUrl,\r\n MSystemPagesTheme,\r\n MSystemPagesThemeGetByIdPayload,\r\n MSystemPagesThemeDeletePayload,\r\n MSystemPagesThemeInsertUpdatePayload,\r\n MSystemPagesThemeToggleStatusPayload,\r\n MSystemPagesThemeByPageIdPayload,\r\n systemPagesThemeControllerResponse,\r\n systemPagesThemeByIdControllerResponse,\r\n systemPagesThemeInsertUpdateControllerResponse,\r\n systemPagesThemeDeleteControllerResponse,\r\n systemPagesThemeToggleStatusControllerResponse,\r\n systemPagesThemeByPageIdControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PageThemeService {\r\n private apiUrl = `${coreRoutesUrl?.pageTheme}`;\r\n\r\n constructor(private http: HttpClient) {\r\n console.log('PageThemeService initialized - using real API');\r\n }\r\n\r\n /**\r\n * Get theme list from API\r\n */\r\n getThemeList(body: MSystemPagesTheme): Observable<systemPagesThemeControllerResponse> {\r\n const query = generateStringFromObject(body);\r\n return this.http?.get<systemPagesThemeControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageTheme, query]))\r\n .pipe(\r\n catchError(error => {\r\n console.error('PageThemeService API error:', error);\r\n return this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Create new theme\r\n */\r\n createTheme(payload: MSystemPagesThemeInsertUpdatePayload): Observable<systemPagesThemeInsertUpdateControllerResponse> {\r\n console.log('Creating theme:', payload);\r\n \r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageTheme]);\r\n return this.http.post<systemPagesThemeInsertUpdateControllerResponse>(url, payload)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Update existing theme\r\n */\r\n updateTheme(payload: MSystemPagesThemeInsertUpdatePayload): Observable<systemPagesThemeInsertUpdateControllerResponse> {\r\n console.log('Updating theme:', payload);\r\n \r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageTheme]);\r\n return this.http.post<systemPagesThemeInsertUpdateControllerResponse>(url, payload)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get theme by ID\r\n */\r\n getThemeById(id: string): Observable<systemPagesThemeByIdControllerResponse> {\r\n console.log('Getting theme by ID:', id);\r\n const payload: MSystemPagesThemeGetByIdPayload = { sytm_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageTheme, 'byId', query]);\r\n return this.http.get<systemPagesThemeByIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get themes by page ID\r\n */\r\n getThemesByPageId(pageId: string): Observable<systemPagesThemeByPageIdControllerResponse> {\r\n console.log('Getting themes by page ID:', pageId);\r\n const payload: MSystemPagesThemeByPageIdPayload = { sytm_page_id_sypg: pageId };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageTheme, 'byPage', query]);\r\n return this.http.get<systemPagesThemeByPageIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete theme\r\n */\r\n deleteTheme(id: string): Observable<systemPagesThemeDeleteControllerResponse> {\r\n const payload: MSystemPagesThemeDeletePayload = { sytm_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageTheme, query]);\r\n return this.http.delete<systemPagesThemeDeleteControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Toggle theme active status\r\n */\r\n toggleThemeStatus(payload: MSystemPagesThemeToggleStatusPayload): Observable<systemPagesThemeToggleStatusControllerResponse> {\r\n console.log('Toggling theme status:', payload);\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageTheme, query]);\r\n return this.http.put<systemPagesThemeToggleStatusControllerResponse>(url, {})\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n\r\n\r\n /**\r\n * Handle errors\r\n */\r\n private handleError(error: unknown): Observable<never> {\r\n let errorMessage = 'An error occurred';\r\n\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n } else if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n\r\n console.error('Page Theme Service Error:', errorMessage);\r\n return throwError(() => new Error(errorMessage));\r\n }\r\n} ","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Validators, ReactiveFormsModule, NonNullableFormBuilder, FormsModule, FormArray, FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { PageThemeService } from '../../services/page-theme.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideEleDataGridComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, CideEleJsonEditorComponent, CideSelectOptionComponent } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { ICoreSytm, MSystemPagesThemeInsertUpdatePayload, ICoreSythDrawer, MSystemPagesTheme, generateObjectFromString } from 'cloud-ide-lms-model';\n\n@Component({\n selector: 'cide-core-app-page-theme',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n CideInputComponent,\n CideSelectComponent,\n CideTextareaComponent,\n CideIconComponent,\n CideEleDropdownComponent,\n CideEleJsonEditorComponent,\n CideSelectOptionComponent\n],\n templateUrl: './page-theme.component.html',\n styleUrls: []\n})\nexport class PageThemeComponent implements OnInit {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private themeService = inject(PageThemeService);\n private appState = inject(AppStateHelperService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n themeDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('themeDetailsRendererTemplate');\n themeStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('themeStatusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('actionsDropdownRendererTemplate');\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n themes = signal<ICoreSytm[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Derived list filtered by searchTerm\n filteredThemes = computed(() => {\n const q = (this.searchTerm() || '').toLowerCase().trim();\n const items = this.themes() || [];\n if (!q) return items;\n return items.filter(t => {\n const title = (t.sytm_title || '').toLowerCase();\n const code = (t.sytm_theme_code || '').toLowerCase();\n const desc = (t.sytm_desc || '').toLowerCase();\n return title.includes(q) || code.includes(q) || desc.includes(q);\n });\n });\n\n // Helper to resolve preview image URL safely\n getPreviewUrl(theme: ICoreSytm): string {\n const id = theme?.sytm_preview_id_fm || '';\n if (!id) return '';\n\n type WithPreviewUrl = { getPreviewUrl: (pid: string) => string };\n const svcUnknown: unknown = this.themeService;\n\n const hasGetPreviewUrl = (svc: unknown): svc is WithPreviewUrl =>\n typeof svc === 'object' && svc !== null &&\n 'getPreviewUrl' in (svc as Record<string, unknown>) &&\n typeof (svc as Record<string, unknown>)['getPreviewUrl'] === 'function';\n\n if (hasGetPreviewUrl(svcUnknown)) {\n return svcUnknown.getPreviewUrl(id);\n }\n return '';\n }\n\n // Input handler to avoid $any casts in template\n onGallerySearchInput(event: Event): void {\n const target = event.target as HTMLInputElement | null;\n this.searchTerm.set(target?.value ?? '');\n }\n\n // Page information\n pageId = signal<string>('');\n pageTitle = signal<string>('');\n\n // Form state\n isEditMode = signal(false);\n editingThemeId = signal<string | null>(null);\n retrievedTheme = signal<ICoreSytm | null>(null);\n\n // Pagination signals\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n\n // Modern reactive forms with signals\n themeForm = this.fb.group({\n sytm_title: ['', [Validators.required]],\n sytm_desc: [''],\n sytm_theme_code: ['', [Validators.required]],\n sytm_preview_id_fm: [''],\n sytm_sub_title: [''],\n sytm_configuration: ['{}'],\n sytm_entity_id_syen: [''],\n sytm_isselected: [false],\n sytm_layout: this.fb.group({\n sytm_layout_sidebar: this.fb.group({ status: [true] }),\n sytm_layout_header: this.fb.group({ status: [true] }),\n sytm_layout_footer: this.fb.group({ status: [false] }),\n sytm_layout_breadcrumb: this.fb.group({ status: [true] }),\n sytm_layout_console: this.fb.group({ status: [false] }),\n sytm_layout_request: this.fb.group({ status: [false] }),\n sytm_layout_drawer: this.fb.array([] as ICoreSythDrawer[])\n }),\n sytm_isactive: [true]\n });\n\n // Computed values\n isFormDirty = computed(() => this.themeForm.dirty);\n\n // Multi-select options for layout sections\n layoutOptions = [\n { value: 'sidebar', label: 'Sidebar' },\n { value: 'header', label: 'Header' },\n { value: 'footer', label: 'Footer' },\n { value: 'breadcrumb', label: 'Breadcrumb' },\n { value: 'console', label: 'Console' },\n { value: 'request', label: 'Request' }\n ] as const;\n\n // Read enabled selections from form values\n enabledLayoutSelections(): string[] {\n const layout = this.themeForm.get('sytm_layout');\n if (!layout) return [];\n const selections: string[] = [];\n\n const getBool = (path: string) => Boolean(this.themeForm.get(path)?.value);\n\n if (getBool('sytm_layout.sytm_layout_sidebar.status')) selections.push('sidebar');\n if (getBool('sytm_layout.sytm_layout_header.status')) selections.push('header');\n if (getBool('sytm_layout.sytm_layout_footer.status')) selections.push('footer');\n if (getBool('sytm_layout.sytm_layout_breadcrumb.status')) selections.push('breadcrumb');\n if (getBool('sytm_layout.sytm_layout_console.status')) selections.push('console');\n if (getBool('sytm_layout.sytm_layout_request.status')) selections.push('request');\n\n return selections;\n }\n\n // Update form booleans from multi-select change\n onEnabledLayoutChange(values: string[]): void {\n const setBool = (path: string, val: boolean) => this.themeForm.get(path)?.setValue(val);\n\n const selected = new Set(values);\n setBool('sytm_layout.sytm_layout_sidebar.status', selected.has('sidebar'));\n setBool('sytm_layout.sytm_layout_header.status', selected.has('header'));\n setBool('sytm_layout.sytm_layout_footer.status', selected.has('footer'));\n setBool('sytm_layout.sytm_layout_breadcrumb.status', selected.has('breadcrumb'));\n setBool('sytm_layout.sytm_layout_console.status', selected.has('console'));\n setBool('sytm_layout.sytm_layout_request.status', selected.has('request'));\n }\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ICoreSytm>>({\n id: 'theme-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'details',\n header: 'Theme Details',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'themeDetailsRenderer'\n },\n {\n key: 'sytm_theme_code',\n header: 'Theme Code',\n type: 'text',\n width: '150px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'sytm_isactive',\n header: 'Status',\n type: 'custom',\n width: '100px',\n truncate: false,\n align: 'center',\n renderer: 'themeStatusRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '120px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search themes...',\n searchableColumns: ['sytm_title', 'sytm_desc', 'sytm_theme_code'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none'\n });\n\n // Action handlers for grid\n actionHandlers = {\n onEdit: (item: ICoreSytm) => this.editTheme(item),\n onDelete: (item: ICoreSytm) => this.deleteTheme(item),\n onToggleStatus: (item: ICoreSytm) => this.toggleThemeStatus(item)\n };\n\n ngOnInit(): void {\n this.initializeComponent();\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n // Get page information from route\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\n console.log('🔍 Query params:', params);\n const queryParams = params['query'];\n const queryData = generateObjectFromString(queryParams);\n\n this.pageId.set(queryData?.sypg_id || '');\n this.pageTitle.set(queryData?.sypg_title || '');\n\n if (this.pageId()) {\n this.loadThemes();\n this.setupFormSubscriptions();\n } else {\n this.error.set('No page ID provided');\n }\n });\n }\n\n /**\n * Load themes from API\n */\n private loadThemes(): void {\n this.loading.set(true);\n this.error.set(null);\n\n const request: MSystemPagesTheme = {\n sytm_page_id_sypg: this.pageId()\n };\n\n this.themeService.getThemeList(request)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.themes.set(response.data || []);\n this.totalItems.set(response.total || 0);\n this.updateGridData();\n } else {\n this.error.set(response.message || 'Failed to load themes');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error loading themes:', error);\n this.error.set('Failed to load themes. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Setup form subscriptions\n */\n private setupFormSubscriptions(): void {\n // Watch for form changes to enable/disable save button\n this.themeForm.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n // Form validation is handled by computed signals\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(): void {\n this.gridConfig.update(config => ({\n ...config,\n data: this.themes()\n }));\n }\n\n /**\n * Get custom renderers for grid\n */\n\n\n /**\n * Get template renderers for grid\n */\n getTemplateRenderers(): Record<string, TemplateRef<TemplateContext>> {\n return {\n themeDetailsRenderer: this.themeDetailsRendererTemplate(),\n themeStatusRenderer: this.themeStatusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n };\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ICoreSytm>): void {\n switch (event.type) {\n case 'pageChange':\n if (event.data && typeof event.data === 'object' && 'pageIndex' in event.data && 'pageSize' in event.data) {\n this.currentPage.set(event.data['pageIndex'] as number);\n this.pageSize.set(event.data['pageSize'] as number);\n this.loadThemes();\n }\n break;\n case 'search':\n if (event.data && typeof event.data === 'string') {\n this.searchTerm.set(event.data);\n this.currentPage.set(1);\n this.loadThemes();\n }\n break;\n case 'refresh':\n this.loadThemes();\n break;\n case 'action':\n // Handle action events if needed\n console.log('Action event:', event);\n break;\n case 'rowClick':\n // Handle row click events if needed\n console.log('Row click event:', event);\n break;\n case 'sort':\n // Handle sort events if needed\n console.log('Sort event:', event);\n break;\n case 'export':\n // Handle export events if needed\n console.log('Export event:', event);\n break;\n case 'rowReorder':\n // Handle row reorder events if needed\n console.log('Row reorder event:', event);\n break;\n }\n }\n\n /**\n * Create new theme\n */\n createTheme(): void {\n if (!this.themeForm.valid) {\n this.markFormAsTouched();\n return;\n }\n\n const formValue = this.themeForm.getRawValue();\n const newTheme: MSystemPagesThemeInsertUpdatePayload = {\n sytm_title: formValue.sytm_title,\n sytm_desc: formValue.sytm_desc,\n sytm_theme_code: formValue.sytm_theme_code,\n sytm_preview_id_fm: formValue.sytm_preview_id_fm,\n sytm_page_id_sypg: this.pageId(),\n sytm_configuration: JSON.parse(formValue.sytm_configuration),\n sytm_sub_title: formValue.sytm_sub_title,\n sytm_entity_id_syen: formValue.sytm_entity_id_syen || this.appState.getActiveEntityId(),\n sytm_isselected: Boolean(formValue.sytm_isselected),\n sytm_layout: {\n sytm_layout_sidebar: { status: Boolean(formValue.sytm_layout.sytm_layout_sidebar.status) },\n sytm_layout_header: { status: Boolean(formValue.sytm_layout.sytm_layout_header.status) },\n sytm_layout_footer: { status: Boolean(formValue.sytm_layout.sytm_layout_footer.status) },\n sytm_layout_breadcrumb: { status: Boolean(formValue.sytm_layout.sytm_layout_breadcrumb.status) },\n sytm_layout_console: { status: Boolean(formValue.sytm_layout.sytm_layout_console.status) },\n sytm_layout_request: { status: Boolean(formValue.sytm_layout.sytm_layout_request.status) },\n sytm_layout_drawer: formValue.sytm_layout.sytm_layout_drawer as ICoreSythDrawer[]\n },\n sytm_isactive: formValue.sytm_isactive\n };\n\n this.loading.set(true);\n this.themeService.createTheme(newTheme)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.resetForm();\n this.loadThemes();\n console.log('✅ Theme created successfully');\n } else {\n console.error('❌ Failed to create theme:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error creating theme:', error);\n console.error('❌ Failed to create theme. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Update existing theme\n */\n updateTheme(): void {\n if (!this.themeForm.valid || !this.editingThemeId()) {\n this.markFormAsTouched();\n return;\n }\n\n const formValue = this.themeForm.getRawValue();\n const updatedTheme: MSystemPagesThemeInsertUpdatePayload = {\n _id: this.editingThemeId() || '',\n sytm_title: formValue.sytm_title,\n sytm_desc: formValue.sytm_desc,\n sytm_theme_code: formValue.sytm_theme_code,\n sytm_preview_id_fm: formValue.sytm_preview_id_fm,\n sytm_page_id_sypg: this.pageId(),\n sytm_configuration: JSON.parse(formValue.sytm_configuration),\n sytm_sub_title: formValue.sytm_sub_title,\n sytm_entity_id_syen: formValue.sytm_entity_id_syen || this.appState.getActiveEntityId(),\n sytm_isselected: Boolean(formValue.sytm_isselected),\n sytm_layout: {\n sytm_layout_sidebar: { status: Boolean(formValue.sytm_layout.sytm_layout_sidebar.status) },\n sytm_layout_header: { status: Boolean(formValue.sytm_layout.sytm_layout_header.status) },\n sytm_layout_footer: { status: Boolean(formValue.sytm_layout.sytm_layout_footer.status) },\n sytm_layout_breadcrumb: { status: Boolean(formValue.sytm_layout.sytm_layout_breadcrumb.status) },\n sytm_layout_console: { status: Boolean(formValue.sytm_layout.sytm_layout_console.status) },\n sytm_layout_request: { status: Boolean(formValue.sytm_layout.sytm_layout_request.status) },\n sytm_layout_drawer: formValue.sytm_layout.sytm_layout_drawer as ICoreSythDrawer[]\n },\n sytm_isactive: formValue.sytm_isactive\n };\n\n this.loading.set(true);\n this.themeService.updateTheme(updatedTheme)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.resetForm();\n this.loadThemes();\n console.log('✅ Theme updated successfully');\n } else {\n console.error('❌ Failed to update theme:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error updating theme:', error);\n console.error('❌ Failed to update theme. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Edit theme\n */\n editTheme(theme: ICoreSytm): void {\n this.isEditMode.set(true);\n this.editingThemeId.set(theme._id || null);\n this.retrievedTheme.set(theme);\n\n this.themeForm.patchValue({\n sytm_title: theme.sytm_title || '',\n sytm_desc: theme.sytm_desc || '',\n sytm_theme_code: theme.sytm_theme_code || '',\n sytm_preview_id_fm: theme.sytm_preview_id_fm || '',\n sytm_sub_title: theme.sytm_sub_title || '',\n sytm_configuration: JSON.stringify(theme.sytm_configuration || {}, null, 2),\n sytm_entity_id_syen: theme.sytm_entity_id_syen || this.appState.getActiveEntityId(),\n sytm_isselected: theme.sytm_isselected ?? false,\n sytm_layout: {\n sytm_layout_sidebar: { status: theme.sytm_layout?.sytm_layout_sidebar?.status ?? true },\n sytm_layout_header: { status: theme.sytm_layout?.sytm_layout_header?.status ?? true },\n sytm_layout_footer: { status: theme.sytm_layout?.sytm_layout_footer?.status ?? false },\n sytm_layout_breadcrumb: { status: theme.sytm_layout?.sytm_layout_breadcrumb?.status ?? true },\n sytm_layout_console: { status: theme.sytm_layout?.sytm_layout_console?.status ?? false },\n sytm_layout_request: { status: theme.sytm_layout?.sytm_layout_request?.status ?? false },\n sytm_layout_drawer: theme.sytm_layout?.sytm_layout_drawer || []\n },\n sytm_isactive: theme.sytm_isactive ?? true\n });\n\n // Rebuild drawer array controls from data\n while (this.drawerArray.length) {\n this.drawerArray.removeAt(0);\n }\n (theme.sytm_layout?.sytm_layout_drawer || []).forEach(d => {\n this.drawerArray.push(this.createDrawerGroup({\n syth_status: d?.syth_status ?? true,\n syth_config_syco_for: d?.syth_config_syco_for ?? 'drawer_notes'\n }));\n });\n\n this.themeForm.markAsPristine();\n }\n\n /**\n * Delete theme\n */\n deleteTheme(theme: ICoreSytm): void {\n if (confirm(`Are you sure you want to delete the theme \"${theme.sytm_title}\"?`)) {\n this.loading.set(true);\n this.themeService.deleteTheme(theme._id || '')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadThemes();\n console.log('✅ Theme deleted successfully');\n } else {\n console.error('❌ Failed to delete theme:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error deleting theme:', error);\n console.error('❌ Failed to delete theme. Please try again.');\n this.loading.set(false);\n }\n });\n }\n }\n\n /**\n * Toggle theme status\n */\n toggleThemeStatus(theme: ICoreSytm): void {\n this.loading.set(true);\n this.themeService.toggleThemeStatus({ sytm_id: theme._id || '', sytm_isactive: !theme.sytm_isactive })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadThemes();\n console.log(`✅ Theme ${theme.sytm_isactive ? 'deactivated' : 'activated'} successfully`);\n } else {\n console.error('❌ Failed to toggle theme status:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error toggling theme status:', error);\n console.error('❌ Failed to toggle theme status. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Save theme (create or update)\n */\n saveTheme(): void {\n if (this.isEditMode()) {\n this.updateTheme();\n } else {\n this.createTheme();\n }\n }\n\n /**\n * Cancel form\n */\n cancelForm(): void {\n this.resetForm();\n }\n\n /**\n * Go back to page list\n */\n goBack(): void {\n this.router.navigate(['/core/page']);\n }\n\n /**\n * Reset form\n */\n private resetForm(): void {\n this.themeForm.reset({\n sytm_title: '',\n sytm_desc: '',\n sytm_theme_code: '',\n sytm_preview_id_fm: '',\n sytm_sub_title: '',\n sytm_configuration: '{}',\n sytm_entity_id_syen: '',\n sytm_isselected: false,\n sytm_layout: {\n sytm_layout_sidebar: { status: true },\n sytm_layout_header: { status: true },\n sytm_layout_footer: { status: false },\n sytm_layout_breadcrumb: { status: true },\n sytm_layout_console: { status: false },\n sytm_layout_request: { status: false },\n sytm_layout_drawer: [] as ICoreSythDrawer[]\n },\n sytm_isactive: true\n });\n\n // Explicitly clear the FormArray for drawers\n while (this.drawerArray.length) {\n this.drawerArray.removeAt(0);\n }\n\n this.isEditMode.set(false);\n this.editingThemeId.set(null);\n this.retrievedTheme.set(null);\n this.themeForm.markAsPristine();\n this.themeForm.markAsUntouched();\n }\n\n /**\n * Mark form as touched to trigger validation display\n */\n private markFormAsTouched(): void {\n Object.keys(this.themeForm.controls).forEach(key => {\n const control = this.themeForm.get(key);\n control?.markAsTouched();\n });\n }\n\n /**\n * Get dropdown items for actions\n */\n getActionDropdownItems(theme: ICoreSytm): DropdownItem[] {\n return [\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n disabled: false\n },\n {\n id: 'toggle',\n label: theme.sytm_isactive ? 'Deactivate' : 'Activate',\n icon: theme.sytm_isactive ? 'block' : 'check_circle',\n disabled: false\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n disabled: false\n }\n ];\n }\n\n /**\n * Handle dropdown item click\n * This method handles clicks on dropdown menu items in the actions column\n */\n onDropdownItemClick(item: DropdownItem, row: ICoreSytm): void {\n console.log('🔵 onDropdownItemClick called with:', item, row);\n\n switch (item.id) {\n case 'edit':\n console.log('🔵 Calling editTheme with:', row);\n this.editTheme(row);\n break;\n case 'toggle':\n console.log('🔵 Calling toggleThemeStatus with:', row);\n this.toggleThemeStatus(row);\n break;\n case 'delete':\n console.log('🔵 Calling deleteTheme with:', row);\n this.deleteTheme(row);\n break;\n default:\n console.log('🔵 Unknown action:', item.id);\n }\n\n // Close all dropdowns after action\n this.closeAllDropdowns();\n }\n\n /**\n * Close all dropdowns\n */\n private closeAllDropdowns(): void {\n // Close all dropdowns by clicking outside\n const event = new MouseEvent('click', { bubbles: true });\n document.dispatchEvent(event);\n }\n\n // ===== Drawer (sytm_layout_drawer) helpers =====\n drawerConfigOptions = [\n { value: 'drawer_notes', label: 'Drawer Notes' },\n { value: 'drawer_theme', label: 'Drawer Theme' }\n ];\n\n get drawerArray(): FormArray<FormGroup> {\n return this.themeForm.get('sytm_layout.sytm_layout_drawer') as unknown as FormArray<FormGroup>;\n }\n\n private createDrawerGroup(drawer?: Partial<ICoreSythDrawer>): FormGroup {\n return this.fb.group({\n syth_status: [drawer?.syth_status ?? true],\n syth_config_syco_for: [drawer?.syth_config_syco_for ?? 'drawer_notes']\n }) as unknown as FormGroup;\n }\n\n addDrawer(): void {\n this.drawerArray.push(this.createDrawerGroup());\n this.themeForm.markAsDirty();\n }\n\n removeDrawer(index: number): void {\n if (index >= 0 && index < this.drawerArray.length) {\n this.drawerArray.removeAt(index);\n this.themeForm.markAsDirty();\n }\n }\n\n /**\n * Set selected theme (only one can be selected per page)\n */\n setSelectedTheme(theme: ICoreSytm): void {\n if (!theme || theme.sytm_isselected) return; // already selected\n\n const previouslySelected = this.themes().find(t => t.sytm_isselected && t._id !== theme._id);\n\n // Disable previous selection (best-effort)\n if (previouslySelected) {\n const disablePayload: MSystemPagesThemeInsertUpdatePayload = {\n _id: previouslySelected._id || '',\n sytm_title: previouslySelected.sytm_title || '',\n sytm_desc: previouslySelected.sytm_desc || '',\n sytm_theme_code: previouslySelected.sytm_theme_code || '',\n sytm_preview_id_fm: previouslySelected.sytm_preview_id_fm || '',\n sytm_page_id_sypg: this.pageId(),\n sytm_configuration: previouslySelected.sytm_configuration || {},\n sytm_sub_title: previouslySelected.sytm_sub_title || '',\n sytm_entity_id_syen: previouslySelected.sytm_entity_id_syen || this.appState.getActiveEntityId(),\n sytm_isselected: false,\n sytm_layout: previouslySelected.sytm_layout,\n sytm_isactive: previouslySelected.sytm_isactive ?? true\n };\n this.themeService.updateTheme(disablePayload).pipe(takeUntilDestroyed(this.destroyRef)).subscribe({ next: () => {}, error: () => {} });\n }\n\n // Enable current selection\n const enablePayload: MSystemPagesThemeInsertUpdatePayload = {\n _id: theme._id || '',\n sytm_title: theme.sytm_title || '',\n sytm_desc: theme.sytm_desc || '',\n sytm_theme_code: theme.sytm_theme_code || '',\n sytm_preview_id_fm: theme.sytm_preview_id_fm || '',\n sytm_page_id_sypg: this.pageId(),\n sytm_configuration: theme.sytm_configuration || {},\n sytm_sub_title: theme.sytm_sub_title || '',\n sytm_entity_id_syen: theme.sytm_entity_id_syen || this.appState.getActiveEntityId(),\n sytm_isselected: true,\n sytm_layout: theme.sytm_layout,\n sytm_isactive: theme.sytm_isactive ?? true\n };\n\n this.loading.set(true);\n this.themeService.updateTheme(enablePayload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: () => { this.loadThemes(); this.loading.set(false); },\n error: () => { this.loading.set(false); }\n });\n }\n}","<!-- Page Theme Container -->\r\n<div class=\"tw-flex tw-h-full tw-w-full\">\r\n \r\n <!-- Left: Form and header (60%) -->\r\n <div class=\"tw-w-full lg:tw-w-3/5 tw-flex tw-flex-col tw-border-r tw-border-gray-200\">\r\n\r\n <!-- Header Section -->\r\n <div class=\"tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n\r\n <!-- Title and Back Button -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-4\">\r\n <button cideEleButton variant=\"ghost\" size=\"sm\" (click)=\"goBack()\" class=\"tw-text-gray-600 hover:tw-text-gray-900\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">arrow_back</cide-ele-icon>\r\n </button>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">palette</cide-ele-icon>\r\n <div>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Theme Management</h5>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-m-0\">Page: {{ pageTitle() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Quick Add/Edit Form Section -->\r\n <div class=\"tw-px-6 tw-py-4 tw-bg-white tw-overflow-auto\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Theme' : 'Quick Add Theme' }}</h6>\r\n </div>\r\n </div>\r\n\r\n <!-- Form (kept as-is) -->\r\n <form [formGroup]=\"themeForm\" (ngSubmit)=\"saveTheme()\" class=\"tw-space-y-4\">\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-4\">\r\n <!-- Theme Title -->\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_title\" formControlName=\"sytm_title\" placeholder=\"Enter theme title\" label=\"Theme Title*\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n <!-- Theme Code -->\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_theme_code\" formControlName=\"sytm_theme_code\" placeholder=\"Enter theme code\" label=\"Theme Code*\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n <!-- Status -->\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input\r\n id=\"sytm_isactive_cb\"\r\n type=\"checkbox\"\r\n label=\"Active\"\r\n size=\"sm\"\r\n formControlName=\"sytm_isactive\">\r\n </cide-ele-input>\r\n </div>\r\n <!-- Sub Title -->\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_sub_title\" formControlName=\"sytm_sub_title\" placeholder=\"Enter sub title\" label=\"Sub Title\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n <!-- Preview ID -->\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_preview_id_fm\" formControlName=\"sytm_preview_id_fm\" placeholder=\"Enter preview image ID\" label=\"Preview Image ID\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n <!-- Description -->\r\n <div class=\"tw-space-y-2 md:tw-col-span-2\">\r\n <cide-ele-textarea id=\"sytm_desc\" formControlName=\"sytm_desc\" placeholder=\"Enter theme description\" rows=\"2\" label=\"Description\" size=\"sm\"></cide-ele-textarea>\r\n </div>\r\n <!-- Configuration JSON -->\r\n <div class=\"tw-space-y-2 md:tw-col-span-3\">\r\n <cide-ele-json-editor label=\"Configuration JSON\" formControlName=\"sytm_configuration\" [required]=\"true\" [config]=\"{\r\n showLineNumbers: true,\r\n autoFormat: true,\r\n validateOnChange: true,\r\n minHeight: 150,\r\n maxHeight: 300,\r\n placeholder: 'Enter theme configuration JSON...'\r\n }\" helperText=\"Enter valid JSON configuration for the theme\"></cide-ele-json-editor>\r\n </div>\r\n <!-- Layout Configuration + Selection: right-side checkbox list -->\r\n <div class=\"lg:tw-col-span-1 tw-space-y-2\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Layout & Selection</div>\r\n <!-- Selected toggle -->\r\n <div class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-md tw-px-3 tw-py-2\">\r\n <cide-ele-input\r\n id=\"sytm_isselected\"\r\n type=\"checkbox\"\r\n label=\"Selected (Default)\"\r\n size=\"sm\"\r\n formControlName=\"sytm_isselected\">\r\n </cide-ele-input>\r\n </div>\r\n <div formGroupName=\"sytm_layout\" class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-md tw-divide-y tw-overflow-hidden\">\r\n <!-- Sidebar -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_sidebar\">\r\n <cide-ele-input id=\"layout_sidebar_status\" type=\"checkbox\" label=\"Sidebar\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Header -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_header\">\r\n <cide-ele-input id=\"layout_header_status\" type=\"checkbox\" label=\"Header\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Footer -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_footer\">\r\n <cide-ele-input id=\"layout_footer_status\" type=\"checkbox\" label=\"Footer\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Breadcrumb -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_breadcrumb\">\r\n <cide-ele-input id=\"layout_breadcrumb_status\" type=\"checkbox\" label=\"Breadcrumb\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Console -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_console\">\r\n <cide-ele-input id=\"layout_console_status\" type=\"checkbox\" label=\"Console\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Request -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_request\">\r\n <cide-ele-input id=\"layout_request_status\" type=\"checkbox\" label=\"Request\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n </div>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-pt-1\">Toggle active sections. Only one theme can be selected as default. More options can be added here later.</p>\r\n </div>\r\n <!-- Drawer Configuration -->\r\n <div class=\"tw-space-y-2 md:tw-col-span-3\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Drawers</div>\r\n <button cideEleButton type=\"button\" size=\"xs\" variant=\"outline\" (click)=\"addDrawer()\">\r\n Add Drawer\r\n </button>\r\n </div>\r\n\r\n <div formGroupName=\"sytm_layout\">\r\n <div class=\"tw-space-y-2\" formArrayName=\"sytm_layout_drawer\">\r\n <div *ngFor=\"let drawerGrp of drawerArray.controls; let i = index\" [formGroupName]=\"i\" class=\"tw-border tw-border-gray-200 tw-rounded-md tw-p-3 tw-flex tw-items-center tw-gap-3\">\r\n <cide-ele-input id=\"drawer_active_{{i}}\" type=\"checkbox\" label=\"Active\" size=\"sm\" formControlName=\"syth_status\"></cide-ele-input>\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-select\r\n id=\"drawer_config_{{i}}\"\r\n label=\"Drawer For\"\r\n size=\"sm\"\r\n [options]=\"drawerConfigOptions\"\r\n formControlName=\"syth_config_syco_for\">\r\n </cide-ele-select>\r\n </div>\r\n <button cideEleButton type=\"button\" size=\"xs\" variant=\"ghost\" (click)=\"removeDrawer(i)\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n <p class=\"tw-text-xs tw-text-gray-500\">Configure multiple drawers as needed.</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-flex tw-flex-col tw-gap-2 tw-pt-4 tw-border-t tw-border-gray-200\">\r\n <div class=\"tw-flex tw-items-center tw-justify-end tw-space-x-3\">\r\n <button cideEleButton type=\"button\" variant=\"outline\" (click)=\"cancelForm()\" [disabled]=\"loading()\">Cancel</button>\r\n <button cideEleButton type=\"submit\" variant=\"primary\" leftIcon=\"add\" [disabled]=\"!themeForm.valid || loading()\" [loading]=\"loading()\">\r\n {{ isEditMode() ? 'Update Theme' : 'Create Theme' }}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Right: Theme gallery (40%) -->\r\n <div class=\"tw-hidden lg:tw-flex tw-w-2/5 tw-flex-col\">\r\n <!-- (Header consolidated above) -->\r\n\r\n <!-- Gallery list -->\r\n <div class=\"tw-flex-1 tw-overflow-auto tw-bg-gray-50\">\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3 tw-p-4\">\r\n @for (theme of filteredThemes(); track theme._id) {\r\n <div class=\"tw-rounded-md tw-transition tw-cursor-pointer tw-relative\"\r\n [ngClass]=\"theme.sytm_isselected\r\n ? 'tw-border tw-border-blue-500 tw-ring-2 tw-ring-blue-200 tw-bg-blue-50/50'\r\n : 'tw-bg-white tw-border tw-border-gray-200 hover:tw-shadow-sm'\"\r\n (click)=\"editTheme(theme)\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n [attr.aria-selected]=\"theme.sytm_isselected ? 'true' : 'false'\"\r\n [attr.aria-label]=\"'Edit theme ' + (theme.sytm_title || theme.sytm_theme_code)\"\r\n (keydown.enter)=\"editTheme(theme)\"\r\n (keydown.space)=\"$event.preventDefault(); editTheme(theme)\">\r\n\r\n <!-- Selected badge -->\r\n <div *ngIf=\"theme.sytm_isselected\"\r\n class=\"tw-absolute tw-top-2 tw-right-2 tw-flex tw-items-center tw-justify-center tw-w-6 tw-h-6 tw-rounded-full tw-bg-blue-600 tw-text-white\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">check</cide-ele-icon>\r\n </div>\r\n \r\n <div class=\"tw-aspect-[16/9] tw-bg-gray-100 tw-rounded-t-md tw-overflow-hidden tw-flex tw-items-center tw-justify-center\">\r\n @if (getPreviewUrl(theme)) {\r\n <img [src]=\"getPreviewUrl(theme)\" class=\"tw-w-full tw-h-full tw-object-cover\" alt=\"Preview\" />\r\n } @else {\r\n <div class=\"tw-text-gray-400 tw-text-xs\">No preview</div>\r\n }\r\n </div>\r\n <div class=\"tw-p-3 tw-space-y-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"theme.sytm_title\">{{ theme.sytm_title || 'Untitled Theme' }}</div>\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" [title]=\"theme.sytm_theme_code\">{{ theme.sytm_theme_code }}</div>\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-pt-1\">\r\n <span class=\"tw-inline-flex tw-items-center tw-gap-1 tw-text-xs\" [ngClass]=\"theme.sytm_isactive ? 'tw-text-green-700' : 'tw-text-red-700'\">\r\n <span class=\"tw-w-1.5 tw-h-1.5 tw-rounded-full\" [ngClass]=\"theme.sytm_isactive ? 'tw-bg-green-500' : 'tw-bg-red-500'\"></span>\r\n {{ theme.sytm_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n <div class=\"tw-flex tw-items-center tw-gap-1\">\r\n <!-- Set Selected Button - Clear and Simple -->\r\n @if (theme.sytm_isselected) {\r\n <span class=\"tw-inline-flex tw-items-center tw-gap-1 tw-px-2 tw-py-1 tw-bg-green-100 tw-text-green-800 tw-rounded-md tw-text-xs tw-font-medium\">\r\n <cide-ele-icon class=\"tw-w-3 tw-h-3\">check</cide-ele-icon>\r\n Selected\r\n </span>\r\n } @else {\r\n <button cideEleButton \r\n variant=\"outline\" \r\n size=\"xs\"\r\n (click)=\"$event.stopPropagation(); setSelectedTheme(theme)\"\r\n [attr.aria-label]=\"'Select ' + (theme.sytm_title || theme.sytm_theme_code) + ' theme'\"\r\n class=\"tw-text-xs\">\r\n Select\r\n </button>\r\n }\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" (click)=\"$event.stopPropagation(); editTheme(theme)\"\r\n [attr.aria-label]=\"'Edit theme ' + (theme.sytm_title || theme.sytm_theme_code)\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">edit</cide-ele-icon>\r\n </button>\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" (click)=\"$event.stopPropagation(); deleteTheme(theme)\"\r\n [attr.aria-label]=\"'Delete theme ' + (theme.sytm_title || theme.sytm_theme_code)\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (!loading() && filteredThemes().length === 0) {\r\n <div class=\"tw-col-span-full tw-text-center tw-text-xs tw-text-gray-500 tw-py-8\">No themes found</div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- \r\n Angular Template References for Grid Renderers (Best Practice)\r\n \r\n These ng-template elements represent the Angular best practice for custom rendering.\r\n They provide:\r\n - Type safety with template context\r\n - Component lifecycle integration\r\n - Change detection optimization\r\n - Proper event handling\r\n - Accessibility features\r\n \r\n Note: Current data grid uses string renderers for compatibility.\r\n Templates are maintained for future component enhancement.\r\n-->\r\n\r\n<!-- Theme Details Renderer Template -->\r\n<ng-template #themeDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Theme Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon \r\n class=\"tw-text-purple-600\" \r\n size=\"xs\">\r\n palette\r\n </cide-ele-icon>\r\n </div>\r\n \r\n <!-- Theme Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \r\n [title]=\"row.sytm_title\">\r\n {{ row.sytm_title || 'Untitled' }}\r\n </div>\r\n @if (row.sytm_desc) {\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \r\n [title]=\"row.sytm_desc\">\r\n {{ row.sytm_desc }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Theme Status Renderer Template -->\r\n<ng-template #themeStatusRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\r\n [ngClass]=\"row.sytm_isactive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800'\">\r\n {{ row.sytm_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown Renderer Template -->\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown \r\n [items]=\"getActionDropdownItems(row)\"\r\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template> ","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\nimport { \r\n cidePath, \r\n coreRoutesUrl, \r\n generateStringFromObject, \r\n hostManagerRoutesUrl,\r\n MPageElements,\r\n MPageElementsGetByIdPayload,\r\n MPageElementsDeletePayload,\r\n MPageElementsInsertUpdatePayload,\r\n MPageElementsToggleStatusPayload,\r\n MPageElementsByPageIdPayload,\r\n MPageElementsMappingDeletePayload,\r\n MPageElementsMappingInsertUpdatePayload,\r\n MPageElementsMappingByPageIdPayload,\r\n pageElementsControllerResponse,\r\n pageElementsByIdControllerResponse,\r\n pageElementsInsertUpdateControllerResponse,\r\n pageElementsDeleteControllerResponse,\r\n pageElementsToggleStatusControllerResponse,\r\n pageElementsByPageIdControllerResponse,\r\n pageElementsMappingInsertUpdateControllerResponse,\r\n pageElementsMappingDeleteControllerResponse,\r\n pageElementsMappingByPageIdControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PageControlsService {\r\n constructor(private http: HttpClient) {\r\n console.log('PageControlsService initialized - using real API');\r\n }\r\n\r\n /**\r\n * Get control list from API\r\n */\r\n getControlList(body: MPageElements): Observable<pageElementsControllerResponse> {\r\n const query = generateStringFromObject(body);\r\n return this.http?.get<pageElementsControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControl, query]))\r\n .pipe(\r\n catchError(error => {\r\n console.error('PageControlsService API error:', error);\r\n return this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Create new control\r\n */\r\n createControl(payload: MPageElementsInsertUpdatePayload): Observable<pageElementsInsertUpdateControllerResponse> {\r\n console.log('Creating control:', payload);\r\n \r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControl]);\r\n return this.http.post<pageElementsInsertUpdateControllerResponse>(url, payload)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Update existing control\r\n */\r\n updateControl(payload: MPageElementsInsertUpdatePayload): Observable<pageElementsInsertUpdateControllerResponse> {\r\n console.log('Updating control:', payload);\r\n \r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControl]);\r\n return this.http.post<pageElementsInsertUpdateControllerResponse>(url, payload)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get control by ID\r\n */\r\n getControlById(id: string): Observable<pageElementsByIdControllerResponse> {\r\n console.log('Getting control by ID:', id);\r\n const payload: MPageElementsGetByIdPayload = { sype_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControl, 'byId', query]);\r\n return this.http.get<pageElementsByIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get controls by page ID\r\n */\r\n getControlsByPageId(pageId: string): Observable<pageElementsByPageIdControllerResponse> {\r\n console.log('Getting controls by page ID:', pageId);\r\n const payload: MPageElementsByPageIdPayload = { sype_page_id_sypg: pageId };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControl, 'byPage', query]);\r\n return this.http.get<pageElementsByPageIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get control mappings by page ID\r\n */\r\n getControlMappingsByPageId(pageId: string): Observable<pageElementsMappingByPageIdControllerResponse> {\r\n console.log('Getting control mappings by page ID:', pageId);\r\n const payload: MPageElementsMappingByPageIdPayload = { sypem_id_sypg: pageId };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControlMapping, query]);\r\n return this.http.get<pageElementsMappingByPageIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Create control mapping\r\n */\r\n createControlMapping(payload: MPageElementsMappingInsertUpdatePayload): Observable<pageElementsMappingInsertUpdateControllerResponse> {\r\n console.log('Creating control mapping:', payload);\r\n \r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControlMapping]);\r\n return this.http.post<pageElementsMappingInsertUpdateControllerResponse>(url, payload)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete control mapping\r\n */\r\n deleteControlMapping(id: string): Observable<pageElementsMappingDeleteControllerResponse> {\r\n const payload: MPageElementsMappingDeletePayload = { sypem_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControlMapping, query]);\r\n return this.http.delete<pageElementsMappingDeleteControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete control\r\n */\r\n deleteControl(id: string): Observable<pageElementsDeleteControllerResponse> {\r\n const payload: MPageElementsDeletePayload = { sype_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControl, query]);\r\n return this.http.delete<pageElementsDeleteControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Toggle control active status\r\n */\r\n toggleControlStatus(payload: MPageElementsToggleStatusPayload): Observable<pageElementsToggleStatusControllerResponse> {\r\n console.log('Toggling control status:', payload);\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControl, query]);\r\n return this.http.put<pageElementsToggleStatusControllerResponse>(url, {})\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n\r\n\r\n /**\r\n * Handle errors\r\n */\r\n private handleError(error: unknown): Observable<never> {\r\n let errorMessage = 'An error occurred';\r\n\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n } else if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n\r\n console.error('Page Controls Service Error:', errorMessage);\r\n return throwError(() => new Error(errorMessage));\r\n }\r\n} ","import { Component, signal, computed, DestroyRef, inject, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule, NonNullableFormBuilder, FormsModule } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\nimport { PageControlsService } from '../../services/page-controls.service';\r\nimport { AppStateHelperService } from 'cloud-ide-layout';\r\nimport { CideEleButtonComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideEleDropdownComponent, DropdownItem } from 'cloud-ide-element';\r\nimport { controlType, generateObjectFromString, ICoreSype, MPageElements, MPageElementsInsertUpdatePayload, themeSize } from 'cloud-ide-lms-model';\r\n\r\n@Component({\r\n selector: 'cide-core-app-page-controls',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n CideEleButtonComponent,\r\n CideInputComponent,\r\n CideSelectComponent,\r\n CideIconComponent,\r\n CideEleDropdownComponent\r\n ],\r\n templateUrl: './page-controls.component.html',\r\n styleUrls: ['./page-controls.component.scss']\r\n})\r\nexport class PageControlsComponent implements OnInit {\r\n // Dependency injection\r\n private destroyRef = inject(DestroyRef);\r\n private controlsService = inject(PageControlsService);\r\n private appState = inject(AppStateHelperService);\r\n private fb = inject(NonNullableFormBuilder);\r\n private router = inject(Router);\r\n private route = inject(ActivatedRoute);\r\n\r\n\r\n\r\n // Make Math available in template\r\n Math = Math;\r\n\r\n // Signals for reactive state management\r\n controls = signal<ICoreSype[]>([]);\r\n loading = signal(false);\r\n error = signal<string | null>(null);\r\n selectedItems = signal<string[]>([]);\r\n searchTerm = signal('');\r\n\r\n // Page information\r\n pageId = signal<string>('');\r\n pageTitle = signal<string>('');\r\n\r\n // Form state\r\n isEditMode = signal(false);\r\n editingControlId = signal<string | null>(null);\r\n retrievedControl = signal<ICoreSype | null>(null);\r\n\r\n // Control selection for new layout\r\n selectedControlId = signal<string | null>(null);\r\n\r\n // Pagination signals\r\n currentPage = signal(1);\r\n pageSize = signal(10);\r\n totalItems = signal(0);\r\n\r\n // Modern reactive forms with signals - No validators for simplicity\r\n controlForm = this.fb.group({\r\n sype_key: [''],\r\n sype_label: [''],\r\n sype_label_hide: [false],\r\n sype_auto_complete: [false], // Changed to boolean for checkbox\r\n sype_hide_helper_and_error_text: [false],\r\n sype_type: [''], // controlType\r\n sype_option_key: [''],\r\n sype_placeholder: [''],\r\n sype_min_length: [0],\r\n sype_max_length: [20],\r\n sype_regex: [''],\r\n sype_required: [false],\r\n sype_disabled: [false],\r\n sype_width: [''], // Changed to string for px values like \"20px\"\r\n sype_height: [''], // Changed to string for px values like \"20px\"\r\n sype_label_placement: ['left' as 'floating' | 'fixed'],\r\n sype_helper_text_collapse: [false],\r\n sype_default: ['' as string | number | boolean],\r\n sype_tooltip: [''],\r\n sype_size: ['sm' as themeSize], // Changed default to small\r\n sype_leading_icon: [''],\r\n sype_isactive: [true],\r\n sype_entity_id_syen: ['']\r\n });\r\n\r\n // Computed values\r\n isFormDirty = computed(() => this.controlForm.dirty);\r\n\r\n\r\n\r\n ngOnInit(): void {\r\n this.initializeComponent();\r\n }\r\n\r\n /**\r\n * Initialize component\r\n */\r\n private initializeComponent(): void {\r\n // Get page information from route\r\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\r\n const queryParams = params['query'];\r\n const queryData = generateObjectFromString(queryParams);\r\n this.pageId.set(queryData?.sypg_id || '');\r\n this.pageTitle.set(queryData?.sypg_title || '');\r\n\r\n if (this.pageId()) {\r\n this.loadControls();\r\n this.setupFormSubscriptions();\r\n this.setEntityIdFromAppState();\r\n } else {\r\n this.error.set('No page ID provided');\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Set entity ID from app state - auto-assigned internally\r\n */\r\n private setEntityIdFromAppState(): void {\r\n const entityId = this.appState.getActiveEntityId();\r\n if (entityId) {\r\n this.controlForm.patchValue({\r\n sype_entity_id_syen: entityId\r\n });\r\n // Disable the entity field since it's auto-assigned\r\n this.controlForm.get('sype_entity_id_syen')?.disable();\r\n }\r\n }\r\n\r\n /**\r\n * Load controls from API\r\n */\r\n private loadControls(): void {\r\n this.loading.set(true);\r\n this.error.set(null);\r\n\r\n const request: MPageElements = {\r\n sype_page_id_sypg: this.pageId()\r\n };\r\n\r\n this.controlsService.getControlList(request)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response.success) {\r\n this.controls.set(response.data || []);\r\n this.totalItems.set(response.total || 0);\r\n } else {\r\n this.error.set(response.message || 'Failed to load controls');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error) => {\r\n console.error('Error loading controls:', error);\r\n this.error.set('Failed to load controls. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Setup form subscriptions\r\n */\r\n private setupFormSubscriptions(): void {\r\n // Watch for form changes to enable/disable save button\r\n this.controlForm.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => {\r\n // Form validation is handled by computed signals\r\n });\r\n }\r\n\r\n\r\n\r\n /**\r\n * Create new control\r\n */\r\n createControl(): void {\r\n\r\n const formValue = this.controlForm.getRawValue();\r\n const entityId = this.appState.getActiveEntityId();\r\n\r\n const newControl: MPageElementsInsertUpdatePayload = {\r\n _id: '',\r\n sype_key: formValue.sype_key,\r\n sype_page_id_sypg: this.pageId(),\r\n sype_label: formValue.sype_label,\r\n sype_label_hide: formValue.sype_label_hide,\r\n sype_auto_complete: formValue.sype_auto_complete,\r\n sype_hide_helper_and_error_text: formValue.sype_hide_helper_and_error_text,\r\n sype_type: formValue.sype_type as controlType,\r\n sype_option_key: formValue.sype_option_key,\r\n sype_placeholder: formValue.sype_placeholder,\r\n sype_min_length: formValue.sype_min_length,\r\n sype_max_length: formValue.sype_max_length,\r\n sype_regex: formValue.sype_regex,\r\n sype_required: formValue.sype_required,\r\n sype_disabled: formValue.sype_disabled,\r\n sype_width: formValue.sype_width,\r\n sype_height: formValue.sype_height,\r\n sype_label_placement: formValue.sype_label_placement,\r\n sype_helper_text_collapse: formValue.sype_helper_text_collapse,\r\n sype_default: formValue.sype_default,\r\n sype_tooltip: formValue.sype_tooltip,\r\n sype_size: formValue.sype_size,\r\n sype_leading_icon: formValue.sype_leading_icon,\r\n sype_isactive: formValue.sype_isactive,\r\n sype_entity_id_syen: entityId || formValue.sype_entity_id_syen\r\n };\r\n\r\n this.loading.set(true);\r\n this.controlsService.createControl(newControl)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response.success) {\r\n this.resetForm();\r\n this.loadControls();\r\n console.log('Control created successfully');\r\n } else {\r\n console.error(response.message || 'Failed to create control');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error) => {\r\n console.error('Error creating control:', error);\r\n console.error('Failed to create control. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Update existing control\r\n */\r\n updateControl(): void {\r\n if (!this.editingControlId()) {\r\n return;\r\n }\r\n\r\n const formValue = this.controlForm.getRawValue();\r\n const entityId = this.appState.getActiveEntityId();\r\n\r\n const updatedControl: MPageElementsInsertUpdatePayload = {\r\n _id: this.editingControlId()!,\r\n sype_key: formValue.sype_key,\r\n sype_page_id_sypg: this.pageId(),\r\n sype_label: formValue.sype_label,\r\n sype_label_hide: formValue.sype_label_hide,\r\n sype_auto_complete: Boolean(formValue.sype_auto_complete),\r\n sype_hide_helper_and_error_text: formValue.sype_hide_helper_and_error_text,\r\n sype_type: formValue.sype_type as controlType,\r\n sype_option_key: formValue.sype_option_key,\r\n sype_placeholder: formValue.sype_placeholder,\r\n sype_min_length: formValue.sype_min_length,\r\n sype_max_length: formValue.sype_max_length,\r\n sype_regex: formValue.sype_regex,\r\n sype_required: formValue.sype_required,\r\n sype_disabled: formValue.sype_disabled,\r\n sype_width: formValue.sype_width,\r\n sype_height: formValue.sype_height,\r\n sype_label_placement: formValue.sype_label_placement,\r\n sype_helper_text_collapse: formValue.sype_helper_text_collapse,\r\n sype_default: formValue.sype_default,\r\n sype_tooltip: formValue.sype_tooltip,\r\n sype_size: formValue.sype_size,\r\n sype_leading_icon: formValue.sype_leading_icon,\r\n sype_isactive: formValue.sype_isactive,\r\n sype_entity_id_syen: entityId || formValue.sype_entity_id_syen\r\n };\r\n\r\n this.loading.set(true);\r\n this.controlsService.updateControl(updatedControl)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response.success) {\r\n this.resetForm();\r\n this.loadControls();\r\n console.log('Control updated successfully');\r\n } else {\r\n console.error(response.message || 'Failed to update control');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error) => {\r\n console.error('Error updating control:', error);\r\n console.error('Failed to update control. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Edit control\r\n */\r\n editControl(control: ICoreSype): void {\r\n this.isEditMode.set(true);\r\n this.editingControlId.set(control._id || null);\r\n this.retrievedControl.set(control);\r\n\r\n this.controlForm.patchValue({\r\n sype_key: control.sype_key,\r\n sype_label: control.sype_label,\r\n sype_label_hide: control.sype_label_hide,\r\n sype_auto_complete: control.sype_auto_complete ? true : false,\r\n sype_hide_helper_and_error_text: control.sype_hide_helper_and_error_text,\r\n sype_type: control.sype_type,\r\n sype_option_key: control.sype_option_key,\r\n sype_placeholder: control.sype_placeholder,\r\n sype_min_length: control.sype_min_length,\r\n sype_max_length: control.sype_max_length,\r\n sype_regex: control.sype_regex,\r\n sype_required: control.sype_required,\r\n sype_disabled: control.sype_disabled,\r\n sype_width: control.sype_width?.toString() || '',\r\n sype_height: control.sype_height?.toString() || '',\r\n sype_label_placement: control.sype_label_placement,\r\n sype_helper_text_collapse: control.sype_helper_text_collapse,\r\n sype_default: control.sype_default as string | number | boolean,\r\n sype_tooltip: control.sype_tooltip,\r\n sype_size: control.sype_size as themeSize,\r\n sype_leading_icon: control.sype_leading_icon,\r\n sype_isactive: control.sype_isactive,\r\n sype_entity_id_syen: String(control.sype_entity_id_syen || '')\r\n });\r\n\r\n this.controlForm.markAsPristine();\r\n }\r\n\r\n /**\r\n * Delete control\r\n */\r\n deleteControl(control: ICoreSype): void {\r\n if (confirm(`Are you sure you want to delete the control \"${control.sype_label}\"?`)) {\r\n this.loading.set(true);\r\n this.controlsService.deleteControl(control._id || '')\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response.success) {\r\n this.loadControls();\r\n console.log('Control deleted successfully');\r\n } else {\r\n console.error(response.message || 'Failed to delete control');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error) => {\r\n console.error('Error deleting control:', error);\r\n console.error('Failed to delete control. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Toggle control status\r\n */\r\n toggleControlStatus(control: ICoreSype): void {\r\n this.loading.set(true);\r\n this.controlsService.toggleControlStatus({ sype_id: control._id || '', sype_isactive: !control.sype_isactive })\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response.success) {\r\n this.loadControls();\r\n console.log(`Control ${control.sype_isactive ? 'deactivated' : 'activated'} successfully`);\r\n } else {\r\n console.error(response.message || 'Failed to toggle control status');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error) => {\r\n console.error('Error toggling control status:', error);\r\n console.error('Failed to toggle control status. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Save control (create or update)\r\n */\r\n saveControl(): void {\r\n if (this.isEditMode()) {\r\n this.updateControl();\r\n } else {\r\n this.createControl();\r\n }\r\n }\r\n\r\n /**\r\n * Cancel form\r\n */\r\n cancelForm(): void {\r\n this.resetForm();\r\n }\r\n\r\n /**\r\n * Go back to page list\r\n */\r\n goBack(): void {\r\n this.router.navigate(['/core/page']);\r\n }\r\n\r\n /**\r\n * Reset form\r\n */\r\n private resetForm(): void {\r\n const entityId = this.appState.getActiveEntityId();\r\n\r\n this.controlForm.reset({\r\n sype_key: '',\r\n sype_label: '',\r\n sype_label_hide: false,\r\n sype_auto_complete: false,\r\n sype_hide_helper_and_error_text: false,\r\n sype_type: '',\r\n sype_option_key: '',\r\n sype_placeholder: '',\r\n sype_min_length: 0,\r\n sype_max_length: 20,\r\n sype_regex: '',\r\n sype_required: false,\r\n sype_disabled: false,\r\n sype_width: '',\r\n sype_height: '',\r\n sype_label_placement: 'floating',\r\n sype_helper_text_collapse: false,\r\n sype_default: '' as string | number | boolean,\r\n sype_tooltip: '',\r\n sype_size: 'md',\r\n sype_leading_icon: '',\r\n sype_isactive: true,\r\n sype_entity_id_syen: entityId || ''\r\n });\r\n this.isEditMode.set(false);\r\n this.editingControlId.set(null);\r\n this.retrievedControl.set(null);\r\n this.controlForm.markAsPristine();\r\n this.controlForm.markAsUntouched();\r\n }\r\n\r\n /**\r\n * Mark form as touched to trigger validation display\r\n */\r\n private markFormAsTouched(): void {\r\n Object.keys(this.controlForm.controls).forEach(key => {\r\n const control = this.controlForm.get(key);\r\n control?.markAsTouched();\r\n });\r\n }\r\n\r\n /**\r\n * Get dropdown items for actions\r\n */\r\n getActionDropdownItems(control: ICoreSype): DropdownItem[] {\r\n return [\r\n {\r\n id: 'edit',\r\n label: 'Edit',\r\n icon: 'edit'\r\n },\r\n {\r\n id: 'toggle',\r\n label: control.sype_isactive ? 'Deactivate' : 'Activate',\r\n icon: control.sype_isactive ? 'block' : 'check_circle'\r\n },\r\n {\r\n id: 'delete',\r\n label: 'Delete',\r\n icon: 'delete'\r\n }\r\n ];\r\n }\r\n\r\n /**\r\n * Handle dropdown item click\r\n */\r\n onDropdownItemClick(item: DropdownItem, control: ICoreSype): void {\r\n switch (item.id) {\r\n case 'edit':\r\n this.editControl(control);\r\n break;\r\n case 'toggle':\r\n this.toggleControlStatus(control);\r\n break;\r\n case 'delete':\r\n this.deleteControl(control);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Close all dropdowns\r\n */\r\n closeAllDropdowns(): void {\r\n // This method can be used to close dropdowns if needed\r\n }\r\n\r\n // New methods for the vertical layout\r\n selectControl(control: ICoreSype): void {\r\n this.selectedControlId.set(control._id || null);\r\n console.log('Selected control:', control);\r\n }\r\n\r\n trackByControlId(index: number, control: ICoreSype): string {\r\n return control._id || '';\r\n }\r\n} ","<!-- Page Controls Container -->\n<div class=\"page-controls-container\">\n <!-- Header Section -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <button \n cideEleButton\n variant=\"ghost\"\n size=\"sm\"\n (click)=\"goBack()\"\n class=\"back-button\">\n <cide-ele-icon>arrow_back</cide-ele-icon>\n </button>\n <div class=\"title-section\">\n <cide-ele-icon class=\"title-icon\">settings</cide-ele-icon>\n <div>\n <h1 class=\"title\">Control Management</h1>\n <p class=\"subtitle\">Page: {{ pageTitle() }}</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Error Message -->\n <div class=\"error-message\" *ngIf=\"error()\">\n <cide-ele-icon>error</cide-ele-icon>\n <div>\n <h3>Error</h3>\n <p>{{ error() }}</p>\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"main-content\">\n <!-- Form Section -->\n <div class=\"form-section\">\n <div class=\"form-header\">\n <cide-ele-icon>{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h3>{{ isEditMode() ? 'Edit Control' : 'Quick Add Control' }}</h3>\n </div>\n\n <!-- Form -->\n <form [formGroup]=\"controlForm\" (ngSubmit)=\"saveControl()\" class=\"control-form tw-overflow-y-auto\">\n <div class=\"form-grid\">\n \n <!-- Basic Information Section -->\n <!-- Control Key -->\n <div class=\"form-group\">\n <cide-ele-input\n id=\"sype_key\"\n formControlName=\"sype_key\"\n placeholder=\"Enter control key\"\n label=\"Control Key\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Control Label -->\n <div class=\"form-group\">\n <cide-ele-input\n id=\"sype_label\"\n formControlName=\"sype_label\"\n placeholder=\"Enter control label\"\n label=\"Control Label\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Control Type -->\n <div class=\"form-group\">\n <cide-ele-select\n id=\"sype_type\"\n formControlName=\"sype_type\"\n [options]=\"[\n { value: 'text', label: 'Text Input' },\n { value: 'textarea', label: 'Text Area' },\n { value: 'select', label: 'Select' },\n { value: 'checkbox', label: 'Checkbox' },\n { value: 'radio', label: 'Radio' },\n { value: 'date', label: 'Date' },\n { value: 'number', label: 'Number' },\n { value: 'email', label: 'Email' },\n { value: 'password', label: 'Password' },\n { value: 'file', label: 'File Upload' }\n ]\"\n label=\"Control Type\"\n size=\"sm\">\n </cide-ele-select>\n </div>\n\n <!-- Status - Checkbox aligned properly -->\n <div class=\"form-group\">\n <cide-ele-input\n id=\"sype_isactive\"\n type=\"checkbox\"\n formControlName=\"sype_isactive\"\n label=\"Active Status\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Placeholder -->\n <div class=\"form-group\">\n <cide-ele-input\n id=\"sype_placeholder\"\n formControlName=\"sype_placeholder\"\n placeholder=\"Enter placeholder text\"\n label=\"Placeholder\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Auto Complete - Checkbox aligned properly -->\n <div class=\"form-group\">\n <cide-ele-input\n id=\"sype_auto_complete\"\n type=\"checkbox\"\n formControlName=\"sype_auto_complete\"\n label=\"Auto Complete\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Tooltip -->\n <div class=\"form-group\">\n <cide-ele-input\n id=\"sype_tooltip\"\n formControlName=\"sype_tooltip\"\n placeholder=\"Enter tooltip text\"\n label=\"Tooltip\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Validation & Sizing Section -->\n <!-- Min/Max Length - Side by side -->\n <div class=\"form-group form-group-row\">\n <div class=\"form-group-half\">\n <cide-ele-input\n id=\"sype_min_length\"\n type=\"number\"\n formControlName=\"sype_min_length\"\n placeholder=\"0\"\n label=\"Min Length\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n <div class=\"form-group-half\">\n <cide-ele-input\n id=\"sype_max_length\"\n type=\"number\"\n formControlName=\"sype_max_length\"\n placeholder=\"20\"\n label=\"Max Length\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Size & Label Placement - Side by side -->\n <div class=\"form-group form-group-row\">\n <div class=\"form-group-half\">\n <cide-ele-select\n id=\"sype_size\"\n formControlName=\"sype_size\"\n label=\"Size\"\n size=\"xs\"\n [options]=\"[\n { value: 'xs', label: 'XS' },\n { value: 'sm', label: 'SM' },\n { value: 'md', label: 'MD' },\n { value: 'lg', label: 'LG' },\n { value: 'xl', label: 'XL' },\n { value: 'xxl', label: 'XXL' }\n ]\">\n </cide-ele-select>\n </div>\n <div class=\"form-group-half\">\n <cide-ele-select\n id=\"sype_label_placement\"\n formControlName=\"sype_label_placement\"\n label=\"Label Placement\"\n size=\"xs\"\n [options]=\"[\n { value: 'left', label: 'Left' },\n { value: 'floating', label: 'Floating' },\n { value: 'fixed', label: 'Fixed' }\n ]\">\n </cide-ele-select>\n </div>\n </div>\n\n <!-- Width & Height - Side by side -->\n <div class=\"form-group form-group-row\">\n <div class=\"form-group-half\">\n <cide-ele-input\n id=\"sype_width\"\n type=\"text\"\n formControlName=\"sype_width\"\n placeholder=\"20px\"\n label=\"Width\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n <div class=\"form-group-half\">\n <cide-ele-input\n id=\"sype_height\"\n type=\"text\"\n formControlName=\"sype_height\"\n placeholder=\"20px\"\n label=\"Height\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Leading Icon -->\n <div class=\"form-group\">\n <cide-ele-input\n id=\"sype_leading_icon\"\n formControlName=\"sype_leading_icon\"\n placeholder=\"Enter icon name\"\n label=\"Leading Icon\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Default Value -->\n <div class=\"form-group\">\n <cide-ele-input\n id=\"sype_default\"\n formControlName=\"sype_default\"\n placeholder=\"Enter default value\"\n label=\"Default Value\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Regex Pattern -->\n <div class=\"form-group\">\n <cide-ele-input\n id=\"sype_regex\"\n formControlName=\"sype_regex\"\n placeholder=\"Enter regex pattern\"\n label=\"Regex Pattern\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Option Key -->\n <div class=\"form-group\">\n <cide-ele-input\n id=\"sype_option_key\"\n formControlName=\"sype_option_key\"\n placeholder=\"Enter option key\"\n label=\"Option Key\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Entity ID (Auto-assigned from AppState) - Hidden -->\n <div class=\"form-group\" style=\"display: none;\">\n <cide-ele-input\n id=\"sype_entity_id_syen\"\n formControlName=\"sype_entity_id_syen\"\n placeholder=\"Auto-assigned from system\"\n label=\"Entity ID (Auto-assigned)\"\n size=\"sm\"\n readonly>\n </cide-ele-input>\n </div>\n\n <!-- Control Options -->\n <div class=\"form-group full-width\">\n <h6 class=\"options-title\">Control Options</h6>\n <div class=\"options-grid\">\n \n <!-- Required -->\n <div class=\"option-item\">\n <cide-ele-input\n id=\"sype_required\"\n type=\"checkbox\"\n formControlName=\"sype_required\"\n label=\"Required\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n\n <!-- Disabled -->\n <div class=\"option-item\">\n <cide-ele-input\n id=\"sype_disabled\"\n type=\"checkbox\"\n formControlName=\"sype_disabled\"\n label=\"Disabled\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n\n <!-- Hide Label -->\n <div class=\"option-item\">\n <cide-ele-input\n id=\"sype_label_hide\"\n type=\"checkbox\"\n formControlName=\"sype_label_hide\"\n label=\"Hide Label\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n\n <!-- Hide Helper Text -->\n <div class=\"option-item\">\n <cide-ele-input\n id=\"sype_hide_helper_and_error_text\"\n type=\"checkbox\"\n formControlName=\"sype_hide_helper_and_error_text\"\n label=\"Hide Helper Text\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n\n <!-- Helper Text Collapse -->\n <div class=\"option-item\">\n <cide-ele-input\n id=\"sype_helper_text_collapse\"\n type=\"checkbox\"\n formControlName=\"sype_helper_text_collapse\"\n label=\"Collapse Helper\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n\n </div>\n </div>\n\n </div>\n\n <!-- Form Actions -->\n <div class=\"form-actions\">\n <button \n cideEleButton\n type=\"button\"\n variant=\"outline\"\n (click)=\"cancelForm()\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n <button \n cideEleButton\n type=\"submit\"\n variant=\"primary\"\n [disabled]=\"loading()\">\n {{ isEditMode() ? 'Update Control' : 'Create Control' }}\n </button>\n </div>\n </form>\n </div>\n\n <!-- Controls List Section -->\n <div class=\"controls-list-section\">\n <div class=\"controls-header\">\n <h3>Page Controls</h3>\n <p>Controls connected to this page</p>\n </div>\n \n <div class=\"controls-list\" *ngIf=\"!loading() && controls().length > 0\">\n <div \n class=\"control-item\" \n *ngFor=\"let control of controls(); trackBy: trackByControlId\"\n [class.selected]=\"selectedControlId() === control._id\"\n (click)=\"selectControl(control)\"\n (keyup.enter)=\"selectControl(control)\"\n (keyup.space)=\"selectControl(control)\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"'Select control ' + (control.sype_label || control.sype_key)\">\n <div class=\"control-header\">\n <div class=\"control-icon\">\n <cide-ele-icon>settings_input_component</cide-ele-icon>\n </div>\n <div class=\"control-info\">\n <h4>{{ control.sype_label || control.sype_key }}</h4>\n <p>{{ control.sype_tooltip || 'No tooltip' }}</p>\n <div class=\"control-meta\">\n <span class=\"control-type\">{{ control.sype_type }}</span>\n <span class=\"control-status\" [class.active]=\"control.sype_isactive\">\n {{ control.sype_isactive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n </div>\n <div class=\"control-actions\">\n <button \n cideEleButton\n variant=\"ghost\"\n size=\"sm\"\n (click)=\"editControl(control); $event.stopPropagation()\">\n <cide-ele-icon>edit</cide-ele-icon>\n </button>\n <button \n cideEleButton\n variant=\"ghost\"\n size=\"sm\"\n (click)=\"deleteControl(control); $event.stopPropagation()\">\n <cide-ele-icon>delete</cide-ele-icon>\n </button>\n </div>\n </div>\n \n \n </div>\n </div>\n\n <div class=\"controls-list-empty\" *ngIf=\"!loading() && controls().length === 0\">\n <cide-ele-icon>settings_input_component</cide-ele-icon>\n <p>No controls available</p>\n <small>Create controls using the form on the left</small>\n </div>\n\n <div class=\"controls-list-loading\" *ngIf=\"loading()\">\n <cide-ele-icon class=\"spinning\">refresh</cide-ele-icon>\n <p>Loading controls...</p>\n </div>\n </div>\n </div>\n</div>\n\n ","// Page Management Components\r\nexport * from './components/page-list/page-list.component';\r\nexport * from './components/page-theme/page-theme.component';\r\nexport * from './components/page-controls/page-controls.component';\r\n\r\n// Page Management Services\r\nexport * from './services/page-management.service';\r\nexport * from './services/page-theme.service';\r\nexport * from './services/page-controls.service';\r\n\r\n// Page Management Interfaces - Now using model interfaces from cloud-ide-lms-model ","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { cidePath, coreRoutesUrl, hostManagerRoutesUrl, generateStringFromObject } from 'cloud-ide-lms-model';\r\n\r\n@Injectable({ \r\n providedIn: 'root' \r\n})\r\nexport class CideAdmUserMasterService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Save or update user master data using proper API endpoint\r\n * @param data - User master data to save\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateUserMaster(data: any): Observable<any> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost, \r\n coreRoutesUrl.module, \r\n // TODO: Add proper user master route when available\r\n 'user-master' // This should be defined in coreRoutesUrl\r\n ]);\r\n \r\n console.log('👤 USER MASTER SERVICE: Making POST request to:', url);\r\n console.log('👤 USER MASTER SERVICE: Payload:', data);\r\n\r\n // For now, return simulated response until actual API endpoint is available\r\n return new Observable(observer => {\r\n setTimeout(() => {\r\n observer.next({\r\n success: true,\r\n data: { ...data, _id: 'usr_' + Date.now() },\r\n message: 'User master saved successfully'\r\n });\r\n observer.complete();\r\n }, 1000);\r\n });\r\n\r\n // Uncomment when actual API endpoint is available:\r\n // return this.http.post(url, data);\r\n }\r\n\r\n /**\r\n * Get user master by ID\r\n * @param userId - User ID to fetch\r\n * @returns Observable of user master data\r\n */\r\n getUserMasterById(userId: string): Observable<any> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n coreRoutesUrl.module,\r\n 'user-master',\r\n userId\r\n ]);\r\n\r\n console.log('👤 USER MASTER SERVICE: Fetching user master with ID:', userId);\r\n\r\n // For now, return simulated response\r\n return new Observable(observer => {\r\n setTimeout(() => {\r\n observer.next({\r\n success: true,\r\n data: {\r\n _id: userId,\r\n user_entity_id_ent: 'ent-1',\r\n user_username: 'sample.user',\r\n user_firstname: 'Sample',\r\n user_lastname: 'User',\r\n user_fullname: 'Sample User',\r\n user_emailid: 'sample.user@example.com',\r\n user_mobileno: '9876543210',\r\n user_isactive: true,\r\n // ... other fields\r\n },\r\n message: 'User master fetched successfully'\r\n });\r\n observer.complete();\r\n }, 500);\r\n });\r\n\r\n // Uncomment when actual API endpoint is available:\r\n // return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Update user master data\r\n * @param userId - User ID to update\r\n * @param data - Updated user master data\r\n * @returns Observable of the update response\r\n */\r\n updateUserMaster(userId: string, data: any): Observable<any> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n coreRoutesUrl.module,\r\n 'user-master',\r\n userId\r\n ]);\r\n\r\n console.log('👤 USER MASTER SERVICE: Updating user master with ID:', userId);\r\n\r\n // For now, return simulated response\r\n return new Observable(observer => {\r\n setTimeout(() => {\r\n observer.next({\r\n success: true,\r\n data: { ...data, _id: userId },\r\n message: 'User master updated successfully'\r\n });\r\n observer.complete();\r\n }, 1000);\r\n });\r\n\r\n // Uncomment when actual API endpoint is available:\r\n // return this.http.put(url, data);\r\n }\r\n\r\n /**\r\n * Delete user master\r\n * @param userId - User ID to delete\r\n * @returns Observable of the delete response\r\n */\r\n deleteUserMaster(userId: string): Observable<any> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n coreRoutesUrl.module,\r\n 'user-master',\r\n userId\r\n ]);\r\n\r\n console.log('👤 USER MASTER SERVICE: Deleting user master with ID:', userId);\r\n\r\n // For now, return simulated response\r\n return new Observable(observer => {\r\n setTimeout(() => {\r\n observer.next({\r\n success: true,\r\n data: null,\r\n message: 'User master deleted successfully'\r\n });\r\n observer.complete();\r\n }, 500);\r\n });\r\n\r\n // Uncomment when actual API endpoint is available:\r\n // return this.http.delete(url);\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { cidePath, coreRoutesUrl, hostManagerRoutesUrl, generateStringFromObject } from 'cloud-ide-lms-model';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideAdmUserMasterListService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get list of users using the proper API endpoint\r\n * @param body - Payload for filtering/pagination\r\n * @returns Observable of response\r\n */\r\n getUserList(body: any): Observable<any> {\r\n const query = generateStringFromObject(body);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n coreRoutesUrl.module,\r\n // TODO: Add proper user master route when available\r\n 'user-master', // This should be defined in coreRoutesUrl\r\n query\r\n ]);\r\n\r\n console.log('🔍 USER MASTER SERVICE: Making API call to:', url);\r\n console.log('🔍 USER MASTER SERVICE: Payload:', body);\r\n\r\n // For now, return simulated data until actual API endpoint is available\r\n return new Observable(observer => {\r\n setTimeout(() => {\r\n const simulatedResponse = this.generateSimulatedResponse(body);\r\n observer.next(simulatedResponse);\r\n observer.complete();\r\n }, 800); // Simulate network delay\r\n });\r\n\r\n // Uncomment when actual API endpoint is available:\r\n // return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get user list with default parameters\r\n * @returns Observable of response\r\n */\r\n getAllUsers(): Observable<any> {\r\n const defaultPayload = {\r\n pageIndex: 1,\r\n pageSize: 10\r\n };\r\n return this.getUserList(defaultPayload);\r\n }\r\n\r\n /**\r\n * Get filtered user list\r\n * @param filters - Filter parameters\r\n * @returns Observable of response\r\n */\r\n getFilteredUsers(filters: any): Observable<any> {\r\n const payload = { \r\n pageIndex: 1,\r\n pageSize: 10,\r\n ...filters \r\n };\r\n return this.getUserList(payload);\r\n }\r\n\r\n /**\r\n * Toggle user status\r\n * @param userId - User ID to toggle status\r\n * @returns Observable of response\r\n */\r\n toggleUserStatus(userId: string): Observable<any> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n coreRoutesUrl.module,\r\n 'user-master',\r\n 'toggle-status',\r\n userId\r\n ]);\r\n\r\n console.log('🔄 USER MASTER SERVICE: Toggling status for user:', userId);\r\n\r\n // For now, return simulated response\r\n return new Observable(observer => {\r\n setTimeout(() => {\r\n observer.next({\r\n success: true,\r\n data: [],\r\n total: 0,\r\n message: 'User status toggled successfully'\r\n });\r\n observer.complete();\r\n }, 500);\r\n });\r\n\r\n // Uncomment when actual API endpoint is available:\r\n // return this.http.patch(url, {});\r\n }\r\n\r\n /**\r\n * Delete user\r\n * @param userId - User ID to delete\r\n * @returns Observable of response\r\n */\r\n deleteUser(userId: string): Observable<any> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n coreRoutesUrl.module,\r\n 'user-master',\r\n userId\r\n ]);\r\n\r\n console.log('🗑️ USER MASTER SERVICE: Deleting user:', userId);\r\n\r\n // For now, return simulated response\r\n return new Observable(observer => {\r\n setTimeout(() => {\r\n observer.next({\r\n success: true,\r\n data: [],\r\n total: 0,\r\n message: 'User deleted successfully'\r\n });\r\n observer.complete();\r\n }, 500);\r\n });\r\n\r\n // Uncomment when actual API endpoint is available:\r\n // return this.http.delete(url);\r\n }\r\n\r\n /**\r\n * Reset user password\r\n * @param userId - User ID to reset password\r\n * @returns Observable of response\r\n */\r\n resetUserPassword(userId: string): Observable<any> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n coreRoutesUrl.module,\r\n 'user-master',\r\n 'reset-password',\r\n userId\r\n ]);\r\n\r\n console.log('🔑 USER MASTER SERVICE: Resetting password for user:', userId);\r\n\r\n // For now, return simulated response\r\n return new Observable(observer => {\r\n setTimeout(() => {\r\n observer.next({\r\n success: true,\r\n data: [],\r\n total: 0,\r\n message: 'User password reset successfully'\r\n });\r\n observer.complete();\r\n }, 500);\r\n });\r\n\r\n // Uncomment when actual API endpoint is available:\r\n // return this.http.post(url, {});\r\n }\r\n\r\n /**\r\n * Private method to generate simulated response for testing\r\n * This should be removed when actual API is implemented\r\n */\r\n private generateSimulatedResponse(payload: any): any {\r\n // Generate test data\r\n const allUsers = this.generateTestUsers();\r\n \r\n // Apply filters\r\n let filteredUsers = [...allUsers];\r\n \r\n // Apply search filter\r\n if (payload.query && payload.query.trim()) {\r\n const searchTerm = payload.query.toLowerCase();\r\n filteredUsers = filteredUsers.filter(user => \r\n user.user_fullname.toLowerCase().includes(searchTerm) ||\r\n user.user_username.toLowerCase().includes(searchTerm) ||\r\n user.user_emailid.toLowerCase().includes(searchTerm) ||\r\n user.user_mobileno.includes(searchTerm)\r\n );\r\n }\r\n\r\n // Apply status filter\r\n if (payload.filters?.status) {\r\n const statusFilter = payload.filters.status;\r\n if (statusFilter === 'active') {\r\n filteredUsers = filteredUsers.filter(user => user.user_isactive);\r\n } else if (statusFilter === 'inactive') {\r\n filteredUsers = filteredUsers.filter(user => !user.user_isactive);\r\n }\r\n }\r\n\r\n // Apply sorting\r\n if (payload.sort?.key) {\r\n filteredUsers.sort((a, b) => {\r\n let aValue: any, bValue: any;\r\n \r\n switch (payload.sort!.key) {\r\n case 'user_fullname':\r\n aValue = a.user_fullname;\r\n bValue = b.user_fullname;\r\n break;\r\n case 'user_isactive':\r\n aValue = a.user_isactive ? 1 : 0;\r\n bValue = b.user_isactive ? 1 : 0;\r\n break;\r\n default:\r\n aValue = (a as any)[payload.sort!.key];\r\n bValue = (b as any)[payload.sort!.key];\r\n }\r\n\r\n if (aValue < bValue) return payload.sort!.order === 'asc' ? -1 : 1;\r\n if (aValue > bValue) return payload.sort!.order === 'asc' ? 1 : -1;\r\n return 0;\r\n });\r\n }\r\n\r\n // Apply pagination\r\n const pageSize = payload.pageSize || 10;\r\n const pageIndex = payload.pageIndex || 1;\r\n const startIndex = (pageIndex - 1) * pageSize;\r\n const endIndex = startIndex + pageSize;\r\n const paginatedUsers = filteredUsers.slice(startIndex, endIndex);\r\n\r\n return {\r\n success: true,\r\n data: paginatedUsers,\r\n total: filteredUsers.length,\r\n page: pageIndex,\r\n pageSize: pageSize\r\n };\r\n }\r\n\r\n /**\r\n * Generate test users data\r\n * This should be removed when actual API is implemented\r\n */\r\n private generateTestUsers(): any[] {\r\n const testUsers = [];\r\n \r\n // Generate 50 test users for pagination demonstration\r\n for (let i = 1; i <= 50; i++) {\r\n testUsers.push({\r\n _id: `usr_${String(i).padStart(3, '0')}_2024_${String(i).padStart(3, '0')}`,\r\n user_entity_id_ent: `ent-${(i % 3) + 1}`,\r\n user_username: `user${i}`,\r\n user_firstname: `FirstName${i}`,\r\n user_middlename: i % 3 === 0 ? `Middle${i}` : undefined,\r\n user_lastname: `LastName${i}`,\r\n user_fullname: `FirstName${i} ${i % 3 === 0 ? `Middle${i} ` : ''}LastName${i}`,\r\n user_emailid: `user${i}@university.edu`,\r\n user_mobileno: `987654${String(i).padStart(4, '0')}`,\r\n user_activefrom: '2024-01-01',\r\n user_activeupto: i % 10 === 0 ? '2024-06-30' : '2025-12-31', // 10% expired users\r\n user_photo_id_cyfm: `photo_${i}`,\r\n user_passwordchangeonlogin: i % 5 === 0, // 20% require password change\r\n user_role_id_role: `role-${['teacher', 'student', 'admin'][i % 3]}`,\r\n user_designation_id_sydsg: `dsg-${['professor', 'student', 'administrator'][i % 3]}`,\r\n user_department_id_sydept: `dept-${['cs', 'math', 'physics'][i % 3]}`,\r\n user_permissions: [`menu_${['academic', 'students', 'admin'][i % 3]}`],\r\n user_entity_id_syen: [`ent-${(i % 3) + 1}`],\r\n user_isactive: i % 7 !== 0, // ~85% active users\r\n entity_name: ['Main Campus', 'North Campus', 'South Campus'][i % 3],\r\n role_name: ['Teacher', 'Student', 'Admin'][i % 3],\r\n designation_name: ['Professor', 'Graduate Student', 'Administrator'][i % 3],\r\n department_name: ['Computer Science', 'Mathematics', 'Physics'][i % 3],\r\n addressCount: (i % 3) + 1,\r\n documentCount: (i % 5) + 1,\r\n familyCount: (i % 4) + 1\r\n });\r\n }\r\n \r\n return testUsers;\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { cidePath, coreRoutesUrl, hostManagerRoutesUrl } from 'cloud-ide-lms-model';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EntitySelectService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get entity options for user master form\r\n * @returns Observable of entity options\r\n */\r\n getEntityOptions(): Observable<any> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost, \r\n coreRoutesUrl.module, \r\n 'entity-select'\r\n ]);\r\n \r\n console.log('🏢 ENTITY SELECT SERVICE: Making API call to:', url);\r\n \r\n // For now, return simulated data\r\n return new Observable(observer => {\r\n setTimeout(() => {\r\n observer.next({\r\n success: true,\r\n data: [\r\n { value: 'ent-1', label: 'Main Campus' },\r\n { value: 'ent-2', label: 'Branch Campus' },\r\n { value: 'ent-3', label: 'Online Division' }\r\n ]\r\n });\r\n observer.complete();\r\n }, 300);\r\n });\r\n \r\n // Uncomment when actual API endpoint is available:\r\n // return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get entity list with default parameters\r\n * @returns Observable of entity list\r\n */\r\n getAllEntities(): Observable<any> {\r\n return this.getEntityOptions();\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { cidePath, coreRoutesUrl, hostManagerRoutesUrl } from 'cloud-ide-lms-model';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class RoleSelectService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get role options for user master form\r\n * @returns Observable of role options\r\n */\r\n getRoleOptions(): Observable<any> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost, \r\n coreRoutesUrl.module, \r\n 'role-select'\r\n ]);\r\n \r\n console.log('👥 ROLE SELECT SERVICE: Making API call to:', url);\r\n \r\n // For now, return simulated data\r\n return new Observable(observer => {\r\n setTimeout(() => {\r\n observer.next({\r\n success: true,\r\n data: [\r\n { value: 'role-admin', label: 'Administrator' },\r\n { value: 'role-teacher', label: 'Teacher' },\r\n { value: 'role-student', label: 'Student' },\r\n { value: 'role-staff', label: 'Staff' },\r\n { value: 'role-parent', label: 'Parent' }\r\n ]\r\n });\r\n observer.complete();\r\n }, 300);\r\n });\r\n \r\n // Uncomment when actual API endpoint is available:\r\n // return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get role list with default parameters\r\n * @returns Observable of role list\r\n */\r\n getAllRoles(): Observable<any> {\r\n return this.getRoleOptions();\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { cidePath, coreRoutesUrl, hostManagerRoutesUrl } from 'cloud-ide-lms-model';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DesignationSelectService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get designation options for user master form\r\n * @returns Observable of designation options\r\n */\r\n getDesignationOptions(): Observable<any> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost, \r\n coreRoutesUrl.module, \r\n 'designation-select'\r\n ]);\r\n \r\n console.log('🎓 DESIGNATION SELECT SERVICE: Making API call to:', url);\r\n \r\n // For now, return simulated data\r\n return new Observable(observer => {\r\n setTimeout(() => {\r\n observer.next({\r\n success: true,\r\n data: [\r\n { value: 'dsg-principal', label: 'Principal' },\r\n { value: 'dsg-professor', label: 'Professor' },\r\n { value: 'dsg-assistant-prof', label: 'Assistant Professor' },\r\n { value: 'dsg-lecturer', label: 'Lecturer' },\r\n { value: 'dsg-admin-officer', label: 'Administrative Officer' }\r\n ]\r\n });\r\n observer.complete();\r\n }, 300);\r\n });\r\n \r\n // Uncomment when actual API endpoint is available:\r\n // return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get designation list with default parameters\r\n * @returns Observable of designation list\r\n */\r\n getAllDesignations(): Observable<any> {\r\n return this.getDesignationOptions();\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { cidePath, coreRoutesUrl, hostManagerRoutesUrl } from 'cloud-ide-lms-model';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DepartmentSelectService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get department options for user master form\r\n * @returns Observable of department options\r\n */\r\n getDepartmentOptions(): Observable<any> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost, \r\n coreRoutesUrl.module, \r\n 'department-select'\r\n ]);\r\n \r\n console.log('🏢 DEPARTMENT SELECT SERVICE: Making API call to:', url);\r\n \r\n // For now, return simulated data\r\n return new Observable(observer => {\r\n setTimeout(() => {\r\n observer.next({\r\n success: true,\r\n data: [\r\n { value: 'dept-cs', label: 'Computer Science' },\r\n { value: 'dept-math', label: 'Mathematics' },\r\n { value: 'dept-english', label: 'English' },\r\n { value: 'dept-admin', label: 'Administration' },\r\n { value: 'dept-hr', label: 'Human Resources' }\r\n ]\r\n });\r\n observer.complete();\r\n }, 300);\r\n });\r\n \r\n // Uncomment when actual API endpoint is available:\r\n // return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get department list with default parameters\r\n * @returns Observable of department list\r\n */\r\n getAllDepartments(): Observable<any> {\r\n return this.getDepartmentOptions();\r\n }\r\n}\r\n","// User Management Services Export Index\nexport { CideAdmUserMasterService } from './cide-adm-user-master.service';\nexport { CideAdmUserMasterListService } from './cide-adm-user-master-list.service';\nexport { EntitySelectService } from './entity-select.service';\nexport { RoleSelectService } from './role-select.service';\nexport { DesignationSelectService } from './designation-select.service';\nexport { DepartmentSelectService } from './department-select.service';\n","import { Component, inject, signal, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { CideInputComponent, CideSelectComponent, CideTextareaComponent, CideEleButtonComponent, CideEleTabComponent, CideEleFileInputComponent } from 'cloud-ide-element';\nimport { \n CideAdmUserMasterService,\n EntitySelectService,\n RoleSelectService,\n DesignationSelectService,\n DepartmentSelectService\n} from '../../services';\nimport { CideIconComponent } from \"cloud-ide-element\";\n\n@Component({\n selector: 'cide-core-user-create',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideInputComponent,\n CideSelectComponent,\n CideTextareaComponent,\n CideEleButtonComponent,\n CideEleTabComponent,\n CideEleFileInputComponent,\n CideIconComponent\n ],\n templateUrl: './user-create.component.html'\n})\nexport class UserCreateComponent implements OnInit {\n private fb = inject(FormBuilder);\n private userMasterService = inject(CideAdmUserMasterService);\n private entitySelectService = inject(EntitySelectService);\n private roleSelectService = inject(RoleSelectService);\n private designationSelectService = inject(DesignationSelectService);\n private departmentSelectService = inject(DepartmentSelectService);\n\n userMasterForm: FormGroup;\n activeTab = signal('basic');\n loading = signal(false);\n \n contactAddresses = signal<any[]>([]);\n documents = signal<any[]>([]);\n familyDetails = signal<any[]>([]);\n entityMappings = signal<any[]>([]);\n menuRightsMap = signal<{[mappingIndex: string]: any[]}>({});\n \n constructor() {\n this.userMasterForm = this.fb.group({\n // Basic User Information from auth_user_mst table\n user_username: ['', [Validators.required, Validators.maxLength(20)]],\n user_firstname: ['', [Validators.required, Validators.maxLength(20)]],\n user_middlename: ['', Validators.maxLength(20)],\n user_lastname: ['', [Validators.required, Validators.maxLength(20)]],\n user_fullname: ['', [Validators.required, Validators.maxLength(62)]],\n user_emailid: ['', [Validators.required, Validators.email, Validators.maxLength(320)]],\n user_mobileno: ['', [Validators.required, Validators.maxLength(15)]],\n user_password: ['', [Validators.required, Validators.minLength(8)]],\n user_activefrom: ['', Validators.required],\n user_activeupto: [''],\n user_photo_id_cyfm: [''],\n user_passwordchangeonlogin: [false],\n\n user_designation_id_sydsg: [''],\n user_department_id_sydept: [''],\n user_isactive: [true],\n \n // Related data arrays will be handled separately\n // as they are managed through signals in the template\n });\n }\n\n userTabs() {\n return [\n { id: 'basic', label: 'User Details', icon: 'person' },\n { id: 'auth', label: 'Authentication', icon: 'security' },\n { id: 'roles', label: 'Entity-Role Mapping', icon: 'admin_panel_settings' },\n { id: 'addresses', label: 'Contact Addresses', icon: 'location_on' },\n { id: 'documents', label: 'Documents', icon: 'description' },\n { id: 'family', label: 'Family Details', icon: 'family_restroom' }\n ];\n }\n\n entityOptions = signal<any[]>([]);\n roleOptions = signal<any[]>([]);\n designationOptions = signal<any[]>([]);\n departmentOptions = signal<any[]>([]);\n menuOptions = signal<any[]>([]);\n permissionOptions = signal<any[]>([]);\n entityRoleMap = signal<{[entityId: string]: any[]}>({});\n\n ngOnInit() {\n this.loadDropdownOptions();\n }\n\n private loadDropdownOptions() {\n // Load entity options\n this.entitySelectService.getEntityOptions().subscribe({\n next: (response) => {\n if (response?.success) {\n this.entityOptions.set(response.data);\n }\n },\n error: (error) => console.error('Error loading entities:', error)\n });\n\n // Load role options\n this.roleSelectService.getRoleOptions().subscribe({\n next: (response) => {\n if (response?.success) {\n this.roleOptions.set(response.data);\n }\n },\n error: (error) => console.error('Error loading roles:', error)\n });\n\n // Load designation options\n this.designationSelectService.getDesignationOptions().subscribe({\n next: (response) => {\n if (response?.success) {\n this.designationOptions.set(response.data);\n }\n },\n error: (error) => console.error('Error loading designations:', error)\n });\n\n // Load department options\n this.departmentSelectService.getDepartmentOptions().subscribe({\n next: (response) => {\n if (response?.success) {\n this.departmentOptions.set(response.data);\n }\n },\n error: (error) => console.error('Error loading departments:', error)\n });\n\n // Load menu options (simulated data)\n this.menuOptions.set([\n { value: 'user-management', label: 'User Management', menu_code: 'USRMGT' },\n { value: 'entity-management', label: 'Entity Management', menu_code: 'ENTMGT' },\n { value: 'role-management', label: 'Role Management', menu_code: 'ROLMGT' },\n { value: 'reports', label: 'Reports', menu_code: 'RPTS' },\n { value: 'settings', label: 'Settings', menu_code: 'STGS' },\n { value: 'dashboard', label: 'Dashboard', menu_code: 'DASH' },\n { value: 'file-manager', label: 'File Manager', menu_code: 'FMGR' }\n ]);\n\n // Load permission options (simulated data)\n this.permissionOptions.set([\n { value: 'create', label: 'Create' },\n { value: 'read', label: 'Read' },\n { value: 'update', label: 'Update' },\n { value: 'delete', label: 'Delete' },\n { value: 'approve', label: 'Approve' },\n { value: 'reject', label: 'Reject' }\n ]);\n }\n\n addressTypeOptions() {\n return [\n { value: 'permanent', label: 'Permanent' },\n { value: 'present', label: 'Present' },\n { value: 'emergency', label: 'Emergency' }\n ];\n }\n\n relationshipOptions() {\n return [\n { value: 'father', label: 'Father' },\n { value: 'mother', label: 'Mother' },\n { value: 'spouse', label: 'Spouse' },\n { value: 'child', label: 'Child' },\n { value: 'sibling', label: 'Sibling' }\n ];\n }\n \n onTabChange(tab: any) {\n this.activeTab.set(tab.id);\n }\n\n // Entity Mapping Methods\n addEntityMapping() {\n const newMapping = {\n syenm_id_syen: '',\n syenm_role_id_syusrol: '',\n syenm_isdefault: false,\n syenm_isactive: true,\n syenm_isloggedin: true,\n exceptions: []\n };\n \n this.entityMappings.update(mappings => [...mappings, newMapping]);\n \n const currentMappings = this.entityMappings();\n const index = currentMappings.length - 1;\n \n // Add form controls for the new entity mapping\n this.userMasterForm.addControl(`entity_mappings.${index}.syenm_id_syen`, this.fb.control('', Validators.required));\n this.userMasterForm.addControl(`entity_mappings.${index}.syenm_role_id_syusrol`, this.fb.control('', Validators.required));\n this.userMasterForm.addControl(`entity_mappings.${index}.syenm_isdefault`, this.fb.control(false));\n this.userMasterForm.addControl(`entity_mappings.${index}.syenm_isactive`, this.fb.control(true));\n this.userMasterForm.addControl(`entity_mappings.${index}.syenm_isloggedin`, this.fb.control(true));\n }\n \n removeEntityMapping(index: number) {\n // Remove menu rights first\n this.clearMenuRightsForMapping(index);\n \n // Remove permission exceptions\n const mapping = this.entityMappings()[index];\n if (mapping.exceptions) {\n for (let j = 0; j < mapping.exceptions.length; j++) {\n this.removePermissionExceptionControls(index, j);\n }\n }\n \n // Remove entity mapping form controls\n this.userMasterForm.removeControl(`entity_mappings.${index}.syenm_id_syen`);\n this.userMasterForm.removeControl(`entity_mappings.${index}.syenm_role_id_syusrol`);\n this.userMasterForm.removeControl(`entity_mappings.${index}.syenm_isdefault`);\n this.userMasterForm.removeControl(`entity_mappings.${index}.syenm_isactive`);\n this.userMasterForm.removeControl(`entity_mappings.${index}.syenm_isloggedin`);\n \n this.entityMappings.update(mappings => mappings.filter((_, i) => i !== index));\n }\n\n onEntityChange(mappingIndex: number, event: any) {\n // When entity changes, filter roles based on entity\n // This would typically make an API call to get roles for the selected entity\n const entityId = event?.value || event;\n console.log(`Entity changed for mapping ${mappingIndex}:`, entityId);\n \n // Clear menu rights for this mapping when entity changes\n this.clearMenuRightsForMapping(mappingIndex);\n \n // For now, we'll use all available roles\n // In a real implementation, you'd filter roles based on the entity\n }\n\n getRoleOptionsForEntity(mappingIndex: number): any[] {\n // In a real implementation, this would return roles filtered by the selected entity\n // For now, return all roles\n return this.roleOptions();\n }\n\n // Permission Exception Methods\n addPermissionException(mappingIndex: number) {\n const newException = {\n syusrex_menu_id_syme: '',\n syusrex_role_permissions_id_sygms: '',\n syusrex_isactive: true\n };\n\n // Update the entity mapping with the new exception\n this.entityMappings.update(mappings => {\n const updatedMappings = [...mappings];\n if (!updatedMappings[mappingIndex].exceptions) {\n updatedMappings[mappingIndex].exceptions = [];\n }\n updatedMappings[mappingIndex].exceptions.push(newException);\n return updatedMappings;\n });\n\n // Add form controls for the new exception\n const currentMapping = this.entityMappings()[mappingIndex];\n const exceptionIndex = currentMapping.exceptions.length - 1;\n \n this.userMasterForm.addControl(`entity_mappings.${mappingIndex}.exceptions.${exceptionIndex}.syusrex_menu_id_syme`, this.fb.control(''));\n this.userMasterForm.addControl(`entity_mappings.${mappingIndex}.exceptions.${exceptionIndex}.syusrex_role_permissions_id_sygms`, this.fb.control(''));\n this.userMasterForm.addControl(`entity_mappings.${mappingIndex}.exceptions.${exceptionIndex}.syusrex_isactive`, this.fb.control(true));\n }\n\n removePermissionException(mappingIndex: number, exceptionIndex: number) {\n // Remove form controls\n this.removePermissionExceptionControls(mappingIndex, exceptionIndex);\n \n // Update the entity mapping by removing the exception\n this.entityMappings.update(mappings => {\n const updatedMappings = [...mappings];\n updatedMappings[mappingIndex].exceptions = updatedMappings[mappingIndex].exceptions.filter((_: any, i: number) => i !== exceptionIndex);\n return updatedMappings;\n });\n }\n\n private removePermissionExceptionControls(mappingIndex: number, exceptionIndex: number) {\n this.userMasterForm.removeControl(`entity_mappings.${mappingIndex}.exceptions.${exceptionIndex}.syusrex_menu_id_syme`);\n this.userMasterForm.removeControl(`entity_mappings.${mappingIndex}.exceptions.${exceptionIndex}.syusrex_role_permissions_id_sygms`);\n this.userMasterForm.removeControl(`entity_mappings.${mappingIndex}.exceptions.${exceptionIndex}.syusrex_isactive`);\n }\n\n getPermissionExceptions(mappingIndex: number): any[] {\n const mapping = this.entityMappings()[mappingIndex];\n return mapping?.exceptions || [];\n }\n\n // Menu Rights Methods\n getMenuRightsForMapping(mappingIndex: number): any[] {\n const menuRights = this.menuRightsMap();\n return menuRights[mappingIndex.toString()] || [];\n }\n\n loadMenuRights(mappingIndex: number) {\n const mapping = this.entityMappings()[mappingIndex];\n if (!mapping.syenm_id_syen || !mapping.syenm_role_id_syusrol) {\n console.warn('Entity and Role must be selected before loading menu rights');\n return;\n }\n\n // Simulate API call to get menu rights for entity-role combination\n // In real implementation, this would call a service\n const simulatedMenuRights = [\n {\n menu_id: 'user-management',\n menu_name: 'User Management',\n menu_code: 'USRMGT',\n role_rights: ['create', 'read', 'update'],\n exceptions: []\n },\n {\n menu_id: 'entity-management',\n menu_name: 'Entity Management',\n menu_code: 'ENTMGT',\n role_rights: ['read', 'update'],\n exceptions: []\n },\n {\n menu_id: 'role-management',\n menu_name: 'Role Management',\n menu_code: 'ROLMGT',\n role_rights: ['read'],\n exceptions: []\n },\n {\n menu_id: 'reports',\n menu_name: 'Reports',\n menu_code: 'RPTS',\n role_rights: ['read'],\n exceptions: []\n },\n {\n menu_id: 'dashboard',\n menu_name: 'Dashboard',\n menu_code: 'DASH',\n role_rights: ['read'],\n exceptions: []\n }\n ];\n\n // Update menu rights map\n this.menuRightsMap.update(map => ({\n ...map,\n [mappingIndex.toString()]: simulatedMenuRights\n }));\n\n // Add form controls for menu rights\n simulatedMenuRights.forEach((menuRight, j) => {\n this.userMasterForm.addControl(`entity_mappings.${mappingIndex}.menu_rights.${j}.create`, \n this.fb.control(menuRight.role_rights.includes('create')));\n this.userMasterForm.addControl(`entity_mappings.${mappingIndex}.menu_rights.${j}.read`, \n this.fb.control(menuRight.role_rights.includes('read')));\n this.userMasterForm.addControl(`entity_mappings.${mappingIndex}.menu_rights.${j}.update`, \n this.fb.control(menuRight.role_rights.includes('update')));\n this.userMasterForm.addControl(`entity_mappings.${mappingIndex}.menu_rights.${j}.delete`, \n this.fb.control(menuRight.role_rights.includes('delete')));\n });\n\n console.log('Menu rights loaded for mapping', mappingIndex);\n }\n\n refreshMenuRights(mappingIndex: number) {\n this.clearMenuRightsForMapping(mappingIndex);\n this.loadMenuRights(mappingIndex);\n }\n\n clearMenuRightsForMapping(mappingIndex: number) {\n const currentMenuRights = this.getMenuRightsForMapping(mappingIndex);\n \n // Remove form controls for menu rights\n currentMenuRights.forEach((_, j) => {\n this.userMasterForm.removeControl(`entity_mappings.${mappingIndex}.menu_rights.${j}.create`);\n this.userMasterForm.removeControl(`entity_mappings.${mappingIndex}.menu_rights.${j}.read`);\n this.userMasterForm.removeControl(`entity_mappings.${mappingIndex}.menu_rights.${j}.update`);\n this.userMasterForm.removeControl(`entity_mappings.${mappingIndex}.menu_rights.${j}.delete`);\n });\n\n // Clear from menu rights map\n this.menuRightsMap.update(map => {\n const updatedMap = { ...map };\n delete updatedMap[mappingIndex.toString()];\n return updatedMap;\n });\n }\n\n hasRoleRight(menuRight: any, permission: string): boolean {\n return menuRight.role_rights.includes(permission);\n }\n\n canOverrideRight(menuRight: any, permission: string): boolean {\n // In a real implementation, this would check if the user can override this specific right\n // For now, allow override for all permissions\n return true;\n }\n\n hasExceptionForMenu(mappingIndex: number, menuId: string): boolean {\n const exceptions = this.getPermissionExceptions(mappingIndex);\n return exceptions.some(ex => ex.syusrex_menu_id_syme === menuId);\n }\n\n // Default Entity Management\n onDefaultEntityChange(mappingIndex: number, event: any) {\n const isDefault = event?.target?.checked || event?.checked || event;\n if (isDefault) {\n // Ensure only one entity can be default\n this.entityMappings.update(mappings => {\n return mappings.map((mapping, index) => {\n if (index === mappingIndex) {\n return { ...mapping, syenm_isdefault: true };\n } else {\n return { ...mapping, syenm_isdefault: false };\n }\n });\n });\n\n // Update other form controls to reflect the change\n const currentMappings = this.entityMappings();\n currentMappings.forEach((_, i) => {\n const defaultControl = this.userMasterForm.get(`entity_mappings.${i}.syenm_isdefault`);\n if (defaultControl) {\n defaultControl.setValue(i === mappingIndex);\n }\n });\n\n console.log(`Entity mapping ${mappingIndex} set as default. All others unset.`);\n }\n }\n\n getDefaultEntityName(): string {\n const defaultMapping = this.entityMappings().find(mapping => mapping.syenm_isdefault);\n if (defaultMapping) {\n const entity = this.entityOptions().find(opt => opt.value === defaultMapping.syenm_id_syen);\n return entity?.label || 'Unknown Entity';\n }\n return 'No default entity set';\n }\n\n hasDefaultEntity(): boolean {\n return this.entityMappings().some(mapping => mapping.syenm_isdefault);\n }\n \n addContactAddress() {\n const newAddress = {\n sycad_contact_person_name: '',\n sycad_address_type_id_sygms: '',\n sycad_contact_address: '',\n sycad_contact_phone: '',\n sycad_contact_email: ''\n };\n \n this.contactAddresses.update(addresses => [...addresses, newAddress]);\n \n // Add form controls for the new address\n const currentAddresses = this.contactAddresses();\n const index = currentAddresses.length - 1;\n \n this.userMasterForm.addControl(`contact_addresses.${index}.sycad_contact_person_name`, this.fb.control(''));\n this.userMasterForm.addControl(`contact_addresses.${index}.sycad_address_type_id_sygms`, this.fb.control(''));\n this.userMasterForm.addControl(`contact_addresses.${index}.sycad_contact_address`, this.fb.control(''));\n this.userMasterForm.addControl(`contact_addresses.${index}.sycad_contact_phone`, this.fb.control(''));\n this.userMasterForm.addControl(`contact_addresses.${index}.sycad_contact_email`, this.fb.control(''));\n }\n \n removeContactAddress(index: number) {\n // Remove form controls\n this.userMasterForm.removeControl(`contact_addresses.${index}.sycad_contact_person_name`);\n this.userMasterForm.removeControl(`contact_addresses.${index}.sycad_address_type_id_sygms`);\n this.userMasterForm.removeControl(`contact_addresses.${index}.sycad_contact_address`);\n this.userMasterForm.removeControl(`contact_addresses.${index}.sycad_contact_phone`);\n this.userMasterForm.removeControl(`contact_addresses.${index}.sycad_contact_email`);\n \n this.contactAddresses.update(addresses => addresses.filter((_, i) => i !== index));\n }\n \n addDocument() {\n const newDocument = {\n syusd_doc_number: '',\n syusd_doc_name_as_per_doc: '',\n syusd_doc_issue_date: '',\n syusd_doc_expiry_date: ''\n };\n \n this.documents.update(docs => [...docs, newDocument]);\n \n // Add form controls for the new document\n const currentDocuments = this.documents();\n const index = currentDocuments.length - 1;\n \n this.userMasterForm.addControl(`documents.${index}.syusd_doc_number`, this.fb.control(''));\n this.userMasterForm.addControl(`documents.${index}.syusd_doc_name_as_per_doc`, this.fb.control(''));\n this.userMasterForm.addControl(`documents.${index}.syusd_doc_issue_date`, this.fb.control(''));\n this.userMasterForm.addControl(`documents.${index}.syusd_doc_expiry_date`, this.fb.control(''));\n }\n \n removeDocument(index: number) {\n // Remove form controls\n this.userMasterForm.removeControl(`documents.${index}.syusd_doc_number`);\n this.userMasterForm.removeControl(`documents.${index}.syusd_doc_name_as_per_doc`);\n this.userMasterForm.removeControl(`documents.${index}.syusd_doc_issue_date`);\n this.userMasterForm.removeControl(`documents.${index}.syusd_doc_expiry_date`);\n \n this.documents.update(docs => docs.filter((_, i) => i !== index));\n }\n \n addFamilyDetail() {\n const newFamily = {\n syfdl_family_member_name: '',\n syfdl_relationship_id_sygms: '',\n syfdl_family_member_dob: '',\n syfdl_contact_number: ''\n };\n \n this.familyDetails.update(families => [...families, newFamily]);\n \n // Add form controls for the new family detail\n const currentFamilies = this.familyDetails();\n const index = currentFamilies.length - 1;\n \n this.userMasterForm.addControl(`family_details.${index}.syfdl_family_member_name`, this.fb.control(''));\n this.userMasterForm.addControl(`family_details.${index}.syfdl_relationship_id_sygms`, this.fb.control(''));\n this.userMasterForm.addControl(`family_details.${index}.syfdl_family_member_dob`, this.fb.control(''));\n this.userMasterForm.addControl(`family_details.${index}.syfdl_contact_number`, this.fb.control(''));\n }\n \n removeFamilyDetail(index: number) {\n // Remove form controls\n this.userMasterForm.removeControl(`family_details.${index}.syfdl_family_member_name`);\n this.userMasterForm.removeControl(`family_details.${index}.syfdl_relationship_id_sygms`);\n this.userMasterForm.removeControl(`family_details.${index}.syfdl_family_member_dob`);\n this.userMasterForm.removeControl(`family_details.${index}.syfdl_contact_number`);\n \n this.familyDetails.update(families => families.filter((_, i) => i !== index));\n }\n \n onSubmit() {\n // Custom validation: ensure at least one entity mapping exists\n if (this.entityMappings().length === 0) {\n console.warn('At least one entity mapping is required for user access.');\n return;\n }\n\n // Custom validation: ensure one entity is set as default\n if (!this.hasDefaultEntity()) {\n console.warn('One entity must be set as default for user access.');\n return;\n }\n\n if (this.userMasterForm.valid) {\n this.loading.set(true);\n \n // Prepare form data with entity mappings and menu rights\n const formData = {\n ...this.userMasterForm.value,\n entity_mappings: this.entityMappings(),\n menu_rights: this.menuRightsMap()\n };\n \n // Use the service to save user master\n this.userMasterService.saveUpdateUserMaster(formData)\n .subscribe({\n next: (response) => {\n console.log('✅ User master saved successfully:', response);\n this.loading.set(false);\n // Reset form after successful save\n this.resetForm();\n },\n error: (error) => {\n console.error('❌ Error saving user master:', error);\n this.loading.set(false);\n }\n });\n } else {\n console.warn('Form is invalid. Please fill in all required fields.');\n }\n }\n \n resetForm() {\n // Clear dynamic form controls first\n const addressCount = this.contactAddresses().length;\n for (let i = 0; i < addressCount; i++) {\n this.userMasterForm.removeControl(`contact_addresses.${i}.sycad_contact_person_name`);\n this.userMasterForm.removeControl(`contact_addresses.${i}.sycad_address_type_id_sygms`);\n this.userMasterForm.removeControl(`contact_addresses.${i}.sycad_contact_address`);\n this.userMasterForm.removeControl(`contact_addresses.${i}.sycad_contact_phone`);\n this.userMasterForm.removeControl(`contact_addresses.${i}.sycad_contact_email`);\n }\n \n const docCount = this.documents().length;\n for (let i = 0; i < docCount; i++) {\n this.userMasterForm.removeControl(`documents.${i}.syusd_doc_number`);\n this.userMasterForm.removeControl(`documents.${i}.syusd_doc_name_as_per_doc`);\n this.userMasterForm.removeControl(`documents.${i}.syusd_doc_issue_date`);\n this.userMasterForm.removeControl(`documents.${i}.syusd_doc_expiry_date`);\n }\n \n const familyCount = this.familyDetails().length;\n for (let i = 0; i < familyCount; i++) {\n this.userMasterForm.removeControl(`family_details.${i}.syfdl_family_member_name`);\n this.userMasterForm.removeControl(`family_details.${i}.syfdl_relationship_id_sygms`);\n this.userMasterForm.removeControl(`family_details.${i}.syfdl_family_member_dob`);\n this.userMasterForm.removeControl(`family_details.${i}.syfdl_contact_number`);\n }\n \n // Clear entity mapping controls\n const entityMappingCount = this.entityMappings().length;\n for (let i = 0; i < entityMappingCount; i++) {\n // Clear menu rights first\n this.clearMenuRightsForMapping(i);\n \n const mapping = this.entityMappings()[i];\n \n // Remove exception controls\n if (mapping.exceptions) {\n for (let j = 0; j < mapping.exceptions.length; j++) {\n this.removePermissionExceptionControls(i, j);\n }\n }\n \n // Remove entity mapping controls\n this.userMasterForm.removeControl(`entity_mappings.${i}.syenm_id_syen`);\n this.userMasterForm.removeControl(`entity_mappings.${i}.syenm_role_id_syusrol`);\n this.userMasterForm.removeControl(`entity_mappings.${i}.syenm_isdefault`);\n this.userMasterForm.removeControl(`entity_mappings.${i}.syenm_isactive`);\n this.userMasterForm.removeControl(`entity_mappings.${i}.syenm_isloggedin`);\n }\n \n this.userMasterForm.reset();\n this.contactAddresses.set([]);\n this.documents.set([]);\n this.familyDetails.set([]);\n this.entityMappings.set([]);\n this.menuRightsMap.set({});\n }\n}\n","<!-- \r\n ENTERPRISE USER MASTER FORM\r\n \r\n Enterprise-Level Styling with Tailwind CSS\r\n Features: Responsive grids, proper typography, enhanced user experience\r\n-->\r\n\r\n<div class=\"tw-w-full tw-h-full tw-p-3\">\r\n <form class=\"tw-max-w-7xl tw-mx-auto tw-bg-transparent\" [formGroup]=\"userMasterForm\" [class.tw-opacity-60]=\"loading()\"\r\n (ngSubmit)=\"onSubmit()\">\r\n <!-- Tab Navigation -->\r\n <div class=\"tw-p-0 tw-mb-2 tw-border-b tw-border-gray-200\">\r\n <cide-ele-tab [tabs]=\"userTabs()\" [activeTabId]=\"activeTab()\" size=\"md\" variant=\"default\"\r\n (tabChange)=\"onTabChange($event)\">\r\n </cide-ele-tab>\r\n </div>\r\n\r\n <!-- Tab Content -->\r\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\r\n @switch (activeTab()) {\r\n\r\n @case ('basic') {\r\n <!-- User Basic Information Section -->\r\n <div class=\"tw-py-2 tw-border-b-0 tw-mb-2\">\r\n\r\n <!-- Name Fields -->\r\n <div class=\"tw-grid tw-grid-cols-1 xl:tw-grid-cols-4 lg:tw-grid-cols-2 md:tw-grid-cols-2 tw-gap-6 tw-mb-6\">\r\n <cide-ele-input id=\"user_firstname\" label=\"First Name *\" formControlName=\"user_firstname\"\r\n placeholder=\"Enter first name\" [maxlength]=\"20\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_middlename\" label=\"Middle Name\" formControlName=\"user_middlename\"\r\n placeholder=\"Enter middle name\" [maxlength]=\"20\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_lastname\" label=\"Last Name *\" formControlName=\"user_lastname\"\r\n placeholder=\"Enter last name\" [maxlength]=\"20\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_fullname\" label=\"Full Name *\" formControlName=\"user_fullname\"\r\n placeholder=\"Auto-generated or enter manually\" [maxlength]=\"62\" size=\"md\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Contact and Login Information -->\r\n <div class=\"tw-grid tw-grid-cols-1 xl:tw-grid-cols-3 lg:tw-grid-cols-2 md:tw-grid-cols-2 tw-gap-6 tw-mb-6\">\r\n <cide-ele-input id=\"user_username\" label=\"Username *\" formControlName=\"user_username\"\r\n placeholder=\"Enter unique username\" [maxlength]=\"20\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_emailid\" label=\"Email ID *\" formControlName=\"user_emailid\" type=\"email\"\r\n placeholder=\"Enter valid email address\" [maxlength]=\"320\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_mobileno\" label=\"Mobile Number *\" formControlName=\"user_mobileno\" type=\"tel\"\r\n placeholder=\"Enter mobile number\" [maxlength]=\"15\" size=\"md\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Active Period -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 md:tw-grid-cols-2 tw-gap-6 tw-mb-2\">\r\n <cide-ele-input id=\"user_activefrom\" label=\"Active From *\" formControlName=\"user_activefrom\" type=\"date\"\r\n size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_activeupto\" label=\"Active Until\" formControlName=\"user_activeupto\" type=\"date\"\r\n size=\"md\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Status Control -->\r\n <div class=\"tw-grid tw-grid-cols-1 tw-mb-4\">\r\n <div class=\"tw-p-4 tw-bg-blue-50 tw-border tw-border-blue-100 tw-rounded-lg\">\r\n <label\r\n class=\"tw-flex tw-flex-col tw-cursor-pointer tw-py-2 tw-bg-transparent tw-border-none tw-rounded-none tw-transition-all tw-duration-200 hover:tw-bg-blue-75\">\r\n <cide-ele-input type=\"checkbox\" label=\"Active User Status\" formControlName=\"user_isactive\"\r\n class=\"tw-h-5 tw-accent-blue-500 tw-rounded tw-mb-1\" />\r\n <span class=\"tw-font-semibold tw-text-gray-700 tw-text-base\"></span>\r\n <span class=\"tw-text-sm tw-text-gray-600 tw-mt-1 tw-leading-relaxed\">Enable this user account for system\r\n access and operations</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('auth') {\r\n <!-- Authentication Section -->\r\n <div class=\"tw-py-2 tw-border-b-0 tw-mb-2\">\r\n <!-- Password Fields -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 md:tw-grid-cols-1 tw-gap-6 tw-mb-6\">\r\n <cide-ele-input id=\"user_password\" label=\"Password *\" formControlName=\"user_password\" type=\"password\"\r\n placeholder=\"Enter secure password (min 8 characters)\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <div class=\"tw-p-4 tw-bg-yellow-50 tw-border tw-border-yellow-100 tw-rounded-lg\">\r\n <label\r\n class=\"tw-flex tw-flex-col tw-gap-2 tw-cursor-pointer tw-py-2 tw-bg-transparent tw-border-none tw-rounded-none tw-transition-all tw-duration-200\">\r\n <cide-ele-input type=\"checkbox\" label=\"Force Password Change on Login\"\r\n formControlName=\"user_passwordchangeonlogin\" class=\"tw-h-5 tw-accent-yellow-500 tw-rounded tw-mb-1\" />\r\n <span class=\"tw-text-sm tw-text-gray-600 tw-mt-1 tw-leading-relaxed\">User will be required to change\r\n password on next login</span>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n <!-- Photo Upload -->\r\n <div class=\"tw-grid tw-grid-cols-1 tw-gap-6 tw-mb-6\">\r\n <div class=\"tw-bg-gray-50 tw-border tw-border-gray-200 tw-rounded-lg tw-p-4\">\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-800 tw-mb-3\">Profile Photo</h6>\r\n <div class=\"tw-flex tw-flex-col tw-items-center tw-gap-4\">\r\n <cide-ele-file-input \r\n id=\"user_photo_upload\"\r\n formControlName=\"user_photo_id_cyfm\"\r\n accept=\"image/*\"\r\n [showPreview]=\"true\"\r\n [previewBoxMode]=\"true\"\r\n previewWidth=\"150px\"\r\n previewHeight=\"150px\"\r\n placeholderText=\"Click to upload photo\"\r\n placeholderIcon=\"👤\">\r\n </cide-ele-file-input>\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-text-center tw-max-w-sm\">\r\n Supported formats: JPG, PNG, GIF. Maximum size: 2MB. Recommended size: 150x150px for best results.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('roles') {\r\n <!-- Entity, Roles & Permissions Mapping Section -->\r\n <div class=\"tw-py-2 tw-border-b-0 tw-mb-2\">\r\n\r\n <!-- User Basic Information -->\r\n <div class=\"tw-grid tw-grid-cols-1 xl:tw-grid-cols-2 lg:tw-grid-cols-2 md:tw-grid-cols-2 tw-gap-6 tw-mb-8\">\r\n <cide-ele-select id=\"user_designation_id_sydsg\" label=\"Designation\" [options]=\"designationOptions()\"\r\n formControlName=\"user_designation_id_sydsg\" placeholder=\"Select designation\" size=\"md\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-select id=\"user_department_id_sydept\" label=\"Department\" [options]=\"departmentOptions()\"\r\n formControlName=\"user_department_id_sydept\" placeholder=\"Select department\" size=\"md\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Important Note -->\r\n <div class=\"tw-bg-amber-50 tw-border tw-border-amber-200 tw-rounded-lg tw-p-4 tw-mb-6\">\r\n <div class=\"tw-flex tw-items-start tw-gap-3\">\r\n <cide-ele-icon variant=\"amber\" size=\"lg\">info</cide-ele-icon>\r\n <div class=\"tw-flex-1\">\r\n <h4 class=\"tw-text-sm tw-font-semibold tw-text-amber-800 tw-mb-1\">Entity-Role Based Access</h4>\r\n <p class=\"tw-text-sm tw-text-amber-700 tw-mb-2\">User access is completely managed through entity-role mappings below. At least one entity mapping is required for user access.</p>\r\n @if (hasDefaultEntity()) {\r\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-mt-2 tw-p-2 tw-bg-amber-100 tw-rounded\">\r\n <cide-ele-icon variant=\"amber\" size=\"sm\">star</cide-ele-icon>\r\n <span class=\"tw-text-sm tw-text-amber-800\">\r\n <strong>Default Entity:</strong> {{ getDefaultEntityName() }}\r\n </span>\r\n </div>\r\n } @else {\r\n <div class=\"tw-text-sm tw-text-amber-600 tw-mt-2 tw-italic\">\r\n ⚠️ No default entity selected. Please set one entity as default.\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Entity-Role Mapping Section -->\r\n <div class=\"tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-lg tw-p-6 tw-mb-6\">\r\n <div class=\"tw-flex tw-text-center tw-justify-between tw-items-center tw-mb-4\">\r\n <div class=\"tw-text-center\">\r\n <h4 class=\"tw-text-lg tw-font-semibold tw-text-blue-900 tw-mb-1\">Entity-Role Mapping</h4>\r\n <p class=\"tw-text-sm tw-text-blue-700\">Map user to entities with specific roles and permissions</p>\r\n </div>\r\n <button cideEleButton variant=\"primary\" size=\"md\" type=\"button\" (click)=\"addEntityMapping()\" leftIcon=\"add\">\r\n Add Entity Mapping\r\n </button>\r\n </div>\r\n\r\n @for (mapping of entityMappings(); track $index; let i = $index) {\r\n <div class=\"tw-bg-white tw-border tw-border-blue-200 tw-rounded-xl tw-mb-6 tw-overflow-hidden tw-shadow-sm\">\r\n <div class=\"tw-bg-gradient-to-r tw-from-blue-50 tw-to-blue-100 tw-px-6 tw-py-3 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-blue-200\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <h5 class=\"tw-m-0 tw-text-blue-800 tw-text-sm tw-font-semibold\">Entity Mapping {{ i + 1 }}</h5>\r\n @if (mapping.syenm_isdefault) {\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\r\n <cide-ele-icon variant=\"green\" size=\"xs\" class=\"tw-mr-1\">star</cide-ele-icon>\r\n Default\r\n </span>\r\n }\r\n </div>\r\n <button cideEleButton variant=\"danger\" size=\"sm\" type=\"button\" (click)=\"removeEntityMapping(i)\" leftIcon=\"delete\">\r\n Remove\r\n </button>\r\n </div>\r\n \r\n <div class=\"tw-p-6\">\r\n <!-- Entity and Role Selection -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6 tw-mb-6\">\r\n <cide-ele-select \r\n label=\"Entity *\" \r\n [options]=\"entityOptions()\"\r\n [formControlName]=\"'entity_mappings.' + i + '.syenm_id_syen'\"\r\n placeholder=\"Select entity\"\r\n size=\"md\"\r\n (valueChange)=\"onEntityChange(i, $event)\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-select \r\n label=\"Role for this Entity *\" \r\n [options]=\"getRoleOptionsForEntity(i)\"\r\n [formControlName]=\"'entity_mappings.' + i + '.syenm_role_id_syusrol'\"\r\n placeholder=\"Select role for this entity\"\r\n size=\"md\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Mapping Settings -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-6 tw-mb-6\">\r\n <div class=\"tw-p-3 tw-bg-green-50 tw-border tw-border-green-200 tw-rounded-lg\">\r\n <cide-ele-input \r\n type=\"checkbox\" \r\n label=\"Default Entity\" \r\n [formControlName]=\"'entity_mappings.' + i + '.syenm_isdefault'\"\r\n (change)=\"onDefaultEntityChange(i, $event)\"\r\n class=\"tw-h-5 tw-accent-green-500\" />\r\n <span class=\"tw-text-xs tw-text-green-600 tw-block tw-mt-1\">Set as user's default entity (only one allowed)</span>\r\n </div>\r\n\r\n <div class=\"tw-p-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-lg\">\r\n <cide-ele-input \r\n type=\"checkbox\" \r\n label=\"Active Mapping\" \r\n [formControlName]=\"'entity_mappings.' + i + '.syenm_isactive'\"\r\n class=\"tw-h-5 tw-accent-blue-500\" />\r\n <span class=\"tw-text-xs tw-text-blue-600 tw-block tw-mt-1\">Enable this entity mapping</span>\r\n </div>\r\n\r\n <div class=\"tw-p-3 tw-bg-purple-50 tw-border tw-border-purple-200 tw-rounded-lg\">\r\n <cide-ele-input \r\n type=\"checkbox\" \r\n label=\"Allow Login\" \r\n [formControlName]=\"'entity_mappings.' + i + '.syenm_isloggedin'\"\r\n class=\"tw-h-5 tw-accent-purple-500\" />\r\n <span class=\"tw-text-xs tw-text-purple-600 tw-block tw-mt-1\">User can login through this entity</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Menu Rights Grid for this Entity-Role -->\r\n <div class=\"tw-border-t tw-border-gray-200 tw-pt-4\">\r\n <div class=\"tw-flex tw-justify-between tw-items-center tw-mb-4\">\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-800\">Menu Rights & Permissions</h6>\r\n <div class=\"tw-flex tw-gap-2\">\r\n <button cideEleButton variant=\"secondary\" size=\"sm\" type=\"button\" (click)=\"refreshMenuRights(i)\" leftIcon=\"refresh\">\r\n Refresh Rights\r\n </button>\r\n </div>\r\n </div>\r\n\r\n @if (getMenuRightsForMapping(i).length > 0) {\r\n <!-- Menu Rights Grid -->\r\n <div class=\"tw-overflow-x-auto tw-bg-white tw-border tw-border-gray-200 tw-rounded-lg\">\r\n <table class=\"tw-w-full tw-text-sm\">\r\n <thead class=\"tw-bg-gray-50 tw-border-b tw-border-gray-200\">\r\n <tr>\r\n <th class=\"tw-px-4 tw-py-3 tw-text-left tw-font-medium tw-text-gray-700\">Menu</th>\r\n <th class=\"tw-px-3 tw-py-3 tw-text-center tw-font-medium tw-text-gray-700\">Role Rights</th>\r\n <th class=\"tw-px-3 tw-py-3 tw-text-center tw-font-medium tw-text-gray-700\">Create</th>\r\n <th class=\"tw-px-3 tw-py-3 tw-text-center tw-font-medium tw-text-gray-700\">Read</th>\r\n <th class=\"tw-px-3 tw-py-3 tw-text-center tw-font-medium tw-text-gray-700\">Update</th>\r\n <th class=\"tw-px-3 tw-py-3 tw-text-center tw-font-medium tw-text-gray-700\">Delete</th>\r\n <th class=\"tw-px-3 tw-py-3 tw-text-center tw-font-medium tw-text-gray-700\">Exception</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (menuRight of getMenuRightsForMapping(i); track $index; let j = $index) {\r\n <tr class=\"tw-border-b tw-border-gray-100 hover:tw-bg-gray-50\">\r\n <td class=\"tw-px-4 tw-py-3 tw-font-medium tw-text-gray-900\">\r\n {{ menuRight.menu_name }}\r\n <div class=\"tw-text-xs tw-text-gray-500\">{{ menuRight.menu_code }}</div>\r\n </td>\r\n \r\n <!-- Role Rights Display -->\r\n <td class=\"tw-px-3 tw-py-3 tw-text-center\">\r\n <div class=\"tw-flex tw-flex-wrap tw-justify-center tw-gap-1\">\r\n @for (right of menuRight.role_rights; track $index) {\r\n <span class=\"tw-inline-block tw-px-2 tw-py-1 tw-text-xs tw-bg-blue-100 tw-text-blue-800 tw-rounded\">\r\n {{ right }}\r\n </span>\r\n }\r\n </div>\r\n </td>\r\n\r\n <!-- Individual Permission Controls -->\r\n <td class=\"tw-px-3 tw-py-3 tw-text-center\">\r\n <cide-ele-input \r\n type=\"checkbox\" \r\n [formControlName]=\"'entity_mappings.' + i + '.menu_rights.' + j + '.create'\"\r\n class=\"tw-h-4 tw-accent-green-500\" />\r\n </td>\r\n\r\n <td class=\"tw-px-3 tw-py-3 tw-text-center\">\r\n <cide-ele-input \r\n type=\"checkbox\" \r\n [formControlName]=\"'entity_mappings.' + i + '.menu_rights.' + j + '.read'\"\r\n class=\"tw-h-4 tw-accent-blue-500\" />\r\n </td>\r\n\r\n <td class=\"tw-px-3 tw-py-3 tw-text-center\">\r\n <cide-ele-input \r\n type=\"checkbox\" \r\n [formControlName]=\"'entity_mappings.' + i + '.menu_rights.' + j + '.update'\"\r\n class=\"tw-h-4 tw-accent-yellow-500\" />\r\n </td>\r\n\r\n <td class=\"tw-px-3 tw-py-3 tw-text-center\">\r\n <cide-ele-input \r\n type=\"checkbox\" \r\n [formControlName]=\"'entity_mappings.' + i + '.menu_rights.' + j + '.delete'\"\r\n class=\"tw-h-4 tw-accent-red-500\" />\r\n </td>\r\n\r\n <td class=\"tw-px-3 tw-py-3 tw-text-center\">\r\n @if (hasExceptionForMenu(i, menuRight.menu_id)) {\r\n <span class=\"tw-inline-block tw-px-2 tw-py-1 tw-text-xs tw-bg-yellow-100 tw-text-yellow-800 tw-rounded\">\r\n Override\r\n </span>\r\n } @else {\r\n <span class=\"tw-text-xs tw-text-gray-400\">Default</span>\r\n }\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <!-- Legend -->\r\n <div class=\"tw-mt-4 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\r\n <h6 class=\"tw-text-xs tw-font-semibold tw-text-gray-700 tw-mb-2\">Legend:</h6>\r\n <div class=\"tw-grid tw-grid-cols-2 md:tw-grid-cols-4 tw-gap-3 tw-text-xs tw-text-gray-600\">\r\n <div><span class=\"tw-w-3 tw-h-3 tw-bg-blue-100 tw-inline-block tw-rounded tw-mr-2\"></span>Role Rights: Inherited from role</div>\r\n <div><span class=\"tw-w-3 tw-h-3 tw-bg-yellow-100 tw-inline-block tw-rounded tw-mr-2\"></span>Override: User-specific exception</div>\r\n <div><span class=\"tw-w-3 tw-h-3 tw-bg-green-100 tw-inline-block tw-rounded tw-mr-2\"></span>Enabled: Permission granted</div>\r\n <div><span class=\"tw-w-3 tw-h-3 tw-bg-gray-100 tw-inline-block tw-rounded tw-mr-2\"></span>Disabled: Permission restricted</div>\r\n </div>\r\n </div>\r\n\r\n } @else {\r\n <div class=\"tw-text-center tw-py-8 tw-bg-gray-50 tw-border tw-border-gray-200 tw-rounded-lg\">\r\n <div class=\"tw-text-gray-400 tw-mb-3\">\r\n <i class=\"material-icons tw-text-3xl\">menu</i>\r\n </div>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-600 tw-mb-2\">No Menu Rights Available</h6>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-mb-3 tw-text-center\">Select both entity and role to load menu rights for this mapping.</p>\r\n @if (mapping.syenm_id_syen && mapping.syenm_role_id_syusrol) {\r\n <button cideEleButton variant=\"primary\" size=\"sm\" type=\"button\" (click)=\"loadMenuRights(i)\" leftIcon=\"refresh\">\r\n Load Menu Rights\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (entityMappings().length === 0) {\r\n <div class=\"tw-text-center tw-py-8 tw-bg-white tw-border tw-border-blue-200 tw-rounded-lg\">\r\n <div class=\"tw-text-blue-400 tw-mb-3\">\r\n <cide-ele-icon variant=\"blue\" size=\"lg\">business</cide-ele-icon>\r\n </div>\r\n <h4 class=\"tw-text-lg tw-font-medium tw-text-blue-800 tw-mb-2\">No Entity Mappings</h4>\r\n <p class=\"tw-text-blue-600 tw-mb-4 tw-text-center\">Add entity mappings to assign specific roles and permissions for different entities.</p>\r\n <button class=\"tw-mx-auto\" cideEleButton variant=\"primary\" size=\"md\" type=\"button\" (click)=\"addEntityMapping()\" leftIcon=\"add\">\r\n Add First Entity Mapping\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Entity Relationship Info -->\r\n <div class=\"tw-bg-gray-50 tw-border tw-border-gray-200 tw-rounded-lg tw-p-4\">\r\n <h4 class=\"tw-text-sm tw-font-semibold tw-text-gray-800 tw-mb-2\">Entity Relationship Types</h4>\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-4 tw-text-xs tw-text-gray-600\">\r\n <div>\r\n <strong class=\"tw-text-green-600\">Direct Entity:</strong> User has direct access to this entity\r\n </div>\r\n <div>\r\n <strong class=\"tw-text-blue-600\">Child Entity:</strong> User has access through parent entity relationship\r\n </div>\r\n <div>\r\n <strong class=\"tw-text-purple-600\">Indirect Entity:</strong> User has access through complex entity hierarchy\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('addresses') {\r\n <!-- Contact Addresses Section -->\r\n <div class=\"tw-py-2 tw-border-b-0 tw-mb-2\">\r\n <div class=\"tw-flex tw-justify-end\">\r\n <div class=\"tw-flex tw-justify-between tw-items-end tw-mb-2 tw-gap-4\">\r\n <button cideEleButton variant=\"primary\" size=\"md\" type=\"button\" (click)=\"addContactAddress()\"\r\n leftIcon=\"add\">\r\n Add New Address\r\n </button>\r\n </div>\r\n </div>\r\n\r\n @for (address of contactAddresses(); track $index; let i = $index) {\r\n <div\r\n class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-xl tw-mb-8 tw-overflow-hidden tw-transition-all tw-duration-300 hover:tw-shadow-lg tw-shadow-sm\">\r\n <div\r\n class=\"tw-bg-gradient-to-r tw-from-gray-50 tw-to-gray-100 tw-px-6 tw-py-1 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-gray-200\">\r\n <h4 class=\"tw-m-0 tw-text-gray-700 tw-text-sm tw-font-semibold tw-tracking-tight\">Address {{ i + 1 }}</h4>\r\n <button cideEleButton variant=\"danger\" size=\"sm\" type=\"button\" (click)=\"removeContactAddress(i)\"\r\n leftIcon=\"delete\">\r\n Remove\r\n </button>\r\n </div>\r\n <div class=\"tw-p-6\">\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6 tw-mb-6\">\r\n <cide-ele-input label=\"Contact Person Name\"\r\n [formControlName]=\"'contact_addresses.' + i + '.sycad_contact_person_name'\"\r\n placeholder=\"Enter contact person name\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Address Type\" [options]=\"addressTypeOptions()\"\r\n [formControlName]=\"'contact_addresses.' + i + '.sycad_address_type_id_sygms'\"\r\n placeholder=\"Select address type\" size=\"md\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 tw-mb-6\">\r\n <cide-ele-textarea label=\"Complete Address\"\r\n [formControlName]=\"'contact_addresses.' + i + '.sycad_contact_address'\"\r\n placeholder=\"Enter complete address with area, city, and landmarks\" [rows]=\"3\" size=\"md\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\r\n <cide-ele-input label=\"Contact Phone\"\r\n [formControlName]=\"'contact_addresses.' + i + '.sycad_contact_phone'\" type=\"tel\"\r\n placeholder=\"Enter contact phone number\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Contact Email\"\r\n [formControlName]=\"'contact_addresses.' + i + '.sycad_contact_email'\" type=\"email\"\r\n placeholder=\"Enter contact email address\" size=\"md\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @case ('documents') {\r\n <!-- Documents Section -->\r\n <div class=\"tw-py-2 tw-border-b-0 tw-mb-2\">\r\n <div class=\"tw-flex tw-justify-end tw-items-end tw-mb-2 tw-gap-4\">\r\n <button cideEleButton variant=\"primary\" size=\"md\" type=\"button\" (click)=\"addDocument()\" leftIcon=\"add\">\r\n Add Document\r\n </button>\r\n </div>\r\n\r\n @for (doc of documents(); track $index; let i = $index) {\r\n <div\r\n class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-xl tw-mb-8 tw-overflow-hidden tw-transition-all tw-duration-300 hover:tw-shadow-lg tw-shadow-sm\">\r\n <div\r\n class=\"tw-bg-gradient-to-r tw-from-gray-50 tw-to-gray-100 tw-px-6 tw-py-1 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-gray-200\">\r\n <h4 class=\"tw-m-0 tw-text-gray-700 tw-text-sm tw-font-semibold tw-tracking-tight\">Document {{ i + 1 }}</h4>\r\n <button cideEleButton variant=\"danger\" size=\"sm\" type=\"button\" (click)=\"removeDocument(i)\"\r\n leftIcon=\"delete\">\r\n Remove\r\n </button>\r\n </div>\r\n <div class=\"tw-p-6\">\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6 tw-mb-6\">\r\n <cide-ele-input label=\"Document Number\" [formControlName]=\"'documents.' + i + '.syusd_doc_number'\"\r\n placeholder=\"Enter document number\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Name as per Document\"\r\n [formControlName]=\"'documents.' + i + '.syusd_doc_name_as_per_doc'\"\r\n placeholder=\"Enter name exactly as shown on document\" size=\"md\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\r\n <cide-ele-input label=\"Issue Date\" [formControlName]=\"'documents.' + i + '.syusd_doc_issue_date'\"\r\n type=\"date\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Expiry Date\" [formControlName]=\"'documents.' + i + '.syusd_doc_expiry_date'\"\r\n type=\"date\" size=\"md\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @case ('family') {\r\n <!-- Family Details Section -->\r\n <div class=\"tw-py-2 tw-border-b-0 tw-mb-2\">\r\n <div class=\"tw-flex tw-justify-end tw-items-end tw-mb-2 tw-gap-4\">\r\n <button cideEleButton variant=\"primary\" size=\"md\" type=\"button\" (click)=\"addFamilyDetail()\" leftIcon=\"add\">\r\n Add Family Member\r\n </button>\r\n </div>\r\n\r\n @for (family of familyDetails(); track $index; let i = $index) {\r\n <div\r\n class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-xl tw-mb-8 tw-overflow-hidden tw-transition-all tw-duration-300 hover:tw-shadow-lg tw-shadow-sm\">\r\n <div\r\n class=\"tw-bg-gradient-to-r tw-from-gray-50 tw-to-gray-100 tw-px-6 tw-py-1 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-gray-200\">\r\n <h4 class=\"tw-m-0 tw-text-gray-700 tw-text-sm tw-font-semibold tw-tracking-tight\">Family Member {{ i + 1 }}\r\n </h4>\r\n <button cideEleButton variant=\"danger\" size=\"sm\" type=\"button\" (click)=\"removeFamilyDetail(i)\"\r\n leftIcon=\"delete\">\r\n Remove\r\n </button>\r\n </div>\r\n <div class=\"tw-p-6\">\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6 tw-mb-6\">\r\n <cide-ele-input label=\"Family Member Name\"\r\n [formControlName]=\"'family_details.' + i + '.syfdl_family_member_name'\"\r\n placeholder=\"Enter family member full name\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Relationship\" [options]=\"relationshipOptions()\"\r\n [formControlName]=\"'family_details.' + i + '.syfdl_relationship_id_sygms'\"\r\n placeholder=\"Select relationship\" size=\"md\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\r\n <cide-ele-input label=\"Date of Birth\"\r\n [formControlName]=\"'family_details.' + i + '.syfdl_family_member_dob'\" type=\"date\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Contact Number\" [formControlName]=\"'family_details.' + i + '.syfdl_contact_number'\"\r\n type=\"tel\" placeholder=\"Enter contact number\" size=\"md\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div\r\n class=\"tw-flex tw-justify-end tw-gap-4 tw-py-2 tw-bg-white tw-border-t tw-border-gray-200 tw-sticky tw-bottom-0 tw-z-10\">\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\r\n [disabled]=\"loading()\">\r\n Reset Form\r\n </button>\r\n\r\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || userMasterForm.invalid\"\r\n [loading]=\"loading()\" leftIcon=\"save\">\r\n Save User Master\r\n </button>\r\n </div>\r\n </form>\r\n</div>","import { Component, inject, signal, OnInit, AfterViewInit, ViewChild, TemplateRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport {\n CideInputComponent,\n CideIconComponent,\n TooltipDirective\n} from 'cloud-ide-element';\nimport { CideEleButtonComponent, CideSelectComponent } from 'cloud-ide-element';\nimport {\n CideEleDataGridComponent,\n CideEleDropdownComponent,\n DropdownItem,\n DropdownConfig,\n GridConfiguration,\n GridEvent,\n GridColumn\n} from 'cloud-ide-element';\nimport { CideAdmUserMasterListService } from '../../services';\nimport { AuthUserMst } from 'cloud-ide-lms-model';\n\n// Using any type as per project preference - interfaces managed in cloud-ide-lms-model\n\n@Component({\n selector: 'cide-core-user-list',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n CideInputComponent,\n CideIconComponent,\n TooltipDirective,\n CideEleButtonComponent,\n CideSelectComponent,\n CideEleDataGridComponent,\n CideEleDropdownComponent\n ],\n templateUrl: './user-list.component.html',\n styles: [`\n .user-master-listing-container {\n @apply tw-w-full tw-h-full;\n }\n \n :host {\n @apply tw-w-full tw-h-full tw-flex tw-flex-col;\n }\n `]\n})\nexport class UserListComponent implements OnInit, AfterViewInit {\n // Modern dependency injection using inject()\n router = inject(Router);\n userMasterListService = inject(CideAdmUserMasterListService);\n\n // ViewChild reference to the grid component\n @ViewChild(CideEleDataGridComponent) gridComponent!: CideEleDataGridComponent<any>;\n \n // Template references for custom renderers\n @ViewChild('actionsTemplate', { static: true }) actionsTemplate!: TemplateRef<any>;\n @ViewChild('userDetailsTemplate', { static: true }) userDetailsTemplate!: TemplateRef<any>;\n @ViewChild('contactInfoTemplate', { static: true }) contactInfoTemplate!: TemplateRef<any>;\n @ViewChild('organizationTemplate', { static: true }) organizationTemplate!: TemplateRef<any>;\n @ViewChild('validityTemplate', { static: true }) validityTemplate!: TemplateRef<any>;\n @ViewChild('statusTemplate', { static: true }) statusTemplate!: TemplateRef<any>;\n\n // State management using Angular Signals for server-side operations\n users = signal<any[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n \n // Server-side pagination state\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n totalPages = signal(0);\n \n // Server-side search state\n searchQuery = signal('');\n \n // Server-side sorting state\n sortColumn = signal('user_fullname');\n sortDirection = signal<'asc' | 'desc'>('asc');\n \n // Server-side filtering state\n selectedStatusFilter = signal('');\n\n // Getter and setter for ngModel compatibility\n get selectedStatusFilterValue(): string {\n return this.selectedStatusFilter();\n }\n\n set selectedStatusFilterValue(value: string) {\n this.selectedStatusFilter.set(value);\n }\n\n // Filter options\n statusFilterOptions = signal([\n { value: '', label: 'All Status' },\n { value: 'active', label: 'Active Users' },\n { value: 'inactive', label: 'Inactive Users' }\n ]);\n\n // Grid configuration signal for server-side pagination\n gridConfig = signal<GridConfiguration<any>>({\n id: 'user-master-list-grid',\n columns: [\n {\n key: 'user_identity',\n header: 'User Identity',\n type: 'custom',\n width: 'lg',\n truncate: false,\n sortable: true,\n renderer: 'userDetailsRenderer'\n },\n {\n key: 'contact_info',\n header: 'Contact & Login',\n type: 'custom',\n width: 'lg',\n truncate: false,\n renderer: 'contactInfoRenderer'\n },\n {\n key: 'organization',\n header: 'Organization',\n type: 'custom',\n width: 'md',\n truncate: false,\n renderer: 'organizationRenderer'\n },\n {\n key: 'validity_period',\n header: 'Validity Period',\n type: 'custom',\n width: 'md',\n align: 'center',\n renderer: 'validityRenderer'\n },\n {\n key: 'user_isactive',\n header: 'Status',\n type: 'custom',\n width: 'xs',\n align: 'center',\n sortable: true,\n renderer: 'statusRenderer'\n },\n {\n key: 'actions',\n header: 'Actions',\n type: 'custom',\n width: 'sm',\n truncate: false,\n align: 'center',\n renderer: 'actionsRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n // Server-side pagination configuration\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n // Server-side search configuration\n search: {\n enabled: true,\n placeholder: 'Search users by name, username, email, or mobile...',\n searchableColumns: ['user_fullname', 'user_username', 'user_emailid', 'user_mobileno'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n fullHeight: true,\n onRowClick: 'onUserRowClick',\n onRefresh: 'onUserRefresh'\n });\n\n // Template renderers for the grid (will be populated after view init)\n templateRenderers: Record<string, TemplateRef<any>> = {};\n\n ngOnInit() {\n console.log('🔧 USER MASTER LIST: Component initializing');\n this.loading.set(false);\n this.loadUsersFromServer(); // Use server-side loading\n }\n\n ngAfterViewInit() {\n // Set up template renderers after view init\n this.templateRenderers = {\n 'userDetailsRenderer': this.userDetailsTemplate,\n 'contactInfoRenderer': this.contactInfoTemplate,\n 'organizationRenderer': this.organizationTemplate,\n 'validityRenderer': this.validityTemplate,\n 'statusRenderer': this.statusTemplate,\n 'actionsRenderer': this.actionsTemplate\n };\n \n // Update grid config to use template renderers\n this.gridConfig.update(config => ({\n ...config,\n columns: config.columns.map(col => {\n if (col.renderer && this.templateRenderers[col.renderer]) {\n return { ...col };\n }\n return col;\n })\n }));\n }\n\n // Grid event handler for server-side operations\n onGridEvent(event: GridEvent<any>) {\n console.log('📡 GRID EVENT: Received grid event:', event.type, event);\n\n switch (event.type) {\n case 'pageChange':\n this.onUserPageChange(event.data as number);\n break;\n case 'search':\n this.onUserSearch(event.data as string);\n break;\n case 'sort':\n this.onUserSort(event.data as unknown as { column: string; direction: 'asc' | 'desc' });\n break;\n case 'refresh':\n this.onUserRefresh();\n break;\n case 'rowClick':\n this.onUserRowClick(event.data as any);\n break;\n }\n }\n\n // Grid event action handlers\n onUserRowClick(user: any) {\n console.log('📝 ROW CLICK: User row clicked:', user);\n this.router.navigate(['/control-panel/user-master/view', user._id]);\n }\n\n onUserRefresh() {\n console.log('🔄 REFRESH: User list refresh requested');\n this.loadUsersFromServer(true);\n }\n\n onUserSearch(query: string) {\n console.log('🔍 SEARCH: User search with query:', query);\n this.searchQuery.set(query);\n this.currentPage.set(1); // Reset to first page when search changes\n this.loadUsersFromServer();\n }\n\n onUserPageChange(page: number) {\n console.log('📄 PAGE CHANGE: Page changed to:', page);\n this.currentPage.set(page);\n this.loadUsersFromServer();\n }\n\n onPageSizeChange(pageSize: number) {\n console.log('📊 PAGE SIZE CHANGE: Page size changed to:', pageSize);\n this.pageSize.set(pageSize);\n this.currentPage.set(1); // Reset to first page when page size changes\n this.loadUsersFromServer();\n }\n\n onUserSort(sortData: { column: string; direction: 'asc' | 'desc' }) {\n console.log('🔄 SORT CHANGE: Sort changed to:', sortData);\n this.sortColumn.set(sortData.column);\n this.sortDirection.set(sortData.direction);\n this.currentPage.set(1); // Reset to first page when sorting changes\n this.loadUsersFromServer();\n }\n\n onDeleteUserConfirmed(userId: string) {\n console.log('🗑️ DELETE CONFIRMED: Deleting user:', userId);\n // TODO: Implement actual delete API call using service\n // For now, just reload the users from server\n this.loadUsersFromServer(true);\n }\n\n // Update grid data method\n private updateGridData(users: any[]) {\n console.log('📊 GRID UPDATE: Updating grid with', users.length, 'users');\n\n this.users.set(users);\n\n this.gridConfig.update(config => ({\n ...config,\n data: users\n }));\n\n this.loading.set(false);\n \n if (this.gridComponent) {\n this.gridComponent.clearPageChangeLoading();\n }\n }\n\n // Server-side data loading method\n loadUsersFromServer(isRefresh: boolean = false): void {\n console.log('🚀 USER MASTER LIST: Loading users from server');\n \n if (isRefresh) {\n console.log('🔄 USER MASTER LIST: Refreshing users');\n if (this.gridComponent) {\n this.gridComponent.setRefreshing(true);\n }\n } else {\n this.loading.set(true);\n }\n \n this.error.set(null);\n\n // Build server request payload\n const requestPayload = {\n total: this.totalItems(),\n pageIndex: this.currentPage(),\n pageSize: this.pageSize(),\n query: this.searchQuery(),\n sort: {\n order: this.sortDirection(),\n key: this.sortColumn()\n },\n filters: {\n status: this.selectedStatusFilter()\n }\n };\n\n console.log('📋 Server request payload:', requestPayload);\n\n // Use the service to load users\n this.userMasterListService.getUserList(requestPayload)\n .subscribe({\n next: (response) => {\n console.log('✅ Server response received:', response);\n if (response?.success) {\n const userData = response?.data || [];\n this.users.set(userData);\n this.totalItems.set(response.total || 0);\n this.totalPages.set(Math.ceil((response.total || 0) / this.pageSize()));\n \n // Update grid\n this.updateGridData(userData);\n \n console.log('📊 Total items:', this.totalItems());\n console.log('📄 Current page:', this.currentPage());\n console.log('📝 Items on current page:', userData.length);\n } else {\n this.error.set('Failed to load users from server');\n }\n },\n error: (error) => {\n console.error('❌ Error loading users:', error);\n this.error.set('Failed to load users from server');\n },\n complete: () => {\n this.loading.set(false);\n \n if (this.gridComponent) {\n this.gridComponent.clearPageChangeLoading();\n if (isRefresh) {\n this.gridComponent.setRefreshing(false);\n }\n }\n }\n });\n }\n\n private loadTestData() {\n console.log('🧪 USER MASTER LIST: Loading test data');\n const testData: AuthUserMst[] = [\n {\n _id: 'usr_001_2024_001',\n user_username: 'john.doe',\n user_firstname: 'John',\n user_middlename: 'Michael',\n user_lastname: 'Doe',\n user_fullname: 'John Michael Doe',\n user_emailid: 'john.doe@university.edu',\n user_mobileno: 9876543210,\n user_password: 'hashed_password_123',\n user_activefrom: '2024-01-01',\n user_activeupto: '2025-12-31',\n user_photo_id_cyfm: 'photo_001',\n user_passwordchangeonlogin: false,\n user_role_id_role: 'role_teacher_001',\n user_designation_id_sydsg: 'dsg_professor_001',\n user_department_id_sydept: 'dept_cs_001',\n user_isactive: true\n },\n {\n _id: 'usr_002_2024_002',\n user_username: 'jane.smith',\n user_firstname: 'Jane',\n user_middlename: 'Elizabeth',\n user_lastname: 'Smith',\n user_fullname: 'Jane Elizabeth Smith',\n user_emailid: 'jane.smith@university.edu',\n user_mobileno: 9876543211,\n user_password: 'hashed_password_456',\n user_activefrom: '2024-02-01',\n user_activeupto: '2024-12-31',\n user_photo_id_cyfm: 'photo_002',\n user_passwordchangeonlogin: true,\n user_role_id_role: 'role_student_001',\n user_designation_id_sydsg: 'dsg_student_001',\n user_department_id_sydept: 'dept_math_001',\n user_isactive: false\n },\n {\n _id: 'usr_003_2024_003',\n user_username: 'robert.johnson',\n user_firstname: 'Robert',\n user_lastname: 'Johnson',\n user_fullname: 'Robert Johnson',\n user_emailid: 'robert.johnson@university.edu',\n user_mobileno: 9876543212,\n user_password: 'hashed_password_789',\n user_activefrom: '2024-03-01',\n user_activeupto: '2025-06-30',\n user_passwordchangeonlogin: false,\n user_role_id_role: 'role_admin_001',\n user_designation_id_sydsg: 'dsg_admin_001',\n user_department_id_sydept: 'dept_admin_001',\n user_isactive: true\n },\n {\n _id: 'usr_004_2024_004',\n user_username: 'sarah.williams',\n user_firstname: 'Sarah',\n user_middlename: 'Marie',\n user_lastname: 'Williams',\n user_fullname: 'Sarah Marie Williams',\n user_emailid: 'sarah.williams@university.edu',\n user_mobileno: 9876543213,\n user_password: 'hashed_password_012',\n user_activefrom: '2024-01-15',\n user_activeupto: '2025-01-15',\n user_photo_id_cyfm: 'photo_004',\n user_passwordchangeonlogin: true,\n user_role_id_role: 'role_teacher_002',\n user_designation_id_sydsg: 'dsg_assistant_001',\n user_department_id_sydept: 'dept_physics_001',\n user_isactive: true\n },\n {\n _id: 'usr_005_2024_005',\n user_username: 'michael.brown',\n user_firstname: 'Michael',\n user_lastname: 'Brown',\n user_fullname: 'Michael Brown',\n user_emailid: 'michael.brown@university.edu',\n user_mobileno: 9876543214,\n user_password: 'hashed_password_345',\n user_activefrom: '2023-09-01',\n user_activeupto: '2024-08-31',\n user_passwordchangeonlogin: false,\n user_role_id_role: 'role_student_002',\n user_designation_id_sydsg: 'dsg_student_002',\n user_department_id_sydept: 'dept_english_001',\n user_isactive: false\n }\n ];\n\n this.updateGridData(testData);\n this.totalItems.set(testData.length);\n }\n\n // Action handlers for dropdown menu\n onViewUser(user: any) {\n console.log('👁️ ACTIONS: Viewing user:', user);\n this.router.navigate(['/control-panel/user-master/view', user._id]);\n }\n\n onEditUser(user: any) {\n console.log('✏️ ACTIONS: Editing user:', user);\n this.router.navigate(['/control-panel/user-master/edit', user._id]);\n }\n\n onManageAddresses(user: any) {\n console.log('🏠 ACTIONS: Managing addresses for user:', user);\n this.router.navigate(['/control-panel/user-master/addresses', user._id]);\n }\n\n onManageDocuments(user: any) {\n console.log('📄 ACTIONS: Managing documents for user:', user);\n this.router.navigate(['/control-panel/user-master/documents', user._id]);\n }\n\n onManageFamily(user: any) {\n console.log('👨‍👩‍👧‍👦 ACTIONS: Managing family for user:', user);\n this.router.navigate(['/control-panel/user-master/family', user._id]);\n }\n\n onResetPassword(user: any) {\n console.log('🔑 ACTIONS: Resetting password for user:', user);\n if (confirm(`Are you sure you want to reset password for ${user.user_fullname}?`)) {\n console.log('Password reset confirmed for user:', user._id);\n // TODO: Implement password reset logic using service\n }\n }\n\n onToggleUserStatus(user: any) {\n console.log('🔄 ACTIONS: Toggling status for user:', user);\n const action = user.user_isactive ? 'deactivate' : 'activate';\n if (confirm(`Are you sure you want to ${action} ${user.user_fullname}?`)) {\n console.log(`User status toggle confirmed for user:`, user._id);\n // TODO: Implement status toggle logic using service\n this.loadUsersFromServer(true);\n }\n }\n\n onDeleteUser(user: any) {\n console.log('🗑️ ACTIONS: Deleting user:', user);\n if (confirm(`Are you sure you want to delete ${user.user_fullname}? This action cannot be undone.`)) {\n if (confirm('This will permanently delete the user and all associated data. Are you absolutely sure?')) {\n this.onDeleteUserConfirmed(user._id);\n }\n }\n }\n\n onAddUser() {\n console.log('➕ NAVIGATION: Adding new user');\n this.router.navigate(['/control-panel/user-master/create']);\n }\n\n onFilterChange() {\n console.log('🔍 FILTER: Status filter changed to:', this.selectedStatusFilterValue);\n this.currentPage.set(1); // Reset to first page when filter changes\n this.loadUsersFromServer();\n }\n\n // Helper methods for templates (avoid using new Date() in templates)\n formatDate(dateString: string | undefined): string {\n if (!dateString) return 'Not set';\n try {\n return new Date(dateString).toLocaleDateString();\n } catch {\n return 'Invalid date';\n }\n }\n\n isDateExpired(dateString: string | undefined): boolean {\n if (!dateString) return false;\n try {\n return new Date(dateString) < new Date();\n } catch {\n return false;\n }\n }\n\n getValidityEndText(dateString: string | undefined): string {\n return dateString ? this.formatDate(dateString) : 'No limit';\n }\n\n getUserInitials(firstName: string, lastName: string): string {\n const firstInitial = firstName?.charAt(0) || '';\n const lastInitial = lastName?.charAt(0) || '';\n return (firstInitial + lastInitial).toUpperCase() || 'U';\n }\n\n getPasswordChangeText(requiresChange: boolean): string {\n return requiresChange ? 'Required' : 'Not Required';\n }\n\n // Generate dropdown items for user actions\n getDropdownItems(user: AuthUserMst): DropdownItem[] {\n return [\n {\n id: 'view',\n label: 'View Details',\n icon: 'visibility',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'edit',\n label: 'Edit User',\n icon: 'edit',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'divider1',\n label: '',\n divider: true\n },\n {\n id: 'addresses',\n label: 'Manage Addresses',\n icon: 'location_on',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'documents',\n label: 'Manage Documents',\n icon: 'description',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'family',\n label: 'Manage Family',\n icon: 'family_restroom',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'divider2',\n label: '',\n divider: true\n },\n {\n id: 'reset-password',\n label: 'Reset Password',\n icon: 'key',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'toggle-status',\n label: user.user_isactive ? 'Deactivate User' : 'Activate User',\n icon: user.user_isactive ? 'block' : 'check_circle',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'divider3',\n label: '',\n divider: true\n },\n {\n id: 'delete',\n label: 'Delete User',\n icon: 'delete',\n iconColor: 'tw-text-red-400',\n textColor: 'tw-text-red-600',\n hoverBgColor: 'hover:tw-bg-red-50'\n }\n ];\n }\n\n // Handle dropdown item click\n onDropdownItemClick(item: DropdownItem, user: AuthUserMst): void {\n console.log('🔵 Dropdown item clicked:', item.id, user);\n\n switch (item.id) {\n case 'view':\n this.onViewUser(user);\n break;\n case 'edit':\n this.onEditUser(user);\n break;\n case 'addresses':\n this.onManageAddresses(user);\n break;\n case 'documents':\n this.onManageDocuments(user);\n break;\n case 'family':\n this.onManageFamily(user);\n break;\n case 'reset-password':\n this.onResetPassword(user);\n break;\n case 'toggle-status':\n this.onToggleUserStatus(user);\n break;\n case 'delete':\n this.onDeleteUser(user);\n break;\n }\n }\n}\n","<!-- User Master List Container -->\n<div class=\"user-master-listing-container tw-bg-white tw-shadow-lg tw-rounded-lg tw-overflow-hidden\">\n \n <!-- Header Section with Filters -->\n <div class=\"tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-4 sm:tw-space-y-0\">\n \n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <cide-ele-icon class=\"tw-text-blue-600\">people</cide-ele-icon>\n <div>\n <h5 class=\"tw-text-sm tw-font-semibold tw-text-gray-900\">User Master Management</h5>\n <p class=\"tw-text-sm tw-text-gray-600\">Manage and view all user master records in the system</p>\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <!-- Status Filter -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <label for=\"statusFilter\" class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Status:</label>\n <cide-ele-select\n id=\"statusFilter\"\n [options]=\"statusFilterOptions()\"\n [(ngModel)]=\"selectedStatusFilterValue\"\n (ngModelChange)=\"onFilterChange()\"\n class=\"tw-min-w-40\">\n </cide-ele-select>\n </div>\n\n <!-- Add User Button -->\n <button\n cideEleButton\n variant=\"primary\"\n size=\"sm\"\n (click)=\"onAddUser()\"\n class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-6 tw-h-5\">add</cide-ele-icon>\n Add User\n </button>\n </div>\n </div>\n </div>\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex\">\n <cide-ele-icon name=\"exclamation-triangle\" class=\"tw-text-red-400\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n\n <!-- Data Grid Component -->\n <cide-ele-data-grid\n [config]=\"gridConfig()\"\n [templateRenderers]=\"templateRenderers\"\n [serverSidePagination]=\"true\"\n [totalServerItems]=\"totalItems()\"\n [currentServerPage]=\"currentPage()\"\n [currentServerPageSize]=\"pageSize()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n\n</div>\n\n<!-- Template Definitions for Grid Renderers -->\n\n<!-- User Details Template -->\n<ng-template #userDetailsTemplate let-value let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <div class=\"tw-flex-shrink-0 tw-w-12 tw-h-12 tw-bg-blue-100 tw-rounded-full tw-flex tw-items-center tw-justify-center\">\n <span class=\"tw-text-blue-600 tw-font-semibold tw-text-sm\">\n {{ getUserInitials(row.user_firstname, row.user_lastname) }}\n </span>\n </div>\n <div class=\"tw-flex-1 tw-min-w-0\">\n <p class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-truncate\" [title]=\"row.user_fullname\">\n {{ row.user_fullname || 'Unknown User' }}\n </p>\n <p class=\"tw-text-xs tw-text-blue-600 tw-truncate tw-font-medium\" [title]=\"'Username: ' + row.user_username\">\n @{{ row.user_username || 'No username' }}\n </p>\n <p class=\"tw-text-xs tw-text-gray-400 tw-truncate\" [title]=\"'ID: ' + row._id\">\n ID: {{ row._id?.substring(0, 8) }}...\n </p>\n </div>\n </div>\n</ng-template>\n\n<!-- Contact Info Template -->\n<ng-template #contactInfoTemplate let-value let-row=\"row\" let-column=\"column\">\n <div class=\"tw-space-y-1\">\n <p class=\"tw-text-xs tw-text-gray-900 tw-flex tw-items-center\" [title]=\"'Email: ' + row.user_emailid\">\n <svg class=\"tw-flex-shrink-0 tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M2.003 5.884L10 9.882l7.997-3.998A2 2 0 0016 4H4a2 2 0 00-1.997 1.884z\"/>\n <path d=\"M18 8.118l-8 4-8-4V14a2 2 0 002 2h12a2 2 0 002-2V8.118z\"/>\n </svg>\n <span class=\"tw-truncate\">{{ row.user_emailid || 'No email' }}</span>\n </p>\n <p class=\"tw-text-xs tw-text-gray-600 tw-flex tw-items-center\" [title]=\"'Mobile: ' + row.user_mobileno\">\n <svg class=\"tw-flex-shrink-0 tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M2 3a1 1 0 011-1h2.153a1 1 0 01.986.836l.74 4.435a1 1 0 01-.54 1.06l-1.548.773a11.037 11.037 0 006.105 6.105l.774-1.548a1 1 0 011.059-.54l4.435.74a1 1 0 01.836.986V17a1 1 0 01-1 1h-2C7.82 18 2 12.18 2 5V3z\"/>\n </svg>\n <span class=\"tw-truncate\">{{ row.user_mobileno || 'No mobile' }}</span>\n </p>\n <p class=\"tw-text-xs tw-text-gray-500 tw-flex tw-items-center\" [title]=\"'Password Change: ' + getPasswordChangeText(row.user_passwordchangeonlogin)\">\n <svg class=\"tw-flex-shrink-0 tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fill-rule=\"evenodd\" d=\"M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z\" clip-rule=\"evenodd\"/>\n </svg>\n <span class=\"tw-truncate\">{{ getPasswordChangeText(row.user_passwordchangeonlogin) }}</span>\n </p>\n </div>\n</ng-template>\n\n<!-- Organization Template -->\n<ng-template #organizationTemplate let-value let-row=\"row\" let-column=\"column\">\n <div class=\"tw-space-y-1\">\n <p class=\"tw-text-xs tw-text-gray-900 tw-flex tw-items-center\" [title]=\"'Entity: ' + row.entity_name\">\n <svg class=\"tw-flex-shrink-0 tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M4 3a2 2 0 100 4h12a2 2 0 100-4H4z\"/>\n <path fill-rule=\"evenodd\" d=\"M3 8a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm0 4a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1z\" clip-rule=\"evenodd\"/>\n </svg>\n <span class=\"tw-truncate\">{{ row.entity_name || 'No Entity' }}</span>\n </p>\n <p class=\"tw-text-xs tw-text-blue-600 tw-flex tw-items-center tw-font-medium\" [title]=\"'Role: ' + row.role_name\">\n <svg class=\"tw-flex-shrink-0 tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\"/>\n </svg>\n <span class=\"tw-truncate\">{{ row.role_name || 'No Role' }}</span>\n </p>\n <p class=\"tw-text-xs tw-text-gray-600 tw-flex tw-items-center\" [title]=\"'Designation: ' + row.designation_name\">\n <svg class=\"tw-flex-shrink-0 tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fill-rule=\"evenodd\" d=\"M10 9a3 3 0 100-6 3 3 0 000 6zm-7 9a7 7 0 1114 0H3z\" clip-rule=\"evenodd\"/>\n </svg>\n <span class=\"tw-truncate\">{{ row.designation_name || 'No Designation' }}</span>\n </p>\n </div>\n</ng-template>\n\n<!-- Validity Template -->\n<ng-template #validityTemplate let-value let-row=\"row\" let-column=\"column\">\n <div class=\"tw-text-center tw-space-y-1\">\n <p class=\"tw-text-xs tw-text-gray-900 tw-font-medium\" [title]=\"'Active From: ' + formatDate(row.user_activefrom)\">\n From: {{ formatDate(row.user_activefrom) }}\n </p>\n <p class=\"tw-text-xs tw-text-gray-600\" [title]=\"'Active Until: ' + getValidityEndText(row.user_activeupto)\">\n Until: {{ getValidityEndText(row.user_activeupto) }}\n </p>\n @if (isDateExpired(row.user_activeupto)) {\n <span class=\"tw-inline-block tw-px-2 tw-py-0.5 tw-text-xs tw-bg-red-100 tw-text-red-800 tw-rounded-full tw-font-medium\">\n Expired\n </span>\n }\n </div>\n</ng-template>\n\n<!-- Status Template -->\n<ng-template #statusTemplate let-value let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-justify-center\">\n @if (row.user_isactive) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\n <svg class=\"tw-w-1.5 tw-h-1.5 tw-mr-1\" fill=\"currentColor\" viewBox=\"0 0 8 8\">\n <circle cx=\"4\" cy=\"4\" r=\"3\"/>\n </svg>\n Active\n </span>\n } @else {\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-red-100 tw-text-red-800\">\n <svg class=\"tw-w-1.5 tw-h-1.5 tw-mr-1\" fill=\"currentColor\" viewBox=\"0 0 8 8\">\n <circle cx=\"4\" cy=\"4\" r=\"3\"/>\n </svg>\n Inactive\n </span>\n }\n </div>\n</ng-template>\n\n<!-- Actions Template using cide-ele-dropdown -->\n<ng-template #actionsTemplate let-value let-row=\"row\" let-column=\"column\">\n <cide-ele-dropdown \n [items]=\"getDropdownItems(row)\"\n [config]=\"{ \n triggerIcon: 'more_vert', \n triggerSize: 'sm',\n menuPosition: 'auto',\n menuWidth: 'tw-w-56'\n }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template>\n","import { Component, inject, signal, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'cide-adm-user-attributes',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n template: `\r\n <div class=\"user-attributes-container\">\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <h2 class=\"card-title\">\r\n {{ isEditMode() ? 'Edit' : 'Add' }} User Attribute\r\n </h2>\r\n <div class=\"header-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"btn btn-secondary\"\r\n (click)=\"goBack()\"\r\n (keyup.enter)=\"goBack()\"\r\n >\r\n <i class=\"fas fa-arrow-left\"></i> Back\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div class=\"card-content\">\r\n <form [formGroup]=\"attributeForm\" (ngSubmit)=\"onSubmit()\">\r\n <div class=\"form-section\">\r\n <h3>Attribute Information</h3>\r\n \r\n <div class=\"form-row\">\r\n <div class=\"form-field\">\r\n <label for=\"syuat_attribute_key\">Attribute Key *</label>\r\n <input \r\n id=\"syuat_attribute_key\"\r\n type=\"text\" \r\n formControlName=\"syuat_attribute_key\" \r\n placeholder=\"Enter attribute key\"\r\n class=\"form-input\"\r\n >\r\n @if (attributeForm.get('syuat_attribute_key')?.hasError('required') && attributeForm.get('syuat_attribute_key')?.touched) {\r\n <div class=\"error-message\">\r\n Attribute key is required\r\n </div>\r\n }\r\n </div>\r\n \r\n <div class=\"form-field\">\r\n <label for=\"syuat_data_type\">Data Type</label>\r\n <select \r\n id=\"syuat_data_type\"\r\n formControlName=\"syuat_data_type\"\r\n class=\"form-select\"\r\n >\r\n <option value=\"\">Select data type</option>\r\n <option value=\"string\">String</option>\r\n <option value=\"number\">Number</option>\r\n <option value=\"boolean\">Boolean</option>\r\n <option value=\"date\">Date</option>\r\n <option value=\"object\">Object</option>\r\n <option value=\"array\">Array</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-row\">\r\n <div class=\"form-field\">\r\n <label for=\"syuat_attribute_value\">Attribute Value</label>\r\n <textarea \r\n id=\"syuat_attribute_value\"\r\n formControlName=\"syuat_attribute_value\" \r\n placeholder=\"Enter attribute value\"\r\n class=\"form-textarea\"\r\n rows=\"3\"\r\n ></textarea>\r\n </div>\r\n \r\n <div class=\"form-field\">\r\n <label for=\"syuat_industry_context_sygms\">Industry Context</label>\r\n <select \r\n id=\"syuat_industry_context_sygms\"\r\n formControlName=\"syuat_industry_context_sygms\"\r\n class=\"form-select\"\r\n >\r\n <option value=\"\">Select industry context</option>\r\n <option value=\"it\">Information Technology</option>\r\n <option value=\"healthcare\">Healthcare</option>\r\n <option value=\"finance\">Finance</option>\r\n <option value=\"education\">Education</option>\r\n <option value=\"manufacturing\">Manufacturing</option>\r\n <option value=\"retail\">Retail</option>\r\n <option value=\"other\">Other</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-section\">\r\n <h3>Additional Information</h3>\r\n \r\n <div class=\"form-row\">\r\n <div class=\"form-field\">\r\n <label for=\"syuat_user_id_user\">User ID</label>\r\n <input \r\n id=\"syuat_user_id_user\"\r\n type=\"text\" \r\n formControlName=\"syuat_user_id_user\" \r\n placeholder=\"Enter user ID\"\r\n class=\"form-input\"\r\n readonly\r\n >\r\n <small class=\"form-help\">This field is automatically populated</small>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"btn btn-secondary\"\r\n (click)=\"goBack()\"\r\n (keyup.enter)=\"goBack()\"\r\n >\r\n Cancel\r\n </button>\r\n <button \r\n type=\"submit\" \r\n class=\"btn btn-primary\"\r\n [disabled]=\"attributeForm.invalid || isSubmitting()\"\r\n >\r\n {{ isSubmitting() ? 'Saving...' : (isEditMode() ? 'Update' : 'Save') }}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n .user-attributes-container {\r\n padding: 20px;\r\n }\r\n \r\n .card {\r\n background: white;\r\n border-radius: 8px;\r\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\r\n margin-bottom: 20px;\r\n }\r\n \r\n .card-header {\r\n padding: 20px;\r\n border-bottom: 1px solid #e0e0e0;\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n }\r\n \r\n .card-title {\r\n margin: 0;\r\n color: #333;\r\n font-size: 24px;\r\n }\r\n \r\n .header-actions {\r\n display: flex;\r\n gap: 10px;\r\n }\r\n \r\n .card-content {\r\n padding: 20px;\r\n }\r\n \r\n .form-section {\r\n margin-bottom: 30px;\r\n }\r\n \r\n .form-section h3 {\r\n color: #495057;\r\n border-bottom: 2px solid #007bff;\r\n padding-bottom: 10px;\r\n margin-bottom: 20px;\r\n }\r\n \r\n .form-row {\r\n display: grid;\r\n grid-template-columns: 1fr 1fr;\r\n gap: 20px;\r\n margin-bottom: 20px;\r\n }\r\n \r\n .form-field {\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n \r\n .form-field label {\r\n margin-bottom: 8px;\r\n font-weight: 500;\r\n color: #495057;\r\n }\r\n \r\n .form-input,\r\n .form-select,\r\n .form-textarea {\r\n padding: 10px;\r\n border: 1px solid #ddd;\r\n border-radius: 4px;\r\n font-size: 14px;\r\n transition: border-color 0.3s ease;\r\n }\r\n \r\n .form-input:focus,\r\n .form-select:focus,\r\n .form-textarea:focus {\r\n outline: none;\r\n border-color: #007bff;\r\n box-shadow: 0 0 0 2px rgba(0,123,255,0.25);\r\n }\r\n \r\n .form-textarea {\r\n resize: vertical;\r\n min-height: 80px;\r\n }\r\n \r\n .form-input[readonly] {\r\n background-color: #f8f9fa;\r\n cursor: not-allowed;\r\n }\r\n \r\n .form-help {\r\n color: #6c757d;\r\n font-size: 12px;\r\n margin-top: 5px;\r\n font-style: italic;\r\n }\r\n \r\n .error-message {\r\n color: #dc3545;\r\n font-size: 12px;\r\n margin-top: 5px;\r\n }\r\n \r\n .form-actions {\r\n display: flex;\r\n justify-content: flex-end;\r\n gap: 15px;\r\n margin-top: 30px;\r\n padding-top: 20px;\r\n border-top: 1px solid #e0e0e0;\r\n }\r\n \r\n .btn {\r\n padding: 10px 20px;\r\n border: none;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n font-size: 14px;\r\n transition: all 0.3s ease;\r\n }\r\n \r\n .btn:disabled {\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n }\r\n \r\n .btn-primary {\r\n background: #007bff;\r\n color: white;\r\n }\r\n \r\n .btn-primary:hover:not(:disabled) {\r\n background: #0056b3;\r\n }\r\n \r\n .btn-secondary {\r\n background: #6c757d;\r\n color: white;\r\n }\r\n \r\n .btn-secondary:hover {\r\n background: #545b62;\r\n }\r\n `]\r\n})\r\nexport class CideAdmUserAttributesComponent implements OnInit {\r\n private fb = inject(FormBuilder);\r\n private route = inject(ActivatedRoute);\r\n private router = inject(Router);\r\n\r\n // Signals\r\n isEditMode = signal(false);\r\n isSubmitting = signal(false);\r\n \r\n // Form\r\n attributeForm!: FormGroup;\r\n\r\n ngOnInit() {\r\n this.initializeForm();\r\n this.checkEditMode();\r\n }\r\n\r\n private initializeForm() {\r\n this.attributeForm = this.fb.group({\r\n syuat_attribute_key: ['', [Validators.required]],\r\n syuat_attribute_value: [''],\r\n syuat_data_type: [''],\r\n syuat_industry_context_sygms: [''],\r\n syuat_user_id_user: [''] // This will be populated from route or service\r\n });\r\n }\r\n\r\n private checkEditMode() {\r\n const id = this.route.snapshot.paramMap.get('id');\r\n if (id) {\r\n this.isEditMode.set(true);\r\n this.loadAttribute(id);\r\n }\r\n }\r\n\r\n private loadAttribute(id: string) {\r\n // TODO: Load attribute data from service\r\n console.log('Loading attribute:', id);\r\n }\r\n\r\n onSubmit() {\r\n if (this.attributeForm.valid) {\r\n this.isSubmitting.set(true);\r\n \r\n const formData = this.attributeForm.value;\r\n console.log('Form data:', formData);\r\n \r\n // TODO: Submit to service\r\n setTimeout(() => {\r\n this.isSubmitting.set(false);\r\n this.goBack();\r\n }, 1000);\r\n } else {\r\n this.markFormGroupTouched();\r\n }\r\n }\r\n\r\n private markFormGroupTouched() {\r\n Object.keys(this.attributeForm.controls).forEach(key => {\r\n const control = this.attributeForm.get(key);\r\n control?.markAsTouched();\r\n });\r\n }\r\n\r\n goBack() {\r\n this.router.navigate(['/admin/user-master']);\r\n }\r\n}\r\n","import { Component, inject, signal, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'cide-adm-user-contact-addresses',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n template: `\r\n <div class=\"contact-addresses-container\">\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <h2 class=\"card-title\">\r\n {{ isEditMode() ? 'Edit' : 'Add' }} Contact Address\r\n </h2>\r\n <div class=\"header-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"btn btn-secondary\"\r\n (click)=\"goBack()\"\r\n (keyup.enter)=\"goBack()\"\r\n >\r\n <i class=\"fas fa-arrow-left\"></i> Back\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div class=\"card-content\">\r\n <form [formGroup]=\"contactAddressForm\" (ngSubmit)=\"onSubmit()\">\r\n <div class=\"form-section\">\r\n <h3>Contact Information</h3>\r\n \r\n <div class=\"form-row\">\r\n <div class=\"form-field\">\r\n <label for=\"sycad_contact_person_name\">Contact Person Name *</label>\r\n <input \r\n id=\"sycad_contact_person_name\"\r\n type=\"text\" \r\n formControlName=\"sycad_contact_person_name\" \r\n placeholder=\"Enter contact person name\"\r\n class=\"form-input\"\r\n >\r\n @if (contactAddressForm.get('sycad_contact_person_name')?.hasError('required') && contactAddressForm.get('sycad_contact_person_name')?.touched) {\r\n <div class=\"error-message\">\r\n Contact person name is required\r\n </div>\r\n }\r\n </div>\r\n \r\n <div class=\"form-field\">\r\n <label for=\"sycad_address_type_id_sygms\">Address Type *</label>\r\n <select \r\n id=\"sycad_address_type_id_sygms\"\r\n formControlName=\"sycad_address_type_id_sygms\"\r\n class=\"form-select\"\r\n >\r\n <option value=\"\">Select address type</option>\r\n <option value=\"permanent\">Permanent</option>\r\n <option value=\"present\">Present</option>\r\n <option value=\"emergency\">Emergency</option>\r\n <option value=\"office\">Office</option>\r\n </select>\r\n @if (contactAddressForm.get('sycad_address_type_id_sygms')?.hasError('required') && contactAddressForm.get('sycad_address_type_id_sygms')?.touched) {\r\n <div class=\"error-message\">\r\n Address type is required\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-row\">\r\n <div class=\"form-field\">\r\n <label for=\"sycad_contact_person_famb\">Family Member ID (Optional)</label>\r\n <input \r\n id=\"sycad_contact_person_famb\"\r\n type=\"text\" \r\n formControlName=\"sycad_contact_person_famb\" \r\n placeholder=\"Enter family member ID if applicable\"\r\n class=\"form-input\"\r\n >\r\n </div>\r\n \r\n <div class=\"form-field\">\r\n <label for=\"sycad_contact_phone\">Contact Phone *</label>\r\n <input \r\n id=\"sycad_contact_phone\"\r\n type=\"tel\" \r\n formControlName=\"sycad_contact_phone\" \r\n placeholder=\"Enter contact phone number\"\r\n class=\"form-input\"\r\n >\r\n @if (contactAddressForm.get('sycad_contact_phone')?.hasError('required') && contactAddressForm.get('sycad_contact_phone')?.touched) {\r\n <div class=\"error-message\">\r\n Contact phone is required\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-row\">\r\n <div class=\"form-field\">\r\n <label for=\"sycad_contact_phone_alt\">Alternative Phone</label>\r\n <input \r\n id=\"sycad_contact_phone_alt\"\r\n type=\"tel\" \r\n formControlName=\"sycad_contact_phone_alt\" \r\n placeholder=\"Enter alternative phone number\"\r\n class=\"form-input\"\r\n >\r\n </div>\r\n \r\n <div class=\"form-field\">\r\n <label for=\"sycad_contact_email\">Contact Email</label>\r\n <input \r\n id=\"sycad_contact_email\"\r\n type=\"email\" \r\n formControlName=\"sycad_contact_email\" \r\n placeholder=\"Enter contact email\"\r\n class=\"form-input\"\r\n >\r\n @if (contactAddressForm.get('sycad_contact_email')?.hasError('email') && contactAddressForm.get('sycad_contact_email')?.touched) {\r\n <div class=\"error-message\">\r\n Please enter a valid email\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-section\">\r\n <h3>Address Details</h3>\r\n \r\n <div class=\"form-field full-width\">\r\n <label for=\"sycad_contact_address\">Full Address *</label>\r\n <textarea \r\n id=\"sycad_contact_address\"\r\n formControlName=\"sycad_contact_address\" \r\n placeholder=\"Enter complete address\"\r\n class=\"form-textarea\"\r\n rows=\"3\"\r\n ></textarea>\r\n @if (contactAddressForm.get('sycad_contact_address')?.hasError('required') && contactAddressForm.get('sycad_contact_address')?.touched) {\r\n <div class=\"error-message\">\r\n Address is required\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"form-row\">\r\n <div class=\"form-field\">\r\n <label for=\"sycad_contact_pin_sypin\">PIN Code</label>\r\n <input \r\n id=\"sycad_contact_pin_sypin\"\r\n type=\"text\" \r\n formControlName=\"sycad_contact_pin_sypin\" \r\n placeholder=\"Enter PIN code\"\r\n class=\"form-input\"\r\n >\r\n </div>\r\n \r\n <div class=\"form-field\">\r\n <label for=\"sycad_contact_city_sypin\">City</label>\r\n <input \r\n id=\"sycad_contact_city_sypin\"\r\n type=\"text\" \r\n formControlName=\"sycad_contact_city_sypin\" \r\n placeholder=\"Enter city name\"\r\n class=\"form-input\"\r\n >\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-row\">\r\n <div class=\"form-field\">\r\n <label for=\"sycad_contact_state_sypin\">State</label>\r\n <input \r\n id=\"sycad_contact_state_sypin\"\r\n type=\"text\" \r\n formControlName=\"sycad_contact_state_sypin\" \r\n placeholder=\"Enter state name\"\r\n class=\"form-input\"\r\n >\r\n </div>\r\n \r\n <div class=\"form-field\">\r\n <label for=\"sycad_contact_country_syctr\">Country</label>\r\n <input \r\n id=\"sycad_contact_country_syctr\"\r\n type=\"text\" \r\n formControlName=\"sycad_contact_country_syctr\" \r\n placeholder=\"Enter country name\"\r\n class=\"form-input\"\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-section\">\r\n <h3>Additional Information</h3>\r\n \r\n <div class=\"form-row\">\r\n <div class=\"form-field\">\r\n <label for=\"sycad_contact_fax\">Fax Number</label>\r\n <input \r\n id=\"sycad_contact_fax\"\r\n type=\"text\" \r\n formControlName=\"sycad_contact_fax\" \r\n placeholder=\"Enter fax number\"\r\n class=\"form-input\"\r\n >\r\n </div>\r\n \r\n <div class=\"form-field\">\r\n <label for=\"sycad_corporate_email_alt\">Corporate Email Alternative</label>\r\n <input \r\n id=\"sycad_corporate_email_alt\"\r\n type=\"email\" \r\n formControlName=\"sycad_corporate_email_alt\" \r\n placeholder=\"Enter corporate email alternative\"\r\n class=\"form-input\"\r\n >\r\n @if (contactAddressForm.get('sycad_corporate_email_alt')?.hasError('email') && contactAddressForm.get('sycad_corporate_email_alt')?.touched) {\r\n <div class=\"error-message\">\r\n Please enter a valid email\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"btn btn-secondary\"\r\n (click)=\"goBack()\"\r\n (keyup.enter)=\"goBack()\"\r\n >\r\n Cancel\r\n </button>\r\n <button \r\n type=\"submit\" \r\n class=\"btn btn-primary\"\r\n [disabled]=\"contactAddressForm.invalid || isSubmitting()\"\r\n >\r\n {{ isSubmitting() ? 'Saving...' : (isEditMode() ? 'Update' : 'Save') }}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n .contact-addresses-container {\r\n padding: 20px;\r\n }\r\n \r\n .card {\r\n background: white;\r\n border-radius: 8px;\r\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\r\n margin-bottom: 20px;\r\n }\r\n \r\n .card-header {\r\n padding: 20px;\r\n border-bottom: 1px solid #e0e0e0;\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n }\r\n \r\n .card-title {\r\n margin: 0;\r\n color: #333;\r\n font-size: 24px;\r\n }\r\n \r\n .header-actions {\r\n display: flex;\r\n gap: 10px;\r\n }\r\n \r\n .card-content {\r\n padding: 20px;\r\n }\r\n \r\n .form-section {\r\n margin-bottom: 30px;\r\n }\r\n \r\n .form-section h3 {\r\n color: #495057;\r\n border-bottom: 2px solid #007bff;\r\n padding-bottom: 10px;\r\n margin-bottom: 20px;\r\n }\r\n \r\n .form-row {\r\n display: grid;\r\n grid-template-columns: 1fr 1fr;\r\n gap: 20px;\r\n margin-bottom: 20px;\r\n }\r\n \r\n .form-field {\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n \r\n .form-field.full-width {\r\n grid-column: 1 / -1;\r\n }\r\n \r\n .form-field label {\r\n margin-bottom: 8px;\r\n font-weight: 500;\r\n color: #495057;\r\n }\r\n \r\n .form-input,\r\n .form-select,\r\n .form-textarea {\r\n padding: 10px;\r\n border: 1px solid #ddd;\r\n border-radius: 4px;\r\n font-size: 14px;\r\n transition: border-color 0.3s ease;\r\n }\r\n \r\n .form-input:focus,\r\n .form-select:focus,\r\n .form-textarea:focus {\r\n outline: none;\r\n border-color: #007bff;\r\n box-shadow: 0 0 0 2px rgba(0,123,255,0.25);\r\n }\r\n \r\n .form-textarea {\r\n resize: vertical;\r\n min-height: 80px;\r\n }\r\n \r\n .error-message {\r\n color: #dc3545;\r\n font-size: 12px;\r\n margin-top: 5px;\r\n }\r\n \r\n .form-actions {\r\n display: flex;\r\n justify-content: flex-end;\r\n gap: 15px;\r\n margin-top: 30px;\r\n padding-top: 20px;\r\n border-top: 1px solid #e0e0e0;\r\n }\r\n \r\n .btn {\r\n padding: 10px 20px;\r\n border: none;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n font-size: 14px;\r\n transition: all 0.3s ease;\r\n }\r\n \r\n .btn:disabled {\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n }\r\n \r\n .btn-primary {\r\n background: #007bff;\r\n color: white;\r\n }\r\n \r\n .btn-primary:hover:not(:disabled) {\r\n background: #0056b3;\r\n }\r\n \r\n .btn-secondary {\r\n background: #6c757d;\r\n color: white;\r\n }\r\n \r\n .btn-secondary:hover {\r\n background: #545b62;\r\n }\r\n `]\r\n})\r\nexport class CideAdmUserContactAddressesComponent implements OnInit {\r\n private fb = inject(FormBuilder);\r\n private route = inject(ActivatedRoute);\r\n private router = inject(Router);\r\n\r\n // Signals\r\n isEditMode = signal(false);\r\n isSubmitting = signal(false);\r\n \r\n // Form\r\n contactAddressForm!: FormGroup;\r\n\r\n ngOnInit() {\r\n this.initializeForm();\r\n this.checkEditMode();\r\n }\r\n\r\n private initializeForm() {\r\n this.contactAddressForm = this.fb.group({\r\n sycad_contact_person_name: ['', [Validators.required]],\r\n sycad_address_type_id_sygms: ['', [Validators.required]],\r\n sycad_contact_person_famb: [''],\r\n sycad_contact_address: ['', [Validators.required]],\r\n sycad_contact_pin_sypin: [''],\r\n sycad_contact_city_sypin: [''],\r\n sycad_contact_state_sypin: [''],\r\n sycad_contact_country_syctr: [''],\r\n sycad_contact_phone: ['', [Validators.required]],\r\n sycad_contact_phone_alt: [''],\r\n sycad_contact_fax: [''],\r\n sycad_contact_email: ['', [Validators.email]],\r\n sycad_corporate_email_alt: ['', [Validators.email]]\r\n });\r\n }\r\n\r\n private checkEditMode() {\r\n const id = this.route.snapshot.paramMap.get('id');\r\n if (id) {\r\n this.isEditMode.set(true);\r\n this.loadContactAddress(id);\r\n }\r\n }\r\n\r\n private loadContactAddress(id: string) {\r\n // TODO: Load contact address data from service\r\n console.log('Loading contact address:', id);\r\n }\r\n\r\n onSubmit() {\r\n if (this.contactAddressForm.valid) {\r\n this.isSubmitting.set(true);\r\n \r\n const formData = this.contactAddressForm.value;\r\n console.log('Form data:', formData);\r\n \r\n // TODO: Submit to service\r\n setTimeout(() => {\r\n this.isSubmitting.set(false);\r\n this.goBack();\r\n }, 1000);\r\n } else {\r\n this.markFormGroupTouched();\r\n }\r\n }\r\n\r\n private markFormGroupTouched() {\r\n Object.keys(this.contactAddressForm.controls).forEach(key => {\r\n const control = this.contactAddressForm.get(key);\r\n control?.markAsTouched();\r\n });\r\n }\r\n\r\n goBack() {\r\n this.router.navigate(['/admin/user-master']);\r\n }\r\n}\r\n","import { Component, inject, signal, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'cide-adm-user-documents',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n template: `\r\n <div class=\"user-documents-container\">\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <h2 class=\"card-title\">\r\n {{ isEditMode() ? 'Edit' : 'Add' }} User Document\r\n </h2>\r\n <div class=\"header-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"btn btn-secondary\"\r\n (click)=\"goBack()\"\r\n (keyup.enter)=\"goBack()\"\r\n >\r\n <i class=\"fas fa-arrow-left\"></i> Back\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div class=\"card-content\">\r\n <form [formGroup]=\"documentForm\" (ngSubmit)=\"onSubmit()\">\r\n <div class=\"form-section\">\r\n <h3>Document Information</h3>\r\n \r\n <div class=\"form-row\">\r\n <div class=\"form-field\">\r\n <label for=\"syusd_doc_number\">Document Number *</label>\r\n <input \r\n id=\"syusd_doc_number\"\r\n type=\"text\" \r\n formControlName=\"syusd_doc_number\" \r\n placeholder=\"Enter document number\"\r\n class=\"form-input\"\r\n >\r\n @if (documentForm.get('syusd_doc_number')?.hasError('required') && documentForm.get('syusd_doc_number')?.touched) {\r\n <div class=\"error-message\">\r\n Document number is required\r\n </div>\r\n }\r\n </div>\r\n \r\n <div class=\"form-field\">\r\n <label for=\"syusd_address_type_id_sygms\">Document Type *</label>\r\n <select \r\n id=\"syusd_address_type_id_sygms\"\r\n formControlName=\"syusd_address_type_id_sygms\"\r\n class=\"form-select\"\r\n >\r\n <option value=\"\">Select document type</option>\r\n <option value=\"passport\">Passport</option>\r\n <option value=\"aadhar\">Aadhar Card</option>\r\n <option value=\"pan\">PAN Card</option>\r\n <option value=\"driving_license\">Driving License</option>\r\n <option value=\"voter_id\">Voter ID</option>\r\n <option value=\"birth_certificate\">Birth Certificate</option>\r\n <option value=\"caste_certificate\">Caste Certificate</option>\r\n <option value=\"income_certificate\">Income Certificate</option>\r\n <option value=\"other\">Other</option>\r\n </select>\r\n @if (documentForm.get('syusd_address_type_id_sygms')?.hasError('required') && documentForm.get('syusd_address_type_id_sygms')?.touched) {\r\n <div class=\"error-message\">\r\n Document type is required\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-row\">\r\n <div class=\"form-field\">\r\n <label for=\"syusd_doc_name_as_per_doc\">Name as per Document *</label>\r\n <input \r\n id=\"syusd_doc_name_as_per_doc\"\r\n type=\"text\" \r\n formControlName=\"syusd_doc_name_as_per_doc\" \r\n placeholder=\"Enter name exactly as it appears on document\"\r\n class=\"form-input\"\r\n >\r\n @if (documentForm.get('syusd_doc_name_as_per_doc')?.hasError('required') && documentForm.get('syusd_doc_name_as_per_doc')?.touched) {\r\n <div class=\"error-message\">\r\n Document name is required\r\n </div>\r\n }\r\n </div>\r\n \r\n <div class=\"form-field\">\r\n <label for=\"syusd_photo_group_id_cyfm\">Photo/File Group ID</label>\r\n <input \r\n id=\"syusd_photo_group_id_cyfm\"\r\n type=\"text\" \r\n formControlName=\"syusd_photo_group_id_cyfm\" \r\n placeholder=\"Enter file manager group ID\"\r\n class=\"form-input\"\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-section\">\r\n <h3>Document Dates</h3>\r\n \r\n <div class=\"form-row\">\r\n <div class=\"form-field\">\r\n <label for=\"syusd_doc_issue_date\">Issue Date</label>\r\n <input \r\n id=\"syusd_doc_issue_date\"\r\n type=\"date\" \r\n formControlName=\"syusd_doc_issue_date\" \r\n class=\"form-input\"\r\n >\r\n </div>\r\n \r\n <div class=\"form-field\">\r\n <label for=\"syusd_doc_expiry_date\">Expiry Date</label>\r\n <input \r\n id=\"syusd_doc_expiry_date\"\r\n type=\"date\" \r\n formControlName=\"syusd_doc_expiry_date\" \r\n class=\"form-input\"\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-section\">\r\n <h3>Verification Status</h3>\r\n \r\n <div class=\"form-row\">\r\n <div class=\"form-field\">\r\n <label for=\"syusd_doc_verification_status_id_sygms\">Document Verification Status</label>\r\n <select \r\n id=\"syusd_doc_verification_status_id_sygms\"\r\n formControlName=\"syusd_doc_verification_status_id_sygms\"\r\n class=\"form-select\"\r\n >\r\n <option value=\"\">Select verification status</option>\r\n <option value=\"pending\">Pending</option>\r\n <option value=\"verified\">Verified</option>\r\n <option value=\"rejected\">Rejected</option>\r\n <option value=\"under_review\">Under Review</option>\r\n </select>\r\n </div>\r\n \r\n <div class=\"form-field\">\r\n <label for=\"syusd_doc_kyc_status_id_sygms\">KYC Status</label>\r\n <select \r\n id=\"syusd_doc_kyc_status_id_sygms\"\r\n formControlName=\"syusd_doc_kyc_status_id_sygms\"\r\n class=\"form-select\"\r\n >\r\n <option value=\"\">Select KYC status</option>\r\n <option value=\"pending\">Pending</option>\r\n <option value=\"in_progress\">In Progress</option>\r\n <option value=\"completed\">Completed</option>\r\n <option value=\"rejected\">Rejected</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-row\">\r\n <div class=\"form-field\">\r\n <label for=\"syusd_isactive\">Document Status</label>\r\n <div class=\"checkbox-field\">\r\n <input \r\n id=\"syusd_isactive\"\r\n type=\"checkbox\" \r\n formControlName=\"syusd_isactive\"\r\n class=\"form-checkbox\"\r\n >\r\n <label for=\"syusd_isactive\" class=\"checkbox-label\">\r\n Document is active\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"btn btn-secondary\"\r\n (click)=\"goBack()\"\r\n (keyup.enter)=\"goBack()\"\r\n >\r\n Cancel\r\n </button>\r\n <button \r\n type=\"submit\" \r\n class=\"btn btn-primary\"\r\n [disabled]=\"documentForm.invalid || isSubmitting()\"\r\n >\r\n {{ isSubmitting() ? 'Saving...' : (isEditMode() ? 'Update' : 'Save') }}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n .user-documents-container {\r\n padding: 20px;\r\n }\r\n \r\n .card {\r\n background: white;\r\n border-radius: 8px;\r\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\r\n margin-bottom: 20px;\r\n }\r\n \r\n .card-header {\r\n padding: 20px;\r\n border-bottom: 1px solid #e0e0e0;\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n }\r\n \r\n .card-title {\r\n margin: 0;\r\n color: #333;\r\n font-size: 24px;\r\n }\r\n \r\n .header-actions {\r\n display: flex;\r\n gap: 10px;\r\n }\r\n \r\n .card-content {\r\n padding: 20px;\r\n }\r\n \r\n .form-section {\r\n margin-bottom: 30px;\r\n }\r\n \r\n .form-section h3 {\r\n color: #495057;\r\n border-bottom: 2px solid #007bff;\r\n padding-bottom: 10px;\r\n margin-bottom: 20px;\r\n }\r\n \r\n .form-row {\r\n display: grid;\r\n grid-template-columns: 1fr 1fr;\r\n gap: 20px;\r\n margin-bottom: 20px;\r\n }\r\n \r\n .form-field {\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n \r\n .form-field label {\r\n margin-bottom: 8px;\r\n font-weight: 500;\r\n color: #495057;\r\n }\r\n \r\n .form-input,\r\n .form-select {\r\n padding: 10px;\r\n border: 1px solid #ddd;\r\n border-radius: 4px;\r\n font-size: 14px;\r\n transition: border-color 0.3s ease;\r\n }\r\n \r\n .form-input:focus,\r\n .form-select:focus {\r\n outline: none;\r\n border-color: #007bff;\r\n box-shadow: 0 0 0 2px rgba(0,123,255,0.25);\r\n }\r\n \r\n .checkbox-field {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n margin-top: 10px;\r\n }\r\n \r\n .form-checkbox {\r\n width: 18px;\r\n height: 18px;\r\n accent-color: #007bff;\r\n }\r\n \r\n .checkbox-label {\r\n margin: 0;\r\n cursor: pointer;\r\n }\r\n \r\n .error-message {\r\n color: #dc3545;\r\n font-size: 12px;\r\n margin-top: 5px;\r\n }\r\n \r\n .form-actions {\r\n display: flex;\r\n justify-content: flex-end;\r\n gap: 15px;\r\n margin-top: 30px;\r\n padding-top: 20px;\r\n border-top: 1px solid #e0e0e0;\r\n }\r\n \r\n .btn {\r\n padding: 10px 20px;\r\n border: none;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n font-size: 14px;\r\n transition: all 0.3s ease;\r\n }\r\n \r\n .btn:disabled {\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n }\r\n \r\n .btn-primary {\r\n background: #007bff;\r\n color: white;\r\n }\r\n \r\n .btn-primary:hover:not(:disabled) {\r\n background: #0056b3;\r\n }\r\n \r\n .btn-secondary {\r\n background: #6c757d;\r\n color: white;\r\n }\r\n \r\n .btn-secondary:hover {\r\n background: #545b62;\r\n }\r\n `]\r\n})\r\nexport class CideAdmUserDocumentsComponent implements OnInit {\r\n private fb = inject(FormBuilder);\r\n private route = inject(ActivatedRoute);\r\n private router = inject(Router);\r\n\r\n // Signals\r\n isEditMode = signal(false);\r\n isSubmitting = signal(false);\r\n \r\n // Form\r\n documentForm!: FormGroup;\r\n\r\n ngOnInit() {\r\n this.initializeForm();\r\n this.checkEditMode();\r\n }\r\n\r\n private initializeForm() {\r\n this.documentForm = this.fb.group({\r\n syusd_doc_number: ['', [Validators.required]],\r\n syusd_address_type_id_sygms: ['', [Validators.required]],\r\n syusd_doc_name_as_per_doc: ['', [Validators.required]],\r\n syusd_doc_issue_date: [''],\r\n syusd_doc_expiry_date: [''],\r\n syusd_photo_group_id_cyfm: [''],\r\n syusd_doc_verification_status_id_sygms: [''],\r\n syusd_doc_kyc_status_id_sygms: [''],\r\n syusd_isactive: [true]\r\n });\r\n }\r\n\r\n private checkEditMode() {\r\n const id = this.route.snapshot.paramMap.get('id');\r\n if (id) {\r\n this.isEditMode.set(true);\r\n this.loadDocument(id);\r\n }\r\n }\r\n\r\n private loadDocument(id: string) {\r\n // TODO: Load document data from service\r\n console.log('Loading document:', id);\r\n }\r\n\r\n onSubmit() {\r\n if (this.documentForm.valid) {\r\n this.isSubmitting.set(true);\r\n \r\n const formData = this.documentForm.value;\r\n console.log('Form data:', formData);\r\n \r\n // TODO: Submit to service\r\n setTimeout(() => {\r\n this.isSubmitting.set(false);\r\n this.goBack();\r\n }, 1000);\r\n } else {\r\n this.markFormGroupTouched();\r\n }\r\n }\r\n\r\n private markFormGroupTouched() {\r\n Object.keys(this.documentForm.controls).forEach(key => {\r\n const control = this.documentForm.get(key);\r\n control?.markAsTouched();\r\n });\r\n }\r\n\r\n goBack() {\r\n this.router.navigate(['/admin/user-master']);\r\n }\r\n}\r\n","import { Component, inject, signal, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'cide-adm-user-entity-access',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n template: `\r\n <div class=\"user-entity-access-container\">\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <h2 class=\"card-title\">\r\n {{ isEditMode() ? 'Edit' : 'Add' }} Entity Access\r\n </h2>\r\n <div class=\"header-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"btn btn-secondary\"\r\n (click)=\"goBack()\"\r\n (keyup.enter)=\"goBack()\"\r\n >\r\n <i class=\"fas fa-arrow-left\"></i> Back\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div class=\"card-content\">\r\n <form [formGroup]=\"accessForm\" (ngSubmit)=\"onSubmit()\">\r\n <div class=\"form-section\">\r\n <h3>Entity Information</h3>\r\n \r\n <div class=\"form-row\">\r\n <div class=\"form-field\">\r\n <label for=\"syepm_entity_id_syen\">Entity ID *</label>\r\n <input \r\n id=\"syepm_entity_id_syen\"\r\n type=\"text\" \r\n formControlName=\"syepm_entity_id_syen\" \r\n placeholder=\"Enter entity ID\"\r\n class=\"form-input\"\r\n >\r\n @if (accessForm.get('syepm_entity_id_syen')?.hasError('required') && accessForm.get('syepm_entity_id_syen')?.touched) {\r\n <div class=\"error-message\">\r\n Entity ID is required\r\n </div>\r\n }\r\n </div>\r\n \r\n <div class=\"form-field\">\r\n <label for=\"syepm_ownership_status\">Ownership Status</label>\r\n <select \r\n id=\"syepm_ownership_status\"\r\n formControlName=\"syepm_ownership_status\"\r\n class=\"form-select\"\r\n >\r\n <option value=\"\">Select ownership status</option>\r\n <option value=\"owner\">Owner</option>\r\n <option value=\"admin\">Admin</option>\r\n <option value=\"user\">User</option>\r\n <option value=\"viewer\">Viewer</option>\r\n <option value=\"guest\">Guest</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-row\">\r\n <div class=\"form-field\">\r\n <label for=\"syepm_access_passs_to\">Access Pass To</label>\r\n <input \r\n id=\"syepm_access_passs_to\"\r\n type=\"text\" \r\n formControlName=\"syepm_access_passs_to\" \r\n placeholder=\"Enter access pass details\"\r\n class=\"form-input\"\r\n >\r\n </div>\r\n \r\n <div class=\"form-field\">\r\n <label for=\"syepm_isactive\">Access Status</label>\r\n <div class=\"checkbox-field\">\r\n <input \r\n id=\"syepm_isactive\"\r\n type=\"checkbox\" \r\n formControlName=\"syepm_isactive\"\r\n class=\"form-checkbox\"\r\n >\r\n <label for=\"syepm_isactive\" class=\"checkbox-label\">\r\n Access is active\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-section\">\r\n <h3>Permissions</h3>\r\n \r\n <div class=\"form-row\">\r\n <div class=\"form-field\">\r\n <label for=\"can_edit\">Can Edit</label>\r\n <div class=\"checkbox-field\">\r\n <input \r\n id=\"can_edit\"\r\n type=\"checkbox\" \r\n formControlName=\"can_edit\"\r\n class=\"form-checkbox\"\r\n >\r\n <label for=\"can_edit\" class=\"checkbox-label\">\r\n User can edit this entity\r\n </label>\r\n </div>\r\n </div>\r\n \r\n <div class=\"form-field\">\r\n <label for=\"can_view\">Can View</label>\r\n <div class=\"checkbox-field\">\r\n <input \r\n id=\"can_view\"\r\n type=\"checkbox\" \r\n formControlName=\"can_view\"\r\n class=\"form-checkbox\"\r\n >\r\n <label for=\"can_view\" class=\"checkbox-label\">\r\n User can view this entity\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-section\">\r\n <h3>Additional Information</h3>\r\n \r\n <div class=\"form-row\">\r\n <div class=\"form-field\">\r\n <label for=\"syepm_user_id_user\">User ID</label>\r\n <input \r\n id=\"syepm_user_id_user\"\r\n type=\"text\" \r\n formControlName=\"syepm_user_id_user\" \r\n placeholder=\"Enter user ID\"\r\n class=\"form-input\"\r\n readonly\r\n >\r\n <small class=\"form-help\">This field is automatically populated</small>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"btn btn-secondary\"\r\n (click)=\"goBack()\"\r\n (keyup.enter)=\"goBack()\"\r\n >\r\n Cancel\r\n </button>\r\n <button \r\n type=\"submit\" \r\n class=\"btn btn-primary\"\r\n [disabled]=\"accessForm.invalid || isSubmitting()\"\r\n >\r\n {{ isSubmitting() ? 'Saving...' : (isEditMode() ? 'Update' : 'Save') }}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n .user-entity-access-container {\r\n padding: 20px;\r\n }\r\n \r\n .card {\r\n background: white;\r\n border-radius: 8px;\r\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\r\n margin-bottom: 20px;\r\n }\r\n \r\n .card-header {\r\n padding: 20px;\r\n border-bottom: 1px solid #e0e0e0;\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n }\r\n \r\n .card-title {\r\n margin: 0;\r\n color: #333;\r\n font-size: 24px;\r\n }\r\n \r\n .header-actions {\r\n display: flex;\r\n gap: 10px;\r\n }\r\n \r\n .card-content {\r\n padding: 20px;\r\n }\r\n \r\n .form-section {\r\n margin-bottom: 30px;\r\n }\r\n \r\n .form-section h3 {\r\n color: #495057;\r\n border-bottom: 2px solid #007bff;\r\n padding-bottom: 10px;\r\n margin-bottom: 20px;\r\n }\r\n \r\n .form-row {\r\n display: grid;\r\n grid-template-columns: 1fr 1fr;\r\n gap: 20px;\r\n margin-bottom: 20px;\r\n }\r\n \r\n .form-field {\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n \r\n .form-field label {\r\n margin-bottom: 8px;\r\n font-weight: 500;\r\n color: #495057;\r\n }\r\n \r\n .form-input,\r\n .form-select {\r\n padding: 10px;\r\n border: 1px solid #ddd;\r\n border-radius: 4px;\r\n font-size: 14px;\r\n transition: border-color 0.3s ease;\r\n }\r\n \r\n .form-input:focus,\r\n .form-select:focus {\r\n outline: none;\r\n border-color: #007bff;\r\n box-shadow: 0 0 0 2px rgba(0,123,255,0.25);\r\n }\r\n \r\n .form-input[readonly] {\r\n background-color: #f8f9fa;\r\n cursor: not-allowed;\r\n }\r\n \r\n .checkbox-field {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n margin-top: 10px;\r\n }\r\n \r\n .form-checkbox {\r\n width: 18px;\r\n height: 18px;\r\n accent-color: #007bff;\r\n }\r\n \r\n .checkbox-label {\r\n margin: 0;\r\n cursor: pointer;\r\n }\r\n \r\n .form-help {\r\n color: #6c757d;\r\n font-size: 12px;\r\n margin-top: 5px;\r\n font-style: italic;\r\n }\r\n \r\n .error-message {\r\n color: #dc3545;\r\n font-size: 12px;\r\n margin-top: 5px;\r\n }\r\n \r\n .form-actions {\r\n display: flex;\r\n justify-content: flex-end;\r\n gap: 15px;\r\n margin-top: 30px;\r\n padding-top: 20px;\r\n border-top: 1px solid #e0e0e0;\r\n }\r\n \r\n .btn {\r\n padding: 10px 20px;\r\n border: none;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n font-size: 14px;\r\n transition: all 0.3s ease;\r\n }\r\n \r\n .btn:disabled {\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n }\r\n \r\n .btn-primary {\r\n background: #007bff;\r\n color: white;\r\n }\r\n \r\n .btn-primary:hover:not(:disabled) {\r\n background: #0056b3;\r\n }\r\n \r\n .btn-secondary {\r\n background: #6c757d;\r\n color: white;\r\n }\r\n \r\n .btn-secondary:hover {\r\n background: #545b62;\r\n }\r\n `]\r\n})\r\nexport class CideAdmUserEntityAccessComponent implements OnInit {\r\n private fb = inject(FormBuilder);\r\n private route = inject(ActivatedRoute);\r\n private router = inject(Router);\r\n\r\n // Signals\r\n isEditMode = signal(false);\r\n isSubmitting = signal(false);\r\n \r\n // Form\r\n accessForm!: FormGroup;\r\n\r\n ngOnInit() {\r\n this.initializeForm();\r\n this.checkEditMode();\r\n }\r\n\r\n private initializeForm() {\r\n this.accessForm = this.fb.group({\r\n syepm_entity_id_syen: ['', [Validators.required]],\r\n syepm_ownership_status: [''],\r\n syepm_access_passs_to: [''],\r\n syepm_isactive: [true],\r\n can_edit: [false],\r\n can_view: [true],\r\n syepm_user_id_user: [''] // This will be populated from route or service\r\n });\r\n }\r\n\r\n private checkEditMode() {\r\n const id = this.route.snapshot.paramMap.get('id');\r\n if (id) {\r\n this.isEditMode.set(true);\r\n this.loadAccess(id);\r\n }\r\n }\r\n\r\n private loadAccess(id: string) {\r\n // TODO: Load access data from service\r\n console.log('Loading access:', id);\r\n }\r\n\r\n onSubmit() {\r\n if (this.accessForm.valid) {\r\n this.isSubmitting.set(true);\r\n \r\n const formData = this.accessForm.value;\r\n \r\n // Transform the form data to match the expected structure\r\n const transformedData = {\r\n ...formData,\r\n syepm_actions_allowed: {\r\n can_edit: { status: formData.can_edit },\r\n can_view: { status: formData.can_view }\r\n }\r\n };\r\n \r\n // Remove the individual checkbox values as they're now in actions_allowed\r\n delete transformedData.can_edit;\r\n delete transformedData.can_view;\r\n \r\n console.log('Form data:', transformedData);\r\n \r\n // TODO: Submit to service\r\n setTimeout(() => {\r\n this.isSubmitting.set(false);\r\n this.goBack();\r\n }, 1000);\r\n } else {\r\n this.markFormGroupTouched();\r\n }\r\n }\r\n\r\n private markFormGroupTouched() {\r\n Object.keys(this.accessForm.controls).forEach(key => {\r\n const control = this.accessForm.get(key);\r\n control?.markAsTouched();\r\n });\r\n }\r\n\r\n goBack() {\r\n this.router.navigate(['/admin/user-master']);\r\n }\r\n}\r\n","import { Component, inject, signal, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'cide-adm-user-family-details',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n template: `\r\n <div class=\"family-details-container\">\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <h2 class=\"card-title\">\r\n {{ isEditMode() ? 'Edit' : 'Add' }} Family Member\r\n </h2>\r\n <div class=\"header-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"btn btn-secondary\"\r\n (click)=\"goBack()\"\r\n (keyup.enter)=\"goBack()\"\r\n >\r\n <i class=\"fas fa-arrow-left\"></i> Back\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div class=\"card-content\">\r\n <form [formGroup]=\"familyForm\" (ngSubmit)=\"onSubmit()\">\r\n <div class=\"form-section\">\r\n <h3>Family Member Information</h3>\r\n \r\n <div class=\"form-row\">\r\n <div class=\"form-field\">\r\n <label for=\"syfdl_family_member_name\">Family Member Name *</label>\r\n <input \r\n id=\"syfdl_family_member_name\"\r\n type=\"text\" \r\n formControlName=\"syfdl_family_member_name\" \r\n placeholder=\"Enter full name of family member\"\r\n class=\"form-input\"\r\n >\r\n @if (familyForm.get('syfdl_family_member_name')?.hasError('required') && familyForm.get('syfdl_family_member_name')?.touched) {\r\n <div class=\"error-message\">\r\n Family member name is required\r\n </div>\r\n }\r\n </div>\r\n \r\n <div class=\"form-field\">\r\n <label for=\"syfdl_relationship_id_sygms\">Relationship *</label>\r\n <select \r\n id=\"syfdl_relationship_id_sygms\"\r\n formControlName=\"syfdl_relationship_id_sygms\"\r\n class=\"form-select\"\r\n >\r\n <option value=\"\">Select relationship</option>\r\n <option value=\"spouse\">Spouse</option>\r\n <option value=\"father\">Father</option>\r\n <option value=\"mother\">Mother</option>\r\n <option value=\"son\">Son</option>\r\n <option value=\"daughter\">Daughter</option>\r\n <option value=\"brother\">Brother</option>\r\n <option value=\"sister\">Sister</option>\r\n <option value=\"grandfather\">Grandfather</option>\r\n <option value=\"grandmother\">Grandmother</option>\r\n <option value=\"uncle\">Uncle</option>\r\n <option value=\"aunt\">Aunt</option>\r\n <option value=\"cousin\">Cousin</option>\r\n <option value=\"other\">Other</option>\r\n </select>\r\n @if (familyForm.get('syfdl_relationship_id_sygms')?.hasError('required') && familyForm.get('syfdl_relationship_id_sygms')?.touched) {\r\n <div class=\"error-message\">\r\n Relationship is required\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-row\">\r\n <div class=\"form-field\">\r\n <label for=\"syfdl_family_member_dob\">Date of Birth</label>\r\n <input \r\n id=\"syfdl_family_member_dob\"\r\n type=\"date\" \r\n formControlName=\"syfdl_family_member_dob\" \r\n class=\"form-input\"\r\n >\r\n </div>\r\n \r\n <div class=\"form-field\">\r\n <label for=\"syfdl_blood_group_sygms\">Blood Group</label>\r\n <select \r\n id=\"syfdl_blood_group_sygms\"\r\n formControlName=\"syfdl_blood_group_sygms\"\r\n class=\"form-select\"\r\n >\r\n <option value=\"\">Select blood group</option>\r\n <option value=\"A+\">A+</option>\r\n <option value=\"A-\">A-</option>\r\n <option value=\"B+\">B+</option>\r\n <option value=\"B-\">B-</option>\r\n <option value=\"AB+\">AB+</option>\r\n <option value=\"AB-\">AB-</option>\r\n <option value=\"O+\">O+</option>\r\n <option value=\"O-\">O-</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-row\">\r\n <div class=\"form-field\">\r\n <label for=\"syfdl_contact_number\">Contact Number *</label>\r\n <input \r\n id=\"syfdl_contact_number\"\r\n type=\"tel\" \r\n formControlName=\"syfdl_contact_number\" \r\n placeholder=\"Enter contact number\"\r\n class=\"form-input\"\r\n >\r\n @if (familyForm.get('syfdl_contact_number')?.hasError('required') && familyForm.get('syfdl_contact_number')?.touched) {\r\n <div class=\"error-message\">\r\n Contact number is required\r\n </div>\r\n }\r\n </div>\r\n \r\n <div class=\"form-field\">\r\n <label for=\"syfdl_family_member_id_user\">User ID (if member is a user)</label>\r\n <input \r\n id=\"syfdl_family_member_id_user\"\r\n type=\"text\" \r\n formControlName=\"syfdl_family_member_id_user\" \r\n placeholder=\"Enter user ID if applicable\"\r\n class=\"form-input\"\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-section\">\r\n <h3>Additional Information</h3>\r\n \r\n <div class=\"form-row\">\r\n <div class=\"form-field\">\r\n <label for=\"syfdl_user_id_user\">Primary User ID</label>\r\n <input \r\n id=\"syfdl_user_id_user\"\r\n type=\"text\" \r\n formControlName=\"syfdl_user_id_user\" \r\n placeholder=\"Enter primary user ID\"\r\n class=\"form-input\"\r\n readonly\r\n >\r\n <small class=\"form-help\">This field is automatically populated</small>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"btn btn-secondary\"\r\n (click)=\"goBack()\"\r\n (keyup.enter)=\"goBack()\"\r\n >\r\n Cancel\r\n </button>\r\n <button \r\n type=\"submit\" \r\n class=\"btn btn-primary\"\r\n [disabled]=\"familyForm.invalid || isSubmitting()\"\r\n >\r\n {{ isSubmitting() ? 'Saving...' : (isEditMode() ? 'Update' : 'Save') }}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n .family-details-container {\r\n padding: 20px;\r\n }\r\n \r\n .card {\r\n background: white;\r\n border-radius: 8px;\r\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\r\n margin-bottom: 20px;\r\n }\r\n \r\n .card-header {\r\n padding: 20px;\r\n border-bottom: 1px solid #e0e0e0;\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n }\r\n \r\n .card-title {\r\n margin: 0;\r\n color: #333;\r\n font-size: 24px;\r\n }\r\n \r\n .header-actions {\r\n display: flex;\r\n gap: 10px;\r\n }\r\n \r\n .card-content {\r\n padding: 20px;\r\n }\r\n \r\n .form-section {\r\n margin-bottom: 30px;\r\n }\r\n \r\n .form-section h3 {\r\n color: #495057;\r\n border-bottom: 2px solid #007bff;\r\n padding-bottom: 10px;\r\n margin-bottom: 20px;\r\n }\r\n \r\n .form-row {\r\n display: grid;\r\n grid-template-columns: 1fr 1fr;\r\n gap: 20px;\r\n margin-bottom: 20px;\r\n }\r\n \r\n .form-field {\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n \r\n .form-field label {\r\n margin-bottom: 8px;\r\n font-weight: 500;\r\n color: #495057;\r\n }\r\n \r\n .form-input,\r\n .form-select {\r\n padding: 10px;\r\n border: 1px solid #ddd;\r\n border-radius: 4px;\r\n font-size: 14px;\r\n transition: border-color 0.3s ease;\r\n }\r\n \r\n .form-input:focus,\r\n .form-select:focus {\r\n outline: none;\r\n border-color: #007bff;\r\n box-shadow: 0 0 0 2px rgba(0,123,255,0.25);\r\n }\r\n \r\n .form-input[readonly] {\r\n background-color: #f8f9fa;\r\n cursor: not-allowed;\r\n }\r\n \r\n .form-help {\r\n color: #6c757d;\r\n font-size: 12px;\r\n margin-top: 5px;\r\n font-style: italic;\r\n }\r\n \r\n .error-message {\r\n color: #dc3545;\r\n font-size: 12px;\r\n margin-top: 5px;\r\n }\r\n \r\n .form-actions {\r\n display: flex;\r\n justify-content: flex-end;\r\n gap: 15px;\r\n margin-top: 30px;\r\n padding-top: 20px;\r\n border-top: 1px solid #e0e0e0;\r\n }\r\n \r\n .btn {\r\n padding: 10px 20px;\r\n border: none;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n font-size: 14px;\r\n transition: all 0.3s ease;\r\n }\r\n \r\n .btn:disabled {\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n }\r\n \r\n .btn-primary {\r\n background: #007bff;\r\n color: white;\r\n }\r\n \r\n .btn-primary:hover:not(:disabled) {\r\n background: #0056b3;\r\n }\r\n \r\n .btn-secondary {\r\n background: #6c757d;\r\n color: white;\r\n }\r\n \r\n .btn-secondary:hover {\r\n background: #545b62;\r\n }\r\n `]\r\n})\r\nexport class CideAdmUserFamilyDetailsComponent implements OnInit {\r\n private fb = inject(FormBuilder);\r\n private route = inject(ActivatedRoute);\r\n private router = inject(Router);\r\n\r\n // Signals\r\n isEditMode = signal(false);\r\n isSubmitting = signal(false);\r\n \r\n // Form\r\n familyForm!: FormGroup;\r\n\r\n ngOnInit() {\r\n this.initializeForm();\r\n this.checkEditMode();\r\n }\r\n\r\n private initializeForm() {\r\n this.familyForm = this.fb.group({\r\n syfdl_family_member_name: ['', [Validators.required]],\r\n syfdl_relationship_id_sygms: ['', [Validators.required]],\r\n syfdl_family_member_dob: [''],\r\n syfdl_contact_number: ['', [Validators.required]],\r\n syfdl_blood_group_sygms: [''],\r\n syfdl_family_member_id_user: [''],\r\n syfdl_user_id_user: [''] // This will be populated from route or service\r\n });\r\n }\r\n\r\n private checkEditMode() {\r\n const id = this.route.snapshot.paramMap.get('id');\r\n if (id) {\r\n this.isEditMode.set(true);\r\n this.loadFamilyMember(id);\r\n }\r\n }\r\n\r\n private loadFamilyMember(id: string) {\r\n // TODO: Load family member data from service\r\n console.log('Loading family member:', id);\r\n }\r\n\r\n onSubmit() {\r\n if (this.familyForm.valid) {\r\n this.isSubmitting.set(true);\r\n \r\n const formData = this.familyForm.value;\r\n console.log('Form data:', formData);\r\n \r\n // TODO: Submit to service\r\n setTimeout(() => {\r\n this.isSubmitting.set(false);\r\n this.goBack();\r\n }, 1000);\r\n } else {\r\n this.markFormGroupTouched();\r\n }\r\n }\r\n\r\n private markFormGroupTouched() {\r\n Object.keys(this.familyForm.controls).forEach(key => {\r\n const control = this.familyForm.get(key);\r\n control?.markAsTouched();\r\n });\r\n }\r\n\r\n goBack() {\r\n this.router.navigate(['/admin/user-master']);\r\n }\r\n}\r\n","// User Management Module Export Index\n\n// Components\nexport { UserCreateComponent } from './components/user-create/user-create.component';\nexport { UserListComponent } from './components/user-list/user-list.component';\n\n// Services \nexport * from './services';\n\n// User Forms Components\nexport { CideAdmUserAttributesComponent } from './components/user-forms/cide-adm-user-attributes.component';\nexport { CideAdmUserContactAddressesComponent } from './components/user-forms/cide-adm-user-contact-addresses.component';\nexport { CideAdmUserDocumentsComponent } from './components/user-forms/cide-adm-user-documents.component';\nexport { CideAdmUserEntityAccessComponent } from './components/user-forms/cide-adm-user-entity-access.component';\nexport { CideAdmUserFamilyDetailsComponent } from './components/user-forms/cide-adm-user-family-details.component';\n","/*\n * Public API Surface of cloud-ide-core\n */\nexport * from './lib/cloud-ide-core.routes';\nexport * from './lib/cloud-ide-core.service';\nexport * from './lib/cloud-ide-core.component';\n\n// Menu Management Module\nexport * from './lib/core/menu-management';\n\n// Department Management Module\nexport * from './lib/core/department-management';\n\n// Designation Management Module\nexport * from './lib/core/designation-management';\n\n// Grade Level Management Module\nexport * from './lib/core/grade-level-management';\n\n// Page Management Components\nexport * from './lib/core/page-management';\n\n// User Management Module\nexport * from './lib/core/user-management';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1"],"mappings":"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"}