cloud-ide-core 2.0.42 → 2.0.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"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/general-master-management/services/general-master.service.ts","../../../projects/cloud-ide-core/src/lib/core/general-master-management/services/general-master-type.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/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/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/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';\nimport { authGuard } from 'cloud-ide-auth';\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 // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_menu_list\"\n // }\n // }, \n // {\n // path: 'department',\n // loadComponent: () => import('./core/department-management/components/department-list/department-list.component').then(c => c.CideCoreDepartmentListComponent),\n // title: 'Department Management',\n // canActivate: [authGuard],\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.CideCoreDesignationListComponent),\n // title: 'Designation Management',\n // canActivate: [authGuard],\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.CideCoreGradeLevelListComponent),\n // title: 'Grade Level Management',\n // canActivate: [authGuard],\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.CideCorePageListComponent),\n // title: 'Page Management',\n // canActivate: [authGuard],\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.CideCorePageFormComponent),\n // title: 'Page Form',\n // canActivate: [authGuard],\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.CideCorePageFormComponent),\n // title: 'Page Form',\n // canActivate: [authGuard],\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.CideCorePageThemeComponent),\n // title: 'Page Theme Management',\n // canActivate: [authGuard],\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.CideCorePageThemeComponent),\n // title: 'Page Theme Management',\n // canActivate: [authGuard],\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.CideCorePageControlsComponent),\n // title: 'Page Controls Management',\n // canActivate: [authGuard],\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.CideCorePageControlsComponent),\n // title: 'Page Controls Management',\n // canActivate: [authGuard],\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.CideCoreGeneralMasterComponent),\n // title: 'General Master Entry',\n // canActivate: [authGuard],\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.CideCoreGeneralMasterComponent),\n // title: 'General Master Entry',\n // canActivate: [authGuard],\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.CideCoreGeneralMasterTypeComponent),\n // title: 'General Type Entry',\n // canActivate: [authGuard],\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.CideCoreGeneralMasterTypeComponent),\n // title: 'General Type Entry',\n // canActivate: [authGuard],\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.CideCoreUserListComponent),\n // title: 'User Management',\n // canActivate: [authGuard],\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.CideCoreUserCreateComponent),\n // title: 'Create User',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_user_management_create\"\n // }\n // },\n // {\n // path: 'user-master/edit/:query',\n // loadComponent: () => import('./core/user-management/components/user-create/user-create.component').then(c => c.CideCoreUserCreateComponent),\n // title: 'Edit User',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_user_management_create\"\n // }\n // },\n // {\n // path: 'user-master/view/:query',\n // loadComponent: () => import('./core/user-management/components/user-create/user-create.component').then(c => c.CideCoreUserCreateComponent),\n // title: 'View User',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_user_management_create\"\n // }\n // },\n // {\n // path: \"entity-list\",\n // loadComponent: () => import('./core/entity-management/components/entity-list/entity-list.component').then(c => c.CideCoreEntityListComponent),\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"admin_entity_list\"\n // }\n // },\n // {\n // path: \"entity-create\",\n // loadComponent: () => import('./core/entity-management/components/entity-create/entity-create.component').then(c => c.CideCoreEntityCreateComponent),\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_entity_form\"\n // }\n // },\n // {\n // path: \"entity-create/:query\",\n // loadComponent: () => import('./core/entity-management/components/entity-create/entity-create.component').then(c => c.CideCoreEntityCreateComponent),\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_entity_form\"\n // }\n // },\n // {\n // path: \"org-structure\",\n // loadComponent: () => import('./core/entity-management/components/org-structure/org-structure.component').then(c => c.CideCoreOrgStructureComponent),\n // title: 'Organization Structure',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_org_structure\"\n // }\n // },\n // // User Role Management Routes\n // {\n // path: 'user-role',\n // loadComponent: () => import('./core/user-role-management/components/user-role-list/user-role-list.component').then(c => c.CideCoreUserRoleListComponent),\n // title: 'User Role Management',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_user_role\"\n // }\n // },\n // {\n // path: 'user-role/create',\n // loadComponent: () => import('./core/user-role-management/components/user-role-form/user-role-form.component').then(c => c.CideCoreUserRoleFormComponent),\n // title: 'Create User Role',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_user_role\"\n // }\n // },\n // {\n // path: 'user-role/edit/:query',\n // loadComponent: () => import('./core/user-role-management/components/user-role-form/user-role-form.component').then(c => c.CideCoreUserRoleFormComponent),\n // title: 'Edit User Role',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_user_role\"\n // }\n // },\n // {\n // path: 'user-role/view/:query',\n // loadComponent: () => import('./core/user-role-management/components/user-role-form/user-role-form.component').then(c => c.CideCoreUserRoleFormComponent),\n // title: 'View User Role',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_user_role_view\"\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 menuChangeSequenceControllerResponse, \r\n menuDeleteControllerResponse, \r\n menuListControllerResponse, \r\n MMenuChangeSequencePayload, \r\n MMenuListPayload\r\n} from 'cloud-ide-lms-model';\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 /**\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('CideCoreMenuManagementService API error:', error);\r\n return this.handleError(error);\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 * Change menu sequence\r\n * PATCH ${coreRoutesUrl?.menu}/change-sequence - payload: menu sequence data, response: menuChangeSequenceControllerResponse\r\n */\r\n changeMenuSequence(payload: MMenuChangeSequencePayload): Observable<menuChangeSequenceControllerResponse> {\r\n console.log('Changing menu sequence:', payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, 'change-sequence']);\r\n return this.http.patch<menuChangeSequenceControllerResponse>(url, payload)\r\n .pipe(\r\n tap((response: menuChangeSequenceControllerResponse) => {\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 { Injectable, inject } 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 generalMasterListControllerResponse,\n generalMasterByIdControllerResponse,\n generalMasterInsertUpdateControllerResponse,\n generalMasterDeleteControllerResponse,\n generalMasterToggleStatusControllerResponse,\n ICoreSygms,\n IGeneralMasterListRequest,\n} from 'cloud-ide-lms-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CideCoreGeneralMasterService {\n private http = inject(HttpClient);\n private generalMasterListSubject = new BehaviorSubject<ICoreSygms[]>([]);\n public generalMasterList$ = this.generalMasterListSubject.asObservable();\n\n constructor() {\n console.log('CideCoreGeneralMasterService initialized - using real API');\n }\n\n /**\n * Get general master list from API\n */\n getMasterList(payload: IGeneralMasterListRequest): Observable<generalMasterListControllerResponse> {\n const query = generateStringFromObject(payload);\n return this.http?.get<generalMasterListControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, query]))\n .pipe(\n tap((response: generalMasterListControllerResponse) => {\n if (response?.success) {\n this.generalMasterListSubject.next(response?.data || []);\n }\n }),\n catchError(error => {\n console.error('CideCoreGeneralMasterService API error:', error);\n return this.handleError(error);\n })\n );\n }\n\n /**\n * Get general master list from cache (if available)\n */\n getMasterListFromCache(): ICoreSygms[] {\n return this.generalMasterListSubject.value;\n }\n\n /**\n * Save general master (create or update)\n * POST ${coreRoutesUrl?.generalMaster} - payload: ICoreSygms, response: generalMasterInsertUpdateControllerResponse\n */\n saveMaster(master: ICoreSygms): Observable<generalMasterInsertUpdateControllerResponse> {\n const isUpdate = !!master._id;\n console.log(`${isUpdate ? 'Updating' : 'Creating'} general master:`, master);\n \n // Create proper payload\n const payload: ICoreSygms = {\n ...(master._id && { _id: master._id }), // Only include _id if it exists\n sygms_code: master.sygms_code,\n sygms_id_sygmt: master.sygms_id_sygmt,\n sygms_title: master.sygms_title,\n sygms_desc: master.sygms_desc,\n sygms_isactive: master.sygms_isactive,\n sygms_id_sygms: master.sygms_id_sygms,\n sygms_configuration: master.sygms_configuration,\n sygms_entity_id_syen: master.sygms_entity_id_syen\n };\n \n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster]);\n return this.http.post<generalMasterInsertUpdateControllerResponse>(url, payload)\n .pipe(\n tap((response: generalMasterInsertUpdateControllerResponse) => {\n if (response.success) {\n this.refreshMasterList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Create new general master (backward compatibility)\n */\n createMaster(master: ICoreSygms): Observable<generalMasterInsertUpdateControllerResponse> {\n return this.saveMaster(master);\n }\n\n /**\n * Update existing general master (backward compatibility)\n */\n updateMaster(id: string, master: ICoreSygms): Observable<generalMasterInsertUpdateControllerResponse> {\n return this.saveMaster({ ...master, _id: id });\n }\n\n /**\n * Get general master by ID\n * GET ${coreRoutesUrl?.generalMaster}/byId/:query - payload: { sygms_id: string }, response: generalMasterByIdControllerResponse\n */\n getMasterById(id: string): Observable<generalMasterByIdControllerResponse> {\n console.log('Getting general master by ID:', id);\n const payload = { sygms_id: id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, 'byId', query]);\n return this.http.get<generalMasterByIdControllerResponse>(url)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Delete general master\n * DELETE ${coreRoutesUrl?.generalMaster}/:query - payload: { sygms_id: string }, response: generalMasterDeleteControllerResponse\n */\n deleteMaster(id: string): Observable<generalMasterDeleteControllerResponse> {\n const payload = { sygms_id: id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, query]);\n return this.http.delete<generalMasterDeleteControllerResponse>(url)\n .pipe(\n tap((response: generalMasterDeleteControllerResponse) => {\n if (response.success) {\n this.refreshMasterList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Toggle general master active status\n */\n toggleMasterStatus(id: string): Observable<generalMasterToggleStatusControllerResponse> {\n console.log('Toggling general master status:', id);\n const payload = { id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, query]);\n return this.http.put<generalMasterToggleStatusControllerResponse>(url, {})\n .pipe(\n tap((response: generalMasterToggleStatusControllerResponse) => {\n if (response.success) {\n this.refreshMasterList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Check if master code exists\n */\n checkMasterCodeExists(code: string, typeId: string, excludeId?: string): Observable<{ success: boolean; message: string; exists: boolean }> {\n const payload: Record<string, string> = { code, typeId };\n if (excludeId) {\n payload['excludeId'] = excludeId;\n }\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, 'checkCodeExists', query]);\n return this.http.get<{ success: boolean; message: string; exists: boolean }>(url)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Refresh general master list from server\n */\n private refreshMasterList(): void {\n const defaultPayload: IGeneralMasterListRequest = {};\n this.getMasterList(defaultPayload).subscribe({\n next: () => {\n console.log('General master list refreshed successfully');\n },\n error: (error) => {\n console.error('Error refreshing general master 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('General Master Service Error:', errorMessage);\n return throwError(() => new Error(errorMessage));\n }\n} ","import { Injectable, inject } 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 generalMasterTypeListControllerResponse,\n generalMasterTypeByIdControllerResponse,\n generalMasterTypeInsertUpdateControllerResponse,\n generalMasterTypeDeleteControllerResponse,\n generalMasterTypeToggleStatusControllerResponse,\n MGeneralMasterType,\n MGeneralMasterTypeToggleStatusPayload,\n ICoreSygmt\n} from 'cloud-ide-lms-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CideCoreGeneralMasterTypeService {\n private http = inject(HttpClient);\n private generalMasterTypeListSubject = new BehaviorSubject<ICoreSygmt[]>([]);\n public generalMasterTypeList$ = this.generalMasterTypeListSubject.asObservable();\n\n constructor() {\n console.log('CideCoreGeneralMasterTypeService initialized - using real API');\n }\n\n /**\n * Get general master type list from API\n */\n getTypeList(body: MGeneralMasterType): Observable<generalMasterTypeListControllerResponse> {\n const query = generateStringFromObject(body);\n return this.http?.get<generalMasterTypeListControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, query]))\n .pipe(\n tap((response: generalMasterTypeListControllerResponse) => {\n if (response?.success) {\n this.generalMasterTypeListSubject.next(response?.data || []);\n }\n }),\n catchError(error => {\n console.error('CideCoreGeneralMasterTypeService API error:', error);\n return this.handleError(error);\n })\n );\n }\n\n /**\n * Get general master type list from cache (if available)\n */\n getTypeListFromCache(): ICoreSygmt[] {\n return this.generalMasterTypeListSubject.value;\n }\n\n /**\n * Create or update general master type\n * POST ${coreRoutesUrl?.generalMasterType} - payload: IGeneralMasterTypeCreateUpdatePayload, response: generalMasterTypeInsertUpdateControllerResponse\n * If type._id exists, it will update; otherwise, it will create a new type\n */\n saveType(type: ICoreSygmt): Observable<generalMasterTypeInsertUpdateControllerResponse> {\n const isUpdate = !!type._id;\n console.log(`${isUpdate ? 'Updating' : 'Creating'} general master type:`, type);\n \n // Create proper payload - backend will determine create vs update based on _id presence\n const payload: ICoreSygmt = {\n ...(type._id && { _id: type._id }), // Only include _id if it exists\n sygmt_code: type.sygmt_code,\n sygmt_title: type.sygmt_title,\n sygmt_desc: type.sygmt_desc,\n sygmt_isactive: type.sygmt_isactive,\n sygmt_configuration: type.sygmt_configuration,\n sygmt_id_sygmt: type.sygmt_id_sygmt\n };\n \n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType]);\n return this.http.post<generalMasterTypeInsertUpdateControllerResponse>(url, payload)\n .pipe(\n tap((response: generalMasterTypeInsertUpdateControllerResponse) => {\n if (response.success) {\n this.refreshTypeList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Get general master type by ID\n * GET ${coreRoutesUrl?.generalMasterType}/byId/:query - payload: { sygmt_id: string }, response: generalMasterTypeByIdControllerResponse\n */\n getTypeById(id: string): Observable<generalMasterTypeByIdControllerResponse> {\n console.log('Getting general master type by ID:', id);\n const payload = { sygmt_id: id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, 'byId', query]);\n return this.http.get<generalMasterTypeByIdControllerResponse>(url)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Delete general master type\n * DELETE ${coreRoutesUrl?.generalMasterType}/:query - payload: { sygmt_id: string }, response: generalMasterTypeDeleteControllerResponse\n */\n deleteType(id: string): Observable<generalMasterTypeDeleteControllerResponse> {\n const payload = { sygmt_id: id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, query]);\n return this.http.delete<generalMasterTypeDeleteControllerResponse>(url)\n .pipe(\n tap((response: generalMasterTypeDeleteControllerResponse) => {\n if (response.success) {\n this.refreshTypeList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Delete multiple general master types\n */\n deleteMultipleTypes(ids: string[]): Observable<{ success: boolean; message?: string; data?: unknown }> {\n console.log('Deleting multiple general master types:', ids);\n const payload = { ids };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, 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.refreshTypeList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Toggle general master type active status\n */\n toggleTypeStatus(payload: MGeneralMasterTypeToggleStatusPayload): Observable<generalMasterTypeToggleStatusControllerResponse> {\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, query]);\n return this.http.put<generalMasterTypeToggleStatusControllerResponse>(url, {})\n .pipe(\n tap((response: generalMasterTypeToggleStatusControllerResponse) => {\n if (response.success) {\n this.refreshTypeList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Check if type code exists\n */\n checkTypeCodeExists(code: string, excludeId?: string): Observable<{ success: boolean; message: string; exists: boolean }> {\n const payload: Record<string, string> = { code };\n if (excludeId) {\n payload['excludeId'] = excludeId;\n }\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, 'checkCodeExists', query]);\n return this.http.get<{ success: boolean; message: string; exists: boolean }>(url)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Get hierarchical tree structure\n */\n getTypeTree(): Observable<generalMasterTypeListControllerResponse> {\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, 'tree']);\n return this.http.get<generalMasterTypeListControllerResponse>(url)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Find general master type by ID\n */\n findTypeById(id: string, items: ICoreSygmt[] = this.generalMasterTypeListSubject.value): ICoreSygmt | 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 general master types for dropdown selection\n */\n getParentTypes(excludeId?: string): ICoreSygmt[] {\n const allItems: ICoreSygmt[] = [];\n\n const flattenItems = (items: ICoreSygmt[], level: number = 0) => {\n items.forEach(item => {\n if (item._id !== excludeId) {\n allItems.push({\n ...item,\n sygmt_title: ' '.repeat(level) + item.sygmt_title\n });\n }\n });\n };\n\n flattenItems(this.generalMasterTypeListSubject.value);\n return allItems;\n }\n\n /**\n * Refresh general master type list from server\n */\n private refreshTypeList(): void {\n const defaultBody: MGeneralMasterType = {};\n this.getTypeList(defaultBody).subscribe({\n next: () => {\n console.log('General master type list refreshed successfully');\n },\n error: (error) => {\n console.error('Error refreshing general master type 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('General Master Type Service Error:', errorMessage);\n return throwError(() => new Error(errorMessage));\n }\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, ICoreSygms, IGeneralMasterListRequest } from 'cloud-ide-lms-model';\nimport { MenuManagementService } from '../../services/menu-management.service';\nimport { CideCoreGeneralMasterService } from '../../../general-master-management/services/general-master.service';\nimport { CideCoreGeneralMasterTypeService } from '../../../general-master-management/services/general-master-type.service';\nimport { CideEleButtonComponent, CideIconComponent, CideInputComponent, CideTextareaComponent, GridConfiguration, GridEvent, DropdownItem, CideEleDropdownComponent, NotificationService } from 'cloud-ide-element';\nimport { CideSelectComponent } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { CideEleDataGridComponent } 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 generalMasterService = inject(CideCoreGeneralMasterService);\n private generalMasterTypeService = inject(CideCoreGeneralMasterTypeService);\n private notificationService = inject(NotificationService);\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 permissionsRendererTemplate = viewChild.required<TemplateRef<TemplateContext<ICoreSyme>>>('permissionsRendererTemplate');\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 permissions = signal<ICoreSygms[]>([]);\n userRightsTypeId = signal<string | null>(null);\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 syme_permissions_id_sygms: this.fb.control<string[]>([])\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 { value: 'internal', label: 'Internal Menu' }\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 // Permission options for multi-select\n permissionOptions = computed(() => {\n return this.permissions().map(permission => ({\n value: permission._id || '',\n label: permission.sygms_title || permission.sygms_code || 'Unknown'\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_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 key: 'syme_permissions_id_sygms',\n header: 'Permissions',\n type: 'custom',\n width: '200px',\n truncate: true,\n align: 'left',\n renderer: 'permissionsRenderer'\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: 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 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 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 permissionsRenderer: this.permissionsRendererTemplate(),\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 this.loadUserRightsTypeId();\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[]; allOrders?: ICoreSyme[] }) {\n console.log('🔄 Row reorder event:', data);\n console.log('🔄 Changed items (newOrder):', data.newOrder.length);\n console.log('🔄 All items (allOrders):', data.allOrders?.length || 0);\n\n // Save original order if not already saved\n if (this.originalOrder().length === 0) {\n this.originalOrder.set([...this.menuItems()]);\n }\n\n // Use allOrders if available (complete order), otherwise fallback to newOrder (changed items only)\n const reorderedData = data.allOrders && data.allOrders.length > 0 ? data.allOrders : data.newOrder;\n console.log('🔄 Using reordered data with', reorderedData.length, 'items');\n\n // Update the displayed data with new order\n this.menuItems.set(reorderedData);\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 using the change sequence API\n * This method is called by the data grid when save-order action is triggered\n * Handles both single-level and multi-level (hierarchical) menu structures\n */\n saveMenuOrder() {\n console.log('💾 Saving menu order...');\n \n // Get all menu items including children (handle both hierarchical and flat structures)\n const allMenuItems = this.getAllMenuItemsIncludingChildren(this.menuItems());\n \n // Update sequence numbers for all items based on their current order\n const itemsWithUpdatedSequences = allMenuItems.map((item, index) => ({\n ...item,\n syme_order_by: index + 1\n }));\n \n // Prepare payload for change sequence API with all menu items (including children)\n const payload = {\n menu_sequences: itemsWithUpdatedSequences.map(item => ({\n syme_id: item._id || '',\n syme_order_by: item.syme_order_by || 1\n }))\n };\n\n console.log('📤 Sending change sequence payload for', itemsWithUpdatedSequences.length, 'items:', payload);\n\n // Call the change sequence API\n this.menuService.changeMenuSequence(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Menu sequence updated successfully for', itemsWithUpdatedSequences.length, 'items');\n this.notificationService.success(`Menu sequence updated successfully for ${itemsWithUpdatedSequences.length} items`);\n // Reset change flag first\n this.hasOrderChanged.set(false);\n // Update original order to current state\n this.originalOrder.set([...this.menuItems()]);\n // Refresh the menu list from server to get updated order\n this.loadMenuItems();\n } else {\n console.error('❌ Failed to update menu sequence:', response);\n this.error.set('Failed to update menu sequence');\n this.notificationService.error('Failed to update menu sequence');\n }\n },\n error: (error) => {\n console.error('❌ Error updating menu sequence:', error);\n this.error.set('Failed to update menu sequence');\n this.notificationService.error(`Error updating menu sequence: ${error.message || 'Unknown error occurred'}`);\n }\n });\n }\n\n /**\n * Get all menu items including children from the current data structure\n * This handles both hierarchical and flat menu structures\n */\n private getAllMenuItemsIncludingChildren(menuItems: ICoreSyme[]): ICoreSyme[] {\n const allItems: ICoreSyme[] = [];\n const processedIds = new Set<string>();\n \n const collectItems = (items: ICoreSyme[]) => {\n items.forEach(item => {\n // Avoid duplicates by checking if item is already processed\n if (item._id && !processedIds.has(item._id)) {\n allItems.push(item);\n processedIds.add(item._id);\n \n // Check if item has children property (for hierarchical data from data grid)\n if ((item as any).children && (item as any).children.length > 0) {\n collectItems((item as any).children);\n }\n }\n });\n };\n \n // For flat data structure (which is what data grid sends), just return all items\n // since they're already in the correct order\n if (this.isFlatDataStructure(menuItems)) {\n console.log('🔄 Detected flat data structure, returning all items as-is');\n return menuItems;\n }\n \n // For hierarchical data structure, collect all items recursively\n collectItems(menuItems);\n \n console.log('🔄 Collected', allItems.length, 'menu items including children');\n console.log('📊 Items structure:', allItems.map(item => ({ \n id: item._id, \n title: item.syme_title, \n parent: item.syme_id_syme,\n hasChildren: (item as any).children ? (item as any).children.length : 0\n })));\n \n return allItems;\n }\n\n /**\n * Check if the data structure is flat (no children property) or hierarchical\n */\n private isFlatDataStructure(menuItems: ICoreSyme[]): boolean {\n // If any item has a children property with items, it's hierarchical\n return !menuItems.some(item => (item as any).children && (item as any).children.length > 0);\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_permissions_id_sygms: menuItem.syme_permissions_id_sygms || [],\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 syme_permissions_id_sygms: formValue.syme_permissions_id_sygms || []\n } as any;\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 syme_permissions_id_sygms: []\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 syme_permissions_id_sygms: []\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\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 /**\n * Load user rights type ID from general master types\n */\n private loadUserRightsTypeId(): void {\n this.generalMasterTypeService.getTypeList({\n sygmt_code: \"user_rights\"\n })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n const userRightsType = response.data.find(type =>\n type.sygmt_code === 'user_rights' || type.sygmt_title?.toLowerCase().includes('user_rights')\n );\n if (userRightsType) {\n this.userRightsTypeId.set(userRightsType._id || null);\n this.loadPermissions();\n } else {\n this.error.set('User rights type not found in general master types');\n }\n }\n },\n error: (err) => {\n this.error.set('Failed to load user rights type');\n }\n });\n }\n\n /**\n * Load permissions from general master\n */\n private loadPermissions(): void {\n const typeId = this.userRightsTypeId();\n if (!typeId) {\n this.error.set('User rights type not found. Please ensure the \"user_rights\" type exists in general master types.');\n return;\n }\n\n const payload: IGeneralMasterListRequest = { sygms_id_sygmt: typeId };\n this.generalMasterService.getMasterList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n this.permissions.set(response.data);\n if (this.error()?.includes('permissions')) {\n this.error.set(null);\n }\n } else {\n this.permissions.set([]);\n this.error.set('No permissions found. Please ensure permissions are configured in general master.');\n }\n },\n error: (err) => {\n this.permissions.set([]);\n this.error.set('Failed to load permissions from general master. Please check your configuration.');\n }\n });\n }\n\n /**\n * Get permission names from permission IDs\n */\n getPermissionNames(permissionIds: string[]): string {\n if (!permissionIds || permissionIds.length === 0) {\n return 'No permissions';\n }\n \n const permissionNames = permissionIds\n .map(id => {\n const permission = this.permissions().find(p => p._id === id);\n return permission ? (permission.sygms_title || permission.sygms_code || 'Unknown') : 'Unknown';\n })\n .filter(name => name !== 'Unknown');\n \n return permissionNames.length > 0 ? permissionNames.join(', ') : 'No valid permissions';\n }\n\n /**\n * Get permission by ID\n */\n getPermissionById(permissionId: string): ICoreSygms | undefined {\n return this.permissions().find(p => p._id === permissionId);\n }\n\n /**\n * Get all permission names for tooltip\n */\n getAllPermissionNames(permissionIds: string[]): string {\n if (!permissionIds || permissionIds.length === 0) {\n return 'No permissions';\n }\n \n const permissionNames = permissionIds\n .map(id => {\n const permission = this.permissions().find(p => p._id === id);\n return permission ? (permission.sygms_title || permission.sygms_code || 'Unknown') : 'Unknown';\n })\n .filter(name => name !== 'Unknown');\n \n return permissionNames.length > 0 ? permissionNames.join(', ') : 'No valid permissions';\n }\n\n /**\n * Handle menu type change - clear permissions for non-menu types\n */\n onMenuTypeChange(): void {\n const currentType = this.quickAddForm.get('syme_type')?.value;\n if (currentType !== 'menu') {\n this.quickAddForm.patchValue({\n syme_permissions_id_sygms: []\n });\n }\n }\n\n /**\n * Get dropdown items for menu actions\n */\n getDropdownItems(menuItem: ICoreSyme): DropdownItem[] {\n return [\n {\n id: 'addChild',\n label: 'Add Child',\n icon: 'add',\n disabled: false\n },\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n disabled: false\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n disabled: false\n },\n {\n id: 'toggle',\n label: menuItem.syme_isactive ? 'Deactivate' : 'Activate',\n icon: menuItem.syme_isactive ? 'block' : 'check_circle',\n disabled: false\n }\n ];\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, menuItem: ICoreSyme): void {\n switch (item.id) {\n case 'addChild':\n this.addChildMenuItem(menuItem._id || '', menuItem);\n break;\n case 'edit':\n this.editMenuItem(menuItem._id || '');\n break;\n case 'delete':\n this.deleteMenuItem(menuItem._id || '');\n break;\n case 'toggle':\n this.toggleItemStatus(menuItem._id || '');\n break;\n }\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 (ngModelChange)=\"onMenuTypeChange()\">\n </cide-ele-select>\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 <!-- 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 <!-- Empty div for spacing -->\n <div></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 <!-- Permissions (only show for menu and title types) -->\n @if (quickAddForm.get('syme_type')?.value === 'menu') {\n <div>\n <cide-ele-select \n label=\"Permissions\" \n [options]=\"permissionOptions()\" \n formControlName=\"syme_permissions_id_sygms\"\n placeholder=\"Select permissions for this menu\"\n [multiple]=\"true\"\n size=\"sm\">\n </cide-ele-select>\n </div>\n }\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 <!-- Active Status and Action Buttons -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <!-- Active Checkbox -->\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 \n <!-- Action Buttons -->\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 <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative tw-p-0\">\n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-w-full tw-overflow-auto\">\n \n <cide-ele-data-grid \n [config]=\"gridConfig()\" \n [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\"\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<!-- Permissions Renderer Template -->\n<ng-template #permissionsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-flex-wrap tw-gap-1 tw-max-w-full tw-items-center\">\n @if (row.syme_type === 'menu') {\n @if (row.syme_permissions_id_sygms && row.syme_permissions_id_sygms.length > 0) {\n @for (permissionId of row.syme_permissions_id_sygms.slice(0, 3); track permissionId) {\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-blue-100 tw-text-blue-800 tw-whitespace-nowrap tw-h-5\">\n {{ getPermissionById(permissionId)?.sygms_title || getPermissionById(permissionId)?.sygms_code || 'Unknown' }}\n </span>\n }\n @if (row.syme_permissions_id_sygms.length > 3) {\n <span \n 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-gray-100 tw-text-gray-600 tw-whitespace-nowrap tw-cursor-help tw-h-5\"\n [title]=\"getAllPermissionNames(row.syme_permissions_id_sygms)\">\n +{{ row.syme_permissions_id_sygms.length - 3 }} more\n </span>\n }\n } @else {\n <span class=\"tw-text-xs tw-text-gray-500 tw-h-5 tw-flex tw-items-center\">No permissions</span>\n }\n } @else {\n <!-- Show N/A for module, section, and title types -->\n <span class=\"tw-text-xs tw-text-gray-400 tw-h-5 tw-flex tw-items-center\">N/A</span>\n }\n </div>\n</ng-template>\n\n","/*\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';","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 CideCoreDepartmentManagementService {\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('CideCoreDepartmentManagementService 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('CideCoreDepartmentManagementService 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 { CideCoreDepartmentManagementService } from '../../services/department-management.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideLytSharedWrapperComponent } 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-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 CideLytSharedWrapperComponent\n ],\n templateUrl: './department-list.component.html',\n styleUrls: []\n})\nexport class CideCoreDepartmentListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private departmentService = inject(CideCoreDepartmentManagementService);\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('CideCoreDepartmentListComponent 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('🚀 CideCoreDepartmentListComponent.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('📥 CideCoreDepartmentListComponent 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('❌ CideCoreDepartmentListComponent error:', err);\n this.error.set(err.message || 'An error occurred while loading departments');\n },\n complete: () => {\n console.log('CideCoreDepartmentListComponent 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 with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_department_list' }\">\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 <!-- 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>\n</cide-lyt-shared-wrapper> ","// 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 MDesignationToggleStatusPayload,\n designationToggleStatusControllerResponse,\n} from 'cloud-ide-lms-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CideCoreDesignationManagementService {\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('CideCoreDesignationManagementService 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('CideCoreDesignationManagementService 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<designationToggleStatusControllerResponse> {\n console.log('Toggling designation status:', id);\n const payload: MDesignationToggleStatusPayload = { sydsg_id: id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation, \"toggleStatus\", query]);\n return this.http.put<designationToggleStatusControllerResponse>(url, {})\n .pipe(\n tap((response: designationToggleStatusControllerResponse) => {\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 gradeLevelToggleStatusControllerResponse,\r\n MGradeLevel,\r\n MGradeLevelGetByIdPayload,\r\n MGradeLevelToggleStatusPayload,\r\n MGradeLevelDeletePayload,\r\n gradeLevelDeleteControllerResponse,\r\n MGradeLevelChangeSequencePayload,\r\n gradeLevelChangeSequenceControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideCoreGradeLevelManagementService {\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('CideCoreGradeLevelManagementService 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('CideCoreGradeLevelManagementService 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(payload: MGradeLevelGetByIdPayload): Observable<gradeLevelByIdControllerResponse> {\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<gradeLevelDeleteControllerResponse> {\r\n const payload: MGradeLevelDeletePayload = { sydsgl_id: 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<gradeLevelDeleteControllerResponse>(url)\r\n .pipe(\r\n tap((response: gradeLevelDeleteControllerResponse) => {\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 * PATCH ${coreRoutesUrl?.gradeLevel}/toggle-status - payload: { id }, response: gradeLevelToggleStatusControllerResponse\r\n */\r\n toggleGradeLevelStatus(id: string): Observable<gradeLevelToggleStatusControllerResponse> {\r\n console.log('Toggling grade level status:', id);\r\n const payload: MGradeLevelToggleStatusPayload = { sydsgl_id: id };\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, 'toggle-status']);\r\n return this.http.patch<gradeLevelToggleStatusControllerResponse>(url, payload)\r\n .pipe(\r\n tap((response: gradeLevelToggleStatusControllerResponse) => {\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 * Change grade level sequence\r\n * PATCH ${coreRoutesUrl?.gradeLevel}/change-sequence - payload: MGradeLevelChangeSequencePayload, response: gradeLevelChangeSequenceControllerResponse\r\n */\r\n changeGradeLevelSequence(payload: MGradeLevelChangeSequencePayload): Observable<gradeLevelChangeSequenceControllerResponse> {\r\n console.log('Changing grade level sequence:', payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, 'change-sequence']);\r\n return this.http.patch<gradeLevelChangeSequenceControllerResponse>(url, payload)\r\n .pipe(\r\n tap((response: gradeLevelChangeSequenceControllerResponse) => {\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 { CideCoreDesignationManagementService } from '../../services/designation-management.service';\nimport { CideCoreGradeLevelManagementService } from '../../../grade-level-management/services/grade-level-management.service';\nimport { CideCoreDepartmentManagementService } from '../../../department-management/services/department-management.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideEleDataGridComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, NotificationService, ConfirmationService } 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-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 CideLytSharedWrapperComponent\n ],\n templateUrl: './designation-list.component.html',\n styleUrls: []\n})\nexport class CideCoreDesignationListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private designationService = inject(CideCoreDesignationManagementService);\n private gradeLevelService = inject(CideCoreGradeLevelManagementService);\n private departmentService = inject(CideCoreDepartmentManagementService);\n private appState = inject(AppStateHelperService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\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('CideCoreDesignationListComponent initialized with modern Angular patterns');\n // Load designations first since department and grade level data is populated in the response\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('🚀 CideCoreDesignationListComponent.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('📥 CideCoreDesignationListComponent 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 \n // Extract and set departments and grade levels from populated data\n this.extractAndSetDepartmentsAndGradeLevels(designationData);\n \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('❌ CideCoreDesignationListComponent error:', err);\n this.error.set(err.message || 'An error occurred while loading designations');\n },\n complete: () => {\n console.log('CideCoreDesignationListComponent loadDesignations completed');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Load departments from service\n */\n loadDepartments(): void {\n console.log('🚀 CideCoreDesignationListComponent.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('📥 CideCoreDesignationListComponent 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('🚀 CideCoreDesignationListComponent.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 * Based on FK relationships: _id (PK) -> sydsg_prent_id_desg (FK) OR sydsg_department_id_sydpt (FK)\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 // Extract unique departments from designation data (since department data is populated)\n const uniqueDepartments = this.extractDepartmentsFromDesignations(designations);\n console.log('🏢 Extracted departments from designations:', uniqueDepartments);\n\n // First, build department hierarchy\n const departmentNodes = this.buildDepartmentHierarchy(uniqueDepartments);\n\n // Build complete designation hierarchy and add to departments\n this.buildAndAddDesignationHierarchy(departmentNodes, designations);\n\n console.log('✅ Final hierarchical data:', departmentNodes);\n return departmentNodes;\n }\n\n /**\n * Extract and set departments and grade levels from populated designation data\n */\n private extractAndSetDepartmentsAndGradeLevels(designations: ICoreSydsg[]): void {\n const departmentMap = new Map<string, ICoreSydept>();\n const gradeLevelMap = new Map<string, ICoreSydsgl>();\n \n designations.forEach(designation => {\n // Extract departments (using type assertion since API response includes populated data)\n const designationWithPopulated = designation as any;\n if (designationWithPopulated.department && designationWithPopulated.department._id) {\n departmentMap.set(designationWithPopulated.department._id, designationWithPopulated.department);\n console.log(`🏢 Found department in designation: ${designationWithPopulated.department.sydept_name}`);\n }\n \n // Extract grade levels\n if (designationWithPopulated.gradeLevel && designationWithPopulated.gradeLevel._id) {\n gradeLevelMap.set(designationWithPopulated.gradeLevel._id, designationWithPopulated.gradeLevel);\n console.log(`📚 Found grade level in designation: ${designationWithPopulated.gradeLevel.sydsgl_name}`);\n }\n });\n \n // Set the extracted data to signals\n this.departments.set(Array.from(departmentMap.values()));\n this.gradeLevels.set(Array.from(gradeLevelMap.values()));\n \n console.log(`🏢 Set ${departmentMap.size} departments and ${gradeLevelMap.size} grade levels from designation data`);\n }\n\n /**\n * Extract unique departments from designation data (since department data is populated in API response)\n */\n private extractDepartmentsFromDesignations(designations: ICoreSydsg[]): ICoreSydept[] {\n const departmentMap = new Map<string, ICoreSydept>();\n \n designations.forEach(designation => {\n const designationWithPopulated = designation as any;\n if (designationWithPopulated.department && designationWithPopulated.department._id) {\n // Use the populated department data from the designation\n departmentMap.set(designationWithPopulated.department._id, designationWithPopulated.department);\n console.log(`🏢 Found department in designation: ${designationWithPopulated.department.sydept_name}`);\n }\n });\n \n const uniqueDepartments = Array.from(departmentMap.values());\n console.log(`🏢 Extracted ${uniqueDepartments.length} unique departments from designations`);\n return uniqueDepartments;\n }\n\n /**\n * Build and add designation hierarchy to department hierarchy\n * This method handles the complete designation hierarchy and adds it to the appropriate departments\n */\n private buildAndAddDesignationHierarchy(departmentNodes: HierarchicalNode[], designations: ICoreSydsg[]): void {\n console.log('🔍 Building and adding designation hierarchy...');\n\n // Create designation nodes map\n const designationMap = new Map<string, HierarchicalNode>();\n \n // First pass: create all designation nodes\n designations.forEach(designation => {\n console.log(`👔 Creating designation node: ${designation.sydsg_name} (${designation._id})`);\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, // Will be updated based on hierarchy\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 || '', designation),\n parentId: null // Will be set based on FK relationships\n };\n\n designationMap.set(designation._id || '', designationNode);\n });\n\n // Second pass: build parent-child relationships\n designations.forEach(designation => {\n const designationNode = designationMap.get(designation._id || '');\n if (!designationNode) return;\n\n if (designation.sydsg_prent_id_desg) {\n // Has parent designation - use designation hierarchy\n const parentNode = designationMap.get(designation.sydsg_prent_id_desg);\n if (parentNode) {\n parentNode.children.push(designationNode);\n parentNode.hasChildren = true;\n designationNode.level = parentNode.level + 1;\n designationNode.parentId = parentNode._id;\n console.log(`📁 Added ${designation.sydsg_name} as child of ${parentNode.name} (level ${designationNode.level})`);\n } else {\n console.log(`⚠️ Parent designation not found for ${designation.sydsg_name}: ${designation.sydsg_prent_id_desg}`);\n }\n }\n });\n\n // Third pass: add root designations to departments\n const rootDesignations = Array.from(designationMap.values()).filter(node => !node.parentId);\n console.log(`🔍 Found ${rootDesignations.length} root designations`);\n\n rootDesignations.forEach(rootDesignation => {\n const designation = designations.find(d => d._id === rootDesignation._id);\n if (designation && designation.sydsg_department_id_sydpt) {\n // Find the department node\n const departmentNode = departmentNodes.find(dept => \n dept._id === `dept_${designation.sydsg_department_id_sydpt}`\n );\n \n if (departmentNode) {\n console.log(`🏢 Adding root designation ${rootDesignation.name} to department ${departmentNode.name}`);\n rootDesignation.level = departmentNode.level + 1;\n rootDesignation.parentId = departmentNode._id;\n departmentNode.children.push(rootDesignation);\n departmentNode.hasChildren = true;\n } else {\n console.log(`⚠️ Department not found for designation ${rootDesignation.name}: ${designation.sydsg_department_id_sydpt}`);\n }\n } else {\n console.log(`⚠️ Root designation ${rootDesignation.name} has no department`);\n }\n });\n\n console.log('✅ Designation hierarchy built and added to departments');\n }\n\n /**\n * Build designation hierarchy based on FK relationships\n * PK: _id, FK: sydsg_prent_id_desg (if set) OR sydsg_department_id_sydpt (if no parent designation)\n */\n private buildDesignationHierarchy(designations: ICoreSydsg[]): HierarchicalNode[] {\n const designationMap = new Map<string, HierarchicalNode>();\n const rootDesignations: HierarchicalNode[] = [];\n\n console.log('🔍 Building designation hierarchy...');\n\n // First pass: create all designation nodes\n designations.forEach(designation => {\n console.log(`👔 Creating designation node: ${designation.sydsg_name} (${designation._id})`);\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, // Will be updated based on hierarchy\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 || '', designation),\n parentId: null // Will be set based on FK relationships\n };\n\n designationMap.set(designation._id || '', designationNode);\n });\n\n // Second pass: build parent-child relationships based on FK\n designations.forEach(designation => {\n const designationNode = designationMap.get(designation._id || '');\n if (!designationNode) return;\n\n // Determine parent based on FK relationships\n let parentId: string | null = null;\n\n if (designation.sydsg_prent_id_desg) {\n // Has parent designation - use designation hierarchy\n parentId = designation.sydsg_prent_id_desg;\n console.log(`📁 ${designation.sydsg_name} has parent designation: ${parentId}`);\n } else if (designation.sydsg_department_id_sydpt) {\n // No parent designation but has department - use department as parent\n parentId = `dept_${designation.sydsg_department_id_sydpt}`;\n console.log(`🏢 ${designation.sydsg_name} belongs to department: ${parentId}`);\n } else {\n console.log(`🔍 ${designation.sydsg_name} has no parent designation and no department`);\n }\n\n designationNode.parentId = parentId;\n\n if (parentId) {\n // Check if parent is a designation or department\n if (parentId.startsWith('dept_')) {\n // Parent is a department - will be handled in addDesignationHierarchyToDepartments\n console.log(`🏢 ${designation.sydsg_name} will be added to department hierarchy`);\n } else {\n // Parent is a designation\n const parentNode = designationMap.get(parentId);\n if (parentNode) {\n parentNode.children.push(designationNode);\n parentNode.hasChildren = true;\n designationNode.level = parentNode.level + 1;\n console.log(`📁 Added ${designation.sydsg_name} as child of ${parentNode.name} (level ${designationNode.level})`);\n } else {\n // Parent designation not found, treat as root\n rootDesignations.push(designationNode);\n console.log(`👔 Added ${designation.sydsg_name} as root (parent designation not found: ${parentId})`);\n }\n }\n } else {\n // No parent - this is a root designation\n rootDesignations.push(designationNode);\n console.log(`👔 Added ${designation.sydsg_name} as root designation`);\n }\n });\n\n console.log(`✅ Built designation hierarchy with ${rootDesignations.length} root designations`);\n console.log(`🔍 Root designations:`, rootDesignations.map(d => ({ id: d._id, name: d.name, parentId: d.parentId })));\n console.log(`🔍 All designation nodes:`, designationMap.size);\n return rootDesignations;\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 designation hierarchy to department hierarchy\n * Designations with department as parent (sydsg_department_id_sydpt) will be added to departments\n */\n private addDesignationHierarchyToDepartments(departmentNodes: HierarchicalNode[], designationNodes: HierarchicalNode[]): void {\n const addDesignationsToNode = (node: HierarchicalNode) => {\n // Find designations that belong to this department\n const departmentId = node._id.replace('dept_', '');\n const departmentDesignations = designationNodes.filter(designationNode => {\n const designation = this.designations().find(d => d._id === designationNode._id);\n return designation && \n designation.sydsg_department_id_sydpt === departmentId && \n !designation.sydsg_prent_id_desg; // Only root designations (no parent designation)\n });\n\n console.log(`📋 Found ${departmentDesignations.length} root designations for department ${node.name}`);\n console.log(`🔍 Department ID: ${departmentId}`);\n console.log(`🔍 Available designation nodes:`, designationNodes.map(d => ({ id: d._id, name: d.name, parentId: d.parentId })));\n console.log(`🔍 Designations data:`, this.designations().map(d => ({ \n id: d._id, \n name: d.sydsg_name, \n deptId: d.sydsg_department_id_sydpt, \n parentId: d.sydsg_prent_id_desg \n })));\n\n if (departmentDesignations.length > 0) {\n node.hasChildren = true;\n\n // Add designations as children and recursively add their children\n departmentDesignations.forEach(designationNode => {\n console.log(`👔 Adding designation: ${designationNode.name} under ${node.name}`);\n \n // Update the designation node to be under this department\n designationNode.level = node.level + 1;\n designationNode.parentId = node._id;\n \n // Recursively add children of this designation\n this.addDesignationChildren(designationNode, designationNodes);\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 * Recursively add children designations to a parent designation\n */\n private addDesignationChildren(parentNode: HierarchicalNode, allDesignationNodes: HierarchicalNode[]): void {\n const children = allDesignationNodes.filter(designationNode => \n designationNode.parentId === parentNode._id\n );\n\n console.log(`📁 Found ${children.length} children for designation ${parentNode.name}`);\n\n if (children.length > 0) {\n parentNode.hasChildren = true;\n\n children.forEach(child => {\n console.log(`👔 Adding child designation: ${child.name} under ${parentNode.name}`);\n \n // Update child level and parent\n child.level = parentNode.level + 1;\n child.parentId = parentNode._id;\n \n // Recursively add children of this child\n this.addDesignationChildren(child, allDesignationNodes);\n \n parentNode.children.push(child);\n });\n }\n }\n\n /**\n * Get grade level name by ID or from designation data\n */\n private getGradeLevelName(gradeLevelId: string, designation?: ICoreSydsg): string {\n console.log('🔍 getGradeLevelName called with ID:', gradeLevelId);\n \n // First try to get from populated gradeLevel data in designation\n if (designation) {\n const designationWithPopulated = designation as any;\n if (designationWithPopulated.gradeLevel && designationWithPopulated.gradeLevel._id === gradeLevelId) {\n console.log('🎯 Found grade level from designation data:', designationWithPopulated.gradeLevel.sydsgl_name);\n return designationWithPopulated.gradeLevel.sydsgl_name || 'N/A';\n }\n }\n \n // Fallback to grade levels signal\n console.log('📚 Available grade levels:', this.gradeLevels());\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 based on FK relationships\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 with confirmation modal\n */\n async deleteDesignation(itemId: string): Promise<void> {\n console.log('🔵 deleteDesignation called with:', itemId);\n \n // Find the designation name for better confirmation message\n const designation = this.designations().find(d => d._id === itemId);\n const designationName = designation?.sydsg_name || 'this designation';\n \n try {\n const confirmed = await this.confirmationService.confirmDelete(designationName);\n \n if (confirmed) {\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.notificationService.success(`Designation \"${designationName}\" deleted successfully`);\n this.loadDesignations();\n } else {\n this.notificationService.error('Failed to delete designation');\n }\n },\n error: (err) => {\n this.notificationService.error(err.message || 'An error occurred while deleting the designation');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n } catch (error) {\n console.error('Error in delete confirmation:', error);\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 * Rename designation\n */\n renameDesignation(itemId: string, currentName: string): void {\n console.log('🔵 renameDesignation called with:', itemId, currentName);\n \n const newName = prompt('Enter new name for designation:', currentName);\n \n if (newName && newName.trim() && newName.trim() !== currentName) {\n this.loading.set(true);\n\n // Get the current designation data\n this.designationService.getDesignationById(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success && response.data) {\n const designation = response.data;\n \n // Update only the name\n const updatedDesignation: Partial<ICoreSydsg> = {\n ...designation,\n sydsg_name: newName.trim()\n };\n\n // Call update service\n this.designationService.updateDesignation(itemId, updatedDesignation)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (updateResponse) => {\n if (updateResponse.success) {\n console.log('✅ Designation renamed successfully');\n this.loadDesignations();\n } else {\n this.error.set(updateResponse.message || 'Failed to rename designation');\n }\n },\n error: (err) => {\n console.error('❌ Error renaming designation:', err);\n this.error.set(err.message || 'Failed to rename designation');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n } else {\n this.error.set('Failed to retrieve designation for renaming');\n this.loading.set(false);\n }\n },\n error: (err) => {\n console.error('❌ Error retrieving designation for rename:', err);\n this.error.set(err.message || 'Failed to retrieve designation');\n this.loading.set(false);\n }\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 with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_designation_list' }\">\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\n 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\n }}</span>\n </div>\n <button cideEleButton variant=\"ghost\" size=\"xs\" type=\"button\" (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\n 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:'\n }}</span>\n <span class=\"tw-text-sm tw-text-green-800 tw-font-semibold\">{{ selectedParentDepartment()?.sydept_name\n }}</span>\n </div>\n <button cideEleButton variant=\"ghost\" size=\"xs\" type=\"button\" (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 id=\"sydsg_name\" label=\"Name*\" formControlName=\"sydsg_name\" placeholder=\"Designation name\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Designation Code -->\n <div>\n <cide-ele-input id=\"sydsg_code\" label=\"Code*\" formControlName=\"sydsg_code\" placeholder=\"DESG001\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Grade Level -->\n <div>\n <cide-ele-select id=\"sydsg_grade_level_id_sydsgl\" label=\"Grade Level*\" [options]=\"gradeLevelOptions()\"\n formControlName=\"sydsg_grade_level_id_sydsgl\" placeholder=\"Select grade level\" size=\"sm\">\n </cide-ele-select>\n </div>\n\n <!-- Department -->\n <div>\n <cide-ele-select id=\"sydsg_department_id_sydpt\" label=\"Department*\" [options]=\"departmentOptions()\"\n formControlName=\"sydsg_department_id_sydpt\" placeholder=\"Select department\" 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 id=\"sydsg_isactive\" type=\"checkbox\" label=\"Active\" 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 id=\"sydsg_description\" label=\"Description\" formControlName=\"sydsg_description\"\n placeholder=\"Designation description\" rows=\"2\" size=\"sm\">\n </cide-ele-textarea>\n </div>\n\n <!-- Entity ID (Hidden) -->\n <div class=\"tw-hidden\">\n <cide-ele-input id=\"desg_entity_id_syen\" label=\"Entity ID*\" formControlName=\"desg_entity_id_syen\"\n placeholder=\"Entity ID\" 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 cideEleButton variant=\"primary\" size=\"sm\" type=\"submit\" [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'\n }}</cide-ele-icon>\n {{ isEditMode() ? 'Update' : 'Add' }}\n </button>\n <button cideEleButton variant=\"outline\" size=\"sm\" type=\"button\" (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 <!-- 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\"\n 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 [config]=\"gridConfig()\" [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\" [serverSidePagination]=\"true\" [totalServerItems]=\"totalItems()\"\n [currentServerPage]=\"currentPage()\" [currentServerPageSize]=\"pageSize()\" (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 [class]=\"row.type === 'department' ? 'tw-text-green-500' : 'tw-text-blue-500'\" 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\" [title]=\"row.name\">\n {{ row.name || 'Untitled' }}\n </div>\n @if (row.type === 'department') {\n <span\n 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\" [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\n 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 [items]=\"getDropdownItems(row)\" [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n </ng-template>\n</cide-lyt-shared-wrapper>","// 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 { gradeLevelChangeSequenceControllerResponse, ICoreSydsgl, MGradeLevelChangeSequencePayload, MGradeLevelGetByIdPayload } from 'cloud-ide-lms-model';\nimport { CideCoreGradeLevelManagementService } from '../../services/grade-level-management.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideIconComponent, CideInputComponent, CideEleDataGridComponent, CideSelectComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, NotificationService, ConfirmationService, CideEleConfirmationModalComponent } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\n\n@Component({\n selector: 'cide-core-grade-level-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 CideLytSharedWrapperComponent,\n CideEleConfirmationModalComponent\n ],\n templateUrl: './grade-level-list.component.html',\n styleUrls: []\n})\nexport class CideCoreGradeLevelListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private gradeLevelService = inject(CideCoreGradeLevelManagementService);\n private appState = inject(AppStateHelperService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\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\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 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('CideCoreGradeLevelListComponent 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('🚀 CideCoreGradeLevelListComponent.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('📥 CideCoreGradeLevelListComponent 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\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('❌ CideCoreGradeLevelListComponent error:', err);\n this.error.set(err.message || 'An error occurred while loading grade levels');\n },\n complete: () => {\n console.log('CideCoreGradeLevelListComponent 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 // Create a completely new config object to ensure change detection triggers\n const newConfig: GridConfiguration<ICoreSydsgl> = {\n ...this.gridConfig(),\n data: [...gradeLevels] // Create a new array to ensure reference change\n };\n\n this.gridConfig.set(newConfig);\n console.log('⚙️ Updated grid config with grade levels - new reference created');\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[]; allOrders?: ICoreSydsgl[] }): void {\n console.log('🔄 Grade level reorder event:', data);\n\n\n // Mark that order has changed\n this.hasOrderChanged.set(true);\n console.log('🔄 Order change detected');\n }\n\n /**\n * Update grid data after reordering\n */\n private updateGridDataAfterReorder() {\n // Create a completely new config object to ensure change detection triggers\n const newConfig: GridConfiguration<ICoreSydsgl> = {\n ...this.gridConfig(),\n data: [...this.gradeLevels()] // Create a new array to ensure reference change\n };\n\n this.gridConfig.set(newConfig);\n console.log('⚙️ Updated grid config after reorder - new reference created');\n }\n\n /**\n * Save grade level order using the change sequence API\n * This method is called by the data grid when save-order action is triggered\n */\n saveGradeLevelOrder() {\n console.log('💾 Saving grade level order...');\n // The data grid will handle the order comparison and only call this if there are actual changes\n // We just need to prepare the payload and make the API call\n\n // Prepare payload for change sequence API with all current grade levels\n const payload: MGradeLevelChangeSequencePayload = {\n grade_level_sequences: this.gradeLevels().map(item => ({\n sydsgl_id: item._id || '',\n sydsgl_order: item.sydsgl_order || 1\n }))\n };\n\n console.log('📤 Sending change sequence payload:', payload);\n\n // Call the change sequence API\n this.gradeLevelService.changeGradeLevelSequence(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: gradeLevelChangeSequenceControllerResponse) => {\n if (response.success) {\n console.log('✅ Grade level sequence updated successfully');\n this.notificationService.success('Grade level sequence updated successfully');\n // Reset change flag first\n this.hasOrderChanged.set(false);\n // Refresh the grade level list from server to get updated order\n this.loadGradeLevels();\n } else {\n console.error('❌ Failed to update grade level sequence:', response);\n this.error.set('Failed to update grade level sequence');\n this.notificationService.error('Failed to update grade level sequence');\n }\n },\n error: (error) => {\n console.error('❌ Error updating grade level sequence:', error);\n this.error.set('Failed to update grade level sequence');\n this.notificationService.error(`Error updating grade level sequence: ${error.message || 'Unknown error occurred'}`);\n }\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 // Reset the change flag\n this.hasOrderChanged.set(false);\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\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 const payload: MGradeLevelGetByIdPayload = { sydsgl_id: itemId };\n this.gradeLevelService.getGradeLevelById(payload)\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 with confirmation dialog\n */\n async deleteGradeLevel(itemId: string): Promise<void> {\n console.log('🔵 deleteGradeLevel called with:', itemId);\n \n // Find the grade level to get its name for the confirmation\n const gradeLevel = this.gradeLevels().find(item => item._id === itemId);\n const gradeLevelName = gradeLevel?.sydsgl_name || 'this grade level';\n \n try {\n // Show confirmation dialog with grade level name\n const confirmed = await this.confirmationService.confirmDelete(gradeLevelName);\n \n if (confirmed) {\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.notificationService.success(`Grade level \"${gradeLevelName}\" has been deleted successfully.`);\n this.loadGradeLevels();\n } else {\n this.error.set('Failed to delete grade level');\n this.notificationService.error('Failed to delete grade level. Please try again.');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while deleting the grade level');\n this.notificationService.error(`Error deleting grade level: ${err.message || 'Unknown error occurred'}`);\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n } catch (error) {\n console.log('🔵 Delete operation cancelled by user');\n }\n }\n\n /**\n * Delete multiple grade levels with confirmation dialog\n */\n async deleteMultipleGradeLevels(): Promise<void> {\n const selectedIds = this.selectedItems();\n if (selectedIds.length === 0) {\n this.notificationService.warning('Please select grade levels to delete.');\n return;\n }\n\n // Get names of selected grade levels for confirmation\n const selectedGradeLevels = this.gradeLevels().filter(item => selectedIds.includes(item._id || ''));\n const gradeLevelNames = selectedGradeLevels.map(item => item.sydsgl_name).join(', ');\n \n const count = selectedIds.length;\n \n try {\n const confirmed = await this.confirmationService.ask({\n title: 'Confirm Bulk Delete',\n message: `Are you sure you want to delete ${count} grade level${count > 1 ? 's' : ''}?\\n\\nSelected: ${gradeLevelNames}\\n\\nThis action cannot be undone.`,\n type: 'danger',\n icon: 'delete_forever',\n confirmText: `Delete ${count} Item${count > 1 ? 's' : ''}`,\n cancelText: 'Cancel'\n });\n\n if (confirmed) {\n this.loading.set(true);\n\n this.gradeLevelService.deleteMultipleGradeLevels(selectedIds)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.notificationService.success(`${count} grade level${count > 1 ? 's' : ''} deleted successfully.`);\n this.selectedItems.set([]);\n this.loadGradeLevels();\n } else {\n this.error.set('Failed to delete grade levels');\n this.notificationService.error('Failed to delete grade levels. Please try again.');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while deleting grade levels');\n this.notificationService.error(`Error deleting grade levels: ${err.message || 'Unknown error occurred'}`);\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n } catch (error) {\n console.log('🔵 Bulk delete operation cancelled by user');\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 with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_grade_level_list' }\">\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 <!-- 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>\n\n<!-- Confirmation Modal -->\n</cide-lyt-shared-wrapper>\n<cide-ele-confirmation-modal></cide-ele-confirmation-modal> ","// 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 CideCorePageManagementService {\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('CideCorePageManagementService 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 { CideCorePageManagementService } from '../../services/page-management.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideIconComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem } from 'cloud-ide-element';\nimport { CideEleDataGridComponent } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { ICoreSypg, systemPagesControllerResponse, generateStringFromObject, MSystemPages } from 'cloud-ide-lms-model';\n\n@Component({\n selector: 'cide-core-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 CideCorePageListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private pageService = inject(CideCorePageManagementService);\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: MSystemPages = {\n pageIndex: this.currentPage(),\n pageSize: this.pageSize(),\n pagination: true,\n query: 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 this.searchTerm.set(event.data as string);\n this.currentPage.set(1);\n this.loadPages();\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 CideCorePageThemeService {\r\n private apiUrl = `${coreRoutesUrl?.pageTheme}`;\r\n\r\n constructor(private http: HttpClient) {\r\n console.log('CideCorePageThemeService 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('CideCorePageThemeService 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 { CideCorePageThemeService } from '../../services/page-theme.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideEleDataGridComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, CideEleJsonEditorComponent, CideSelectOptionComponent, CideEleFileInputComponent, FileUploadData, CideEleFileImageDirective } 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-page-theme',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideEleButtonComponent,\n CideInputComponent,\n CideSelectComponent,\n CideTextareaComponent,\n CideIconComponent,\n CideEleDropdownComponent,\n CideEleJsonEditorComponent,\n CideEleFileInputComponent,\n CideEleFileImageDirective,\n],\n templateUrl: './page-theme.component.html',\n styleUrls: []\n})\nexport class CideCorePageThemeComponent implements OnInit {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private themeService = inject(CideCorePageThemeService);\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\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 this.searchTerm.set(event.data as string);\n this.currentPage.set(1);\n this.loadThemes();\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 this.goBack();\n }\n\n /**\n * Go back to page list\n */\n goBack(): void {\n console.log('🔍 [PageThemeComponent] goBack() called');\n console.log('🔍 [PageThemeComponent] Current route:', this.router.url);\n \n // Try to navigate back to the page management route\n this.router.navigate(['/core/page']).then(success => {\n console.log('🔍 [PageThemeComponent] Navigation result:', success);\n if (!success) {\n console.log('🔍 [PageThemeComponent] Navigation failed, using browser back');\n window.history.back();\n }\n }).catch(error => {\n console.error('🔍 [PageThemeComponent] Navigation error:', error);\n // Fallback: try to go back in browser history\n window.history.back();\n });\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\n // File upload methods for preview image\n getPreviewImageUploadData(): FileUploadData {\n return {\n altText: 'Theme Preview Image',\n cyfm_name: 'theme-preview-image',\n cyfm_alt_text: 'Theme Preview Image',\n cyfm_type: 'image',\n cyfm_permissions: ['read'],\n cyfm_tags: ['theme', 'preview', 'image']\n };\n }\n\n onPreviewImageUploadSuccess(fileId: string): void {\n console.log('Preview image uploaded successfully:', fileId);\n // Update the form control with the uploaded file ID\n this.themeForm.patchValue({\n sytm_preview_id_fm: fileId\n });\n }\n\n onPreviewImageUploadError(error: string): void {\n console.error('Preview image upload error:', error);\n this.error.set('Failed to upload preview image: ' + error);\n }\n\n onPreviewImageUploadProgress(progress: number): void {\n console.log('Preview image upload progress:', progress + '%');\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-2 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-2 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-3 tw-bg-white tw-overflow-auto\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-2\">\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 lg:tw-grid-cols-[1fr_200px] tw-gap-4\">\r\n <!-- Left Side: All Input Fields -->\r\n <div class=\"tw-space-y-4\">\r\n <!-- Row 1: Theme Title and Theme Code -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\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 <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 </div>\r\n \r\n <!-- Row 2: Sub Title and Active Status -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\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 <div class=\"tw-space-y-2 tw-flex tw-items-center\">\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 </div>\r\n \r\n <!-- Row 3: Description -->\r\n <div class=\"tw-space-y-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 </div>\r\n \r\n <!-- Right Side: File Upload -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-start tw-items-center tw-p-0\">\r\n <cide-ele-file-input \r\n id=\"sytm_preview_id_fm\" \r\n formControlName=\"sytm_preview_id_fm\"\r\n accept=\"image/*\"\r\n [showPreview]=\"true\"\r\n [previewBoxMode]=\"true\"\r\n [showFileName]=\"false\"\r\n previewWidth=\"180px\"\r\n previewHeight=\"120px\"\r\n placeholderText=\"Upload Preview Image\"\r\n placeholderIcon=\"image\"\r\n [autoUpload]=\"true\"\r\n [uploadData]=\"getPreviewImageUploadData()\"\r\n (uploadSuccess)=\"onPreviewImageUploadSuccess($event)\"\r\n (uploadError)=\"onPreviewImageUploadError($event)\"\r\n (uploadProgressChange)=\"onPreviewImageUploadProgress($event)\">\r\n </cide-ele-file-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Configuration JSON -->\r\n <div class=\"tw-space-y-2\">\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 -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\r\n <div class=\"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 \r\n <!-- Drawer Configuration -->\r\n <div class=\"tw-space-y-2\">\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 (theme.sytm_preview_id_fm) {\r\n <img \r\n cideEleFileImage \r\n [fileId]=\"theme.sytm_preview_id_fm\" \r\n [altText]=\"'Theme Preview'\"\r\n class=\"tw-w-full tw-h-full tw-object-cover\" />\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 CideCorePageControlsService {\r\n constructor(private http: HttpClient) {\r\n console.log('CideCorePageControlsService 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('CideCorePageControlsService 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';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, NonNullableFormBuilder, FormsModule } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { CideCorePageControlsService } from '../../services/page-controls.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideEleDropdownComponent, DropdownItem, CideFormFieldErrorComponent } from 'cloud-ide-element';\nimport { controlType, generateObjectFromString, ICoreSype, MPageElements, MPageElementsInsertUpdatePayload, themeSize } from 'cloud-ide-lms-model';\n\n@Component({\n selector: 'cide-core-page-controls',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideEleButtonComponent,\n CideInputComponent,\n CideSelectComponent,\n CideIconComponent,\n CideFormFieldErrorComponent\n ],\n templateUrl: './page-controls.component.html',\n styleUrls: ['./page-controls.component.scss']\n})\nexport class CideCorePageControlsComponent implements OnInit {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private controlsService = inject(CideCorePageControlsService);\n private appState = inject(AppStateHelperService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n\n\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n controls = signal<ICoreSype[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Page information\n pageId = signal<string>('');\n pageTitle = signal<string>('');\n\n // Form state\n isEditMode = signal(false);\n editingControlId = signal<string | null>(null);\n retrievedControl = signal<ICoreSype | null>(null);\n\n // Control selection for new layout\n selectedControlId = signal<string | 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 - No validators for simplicity\n controlForm = this.fb.group({\n sype_key: [''],\n sype_label: [''],\n sype_label_hide: [false],\n sype_auto_complete: [false], // Changed to boolean for checkbox\n sype_hide_helper_and_error_text: [false],\n sype_type: [''], // controlType\n sype_option_key: [''],\n sype_placeholder: [''],\n sype_min_length: [0],\n sype_max_length: [20],\n sype_regex: [''],\n sype_required: [false],\n sype_disabled: [false],\n sype_width: [''], // Changed to string for px values like \"20px\"\n sype_height: [''], // Changed to string for px values like \"20px\"\n sype_label_placement: ['left' as 'floating' | 'fixed'],\n sype_helper_text_collapse: [false],\n sype_default: ['' as string | number | boolean],\n sype_tooltip: [''],\n sype_size: ['sm' as themeSize], // Changed default to small\n sype_leading_icon: [''],\n sype_isactive: [true],\n sype_entity_id_syen: ['']\n });\n\n // Computed values\n isFormDirty = computed(() => this.controlForm.dirty);\n\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 const queryParams = params['query'];\n const queryData = generateObjectFromString(queryParams);\n this.pageId.set(queryData?.sypg_id || '');\n this.pageTitle.set(queryData?.sypg_title || '');\n\n if (this.pageId()) {\n this.loadControls();\n this.setupFormSubscriptions();\n this.setEntityIdFromAppState();\n } else {\n this.error.set('No page ID provided');\n }\n });\n }\n\n /**\n * Set entity ID from app state - auto-assigned internally\n */\n private setEntityIdFromAppState(): void {\n const entityId = this.appState.getActiveEntityId();\n if (entityId) {\n this.controlForm.patchValue({\n sype_entity_id_syen: entityId\n });\n // Disable the entity field since it's auto-assigned\n this.controlForm.get('sype_entity_id_syen')?.disable();\n }\n }\n\n /**\n * Load controls from API\n */\n private loadControls(): void {\n this.loading.set(true);\n this.error.set(null);\n\n const request: MPageElements = {\n sype_page_id_sypg: this.pageId()\n };\n\n this.controlsService.getControlList(request)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.controls.set(response.data || []);\n this.totalItems.set(response.total || 0);\n } else {\n this.error.set(response.message || 'Failed to load controls');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error loading controls:', error);\n this.error.set('Failed to load controls. 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.controlForm.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n // Form validation is handled by computed signals\n });\n }\n\n\n\n /**\n * Create new control\n */\n createControl(): void {\n\n const formValue = this.controlForm.getRawValue();\n const entityId = this.appState.getActiveEntityId();\n\n const newControl: MPageElementsInsertUpdatePayload = {\n _id: '',\n sype_key: formValue.sype_key,\n sype_page_id_sypg: this.pageId(),\n sype_label: formValue.sype_label,\n sype_label_hide: formValue.sype_label_hide,\n sype_auto_complete: formValue.sype_auto_complete,\n sype_hide_helper_and_error_text: formValue.sype_hide_helper_and_error_text,\n sype_type: formValue.sype_type as controlType,\n sype_option_key: formValue.sype_option_key,\n sype_placeholder: formValue.sype_placeholder,\n sype_min_length: formValue.sype_min_length,\n sype_max_length: formValue.sype_max_length,\n sype_regex: formValue.sype_regex,\n sype_required: formValue.sype_required,\n sype_disabled: formValue.sype_disabled,\n sype_width: formValue.sype_width,\n sype_height: formValue.sype_height,\n sype_label_placement: formValue.sype_label_placement,\n sype_helper_text_collapse: formValue.sype_helper_text_collapse,\n sype_default: formValue.sype_default,\n sype_tooltip: formValue.sype_tooltip,\n sype_size: formValue.sype_size,\n sype_leading_icon: formValue.sype_leading_icon,\n sype_isactive: formValue.sype_isactive,\n sype_entity_id_syen: entityId || formValue.sype_entity_id_syen\n };\n\n this.loading.set(true);\n this.controlsService.createControl(newControl)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.resetForm();\n this.loadControls();\n console.log('Control created successfully');\n } else {\n console.error(response.message || 'Failed to create control');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error creating control:', error);\n console.error('Failed to create control. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Update existing control\n */\n updateControl(): void {\n if (!this.editingControlId()) {\n return;\n }\n\n const formValue = this.controlForm.getRawValue();\n const entityId = this.appState.getActiveEntityId();\n\n const updatedControl: MPageElementsInsertUpdatePayload = {\n _id: this.editingControlId()!,\n sype_key: formValue.sype_key,\n sype_page_id_sypg: this.pageId(),\n sype_label: formValue.sype_label,\n sype_label_hide: formValue.sype_label_hide,\n sype_auto_complete: Boolean(formValue.sype_auto_complete),\n sype_hide_helper_and_error_text: formValue.sype_hide_helper_and_error_text,\n sype_type: formValue.sype_type as controlType,\n sype_option_key: formValue.sype_option_key,\n sype_placeholder: formValue.sype_placeholder,\n sype_min_length: formValue.sype_min_length,\n sype_max_length: formValue.sype_max_length,\n sype_regex: formValue.sype_regex,\n sype_required: formValue.sype_required,\n sype_disabled: formValue.sype_disabled,\n sype_width: formValue.sype_width,\n sype_height: formValue.sype_height,\n sype_label_placement: formValue.sype_label_placement,\n sype_helper_text_collapse: formValue.sype_helper_text_collapse,\n sype_default: formValue.sype_default,\n sype_tooltip: formValue.sype_tooltip,\n sype_size: formValue.sype_size,\n sype_leading_icon: formValue.sype_leading_icon,\n sype_isactive: formValue.sype_isactive,\n sype_entity_id_syen: entityId || formValue.sype_entity_id_syen\n };\n\n this.loading.set(true);\n this.controlsService.updateControl(updatedControl)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.resetForm();\n this.loadControls();\n console.log('Control updated successfully');\n } else {\n console.error(response.message || 'Failed to update control');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error updating control:', error);\n console.error('Failed to update control. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Edit control\n */\n editControl(control: ICoreSype): void {\n this.isEditMode.set(true);\n this.editingControlId.set(control._id || null);\n this.retrievedControl.set(control);\n\n this.controlForm.patchValue({\n sype_key: control.sype_key,\n sype_label: control.sype_label,\n sype_label_hide: control.sype_label_hide,\n sype_auto_complete: control.sype_auto_complete ? true : false,\n sype_hide_helper_and_error_text: control.sype_hide_helper_and_error_text,\n sype_type: control.sype_type,\n sype_option_key: control.sype_option_key,\n sype_placeholder: control.sype_placeholder,\n sype_min_length: control.sype_min_length,\n sype_max_length: control.sype_max_length,\n sype_regex: control.sype_regex,\n sype_required: control.sype_required,\n sype_disabled: control.sype_disabled,\n sype_width: control.sype_width?.toString() || '',\n sype_height: control.sype_height?.toString() || '',\n sype_label_placement: control.sype_label_placement,\n sype_helper_text_collapse: control.sype_helper_text_collapse,\n sype_default: control.sype_default as string | number | boolean,\n sype_tooltip: control.sype_tooltip,\n sype_size: control.sype_size as themeSize,\n sype_leading_icon: control.sype_leading_icon,\n sype_isactive: control.sype_isactive,\n sype_entity_id_syen: String(control.sype_entity_id_syen || '')\n });\n\n this.controlForm.markAsPristine();\n }\n\n /**\n * Delete control\n */\n deleteControl(control: ICoreSype): void {\n if (confirm(`Are you sure you want to delete the control \"${control.sype_label}\"?`)) {\n this.loading.set(true);\n this.controlsService.deleteControl(control._id || '')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadControls();\n console.log('Control deleted successfully');\n } else {\n console.error(response.message || 'Failed to delete control');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error deleting control:', error);\n console.error('Failed to delete control. Please try again.');\n this.loading.set(false);\n }\n });\n }\n }\n\n /**\n * Toggle control status\n */\n toggleControlStatus(control: ICoreSype): void {\n this.loading.set(true);\n this.controlsService.toggleControlStatus({ sype_id: control._id || '', sype_isactive: !control.sype_isactive })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadControls();\n console.log(`Control ${control.sype_isactive ? 'deactivated' : 'activated'} successfully`);\n } else {\n console.error(response.message || 'Failed to toggle control status');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error toggling control status:', error);\n console.error('Failed to toggle control status. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Save control (create or update)\n */\n saveControl(): void {\n if (this.isEditMode()) {\n this.updateControl();\n } else {\n this.createControl();\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 const entityId = this.appState.getActiveEntityId();\n\n this.controlForm.reset({\n sype_key: '',\n sype_label: '',\n sype_label_hide: false,\n sype_auto_complete: false,\n sype_hide_helper_and_error_text: false,\n sype_type: '',\n sype_option_key: '',\n sype_placeholder: '',\n sype_min_length: 0,\n sype_max_length: 20,\n sype_regex: '',\n sype_required: false,\n sype_disabled: false,\n sype_width: '',\n sype_height: '',\n sype_label_placement: 'floating',\n sype_helper_text_collapse: false,\n sype_default: '' as string | number | boolean,\n sype_tooltip: '',\n sype_size: 'md',\n sype_leading_icon: '',\n sype_isactive: true,\n sype_entity_id_syen: entityId || ''\n });\n this.isEditMode.set(false);\n this.editingControlId.set(null);\n this.retrievedControl.set(null);\n this.controlForm.markAsPristine();\n this.controlForm.markAsUntouched();\n }\n\n /**\n * Mark form as touched to trigger validation display\n */\n private markFormAsTouched(): void {\n Object.keys(this.controlForm.controls).forEach(key => {\n const control = this.controlForm.get(key);\n control?.markAsTouched();\n });\n }\n\n /**\n * Get dropdown items for actions\n */\n getActionDropdownItems(control: ICoreSype): DropdownItem[] {\n return [\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit'\n },\n {\n id: 'toggle',\n label: control.sype_isactive ? 'Deactivate' : 'Activate',\n icon: control.sype_isactive ? 'block' : 'check_circle'\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete'\n }\n ];\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, control: ICoreSype): void {\n switch (item.id) {\n case 'edit':\n this.editControl(control);\n break;\n case 'toggle':\n this.toggleControlStatus(control);\n break;\n case 'delete':\n this.deleteControl(control);\n break;\n }\n }\n\n /**\n * Close all dropdowns\n */\n closeAllDropdowns(): void {\n // This method can be used to close dropdowns if needed\n }\n\n // New methods for the vertical layout\n selectControl(control: ICoreSype): void {\n this.selectedControlId.set(control._id || null);\n console.log('Selected control:', control);\n }\n\n trackByControlId(index: number, control: ICoreSype): string {\n return control._id || '';\n }\n} ","<!-- Page Controls Container -->\n<div class=\"tw-flex tw-flex-col tw-h-full tw-bg-gray-50\">\n <!-- Header Section -->\n <div class=\"tw-bg-white tw-border-b tw-border-gray-200 tw-px-6 tw-py-4\">\n <div class=\"tw-flex tw-items-center tw-justify-between\">\n <div class=\"tw-flex tw-items-center tw-space-x-4\">\n <button \n cideEleButton\n variant=\"ghost\"\n size=\"sm\"\n (click)=\"goBack()\"\n class=\"tw-flex tw-items-center tw-justify-center tw-w-8 tw-h-8 tw-text-gray-600 hover:tw-text-gray-900 hover:tw-bg-gray-100 tw-rounded-md tw-transition-colors\">\n <cide-ele-icon>arrow_back</cide-ele-icon>\n </button>\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-xl\">settings</cide-ele-icon>\n <div>\n <h1 class=\"tw-text-xl tw-font-semibold tw-text-gray-900 tw-mb-0\">Control Management</h1>\n <p class=\"tw-text-sm tw-text-gray-500 tw-mb-0\">Page: {{ pageTitle() }}</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Error Message -->\n <div class=\"tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md tw-p-4 tw-mx-6 tw-mt-4 tw-flex tw-items-start tw-space-x-3\" *ngIf=\"error()\">\n <cide-ele-icon class=\"tw-text-red-500 tw-flex-shrink-0 tw-mt-0.5\">error</cide-ele-icon>\n <div>\n <h3 class=\"tw-text-red-800 tw-font-medium tw-mb-1\">Error</h3>\n <p class=\"tw-text-red-700 tw-text-sm tw-mb-0\">{{ error() }}</p>\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-flex tw-flex-1 tw-gap-6 tw-p-6 tw-overflow-hidden lg:tw-flex-row tw-flex-col\">\n <!-- Form Section -->\n <div class=\"tw-w-full lg:tw-w-3/5 tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-flex tw-flex-col\">\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-p-6 tw-border-b tw-border-gray-200\">\n <cide-ele-icon class=\"tw-text-blue-600\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h3 class=\"tw-text-lg tw-font-medium tw-text-gray-900 tw-mb-0\">{{ isEditMode() ? 'Edit Control' : 'Quick Add Control' }}</h3>\n </div>\n\n <!-- Form -->\n <form [formGroup]=\"controlForm\" (ngSubmit)=\"saveControl()\" class=\"tw-flex tw-flex-col tw-flex-1 tw-p-6 tw-overflow-y-auto\">\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-4 tw-mb-6\">\n \n <!-- Basic Information Section -->\n <!-- Control Key -->\n <div class=\"tw-space-y-1\">\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=\"tw-space-y-1\">\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=\"tw-space-y-1\">\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=\"tw-space-y-1\">\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=\"tw-space-y-1\">\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=\"tw-space-y-1\">\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=\"tw-space-y-1\">\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=\"tw-col-span-2 tw-flex tw-gap-4\">\n <div class=\"tw-flex-1 tw-space-y-1\">\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=\"tw-flex-1 tw-space-y-1\">\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=\"tw-col-span-2 tw-flex tw-gap-4\">\n <div class=\"tw-flex-1 tw-space-y-1\">\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=\"tw-flex-1 tw-space-y-1\">\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=\"tw-col-span-2 tw-flex tw-gap-4\">\n <div class=\"tw-flex-1 tw-space-y-1\">\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=\"tw-flex-1 tw-space-y-1\">\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=\"tw-space-y-1\">\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=\"tw-space-y-1\">\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=\"tw-space-y-1\">\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=\"tw-space-y-1\">\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=\"tw-space-y-1\" 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=\"tw-col-span-2 tw-space-y-1\">\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mb-3\">Control Options</h6>\n <div class=\"tw-grid tw-grid-cols-1 sm:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-3\">\n \n <!-- Required -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\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=\"tw-flex tw-items-center tw-space-x-2\">\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=\"tw-flex tw-items-center tw-space-x-2\">\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=\"tw-flex tw-items-center tw-space-x-2\">\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=\"tw-flex tw-items-center tw-space-x-2\">\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=\"tw-flex tw-justify-between tw-items-center tw-pt-4 tw-border-t tw-border-gray-200 tw-mt-auto\">\n <!-- Error Message (Left Side) -->\n <cide-form-field-error [formGroup]=\"controlForm\"></cide-form-field-error>\n \n <!-- Action Buttons (Right Side) -->\n <div class=\"tw-flex tw-gap-3\">\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 </div>\n </form>\n </div>\n\n <!-- Controls List Section -->\n <div class=\"tw-w-full lg:tw-w-2/5 tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-flex tw-flex-col lg:tw-max-h-none tw-max-h-96\">\n <div class=\"tw-p-6 tw-border-b tw-border-gray-200\">\n <h3 class=\"tw-text-lg tw-font-medium tw-text-gray-900 tw-mb-1\">Page Controls</h3>\n <p class=\"tw-text-sm tw-text-gray-500 tw-mb-0\">Controls connected to this page</p>\n </div>\n \n <div class=\"tw-flex-1 tw-overflow-y-auto tw-p-4\" *ngIf=\"!loading() && controls().length > 0\">\n <div \n class=\"tw-bg-gray-50 tw-border tw-border-gray-200 tw-rounded-lg tw-p-4 tw-mb-3 tw-cursor-pointer tw-transition-all tw-duration-200 hover:tw-shadow-md hover:tw-border-gray-300 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500 focus:tw-ring-offset-2\" \n *ngFor=\"let control of controls(); trackBy: trackByControlId\"\n [class.tw-bg-blue-50]=\"selectedControlId() === control._id\"\n [class.tw-border-blue-300]=\"selectedControlId() === control._id\"\n [class.tw-shadow-md]=\"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=\"tw-flex tw-items-start tw-space-x-3\">\n <div class=\"tw-flex-shrink-0 tw-w-10 tw-h-10 tw-bg-blue-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-text-blue-600\">settings_input_component</cide-ele-icon>\n </div>\n <div class=\"tw-flex-1 tw-min-w-0\">\n <h4 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mb-1 tw-truncate\">{{ control.sype_label || control.sype_key }}</h4>\n <p class=\"tw-text-xs tw-text-gray-500 tw-mb-2 tw-truncate\">{{ control.sype_tooltip || 'No tooltip' }}</p>\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\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-gray-100 tw-text-gray-800\">{{ control.sype_type }}</span>\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\" \n [class.tw-bg-red-100]=\"!control.sype_isactive\"\n [class.tw-text-red-800]=\"!control.sype_isactive\"\n [class.tw-bg-green-100]=\"control.sype_isactive\"\n [class.tw-text-green-800]=\"control.sype_isactive\">\n {{ control.sype_isactive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n </div>\n <div class=\"tw-flex tw-items-center tw-space-x-1 tw-opacity-0 tw-transition-opacity tw-duration-200 group-hover:tw-opacity-100\" \n [class.tw-opacity-100]=\"selectedControlId() === control._id\">\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 </div>\n </div>\n\n <div class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-py-12 tw-text-center\" *ngIf=\"!loading() && controls().length === 0\">\n <cide-ele-icon class=\"tw-text-4xl tw-text-gray-300 tw-mb-4\">settings_input_component</cide-ele-icon>\n <p class=\"tw-text-gray-500 tw-font-medium tw-mb-1\">No controls available</p>\n <small class=\"tw-text-gray-400\">Create controls using the form on the left</small>\n </div>\n\n <div class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-py-12 tw-text-center\" *ngIf=\"loading()\">\n <cide-ele-icon class=\"tw-text-2xl tw-text-blue-500 tw-mb-4 tw-animate-spin\">refresh</cide-ele-icon>\n <p class=\"tw-text-gray-500\">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 { Component, inject, signal, OnInit, OnDestroy, DestroyRef, ChangeDetectorRef, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, FormsModule, Validators, FormArray, AbstractControl, ValidationErrors } from '@angular/forms';\n// import { ActivatedRoute, Router } from '@angular/router';\n// import { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n// import { CideTextareaComponent, CideEleButtonComponent, CideEleTabComponent, TabItem, CideSelectComponent, CideEleDataGridComponent, GridConfiguration, GridEvent, TemplateContext, CideEleToastNotificationComponent } from 'cloud-ide-element';\n// import {\n// CideCoreUserMasterService\n// } from '../../services';\n// import { CideInputComponent } from 'cloud-ide-element';\n// import { CideCoreUserRoleService } from '../../../user-role-management/services/user-role.service';\n// import { CideIconComponent, CideEleFileInputComponent, CideEleFileImageDirective } from \"cloud-ide-element\";\n// import { MenuManagementService } from '../../../menu-management';\n// import { TemplateRef, viewChild } from '@angular/core';\nimport {\n // authUserMstGetByIdControllerResponse, AuthUserMstGetByIdPayload,\n // generateObjectFromString, customEncrypt, CoreSystemEntityListResponse,\n // AuthUserMstGetByIdData, ICoreSydsg, ICoreSydept, designationControllerResponse,\n AuthUserCoreEntityMapping, \n // CoreEntityMapping, pinCodeSelectControllerResponse,\n // pinCodeSelectResponseData, countryListControllerResponse, ICoreSyctr,\n // AuthUserMstCreatePayload, AuthUserMst, generalMasterListControllerResponse,\n ICoreSygms,\n // AuthUserCoreUserContactAddresses, CoreUserContactAddresses,\n // AuthUserCoreUserDocuments, AuthUserCoreUserFamilyDetails, customDecrypt, \n ICoreSyme,\n // MMenuListPayload, IGeneralMasterListRequest,\n // CoreUserRoleResponse,\n // CoreUserRoleRightsResponse,\n // CoreUserRolePermissionData,\n // selectSearchType,\n // CoreUserRoleExceptionsMapping,\n // inputType,\n CoreEntityAccessPassManagement\n} from 'cloud-ide-lms-model';\n// import { AppStateHelperService } from 'cloud-ide-layout';\n// import { CideLytFloatingEntityRightsSharingService } from 'cloud-ide-layout';\n// import { CideEleFloatingFeaturesService, CideEleFileManagerService } from 'cloud-ide-element';\n// import { NotificationService } from 'cloud-ide-element';\n// import { mongooseObjectIdCreateControllerResponse } from 'cloud-ide-element';\n// import { CideCoreEntityManagementService } from '../../../entity-management';\n// import { CideCoreDepartmentManagementService } from '../../../department-management';\n// import { CideCoreDesignationManagementService } from '../../../designation-management';\n// import { CideCoreGeneralMasterService } from '../../../general-master-management';\n// import { CideCoreGeneralMasterTypeService } from '../../../general-master-management/services/general-master-type.service';\n// import { CideCorePinCodeService } from '../../../shared/services/pin-code.service';\n// import { CideCoreCountryService } from '../../../shared/services/country.service';\nimport { CoreUserRoleExceptions } from 'cloud-ide-lms-model';\n\n// Extended interface for role exceptions with tracking properties\ninterface CoreUserRoleExceptionsWithTracking extends CoreUserRoleExceptions {\n _isUserAdded?: boolean;\n _isUserRemoved?: boolean;\n _changeType?: string;\n}\n\n@Component({\n selector: 'cide-core-user-create',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n // CideInputComponent,\n // CideSelectComponent,\n // CideTextareaComponent,\n // CideEleButtonComponent,\n // CideEleTabComponent,\n // CideEleFileInputComponent,\n // CideEleFileImageDirective,\n // CideIconComponent,\n // CideEleDataGridComponent,\n // CideEleToastNotificationComponent\n ],\n templateUrl: './user-create.component.html'\n})\n\nexport class CideCoreUserCreateComponent {\n // // Dependency injection\n // private destroyRef = inject(DestroyRef);\n // private fb = inject(FormBuilder);\n // private cdr = inject(ChangeDetectorRef);\n // private userMasterService = inject(CideCoreUserMasterService);\n // private entityService = inject(CideCoreEntityManagementService);\n // private designationService = inject(CideCoreDesignationManagementService);\n // private departmentService = inject(CideCoreDepartmentManagementService);\n // private CideCoreGeneralMasterService = inject(CideCoreGeneralMasterService);\n // private generalMasterTypeService = inject(CideCoreGeneralMasterTypeService);\n // private pinCodeService = inject(CideCorePinCodeService);\n // private countryService = inject(CideCoreCountryService);\n // private userRoleService = inject(CideCoreUserRoleService);\n // private menuService = inject(MenuManagementService);\n // private router = inject(Router);\n // private route = inject(ActivatedRoute);\n // private appState = inject(AppStateHelperService);\n // private floatingFeaturesService = inject(CideEleFloatingFeaturesService);\n // private fileManagerService = inject(CideEleFileManagerService);\n // private entityRightsService = inject(CideLytFloatingEntityRightsSharingService);\n // private notificationService = inject(NotificationService);\n\n // userMasterForm: FormGroup;\n // activeTab = signal('basic');\n // loading = signal(false);\n\n // // User information from route\n // userId = signal<string>('');\n // isEditMode = signal(false);\n // showPasswordFields = signal(false); // Controls password fields visibility in edit mode\n\n // // Profile photo management\n // profilePhotoPreview = signal<string | null>(null);\n\n // contactAddresses = signal<AuthUserCoreUserContactAddresses[]>([]);\n // documents = signal<AuthUserCoreUserDocuments[]>([]);\n // familyDetails = signal<AuthUserCoreUserFamilyDetails[]>([]);\n // entityMappings = signal<AuthUserCoreEntityMapping[]>([]);\n // menuRightsMap = signal<{ [mappingIndex: string]: MenuWithPermissions[] }>({});\n\n // // User rights management\n // userRightsTypeId = signal<string | null>(null);\n // permissions = signal<ICoreSygms[]>([]);\n\n // // Template helpers\n // Object = Object;\n\n // /**\n // * Get address type label for header display\n // */\n // getAddressTypeLabel(addressIndex: number): string {\n // const addressTypeId = this.contactAddressesFormArray.at(addressIndex)?.get('sycad_address_type_id_sygms')?.value;\n // if (addressTypeId) {\n // const addressType = this.addressTypeOptions().find(option => option._id === addressTypeId);\n // return addressType?.sygms_title || 'Address';\n // }\n // return 'Address';\n // }\n\n // /**\n // * Handle address type change to update header\n // */\n // onAddressTypeChange(addressIndex: number): void {\n // // This method is called when address type changes to trigger header update\n // // The header will automatically update due to change detection\n // }\n\n // /**\n // * Share address using floating entity rights sharing service\n // */\n // shareAddress(addressIndex: number): void {\n // const address = this.contactAddresses()[addressIndex];\n // if (!address) return;\n\n // console.log(`📤 Sharing address ${addressIndex}:`, address);\n\n // // Use the entity rights service with signal-based data\n // this.entityRightsService.show(computed(() => ({\n // syepm_access_passs_to: address._id || `address-${addressIndex}`,\n // core_entity_access_pass_management: 'core_entity_access_pass_management_sycad',\n // syepm_user_id_user: this.appState.currentUser()?._id || ''\n // })));\n // }\n\n\n // /**\n // * Get document type label for header display\n // */\n // getDocumentTypeLabel(documentIndex: number): string {\n // const documentTypeId = this.documentsFormArray.at(documentIndex)?.get('syusd_document_type_id_sygms')?.value;\n // if (documentTypeId) {\n // const documentType = this.documentTypeOptions().find(option => option._id === documentTypeId);\n // return documentType?.sygms_title || 'Document';\n // }\n // return 'Document';\n // }\n\n // /**\n // * Handle document type change to update header\n // */\n // onDocumentTypeChange(documentIndex: number): void {\n // // This method is called when document type changes to trigger header update\n // // The header will automatically update due to change detection\n // }\n\n // /**\n // * Check if user is owner for address sharing\n // */\n // isAddressOwner(addressIndex: number): boolean {\n // const address = this.contactAddresses()[addressIndex];\n // if (!address) return false;\n\n // // Check if the address has core_entity_access_pass_management with syepm_is_owner true\n // const accessPassManagement = address.core_entity_access_pass_management;\n // return accessPassManagement?.syepm_is_owner === true;\n // }\n\n // /**\n // * Check if user has edit rights for contact address\n // */\n // hasContactAddressEditRights(addressIndex: number): boolean {\n // // First try to get from FormArray\n // const formGroup = this.contactAddressesFormArray.at(addressIndex);\n // if (formGroup) {\n // const formId = formGroup.get('_id')?.value;\n // if (formId) {\n // // Find the corresponding address in signal by _id\n // const address = this.contactAddresses().find(addr => addr._id === formId);\n // if (address) {\n // const accessPassManagement = address.core_entity_access_pass_management;\n // return accessPassManagement?.syepm_can_edit === true;\n // }\n // }\n // }\n\n // // Fallback to signal-based lookup\n // const address = this.contactAddresses()[addressIndex];\n // if (!address) return false;\n\n // // Check if the address has core_entity_access_pass_management with syepm_can_edit true\n // const accessPassManagement = address.core_entity_access_pass_management;\n // return accessPassManagement?.syepm_can_edit === true;\n // }\n\n // /**\n // * Check if user has edit rights for document at given index\n // */\n // hasDocumentEditRights(documentIndex: number): boolean {\n // // For now, allow editing for all documents\n // // TODO: Implement proper access control when core_entity_access_pass_management is added to documents\n // return true;\n // }\n\n // /**\n // * Check if user has edit rights for family detail at given index\n // */\n // hasFamilyDetailEditRights(familyIndex: number): boolean {\n // // For now, allow editing for all family details\n // // TODO: Implement proper access control when core_entity_access_pass_management is added to family details\n // return true;\n // }\n\n // /**\n // * Check if user has edit rights for adding new contact addresses\n // * This checks if the user has core_entity_access_pass_management with syepm_can_edit true\n // */\n // hasAddContactAddressRights(): boolean {\n // // For new addresses, we need to check if the user has edit rights for the core_entity_access_pass_management_sycad\n // // This would typically be checked against the user's role permissions or entity access rights\n // // For now, we'll return true for new addresses, but this should be implemented based on your access control logic\n // return true; // TODO: Implement proper access control check for adding new addresses\n // }\n\n // /**\n // * Check if user has edit rights for adding new documents\n // */\n // hasAddDocumentRights(): boolean {\n // // For new documents, we need to check if the user has edit rights for the core_entity_access_pass_management_sydoc\n // // This would typically be checked against the user's role permissions or entity access rights\n // // For now, we'll return true for new documents, but this should be implemented based on your access control logic\n // return true; // TODO: Implement proper access control check for adding new documents\n // }\n\n // /**\n // * Check if user has edit rights for adding new family details\n // */\n // hasAddFamilyDetailRights(): boolean {\n // // For new family details, we need to check if the user has edit rights for the core_entity_access_pass_management_syfam\n // // This would typically be checked against the user's role permissions or entity access rights\n // // For now, we'll return true for new family details, but this should be implemented based on your access control logic\n // return true; // TODO: Implement proper access control check for adding new family details\n // }\n\n // /**\n // * Share document rights using floating entity rights sharing component\n // */\n // shareDocumentRights(documentIndex: number): void {\n // const document = this.documents()[documentIndex];\n // if (!document || !document._id) {\n // console.error('Cannot share rights for document without _id');\n // return;\n // }\n\n // console.log(`📤 Sharing document ${documentIndex}:`, document);\n\n // // Use the entity rights service with signal-based data\n // this.entityRightsService.show(computed(() => ({\n // syepm_access_passs_to: document._id || `document-${documentIndex}`,\n // core_entity_access_pass_management: 'core_entity_access_pass_management_sydoc',\n // syepm_user_id_user: this.appState.currentUser()?._id || ''\n // })));\n // }\n\n // /**\n // * Share family detail rights using floating entity rights sharing component\n // */\n // shareFamilyDetailRights(familyIndex: number): void {\n // const familyDetail = this.familyDetails()[familyIndex];\n // if (!familyDetail || !familyDetail._id) {\n // console.error('Cannot share rights for family detail without _id');\n // return;\n // }\n\n // console.log(`📤 Sharing family detail ${familyIndex}:`, familyDetail);\n\n // // Use the entity rights service with signal-based data\n // this.entityRightsService.show(computed(() => ({\n // syepm_access_passs_to: familyDetail._id || `family-${familyIndex}`,\n // core_entity_access_pass_management: 'core_entity_access_pass_management_syfam',\n // syepm_user_id_user: this.appState.currentUser()?._id || ''\n // })));\n // }\n\n // /**\n // * Find existing exception by combination of user, mapping, permission, and menu\n // */\n // private findExistingException(\n // userId: string,\n // mappingId: string,\n // permissionId: string,\n // menuId: string\n // ): CoreUserRoleExceptions | null {\n // // Search through all entity mappings for existing exceptions\n // for (const mapping of this.entityMappings()) {\n // const mappingWithExceptions = mapping as AuthUserCoreEntityMapping & { exceptions?: CoreUserRoleExceptions[] };\n // if (mappingWithExceptions.exceptions) {\n // const existingException = mappingWithExceptions.exceptions.find(ex =>\n // ex.syusrex_user_id_user === userId &&\n // ex.syusrex_user_entity_mapping_id_syenm === mappingId &&\n // ex.syusrex_role_permissions_id_sygms === permissionId &&\n // ex.syusrex_menu_id_syme === menuId\n // );\n // if (existingException) {\n // return existingException;\n // }\n // }\n // }\n // return null;\n // }\n\n // /**\n // * Process exceptions for each entity mapping based on modified vs actual permissions\n // * This method should be called during save to create core_user_role_exceptions\n // */\n // processRoleExceptions(): CoreUserRoleExceptions[] {\n // const exceptions: CoreUserRoleExceptions[] = [];\n\n // console.log('🎭 Processing role exceptions for all entity mappings...');\n\n // // Iterate through all entity mappings\n // this.entityMappings().forEach((mapping, mappingIndex) => {\n // const menuRights = this.menuRightsMap()[mappingIndex.toString()] || [];\n\n // menuRights.forEach((menu: MenuWithPermissions) => {\n // if (menu._permissionValues) {\n // Object.keys(menu._permissionValues).forEach(permissionId => {\n // const permissionData = menu?._permissionValues?.[permissionId] || {} as PermissionValue;\n\n // // Check if permission was modified (different from actual role permission)\n // if (permissionData.modified !== permissionData.actual) {\n // // Check if exception already exists from GET by ID response\n // const existingException = this.findExistingException(\n // this.userId() || '',\n // mapping._id || '',\n // permissionId,\n // menu._id || ''\n // );\n\n // const exception = {\n // _id: existingException?._id || '', // Use existing _id if found, otherwise empty for new exception\n // syusrex_user_id_user: this.userId() || '',\n // syusrex_user_entity_mapping_id_syenm: mapping._id || '',\n // syusrex_role_id_syusrol: mapping.syenm_role_id_syusrol?._id || '',\n // syusrex_role_permissions_id_sygms: permissionId,\n // syusrex_menu_id_syme: menu._id,\n // syusrex_isactive: true,\n // syusrex_status: permissionData.modified // Status reflects the checkbox state (true = checked, false = unchecked)\n // };\n\n // exceptions.push(exception);\n\n // console.log(`🎭 Exception created for mapping ${mappingIndex}, menu ${menu.syme_title}, permission ${permissionData.permission.sygms_title}:`, {\n // actual: permissionData.actual,\n // modified: permissionData.modified,\n // exception: exception\n // });\n // }\n // });\n // }\n // });\n // });\n\n // console.log(`🎭 Total exceptions to process: ${exceptions.length}`, exceptions);\n // return exceptions;\n // }\n\n // /**\n // * Get exceptions for a specific entity mapping\n // */\n // getExceptionsForMapping(mappingIndex: number): CoreUserRoleExceptions[] {\n // const exceptions: CoreUserRoleExceptions[] = [];\n // const menuRights = this.menuRightsMap()[mappingIndex.toString()] || [];\n\n // menuRights.forEach((menu: MenuWithPermissions) => {\n // if (menu._permissionValues) {\n // Object.keys(menu._permissionValues).forEach(permissionId => {\n // const permissionData = menu?._permissionValues?.[permissionId] || {} as PermissionValue;\n\n // // Check if permission was modified (different from actual role permission)\n // if (permissionData.modified !== permissionData.actual) {\n // const mapping = this.entityMappings()[mappingIndex];\n \n // // Check if exception already exists from GET by ID response\n // const existingException = this.findExistingException(\n // this.userId() || '',\n // mapping._id || '',\n // permissionId,\n // menu._id || ''\n // );\n\n // const exception = {\n // syusrex_user_id_user: this.userId() || '',\n // syusrex_user_entity_mapping_id_syenm: mapping._id || '',\n // syusrex_role_id_syusrol: mapping.syenm_role_id_syusrol?._id || '',\n // syusrex_role_permissions_id_sygms: permissionId,\n // syusrex_menu_id_syme: menu._id,\n // _id: existingException?._id || '', // Use existing _id if found, otherwise empty for new exception\n // syusrex_isactive: true,\n // syusrex_status: permissionData.modified // Status reflects the checkbox state (true = checked, false = unchecked)\n // };\n\n // exceptions.push(exception);\n // }\n // });\n // }\n // });\n\n // return exceptions;\n // }\n // private applyContactAddressAccessControl(): void {\n // const contactFormArray = this.contactAddressesFormArray;\n\n // contactFormArray.controls.forEach((control, index) => {\n // const hasEditRights = this.hasContactAddressEditRights(index);\n\n // if (hasEditRights) {\n // control.enable();\n // } else {\n // control.disable();\n // }\n // });\n // }\n\n // /**\n // * Apply access control to document FormArray\n // * This method disables/enables form controls based on user permissions\n // */\n // private applyDocumentAccessControl(): void {\n // const documentFormArray = this.documentsFormArray;\n\n // documentFormArray.controls.forEach((control, index) => {\n // const hasEditRights = this.hasDocumentEditRights(index);\n\n // if (hasEditRights) {\n // control.enable();\n // } else {\n // control.disable();\n // }\n // });\n // }\n\n // /**\n // * Apply access control to family detail FormArray\n // * This method disables/enables form controls based on user permissions\n // */\n // private applyFamilyDetailAccessControl(): void {\n // const familyFormArray = this.familyDetailsFormArray;\n\n // familyFormArray.controls.forEach((control, index) => {\n // const hasEditRights = this.hasFamilyDetailEditRights(index);\n\n // if (hasEditRights) {\n // control.enable();\n // } else {\n // control.disable();\n // }\n // });\n // }\n\n\n // /**\n // * Handle document files selection\n // */\n // onDocumentFilesSelected(event: Event, documentIndex: number): void {\n // const target = event.target as HTMLInputElement;\n // const files = target.files;\n\n // if (!files || files.length === 0) return;\n\n // console.log(`📎 Files selected for document ${documentIndex}:`, files);\n\n // // Store files in the document form group or handle upload logic here\n // const documentFormGroup = this.documentsFormArray.at(documentIndex);\n // if (documentFormGroup) {\n // // You can store the files in a custom property or handle upload immediately\n // // For now, we'll store them in a custom property for display\n // const existingFiles = this.getDocumentFiles(documentIndex);\n // const newFiles = Array.from(files);\n // const allFiles = [...existingFiles, ...newFiles];\n\n // // Store files in the form group's custom property\n // (documentFormGroup as DocumentFormGroup)._uploadedFiles = allFiles;\n\n // console.log(`📎 Total files for document ${documentIndex}:`, allFiles.length);\n // }\n // }\n\n // /**\n // * Get document group ID\n // */\n // getDocumentGroupId(documentIndex: number): string {\n // const documentFormGroup = this.documentsFormArray.at(documentIndex);\n // return documentFormGroup?.get('syusd_photo_group_id_cyfm')?.value || '';\n // }\n\n // /**\n // * Get uploaded files for a document (legacy method for backward compatibility)\n // */\n // getDocumentFiles(documentIndex: number): File[] {\n // // For multiple file upload with group ID, we don't track individual files\n // // Return empty array since files are managed by group ID\n // return [];\n // }\n\n // /**\n // * Remove a file from document (legacy method for backward compatibility)\n // */\n // removeDocumentFile(documentIndex: number, fileName: string): void {\n // // For multiple file upload with group ID, individual file removal is not supported\n // // Files are managed as a group on the server\n // console.log(`📎 Individual file removal not supported for group uploads. Document ${documentIndex}, File: ${fileName}`);\n // }\n\n // constructor() {\n // this.userMasterForm = this.fb.group({\n // // Basic User Information from auth_user_mst table\n // user_username: ['', []],\n // user_firstname: ['', []],\n // user_middlename: [''],\n // user_lastname: ['', []],\n // user_fullname: ['', []],\n // user_emailid: ['', [Validators.email]],\n // user_mobileno: ['', []],\n // user_password: [''],\n // user_confirm_password: [''],\n // user_photo_id_cyfm: [''],\n // user_passwordchangeonlogin: [false],\n // user_isactive: [true],\n\n // // Entity mappings as FormArray\n // core_entity_mapping: this.fb.array([]),\n\n // // Contact addresses as FormArray\n // core_user_contact_addresses: this.fb.array([]),\n\n // // Documents as FormArray\n // core_user_documents: this.fb.array([]),\n\n // // Family details as FormArray\n // core_user_family_details: this.fb.array([])\n // });\n\n // // Initialize role permissions grid configuration\n // this.initializeRolePermissionsGrid();\n // }\n\n // // FormArray getter for entity mappings\n // get entityMappingsFormArray(): FormArray {\n // return this.userMasterForm.get('core_entity_mapping') as FormArray;\n // }\n\n // // FormArray getter for contact addresses\n // get contactAddressesFormArray(): FormArray {\n // return this.userMasterForm.get('core_user_contact_addresses') as FormArray;\n // }\n\n // // FormArray getter for documents\n // get documentsFormArray(): FormArray {\n // return this.userMasterForm.get('core_user_documents') as FormArray;\n // }\n\n // // FormArray getter for family details\n // get familyDetailsFormArray(): FormArray {\n // return this.userMasterForm.get('core_user_family_details') as FormArray;\n // }\n\n // // User search functionality for family member selection\n // userSearchResults = signal<{ [familyIndex: number]: AuthUserMst[] }>({});\n // userSearchLoading = signal<{ [familyIndex: number]: boolean }>({});\n\n // // Debounce timer for search\n // private searchDebounceTimers: { [familyIndex: number]: number } = {};\n\n // // Helper method to create entity mapping FormGroup\n // private createEntityMappingFormGroup(): FormGroup {\n // const today = new Date().toISOString().split('T')[0];\n // return this.fb.group({\n // _id: [''],\n // syenm_entity_id_syen: ['', []],\n // syenm_role_id_syusrol: [''],\n // syenm_designation_id_sydsg: [''],\n // syenm_department_id_sydept: [''],\n // syenm_activefrom: [today, []],\n // syenm_activeupto: [''],\n // syenm_isdefault: [false],\n // syenm_isactive: [true],\n // syenm_isloggedin: [true],\n // exceptions: this.fb.array([]) // Add exceptions FormArray\n // });\n // }\n\n // // Helper method to create contact address FormGroup\n // private createContactAddressFormGroup(): FormGroup {\n // return this.fb.group({\n // _id: [''],\n // sycad_contact_person_name: [''],\n // sycad_address_type_id_sygms: [''],\n // sycad_contact_address: [''],\n // sycad_contact_pin_sypin: [''],\n // sycad_contact_city_sypin: [''],\n // sycad_contact_state_sypin: [''],\n // sycad_contact_country_syctr: [''],\n // sycad_contact_phone: [''],\n // sycad_contact_phone_alt: [''],\n // sycad_contact_fax: [''],\n // sycad_contact_email: [''],\n // sycad_contact_email_alt: ['']\n // });\n // }\n\n // // Helper method to create document FormGroup\n // private createDocumentFormGroup(): FormGroup {\n // const formGroup = this.fb.group({\n // _id: [''],\n // syusd_user_id_user: [''],\n // syusd_document_type_id_sygms: [''],\n // syusd_doc_number: [''],\n // syusd_doc_name_as_per_doc: [''],\n // syusd_doc_issue_date: [''],\n // syusd_doc_expiry_date: [''],\n // syusd_photo_group_id_cyfm: [''],\n // syusd_doc_verification_status_id_sygms: [''],\n // syusd_doc_kyc_status_id_sygms: [''],\n // syusd_isactive: [true]\n // });\n\n // // Initialize file storage for this document\n // (formGroup as DocumentFormGroup)._uploadedFiles = [];\n\n // return formGroup;\n // }\n\n // // Helper method to create family detail FormGroup\n // private createFamilyDetailFormGroup(): FormGroup {\n // return this.fb.group({\n // _id: [''],\n // syfdl_family_member_name: [''],\n // syfdl_family_member_id_user: [''],\n // syfdl_family_member_dob: [''],\n // syfdl_relationship_id_sygms: [''],\n // syfdl_blood_group_sygms: [''],\n // syfdl_contact_email: [''],\n // syfdl_contact_email_id: [''],\n // syfdl_contact_phone: [''],\n // syfdl_contact_number: [''],\n // syfdl_isactive: [true]\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 // // User search methods for family member selection\n // searchUsers(query: string = '', familyIndex: number = 0) {\n // // Update loading state for specific family member\n // this.userSearchLoading.update(loading => ({\n // ...loading,\n // [familyIndex]: true\n // }));\n\n // // Create payload for user search - no pagination, larger page size\n // const searchPayload = {\n // total: 0,\n // pageIndex: 1,\n // pageSize: 100, // Load more users at once since no pagination\n // query: query || '',\n // pagination: false, // Disable pagination\n // sort: {\n // order: 'asc' as 'asc',\n // key: 'user_fullname'\n // }\n // };\n\n // this.userMasterService.getUserList(searchPayload).subscribe({\n // next: (response) => {\n // if (response?.success) {\n // const userData = response?.data || [];\n // this.userSearchResults.update(results => ({\n // ...results,\n // [familyIndex]: userData\n // }));\n // } else {\n // this.userSearchResults.update(results => ({\n // ...results,\n // [familyIndex]: []\n // }));\n // }\n // },\n // error: (error) => {\n // console.error('Error searching users:', error);\n // this.userSearchResults.update(results => ({\n // ...results,\n // [familyIndex]: []\n // }));\n // },\n // complete: () => {\n // this.userSearchLoading.update(loading => ({\n // ...loading,\n // [familyIndex]: false\n // }));\n // }\n // });\n // }\n\n // // Get user options for the select component\n // userOptions(familyIndex: number = 0): AuthUserMst[] {\n // return this.userSearchResults()[familyIndex] || [];\n // }\n\n // // Handle search change from the select component with debouncing\n // onUserSearchChange(searchEvent: selectSearchType, familyIndex: number) {\n // const query = searchEvent?.query;\n\n // // Clear existing debounce timer for this family member\n // if (this.searchDebounceTimers[familyIndex]) {\n // clearTimeout(this.searchDebounceTimers[familyIndex]);\n // }\n\n // // Set new debounce timer (300ms delay)\n // this.searchDebounceTimers[familyIndex] = setTimeout(() => {\n // if (query) {\n // this.searchUsers(query, familyIndex);\n // } else {\n // // If no query, load all users\n // this.searchUsers('', familyIndex);\n // }\n // }, 300);\n // }\n\n // // Load initial users for the select component\n // loadInitialUsers() {\n // // Load initial users for all existing family members\n // const familyCount = this.familyDetailsFormArray.length;\n // for (let i = 0; i < familyCount; i++) {\n // this.searchUsers('', i);\n // }\n // }\n\n // // Handle user selection change in the form\n // onUserSelectionChange(event: AuthUserMst, familyIndex: number) {\n // const selectedUserId = event?._id;\n // if (selectedUserId) {\n // // Find the selected user from the results for this specific family member\n // const userResults = this.userSearchResults()[familyIndex] || [];\n // const selectedUser = userResults.find((user: AuthUserMst) => user._id === selectedUserId);\n // if (selectedUser) {\n // // Update the family member name field with the selected user's name\n // const familyGroup = this.familyDetailsFormArray.at(familyIndex);\n // familyGroup.patchValue({\n // syfdl_family_member_name: selectedUser.user_fullname || selectedUser.user_username || ''\n // });\n // }\n // }\n // }\n\n // entityOptions = signal<CoreSystemEntityListResponse[]>([]);\n // roleOptions = signal<{ [entityId: string]: CoreUserRoleResponse[] }>({});\n // designationOptions = signal<{ [entityId: string]: ICoreSydsg[] }>({});\n // departmentOptions = signal<{ [entityId: string]: ICoreSydept[] }>({});\n // menuOptions = signal<ICoreSyme[]>([]);\n\n // // Role permissions grid properties\n // rolePermissionsGridConfig = 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_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 // key: 'syme_permissions_id_sygms',\n // header: 'Permissions',\n // type: 'custom',\n // width: '200px',\n // truncate: true,\n // align: 'left',\n // renderer: 'permissionsRenderer'\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: 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 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 // 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 // selectedRoleId = signal<string | null>(null);\n // selectedEntityIndex = signal<number | null>(null);\n\n // // Template renderers for role permissions grid\n // menuDetailsRendererTemplate = viewChild<TemplateRef<TemplateContext>>('menuDetailsRendererTemplate');\n // permissionsCheckboxRendererTemplate = viewChild<TemplateRef<TemplateContext>>('permissionsCheckboxRendererTemplate');\n // menuTypeRendererTemplate = viewChild<TemplateRef<TemplateContext>>('menuTypeRendererTemplate');\n // menuRightsPermissionsRendererTemplate = viewChild<TemplateRef<TemplateContext>>('menuRightsPermissionsRendererTemplate');\n // permissionsRendererTemplate = viewChild<TemplateRef<TemplateContext>>('permissionsRendererTemplate');\n // addressTypeOptions = signal<ICoreSygms[]>([]);\n\n // // Document and Family dropdown options\n // documentTypeOptions = signal<ICoreSygms[]>([]);\n // photoGroupOptions = signal<ICoreSygms[]>([]);\n // documentVerificationStatusOptions = signal<ICoreSygms[]>([]);\n // documentKycStatusOptions = signal<ICoreSygms[]>([]);\n // bloodGroupOptions = signal<ICoreSygms[]>([]);\n // relationshipOptionsData = signal<ICoreSygms[]>([]);\n\n // // Address-related data - separate for each address\n // addressPostalCodes = signal<{ [addressIndex: number]: pinCodeSelectResponseData[] }>({});\n // addressCountries = signal<{ [addressIndex: number]: ICoreSyctr[] }>({});\n // addressPostalCodesLoading = signal<{ [addressIndex: number]: boolean }>({});\n // addressCountriesLoading = signal<{ [addressIndex: number]: boolean }>({});\n // postalCodeDataCache = signal<{ [addressIndex: number]: pinCodeSelectResponseData[] }>({});\n\n // ngOnInit(): void {\n // this.initializeComponent();\n // }\n\n // /**\n // * Initialize component\n // */\n // private initializeComponent(): void {\n // // Get user information from route (for edit mode)\n // this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\n // const queryParams = params['query'];\n // console.log(queryParams, 'queryParams');\n\n // if (queryParams) {\n // // Query parameters passed (following page-controls pattern)\n // const queryData = generateObjectFromString(queryParams);\n // if (queryData?.user_id) {\n // this.userId.set(queryData.user_id);\n // this.isEditMode.set(true);\n // this.showPasswordFields.set(false); // Reset password fields for edit mode\n // this.loadUserData(queryData.user_id);\n // }\n // } else {\n // // Create mode - show password fields by default\n // this.isEditMode.set(false);\n // this.showPasswordFields.set(true);\n // }\n\n // // Always load dropdown options\n // this.loadDropdownOptions();\n // this.loadUserRightsTypeId(); // Load user rights type and permissions\n // this.setupFormSubscriptions();\n // this.setEntityIdFromAppState();\n\n // // Set up floating uploader with current user ID\n // this.setupFloatingUploader();\n\n // // Load initial users for family member selection\n // this.loadInitialUsers();\n // });\n // }\n\n // /**\n // * Setup floating uploader with current user ID\n // */\n // private setupFloatingUploader(): void {\n // // Get current user ID from app state or use a default\n // const currentUser = this.appState.currentUser();\n // const currentUserId = currentUser?._id || 'current-user';\n // console.log('🚀 [UserCreate] Current user ID:', currentUserId);\n // }\n\n // /**\n // * Setup form subscriptions\n // */\n // private setupFormSubscriptions(): void {\n // // Watch for password field changes to trigger confirm password validation\n // const passwordControl = this.userMasterForm.get('user_password');\n // const confirmPasswordControl = this.userMasterForm.get('user_confirm_password');\n\n // if (passwordControl && confirmPasswordControl) {\n // // When password changes, re-validate confirm password\n // passwordControl.valueChanges\n // .pipe(takeUntilDestroyed(this.destroyRef))\n // .subscribe(() => {\n // confirmPasswordControl.updateValueAndValidity();\n // });\n // }\n\n // // Watch for form changes\n // this.userMasterForm.valueChanges\n // .pipe(takeUntilDestroyed(this.destroyRef))\n // .subscribe(() => {\n // // Form validation is handled by reactive forms\n // });\n // }\n\n // /**\n // * Set entity ID from app state for new user creation\n // */\n // private setEntityIdFromAppState(): void {\n // if (!this.isEditMode()) {\n // const entityId = this.appState.getActiveEntityId();\n // if (entityId && this.entityMappings().length === 0) {\n // // Add default entity mapping for new users\n // this.addDefaultEntityMapping(entityId);\n // }\n // }\n // // Set password validation based on mode\n // this.updatePasswordValidation();\n // }\n\n // /**\n // * Cleanup when component is destroyed\n // */\n // ngOnDestroy(): void {\n // console.log('🧹 CideCoreUserCreateComponent: Cleaning up component state');\n\n // // Clear all debounce timers\n // Object.values(this.searchDebounceTimers).forEach(timer => {\n // if (timer) {\n // clearTimeout(timer);\n // }\n // });\n // this.searchDebounceTimers = {};\n\n // console.log('🧹 CideCoreUserCreateComponent: Component state cleaned up');\n // }\n\n // /**\n // * Update password validation based on create/edit mode\n // */\n // private updatePasswordValidation(): void {\n // const passwordControl = this.userMasterForm.get('user_password');\n // const confirmPasswordControl = this.userMasterForm.get('user_confirm_password');\n\n // if (this.isEditMode()) {\n // // In edit mode, passwords are optional but if provided, must meet requirements\n // passwordControl?.setValidators([Validators.minLength(8)]);\n // confirmPasswordControl?.setValidators([this.passwordMatchValidator.bind(this)]);\n // } else {\n // // In create mode, password is required\n // passwordControl?.setValidators([Validators.required, Validators.minLength(8)]);\n // confirmPasswordControl?.setValidators([Validators.required, this.passwordMatchValidator.bind(this)]);\n // }\n\n // passwordControl?.updateValueAndValidity();\n // confirmPasswordControl?.updateValueAndValidity();\n // }\n\n // /**\n // * Custom validator for password confirmation\n // */\n // private passwordMatchValidator(control: AbstractControl): ValidationErrors | null {\n // if (!this.userMasterForm) {\n // return null; // Form not initialized yet\n // }\n\n // const passwordControl = this.userMasterForm.get('user_password');\n // const password = passwordControl?.value;\n // const confirmPassword = control.value;\n\n // // In edit mode, both fields can be empty (no password change)\n // if (this.isEditMode() && !password && !confirmPassword) {\n // return null;\n // }\n\n // // In create mode, both fields are required\n // if (!this.isEditMode() && (!password || !confirmPassword)) {\n // return { passwordRequired: true };\n // }\n\n // // If password is provided, confirm password must match\n // if (password && confirmPassword && password !== confirmPassword) {\n // return { passwordMismatch: true };\n // }\n\n // return null;\n // }\n\n // /**\n // * Check if password update is required (edit mode with password fields filled or triggered)\n // */\n // isPasswordUpdateRequired(): boolean {\n // if (!this.isEditMode()) {\n // return false; // In create mode, password is always required\n // }\n\n // // In edit mode, check if user explicitly wants to update password\n // return this.showPasswordFields();\n // }\n\n // /**\n // * Add default entity mapping with active entity\n // */\n // private addDefaultEntityMapping(entityId: string): void {\n // // Create new FormGroup for entity mapping with active entity\n // const newMappingFormGroup = this.createEntityMappingFormGroup();\n // newMappingFormGroup.patchValue({\n // syenm_entity_id_syen: entityId,\n // syenm_isdefault: true\n // });\n\n // // Add to FormArray\n // this.entityMappingsFormArray.push(newMappingFormGroup);\n\n // // Update the signal for backward compatibility with template functions\n // this.entityMappings.update(mappings => [...mappings, {\n // syenm_id_user: this.userId(),\n // syenm_id_logses: '',\n // syenm_entity_id_syen: { _id: entityId, syen_name: '' },\n // syenm_role_id_syusrol: { _id: '', syusrol_name: '' },\n // syenm_designation_id_sydsg: { _id: '', sydsg_name: '' },\n // syenm_department_id_sydept: { _id: '', sydept_name: '' },\n // syenm_activefrom: new Date().toISOString().split('T')[0],\n // syenm_activeupto: '',\n // syenm_isdefault: true,\n // syenm_isactive: true,\n // syenm_isloggedin: true\n // }]);\n // }\n\n // /**\n // * Load user data for edit mode\n // */\n // private loadUserData(userId: string): void {\n // this.loading.set(true);\n\n // // Create payload using the updated service pattern\n // const getPayload = new AuthUserMstGetByIdPayload({\n // user_id: userId,\n // syenm_entity_id_syen: this.appState.getActiveEntityId()\n // });\n\n // this.userMasterService.getUserMasterById(getPayload)\n // .pipe(takeUntilDestroyed(this.destroyRef))\n // .subscribe({\n // next: (response: authUserMstGetByIdControllerResponse) => {\n // console.log(response, 'response');\n // if (response.success && response.data) {\n // this.populateFormWithUserData(response.data);\n // } else {\n // this.notificationService.error(response.message || 'Failed to load user data', {\n // title: 'Load Failed',\n // duration: 5000\n // });\n // }\n // this.loading.set(false);\n // },\n // error: (error) => {\n // console.error('Error loading user data:', error);\n // this.notificationService.error('Failed to load user data. Please try again.', {\n // title: 'Load Failed',\n // duration: 5000\n // });\n // this.loading.set(false);\n // }\n // });\n // }\n\n // /**\n // * Populate form with user data\n // */\n // private populateFormWithUserData(data: AuthUserMstGetByIdData): void {\n // if (data.auth_user_mst) {\n // // Exclude password from the loaded data\n // const { user_password, ...userDataWithoutPassword } = data.auth_user_mst;\n // this.userMasterForm.patchValue(userDataWithoutPassword);\n\n // // Clear password fields in edit mode\n // this.userMasterForm.patchValue({\n // user_password: '',\n // user_confirm_password: ''\n // });\n\n // // Handle profile photo if it exists\n // if (data.auth_user_mst.user_photo_id_cyfm) {\n // console.log('📸 Loading existing profile photo:', data.auth_user_mst.user_photo_id_cyfm);\n // // The file-input component will automatically load the file details when the form control value is set\n // // We can set a preview URL if we have the file data\n // this.loadProfilePhotoPreview(data.auth_user_mst.user_photo_id_cyfm);\n // }\n // }\n\n // // Set additional data\n // if (data.core_entity_mapping) {\n // this.entityMappings.set(data.core_entity_mapping);\n // this.entityMappings()?.forEach((mapping: AuthUserCoreEntityMapping, index: number) => {\n // this.onEntityChange(index, mapping);\n // if (mapping?.syenm_department_id_sydept) {\n // this.onDepartmentChange(mapping?.syenm_department_id_sydept)\n // }\n\n // });\n // // Update entity mappings FormArray\n // const entityMappingFormArray = this.entityMappingsFormArray;\n // entityMappingFormArray.clear();\n // data.core_entity_mapping.forEach((mapping: AuthUserCoreEntityMapping) => {\n // const mappingGroup = this.createEntityMappingFormGroup();\n // let core_entity_mapping: CoreEntityMapping = {};\n // core_entity_mapping = {\n // ...mapping,\n // syenm_entity_id_syen: mapping?.syenm_entity_id_syen?._id,\n // syenm_designation_id_sydsg: mapping?.syenm_designation_id_sydsg?._id,\n // syenm_role_id_syusrol: mapping?.syenm_role_id_syusrol?._id,\n // syenm_department_id_sydept: mapping?.syenm_department_id_sydept?._id\n // };\n // mappingGroup.patchValue(core_entity_mapping);\n // mappingGroup.get('syenm_entity_id_syen')?.disable();\n // entityMappingFormArray.push(mappingGroup);\n // });\n\n // // Load role permissions for each mapping that has a role selected\n // data.core_entity_mapping.forEach((mapping: AuthUserCoreEntityMapping, index: number) => {\n // if (mapping.syenm_role_id_syusrol) {\n // const roleId = typeof mapping.syenm_role_id_syusrol === 'object'\n // ? mapping.syenm_role_id_syusrol._id\n // : mapping.syenm_role_id_syusrol;\n\n // if (roleId) {\n // console.log(`🎭 Loading role permissions for mapping ${index} with role ${roleId}`);\n // this.loadRolePermissions(roleId, index);\n // }\n // }\n // });\n // }\n\n // // Handle existing role exceptions\n // if (data.core_user_role_exceptions && Array.isArray(data.core_user_role_exceptions)) {\n // console.log('🎭 Loading existing role exceptions:', data.core_user_role_exceptions);\n\n // // Group exceptions by mapping index\n // const exceptionsByMapping: { [mappingIndex: string]: CoreUserRoleExceptionsMapping[] } = {};\n\n // data.core_user_role_exceptions.forEach((exception: CoreUserRoleExceptionsMapping) => {\n // // Find the mapping index for this exception\n // const mappingIndex = this.findMappingIndexByEntityMappingId(exception.syusrex_user_entity_mapping_id_syenm || '');\n // if (mappingIndex !== null) {\n // if (!exceptionsByMapping[mappingIndex.toString()]) {\n // exceptionsByMapping[mappingIndex.toString()] = [];\n // }\n // exceptionsByMapping[mappingIndex.toString()].push(exception);\n // }\n // });\n\n // // Add exceptions to each mapping\n // Object.keys(exceptionsByMapping).forEach(mappingIndexStr => {\n // const mappingIndex = parseInt(mappingIndexStr);\n // const mapping = this.entityMappings()[mappingIndex];\n // if (mapping) {\n // (mapping as (AuthUserCoreEntityMapping & { exceptions?: CoreUserRoleExceptionsMapping[] })).exceptions = exceptionsByMapping[mappingIndexStr];\n // }\n // });\n // }\n\n // if (data.core_user_contact_addresses) {\n // this.contactAddresses.set(data.core_user_contact_addresses);\n // // Update contact addresses FormArray\n // const contactFormArray = this.contactAddressesFormArray;\n // contactFormArray.clear();\n // data.core_user_contact_addresses.forEach((address: AuthUserCoreUserContactAddresses) => {\n // const addressGroup = this.createContactAddressFormGroup();\n // let core_user_contact_addresses: CoreUserContactAddresses = {\n // ...address,\n // sycad_address_type_id_sygms: address?.sycad_address_type_id_sygms?._id || \"\",\n // sycad_contact_person_syfdl: address?.sycad_contact_person_syfdl?._id || \"\",\n // sycad_contact_pin_sypin: address?.sycad_contact_pin_sypin?._id || \"\",\n // sycad_contact_country_syctr: address?.sycad_contact_country_syctr?._id || \"\"\n // };\n // addressGroup.patchValue(core_user_contact_addresses);\n // contactFormArray.push(addressGroup);\n // });\n\n // // Load dropdown data for existing addresses\n // this.loadDropdownDataForExistingAddresses();\n\n // // Apply access control after form is populated\n // this.applyContactAddressAccessControl();\n // }\n\n // // Handle documents if present in API response\n // if (data.core_user_documents && Array.isArray(data.core_user_documents)) {\n // const documentsData = data.core_user_documents;\n // this.documents.set(documentsData);\n\n // // Clear existing documents FormArray\n // while (this.documentsFormArray.length !== 0) {\n // this.documentsFormArray.removeAt(0);\n // }\n\n // // Add documents to FormArray\n // documentsData.forEach((document) => {\n // const documentGroup = this.createDocumentFormGroup();\n // documentGroup.patchValue({\n // _id: document._id || '',\n // syusd_user_id_user: this.appState.getUserId() || '',\n // syusd_document_type_id_sygms: document.syusd_document_type_id_sygms?._id || '',\n // syusd_doc_number: document.syusd_doc_number || '',\n // syusd_doc_name_as_per_doc: document.syusd_doc_name_as_per_doc || '',\n // syusd_photo_group_id_cyfm: document.syusd_photo_group_id_cyfm || '',\n // syusd_doc_issue_date: document.syusd_doc_issue_date || '',\n // syusd_doc_expiry_date: document.syusd_doc_expiry_date || '',\n // syusd_doc_verification_status_id_sygms: document.syusd_doc_verification_status_id_sygms?._id || '',\n // syusd_doc_kyc_status_id_sygms: document.syusd_doc_kyc_status_id_sygms?._id || '',\n // syusd_isactive: document.syusd_isactive ?? true\n // });\n // this.documentsFormArray.push(documentGroup);\n // });\n\n // // Apply access control after documents are populated\n // this.applyDocumentAccessControl();\n // }\n\n // // Handle family details if present in API response\n // if (data.core_user_family_details && Array.isArray(data.core_user_family_details)) {\n // const familyData = data.core_user_family_details;\n // this.familyDetails.set(familyData);\n\n // // Clear existing family details FormArray\n // while (this.familyDetailsFormArray.length !== 0) {\n // this.familyDetailsFormArray.removeAt(0);\n // }\n\n // // Add family details to FormArray\n // familyData.forEach((familyDetail: AuthUserCoreUserFamilyDetails) => {\n // const familyGroup = this.createFamilyDetailFormGroup();\n // familyGroup.patchValue({\n // _id: familyDetail._id || '',\n // syfdl_family_member_name: familyDetail.syfdl_family_member_name || '',\n // syfdl_family_member_id_user: familyDetail.syfdl_family_member_id_user?._id || '',\n // syfdl_family_member_dob: familyDetail.syfdl_family_member_dob || '',\n // syfdl_relationship_id_sygms: familyDetail.syfdl_relationship_id_sygms?._id || '',\n // syfdl_blood_group_sygms: familyDetail.syfdl_blood_group_sygms?._id || '',\n // syfdl_contact_email: familyDetail.syfdl_contact_email_id || '',\n // syfdl_contact_email_id: familyDetail.syfdl_contact_email_id || '',\n // syfdl_contact_phone: familyDetail.syfdl_contact_number || '',\n // syfdl_contact_number: familyDetail.syfdl_contact_number || '',\n // syfdl_isactive: true\n // });\n // this.familyDetailsFormArray.push(familyGroup);\n // });\n\n // // Apply access control after family details are populated\n // this.applyFamilyDetailAccessControl();\n // }\n\n // // Update password validation for edit mode\n // this.updatePasswordValidation();\n // }\n\n // private loadDropdownOptions() {\n // // Load entity options\n // this.entityService.getEntityList({}).subscribe({\n // next: (response) => {\n // if (response?.success) {\n // console.log(`🏢 entities:`, response.data);\n // this.entityOptions.set(response.data || []);\n // }\n // },\n // error: (error) => console.error('Error loading entities:', error)\n // });\n\n // // Countries will be loaded individually for each address when needed\n\n // // Load address types from general master\n // this.loadAddressTypes();\n\n // // Load document and family dropdown options\n // this.loadDocumentTypes();\n // this.loadDocumentVerificationStatus();\n // this.loadDocumentKycStatus();\n // this.loadBloodGroups();\n // this.loadRelationshipOptions();\n\n // // Load menu options from API\n // this.loadMenuOptions();\n\n // }\n\n\n\n // relationshipOptions() {\n // return this.relationshipOptionsData();\n // }\n\n // onTabChange(tab: TabItem) {\n // this.activeTab.set(tab.id);\n // }\n\n // // Entity Mapping Methods\n // addEntityMapping() {\n // // Create new FormGroup for entity mapping\n // const newMappingFormGroup = this.createEntityMappingFormGroup();\n\n // // Add to FormArray\n // this.entityMappingsFormArray.push(newMappingFormGroup);\n\n // // Update the signal for backward compatibility with template functions\n // this.entityMappings.update(mappings => [...mappings, {\n // syenm_id_user: this.userId(),\n // syenm_id_logses: '',\n // syenm_entity_id_syen: { _id: '', syen_name: '' },\n // syenm_role_id_syusrol: { _id: '', syusrol_name: '' },\n // syenm_designation_id_sydsg: { _id: '', sydsg_name: '' },\n // syenm_department_id_sydept: { _id: '', sydept_name: '' },\n // syenm_activefrom: new Date().toISOString().split('T')[0],\n // syenm_activeupto: '',\n // syenm_isdefault: false,\n // syenm_isactive: true,\n // syenm_isloggedin: true\n // }]);\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 from FormArray\n // this.entityMappingsFormArray.removeAt(index);\n\n // // Update the signal for backward compatibility with template functions\n // this.entityMappings.update(mappings => mappings.filter((_, i) => i !== index));\n\n // // Trigger update of entity dropdowns to make removed entity available again\n // this.triggerEntityDropdownUpdate();\n // }\n\n\n\n // onEntityChange(mappingIndex: number, event: AuthUserCoreEntityMapping) {\n // // When entity changes, load departments and filter roles based on entity\n // console.log(`🏢 Entity changed for mapping ${mappingIndex}:`, event);\n\n // // Clear menu rights for this mapping when entity changes\n // this.clearMenuRightsForMapping(mappingIndex);\n\n // // Clear department selection for this mapping\n // this.clearDepartmentForMapping(mappingIndex);\n\n // // Clear role selection for this mapping\n // this.clearRoleForMapping(mappingIndex);\n\n // // Load departments for the selected entity\n // if (event) {\n // const entityId = event?.syenm_entity_id_syen?._id || '';\n // this.loadDepartmentsForEntity(mappingIndex, entityId);\n\n // // Load roles for the selected entity\n // if (entityId) {\n // this.loadRolesForEntity(mappingIndex, entityId);\n // }\n // }\n\n // // Trigger change detection to update other entity dropdowns\n // this.triggerEntityDropdownUpdate();\n\n // // Automatically load menu rights when both entity and role are selected\n // const mapping = this.entityMappings()[mappingIndex];\n // if (mapping?.syenm_entity_id_syen && mapping?.syenm_role_id_syusrol) {\n // console.log(`🚀 Auto-loading menu rights for mapping ${mappingIndex}`);\n // this.loadMenuRights(mappingIndex);\n // }\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 // /**\n // * Trigger update of entity dropdowns to reflect changes in selected entities\n // */\n // private triggerEntityDropdownUpdate(): void {\n // // Force change detection by updating the form\n // const currentValue = this.entityMappingsFormArray.value;\n // this.entityMappingsFormArray.setValue(currentValue);\n // }\n\n // onDepartmentChange(event: ICoreSydept) {\n // if (!event?._id) {\n // return;\n // }\n // if (this.designationOptions()[event?._id]) {\n // return;\n // }\n // // get the designation options for the selected department;\n // this.designationService.getDesignationList({\n // sydsg_department_id_sydpt: event?._id || ''\n // }).subscribe({\n // next: (response: designationControllerResponse) => {\n // console.log(response, 'response Designation');\n // // designation entty specific\n // this.designationOptions.update(map => ({\n // ...map,\n // [event?._id || '']: response.data || []\n // }));\n // },\n // error: (error) => {\n // console.error('Error loading designations:', error);\n // }\n // });\n\n\n // }\n\n // getRoleOptionsForEntity(mappingIndex: number): CoreUserRoleResponse[] {\n // const mapping = this.entityMappings()[mappingIndex];\n // console.log(`🎭 getRoleOptionsForEntity:`, mapping);\n // if (!mapping?.syenm_entity_id_syen?._id) {\n // return [];\n // }\n\n // const entityId = mapping?.syenm_entity_id_syen?._id || '';\n // console.log(`🎭 roles:`, this.roleOptions());\n // const roles = this.roleOptions()[entityId];\n\n // if (roles) {\n // return roles;\n // }\n\n // // Return empty array if no roles found for this entity\n // return [];\n // }\n\n // /**\n // * Get filtered entity options with disabled state for already selected entities in other mappings\n // * @param currentMappingIndex The index of the current mapping being edited\n // * @returns Entity options with disabled state for already selected entities\n // */\n // getFilteredEntityOptions(currentMappingIndex: number): (CoreSystemEntityListResponse & { disabled?: boolean })[] {\n // const allEntities = this.entityOptions();\n // const currentMappings: CoreEntityMapping[] = this.entityMappingsFormArray.getRawValue();\n\n // // Get all selected entity IDs from other mappings (excluding current mapping)\n // const selectedEntityIds = currentMappings\n // .map((mapping: CoreEntityMapping, index: number) => {\n // if (index !== currentMappingIndex && mapping.syenm_entity_id_syen) {\n // // Handle both object and string formats\n // const entityId = mapping.syenm_entity_id_syen;\n // return entityId;\n // }\n // return null;\n // })\n // .filter((id: string | null) => id !== null && id !== '');\n\n // console.log(`🔍 Filtering entities for mapping ${currentMappingIndex}:`, {\n // totalEntities: allEntities.length,\n // selectedEntityIds,\n // availableEntities: allEntities.length - selectedEntityIds.length\n // });\n // console.log(`🏢 getFilteredEntityOptions selectedEntityIds:`, selectedEntityIds);\n // // Return all entities with disabled state for already selected ones\n // return allEntities.map((entity: CoreSystemEntityListResponse) => {\n // const entityId = entity._id;\n // const isDisabled = selectedEntityIds.includes(entityId as string);\n\n // if (isDisabled) {\n // console.log(`🚫 Entity \"${entity.syen_name}\" (${entityId}) is already selected in another mapping - marking as disabled`);\n // }\n\n // return {\n // ...entity,\n // disabled: isDisabled\n // };\n // });\n // }\n\n // /**\n // * Check if all entities are already selected in other mappings\n // * @param currentMappingIndex The index of the current mapping being edited\n // * @returns True if all entities are already selected\n // */\n // isAllEntitiesSelected(currentMappingIndex: number): boolean {\n // const allEntities = this.entityOptions();\n // const currentMappings = this.entityMappingsFormArray.value;\n\n // // Get all selected entity IDs from other mappings (excluding current mapping)\n // const selectedEntityIds = currentMappings\n // .map((mapping: EntityMappingWithExceptions, index: number) => {\n // if (index !== currentMappingIndex && mapping.syenm_entity_id_syen) {\n // const entityId = typeof mapping.syenm_entity_id_syen === 'object'\n // ? mapping.syenm_entity_id_syen._id\n // : mapping.syenm_entity_id_syen;\n // return entityId;\n // }\n // return null;\n // })\n // .filter((id: string | null) => id !== null && id !== '');\n\n // // Check if all entities are selected\n // return allEntities.length > 0 && selectedEntityIds.length >= allEntities.length;\n // }\n\n // /**\n // * Check if all entities are already mapped (for disabling Add Entity Mapping button)\n // * @returns True if all entities are already mapped\n // */\n // isAllEntitiesMapped(): boolean {\n // const allEntities = this.entityOptions();\n // const currentMappings = this.entityMappingsFormArray.value;\n\n // // Get all selected entity IDs\n // const selectedEntityIds = currentMappings\n // .map((mapping: EntityMappingWithExceptions) => {\n // if (mapping.syenm_entity_id_syen) {\n // const entityId = typeof mapping.syenm_entity_id_syen === 'object'\n // ? mapping.syenm_entity_id_syen._id\n // : mapping.syenm_entity_id_syen;\n // return entityId;\n // }\n // return null;\n // })\n // .filter((id: string | null) => id !== null && id !== '');\n\n // // Check if all entities are selected\n // return allEntities.length > 0 && selectedEntityIds.length >= allEntities.length;\n // }\n\n // /**\n // * Clear department selection for a specific mapping\n // */\n // private clearDepartmentForMapping(mappingIndex: number): void {\n // const formControl = this.userMasterForm.get(`core_entity_mapping.${mappingIndex}.syenm_department_id_sydept`);\n // if (formControl) {\n // formControl.setValue('');\n // }\n // }\n\n // /**\n // * Clear role selection for a specific mapping\n // */\n // private clearRoleForMapping(mappingIndex: number): void {\n // const formControl = this.userMasterForm.get(`core_entity_mapping.${mappingIndex}.syenm_role_id_syusrol`);\n // if (formControl) {\n // formControl.setValue('');\n // }\n // }\n\n // /**\n // * Load departments for a specific entity\n // */\n // private loadDepartmentsForEntity(mappingIndex: number, entityId: string): void {\n // console.log(`🏢 Loading departments for entity ${entityId} in mapping ${mappingIndex}`, this.departmentOptions());\n\n // // Check if we already have departments for this entity\n // const existingDepartments = this.departmentOptions()[entityId];\n // if (existingDepartments) {\n // console.log(`🏢 Using cached departments for entity ${entityId}:`, existingDepartments);\n // return;\n // }\n\n // // Load departments from service\n // this.departmentService.getDepartmentList({\n // sydept_entity_id_syen: entityId\n // }).subscribe({\n // next: (response) => {\n // if (response?.success) {\n // console.log(`🏢 Departments loaded for entity ${entityId}:`, response.data);\n\n // // Store departments for this entity\n // this.departmentOptions.update(map => ({\n // ...map,\n // [entityId]: response.data || []\n // }));\n // console.log(`🏢 departments:`, this.departmentOptions());\n // } else {\n // console.error(`❌ Failed to load departments for entity ${entityId}:`, response);\n // }\n // },\n // error: (error) => {\n // console.error(`❌ Error loading departments for entity ${entityId}:`, error);\n // }\n // });\n // }\n\n // /**\n // * Load roles for a specific entity\n // */\n // private loadRolesForEntity(mappingIndex: number, entityId: string): void {\n // console.log(`🎭 Loading roles for entity ${entityId} in mapping ${mappingIndex}`, this.roleOptions());\n\n // // Check if we already have roles for this entity\n // const existingRoles = this.roleOptions()[entityId];\n // if (existingRoles) {\n // console.log(`🎭 Using cached roles for entity ${entityId}:`, existingRoles);\n // return;\n // }\n\n // // Load roles from service using getUserRoleList\n // this.userRoleService.getUserRoleList({\n // syusrol_role_entity_id_syen: entityId\n // }).subscribe({\n // next: (response) => {\n // if (response?.success) {\n // console.log(`🎭 Roles loaded for entity ${entityId}:`, response.data);\n\n // // Store roles for this entity\n // this.roleOptions.update(map => ({\n // ...map,\n // [entityId]: response.data || []\n // }));\n // console.log(`🎭 roles:`, this.roleOptions());\n // } else {\n // console.error(`❌ Failed to load roles for entity ${entityId}:`, response);\n // }\n // },\n // error: (error) => {\n // console.error(`❌ Error loading roles for entity ${entityId}:`, error);\n // }\n // });\n // }\n\n // /**\n // * Get department options for a specific entity mapping\n // */\n // getDepartmentOptionsForEntity(mappingIndex: number): ICoreSydept[] {\n // const mapping = this.entityMappings()[mappingIndex];\n // console.log(`🏢 getDepartmentOptionsForEntity:`, mapping);\n // if (!mapping?.syenm_entity_id_syen?._id) {\n // return [];\n // }\n\n // const entityId = mapping?.syenm_entity_id_syen?._id || '';\n // console.log(`🏢 departments:`, this.departmentOptions());\n // const departments = this.departmentOptions()[entityId];\n\n // if (departments) {\n // return departments;\n // }\n // return [];\n // }\n\n // getDesignationOptionsForEntity(mappingIndex: number): ICoreSydsg[] {\n // const mapping = (this.entityMappingsFormArray?.getRawValue() as CoreEntityMapping[])[mappingIndex];\n // console.log(`🏢 Mapping:`, mapping);\n // if (!mapping?.syenm_department_id_sydept) {\n // return [];\n // }\n // const departmentId = mapping?.syenm_department_id_sydept || '';\n // const designations = this.designationOptions()[departmentId];\n // if (designations) {\n // return designations;\n // }\n\n // return [];\n // }\n\n // /**\n // * Initialize role permissions grid configuration\n // */\n // private initializeRolePermissionsGrid(): void {\n // this.rolePermissionsGridConfig.set({\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_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 // key: 'syme_permissions_id_sygms',\n // header: 'Permissions',\n // type: 'custom',\n // width: '200px',\n // truncate: true,\n // align: 'left',\n // renderer: 'permissionsRenderer'\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: 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 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 // 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\n // /**\n // * Handle role selection change\n // */\n // onRoleChange(mappingIndex: number, role: CoreUserRoleResponse): void {\n // console.log(`🎭 Role changed for mapping ${mappingIndex}:`, role);\n\n // if (!role) {\n // this.clearRolePermissions();\n // return;\n // }\n\n // this.selectedEntityIndex.set(mappingIndex);\n // this.selectedRoleId.set(role?._id || '');\n\n // // Load role details and permissions\n // this.loadRolePermissions(role?._id || '', mappingIndex);\n\n // // Automatically load menu rights when both entity and role are selected\n // const mapping = this.entityMappings()[mappingIndex];\n // if (mapping?.syenm_entity_id_syen && mapping?.syenm_role_id_syusrol) {\n // console.log(`🚀 Auto-loading menu rights for mapping ${mappingIndex}`);\n // this.loadMenuRights(mappingIndex);\n\n // // Force refresh the grid to show updated permission states\n // setTimeout(() => {\n // this.cdr.detectChanges();\n // }, 100);\n // }\n // }\n\n // /**\n // * Load role permissions from API\n // */\n // private loadRolePermissions(roleId: string, mappingIndex: number): void {\n // console.log(`🎭 Loading permissions for role:`, roleId);\n\n // this.loading.set(true);\n\n // // Load role details by ID\n // this.userRoleService.getUserRoleById({ syusrol_id: roleId }).subscribe({\n // next: (response) => {\n // if (response?.success && response.data) {\n // console.log(`🎭 Role details loaded:`, response.data);\n\n // // Store role permissions for simple lookup\n // this.storeRolePermissions(response.data, mappingIndex);\n // } else {\n // console.error(`❌ Failed to load role details:`, response);\n // this.notificationService.error('Failed to load role permissions', {\n // title: 'Load Failed',\n // duration: 5000\n // });\n // }\n // this.loading.set(false);\n // },\n // error: (error) => {\n // console.error(`❌ Error loading role details:`, error);\n // this.notificationService.error('Error loading role permissions', {\n // title: 'Load Failed',\n // duration: 5000\n // });\n // this.loading.set(false);\n // }\n // });\n // }\n\n // /**\n // * Update permission values for a specific menu row\n // */\n // updateMenuPermissionValues(mappingIndex: number, menuId: string): void {\n // console.log(`🎭 updateMenuPermissionValues called for mapping ${mappingIndex}, menu ${menuId}`);\n\n // this.menuRightsMap.update(map => {\n // const newMap = { ...map };\n // const menuRights = newMap[mappingIndex.toString()] || [];\n // console.log(`🎭 Current menuRights for mapping ${mappingIndex}:`, menuRights);\n\n // const updatedMenuRights = menuRights.map(menu => {\n // if (menu._id === menuId) {\n // // Re-compute permission values for this menu\n // const permissionValues: PermissionValues = {};\n\n // console.log(`🎭 Menu ${menu.syme_title} permissions:`, menu.syme_permissions_id_sygms);\n // if (menu.syme_permissions_id_sygms && menu.syme_permissions_id_sygms.length > 0) {\n // menu.syme_permissions_id_sygms.forEach(permissionId => {\n // const permission = this.getPermissionById(permissionId);\n // if (permission) {\n // const actualValue = this.isPermissionInRole(permissionId, mappingIndex, menu._id);\n\n // // For role permissions, use actualValue as the initial modifiedValue\n // // This ensures role permissions are checked when first loaded\n // let modifiedValue = actualValue;\n\n // // Only check form control value if we have a current mapping context\n // const currentMappingIndex = this.getCurrentMappingIndex();\n // if (currentMappingIndex !== null && currentMappingIndex === mappingIndex) {\n // modifiedValue = this.getFormControlValue(menu, permissionId);\n // }\n\n // permissionValues[permissionId] = {\n // checked: modifiedValue, // Use modified value for UI\n // permission: permission,\n // actual: actualValue, // Original role permission\n // modified: modifiedValue // Current form value\n // };\n\n // console.log(`🎭 Permission ${permission.sygms_title} for menu ${menu.syme_title}:`, {\n // actual: actualValue,\n // modified: modifiedValue,\n // checked: modifiedValue\n // });\n // }\n // });\n // }\n\n // console.log(`🎭 Final permissionValues for menu ${menu.syme_title}:`, permissionValues);\n\n // return {\n // ...menu,\n // _permissionValues: permissionValues\n // };\n // }\n // return menu;\n // });\n\n // newMap[mappingIndex.toString()] = updatedMenuRights;\n // return newMap;\n // });\n // }\n\n // /**\n // * Store role permissions for simple lookup\n // */\n // private storeRolePermissions(roleData: CoreUserRolePermissionData, mappingIndex: number): void {\n // console.log(`🎭 Storing role permissions for mapping ${mappingIndex}:`, roleData);\n\n // // Extract role permissions from the role data\n // const roleRights = roleData.core_user_role_rights;\n\n // if (roleRights && Array.isArray(roleRights)) {\n // // Store role permissions as objects with ID and title\n // const rolePermissionObjects = roleRights.map((right: CoreUserRoleRightsResponse) => {\n // const permission = right.syusrgt_role_permissions_id_sygms;\n // return {\n // _id: permission?._id as string,\n // sygms_title: permission?.sygms_title as string,\n // menu_id: right.syusrgt_menu_id_syme?._id\n // };\n // }).filter((permission: { _id: string; sygms_title: string }) => permission._id && permission.sygms_title);\n\n // // Update menuRightsMap with role permissions for each menu\n // this.menuRightsMap.update(menuMap => {\n // const newMenuMap = { ...menuMap };\n // const currentMenuRights = newMenuMap[mappingIndex.toString()] || [];\n\n // // Update each menu with its role permissions\n // const updatedMenuRights = currentMenuRights.map(menu => {\n // if (menu._id) {\n // const menuSpecificPermissions = rolePermissionObjects\n // .filter(permission =>\n // // Permission must be in the menu's allowed permissions list\n // menu.syme_permissions_id_sygms?.includes(permission._id) &&\n // // AND must be assigned to this menu in the role data\n // permission.menu_id === menu._id\n // );\n\n // return {\n // ...menu,\n // _rolePermissions: menuSpecificPermissions\n // };\n // }\n // return menu;\n // });\n\n // newMenuMap[mappingIndex.toString()] = updatedMenuRights;\n // return newMenuMap;\n // });\n\n // // Update permission values for all menus in this mapping\n // const menuRights = this.menuRightsMap()[mappingIndex.toString()] || [];\n // menuRights.forEach(menu => {\n // if (menu._id) {\n // this.updateMenuPermissionValues(mappingIndex, menu._id);\n // }\n // });\n\n // console.log(`🎭 Stored role permission objects for mapping ${mappingIndex}:`, rolePermissionObjects);\n\n // // Force UI update after role permissions are loaded\n // setTimeout(() => {\n // this.cdr.detectChanges();\n // this.updateMenuRightsGridData(mappingIndex);\n // }, 50);\n // } else {\n // console.log(`🎭 No role permissions found in role data`);\n // }\n // }\n\n // /**\n // * Clear role permissions\n // */\n // private clearRolePermissions(): void {\n // this.selectedRoleId.set(null);\n // this.selectedEntityIndex.set(null);\n // }\n\n // /**\n // * Find mapping index by entity mapping ID\n // */\n // private findMappingIndexByEntityMappingId(entityMappingId: string): number | null {\n // const mappings = this.entityMappings();\n // for (let i = 0; i < mappings.length; i++) {\n // if (mappings[i]._id === entityMappingId) {\n // return i;\n // }\n // }\n // return null;\n // }\n\n // /**\n // * Handle grid events for role permissions\n // */\n // onRolePermissionsGridEvent(event: GridEvent): void {\n // console.log('🎭 Role permissions grid event:', event);\n\n // switch (event.type) {\n // case 'search':\n // // Handle search if needed\n // break;\n // case 'rowClick':\n // // Handle row click if needed\n // break;\n // default:\n // break;\n // }\n // }\n\n // /**\n // * Get template renderers for role permissions grid\n // */\n // get templateRenderers() {\n // return {\n // menuDetailsRenderer: this.menuDetailsRendererTemplate(),\n // permissionsCheckboxRenderer: this.permissionsCheckboxRendererTemplate(),\n // menuTypeRenderer: this.menuTypeRendererTemplate()\n // };\n // }\n\n // /**\n // * Get permission by ID\n // */\n // getPermissionById(permissionId: string): ICoreSygms | undefined {\n // return this.permissions().find(permission => permission._id === permissionId);\n // }\n\n // /**\n // * Check if permission is available in the selected role for a specific menu\n // */\n // isPermissionInRole(permissionId: string, mappingIndex: number, menuId?: string): boolean {\n // const mapping = this.entityMappings()[mappingIndex];\n // const roleId = mapping?.syenm_role_id_syusrol;\n\n // console.log(`🎭 Checking permission ${permissionId} for role:`, roleId, 'menu:', menuId);\n\n // if (!roleId || !menuId) {\n // console.log(`🎭 No role ID or menu ID found for mapping ${mappingIndex}`);\n // return false;\n // }\n\n // // Get role permissions from the menu objects in menuRightsMap\n // const menuRights = this.menuRightsMap()[mappingIndex.toString()] || [];\n // const menu = menuRights.find(m => m._id === menuId);\n\n // if (menu && (menu as MenuWithPermissions)._rolePermissions) {\n // const rolePermissions = (menu as MenuWithPermissions)._rolePermissions;\n // const isInRole = rolePermissions?.some((permission) => permission._id === permissionId && permission.menu_id === menuId) || false;\n \n // // Check if there's an exception that overrides this role permission\n // const mapping = this.entityMappings()[mappingIndex];\n // const exceptions = (mapping as AuthUserCoreEntityMapping & { exceptions?: Array<CoreUserRoleExceptionsWithTracking> }).exceptions || [];\n // const exception = exceptions.find((ex) =>\n // ex.syusrex_menu_id_syme === menuId &&\n // ex.syusrex_role_permissions_id_sygms === permissionId\n // );\n \n // if (exception) {\n // // Exception overrides role permission - return the exception status\n // console.log(`🎭 Permission ${permissionId} has exception with status: ${exception.syusrex_status} for menu ${menuId}`);\n // return exception.syusrex_status || false;\n // }\n \n // console.log(`🎭 Permission ${permissionId} in role for menu ${menuId}: ${isInRole}`);\n // return isInRole;\n // }\n\n // // If role permissions are not loaded yet, return false\n // // This will be updated when role permissions are loaded\n // console.log(`🎭 Role permissions not loaded yet for mapping ${mappingIndex}, menu ${menuId}`);\n // return false;\n // }\n\n // /**\n // * Get form control value for a permission\n // */\n // getFormControlValue(row: ICoreSyme, permissionId: string): boolean {\n // console.log(`🎭 Getting form control value for permission: ${permissionId} for menu: ${row.syme_title}`, row);\n // const permission = this.getPermissionById(permissionId);\n // if (!permission) {\n // console.log(`🎭 Permission not found for ID: ${permissionId}`);\n // return false;\n // }\n\n // // Find the current mapping index\n // const mappingIndex = this.getCurrentMappingIndex();\n // if (mappingIndex === null) {\n // console.log(`🎭 No current mapping index found`);\n // return false;\n // }\n\n // // Check if permission is available in the role for this specific menu\n // const isRolePermission = this.isPermissionInRole(permissionId, mappingIndex, row._id);\n // console.log(`🎭 Permission ${permission.sygms_title} for menu ${row.syme_title}: isRolePermission = ${isRolePermission}`);\n\n // if (isRolePermission) {\n // // If permission is in role, it should be checked by default\n // console.log(`🎭 Returning true for role permission: ${permission.sygms_title}`);\n // return true;\n // } else {\n // // If permission is not in role, check if it's added as exception\n // const mapping = this.entityMappings()[mappingIndex];\n // const exceptions = (mapping as AuthUserCoreEntityMapping & { exceptions?: Array<CoreUserRoleExceptionsWithTracking> }).exceptions || [];\n // const exception = exceptions.find((ex) =>\n // ex.syusrex_menu_id_syme === row._id &&\n // ex.syusrex_role_permissions_id_sygms === permissionId\n // );\n \n // if (exception) {\n // // Return the actual status from the exception (true = checked, false = unchecked)\n // console.log(`🎭 Permission ${permission.sygms_title} exception status: ${exception.syusrex_status}`);\n // return exception.syusrex_status || false;\n // }\n \n // console.log(`🎭 Permission ${permission.sygms_title} no exception found`);\n // return false;\n // }\n // }\n\n\n // /**\n // * Handle permission change with type safety\n // */\n // onPermissionChangeSafe(checked: inputType, row: ICoreSyme, permissionId: string): void {\n // this.onPermissionChange(Boolean(checked), row, permissionId);\n // }\n\n // /**\n // * Handle permission change\n // */\n // onPermissionChange(checked: boolean, row: ICoreSyme, permissionId: string): void {\n // const permission = this.getPermissionById(permissionId);\n // if (!permission) return;\n\n // // Find the current mapping index\n // const mappingIndex = this.getCurrentMappingIndex();\n // if (mappingIndex === null) return;\n\n // // Check if permission is in role for this specific menu\n // const isRolePermission = this.isPermissionInRole(permissionId, mappingIndex, row._id);\n\n // if (isRolePermission) {\n // // Role permissions are handled by the role itself, no form controls needed\n // console.log('🎭 Role permission (handled by role):', {\n // menu: row.syme_title,\n // permission: permission.sygms_title,\n // checked: checked\n // });\n // } else {\n // // Handle exception permission\n // if (checked) {\n // // Add exception\n // this.addRoleException(mappingIndex, row._id || '', permissionId);\n // } else {\n // // Remove exception\n // this.removeRoleException(mappingIndex, row._id || '', permissionId);\n // }\n\n // console.log('🎭 Exception permission changed:', {\n // menu: row.syme_title,\n // permission: permission.sygms_title,\n // checked: checked\n // });\n // }\n\n // // Update the modified value for this specific permission\n // this.updatePermissionModifiedValue(mappingIndex, row._id || '', permissionId, checked);\n // }\n\n // /**\n // * Update the modified value for a specific permission\n // */\n // private updatePermissionModifiedValue(mappingIndex: number, menuId: string, permissionId: string, modifiedValue: boolean): void {\n // this.menuRightsMap.update(map => {\n // const newMap = { ...map };\n // const menuRights = newMap[mappingIndex.toString()] || [];\n\n // const updatedMenuRights = menuRights.map((menu: MenuWithPermissions) => {\n // if (menu._id === menuId && menu._permissionValues && menu._permissionValues[permissionId]) {\n // const currentPermission = menu._permissionValues[permissionId];\n // const actualValue = currentPermission.actual; // Original role permission value\n\n // // Update the modified value while keeping actual value unchanged\n // menu._permissionValues[permissionId] = {\n // ...currentPermission,\n // modified: modifiedValue,\n // checked: modifiedValue // Also update checked for UI\n // };\n\n // console.log(`🎭 Updated permission modified value for menu ${menuId}, permission ${permissionId}:`, {\n // actual: actualValue,\n // modified: modifiedValue,\n // changed: actualValue !== modifiedValue,\n // permission: currentPermission.permission?.sygms_title\n // });\n // }\n // return menu;\n // });\n\n // newMap[mappingIndex.toString()] = updatedMenuRights;\n // return newMap;\n // });\n // }\n\n // /**\n // * Handle permission change for specific mapping\n // */\n // onPermissionChangeForMapping(checked: boolean, row: ICoreSyme, permissionId: string, mappingIndex: number): void {\n // const permission = this.getPermissionById(permissionId);\n // if (!permission) return;\n\n // const controlName = `core_entity_mapping.${mappingIndex}.menu_rights.${row._id}.${permission.sygms_title}`;\n // this.userMasterForm.get(controlName)?.setValue(checked);\n\n // console.log('🎭 Permission changed for mapping:', {\n // mappingIndex,\n // menu: row.syme_title,\n // permission: permission.sygms_title,\n // checked: checked,\n // controlName\n // });\n // }\n\n // /**\n // * Get current mapping index (helper method)\n // */\n // private getCurrentMappingIndex(): number | null {\n // // Find the mapping index that has both entity and role selected\n // const entityMappings = this.entityMappings();\n // for (let i = 0; i < entityMappings.length; i++) {\n // const entityId = this.userMasterForm.get(`core_entity_mapping.${i}.syenm_entity_id_syen`)?.value;\n // const roleId = this.userMasterForm.get(`core_entity_mapping.${i}.syenm_role_id_syusrol`)?.value;\n\n // if (entityId && roleId) {\n // return i;\n // }\n // }\n // return null;\n // }\n\n // /**\n // * Add role exception\n // */\n // addRoleException(mappingIndex: number, menuId: string, permissionId: string): void {\n // const mapping = this.entityMappings()[mappingIndex];\n // const permission = this.getPermissionById(permissionId);\n\n // if (!mapping || !permission) return;\n\n // // Get the role ID directly (not as object)\n // const roleId = typeof mapping.syenm_role_id_syusrol === 'object'\n // ? (mapping.syenm_role_id_syusrol as { _id?: string })?._id ?? ''\n // : (mapping.syenm_role_id_syusrol as string | undefined) ?? '';\n\n // // Create exception object with change tracking\n // const exception: CoreUserRoleExceptionsWithTracking = {\n // syusrex_user_entity_mapping_id_syenm: mapping._id || '',\n // syusrex_role_id_syusrol: roleId, // Direct ID string\n // syusrex_role_permissions_id_sygms: permissionId,\n // syusrex_menu_id_syme: menuId,\n // syusrex_isactive: true,\n // syusrex_status: true, // Status for manually added exceptions (always true when explicitly added)\n // _isUserAdded: true, // Mark as explicitly added by user\n // _changeType: 'added' as const // Track the change type\n // };\n\n // // Add to entity mapping exceptions (check for duplicates first)\n // this.entityMappings.update(mappings => {\n // const updatedMappings = [...mappings];\n // const mappingWithExceptions = updatedMappings[mappingIndex] as AuthUserCoreEntityMapping & { exceptions?: Array<CoreUserRoleExceptionsWithTracking> };\n // if (!mappingWithExceptions.exceptions) {\n // mappingWithExceptions.exceptions = [];\n // }\n\n // // Check if exception already exists to prevent duplicates\n // const existingException = mappingWithExceptions.exceptions.find(ex =>\n // ex.syusrex_menu_id_syme === menuId &&\n // ex.syusrex_role_permissions_id_sygms === permissionId\n // );\n\n // if (!existingException) {\n // mappingWithExceptions.exceptions.push(exception);\n // console.log('🎭 Role exception added (new):', exception);\n // } else {\n // // If exception exists but was removed, mark it as added again\n // if ((existingException as CoreUserRoleExceptionsWithTracking)._isUserRemoved) {\n // (existingException as CoreUserRoleExceptionsWithTracking)._isUserRemoved = false;\n // (existingException as CoreUserRoleExceptionsWithTracking)._isUserAdded = true;\n // (existingException as CoreUserRoleExceptionsWithTracking)._changeType = 'added';\n // existingException.syusrex_isactive = true;\n // console.log('🎭 Role exception reactivated:', existingException);\n // } else {\n // console.log('🎭 Role exception already exists, skipping duplicate:', existingException);\n // }\n // }\n\n // return updatedMappings;\n // });\n\n // console.log('🎭 Role exception added:', exception);\n // }\n\n // /**\n // * Remove role exception\n // */\n // removeRoleException(mappingIndex: number, menuId: string, permissionId: string): void {\n // this.entityMappings.update(mappings => {\n // const updatedMappings = [...mappings];\n // const mapping = updatedMappings[mappingIndex] as AuthUserCoreEntityMapping & { exceptions?: Array<CoreUserRoleExceptionsWithTracking> };\n // if (mapping.exceptions) {\n // // Instead of removing, mark as removed for tracking\n // mapping.exceptions = mapping.exceptions.map((exception) => {\n // if (exception.syusrex_menu_id_syme === menuId && exception.syusrex_role_permissions_id_sygms === permissionId) {\n // return {\n // ...exception,\n // _isUserRemoved: true,\n // _changeType: 'removed' as const,\n // syusrex_isactive: false\n // };\n // }\n // return exception;\n // });\n // }\n // return updatedMappings;\n // });\n\n // console.log('🎭 Role exception marked as removed:', { mappingIndex, menuId, permissionId });\n // }\n\n // /**\n // * Collect only changed role exceptions from entity mappings\n // */\n // collectRoleExceptions(): Array<{\n // syusrex_user_entity_mapping_id_syenm: string;\n // syusrex_role_id_syusrol: string;\n // syusrex_role_permissions_id_sygms: string;\n // syusrex_menu_id_syme: string;\n // syusrex_isactive: boolean;\n // _changeType: string;\n // }> {\n // const exceptions: Array<{\n // syusrex_user_entity_mapping_id_syenm: string;\n // syusrex_role_id_syusrol: string;\n // syusrex_role_permissions_id_sygms: string;\n // syusrex_menu_id_syme: string;\n // syusrex_isactive: boolean;\n // _changeType: string;\n // }> = [];\n // const entityMappings = this.entityMappings();\n\n // entityMappings.forEach((mapping, mappingIndex) => {\n // // Get exceptions from the mapping\n // const mappingWithExceptions = mapping as AuthUserCoreEntityMapping & { exceptions?: Array<CoreUserRoleExceptionsWithTracking> };\n // const mappingExceptions = mappingWithExceptions.exceptions || [];\n\n // // Only include exceptions that have been explicitly changed by the user\n // mappingExceptions.forEach((exception) => {\n // // Check if this exception was explicitly added or removed by the user\n // if (exception._isUserAdded || exception._isUserRemoved) {\n // // Ensure role ID is direct string, not object\n // const roleId = (mapping.syenm_role_id_syusrol as { _id?: string })?._id ?? '';\n\n // // Create a unique key for this exception to prevent duplicates\n // const exceptionKey = `${mapping._id || `temp_${mappingIndex}`}_${roleId}_${exception.syusrex_role_permissions_id_sygms}_${exception.syusrex_menu_id_syme}`;\n\n // // Check if this exception already exists in the collection\n // const existingException = exceptions.find(ex =>\n // ex.syusrex_user_entity_mapping_id_syenm === (mapping._id || `temp_${mappingIndex}`) &&\n // ex.syusrex_role_id_syusrol === roleId &&\n // ex.syusrex_role_permissions_id_sygms === exception.syusrex_role_permissions_id_sygms &&\n // ex.syusrex_menu_id_syme === exception.syusrex_menu_id_syme\n // );\n\n // if (!existingException) {\n // exceptions.push({\n // syusrex_user_entity_mapping_id_syenm: mapping._id || `temp_${mappingIndex}`,\n // syusrex_role_id_syusrol: roleId,\n // syusrex_role_permissions_id_sygms: exception.syusrex_role_permissions_id_sygms || '',\n // syusrex_menu_id_syme: exception.syusrex_menu_id_syme || '',\n // syusrex_isactive: exception.syusrex_isactive || false,\n // _changeType: exception._changeType || 'unknown'\n // });\n // } else {\n // console.log('🎭 Duplicate exception prevented:', exceptionKey);\n // }\n // }\n // });\n // });\n\n // console.log('🎭 Collected changed role exceptions:', exceptions);\n // return exceptions;\n // }\n\n\n // /**\n // * Check if permission is selected for a menu\n // */\n // isPermissionSelected(menuId: string, permissionId: string): boolean {\n // const mappingIndex = this.getCurrentMappingIndex();\n // if (mappingIndex === null) return false;\n\n // return this.isPermissionInRole(permissionId, mappingIndex, menuId);\n // }\n\n // /**\n // * Handle permission checkbox change (read-only in this context)\n // */\n // onPermissionCheckboxChange(menuId: string, permissionId: string, isSelected: boolean): void {\n // // This is read-only, so we don't actually change anything\n // console.log(`🎭 Permission checkbox change (read-only): ${menuId} - ${permissionId} - ${isSelected}`);\n // }\n\n // /**\n // * Check if a menu has child menus with permissions\n // */\n // hasChildMenusWithPermissions(menuId: string): boolean {\n // // For simplified approach, we don't need to check child menus\n // // Just return false as we're not using hierarchical permission checking\n // return false;\n // }\n\n // /**\n // * Update menu rights grid data to force refresh\n // */\n // updateMenuRightsGridData(mappingIndex: number): void {\n // const menuRights = this.getMenuRightsForMapping(mappingIndex);\n // console.log('🔄 Updating menu rights grid data:', menuRights);\n\n // // Force update the grid configuration\n // this.menuRightsMap.update(map => {\n // const newMap = { ...map };\n // newMap[mappingIndex.toString()] = menuRights;\n // return newMap;\n // });\n // }\n\n // /**\n // * Get menu rights grid configuration for a specific mapping\n // */\n // getMenuRightsGridConfig(mappingIndex: number): GridConfiguration<MenuWithPermissions> {\n // const menuRights = this.getMenuRightsForMapping(mappingIndex);\n\n // console.log(`🔍 Grid config for mapping ${mappingIndex}:`);\n // console.log(`📊 Menu rights count:`, menuRights.length);\n // console.log(`📋 Menu rights data:`, menuRights);\n\n // return {\n // id: `menu-rights-grid-${mappingIndex}`,\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_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 // key: 'syme_permissions_id_sygms',\n // header: 'Permissions',\n // type: 'custom',\n // width: '200px',\n // truncate: true,\n // align: 'left',\n // renderer: 'permissionsRenderer'\n // }\n // ],\n // data: menuRights,\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 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 // 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\n // /**\n // * Get template renderers for menu rights grid\n // */\n // getMenuRightsTemplateRenderers(mappingIndex: number) {\n // return {\n // menuDetailsRenderer: this.menuDetailsRendererTemplate(),\n // menuTypeRenderer: this.menuTypeRendererTemplate(),\n // permissionsRenderer: this.permissionsRendererTemplate()\n // };\n // }\n\n // /**\n // * Handle menu rights grid events\n // */\n // onMenuRightsGridEvent(event: GridEvent<MenuWithPermissions>, mappingIndex: number): void {\n // console.log('🎭 Menu rights grid event:', event, 'for mapping:', mappingIndex);\n\n // switch (event.type) {\n // case 'search':\n // // Handle search if needed\n // break;\n // case 'rowClick':\n // // Handle row click if needed\n // break;\n // default:\n // break;\n // }\n // }\n\n\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(`core_entity_mapping.${mappingIndex}.exceptions.${exceptionIndex}.syusrex_menu_id_syme`, this.fb.control(''));\n // // this.userMasterForm.addControl(`core_entity_mapping.${mappingIndex}.exceptions.${exceptionIndex}.syusrex_role_permissions_id_sygms`, this.fb.control(''));\n // // this.userMasterForm.addControl(`core_entity_mapping.${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((_, i: number) => i !== exceptionIndex);\n // return updatedMappings;\n // });\n // }\n\n // private removePermissionExceptionControls(mappingIndex: number, exceptionIndex: number) {\n // this.userMasterForm.removeControl(`core_entity_mapping.${mappingIndex}.exceptions.${exceptionIndex}.syusrex_menu_id_syme`);\n // this.userMasterForm.removeControl(`core_entity_mapping.${mappingIndex}.exceptions.${exceptionIndex}.syusrex_role_permissions_id_sygms`);\n // this.userMasterForm.removeControl(`core_entity_mapping.${mappingIndex}.exceptions.${exceptionIndex}.syusrex_isactive`);\n // }\n\n // getPermissionExceptions(mappingIndex: number): CoreUserRoleExceptionsWithTracking[] {\n // const mapping = this.entityMappings()[mappingIndex];\n // // return mapping?.exceptions || [];\n // return [];\n // }\n\n // // Menu Rights Methods\n // getMenuRightsForMapping(mappingIndex: number): MenuWithPermissions[] {\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_entity_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 // console.log('🚀 Loading menu rights for mapping:', mappingIndex);\n // this.loading.set(true);\n\n // // Use actual API call to get menu list\n // const requestBody: MMenuListPayload = {\n // pageIndex: 1,\n // pageSize: 1000, // Get all menu items - increased to ensure we get all records\n // total: 1000, // Set total to match pageSize to get all records\n // sort: { order: 'asc', key: 'syme_order_by' }\n // };\n\n // console.log('📤 Request body for menu list:', requestBody);\n\n // this.menuService.getMenuList(requestBody)\n // .pipe(takeUntilDestroyed(this.destroyRef))\n // .subscribe({\n // next: (response) => {\n // console.log('✅ Menu list loaded successfully:', response);\n // console.log('📊 Total menu items received:', response?.data?.length || 0);\n // console.log('📋 Menu items data:', response?.data);\n // if (response?.success && response?.data) {\n // // Use menu data directly without transformation\n // const menuRights = response.data.map((menu: ICoreSyme): MenuWithPermissions => {\n // // Get only the permissions that are mapped to this menu\n // const mappedPermissions = this.permissions().filter(permission =>\n // menu.syme_permissions_id_sygms?.includes(permission._id || '')\n // );\n\n // // Pre-compute permission values for template performance\n // const permissionValues: {\n // [permissionId: string]: {\n // checked: boolean;\n // permission: ICoreSygms;\n // actual: boolean; // Original role permission value\n // modified: boolean; // Current form value (may differ from actual)\n // }\n // } = {};\n\n // if (menu.syme_permissions_id_sygms) {\n // menu.syme_permissions_id_sygms.forEach(permissionId => {\n // const permission = this.getPermissionById(permissionId);\n // if (permission) {\n // // Initialize with false values - will be updated when role permissions are loaded\n // const actualValue = false; // Will be updated by storeRolePermissions\n // const modifiedValue = false; // Will be updated by storeRolePermissions\n\n // permissionValues[permissionId] = {\n // checked: modifiedValue, // Use modified value for UI\n // permission: permission,\n // actual: actualValue, // Original role permission\n // modified: modifiedValue // Current form value\n // };\n // }\n // });\n // }\n\n // return {\n // ...menu,\n // role_rights: mappedPermissions, // Use only mapped permissions\n // exceptions: [],\n // _permissionValues: permissionValues // Pre-computed values\n // };\n // });\n\n // // Update menu rights map\n // this.menuRightsMap.update(map => {\n // const newMap = {\n // ...map,\n // [mappingIndex.toString()]: menuRights\n // };\n // console.log('🗺️ Updated menu rights map:', newMap);\n // return newMap;\n // });\n\n // console.log('📊 Processed menu rights count:', menuRights.length);\n // console.log('📋 Menu rights data:', menuRights);\n\n // // Initialize entity mapping exceptions array if not exists\n // this.entityMappings.update(mappings => {\n // const updatedMappings = [...mappings];\n // if (!(updatedMappings[mappingIndex] as EntityMappingWithExceptions).exceptions) {\n // (updatedMappings[mappingIndex] as EntityMappingWithExceptions).exceptions = [];\n // }\n // return updatedMappings;\n // });\n\n // console.log('✅ Menu rights loaded for mapping', mappingIndex);\n\n // // Check if role permissions are loaded, if not, load them\n // const mapping = this.entityMappings()[mappingIndex];\n // const roleId = typeof mapping.syenm_role_id_syusrol === 'object'\n // ? mapping.syenm_role_id_syusrol._id\n // : mapping.syenm_role_id_syusrol;\n\n // if (roleId) {\n // // Load role permissions - exceptions will be applied after role permissions are loaded\n // console.log(`🎭 Loading role permissions for mapping ${mappingIndex} with role ${roleId}`);\n // this.loadRolePermissions(roleId, mappingIndex);\n // }\n\n // // Force refresh the grid to show updated permission states\n // setTimeout(() => {\n // this.cdr.detectChanges();\n // // Also update the grid configuration to ensure data refresh\n // this.updateMenuRightsGridData(mappingIndex);\n // }, 100);\n // } else {\n // console.warn('⚠️ No menu data received from API');\n // this.notificationService.error('No menu data received from server', {\n // title: 'Load Failed',\n // duration: 5000\n // });\n // }\n // this.loading.set(false);\n // },\n // error: (error) => {\n // console.error('❌ Error loading menu rights:', error);\n // this.notificationService.error('Failed to load menu rights', {\n // title: 'Load Failed',\n // duration: 5000\n // });\n // this.loading.set(false);\n // }\n // });\n // }\n\n // refreshMenuRights(mappingIndex: number) {\n // this.clearMenuRightsForMapping(mappingIndex);\n // this.loadMenuRights(mappingIndex);\n // }\n\n // clearMenuRightsForMapping(mappingIndex: number) {\n // // Clear exceptions from entity mapping\n // this.entityMappings.update(mappings => {\n // const updatedMappings = [...mappings];\n // (updatedMappings[mappingIndex] as EntityMappingWithExceptions).exceptions = [];\n // return updatedMappings;\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 // /**\n // * Load user rights type ID from general master types\n // */\n // private loadUserRightsTypeId(): void {\n // this.generalMasterTypeService.getTypeList({\n // sygmt_code: \"user_rights\"\n // })\n // .pipe(takeUntilDestroyed(this.destroyRef))\n // .subscribe({\n // next: (response) => {\n // if (response?.success && response.data) {\n // const userRightsType = response.data.find(type =>\n // type.sygmt_code === 'user_rights' || type.sygmt_title?.toLowerCase().includes('user_rights')\n // );\n // if (userRightsType) {\n // this.userRightsTypeId.set(userRightsType._id || null);\n // this.loadPermissions();\n // } else {\n // this.notificationService.error('User rights type not found in general master types', {\n // title: 'Configuration Error',\n // duration: 5000\n // });\n // }\n // }\n // },\n // error: (err) => {\n // this.notificationService.error('Failed to load user rights type', {\n // title: 'Load Failed',\n // duration: 5000\n // });\n // }\n // });\n // }\n\n // /**\n // * Load permissions from general master\n // */\n // private loadPermissions(): void {\n // const typeId = this.userRightsTypeId();\n // if (!typeId) {\n // this.notificationService.error('User rights type not found. Please ensure the \"user_rights\" type exists in general master types.', {\n // title: 'Configuration Error',\n // duration: 5000\n // });\n // return;\n // }\n\n // const payload: IGeneralMasterListRequest = { sygms_id_sygmt: typeId };\n // this.CideCoreGeneralMasterService.getMasterList(payload)\n // .pipe(takeUntilDestroyed(this.destroyRef))\n // .subscribe({\n // next: (response) => {\n // if (response?.success && response.data) {\n // this.permissions.set(response.data);\n // } else {\n // this.permissions.set([]);\n // this.notificationService.error('No permissions found. Please ensure permissions are configured in general master.', {\n // title: 'Configuration Error',\n // duration: 5000\n // });\n // }\n // },\n // error: (err) => {\n // this.permissions.set([]);\n // this.notificationService.error('Failed to load permissions from general master. Please check your configuration.', {\n // title: 'Load Failed',\n // duration: 5000\n // });\n // }\n // });\n // }\n\n // hasRoleRight(menuRight: MenuRight, permission: string): boolean {\n // return menuRight.role_rights.includes(permission);\n // }\n\n // canOverrideRight(menuRight: MenuRight, 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: EventWithQuery | Event) {\n // console.log(event, 'onDefaultEntityChange');\n // const isDefault = (event as any)?.target?.checked || (event as any)?.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 FormArray controls to reflect the change\n // for (let i = 0; i < this.entityMappingsFormArray.length; i++) {\n // const formGroup = this.entityMappingsFormArray.at(i) as FormGroup;\n // const defaultControl = formGroup.get('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._id === defaultMapping.syenm_entity_id_syen);\n // return entity?.syen_name || '';\n // }\n // return '';\n // }\n\n // hasDefaultEntity(): boolean {\n // return this.entityMappings().some(mapping => mapping.syenm_isdefault);\n // }\n\n // // User Context Header Methods\n // getUserFullName(): string {\n // const firstName = this.userMasterForm.get('user_firstname')?.value || '';\n // const middleName = this.userMasterForm.get('user_middlename')?.value || '';\n // const lastName = this.userMasterForm.get('user_lastname')?.value || '';\n\n // const fullName = this.userMasterForm.get('user_fullname')?.value;\n // if (fullName) {\n // return fullName;\n // }\n\n // // Auto-generate from parts\n // const parts = [firstName, middleName, lastName].filter(part => part.trim());\n // return parts.join(' ');\n // }\n\n // // Auto-generate full name from name components\n // generateFullName(): void {\n // const firstName = this.userMasterForm.get('user_firstname')?.value || '';\n // const middleName = this.userMasterForm.get('user_middlename')?.value || '';\n // const lastName = this.userMasterForm.get('user_lastname')?.value || '';\n\n // // Create full name from parts, filtering out empty values\n // const parts = [firstName, middleName, lastName].filter(part => part && part.trim());\n // const generatedFullName = parts.join(' ');\n\n // // Update the full name field if we have any name parts\n // console.log('Generated full name:', generatedFullName);\n // if (generatedFullName) {\n // this.userMasterForm.get('user_fullname')?.setValue(generatedFullName);\n // }\n // }\n\n // // Handle name field changes to auto-generate full name\n // onNameFieldChange(): void {\n // this.generateFullName();\n // }\n\n // getUserUsername(): string {\n // return this.userMasterForm.get('user_username')?.value || '';\n // }\n\n // getUserEmail(): string {\n // return this.userMasterForm.get('user_emailid')?.value || '';\n // }\n\n // getUserMobile(): string {\n // return this.userMasterForm.get('user_mobileno')?.value || '';\n // }\n\n // getUserActivePeriod(): string {\n // // Active period is now managed at entity mapping level\n // return 'Managed per entity';\n // }\n\n // getUserActiveStatus(): boolean {\n // return this.userMasterForm.get('user_isactive')?.value || false;\n // }\n\n // getUserPhoto(): string | null {\n // // Return the profile photo preview URL if available\n // return this.profilePhotoPreview();\n // }\n\n // getEntityMappingCount(): number {\n // return this.entityMappings().length;\n // }\n\n // /**\n // * Handle profile photo upload success\n // */\n // onProfilePhotoUploadSuccess(fileId: string): void {\n // console.log('✅ Profile photo uploaded successfully with ID:', fileId);\n // // The form control is automatically updated by the file input component\n // }\n\n // /**\n // * Handle profile photo upload error\n // */\n // onProfilePhotoUploadError(error: string): void {\n // console.error('❌ Profile photo upload failed:', error);\n // // Error notifications are now handled by the file input component itself\n // }\n\n // /**\n // * Handle profile photo upload progress\n // */\n // onProfilePhotoUploadProgress(progress: number): void {\n // // Progress notifications are now handled by the file input component itself\n // console.log('📸 Profile photo upload progress:', progress);\n // }\n\n // /**\n // * Get upload data for profile photo\n // */\n // getProfilePhotoUploadData() {\n // return {\n // altText: 'User Profile Photo',\n // userId: this.appState.currentUser()?._id || '',\n // permissions: ['read', 'write'],\n // tags: ['user', 'profile', 'photo', 'avatar'],\n // uploadType: 'user_profile_photo',\n // };\n // }\n\n // /**\n // * Get upload data for document files with group ID\n // */\n // getDocumentUploadData(documentIndex: number) {\n // const documentFormGroup = this.documentsFormArray.at(documentIndex);\n // const photoGroupId = documentFormGroup?.get('syusd_photo_group_id_cyfm')?.value;\n // const documentType = documentFormGroup?.get('syusd_document_type_id_sygms')?.value;\n // const documentNumber = documentFormGroup?.get('syusd_doc_number')?.value;\n\n // // Get document type name for better tagging\n // const documentTypeName = this.documentTypeOptions().find(opt => opt._id === documentType)?.sygms_title || 'Document';\n\n // return {\n // altText: `${documentTypeName} - ${documentNumber || 'Document'}`,\n // userId: this.appState.currentUser()?._id || '',\n // groupId: photoGroupId, // Use photo group ID or generate one\n // permissions: ['read', 'write'],\n // tags: ['user', 'document', documentTypeName.toLowerCase(), 'file'],\n // uploadType: 'user_document',\n // documentIndex: documentIndex,\n // documentType: documentType,\n // documentNumber: documentNumber\n // };\n // }\n\n // /**\n // * Handle document upload success\n // * For multiple file upload, uploadResponse is the group ID\n // */\n // onDocumentUploadSuccess(groupId: string, documentIndex: number): void {\n // console.log(`📎 Document upload success for document ${documentIndex} with group ID:`, groupId);\n\n // // Update the photo group ID in the form\n // const documentFormGroup = this.documentsFormArray.at(documentIndex);\n // if (documentFormGroup && groupId) {\n // documentFormGroup.get('syusd_photo_group_id_cyfm')?.setValue(groupId);\n // console.log(`📎 Updated photo group ID for document ${documentIndex}:`, groupId);\n // }\n\n // // For multiple file upload, we don't track individual files here\n // // The files are managed by the group ID on the server\n // // Clear any existing file tracking since we now use group ID\n // (documentFormGroup as DocumentFormGroup)._uploadedFiles = [];\n // }\n\n // /**\n // * Handle document upload error\n // */\n // onDocumentUploadError(error: Error | string, documentIndex: number): void {\n // console.error(`❌ Document upload error for document ${documentIndex}:`, error);\n // this.notificationService.error(`Failed to upload document file: ${typeof error === 'string' ? error : error?.message || 'Unknown error'}`, {\n // title: 'Upload Failed',\n // duration: 5000\n // });\n // }\n\n // /**\n // * Handle document upload progress\n // */\n // onDocumentUploadProgress(progress: number, documentIndex: number): void {\n // console.log(`📊 Document upload progress for document ${documentIndex}: ${progress}%`);\n // // You can add progress indication here if needed\n // }\n\n // /**\n // * Load profile photo preview for existing photos\n // */\n // private loadProfilePhotoPreview(fileId: string): void {\n // // The file-input component will handle loading the file details automatically\n // // when the form control value is set to the file ID\n // console.log('📸 Profile photo preview will be loaded by file-input component for ID:', fileId);\n // }\n\n // addContactAddress() {\n // // Generate a new ObjectId for the address\n // this.fileManagerService.generateObjectId().subscribe({\n // next: (response: mongooseObjectIdCreateControllerResponse) => {\n // const newObjectId = response.data?.objectId as string;\n // console.log('🆔 [UserCreate] Generated new ObjectId for address:', newObjectId);\n\n // // Create entity access pass management record with owner rights\n // const currentUser = this.appState.currentUser();\n // const currentEntity = this.appState.activeEntity();\n\n // const core_entity_access_pass_management = {\n // syepm_user_id_user: currentUser?._id || '',\n // syepm_entity_id_syen: currentEntity?._id || '',\n // syepm_access_passs_to: newObjectId,\n // syepm_can_view: true,\n // syepm_can_edit: true,\n // syepm_is_owner: true, // Set as owner\n // syepm_isactive: true,\n // syepm_actions_allowed: ['view', 'edit', 'delete', 'share']\n // };\n\n // const newAddress = {\n // _id: newObjectId, // Assign the generated ObjectId\n // sycad_contact_person_name: '',\n // sycad_address_type_id_sygms: {\n // _id: '',\n // sygms_name: ''\n // },\n // sycad_contact_person_syfdl: {\n // _id: '',\n // syfdl_first_name: ''\n // },\n // sycad_contact_pin_sypin: {\n // _id: '',\n // sypin_pincode: 0\n // },\n // sycad_contact_country_syctr: {\n // _id: '',\n // syctr_country_iso_name: ''\n // },\n // sycad_contact_address: '',\n // sycad_contact_city_sypin: '',\n // sycad_contact_state_sypin: '',\n // sycad_contact_phone: undefined,\n // sycad_contact_phone_alt: undefined,\n // sycad_contact_fax: '',\n // sycad_contact_email: '',\n // sycad_contact_email_alt: '',\n // core_entity_access_pass_management: core_entity_access_pass_management // Add access pass management directly to address\n // };\n\n // // Update signal for UI tracking\n // this.contactAddresses.update(addresses => [...addresses, newAddress]);\n\n // // Add FormGroup to FormArray\n // const addressFormGroup = this.createContactAddressFormGroup();\n // // Set the _id in the FormGroup\n // addressFormGroup.patchValue({ _id: newObjectId });\n // this.contactAddressesFormArray.push(addressFormGroup);\n\n // // Get the new address index\n // const newAddressIndex = this.contactAddresses().length - 1;\n\n // // Initialize dropdown data for the new address\n // this.addressPostalCodes.update(current => ({ ...current, [newAddressIndex]: [] }));\n // this.addressCountries.update(current => ({ ...current, [newAddressIndex]: [] }));\n // this.addressPostalCodesLoading.update(current => ({ ...current, [newAddressIndex]: false }));\n // this.addressCountriesLoading.update(current => ({ ...current, [newAddressIndex]: false }));\n // this.postalCodeDataCache.update(current => ({ ...current, [newAddressIndex]: [] }));\n\n // // Load initial countries for this address\n // this.loadCountriesForAddress(newAddressIndex);\n\n // // Apply access control after adding new address\n // this.applyContactAddressAccessControl();\n // },\n // error: (error: Error) => {\n // console.error('❌ [UserCreate] Failed to generate ObjectId for address:', error);\n // // Fallback: create address without ObjectId (will be generated on save)\n // const newAddress = {\n // sycad_contact_person_name: '',\n // sycad_address_type_id_sygms: {\n // _id: '',\n // sygms_name: ''\n // },\n // sycad_contact_person_syfdl: {\n // _id: '',\n // syfdl_first_name: ''\n // },\n // sycad_contact_pin_sypin: {\n // _id: '',\n // sypin_pincode: 0\n // },\n // sycad_contact_country_syctr: {\n // _id: '',\n // syctr_country_iso_name: ''\n // },\n // sycad_contact_address: '',\n // sycad_contact_city_sypin: '',\n // sycad_contact_state_sypin: '',\n // sycad_contact_phone: undefined,\n // sycad_contact_phone_alt: undefined,\n // sycad_contact_fax: '',\n // sycad_contact_email: '',\n // sycad_contact_email_alt: ''\n // };\n\n // // Update signal for UI tracking\n // this.contactAddresses.update(addresses => [...addresses, newAddress]);\n\n // // Add FormGroup to FormArray\n // const addressFormGroup = this.createContactAddressFormGroup();\n // // Note: _id will be empty for fallback case, will be generated on save\n // this.contactAddressesFormArray.push(addressFormGroup);\n\n // // Get the new address index\n // const newAddressIndex = this.contactAddresses().length - 1;\n\n // // Initialize dropdown data for the new address\n // this.addressPostalCodes.update(current => ({ ...current, [newAddressIndex]: [] }));\n // this.addressCountries.update(current => ({ ...current, [newAddressIndex]: [] }));\n // this.addressPostalCodesLoading.update(current => ({ ...current, [newAddressIndex]: false }));\n // this.addressCountriesLoading.update(current => ({ ...current, [newAddressIndex]: false }));\n // this.postalCodeDataCache.update(current => ({ ...current, [newAddressIndex]: [] }));\n\n // // Load initial countries for this address\n // this.loadCountriesForAddress(newAddressIndex);\n\n // // Apply access control after adding new address (fallback case)\n // this.applyContactAddressAccessControl();\n // }\n // });\n // }\n\n // removeContactAddress(index: number) {\n // // Remove from FormArray\n // this.contactAddressesFormArray.removeAt(index);\n\n // // Update signal for UI tracking\n // this.contactAddresses.update(addresses => addresses.filter((_, i) => i !== index));\n\n // // Apply access control after removing address\n // this.applyContactAddressAccessControl();\n\n // // Clean up dropdown data for the removed address\n // this.addressPostalCodes.update(current => {\n // const newData = { ...current };\n // delete newData[index];\n // return newData;\n // });\n // this.addressCountries.update(current => {\n // const newData = { ...current };\n // delete newData[index];\n // return newData;\n // });\n // this.addressPostalCodesLoading.update(current => {\n // const newData = { ...current };\n // delete newData[index];\n // return newData;\n // });\n // this.addressCountriesLoading.update(current => {\n // const newData = { ...current };\n // delete newData[index];\n // return newData;\n // });\n // this.postalCodeDataCache.update(current => {\n // const newData = { ...current };\n // delete newData[index];\n // return newData;\n // });\n // }\n\n // addDocument() {\n // // Generate a new ObjectId for the document\n // this.fileManagerService.generateObjectId().subscribe({\n // next: (response: mongooseObjectIdCreateControllerResponse) => {\n // const newObjectId = response.data?.objectId as string;\n // console.log('🆔 [UserCreate] Generated new ObjectId for document:', newObjectId);\n\n // // Create entity access pass management record with owner rights\n // const currentUser = this.appState.currentUser();\n // const currentEntity = this.appState.activeEntity();\n\n // const core_entity_access_pass_management = {\n // syepm_user_id_user: currentUser?._id || '',\n // syepm_entity_id_syen: currentEntity?._id || '',\n // syepm_access_passs_to: newObjectId,\n // syepm_can_view: true,\n // syepm_can_edit: true,\n // syepm_is_owner: true, // Set as owner\n // syepm_isactive: true,\n // syepm_actions_allowed: ['view', 'edit', 'delete', 'share']\n // };\n\n // const newDocument = {\n // _id: newObjectId, // Assign the generated ObjectId\n // syusd_user_id_user: '',\n // syusd_document_type_id_sygms: {\n // _id: '',\n // sygms_name: ''\n // },\n // syusd_doc_number: '',\n // syusd_doc_name_as_per_doc: '',\n // syusd_doc_issue_date: new Date(),\n // syusd_doc_expiry_date: new Date(),\n // syusd_photo_group_id_cyfm: {\n // _id: '',\n // cyfm_name: ''\n // },\n // syusd_doc_verification_status_id_sygms: {\n // _id: '',\n // sygms_name: ''\n // },\n // syusd_doc_kyc_status_id_sygms: {\n // _id: '',\n // sygms_name: ''\n // },\n // syusd_isactive: true,\n // core_entity_access_pass_management: core_entity_access_pass_management // Add access pass management directly to document\n // } as DocumentObject;\n\n // // Update signal for UI tracking\n // this.documents.update(docs => [...docs, newDocument]);\n\n // // Add FormGroup to FormArray\n // const documentFormGroup = this.createDocumentFormGroup();\n // // Set the _id in the FormGroup\n // documentFormGroup.patchValue({ _id: newObjectId });\n // this.documentsFormArray.push(documentFormGroup);\n\n // // Apply access control after adding new document\n // this.applyDocumentAccessControl();\n // },\n // error: (error: Error) => {\n // console.error('❌ [UserCreate] Failed to generate ObjectId for document:', error);\n\n // // Fallback: Create document without _id (old behavior)\n // const newDocumentGroup = this.createDocumentFormGroup();\n // this.documentsFormArray.push(newDocumentGroup);\n // this.documents.update(docs => [...docs, newDocumentGroup.value]);\n // this.applyDocumentAccessControl();\n // }\n // });\n // }\n\n // removeDocument(index: number) {\n // // Clean up uploaded files for this document\n // const documentFormGroup = this.documentsFormArray.at(index);\n // if (documentFormGroup) {\n // (documentFormGroup as DocumentFormGroup)._uploadedFiles = [];\n // }\n\n // // Remove the document from the FormArray\n // this.documentsFormArray.removeAt(index);\n\n // // Update the documents signal to keep UI in sync\n // this.documents.update(docs => docs.filter((_, i) => i !== index));\n\n // // Apply access control after removing document\n // this.applyDocumentAccessControl();\n // }\n\n // addFamilyDetail() {\n // // Generate a new ObjectId for the family detail\n // this.fileManagerService.generateObjectId().subscribe({\n // next: (response: mongooseObjectIdCreateControllerResponse) => {\n // const newObjectId = response.data?.objectId as string;\n // console.log('🆔 [UserCreate] Generated new ObjectId for family detail:', newObjectId);\n\n // // Create entity access pass management record with owner rights\n // const currentUser = this.appState.currentUser();\n // const currentEntity = this.appState.activeEntity();\n\n // const core_entity_access_pass_management = {\n // syepm_user_id_user: currentUser?._id || '',\n // syepm_entity_id_syen: currentEntity?._id || '',\n // syepm_access_passs_to: newObjectId,\n // syepm_can_view: true,\n // syepm_can_edit: true,\n // syepm_is_owner: true, // Set as owner\n // syepm_isactive: true,\n // syepm_actions_allowed: ['view', 'edit', 'delete', 'share']\n // };\n\n // const newFamilyDetail = {\n // _id: newObjectId, // Assign the generated ObjectId\n // syfdl_user_id_user: '',\n // syfdl_family_member_name: '',\n // syfdl_family_member_id_user: {\n // _id: '',\n // user_fullname: ''\n // },\n // syfdl_family_member_dob: new Date(),\n // syfdl_relationship_id_sygms: {\n // _id: '',\n // sygms_name: ''\n // },\n // syfdl_blood_group_sygms: {\n // _id: '',\n // sygms_name: ''\n // },\n // syfdl_contact_email: '',\n // syfdl_contact_email_id: '',\n // syfdl_contact_phone: '',\n // syfdl_contact_number: '',\n // syfdl_isactive: true,\n // core_entity_access_pass_management: core_entity_access_pass_management // Add access pass management directly to family detail\n // } as FamilyDetailObject;\n\n // // Update signal for UI tracking\n // this.familyDetails.update(families => [...families, newFamilyDetail]);\n\n // // Add FormGroup to FormArray\n // const familyFormGroup = this.createFamilyDetailFormGroup();\n // // Set the _id in the FormGroup\n // familyFormGroup.patchValue({ _id: newObjectId });\n // this.familyDetailsFormArray.push(familyFormGroup);\n\n // // Load initial users for the new family member\n // const newIndex = this.familyDetailsFormArray.length - 1;\n // this.searchUsers('', newIndex);\n\n // // Apply access control after adding new family detail\n // this.applyFamilyDetailAccessControl();\n // },\n // error: (error: Error) => {\n // console.error('❌ [UserCreate] Failed to generate ObjectId for family detail:', error);\n\n // // Fallback: Create family detail without _id (old behavior)\n // const newFamilyGroup = this.createFamilyDetailFormGroup();\n // this.familyDetailsFormArray.push(newFamilyGroup);\n // this.familyDetails.update(families => [...families, newFamilyGroup.value]);\n\n // // Load initial users for the new family member\n // const newIndex = this.familyDetailsFormArray.length - 1;\n // this.searchUsers('', newIndex);\n\n // this.applyFamilyDetailAccessControl();\n // }\n // });\n // }\n\n // removeFamilyDetail(index: number) {\n // // Remove the family detail from the FormArray\n // this.familyDetailsFormArray.removeAt(index);\n\n // // Update the family details signal to keep UI in sync\n // this.familyDetails.update(families => families.filter((_, i) => i !== index));\n\n // // Clean up user search data for the removed family member\n // this.userSearchResults.update(results => {\n // const newResults = { ...results };\n // delete newResults[index];\n // return newResults;\n // });\n\n // this.userSearchLoading.update(loading => {\n // const newLoading = { ...loading };\n // delete newLoading[index];\n // return newLoading;\n // });\n\n // // Apply access control after removing family detail\n // this.applyFamilyDetailAccessControl();\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 exceptions\n // const {\n // core_entity_mapping,\n // core_user_contact_addresses,\n // core_user_documents,\n // core_user_family_details,\n // ...auth_user_mst\n // } = this.userMasterForm.value;\n\n // // Process role exceptions using the new permission tracking system\n // const core_user_role_exceptions = this.processRoleExceptions();\n\n // const formData: AuthUserMstCreatePayload = {\n // auth_user_mst: auth_user_mst,\n // core_entity_mapping: core_entity_mapping || [],\n // core_user_role_exceptions: core_user_role_exceptions,\n // core_user_contact_addresses: core_user_contact_addresses || [],\n // core_user_documents: core_user_documents || [],\n // core_user_family_details: core_user_family_details || [],\n // core_user_attributes: []\n // };\n\n // if (this.userId()) {\n // formData.auth_user_mst._id = this.userId();\n // }\n // // Handle password fields based on mode\n // if (this.isEditMode()) {\n // // In edit mode, only include password if it's being updated\n // if (!this.isPasswordUpdateRequired()) {\n // // Remove password fields if not updating password\n // const { user_password, user_confirm_password, ...dataWithoutPasswords } = formData?.auth_user_mst as (AuthUserMst & { user_confirm_password?: string });\n // formData.auth_user_mst = dataWithoutPasswords;\n // } else {\n // // Encrypt password before sending and remove confirm password field\n // const { user_confirm_password, ...dataWithPassword } = formData?.auth_user_mst as (AuthUserMst & { user_confirm_password?: string });\n // if (dataWithPassword.user_password) {\n // console.log('🔐 Encrypting password for edit mode...');\n // const originalPassword = dataWithPassword.user_password;\n // dataWithPassword.user_password = customEncrypt(dataWithPassword.user_password);\n\n // console.log('✅ Password encrypted for edit mode:', { originalLength: originalPassword, encryptedLength: customDecrypt(dataWithPassword.user_password), dataWithPassword: dataWithPassword.user_password });\n // }\n // formData.auth_user_mst = dataWithPassword;\n // }\n // } else {\n // // In create mode, encrypt password and remove confirm password field\n // const { user_confirm_password, ...dataWithPassword } = formData?.auth_user_mst as (AuthUserMst & { user_confirm_password?: string });\n // if (dataWithPassword.user_password) {\n // console.log('🔐 Encrypting password for create mode...');\n // const originalPassword = dataWithPassword.user_password;\n // dataWithPassword.user_password = customEncrypt(dataWithPassword.user_password);\n // console.log('✅ Password encrypted for create mode:', { originalLength: originalPassword, encryptedLength: dataWithPassword.user_password.length });\n // }\n // formData.auth_user_mst = dataWithPassword;\n // }\n\n // // Log final form data being sent (without password for security)\n // const logData = { ...formData };\n // console.log('📤 Sending form data to server:', logData);\n\n // // Use the service to save user master\n // this.userMasterService.saveUpdateUserMaster(logData)\n // .subscribe({\n // next: (response) => {\n // console.log('✅ User master saved successfully:', response);\n // this.loading.set(false);\n\n // if (this.isEditMode()) {\n // // In edit mode, show success notification\n // this.notificationService.success('User updated successfully! All changes have been saved.', {\n // title: 'User Updated',\n // duration: 5000\n // });\n // console.log('User updated successfully');\n // } else {\n // // In create mode, show success notification and reset form for new user\n // this.notificationService.success('User created successfully! You can now create another user.', {\n // title: 'User Created',\n // duration: 5000\n // });\n // this.resetForm();\n // }\n // },\n // error: (error) => {\n // console.error('❌ Error saving user master:', error);\n // this.notificationService.error('Failed to save user. Please try again.', {\n // title: 'Save Failed',\n // duration: 5000\n // });\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 contact addresses FormArray\n // while (this.contactAddressesFormArray.length !== 0) {\n // this.contactAddressesFormArray.removeAt(0);\n // }\n\n // // Clear documents FormArray\n // while (this.documentsFormArray.length !== 0) {\n // this.documentsFormArray.removeAt(0);\n // }\n\n // // Clear family details FormArray\n // while (this.familyDetailsFormArray.length !== 0) {\n // this.familyDetailsFormArray.removeAt(0);\n // }\n\n // // Clear entity mapping FormArray\n // while (this.entityMappingsFormArray.length !== 0) {\n // this.entityMappingsFormArray.removeAt(0);\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 // /**\n // * Go back to user list\n // */\n // goBackToUserList(): void {\n // this.router.navigate(['/control-panel/user-master']);\n // }\n\n // /**\n // * Cancel form and optionally navigate back\n // */\n // cancelForm(): void {\n // if (this.isEditMode()) {\n // this.goBackToUserList();\n // } else {\n // this.resetForm();\n // }\n // }\n\n // /**\n // * Get page title based on mode\n // */\n // getPageTitle(): string {\n // return this.isEditMode() ? 'Edit User' : 'Create New User';\n // }\n\n // /**\n // * Check if password fields should be shown in the UI\n // */\n // shouldShowPasswordFields(): boolean {\n // return this.showPasswordFields();\n // }\n\n // /**\n // * Get password field label based on mode\n // */\n // getPasswordFieldLabel(): string {\n // return this.isEditMode() ? 'New Password (leave blank to keep current)' : 'Password';\n // }\n\n // /**\n // * Get password confirmation field label based on mode \n // */\n // getPasswordConfirmLabel(): string {\n // return this.isEditMode() ? 'Confirm New Password' : 'Confirm Password';\n // }\n\n // /**\n // * Get password validation error message\n // */\n // getPasswordError(): string | null {\n // const passwordControl = this.userMasterForm.get('user_password');\n // if (passwordControl?.invalid && passwordControl?.touched) {\n // if (passwordControl.errors?.['required']) {\n // return 'Password is required';\n // }\n // if (passwordControl.errors?.['minlength']) {\n // return 'Password must be at least 8 characters long';\n // }\n // }\n // return null;\n // }\n\n // /**\n // * Get confirm password validation error message\n // */\n // getConfirmPasswordError(): string | null {\n // const confirmControl = this.userMasterForm.get('user_confirm_password');\n // if (confirmControl?.invalid && confirmControl?.touched) {\n // if (confirmControl.errors?.['required']) {\n // return 'Password confirmation is required';\n // }\n // if (confirmControl.errors?.['passwordRequired']) {\n // return 'Password confirmation is required';\n // }\n // if (confirmControl.errors?.['passwordMismatch']) {\n // return 'Passwords do not match';\n // }\n // }\n // return null;\n // }\n\n // /**\n // * Check if password field has error\n // */\n // hasPasswordError(): boolean {\n // const passwordControl = this.userMasterForm.get('user_password');\n // return !!(passwordControl?.invalid && passwordControl?.touched);\n // }\n\n // /**\n // * Check if confirm password field has error\n // */\n // hasConfirmPasswordError(): boolean {\n // const confirmControl = this.userMasterForm.get('user_confirm_password');\n // return !!(confirmControl?.invalid && confirmControl?.touched);\n // }\n\n // /**\n // * Check if password fields have any input\n // */\n // hasPasswordInput(): boolean {\n // const passwordControl = this.userMasterForm.get('user_password');\n // const confirmPasswordControl = this.userMasterForm.get('user_confirm_password');\n\n // return !!(passwordControl?.value?.trim() || confirmPasswordControl?.value?.trim());\n // }\n\n // /**\n // * Trigger password update mode (for edit mode)\n // */\n // triggerPasswordUpdate(): void {\n // // Check if there's any existing input in password fields\n // const passwordControl = this.userMasterForm.get('user_password');\n // const confirmPasswordControl = this.userMasterForm.get('user_confirm_password');\n\n // const hasPasswordInput = passwordControl?.value?.trim();\n // const hasConfirmPasswordInput = confirmPasswordControl?.value?.trim();\n\n // if (hasPasswordInput || hasConfirmPasswordInput) {\n // // If there's existing input, ask user for confirmation\n // const confirmClear = confirm(\n // 'There is existing text in the password fields. Do you want to clear them and start fresh?'\n // );\n\n // if (confirmClear) {\n // // Clear existing password values\n // passwordControl?.setValue('');\n // confirmPasswordControl?.setValue('');\n // passwordControl?.markAsUntouched();\n // confirmPasswordControl?.markAsUntouched();\n // }\n // }\n\n // // Enable password fields visibility in edit mode\n // this.showPasswordFields.set(true);\n\n // // Enable password fields by making them required\n // this.updatePasswordValidation();\n\n // // Focus on password field after a short delay to ensure UI updates\n // setTimeout(() => {\n // const passwordField = document.getElementById('user_password');\n // passwordField?.focus();\n // }, 100);\n // }\n\n // /**\n // * Cancel password update mode (for edit mode)\n // */\n // cancelPasswordUpdate(): void {\n // // Clear password values\n // const passwordControl = this.userMasterForm.get('user_password');\n // const confirmPasswordControl = this.userMasterForm.get('user_confirm_password');\n\n // passwordControl?.setValue('');\n // confirmPasswordControl?.setValue('');\n // passwordControl?.markAsUntouched();\n // confirmPasswordControl?.markAsUntouched();\n\n // // Hide password fields in edit mode\n // this.showPasswordFields.set(false);\n\n // // Update validation to make fields optional again\n // this.updatePasswordValidation();\n // }\n\n // // ==================== ADDRESS-RELATED METHODS ====================\n\n // /**\n // * Load countries for a specific address dropdown\n // */\n // loadCountriesForAddress(addressIndex: number): void {\n // this.addressCountriesLoading.update(loading => ({ ...loading, [addressIndex]: true }));\n // this.countryService.getAllCountries({}).subscribe({\n // next: (response: countryListControllerResponse) => {\n // console.log('✅ Countries response:', response);\n // const countries = response.data || [];\n // this.addressCountries.update(current => ({ ...current, [addressIndex]: countries }));\n // console.log('🌍 Loaded countries for address', addressIndex, ':', countries.length);\n // },\n // error: (error) => {\n // console.error('💥 Countries transform error:', error);\n // this.addressCountries.update(current => ({ ...current, [addressIndex]: [] }));\n // },\n // complete: () => {\n // this.addressCountriesLoading.update(loading => ({ ...loading, [addressIndex]: false }));\n // }\n // });\n // }\n\n // /**\n // * Search countries with filter for a specific address\n // */\n // onCountrySearch(event: EventWithQuery | selectSearchType, addressIndex: number): void {\n // const payload = {\n // query: event?.query || '',\n // syctr_id: String(event?.value || '')\n // };\n\n // this.addressCountriesLoading.update(loading => ({ ...loading, [addressIndex]: true }));\n // this.countryService.getAllCountries(payload).subscribe({\n // next: (response) => {\n // const countries = response.data || [];\n // this.addressCountries.update(current => ({ ...current, [addressIndex]: countries }));\n // console.log('🌍 Updated countries count for address', addressIndex, ':', countries.length);\n // },\n // error: (error) => {\n // console.error('❌ Failed to search countries:', error);\n // this.addressCountries.update(current => ({ ...current, [addressIndex]: [] }));\n // },\n // complete: () => {\n // this.addressCountriesLoading.update(loading => ({ ...loading, [addressIndex]: false }));\n // }\n // });\n // }\n\n // /**\n // * Search postal codes for a specific address\n // */\n // onPostalCodeSearch(event: EventWithQuery | selectSearchType, addressIndex: number): void {\n // const payload = {\n // sypin_pincode: event?.query || '',\n // sypin_id: String(event?.value || '')\n // };\n\n // this.addressPostalCodesLoading.update(loading => ({ ...loading, [addressIndex]: true }));\n // this.pinCodeService.getPinCodeData(payload).pipe(\n // takeUntilDestroyed(this.destroyRef)\n // ).subscribe({\n // next: (response: pinCodeSelectControllerResponse) => {\n // console.log('📮 Postal codes response:', response);\n // const postalCodeData = response?.data?.core_pin_code || [];\n\n // // Update dropdown options\n // this.addressPostalCodes.update(current => ({ ...current, [addressIndex]: postalCodeData }));\n\n // // Cache the full postal code data for auto-filling\n // this.postalCodeDataCache.update(current => ({ ...current, [addressIndex]: postalCodeData }));\n // },\n // error: (error) => {\n // console.error('❌ Failed to search postal codes:', error);\n // this.addressPostalCodes.update(current => ({ ...current, [addressIndex]: [] }));\n // },\n // complete: () => {\n // this.addressPostalCodesLoading.update(loading => ({ ...loading, [addressIndex]: false }));\n // }\n // });\n // }\n\n // /**\n // * Handle postal code selection to auto-fill city, state, country\n // */\n // onPostalCodeSelection(event: pinCodeSelectResponseData, addressIndex: number): void {\n // console.log('📍 Postal Code Selection Event:', event, addressIndex);\n // const pinCodeId = event._id;\n // if (!pinCodeId) return;\n\n // // Get the postal code details from the specific address's postal codes\n // const addressPostalCodes = this.addressPostalCodes()[addressIndex] || [];\n // const selectedPostalCode = addressPostalCodes.find((pc: pinCodeSelectResponseData) => pc._id === pinCodeId);\n // console.log('📍 Selected Postal Code:', selectedPostalCode, addressPostalCodes, pinCodeId);\n // // Update the form with postal code and auto-fill city, state, country\n // const addressFormGroup = this.contactAddressesFormArray.at(addressIndex) as FormGroup;\n // if (addressFormGroup) {\n // addressFormGroup.patchValue({\n // sycad_contact_pin_sypin: pinCodeId,\n // sycad_contact_city_sypin: selectedPostalCode?.sypin_district || '',\n // sycad_contact_state_sypin: selectedPostalCode?.sypin_state_name || '',\n // sycad_contact_country_syctr: selectedPostalCode?.sypin_country_id_syctr || ''\n // });\n\n // // If country is not in the dropdown yet, load it\n // if (selectedPostalCode?.sypin_country_id_syctr && !this.isCountryInDropdown(selectedPostalCode.sypin_country_id_syctr, addressIndex)) {\n // this.loadCountryForPostalCode(selectedPostalCode.sypin_country_id_syctr, addressIndex);\n // }\n // }\n // }\n\n // /**\n // * Check if a country is already in the dropdown for a specific address\n // */\n // private isCountryInDropdown(countryId: string, addressIndex: number): boolean {\n // const addressCountries = this.addressCountries()[addressIndex] || [];\n // return addressCountries.some(country => country._id === countryId);\n // }\n\n // /**\n // * Load a specific country for postal code auto-fill\n // */\n // private loadCountryForPostalCode(countryId: string, addressIndex: number): void {\n // const payload = {\n // syctr_id: countryId\n // };\n\n // this.countryService.getAllCountries(payload).subscribe({\n // next: (response) => {\n // const countries = response.data || [];\n // if (countries.length > 0) {\n // // Add the country to the existing list\n // const currentCountries = this.addressCountries()[addressIndex] || [];\n // const updatedCountries = [...currentCountries, ...countries];\n // this.addressCountries.update(current => ({ ...current, [addressIndex]: updatedCountries }));\n // }\n // },\n // error: (error) => {\n // console.error('❌ Failed to load country for postal code:', error);\n // }\n // });\n // }\n\n // /**\n // * Get postal code data from the API response cache\n // */\n // private getPostalCodeDataFromResponse(pinCodeId: string, addressIndex: number): pinCodeSelectResponseData | undefined {\n // // Get the cached postal code data for this address\n // const postalCodeData = this.postalCodeDataCache()[addressIndex];\n // if (!postalCodeData) return undefined;\n\n // // Find the specific postal code data\n // return postalCodeData.find((item) => item._id === pinCodeId) as pinCodeSelectResponseData | undefined;\n // }\n\n // /**\n // * Load address types from general master service\n // */\n // private loadAddressTypes(): void {\n // this.CideCoreGeneralMasterService.getMasterList({\n // sygmt_code: 'user_address_type',\n // sygms_entity_id_syen: this.appState.getActiveEntityId()\n // }).subscribe({\n // next: (response: generalMasterListControllerResponse) => {\n // if (response?.success && response.data) {\n // console.log('🏠 Address types loaded:', response.data);\n // this.addressTypeOptions.set(response.data);\n // } else {\n // console.error('❌ Failed to load address types');\n // this.addressTypeOptions.set([]);\n // }\n // },\n // error: (error) => {\n // console.error('❌ Error loading address types:', error);\n // this.addressTypeOptions.set([]);\n // }\n // });\n // }\n\n // /**\n // * Load document types from general master service\n // */\n // private loadDocumentTypes(): void {\n // this.CideCoreGeneralMasterService.getMasterList({\n // sygmt_code: 'user_document_type',\n // sygms_entity_id_syen: this.appState.getActiveEntityId()\n // }).subscribe({\n // next: (response: generalMasterListControllerResponse) => {\n // if (response?.success && response.data) {\n // console.log('📄 Document types loaded:', response.data);\n // this.documentTypeOptions.set(response.data);\n // } else {\n // console.error('❌ Failed to load document types');\n // this.documentTypeOptions.set([]);\n // }\n // },\n // error: (error) => {\n // console.error('❌ Error loading document types:', error);\n // this.documentTypeOptions.set([]);\n // }\n // });\n // }\n\n // /**\n // * Load document verification status from general master service\n // */\n // private loadDocumentVerificationStatus(): void {\n // this.CideCoreGeneralMasterService.getMasterList({\n // sygmt_code: 'document_verification_status',\n // sygms_entity_id_syen: this.appState.getActiveEntityId()\n // }).subscribe({\n // next: (response: generalMasterListControllerResponse) => {\n // if (response?.success && response.data) {\n // console.log('✅ Document verification status loaded:', response.data);\n // this.documentVerificationStatusOptions.set(response.data);\n // } else {\n // console.error('❌ Failed to load document verification status');\n // this.documentVerificationStatusOptions.set([]);\n // }\n // },\n // error: (error) => {\n // console.error('❌ Error loading document verification status:', error);\n // this.documentVerificationStatusOptions.set([]);\n // }\n // });\n // }\n\n // /**\n // * Load document KYC status from general master service\n // */\n // private loadDocumentKycStatus(): void {\n // this.CideCoreGeneralMasterService.getMasterList({\n // sygmt_code: 'document_kyc_status',\n // sygms_entity_id_syen: this.appState.getActiveEntityId()\n // }).subscribe({\n // next: (response: generalMasterListControllerResponse) => {\n // if (response?.success && response.data) {\n // console.log('🔐 Document KYC status loaded:', response.data);\n // this.documentKycStatusOptions.set(response.data);\n // } else {\n // console.error('❌ Failed to load document KYC status');\n // this.documentKycStatusOptions.set([]);\n // }\n // },\n // error: (error) => {\n // console.error('❌ Error loading document KYC status:', error);\n // this.documentKycStatusOptions.set([]);\n // }\n // });\n // }\n\n // /**\n // * Load blood groups from general master service\n // */\n // private loadBloodGroups(): void {\n // this.CideCoreGeneralMasterService.getMasterList({\n // sygmt_code: 'blood_group',\n // sygms_entity_id_syen: this.appState.getActiveEntityId()\n // }).subscribe({\n // next: (response: generalMasterListControllerResponse) => {\n // if (response?.success && response.data) {\n // console.log('🩸 Blood groups loaded:', response.data);\n // this.bloodGroupOptions.set(response.data);\n // } else {\n // console.error('❌ Failed to load blood groups');\n // this.bloodGroupOptions.set([]);\n // }\n // },\n // error: (error) => {\n // console.error('❌ Error loading blood groups:', error);\n // this.bloodGroupOptions.set([]);\n // }\n // });\n // }\n\n // /**\n // * Load relationship options from general master service\n // */\n // private loadRelationshipOptions(): void {\n // this.CideCoreGeneralMasterService.getMasterList({\n // sygmt_code: 'family_relationship',\n // sygms_entity_id_syen: this.appState.getActiveEntityId()\n // }).subscribe({\n // next: (response: generalMasterListControllerResponse) => {\n // if (response?.success && response.data) {\n // console.log('👨‍👩‍👧‍👦 Relationship options loaded:', response.data);\n // this.relationshipOptionsData.set(response.data);\n // } else {\n // console.error('❌ Failed to load relationship options');\n // this.relationshipOptionsData.set([]);\n // }\n // },\n // error: (error) => {\n // console.error('❌ Error loading relationship options:', error);\n // this.relationshipOptionsData.set([]);\n // }\n // });\n // }\n\n // /**\n // * Load menu options from API\n // */\n // private loadMenuOptions(): void {\n // const requestBody: MMenuListPayload = {\n // pageIndex: 0,\n // pageSize: 1000, // Load all menus\n // total: 0,\n // query: '',\n // sort: {\n // order: 'asc',\n // key: 'syme_order_by'\n // }\n // };\n\n // this.menuService.getMenuList(requestBody).subscribe({\n // next: (response) => {\n // if (response?.success) {\n // console.log('🎭 Menu options loaded:', response.data);\n // this.menuOptions.set(response.data || []);\n // } else {\n // console.error('❌ Failed to load menu options:', response);\n // this.menuOptions.set([]);\n // }\n // },\n // error: (error) => {\n // console.error('❌ Error loading menu options:', error);\n // this.menuOptions.set([]);\n // }\n // });\n // }\n\n // /**\n // * Load dropdown data for existing addresses in edit mode\n // */\n // private loadDropdownDataForExistingAddresses(): void {\n // const addresses = this.contactAddresses();\n // addresses.forEach((_, index) => {\n // // Initialize dropdown data for each existing address\n // this.addressPostalCodes.update(current => ({ ...current, [index]: [] }));\n // this.addressCountries.update(current => ({ ...current, [index]: [] }));\n // this.addressPostalCodesLoading.update(current => ({ ...current, [index]: false }));\n // this.addressCountriesLoading.update(current => ({ ...current, [index]: false }));\n // this.postalCodeDataCache.update(current => ({ ...current, [index]: [] }));\n\n // // Load countries for each address\n // this.loadCountriesForAddress(index);\n // });\n // }\n}\n\n// Interface for permission values structure\ninterface PermissionValue {\n checked: boolean;\n permission: ICoreSygms;\n actual: boolean;\n modified: boolean;\n}\n\ninterface PermissionValues {\n [permissionId: string]: PermissionValue;\n}\n\n// Interface for FormGroup with custom uploaded files property\ninterface DocumentFormGroup extends FormGroup {\n _uploadedFiles?: File[];\n}\n\n// Interface for menu with permission values\ninterface MenuWithPermissions extends ICoreSyme {\n _permissionValues?: PermissionValues;\n _rolePermissions?: Array<{\n _id: string;\n sygms_title: string;\n menu_id?: string;\n }>;\n [key: string]: unknown;\n}\n\n// Extended ICoreSyme with index signature for compatibility\ninterface ICoreSymeExtended extends ICoreSyme {\n [key: string]: unknown;\n}\n\n// Interface for entity mapping with exceptions\ninterface EntityMappingWithExceptions extends AuthUserCoreEntityMapping {\n exceptions?: Array<CoreUserRoleExceptionsWithTracking>;\n}\n\n// Interface for user search result\ninterface UserSearchResult {\n _id: string;\n user_fullname?: string;\n user_username?: string;\n [key: string]: unknown;\n}\n\n// Interface for family detail data\ninterface FamilyDetailData {\n _id?: string;\n syfdl_family_member_name?: string;\n syfdl_family_member_id_user?: { _id: string };\n syfdl_family_member_dob?: Date;\n syfdl_relationship_id_sygms?: { _id: string };\n syfdl_blood_group_sygms?: { _id: string };\n syfdl_contact_email?: string;\n syfdl_contact_email_id?: string;\n syfdl_contact_phone?: string;\n syfdl_contact_number?: string;\n syfdl_isactive?: boolean;\n [key: string]: unknown;\n}\n\n// Interface for role option\ninterface RoleOption {\n _id: string;\n syusrol_name: string;\n [key: string]: unknown;\n}\n\n// Interface for menu right\ninterface MenuRight {\n role_rights: string[];\n [key: string]: unknown;\n}\n\n// Interface for event with query\ninterface EventWithQuery {\n query?: string;\n value?: string;\n target?: {\n checked?: boolean;\n };\n checked?: boolean;\n [key: string]: unknown;\n}\n\n\n// Interface for document object\ninterface DocumentObject {\n _id: string;\n syusd_user_id_user: string;\n syusd_document_type_id_sygms: {\n _id: string;\n sygms_name: string;\n };\n syusd_doc_number: string;\n syusd_doc_name_as_per_doc: string;\n syusd_doc_issue_date: Date;\n syusd_doc_expiry_date: Date;\n syusd_photo_group_id_cyfm: {\n _id: string;\n cyfm_name: string;\n };\n syusd_doc_verification_status_id_sygms: {\n _id: string;\n sygms_name: string;\n };\n syusd_doc_kyc_status_id_sygms: {\n _id: string;\n sygms_name: string;\n };\n syusd_isactive: boolean;\n core_entity_access_pass_management: CoreEntityAccessPassManagement;\n}\n\n// Interface for family detail object\ninterface FamilyDetailObject {\n _id: string;\n syfdl_user_id_user: string;\n syfdl_family_member_name: string;\n syfdl_family_member_id_user: {\n _id: string;\n user_fullname: string;\n };\n syfdl_family_member_dob: Date;\n syfdl_relationship_id_sygms: {\n _id: string;\n sygms_name: string;\n };\n syfdl_blood_group_sygms: {\n _id: string;\n sygms_name: string;\n };\n syfdl_contact_email: string;\n syfdl_contact_phone: string;\n syfdl_isactive: boolean;\n core_entity_access_pass_management: CoreEntityAccessPassManagement;\n}\n","","// User Management Module Export Index\n\n// Components\nexport { CideCoreUserCreateComponent } from './components/user-create/user-create.component';\n// export { CideCoreUserListComponent } from './components/user-list/user-list.component';\n\n// Services \n// export * from './services';\n\n// // User Forms Components\n// export { CideCoreUserAttributesComponent } from './components/user-forms/user-attributes.component';\n// export { CideCoreUserContactAddressesComponent } from './components/user-forms/user-contact-addresses.component';\n// export { CideCoreUserDocumentsComponent } from './components/user-forms/user-documents.component';\n// export { CideCoreUserEntityAccessComponent } from './components/user-forms/user-entity-access.component';\n// export { CideCoreUserFamilyDetailsComponent } from './components/user-forms/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// // User Role Management Module\n// export * from './lib/core/user-role-management';\n\n// // Entity Management Module\n// export * from './lib/core/entity-management';\n\n// // General Master Management Module\n// export * from './lib/core/general-master-management';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":";;;;;;;;;;;;;;;;AAGO,MAAM,UAAU,GAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC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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/general-master-management/services/general-master.service.ts","../../../projects/cloud-ide-core/src/lib/core/general-master-management/services/general-master-type.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/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/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/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';\nimport { authGuard } from 'cloud-ide-auth';\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 // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_menu_list\"\n // }\n // }, \n // {\n // path: 'department',\n // loadComponent: () => import('./core/department-management/components/department-list/department-list.component').then(c => c.CideCoreDepartmentListComponent),\n // title: 'Department Management',\n // canActivate: [authGuard],\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.CideCoreDesignationListComponent),\n // title: 'Designation Management',\n // canActivate: [authGuard],\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.CideCoreGradeLevelListComponent),\n // title: 'Grade Level Management',\n // canActivate: [authGuard],\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.CideCorePageListComponent),\n // title: 'Page Management',\n // canActivate: [authGuard],\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.CideCorePageFormComponent),\n // title: 'Page Form',\n // canActivate: [authGuard],\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.CideCorePageFormComponent),\n // title: 'Page Form',\n // canActivate: [authGuard],\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.CideCorePageThemeComponent),\n // title: 'Page Theme Management',\n // canActivate: [authGuard],\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.CideCorePageThemeComponent),\n // title: 'Page Theme Management',\n // canActivate: [authGuard],\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.CideCorePageControlsComponent),\n // title: 'Page Controls Management',\n // canActivate: [authGuard],\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.CideCorePageControlsComponent),\n // title: 'Page Controls Management',\n // canActivate: [authGuard],\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.CideCoreGeneralMasterComponent),\n // title: 'General Master Entry',\n // canActivate: [authGuard],\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.CideCoreGeneralMasterComponent),\n // title: 'General Master Entry',\n // canActivate: [authGuard],\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.CideCoreGeneralMasterTypeComponent),\n // title: 'General Type Entry',\n // canActivate: [authGuard],\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.CideCoreGeneralMasterTypeComponent),\n // title: 'General Type Entry',\n // canActivate: [authGuard],\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.CideCoreUserListComponent),\n // title: 'User Management',\n // canActivate: [authGuard],\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.CideCoreUserCreateComponent),\n // title: 'Create User',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_user_management_create\"\n // }\n // },\n // {\n // path: 'user-master/edit/:query',\n // loadComponent: () => import('./core/user-management/components/user-create/user-create.component').then(c => c.CideCoreUserCreateComponent),\n // title: 'Edit User',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_user_management_create\"\n // }\n // },\n // {\n // path: 'user-master/view/:query',\n // loadComponent: () => import('./core/user-management/components/user-create/user-create.component').then(c => c.CideCoreUserCreateComponent),\n // title: 'View User',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_user_management_create\"\n // }\n // },\n // {\n // path: \"entity-list\",\n // loadComponent: () => import('./core/entity-management/components/entity-list/entity-list.component').then(c => c.CideCoreEntityListComponent),\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"admin_entity_list\"\n // }\n // },\n // {\n // path: \"entity-create\",\n // loadComponent: () => import('./core/entity-management/components/entity-create/entity-create.component').then(c => c.CideCoreEntityCreateComponent),\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_entity_form\"\n // }\n // },\n // {\n // path: \"entity-create/:query\",\n // loadComponent: () => import('./core/entity-management/components/entity-create/entity-create.component').then(c => c.CideCoreEntityCreateComponent),\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_entity_form\"\n // }\n // },\n // {\n // path: \"org-structure\",\n // loadComponent: () => import('./core/entity-management/components/org-structure/org-structure.component').then(c => c.CideCoreOrgStructureComponent),\n // title: 'Organization Structure',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_org_structure\"\n // }\n // },\n // // User Role Management Routes\n // {\n // path: 'user-role',\n // loadComponent: () => import('./core/user-role-management/components/user-role-list/user-role-list.component').then(c => c.CideCoreUserRoleListComponent),\n // title: 'User Role Management',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_user_role\"\n // }\n // },\n // {\n // path: 'user-role/create',\n // loadComponent: () => import('./core/user-role-management/components/user-role-form/user-role-form.component').then(c => c.CideCoreUserRoleFormComponent),\n // title: 'Create User Role',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_user_role\"\n // }\n // },\n // {\n // path: 'user-role/edit/:query',\n // loadComponent: () => import('./core/user-role-management/components/user-role-form/user-role-form.component').then(c => c.CideCoreUserRoleFormComponent),\n // title: 'Edit User Role',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_user_role\"\n // }\n // },\n // {\n // path: 'user-role/view/:query',\n // loadComponent: () => import('./core/user-role-management/components/user-role-form/user-role-form.component').then(c => c.CideCoreUserRoleFormComponent),\n // title: 'View User Role',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_user_role_view\"\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 menuChangeSequenceControllerResponse, \r\n menuDeleteControllerResponse, \r\n menuListControllerResponse, \r\n MMenuChangeSequencePayload, \r\n MMenuListPayload\r\n} from 'cloud-ide-lms-model';\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 /**\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('CideCoreMenuManagementService API error:', error);\r\n return this.handleError(error);\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 * Change menu sequence\r\n * PATCH ${coreRoutesUrl?.menu}/change-sequence - payload: menu sequence data, response: menuChangeSequenceControllerResponse\r\n */\r\n changeMenuSequence(payload: MMenuChangeSequencePayload): Observable<menuChangeSequenceControllerResponse> {\r\n console.log('Changing menu sequence:', payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, 'change-sequence']);\r\n return this.http.patch<menuChangeSequenceControllerResponse>(url, payload)\r\n .pipe(\r\n tap((response: menuChangeSequenceControllerResponse) => {\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 { Injectable, inject } 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 generalMasterListControllerResponse,\n generalMasterByIdControllerResponse,\n generalMasterInsertUpdateControllerResponse,\n generalMasterDeleteControllerResponse,\n generalMasterToggleStatusControllerResponse,\n ICoreSygms,\n IGeneralMasterListRequest,\n} from 'cloud-ide-lms-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CideCoreGeneralMasterService {\n private http = inject(HttpClient);\n private generalMasterListSubject = new BehaviorSubject<ICoreSygms[]>([]);\n public generalMasterList$ = this.generalMasterListSubject.asObservable();\n\n constructor() {\n console.log('CideCoreGeneralMasterService initialized - using real API');\n }\n\n /**\n * Get general master list from API\n */\n getMasterList(payload: IGeneralMasterListRequest): Observable<generalMasterListControllerResponse> {\n const query = generateStringFromObject(payload);\n return this.http?.get<generalMasterListControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, query]))\n .pipe(\n tap((response: generalMasterListControllerResponse) => {\n if (response?.success) {\n this.generalMasterListSubject.next(response?.data || []);\n }\n }),\n catchError(error => {\n console.error('CideCoreGeneralMasterService API error:', error);\n return this.handleError(error);\n })\n );\n }\n\n /**\n * Get general master list from cache (if available)\n */\n getMasterListFromCache(): ICoreSygms[] {\n return this.generalMasterListSubject.value;\n }\n\n /**\n * Save general master (create or update)\n * POST ${coreRoutesUrl?.generalMaster} - payload: ICoreSygms, response: generalMasterInsertUpdateControllerResponse\n */\n saveMaster(master: ICoreSygms): Observable<generalMasterInsertUpdateControllerResponse> {\n const isUpdate = !!master._id;\n console.log(`${isUpdate ? 'Updating' : 'Creating'} general master:`, master);\n \n // Create proper payload\n const payload: ICoreSygms = {\n ...(master._id && { _id: master._id }), // Only include _id if it exists\n sygms_code: master.sygms_code,\n sygms_id_sygmt: master.sygms_id_sygmt,\n sygms_title: master.sygms_title,\n sygms_desc: master.sygms_desc,\n sygms_isactive: master.sygms_isactive,\n sygms_id_sygms: master.sygms_id_sygms,\n sygms_configuration: master.sygms_configuration,\n sygms_entity_id_syen: master.sygms_entity_id_syen\n };\n \n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster]);\n return this.http.post<generalMasterInsertUpdateControllerResponse>(url, payload)\n .pipe(\n tap((response: generalMasterInsertUpdateControllerResponse) => {\n if (response.success) {\n this.refreshMasterList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Create new general master (backward compatibility)\n */\n createMaster(master: ICoreSygms): Observable<generalMasterInsertUpdateControllerResponse> {\n return this.saveMaster(master);\n }\n\n /**\n * Update existing general master (backward compatibility)\n */\n updateMaster(id: string, master: ICoreSygms): Observable<generalMasterInsertUpdateControllerResponse> {\n return this.saveMaster({ ...master, _id: id });\n }\n\n /**\n * Get general master by ID\n * GET ${coreRoutesUrl?.generalMaster}/byId/:query - payload: { sygms_id: string }, response: generalMasterByIdControllerResponse\n */\n getMasterById(id: string): Observable<generalMasterByIdControllerResponse> {\n console.log('Getting general master by ID:', id);\n const payload = { sygms_id: id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, 'byId', query]);\n return this.http.get<generalMasterByIdControllerResponse>(url)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Delete general master\n * DELETE ${coreRoutesUrl?.generalMaster}/:query - payload: { sygms_id: string }, response: generalMasterDeleteControllerResponse\n */\n deleteMaster(id: string): Observable<generalMasterDeleteControllerResponse> {\n const payload = { sygms_id: id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, query]);\n return this.http.delete<generalMasterDeleteControllerResponse>(url)\n .pipe(\n tap((response: generalMasterDeleteControllerResponse) => {\n if (response.success) {\n this.refreshMasterList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Toggle general master active status\n */\n toggleMasterStatus(id: string): Observable<generalMasterToggleStatusControllerResponse> {\n console.log('Toggling general master status:', id);\n const payload = { id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, query]);\n return this.http.put<generalMasterToggleStatusControllerResponse>(url, {})\n .pipe(\n tap((response: generalMasterToggleStatusControllerResponse) => {\n if (response.success) {\n this.refreshMasterList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Check if master code exists\n */\n checkMasterCodeExists(code: string, typeId: string, excludeId?: string): Observable<{ success: boolean; message: string; exists: boolean }> {\n const payload: Record<string, string> = { code, typeId };\n if (excludeId) {\n payload['excludeId'] = excludeId;\n }\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, 'checkCodeExists', query]);\n return this.http.get<{ success: boolean; message: string; exists: boolean }>(url)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Refresh general master list from server\n */\n private refreshMasterList(): void {\n const defaultPayload: IGeneralMasterListRequest = {};\n this.getMasterList(defaultPayload).subscribe({\n next: () => {\n console.log('General master list refreshed successfully');\n },\n error: (error) => {\n console.error('Error refreshing general master 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('General Master Service Error:', errorMessage);\n return throwError(() => new Error(errorMessage));\n }\n} ","import { Injectable, inject } 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 generalMasterTypeListControllerResponse,\n generalMasterTypeByIdControllerResponse,\n generalMasterTypeInsertUpdateControllerResponse,\n generalMasterTypeDeleteControllerResponse,\n generalMasterTypeToggleStatusControllerResponse,\n MGeneralMasterType,\n MGeneralMasterTypeToggleStatusPayload,\n ICoreSygmt\n} from 'cloud-ide-lms-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CideCoreGeneralMasterTypeService {\n private http = inject(HttpClient);\n private generalMasterTypeListSubject = new BehaviorSubject<ICoreSygmt[]>([]);\n public generalMasterTypeList$ = this.generalMasterTypeListSubject.asObservable();\n\n constructor() {\n console.log('CideCoreGeneralMasterTypeService initialized - using real API');\n }\n\n /**\n * Get general master type list from API\n */\n getTypeList(body: MGeneralMasterType): Observable<generalMasterTypeListControllerResponse> {\n const query = generateStringFromObject(body);\n return this.http?.get<generalMasterTypeListControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, query]))\n .pipe(\n tap((response: generalMasterTypeListControllerResponse) => {\n if (response?.success) {\n this.generalMasterTypeListSubject.next(response?.data || []);\n }\n }),\n catchError(error => {\n console.error('CideCoreGeneralMasterTypeService API error:', error);\n return this.handleError(error);\n })\n );\n }\n\n /**\n * Get general master type list from cache (if available)\n */\n getTypeListFromCache(): ICoreSygmt[] {\n return this.generalMasterTypeListSubject.value;\n }\n\n /**\n * Create or update general master type\n * POST ${coreRoutesUrl?.generalMasterType} - payload: IGeneralMasterTypeCreateUpdatePayload, response: generalMasterTypeInsertUpdateControllerResponse\n * If type._id exists, it will update; otherwise, it will create a new type\n */\n saveType(type: ICoreSygmt): Observable<generalMasterTypeInsertUpdateControllerResponse> {\n const isUpdate = !!type._id;\n console.log(`${isUpdate ? 'Updating' : 'Creating'} general master type:`, type);\n \n // Create proper payload - backend will determine create vs update based on _id presence\n const payload: ICoreSygmt = {\n ...(type._id && { _id: type._id }), // Only include _id if it exists\n sygmt_code: type.sygmt_code,\n sygmt_title: type.sygmt_title,\n sygmt_desc: type.sygmt_desc,\n sygmt_isactive: type.sygmt_isactive,\n sygmt_configuration: type.sygmt_configuration,\n sygmt_id_sygmt: type.sygmt_id_sygmt\n };\n \n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType]);\n return this.http.post<generalMasterTypeInsertUpdateControllerResponse>(url, payload)\n .pipe(\n tap((response: generalMasterTypeInsertUpdateControllerResponse) => {\n if (response.success) {\n this.refreshTypeList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Get general master type by ID\n * GET ${coreRoutesUrl?.generalMasterType}/byId/:query - payload: { sygmt_id: string }, response: generalMasterTypeByIdControllerResponse\n */\n getTypeById(id: string): Observable<generalMasterTypeByIdControllerResponse> {\n console.log('Getting general master type by ID:', id);\n const payload = { sygmt_id: id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, 'byId', query]);\n return this.http.get<generalMasterTypeByIdControllerResponse>(url)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Delete general master type\n * DELETE ${coreRoutesUrl?.generalMasterType}/:query - payload: { sygmt_id: string }, response: generalMasterTypeDeleteControllerResponse\n */\n deleteType(id: string): Observable<generalMasterTypeDeleteControllerResponse> {\n const payload = { sygmt_id: id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, query]);\n return this.http.delete<generalMasterTypeDeleteControllerResponse>(url)\n .pipe(\n tap((response: generalMasterTypeDeleteControllerResponse) => {\n if (response.success) {\n this.refreshTypeList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Delete multiple general master types\n */\n deleteMultipleTypes(ids: string[]): Observable<{ success: boolean; message?: string; data?: unknown }> {\n console.log('Deleting multiple general master types:', ids);\n const payload = { ids };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, 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.refreshTypeList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Toggle general master type active status\n */\n toggleTypeStatus(payload: MGeneralMasterTypeToggleStatusPayload): Observable<generalMasterTypeToggleStatusControllerResponse> {\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, query]);\n return this.http.put<generalMasterTypeToggleStatusControllerResponse>(url, {})\n .pipe(\n tap((response: generalMasterTypeToggleStatusControllerResponse) => {\n if (response.success) {\n this.refreshTypeList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Check if type code exists\n */\n checkTypeCodeExists(code: string, excludeId?: string): Observable<{ success: boolean; message: string; exists: boolean }> {\n const payload: Record<string, string> = { code };\n if (excludeId) {\n payload['excludeId'] = excludeId;\n }\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, 'checkCodeExists', query]);\n return this.http.get<{ success: boolean; message: string; exists: boolean }>(url)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Get hierarchical tree structure\n */\n getTypeTree(): Observable<generalMasterTypeListControllerResponse> {\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, 'tree']);\n return this.http.get<generalMasterTypeListControllerResponse>(url)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Find general master type by ID\n */\n findTypeById(id: string, items: ICoreSygmt[] = this.generalMasterTypeListSubject.value): ICoreSygmt | 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 general master types for dropdown selection\n */\n getParentTypes(excludeId?: string): ICoreSygmt[] {\n const allItems: ICoreSygmt[] = [];\n\n const flattenItems = (items: ICoreSygmt[], level: number = 0) => {\n items.forEach(item => {\n if (item._id !== excludeId) {\n allItems.push({\n ...item,\n sygmt_title: ' '.repeat(level) + item.sygmt_title\n });\n }\n });\n };\n\n flattenItems(this.generalMasterTypeListSubject.value);\n return allItems;\n }\n\n /**\n * Refresh general master type list from server\n */\n private refreshTypeList(): void {\n const defaultBody: MGeneralMasterType = {};\n this.getTypeList(defaultBody).subscribe({\n next: () => {\n console.log('General master type list refreshed successfully');\n },\n error: (error) => {\n console.error('Error refreshing general master type 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('General Master Type Service Error:', errorMessage);\n return throwError(() => new Error(errorMessage));\n }\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, ICoreSygms, IGeneralMasterListRequest } from 'cloud-ide-lms-model';\nimport { MenuManagementService } from '../../services/menu-management.service';\nimport { CideCoreGeneralMasterService } from '../../../general-master-management/services/general-master.service';\nimport { CideCoreGeneralMasterTypeService } from '../../../general-master-management/services/general-master-type.service';\nimport { CideEleButtonComponent, CideIconComponent, CideInputComponent, CideTextareaComponent, GridConfiguration, GridEvent, DropdownItem, CideEleDropdownComponent, NotificationService } from 'cloud-ide-element';\nimport { CideSelectComponent } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { CideEleDataGridComponent } 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 generalMasterService = inject(CideCoreGeneralMasterService);\n private generalMasterTypeService = inject(CideCoreGeneralMasterTypeService);\n private notificationService = inject(NotificationService);\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 permissionsRendererTemplate = viewChild.required<TemplateRef<TemplateContext<ICoreSyme>>>('permissionsRendererTemplate');\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 permissions = signal<ICoreSygms[]>([]);\n userRightsTypeId = signal<string | null>(null);\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 syme_permissions_id_sygms: this.fb.control<string[]>([])\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 { value: 'internal', label: 'Internal Menu' }\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 // Permission options for multi-select\n permissionOptions = computed(() => {\n return this.permissions().map(permission => ({\n value: permission._id || '',\n label: permission.sygms_title || permission.sygms_code || 'Unknown'\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_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 key: 'syme_permissions_id_sygms',\n header: 'Permissions',\n type: 'custom',\n width: '200px',\n truncate: true,\n align: 'left',\n renderer: 'permissionsRenderer'\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: 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 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 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 permissionsRenderer: this.permissionsRendererTemplate(),\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 this.loadUserRightsTypeId();\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[]; allOrders?: ICoreSyme[] }) {\n console.log('🔄 Row reorder event:', data);\n console.log('🔄 Changed items (newOrder):', data.newOrder.length);\n console.log('🔄 All items (allOrders):', data.allOrders?.length || 0);\n\n // Save original order if not already saved\n if (this.originalOrder().length === 0) {\n this.originalOrder.set([...this.menuItems()]);\n }\n\n // Use allOrders if available (complete order), otherwise fallback to newOrder (changed items only)\n const reorderedData = data.allOrders && data.allOrders.length > 0 ? data.allOrders : data.newOrder;\n console.log('🔄 Using reordered data with', reorderedData.length, 'items');\n\n // Update the displayed data with new order\n this.menuItems.set(reorderedData);\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 using the change sequence API\n * This method is called by the data grid when save-order action is triggered\n * Handles both single-level and multi-level (hierarchical) menu structures\n */\n saveMenuOrder() {\n console.log('💾 Saving menu order...');\n \n // Get all menu items including children (handle both hierarchical and flat structures)\n const allMenuItems = this.getAllMenuItemsIncludingChildren(this.menuItems());\n \n // Update sequence numbers for all items based on their current order\n const itemsWithUpdatedSequences = allMenuItems.map((item, index) => ({\n ...item,\n syme_order_by: index + 1\n }));\n \n // Prepare payload for change sequence API with all menu items (including children)\n const payload = {\n menu_sequences: itemsWithUpdatedSequences.map(item => ({\n syme_id: item._id || '',\n syme_order_by: item.syme_order_by || 1\n }))\n };\n\n console.log('📤 Sending change sequence payload for', itemsWithUpdatedSequences.length, 'items:', payload);\n\n // Call the change sequence API\n this.menuService.changeMenuSequence(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Menu sequence updated successfully for', itemsWithUpdatedSequences.length, 'items');\n this.notificationService.success(`Menu sequence updated successfully for ${itemsWithUpdatedSequences.length} items`);\n // Reset change flag first\n this.hasOrderChanged.set(false);\n // Update original order to current state\n this.originalOrder.set([...this.menuItems()]);\n // Refresh the menu list from server to get updated order\n this.loadMenuItems();\n } else {\n console.error('❌ Failed to update menu sequence:', response);\n this.error.set('Failed to update menu sequence');\n this.notificationService.error('Failed to update menu sequence');\n }\n },\n error: (error) => {\n console.error('❌ Error updating menu sequence:', error);\n this.error.set('Failed to update menu sequence');\n this.notificationService.error(`Error updating menu sequence: ${error.message || 'Unknown error occurred'}`);\n }\n });\n }\n\n /**\n * Get all menu items including children from the current data structure\n * This handles both hierarchical and flat menu structures\n */\n private getAllMenuItemsIncludingChildren(menuItems: ICoreSyme[]): ICoreSyme[] {\n const allItems: ICoreSyme[] = [];\n const processedIds = new Set<string>();\n \n const collectItems = (items: ICoreSyme[]) => {\n items.forEach(item => {\n // Avoid duplicates by checking if item is already processed\n if (item._id && !processedIds.has(item._id)) {\n allItems.push(item);\n processedIds.add(item._id);\n \n // Check if item has children property (for hierarchical data from data grid)\n if ((item as any).children && (item as any).children.length > 0) {\n collectItems((item as any).children);\n }\n }\n });\n };\n \n // For flat data structure (which is what data grid sends), just return all items\n // since they're already in the correct order\n if (this.isFlatDataStructure(menuItems)) {\n console.log('🔄 Detected flat data structure, returning all items as-is');\n return menuItems;\n }\n \n // For hierarchical data structure, collect all items recursively\n collectItems(menuItems);\n \n console.log('🔄 Collected', allItems.length, 'menu items including children');\n console.log('📊 Items structure:', allItems.map(item => ({ \n id: item._id, \n title: item.syme_title, \n parent: item.syme_id_syme,\n hasChildren: (item as any).children ? (item as any).children.length : 0\n })));\n \n return allItems;\n }\n\n /**\n * Check if the data structure is flat (no children property) or hierarchical\n */\n private isFlatDataStructure(menuItems: ICoreSyme[]): boolean {\n // If any item has a children property with items, it's hierarchical\n return !menuItems.some(item => (item as any).children && (item as any).children.length > 0);\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_permissions_id_sygms: menuItem.syme_permissions_id_sygms || [],\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 syme_permissions_id_sygms: formValue.syme_permissions_id_sygms || []\n } as any;\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 syme_permissions_id_sygms: []\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 syme_permissions_id_sygms: []\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\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 /**\n * Load user rights type ID from general master types\n */\n private loadUserRightsTypeId(): void {\n this.generalMasterTypeService.getTypeList({\n sygmt_code: \"user_rights\"\n })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n const userRightsType = response.data.find(type =>\n type.sygmt_code === 'user_rights' || type.sygmt_title?.toLowerCase().includes('user_rights')\n );\n if (userRightsType) {\n this.userRightsTypeId.set(userRightsType._id || null);\n this.loadPermissions();\n } else {\n this.error.set('User rights type not found in general master types');\n }\n }\n },\n error: (err) => {\n this.error.set('Failed to load user rights type');\n }\n });\n }\n\n /**\n * Load permissions from general master\n */\n private loadPermissions(): void {\n const typeId = this.userRightsTypeId();\n if (!typeId) {\n this.error.set('User rights type not found. Please ensure the \"user_rights\" type exists in general master types.');\n return;\n }\n\n const payload: IGeneralMasterListRequest = { sygms_id_sygmt: typeId };\n this.generalMasterService.getMasterList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n this.permissions.set(response.data);\n if (this.error()?.includes('permissions')) {\n this.error.set(null);\n }\n } else {\n this.permissions.set([]);\n this.error.set('No permissions found. Please ensure permissions are configured in general master.');\n }\n },\n error: (err) => {\n this.permissions.set([]);\n this.error.set('Failed to load permissions from general master. Please check your configuration.');\n }\n });\n }\n\n /**\n * Get permission names from permission IDs\n */\n getPermissionNames(permissionIds: string[]): string {\n if (!permissionIds || permissionIds.length === 0) {\n return 'No permissions';\n }\n \n const permissionNames = permissionIds\n .map(id => {\n const permission = this.permissions().find(p => p._id === id);\n return permission ? (permission.sygms_title || permission.sygms_code || 'Unknown') : 'Unknown';\n })\n .filter(name => name !== 'Unknown');\n \n return permissionNames.length > 0 ? permissionNames.join(', ') : 'No valid permissions';\n }\n\n /**\n * Get permission by ID\n */\n getPermissionById(permissionId: string): ICoreSygms | undefined {\n return this.permissions().find(p => p._id === permissionId);\n }\n\n /**\n * Get all permission names for tooltip\n */\n getAllPermissionNames(permissionIds: string[]): string {\n if (!permissionIds || permissionIds.length === 0) {\n return 'No permissions';\n }\n \n const permissionNames = permissionIds\n .map(id => {\n const permission = this.permissions().find(p => p._id === id);\n return permission ? (permission.sygms_title || permission.sygms_code || 'Unknown') : 'Unknown';\n })\n .filter(name => name !== 'Unknown');\n \n return permissionNames.length > 0 ? permissionNames.join(', ') : 'No valid permissions';\n }\n\n /**\n * Handle menu type change - clear permissions for non-menu types\n */\n onMenuTypeChange(): void {\n const currentType = this.quickAddForm.get('syme_type')?.value;\n if (currentType !== 'menu') {\n this.quickAddForm.patchValue({\n syme_permissions_id_sygms: []\n });\n }\n }\n\n /**\n * Get dropdown items for menu actions\n */\n getDropdownItems(menuItem: ICoreSyme): DropdownItem[] {\n return [\n {\n id: 'addChild',\n label: 'Add Child',\n icon: 'add',\n disabled: false\n },\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n disabled: false\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n disabled: false\n },\n {\n id: 'toggle',\n label: menuItem.syme_isactive ? 'Deactivate' : 'Activate',\n icon: menuItem.syme_isactive ? 'block' : 'check_circle',\n disabled: false\n }\n ];\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, menuItem: ICoreSyme): void {\n switch (item.id) {\n case 'addChild':\n this.addChildMenuItem(menuItem._id || '', menuItem);\n break;\n case 'edit':\n this.editMenuItem(menuItem._id || '');\n break;\n case 'delete':\n this.deleteMenuItem(menuItem._id || '');\n break;\n case 'toggle':\n this.toggleItemStatus(menuItem._id || '');\n break;\n }\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 (ngModelChange)=\"onMenuTypeChange()\">\n </cide-ele-select>\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 <!-- 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 <!-- Empty div for spacing -->\n <div></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 <!-- Permissions (only show for menu and title types) -->\n @if (quickAddForm.get('syme_type')?.value === 'menu') {\n <div>\n <cide-ele-select \n label=\"Permissions\" \n [options]=\"permissionOptions()\" \n formControlName=\"syme_permissions_id_sygms\"\n placeholder=\"Select permissions for this menu\"\n [multiple]=\"true\"\n size=\"sm\">\n </cide-ele-select>\n </div>\n }\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 <!-- Active Status and Action Buttons -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <!-- Active Checkbox -->\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 \n <!-- Action Buttons -->\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 <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative tw-p-0\">\n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-w-full tw-overflow-auto\">\n \n <cide-ele-data-grid \n [config]=\"gridConfig()\" \n [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\"\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<!-- Permissions Renderer Template -->\n<ng-template #permissionsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-flex-wrap tw-gap-1 tw-max-w-full tw-items-center\">\n @if (row.syme_type === 'menu') {\n @if (row.syme_permissions_id_sygms && row.syme_permissions_id_sygms.length > 0) {\n @for (permissionId of row.syme_permissions_id_sygms.slice(0, 3); track permissionId) {\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-blue-100 tw-text-blue-800 tw-whitespace-nowrap tw-h-5\">\n {{ getPermissionById(permissionId)?.sygms_title || getPermissionById(permissionId)?.sygms_code || 'Unknown' }}\n </span>\n }\n @if (row.syme_permissions_id_sygms.length > 3) {\n <span \n 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-gray-100 tw-text-gray-600 tw-whitespace-nowrap tw-cursor-help tw-h-5\"\n [title]=\"getAllPermissionNames(row.syme_permissions_id_sygms)\">\n +{{ row.syme_permissions_id_sygms.length - 3 }} more\n </span>\n }\n } @else {\n <span class=\"tw-text-xs tw-text-gray-500 tw-h-5 tw-flex tw-items-center\">No permissions</span>\n }\n } @else {\n <!-- Show N/A for module, section, and title types -->\n <span class=\"tw-text-xs tw-text-gray-400 tw-h-5 tw-flex tw-items-center\">N/A</span>\n }\n </div>\n</ng-template>\n\n","/*\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';","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 CideCoreDepartmentManagementService {\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('CideCoreDepartmentManagementService 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('CideCoreDepartmentManagementService 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 { CideCoreDepartmentManagementService } from '../../services/department-management.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideLytSharedWrapperComponent } 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-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 CideLytSharedWrapperComponent\n ],\n templateUrl: './department-list.component.html',\n styleUrls: []\n})\nexport class CideCoreDepartmentListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private departmentService = inject(CideCoreDepartmentManagementService);\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('CideCoreDepartmentListComponent 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('🚀 CideCoreDepartmentListComponent.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('📥 CideCoreDepartmentListComponent 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('❌ CideCoreDepartmentListComponent error:', err);\n this.error.set(err.message || 'An error occurred while loading departments');\n },\n complete: () => {\n console.log('CideCoreDepartmentListComponent 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 with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_department_list' }\">\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 <!-- 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>\n</cide-lyt-shared-wrapper> ","// 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 MDesignationToggleStatusPayload,\n designationToggleStatusControllerResponse,\n} from 'cloud-ide-lms-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CideCoreDesignationManagementService {\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('CideCoreDesignationManagementService 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('CideCoreDesignationManagementService 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<designationToggleStatusControllerResponse> {\n console.log('Toggling designation status:', id);\n const payload: MDesignationToggleStatusPayload = { sydsg_id: id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation, \"toggleStatus\", query]);\n return this.http.put<designationToggleStatusControllerResponse>(url, {})\n .pipe(\n tap((response: designationToggleStatusControllerResponse) => {\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 gradeLevelToggleStatusControllerResponse,\r\n MGradeLevel,\r\n MGradeLevelGetByIdPayload,\r\n MGradeLevelToggleStatusPayload,\r\n MGradeLevelDeletePayload,\r\n gradeLevelDeleteControllerResponse,\r\n MGradeLevelChangeSequencePayload,\r\n gradeLevelChangeSequenceControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideCoreGradeLevelManagementService {\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('CideCoreGradeLevelManagementService 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('CideCoreGradeLevelManagementService 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(payload: MGradeLevelGetByIdPayload): Observable<gradeLevelByIdControllerResponse> {\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<gradeLevelDeleteControllerResponse> {\r\n const payload: MGradeLevelDeletePayload = { sydsgl_id: 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<gradeLevelDeleteControllerResponse>(url)\r\n .pipe(\r\n tap((response: gradeLevelDeleteControllerResponse) => {\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 * PATCH ${coreRoutesUrl?.gradeLevel}/toggle-status - payload: { id }, response: gradeLevelToggleStatusControllerResponse\r\n */\r\n toggleGradeLevelStatus(id: string): Observable<gradeLevelToggleStatusControllerResponse> {\r\n console.log('Toggling grade level status:', id);\r\n const payload: MGradeLevelToggleStatusPayload = { sydsgl_id: id };\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, 'toggle-status']);\r\n return this.http.patch<gradeLevelToggleStatusControllerResponse>(url, payload)\r\n .pipe(\r\n tap((response: gradeLevelToggleStatusControllerResponse) => {\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 * Change grade level sequence\r\n * PATCH ${coreRoutesUrl?.gradeLevel}/change-sequence - payload: MGradeLevelChangeSequencePayload, response: gradeLevelChangeSequenceControllerResponse\r\n */\r\n changeGradeLevelSequence(payload: MGradeLevelChangeSequencePayload): Observable<gradeLevelChangeSequenceControllerResponse> {\r\n console.log('Changing grade level sequence:', payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, 'change-sequence']);\r\n return this.http.patch<gradeLevelChangeSequenceControllerResponse>(url, payload)\r\n .pipe(\r\n tap((response: gradeLevelChangeSequenceControllerResponse) => {\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 { CideCoreDesignationManagementService } from '../../services/designation-management.service';\nimport { CideCoreGradeLevelManagementService } from '../../../grade-level-management/services/grade-level-management.service';\nimport { CideCoreDepartmentManagementService } from '../../../department-management/services/department-management.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideEleDataGridComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, NotificationService, ConfirmationService } 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-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 CideLytSharedWrapperComponent\n ],\n templateUrl: './designation-list.component.html',\n styleUrls: []\n})\nexport class CideCoreDesignationListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private designationService = inject(CideCoreDesignationManagementService);\n private gradeLevelService = inject(CideCoreGradeLevelManagementService);\n private departmentService = inject(CideCoreDepartmentManagementService);\n private appState = inject(AppStateHelperService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\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('CideCoreDesignationListComponent initialized with modern Angular patterns');\n // Load designations first since department and grade level data is populated in the response\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('🚀 CideCoreDesignationListComponent.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('📥 CideCoreDesignationListComponent 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 \n // Extract and set departments and grade levels from populated data\n this.extractAndSetDepartmentsAndGradeLevels(designationData);\n \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('❌ CideCoreDesignationListComponent error:', err);\n this.error.set(err.message || 'An error occurred while loading designations');\n },\n complete: () => {\n console.log('CideCoreDesignationListComponent loadDesignations completed');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Load departments from service\n */\n loadDepartments(): void {\n console.log('🚀 CideCoreDesignationListComponent.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('📥 CideCoreDesignationListComponent 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('🚀 CideCoreDesignationListComponent.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 * Based on FK relationships: _id (PK) -> sydsg_prent_id_desg (FK) OR sydsg_department_id_sydpt (FK)\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 // Extract unique departments from designation data (since department data is populated)\n const uniqueDepartments = this.extractDepartmentsFromDesignations(designations);\n console.log('🏢 Extracted departments from designations:', uniqueDepartments);\n\n // First, build department hierarchy\n const departmentNodes = this.buildDepartmentHierarchy(uniqueDepartments);\n\n // Build complete designation hierarchy and add to departments\n this.buildAndAddDesignationHierarchy(departmentNodes, designations);\n\n console.log('✅ Final hierarchical data:', departmentNodes);\n return departmentNodes;\n }\n\n /**\n * Extract and set departments and grade levels from populated designation data\n */\n private extractAndSetDepartmentsAndGradeLevels(designations: ICoreSydsg[]): void {\n const departmentMap = new Map<string, ICoreSydept>();\n const gradeLevelMap = new Map<string, ICoreSydsgl>();\n \n designations.forEach(designation => {\n // Extract departments (using type assertion since API response includes populated data)\n const designationWithPopulated = designation as any;\n if (designationWithPopulated.department && designationWithPopulated.department._id) {\n departmentMap.set(designationWithPopulated.department._id, designationWithPopulated.department);\n console.log(`🏢 Found department in designation: ${designationWithPopulated.department.sydept_name}`);\n }\n \n // Extract grade levels\n if (designationWithPopulated.gradeLevel && designationWithPopulated.gradeLevel._id) {\n gradeLevelMap.set(designationWithPopulated.gradeLevel._id, designationWithPopulated.gradeLevel);\n console.log(`📚 Found grade level in designation: ${designationWithPopulated.gradeLevel.sydsgl_name}`);\n }\n });\n \n // Set the extracted data to signals\n this.departments.set(Array.from(departmentMap.values()));\n this.gradeLevels.set(Array.from(gradeLevelMap.values()));\n \n console.log(`🏢 Set ${departmentMap.size} departments and ${gradeLevelMap.size} grade levels from designation data`);\n }\n\n /**\n * Extract unique departments from designation data (since department data is populated in API response)\n */\n private extractDepartmentsFromDesignations(designations: ICoreSydsg[]): ICoreSydept[] {\n const departmentMap = new Map<string, ICoreSydept>();\n \n designations.forEach(designation => {\n const designationWithPopulated = designation as any;\n if (designationWithPopulated.department && designationWithPopulated.department._id) {\n // Use the populated department data from the designation\n departmentMap.set(designationWithPopulated.department._id, designationWithPopulated.department);\n console.log(`🏢 Found department in designation: ${designationWithPopulated.department.sydept_name}`);\n }\n });\n \n const uniqueDepartments = Array.from(departmentMap.values());\n console.log(`🏢 Extracted ${uniqueDepartments.length} unique departments from designations`);\n return uniqueDepartments;\n }\n\n /**\n * Build and add designation hierarchy to department hierarchy\n * This method handles the complete designation hierarchy and adds it to the appropriate departments\n */\n private buildAndAddDesignationHierarchy(departmentNodes: HierarchicalNode[], designations: ICoreSydsg[]): void {\n console.log('🔍 Building and adding designation hierarchy...');\n\n // Create designation nodes map\n const designationMap = new Map<string, HierarchicalNode>();\n \n // First pass: create all designation nodes\n designations.forEach(designation => {\n console.log(`👔 Creating designation node: ${designation.sydsg_name} (${designation._id})`);\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, // Will be updated based on hierarchy\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 || '', designation),\n parentId: null // Will be set based on FK relationships\n };\n\n designationMap.set(designation._id || '', designationNode);\n });\n\n // Second pass: build parent-child relationships\n designations.forEach(designation => {\n const designationNode = designationMap.get(designation._id || '');\n if (!designationNode) return;\n\n if (designation.sydsg_prent_id_desg) {\n // Has parent designation - use designation hierarchy\n const parentNode = designationMap.get(designation.sydsg_prent_id_desg);\n if (parentNode) {\n parentNode.children.push(designationNode);\n parentNode.hasChildren = true;\n designationNode.level = parentNode.level + 1;\n designationNode.parentId = parentNode._id;\n console.log(`📁 Added ${designation.sydsg_name} as child of ${parentNode.name} (level ${designationNode.level})`);\n } else {\n console.log(`⚠️ Parent designation not found for ${designation.sydsg_name}: ${designation.sydsg_prent_id_desg}`);\n }\n }\n });\n\n // Third pass: add root designations to departments\n const rootDesignations = Array.from(designationMap.values()).filter(node => !node.parentId);\n console.log(`🔍 Found ${rootDesignations.length} root designations`);\n\n rootDesignations.forEach(rootDesignation => {\n const designation = designations.find(d => d._id === rootDesignation._id);\n if (designation && designation.sydsg_department_id_sydpt) {\n // Find the department node\n const departmentNode = departmentNodes.find(dept => \n dept._id === `dept_${designation.sydsg_department_id_sydpt}`\n );\n \n if (departmentNode) {\n console.log(`🏢 Adding root designation ${rootDesignation.name} to department ${departmentNode.name}`);\n rootDesignation.level = departmentNode.level + 1;\n rootDesignation.parentId = departmentNode._id;\n departmentNode.children.push(rootDesignation);\n departmentNode.hasChildren = true;\n } else {\n console.log(`⚠️ Department not found for designation ${rootDesignation.name}: ${designation.sydsg_department_id_sydpt}`);\n }\n } else {\n console.log(`⚠️ Root designation ${rootDesignation.name} has no department`);\n }\n });\n\n console.log('✅ Designation hierarchy built and added to departments');\n }\n\n /**\n * Build designation hierarchy based on FK relationships\n * PK: _id, FK: sydsg_prent_id_desg (if set) OR sydsg_department_id_sydpt (if no parent designation)\n */\n private buildDesignationHierarchy(designations: ICoreSydsg[]): HierarchicalNode[] {\n const designationMap = new Map<string, HierarchicalNode>();\n const rootDesignations: HierarchicalNode[] = [];\n\n console.log('🔍 Building designation hierarchy...');\n\n // First pass: create all designation nodes\n designations.forEach(designation => {\n console.log(`👔 Creating designation node: ${designation.sydsg_name} (${designation._id})`);\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, // Will be updated based on hierarchy\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 || '', designation),\n parentId: null // Will be set based on FK relationships\n };\n\n designationMap.set(designation._id || '', designationNode);\n });\n\n // Second pass: build parent-child relationships based on FK\n designations.forEach(designation => {\n const designationNode = designationMap.get(designation._id || '');\n if (!designationNode) return;\n\n // Determine parent based on FK relationships\n let parentId: string | null = null;\n\n if (designation.sydsg_prent_id_desg) {\n // Has parent designation - use designation hierarchy\n parentId = designation.sydsg_prent_id_desg;\n console.log(`📁 ${designation.sydsg_name} has parent designation: ${parentId}`);\n } else if (designation.sydsg_department_id_sydpt) {\n // No parent designation but has department - use department as parent\n parentId = `dept_${designation.sydsg_department_id_sydpt}`;\n console.log(`🏢 ${designation.sydsg_name} belongs to department: ${parentId}`);\n } else {\n console.log(`🔍 ${designation.sydsg_name} has no parent designation and no department`);\n }\n\n designationNode.parentId = parentId;\n\n if (parentId) {\n // Check if parent is a designation or department\n if (parentId.startsWith('dept_')) {\n // Parent is a department - will be handled in addDesignationHierarchyToDepartments\n console.log(`🏢 ${designation.sydsg_name} will be added to department hierarchy`);\n } else {\n // Parent is a designation\n const parentNode = designationMap.get(parentId);\n if (parentNode) {\n parentNode.children.push(designationNode);\n parentNode.hasChildren = true;\n designationNode.level = parentNode.level + 1;\n console.log(`📁 Added ${designation.sydsg_name} as child of ${parentNode.name} (level ${designationNode.level})`);\n } else {\n // Parent designation not found, treat as root\n rootDesignations.push(designationNode);\n console.log(`👔 Added ${designation.sydsg_name} as root (parent designation not found: ${parentId})`);\n }\n }\n } else {\n // No parent - this is a root designation\n rootDesignations.push(designationNode);\n console.log(`👔 Added ${designation.sydsg_name} as root designation`);\n }\n });\n\n console.log(`✅ Built designation hierarchy with ${rootDesignations.length} root designations`);\n console.log(`🔍 Root designations:`, rootDesignations.map(d => ({ id: d._id, name: d.name, parentId: d.parentId })));\n console.log(`🔍 All designation nodes:`, designationMap.size);\n return rootDesignations;\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 designation hierarchy to department hierarchy\n * Designations with department as parent (sydsg_department_id_sydpt) will be added to departments\n */\n private addDesignationHierarchyToDepartments(departmentNodes: HierarchicalNode[], designationNodes: HierarchicalNode[]): void {\n const addDesignationsToNode = (node: HierarchicalNode) => {\n // Find designations that belong to this department\n const departmentId = node._id.replace('dept_', '');\n const departmentDesignations = designationNodes.filter(designationNode => {\n const designation = this.designations().find(d => d._id === designationNode._id);\n return designation && \n designation.sydsg_department_id_sydpt === departmentId && \n !designation.sydsg_prent_id_desg; // Only root designations (no parent designation)\n });\n\n console.log(`📋 Found ${departmentDesignations.length} root designations for department ${node.name}`);\n console.log(`🔍 Department ID: ${departmentId}`);\n console.log(`🔍 Available designation nodes:`, designationNodes.map(d => ({ id: d._id, name: d.name, parentId: d.parentId })));\n console.log(`🔍 Designations data:`, this.designations().map(d => ({ \n id: d._id, \n name: d.sydsg_name, \n deptId: d.sydsg_department_id_sydpt, \n parentId: d.sydsg_prent_id_desg \n })));\n\n if (departmentDesignations.length > 0) {\n node.hasChildren = true;\n\n // Add designations as children and recursively add their children\n departmentDesignations.forEach(designationNode => {\n console.log(`👔 Adding designation: ${designationNode.name} under ${node.name}`);\n \n // Update the designation node to be under this department\n designationNode.level = node.level + 1;\n designationNode.parentId = node._id;\n \n // Recursively add children of this designation\n this.addDesignationChildren(designationNode, designationNodes);\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 * Recursively add children designations to a parent designation\n */\n private addDesignationChildren(parentNode: HierarchicalNode, allDesignationNodes: HierarchicalNode[]): void {\n const children = allDesignationNodes.filter(designationNode => \n designationNode.parentId === parentNode._id\n );\n\n console.log(`📁 Found ${children.length} children for designation ${parentNode.name}`);\n\n if (children.length > 0) {\n parentNode.hasChildren = true;\n\n children.forEach(child => {\n console.log(`👔 Adding child designation: ${child.name} under ${parentNode.name}`);\n \n // Update child level and parent\n child.level = parentNode.level + 1;\n child.parentId = parentNode._id;\n \n // Recursively add children of this child\n this.addDesignationChildren(child, allDesignationNodes);\n \n parentNode.children.push(child);\n });\n }\n }\n\n /**\n * Get grade level name by ID or from designation data\n */\n private getGradeLevelName(gradeLevelId: string, designation?: ICoreSydsg): string {\n console.log('🔍 getGradeLevelName called with ID:', gradeLevelId);\n \n // First try to get from populated gradeLevel data in designation\n if (designation) {\n const designationWithPopulated = designation as any;\n if (designationWithPopulated.gradeLevel && designationWithPopulated.gradeLevel._id === gradeLevelId) {\n console.log('🎯 Found grade level from designation data:', designationWithPopulated.gradeLevel.sydsgl_name);\n return designationWithPopulated.gradeLevel.sydsgl_name || 'N/A';\n }\n }\n \n // Fallback to grade levels signal\n console.log('📚 Available grade levels:', this.gradeLevels());\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 based on FK relationships\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 with confirmation modal\n */\n async deleteDesignation(itemId: string): Promise<void> {\n console.log('🔵 deleteDesignation called with:', itemId);\n \n // Find the designation name for better confirmation message\n const designation = this.designations().find(d => d._id === itemId);\n const designationName = designation?.sydsg_name || 'this designation';\n \n try {\n const confirmed = await this.confirmationService.confirmDelete(designationName);\n \n if (confirmed) {\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.notificationService.success(`Designation \"${designationName}\" deleted successfully`);\n this.loadDesignations();\n } else {\n this.notificationService.error('Failed to delete designation');\n }\n },\n error: (err) => {\n this.notificationService.error(err.message || 'An error occurred while deleting the designation');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n } catch (error) {\n console.error('Error in delete confirmation:', error);\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 * Rename designation\n */\n renameDesignation(itemId: string, currentName: string): void {\n console.log('🔵 renameDesignation called with:', itemId, currentName);\n \n const newName = prompt('Enter new name for designation:', currentName);\n \n if (newName && newName.trim() && newName.trim() !== currentName) {\n this.loading.set(true);\n\n // Get the current designation data\n this.designationService.getDesignationById(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success && response.data) {\n const designation = response.data;\n \n // Update only the name\n const updatedDesignation: Partial<ICoreSydsg> = {\n ...designation,\n sydsg_name: newName.trim()\n };\n\n // Call update service\n this.designationService.updateDesignation(itemId, updatedDesignation)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (updateResponse) => {\n if (updateResponse.success) {\n console.log('✅ Designation renamed successfully');\n this.loadDesignations();\n } else {\n this.error.set(updateResponse.message || 'Failed to rename designation');\n }\n },\n error: (err) => {\n console.error('❌ Error renaming designation:', err);\n this.error.set(err.message || 'Failed to rename designation');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n } else {\n this.error.set('Failed to retrieve designation for renaming');\n this.loading.set(false);\n }\n },\n error: (err) => {\n console.error('❌ Error retrieving designation for rename:', err);\n this.error.set(err.message || 'Failed to retrieve designation');\n this.loading.set(false);\n }\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 with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_designation_list' }\">\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\n 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\n }}</span>\n </div>\n <button cideEleButton variant=\"ghost\" size=\"xs\" type=\"button\" (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\n 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:'\n }}</span>\n <span class=\"tw-text-sm tw-text-green-800 tw-font-semibold\">{{ selectedParentDepartment()?.sydept_name\n }}</span>\n </div>\n <button cideEleButton variant=\"ghost\" size=\"xs\" type=\"button\" (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 id=\"sydsg_name\" label=\"Name*\" formControlName=\"sydsg_name\" placeholder=\"Designation name\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Designation Code -->\n <div>\n <cide-ele-input id=\"sydsg_code\" label=\"Code*\" formControlName=\"sydsg_code\" placeholder=\"DESG001\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Grade Level -->\n <div>\n <cide-ele-select id=\"sydsg_grade_level_id_sydsgl\" label=\"Grade Level*\" [options]=\"gradeLevelOptions()\"\n formControlName=\"sydsg_grade_level_id_sydsgl\" placeholder=\"Select grade level\" size=\"sm\">\n </cide-ele-select>\n </div>\n\n <!-- Department -->\n <div>\n <cide-ele-select id=\"sydsg_department_id_sydpt\" label=\"Department*\" [options]=\"departmentOptions()\"\n formControlName=\"sydsg_department_id_sydpt\" placeholder=\"Select department\" 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 id=\"sydsg_isactive\" type=\"checkbox\" label=\"Active\" 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 id=\"sydsg_description\" label=\"Description\" formControlName=\"sydsg_description\"\n placeholder=\"Designation description\" rows=\"2\" size=\"sm\">\n </cide-ele-textarea>\n </div>\n\n <!-- Entity ID (Hidden) -->\n <div class=\"tw-hidden\">\n <cide-ele-input id=\"desg_entity_id_syen\" label=\"Entity ID*\" formControlName=\"desg_entity_id_syen\"\n placeholder=\"Entity ID\" 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 cideEleButton variant=\"primary\" size=\"sm\" type=\"submit\" [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'\n }}</cide-ele-icon>\n {{ isEditMode() ? 'Update' : 'Add' }}\n </button>\n <button cideEleButton variant=\"outline\" size=\"sm\" type=\"button\" (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 <!-- 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\"\n 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 [config]=\"gridConfig()\" [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\" [serverSidePagination]=\"true\" [totalServerItems]=\"totalItems()\"\n [currentServerPage]=\"currentPage()\" [currentServerPageSize]=\"pageSize()\" (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 [class]=\"row.type === 'department' ? 'tw-text-green-500' : 'tw-text-blue-500'\" 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\" [title]=\"row.name\">\n {{ row.name || 'Untitled' }}\n </div>\n @if (row.type === 'department') {\n <span\n 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\" [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\n 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 [items]=\"getDropdownItems(row)\" [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n </ng-template>\n</cide-lyt-shared-wrapper>","// 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 { gradeLevelChangeSequenceControllerResponse, ICoreSydsgl, MGradeLevelChangeSequencePayload, MGradeLevelGetByIdPayload } from 'cloud-ide-lms-model';\nimport { CideCoreGradeLevelManagementService } from '../../services/grade-level-management.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideIconComponent, CideInputComponent, CideEleDataGridComponent, CideSelectComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, NotificationService, ConfirmationService, CideEleConfirmationModalComponent } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\n\n@Component({\n selector: 'cide-core-grade-level-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 CideLytSharedWrapperComponent,\n CideEleConfirmationModalComponent\n ],\n templateUrl: './grade-level-list.component.html',\n styleUrls: []\n})\nexport class CideCoreGradeLevelListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private gradeLevelService = inject(CideCoreGradeLevelManagementService);\n private appState = inject(AppStateHelperService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\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\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 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('CideCoreGradeLevelListComponent 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('🚀 CideCoreGradeLevelListComponent.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('📥 CideCoreGradeLevelListComponent 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\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('❌ CideCoreGradeLevelListComponent error:', err);\n this.error.set(err.message || 'An error occurred while loading grade levels');\n },\n complete: () => {\n console.log('CideCoreGradeLevelListComponent 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 // Create a completely new config object to ensure change detection triggers\n const newConfig: GridConfiguration<ICoreSydsgl> = {\n ...this.gridConfig(),\n data: [...gradeLevels] // Create a new array to ensure reference change\n };\n\n this.gridConfig.set(newConfig);\n console.log('⚙️ Updated grid config with grade levels - new reference created');\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[]; allOrders?: ICoreSydsgl[] }): void {\n console.log('🔄 Grade level reorder event:', data);\n\n\n // Mark that order has changed\n this.hasOrderChanged.set(true);\n console.log('🔄 Order change detected');\n }\n\n /**\n * Update grid data after reordering\n */\n private updateGridDataAfterReorder() {\n // Create a completely new config object to ensure change detection triggers\n const newConfig: GridConfiguration<ICoreSydsgl> = {\n ...this.gridConfig(),\n data: [...this.gradeLevels()] // Create a new array to ensure reference change\n };\n\n this.gridConfig.set(newConfig);\n console.log('⚙️ Updated grid config after reorder - new reference created');\n }\n\n /**\n * Save grade level order using the change sequence API\n * This method is called by the data grid when save-order action is triggered\n */\n saveGradeLevelOrder() {\n console.log('💾 Saving grade level order...');\n // The data grid will handle the order comparison and only call this if there are actual changes\n // We just need to prepare the payload and make the API call\n\n // Prepare payload for change sequence API with all current grade levels\n const payload: MGradeLevelChangeSequencePayload = {\n grade_level_sequences: this.gradeLevels().map(item => ({\n sydsgl_id: item._id || '',\n sydsgl_order: item.sydsgl_order || 1\n }))\n };\n\n console.log('📤 Sending change sequence payload:', payload);\n\n // Call the change sequence API\n this.gradeLevelService.changeGradeLevelSequence(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: gradeLevelChangeSequenceControllerResponse) => {\n if (response.success) {\n console.log('✅ Grade level sequence updated successfully');\n this.notificationService.success('Grade level sequence updated successfully');\n // Reset change flag first\n this.hasOrderChanged.set(false);\n // Refresh the grade level list from server to get updated order\n this.loadGradeLevels();\n } else {\n console.error('❌ Failed to update grade level sequence:', response);\n this.error.set('Failed to update grade level sequence');\n this.notificationService.error('Failed to update grade level sequence');\n }\n },\n error: (error) => {\n console.error('❌ Error updating grade level sequence:', error);\n this.error.set('Failed to update grade level sequence');\n this.notificationService.error(`Error updating grade level sequence: ${error.message || 'Unknown error occurred'}`);\n }\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 // Reset the change flag\n this.hasOrderChanged.set(false);\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\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 const payload: MGradeLevelGetByIdPayload = { sydsgl_id: itemId };\n this.gradeLevelService.getGradeLevelById(payload)\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 with confirmation dialog\n */\n async deleteGradeLevel(itemId: string): Promise<void> {\n console.log('🔵 deleteGradeLevel called with:', itemId);\n \n // Find the grade level to get its name for the confirmation\n const gradeLevel = this.gradeLevels().find(item => item._id === itemId);\n const gradeLevelName = gradeLevel?.sydsgl_name || 'this grade level';\n \n try {\n // Show confirmation dialog with grade level name\n const confirmed = await this.confirmationService.confirmDelete(gradeLevelName);\n \n if (confirmed) {\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.notificationService.success(`Grade level \"${gradeLevelName}\" has been deleted successfully.`);\n this.loadGradeLevels();\n } else {\n this.error.set('Failed to delete grade level');\n this.notificationService.error('Failed to delete grade level. Please try again.');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while deleting the grade level');\n this.notificationService.error(`Error deleting grade level: ${err.message || 'Unknown error occurred'}`);\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n } catch (error) {\n console.log('🔵 Delete operation cancelled by user');\n }\n }\n\n /**\n * Delete multiple grade levels with confirmation dialog\n */\n async deleteMultipleGradeLevels(): Promise<void> {\n const selectedIds = this.selectedItems();\n if (selectedIds.length === 0) {\n this.notificationService.warning('Please select grade levels to delete.');\n return;\n }\n\n // Get names of selected grade levels for confirmation\n const selectedGradeLevels = this.gradeLevels().filter(item => selectedIds.includes(item._id || ''));\n const gradeLevelNames = selectedGradeLevels.map(item => item.sydsgl_name).join(', ');\n \n const count = selectedIds.length;\n \n try {\n const confirmed = await this.confirmationService.ask({\n title: 'Confirm Bulk Delete',\n message: `Are you sure you want to delete ${count} grade level${count > 1 ? 's' : ''}?\\n\\nSelected: ${gradeLevelNames}\\n\\nThis action cannot be undone.`,\n type: 'danger',\n icon: 'delete_forever',\n confirmText: `Delete ${count} Item${count > 1 ? 's' : ''}`,\n cancelText: 'Cancel'\n });\n\n if (confirmed) {\n this.loading.set(true);\n\n this.gradeLevelService.deleteMultipleGradeLevels(selectedIds)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.notificationService.success(`${count} grade level${count > 1 ? 's' : ''} deleted successfully.`);\n this.selectedItems.set([]);\n this.loadGradeLevels();\n } else {\n this.error.set('Failed to delete grade levels');\n this.notificationService.error('Failed to delete grade levels. Please try again.');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while deleting grade levels');\n this.notificationService.error(`Error deleting grade levels: ${err.message || 'Unknown error occurred'}`);\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n } catch (error) {\n console.log('🔵 Bulk delete operation cancelled by user');\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 with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_grade_level_list' }\">\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 <!-- 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>\n\n<!-- Confirmation Modal -->\n</cide-lyt-shared-wrapper>\n<cide-ele-confirmation-modal></cide-ele-confirmation-modal> ","// 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 CideCorePageManagementService {\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('CideCorePageManagementService 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 { CideCorePageManagementService } from '../../services/page-management.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideIconComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem } from 'cloud-ide-element';\nimport { CideEleDataGridComponent } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { ICoreSypg, systemPagesControllerResponse, generateStringFromObject, MSystemPages } from 'cloud-ide-lms-model';\n\n@Component({\n selector: 'cide-core-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 CideCorePageListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private pageService = inject(CideCorePageManagementService);\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: MSystemPages = {\n pageIndex: this.currentPage(),\n pageSize: this.pageSize(),\n pagination: true,\n query: 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 this.searchTerm.set(event.data as string);\n this.currentPage.set(1);\n this.loadPages();\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 CideCorePageThemeService {\r\n private apiUrl = `${coreRoutesUrl?.pageTheme}`;\r\n\r\n constructor(private http: HttpClient) {\r\n console.log('CideCorePageThemeService 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('CideCorePageThemeService 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 { CideCorePageThemeService } from '../../services/page-theme.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideEleDataGridComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, CideEleJsonEditorComponent, CideSelectOptionComponent, CideEleFileInputComponent, FileUploadData, CideEleFileImageDirective } 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-page-theme',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideEleButtonComponent,\n CideInputComponent,\n CideSelectComponent,\n CideTextareaComponent,\n CideIconComponent,\n CideEleDropdownComponent,\n CideEleJsonEditorComponent,\n CideEleFileInputComponent,\n CideEleFileImageDirective,\n],\n templateUrl: './page-theme.component.html',\n styleUrls: []\n})\nexport class CideCorePageThemeComponent implements OnInit {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private themeService = inject(CideCorePageThemeService);\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\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 this.searchTerm.set(event.data as string);\n this.currentPage.set(1);\n this.loadThemes();\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 this.goBack();\n }\n\n /**\n * Go back to page list\n */\n goBack(): void {\n console.log('🔍 [PageThemeComponent] goBack() called');\n console.log('🔍 [PageThemeComponent] Current route:', this.router.url);\n \n // Try to navigate back to the page management route\n this.router.navigate(['/core/page']).then(success => {\n console.log('🔍 [PageThemeComponent] Navigation result:', success);\n if (!success) {\n console.log('🔍 [PageThemeComponent] Navigation failed, using browser back');\n window.history.back();\n }\n }).catch(error => {\n console.error('🔍 [PageThemeComponent] Navigation error:', error);\n // Fallback: try to go back in browser history\n window.history.back();\n });\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\n // File upload methods for preview image\n getPreviewImageUploadData(): FileUploadData {\n return {\n altText: 'Theme Preview Image',\n cyfm_name: 'theme-preview-image',\n cyfm_alt_text: 'Theme Preview Image',\n cyfm_type: 'image',\n cyfm_permissions: ['read'],\n cyfm_tags: ['theme', 'preview', 'image']\n };\n }\n\n onPreviewImageUploadSuccess(fileId: string): void {\n console.log('Preview image uploaded successfully:', fileId);\n // Update the form control with the uploaded file ID\n this.themeForm.patchValue({\n sytm_preview_id_fm: fileId\n });\n }\n\n onPreviewImageUploadError(error: string): void {\n console.error('Preview image upload error:', error);\n this.error.set('Failed to upload preview image: ' + error);\n }\n\n onPreviewImageUploadProgress(progress: number): void {\n console.log('Preview image upload progress:', progress + '%');\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-2 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-2 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-3 tw-bg-white tw-overflow-auto\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-2\">\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 lg:tw-grid-cols-[1fr_200px] tw-gap-4\">\r\n <!-- Left Side: All Input Fields -->\r\n <div class=\"tw-space-y-4\">\r\n <!-- Row 1: Theme Title and Theme Code -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\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 <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 </div>\r\n \r\n <!-- Row 2: Sub Title and Active Status -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\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 <div class=\"tw-space-y-2 tw-flex tw-items-center\">\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 </div>\r\n \r\n <!-- Row 3: Description -->\r\n <div class=\"tw-space-y-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 </div>\r\n \r\n <!-- Right Side: File Upload -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-start tw-items-center tw-p-0\">\r\n <cide-ele-file-input \r\n id=\"sytm_preview_id_fm\" \r\n formControlName=\"sytm_preview_id_fm\"\r\n accept=\"image/*\"\r\n [showPreview]=\"true\"\r\n [previewBoxMode]=\"true\"\r\n [showFileName]=\"false\"\r\n previewWidth=\"180px\"\r\n previewHeight=\"120px\"\r\n placeholderText=\"Upload Preview Image\"\r\n placeholderIcon=\"image\"\r\n [autoUpload]=\"true\"\r\n [uploadData]=\"getPreviewImageUploadData()\"\r\n (uploadSuccess)=\"onPreviewImageUploadSuccess($event)\"\r\n (uploadError)=\"onPreviewImageUploadError($event)\"\r\n (uploadProgressChange)=\"onPreviewImageUploadProgress($event)\">\r\n </cide-ele-file-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Configuration JSON -->\r\n <div class=\"tw-space-y-2\">\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 -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\r\n <div class=\"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 \r\n <!-- Drawer Configuration -->\r\n <div class=\"tw-space-y-2\">\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 (theme.sytm_preview_id_fm) {\r\n <img \r\n cideEleFileImage \r\n [fileId]=\"theme.sytm_preview_id_fm\" \r\n [altText]=\"'Theme Preview'\"\r\n class=\"tw-w-full tw-h-full tw-object-cover\" />\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 CideCorePageControlsService {\r\n constructor(private http: HttpClient) {\r\n console.log('CideCorePageControlsService 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('CideCorePageControlsService 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';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, NonNullableFormBuilder, FormsModule } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { CideCorePageControlsService } from '../../services/page-controls.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideEleDropdownComponent, DropdownItem, CideFormFieldErrorComponent } from 'cloud-ide-element';\nimport { controlType, generateObjectFromString, ICoreSype, MPageElements, MPageElementsInsertUpdatePayload, themeSize } from 'cloud-ide-lms-model';\n\n@Component({\n selector: 'cide-core-page-controls',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideEleButtonComponent,\n CideInputComponent,\n CideSelectComponent,\n CideIconComponent,\n CideFormFieldErrorComponent\n ],\n templateUrl: './page-controls.component.html',\n styleUrls: ['./page-controls.component.scss']\n})\nexport class CideCorePageControlsComponent implements OnInit {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private controlsService = inject(CideCorePageControlsService);\n private appState = inject(AppStateHelperService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n\n\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n controls = signal<ICoreSype[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Page information\n pageId = signal<string>('');\n pageTitle = signal<string>('');\n\n // Form state\n isEditMode = signal(false);\n editingControlId = signal<string | null>(null);\n retrievedControl = signal<ICoreSype | null>(null);\n\n // Control selection for new layout\n selectedControlId = signal<string | 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 - No validators for simplicity\n controlForm = this.fb.group({\n sype_key: [''],\n sype_label: [''],\n sype_label_hide: [false],\n sype_auto_complete: [false], // Changed to boolean for checkbox\n sype_hide_helper_and_error_text: [false],\n sype_type: [''], // controlType\n sype_option_key: [''],\n sype_placeholder: [''],\n sype_min_length: [0],\n sype_max_length: [20],\n sype_regex: [''],\n sype_required: [false],\n sype_disabled: [false],\n sype_width: [''], // Changed to string for px values like \"20px\"\n sype_height: [''], // Changed to string for px values like \"20px\"\n sype_label_placement: ['left' as 'floating' | 'fixed'],\n sype_helper_text_collapse: [false],\n sype_default: ['' as string | number | boolean],\n sype_tooltip: [''],\n sype_size: ['sm' as themeSize], // Changed default to small\n sype_leading_icon: [''],\n sype_isactive: [true],\n sype_entity_id_syen: ['']\n });\n\n // Computed values\n isFormDirty = computed(() => this.controlForm.dirty);\n\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 const queryParams = params['query'];\n const queryData = generateObjectFromString(queryParams);\n this.pageId.set(queryData?.sypg_id || '');\n this.pageTitle.set(queryData?.sypg_title || '');\n\n if (this.pageId()) {\n this.loadControls();\n this.setupFormSubscriptions();\n this.setEntityIdFromAppState();\n } else {\n this.error.set('No page ID provided');\n }\n });\n }\n\n /**\n * Set entity ID from app state - auto-assigned internally\n */\n private setEntityIdFromAppState(): void {\n const entityId = this.appState.getActiveEntityId();\n if (entityId) {\n this.controlForm.patchValue({\n sype_entity_id_syen: entityId\n });\n // Disable the entity field since it's auto-assigned\n this.controlForm.get('sype_entity_id_syen')?.disable();\n }\n }\n\n /**\n * Load controls from API\n */\n private loadControls(): void {\n this.loading.set(true);\n this.error.set(null);\n\n const request: MPageElements = {\n sype_page_id_sypg: this.pageId()\n };\n\n this.controlsService.getControlList(request)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.controls.set(response.data || []);\n this.totalItems.set(response.total || 0);\n } else {\n this.error.set(response.message || 'Failed to load controls');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error loading controls:', error);\n this.error.set('Failed to load controls. 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.controlForm.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n // Form validation is handled by computed signals\n });\n }\n\n\n\n /**\n * Create new control\n */\n createControl(): void {\n\n const formValue = this.controlForm.getRawValue();\n const entityId = this.appState.getActiveEntityId();\n\n const newControl: MPageElementsInsertUpdatePayload = {\n _id: '',\n sype_key: formValue.sype_key,\n sype_page_id_sypg: this.pageId(),\n sype_label: formValue.sype_label,\n sype_label_hide: formValue.sype_label_hide,\n sype_auto_complete: formValue.sype_auto_complete,\n sype_hide_helper_and_error_text: formValue.sype_hide_helper_and_error_text,\n sype_type: formValue.sype_type as controlType,\n sype_option_key: formValue.sype_option_key,\n sype_placeholder: formValue.sype_placeholder,\n sype_min_length: formValue.sype_min_length,\n sype_max_length: formValue.sype_max_length,\n sype_regex: formValue.sype_regex,\n sype_required: formValue.sype_required,\n sype_disabled: formValue.sype_disabled,\n sype_width: formValue.sype_width,\n sype_height: formValue.sype_height,\n sype_label_placement: formValue.sype_label_placement,\n sype_helper_text_collapse: formValue.sype_helper_text_collapse,\n sype_default: formValue.sype_default,\n sype_tooltip: formValue.sype_tooltip,\n sype_size: formValue.sype_size,\n sype_leading_icon: formValue.sype_leading_icon,\n sype_isactive: formValue.sype_isactive,\n sype_entity_id_syen: entityId || formValue.sype_entity_id_syen\n };\n\n this.loading.set(true);\n this.controlsService.createControl(newControl)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.resetForm();\n this.loadControls();\n console.log('Control created successfully');\n } else {\n console.error(response.message || 'Failed to create control');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error creating control:', error);\n console.error('Failed to create control. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Update existing control\n */\n updateControl(): void {\n if (!this.editingControlId()) {\n return;\n }\n\n const formValue = this.controlForm.getRawValue();\n const entityId = this.appState.getActiveEntityId();\n\n const updatedControl: MPageElementsInsertUpdatePayload = {\n _id: this.editingControlId()!,\n sype_key: formValue.sype_key,\n sype_page_id_sypg: this.pageId(),\n sype_label: formValue.sype_label,\n sype_label_hide: formValue.sype_label_hide,\n sype_auto_complete: Boolean(formValue.sype_auto_complete),\n sype_hide_helper_and_error_text: formValue.sype_hide_helper_and_error_text,\n sype_type: formValue.sype_type as controlType,\n sype_option_key: formValue.sype_option_key,\n sype_placeholder: formValue.sype_placeholder,\n sype_min_length: formValue.sype_min_length,\n sype_max_length: formValue.sype_max_length,\n sype_regex: formValue.sype_regex,\n sype_required: formValue.sype_required,\n sype_disabled: formValue.sype_disabled,\n sype_width: formValue.sype_width,\n sype_height: formValue.sype_height,\n sype_label_placement: formValue.sype_label_placement,\n sype_helper_text_collapse: formValue.sype_helper_text_collapse,\n sype_default: formValue.sype_default,\n sype_tooltip: formValue.sype_tooltip,\n sype_size: formValue.sype_size,\n sype_leading_icon: formValue.sype_leading_icon,\n sype_isactive: formValue.sype_isactive,\n sype_entity_id_syen: entityId || formValue.sype_entity_id_syen\n };\n\n this.loading.set(true);\n this.controlsService.updateControl(updatedControl)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.resetForm();\n this.loadControls();\n console.log('Control updated successfully');\n } else {\n console.error(response.message || 'Failed to update control');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error updating control:', error);\n console.error('Failed to update control. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Edit control\n */\n editControl(control: ICoreSype): void {\n this.isEditMode.set(true);\n this.editingControlId.set(control._id || null);\n this.retrievedControl.set(control);\n\n this.controlForm.patchValue({\n sype_key: control.sype_key,\n sype_label: control.sype_label,\n sype_label_hide: control.sype_label_hide,\n sype_auto_complete: control.sype_auto_complete ? true : false,\n sype_hide_helper_and_error_text: control.sype_hide_helper_and_error_text,\n sype_type: control.sype_type,\n sype_option_key: control.sype_option_key,\n sype_placeholder: control.sype_placeholder,\n sype_min_length: control.sype_min_length,\n sype_max_length: control.sype_max_length,\n sype_regex: control.sype_regex,\n sype_required: control.sype_required,\n sype_disabled: control.sype_disabled,\n sype_width: control.sype_width?.toString() || '',\n sype_height: control.sype_height?.toString() || '',\n sype_label_placement: control.sype_label_placement,\n sype_helper_text_collapse: control.sype_helper_text_collapse,\n sype_default: control.sype_default as string | number | boolean,\n sype_tooltip: control.sype_tooltip,\n sype_size: control.sype_size as themeSize,\n sype_leading_icon: control.sype_leading_icon,\n sype_isactive: control.sype_isactive,\n sype_entity_id_syen: String(control.sype_entity_id_syen || '')\n });\n\n this.controlForm.markAsPristine();\n }\n\n /**\n * Delete control\n */\n deleteControl(control: ICoreSype): void {\n if (confirm(`Are you sure you want to delete the control \"${control.sype_label}\"?`)) {\n this.loading.set(true);\n this.controlsService.deleteControl(control._id || '')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadControls();\n console.log('Control deleted successfully');\n } else {\n console.error(response.message || 'Failed to delete control');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error deleting control:', error);\n console.error('Failed to delete control. Please try again.');\n this.loading.set(false);\n }\n });\n }\n }\n\n /**\n * Toggle control status\n */\n toggleControlStatus(control: ICoreSype): void {\n this.loading.set(true);\n this.controlsService.toggleControlStatus({ sype_id: control._id || '', sype_isactive: !control.sype_isactive })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadControls();\n console.log(`Control ${control.sype_isactive ? 'deactivated' : 'activated'} successfully`);\n } else {\n console.error(response.message || 'Failed to toggle control status');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error toggling control status:', error);\n console.error('Failed to toggle control status. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Save control (create or update)\n */\n saveControl(): void {\n if (this.isEditMode()) {\n this.updateControl();\n } else {\n this.createControl();\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 const entityId = this.appState.getActiveEntityId();\n\n this.controlForm.reset({\n sype_key: '',\n sype_label: '',\n sype_label_hide: false,\n sype_auto_complete: false,\n sype_hide_helper_and_error_text: false,\n sype_type: '',\n sype_option_key: '',\n sype_placeholder: '',\n sype_min_length: 0,\n sype_max_length: 20,\n sype_regex: '',\n sype_required: false,\n sype_disabled: false,\n sype_width: '',\n sype_height: '',\n sype_label_placement: 'floating',\n sype_helper_text_collapse: false,\n sype_default: '' as string | number | boolean,\n sype_tooltip: '',\n sype_size: 'md',\n sype_leading_icon: '',\n sype_isactive: true,\n sype_entity_id_syen: entityId || ''\n });\n this.isEditMode.set(false);\n this.editingControlId.set(null);\n this.retrievedControl.set(null);\n this.controlForm.markAsPristine();\n this.controlForm.markAsUntouched();\n }\n\n /**\n * Mark form as touched to trigger validation display\n */\n private markFormAsTouched(): void {\n Object.keys(this.controlForm.controls).forEach(key => {\n const control = this.controlForm.get(key);\n control?.markAsTouched();\n });\n }\n\n /**\n * Get dropdown items for actions\n */\n getActionDropdownItems(control: ICoreSype): DropdownItem[] {\n return [\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit'\n },\n {\n id: 'toggle',\n label: control.sype_isactive ? 'Deactivate' : 'Activate',\n icon: control.sype_isactive ? 'block' : 'check_circle'\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete'\n }\n ];\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, control: ICoreSype): void {\n switch (item.id) {\n case 'edit':\n this.editControl(control);\n break;\n case 'toggle':\n this.toggleControlStatus(control);\n break;\n case 'delete':\n this.deleteControl(control);\n break;\n }\n }\n\n /**\n * Close all dropdowns\n */\n closeAllDropdowns(): void {\n // This method can be used to close dropdowns if needed\n }\n\n // New methods for the vertical layout\n selectControl(control: ICoreSype): void {\n this.selectedControlId.set(control._id || null);\n console.log('Selected control:', control);\n }\n\n trackByControlId(index: number, control: ICoreSype): string {\n return control._id || '';\n }\n} ","<!-- Page Controls Container -->\n<div class=\"tw-flex tw-flex-col tw-h-full tw-bg-gray-50\">\n <!-- Header Section -->\n <div class=\"tw-bg-white tw-border-b tw-border-gray-200 tw-px-6 tw-py-4\">\n <div class=\"tw-flex tw-items-center tw-justify-between\">\n <div class=\"tw-flex tw-items-center tw-space-x-4\">\n <button \n cideEleButton\n variant=\"ghost\"\n size=\"sm\"\n (click)=\"goBack()\"\n class=\"tw-flex tw-items-center tw-justify-center tw-w-8 tw-h-8 tw-text-gray-600 hover:tw-text-gray-900 hover:tw-bg-gray-100 tw-rounded-md tw-transition-colors\">\n <cide-ele-icon>arrow_back</cide-ele-icon>\n </button>\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-xl\">settings</cide-ele-icon>\n <div>\n <h1 class=\"tw-text-xl tw-font-semibold tw-text-gray-900 tw-mb-0\">Control Management</h1>\n <p class=\"tw-text-sm tw-text-gray-500 tw-mb-0\">Page: {{ pageTitle() }}</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Error Message -->\n <div class=\"tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md tw-p-4 tw-mx-6 tw-mt-4 tw-flex tw-items-start tw-space-x-3\" *ngIf=\"error()\">\n <cide-ele-icon class=\"tw-text-red-500 tw-flex-shrink-0 tw-mt-0.5\">error</cide-ele-icon>\n <div>\n <h3 class=\"tw-text-red-800 tw-font-medium tw-mb-1\">Error</h3>\n <p class=\"tw-text-red-700 tw-text-sm tw-mb-0\">{{ error() }}</p>\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-flex tw-flex-1 tw-gap-6 tw-p-6 tw-overflow-hidden lg:tw-flex-row tw-flex-col\">\n <!-- Form Section -->\n <div class=\"tw-w-full lg:tw-w-3/5 tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-flex tw-flex-col\">\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-p-6 tw-border-b tw-border-gray-200\">\n <cide-ele-icon class=\"tw-text-blue-600\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h3 class=\"tw-text-lg tw-font-medium tw-text-gray-900 tw-mb-0\">{{ isEditMode() ? 'Edit Control' : 'Quick Add Control' }}</h3>\n </div>\n\n <!-- Form -->\n <form [formGroup]=\"controlForm\" (ngSubmit)=\"saveControl()\" class=\"tw-flex tw-flex-col tw-flex-1 tw-p-6 tw-overflow-y-auto\">\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-4 tw-mb-6\">\n \n <!-- Basic Information Section -->\n <!-- Control Key -->\n <div class=\"tw-space-y-1\">\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=\"tw-space-y-1\">\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=\"tw-space-y-1\">\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=\"tw-space-y-1\">\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=\"tw-space-y-1\">\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=\"tw-space-y-1\">\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=\"tw-space-y-1\">\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=\"tw-col-span-2 tw-flex tw-gap-4\">\n <div class=\"tw-flex-1 tw-space-y-1\">\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=\"tw-flex-1 tw-space-y-1\">\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=\"tw-col-span-2 tw-flex tw-gap-4\">\n <div class=\"tw-flex-1 tw-space-y-1\">\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=\"tw-flex-1 tw-space-y-1\">\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=\"tw-col-span-2 tw-flex tw-gap-4\">\n <div class=\"tw-flex-1 tw-space-y-1\">\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=\"tw-flex-1 tw-space-y-1\">\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=\"tw-space-y-1\">\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=\"tw-space-y-1\">\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=\"tw-space-y-1\">\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=\"tw-space-y-1\">\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=\"tw-space-y-1\" 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=\"tw-col-span-2 tw-space-y-1\">\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mb-3\">Control Options</h6>\n <div class=\"tw-grid tw-grid-cols-1 sm:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-3\">\n \n <!-- Required -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\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=\"tw-flex tw-items-center tw-space-x-2\">\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=\"tw-flex tw-items-center tw-space-x-2\">\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=\"tw-flex tw-items-center tw-space-x-2\">\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=\"tw-flex tw-items-center tw-space-x-2\">\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=\"tw-flex tw-justify-between tw-items-center tw-pt-4 tw-border-t tw-border-gray-200 tw-mt-auto\">\n <!-- Error Message (Left Side) -->\n <cide-form-field-error [formGroup]=\"controlForm\"></cide-form-field-error>\n \n <!-- Action Buttons (Right Side) -->\n <div class=\"tw-flex tw-gap-3\">\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 </div>\n </form>\n </div>\n\n <!-- Controls List Section -->\n <div class=\"tw-w-full lg:tw-w-2/5 tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-flex tw-flex-col lg:tw-max-h-none tw-max-h-96\">\n <div class=\"tw-p-6 tw-border-b tw-border-gray-200\">\n <h3 class=\"tw-text-lg tw-font-medium tw-text-gray-900 tw-mb-1\">Page Controls</h3>\n <p class=\"tw-text-sm tw-text-gray-500 tw-mb-0\">Controls connected to this page</p>\n </div>\n \n <div class=\"tw-flex-1 tw-overflow-y-auto tw-p-4\" *ngIf=\"!loading() && controls().length > 0\">\n <div \n class=\"tw-bg-gray-50 tw-border tw-border-gray-200 tw-rounded-lg tw-p-4 tw-mb-3 tw-cursor-pointer tw-transition-all tw-duration-200 hover:tw-shadow-md hover:tw-border-gray-300 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500 focus:tw-ring-offset-2\" \n *ngFor=\"let control of controls(); trackBy: trackByControlId\"\n [class.tw-bg-blue-50]=\"selectedControlId() === control._id\"\n [class.tw-border-blue-300]=\"selectedControlId() === control._id\"\n [class.tw-shadow-md]=\"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=\"tw-flex tw-items-start tw-space-x-3\">\n <div class=\"tw-flex-shrink-0 tw-w-10 tw-h-10 tw-bg-blue-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-text-blue-600\">settings_input_component</cide-ele-icon>\n </div>\n <div class=\"tw-flex-1 tw-min-w-0\">\n <h4 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mb-1 tw-truncate\">{{ control.sype_label || control.sype_key }}</h4>\n <p class=\"tw-text-xs tw-text-gray-500 tw-mb-2 tw-truncate\">{{ control.sype_tooltip || 'No tooltip' }}</p>\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\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-gray-100 tw-text-gray-800\">{{ control.sype_type }}</span>\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\" \n [class.tw-bg-red-100]=\"!control.sype_isactive\"\n [class.tw-text-red-800]=\"!control.sype_isactive\"\n [class.tw-bg-green-100]=\"control.sype_isactive\"\n [class.tw-text-green-800]=\"control.sype_isactive\">\n {{ control.sype_isactive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n </div>\n <div class=\"tw-flex tw-items-center tw-space-x-1 tw-opacity-0 tw-transition-opacity tw-duration-200 group-hover:tw-opacity-100\" \n [class.tw-opacity-100]=\"selectedControlId() === control._id\">\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 </div>\n </div>\n\n <div class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-py-12 tw-text-center\" *ngIf=\"!loading() && controls().length === 0\">\n <cide-ele-icon class=\"tw-text-4xl tw-text-gray-300 tw-mb-4\">settings_input_component</cide-ele-icon>\n <p class=\"tw-text-gray-500 tw-font-medium tw-mb-1\">No controls available</p>\n <small class=\"tw-text-gray-400\">Create controls using the form on the left</small>\n </div>\n\n <div class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-py-12 tw-text-center\" *ngIf=\"loading()\">\n <cide-ele-icon class=\"tw-text-2xl tw-text-blue-500 tw-mb-4 tw-animate-spin\">refresh</cide-ele-icon>\n <p class=\"tw-text-gray-500\">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 { Component, inject, signal, OnInit, OnDestroy, DestroyRef, ChangeDetectorRef, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, FormsModule, Validators, FormArray, AbstractControl, ValidationErrors } from '@angular/forms';\n// import { ActivatedRoute, Router } from '@angular/router';\n// import { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n// import { CideTextareaComponent, CideEleButtonComponent, CideEleTabComponent, TabItem, CideSelectComponent, CideEleDataGridComponent, GridConfiguration, GridEvent, TemplateContext, CideEleToastNotificationComponent } from 'cloud-ide-element';\n// import {\n// CideCoreUserMasterService\n// } from '../../services';\n// import { CideInputComponent } from 'cloud-ide-element';\n// import { CideCoreUserRoleService } from '../../../user-role-management/services/user-role.service';\n// import { CideIconComponent, CideEleFileInputComponent, CideEleFileImageDirective } from \"cloud-ide-element\";\n// import { MenuManagementService } from '../../../menu-management';\n// import { TemplateRef, viewChild } from '@angular/core';\nimport {\n authUserMstGetByIdControllerResponse, AuthUserMstGetByIdPayload,\n generateObjectFromString, customEncrypt, CoreSystemEntityListResponse,\n AuthUserMstGetByIdData, ICoreSydsg, ICoreSydept, designationControllerResponse,\n AuthUserCoreEntityMapping, \n // CoreEntityMapping, pinCodeSelectControllerResponse,\n // pinCodeSelectResponseData, countryListControllerResponse, ICoreSyctr,\n // AuthUserMstCreatePayload, AuthUserMst, generalMasterListControllerResponse,\n ICoreSygms,\n // AuthUserCoreUserContactAddresses, CoreUserContactAddresses,\n // AuthUserCoreUserDocuments, AuthUserCoreUserFamilyDetails, customDecrypt, \n ICoreSyme,\n // MMenuListPayload, IGeneralMasterListRequest,\n // CoreUserRoleResponse,\n // CoreUserRoleRightsResponse,\n // CoreUserRolePermissionData,\n // selectSearchType,\n // CoreUserRoleExceptionsMapping,\n // inputType,\n CoreEntityAccessPassManagement\n} from 'cloud-ide-lms-model';\n// import { AppStateHelperService } from 'cloud-ide-layout';\n// import { CideLytFloatingEntityRightsSharingService } from 'cloud-ide-layout';\n// import { CideEleFloatingFeaturesService, CideEleFileManagerService } from 'cloud-ide-element';\n// import { NotificationService } from 'cloud-ide-element';\n// import { mongooseObjectIdCreateControllerResponse } from 'cloud-ide-element';\n// import { CideCoreEntityManagementService } from '../../../entity-management';\n// import { CideCoreDepartmentManagementService } from '../../../department-management';\n// import { CideCoreDesignationManagementService } from '../../../designation-management';\n// import { CideCoreGeneralMasterService } from '../../../general-master-management';\n// import { CideCoreGeneralMasterTypeService } from '../../../general-master-management/services/general-master-type.service';\n// import { CideCorePinCodeService } from '../../../shared/services/pin-code.service';\n// import { CideCoreCountryService } from '../../../shared/services/country.service';\nimport { CoreUserRoleExceptions } from 'cloud-ide-lms-model';\n\n// Extended interface for role exceptions with tracking properties\ninterface CoreUserRoleExceptionsWithTracking extends CoreUserRoleExceptions {\n _isUserAdded?: boolean;\n _isUserRemoved?: boolean;\n _changeType?: string;\n}\n\n@Component({\n selector: 'cide-core-user-create',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n // CideInputComponent,\n // CideSelectComponent,\n // CideTextareaComponent,\n // CideEleButtonComponent,\n // CideEleTabComponent,\n // CideEleFileInputComponent,\n // CideEleFileImageDirective,\n // CideIconComponent,\n // CideEleDataGridComponent,\n // CideEleToastNotificationComponent\n ],\n templateUrl: './user-create.component.html'\n})\n\nexport class CideCoreUserCreateComponent {\n // // Dependency injection\n // private destroyRef = inject(DestroyRef);\n // private fb = inject(FormBuilder);\n // private cdr = inject(ChangeDetectorRef);\n // private userMasterService = inject(CideCoreUserMasterService);\n // private entityService = inject(CideCoreEntityManagementService);\n // private designationService = inject(CideCoreDesignationManagementService);\n // private departmentService = inject(CideCoreDepartmentManagementService);\n // private CideCoreGeneralMasterService = inject(CideCoreGeneralMasterService);\n // private generalMasterTypeService = inject(CideCoreGeneralMasterTypeService);\n // private pinCodeService = inject(CideCorePinCodeService);\n // private countryService = inject(CideCoreCountryService);\n // private userRoleService = inject(CideCoreUserRoleService);\n // private menuService = inject(MenuManagementService);\n // private router = inject(Router);\n // private route = inject(ActivatedRoute);\n // private appState = inject(AppStateHelperService);\n // private floatingFeaturesService = inject(CideEleFloatingFeaturesService);\n // private fileManagerService = inject(CideEleFileManagerService);\n // private entityRightsService = inject(CideLytFloatingEntityRightsSharingService);\n // private notificationService = inject(NotificationService);\n\n // userMasterForm: FormGroup;\n // activeTab = signal('basic');\n // loading = signal(false);\n\n // // User information from route\n // userId = signal<string>('');\n // isEditMode = signal(false);\n // showPasswordFields = signal(false); // Controls password fields visibility in edit mode\n\n // // Profile photo management\n // profilePhotoPreview = signal<string | null>(null);\n\n // contactAddresses = signal<AuthUserCoreUserContactAddresses[]>([]);\n // documents = signal<AuthUserCoreUserDocuments[]>([]);\n // familyDetails = signal<AuthUserCoreUserFamilyDetails[]>([]);\n // entityMappings = signal<AuthUserCoreEntityMapping[]>([]);\n // menuRightsMap = signal<{ [mappingIndex: string]: MenuWithPermissions[] }>({});\n\n // // User rights management\n // userRightsTypeId = signal<string | null>(null);\n // permissions = signal<ICoreSygms[]>([]);\n\n // // Template helpers\n // Object = Object;\n\n // /**\n // * Get address type label for header display\n // */\n // getAddressTypeLabel(addressIndex: number): string {\n // const addressTypeId = this.contactAddressesFormArray.at(addressIndex)?.get('sycad_address_type_id_sygms')?.value;\n // if (addressTypeId) {\n // const addressType = this.addressTypeOptions().find(option => option._id === addressTypeId);\n // return addressType?.sygms_title || 'Address';\n // }\n // return 'Address';\n // }\n\n // /**\n // * Handle address type change to update header\n // */\n // onAddressTypeChange(addressIndex: number): void {\n // // This method is called when address type changes to trigger header update\n // // The header will automatically update due to change detection\n // }\n\n // /**\n // * Share address using floating entity rights sharing service\n // */\n // shareAddress(addressIndex: number): void {\n // const address = this.contactAddresses()[addressIndex];\n // if (!address) return;\n\n // console.log(`📤 Sharing address ${addressIndex}:`, address);\n\n // // Use the entity rights service with signal-based data\n // this.entityRightsService.show(computed(() => ({\n // syepm_access_passs_to: address._id || `address-${addressIndex}`,\n // core_entity_access_pass_management: 'core_entity_access_pass_management_sycad',\n // syepm_user_id_user: this.appState.currentUser()?._id || ''\n // })));\n // }\n\n\n // /**\n // * Get document type label for header display\n // */\n // getDocumentTypeLabel(documentIndex: number): string {\n // const documentTypeId = this.documentsFormArray.at(documentIndex)?.get('syusd_document_type_id_sygms')?.value;\n // if (documentTypeId) {\n // const documentType = this.documentTypeOptions().find(option => option._id === documentTypeId);\n // return documentType?.sygms_title || 'Document';\n // }\n // return 'Document';\n // }\n\n // /**\n // * Handle document type change to update header\n // */\n // onDocumentTypeChange(documentIndex: number): void {\n // // This method is called when document type changes to trigger header update\n // // The header will automatically update due to change detection\n // }\n\n // /**\n // * Check if user is owner for address sharing\n // */\n // isAddressOwner(addressIndex: number): boolean {\n // const address = this.contactAddresses()[addressIndex];\n // if (!address) return false;\n\n // // Check if the address has core_entity_access_pass_management with syepm_is_owner true\n // const accessPassManagement = address.core_entity_access_pass_management;\n // return accessPassManagement?.syepm_is_owner === true;\n // }\n\n // /**\n // * Check if user has edit rights for contact address\n // */\n // hasContactAddressEditRights(addressIndex: number): boolean {\n // // First try to get from FormArray\n // const formGroup = this.contactAddressesFormArray.at(addressIndex);\n // if (formGroup) {\n // const formId = formGroup.get('_id')?.value;\n // if (formId) {\n // // Find the corresponding address in signal by _id\n // const address = this.contactAddresses().find(addr => addr._id === formId);\n // if (address) {\n // const accessPassManagement = address.core_entity_access_pass_management;\n // return accessPassManagement?.syepm_can_edit === true;\n // }\n // }\n // }\n\n // // Fallback to signal-based lookup\n // const address = this.contactAddresses()[addressIndex];\n // if (!address) return false;\n\n // // Check if the address has core_entity_access_pass_management with syepm_can_edit true\n // const accessPassManagement = address.core_entity_access_pass_management;\n // return accessPassManagement?.syepm_can_edit === true;\n // }\n\n // /**\n // * Check if user has edit rights for document at given index\n // */\n // hasDocumentEditRights(documentIndex: number): boolean {\n // // For now, allow editing for all documents\n // // TODO: Implement proper access control when core_entity_access_pass_management is added to documents\n // return true;\n // }\n\n // /**\n // * Check if user has edit rights for family detail at given index\n // */\n // hasFamilyDetailEditRights(familyIndex: number): boolean {\n // // For now, allow editing for all family details\n // // TODO: Implement proper access control when core_entity_access_pass_management is added to family details\n // return true;\n // }\n\n // /**\n // * Check if user has edit rights for adding new contact addresses\n // * This checks if the user has core_entity_access_pass_management with syepm_can_edit true\n // */\n // hasAddContactAddressRights(): boolean {\n // // For new addresses, we need to check if the user has edit rights for the core_entity_access_pass_management_sycad\n // // This would typically be checked against the user's role permissions or entity access rights\n // // For now, we'll return true for new addresses, but this should be implemented based on your access control logic\n // return true; // TODO: Implement proper access control check for adding new addresses\n // }\n\n // /**\n // * Check if user has edit rights for adding new documents\n // */\n // hasAddDocumentRights(): boolean {\n // // For new documents, we need to check if the user has edit rights for the core_entity_access_pass_management_sydoc\n // // This would typically be checked against the user's role permissions or entity access rights\n // // For now, we'll return true for new documents, but this should be implemented based on your access control logic\n // return true; // TODO: Implement proper access control check for adding new documents\n // }\n\n // /**\n // * Check if user has edit rights for adding new family details\n // */\n // hasAddFamilyDetailRights(): boolean {\n // // For new family details, we need to check if the user has edit rights for the core_entity_access_pass_management_syfam\n // // This would typically be checked against the user's role permissions or entity access rights\n // // For now, we'll return true for new family details, but this should be implemented based on your access control logic\n // return true; // TODO: Implement proper access control check for adding new family details\n // }\n\n // /**\n // * Share document rights using floating entity rights sharing component\n // */\n // shareDocumentRights(documentIndex: number): void {\n // const document = this.documents()[documentIndex];\n // if (!document || !document._id) {\n // console.error('Cannot share rights for document without _id');\n // return;\n // }\n\n // console.log(`📤 Sharing document ${documentIndex}:`, document);\n\n // // Use the entity rights service with signal-based data\n // this.entityRightsService.show(computed(() => ({\n // syepm_access_passs_to: document._id || `document-${documentIndex}`,\n // core_entity_access_pass_management: 'core_entity_access_pass_management_sydoc',\n // syepm_user_id_user: this.appState.currentUser()?._id || ''\n // })));\n // }\n\n // /**\n // * Share family detail rights using floating entity rights sharing component\n // */\n // shareFamilyDetailRights(familyIndex: number): void {\n // const familyDetail = this.familyDetails()[familyIndex];\n // if (!familyDetail || !familyDetail._id) {\n // console.error('Cannot share rights for family detail without _id');\n // return;\n // }\n\n // console.log(`📤 Sharing family detail ${familyIndex}:`, familyDetail);\n\n // // Use the entity rights service with signal-based data\n // this.entityRightsService.show(computed(() => ({\n // syepm_access_passs_to: familyDetail._id || `family-${familyIndex}`,\n // core_entity_access_pass_management: 'core_entity_access_pass_management_syfam',\n // syepm_user_id_user: this.appState.currentUser()?._id || ''\n // })));\n // }\n\n // /**\n // * Find existing exception by combination of user, mapping, permission, and menu\n // */\n // private findExistingException(\n // userId: string,\n // mappingId: string,\n // permissionId: string,\n // menuId: string\n // ): CoreUserRoleExceptions | null {\n // // Search through all entity mappings for existing exceptions\n // for (const mapping of this.entityMappings()) {\n // const mappingWithExceptions = mapping as AuthUserCoreEntityMapping & { exceptions?: CoreUserRoleExceptions[] };\n // if (mappingWithExceptions.exceptions) {\n // const existingException = mappingWithExceptions.exceptions.find(ex =>\n // ex.syusrex_user_id_user === userId &&\n // ex.syusrex_user_entity_mapping_id_syenm === mappingId &&\n // ex.syusrex_role_permissions_id_sygms === permissionId &&\n // ex.syusrex_menu_id_syme === menuId\n // );\n // if (existingException) {\n // return existingException;\n // }\n // }\n // }\n // return null;\n // }\n\n // /**\n // * Process exceptions for each entity mapping based on modified vs actual permissions\n // * This method should be called during save to create core_user_role_exceptions\n // */\n // processRoleExceptions(): CoreUserRoleExceptions[] {\n // const exceptions: CoreUserRoleExceptions[] = [];\n\n // console.log('🎭 Processing role exceptions for all entity mappings...');\n\n // // Iterate through all entity mappings\n // this.entityMappings().forEach((mapping, mappingIndex) => {\n // const menuRights = this.menuRightsMap()[mappingIndex.toString()] || [];\n\n // menuRights.forEach((menu: MenuWithPermissions) => {\n // if (menu._permissionValues) {\n // Object.keys(menu._permissionValues).forEach(permissionId => {\n // const permissionData = menu?._permissionValues?.[permissionId] || {} as PermissionValue;\n\n // // Check if permission was modified (different from actual role permission)\n // if (permissionData.modified !== permissionData.actual) {\n // // Check if exception already exists from GET by ID response\n // const existingException = this.findExistingException(\n // this.userId() || '',\n // mapping._id || '',\n // permissionId,\n // menu._id || ''\n // );\n\n // const exception = {\n // _id: existingException?._id || '', // Use existing _id if found, otherwise empty for new exception\n // syusrex_user_id_user: this.userId() || '',\n // syusrex_user_entity_mapping_id_syenm: mapping._id || '',\n // syusrex_role_id_syusrol: mapping.syenm_role_id_syusrol?._id || '',\n // syusrex_role_permissions_id_sygms: permissionId,\n // syusrex_menu_id_syme: menu._id,\n // syusrex_isactive: true,\n // syusrex_status: permissionData.modified // Status reflects the checkbox state (true = checked, false = unchecked)\n // };\n\n // exceptions.push(exception);\n\n // console.log(`🎭 Exception created for mapping ${mappingIndex}, menu ${menu.syme_title}, permission ${permissionData.permission.sygms_title}:`, {\n // actual: permissionData.actual,\n // modified: permissionData.modified,\n // exception: exception\n // });\n // }\n // });\n // }\n // });\n // });\n\n // console.log(`🎭 Total exceptions to process: ${exceptions.length}`, exceptions);\n // return exceptions;\n // }\n\n // /**\n // * Get exceptions for a specific entity mapping\n // */\n // getExceptionsForMapping(mappingIndex: number): CoreUserRoleExceptions[] {\n // const exceptions: CoreUserRoleExceptions[] = [];\n // const menuRights = this.menuRightsMap()[mappingIndex.toString()] || [];\n\n // menuRights.forEach((menu: MenuWithPermissions) => {\n // if (menu._permissionValues) {\n // Object.keys(menu._permissionValues).forEach(permissionId => {\n // const permissionData = menu?._permissionValues?.[permissionId] || {} as PermissionValue;\n\n // // Check if permission was modified (different from actual role permission)\n // if (permissionData.modified !== permissionData.actual) {\n // const mapping = this.entityMappings()[mappingIndex];\n \n // // Check if exception already exists from GET by ID response\n // const existingException = this.findExistingException(\n // this.userId() || '',\n // mapping._id || '',\n // permissionId,\n // menu._id || ''\n // );\n\n // const exception = {\n // syusrex_user_id_user: this.userId() || '',\n // syusrex_user_entity_mapping_id_syenm: mapping._id || '',\n // syusrex_role_id_syusrol: mapping.syenm_role_id_syusrol?._id || '',\n // syusrex_role_permissions_id_sygms: permissionId,\n // syusrex_menu_id_syme: menu._id,\n // _id: existingException?._id || '', // Use existing _id if found, otherwise empty for new exception\n // syusrex_isactive: true,\n // syusrex_status: permissionData.modified // Status reflects the checkbox state (true = checked, false = unchecked)\n // };\n\n // exceptions.push(exception);\n // }\n // });\n // }\n // });\n\n // return exceptions;\n // }\n // private applyContactAddressAccessControl(): void {\n // const contactFormArray = this.contactAddressesFormArray;\n\n // contactFormArray.controls.forEach((control, index) => {\n // const hasEditRights = this.hasContactAddressEditRights(index);\n\n // if (hasEditRights) {\n // control.enable();\n // } else {\n // control.disable();\n // }\n // });\n // }\n\n // /**\n // * Apply access control to document FormArray\n // * This method disables/enables form controls based on user permissions\n // */\n // private applyDocumentAccessControl(): void {\n // const documentFormArray = this.documentsFormArray;\n\n // documentFormArray.controls.forEach((control, index) => {\n // const hasEditRights = this.hasDocumentEditRights(index);\n\n // if (hasEditRights) {\n // control.enable();\n // } else {\n // control.disable();\n // }\n // });\n // }\n\n // /**\n // * Apply access control to family detail FormArray\n // * This method disables/enables form controls based on user permissions\n // */\n // private applyFamilyDetailAccessControl(): void {\n // const familyFormArray = this.familyDetailsFormArray;\n\n // familyFormArray.controls.forEach((control, index) => {\n // const hasEditRights = this.hasFamilyDetailEditRights(index);\n\n // if (hasEditRights) {\n // control.enable();\n // } else {\n // control.disable();\n // }\n // });\n // }\n\n\n // /**\n // * Handle document files selection\n // */\n // onDocumentFilesSelected(event: Event, documentIndex: number): void {\n // const target = event.target as HTMLInputElement;\n // const files = target.files;\n\n // if (!files || files.length === 0) return;\n\n // console.log(`📎 Files selected for document ${documentIndex}:`, files);\n\n // // Store files in the document form group or handle upload logic here\n // const documentFormGroup = this.documentsFormArray.at(documentIndex);\n // if (documentFormGroup) {\n // // You can store the files in a custom property or handle upload immediately\n // // For now, we'll store them in a custom property for display\n // const existingFiles = this.getDocumentFiles(documentIndex);\n // const newFiles = Array.from(files);\n // const allFiles = [...existingFiles, ...newFiles];\n\n // // Store files in the form group's custom property\n // (documentFormGroup as DocumentFormGroup)._uploadedFiles = allFiles;\n\n // console.log(`📎 Total files for document ${documentIndex}:`, allFiles.length);\n // }\n // }\n\n // /**\n // * Get document group ID\n // */\n // getDocumentGroupId(documentIndex: number): string {\n // const documentFormGroup = this.documentsFormArray.at(documentIndex);\n // return documentFormGroup?.get('syusd_photo_group_id_cyfm')?.value || '';\n // }\n\n // /**\n // * Get uploaded files for a document (legacy method for backward compatibility)\n // */\n // getDocumentFiles(documentIndex: number): File[] {\n // // For multiple file upload with group ID, we don't track individual files\n // // Return empty array since files are managed by group ID\n // return [];\n // }\n\n // /**\n // * Remove a file from document (legacy method for backward compatibility)\n // */\n // removeDocumentFile(documentIndex: number, fileName: string): void {\n // // For multiple file upload with group ID, individual file removal is not supported\n // // Files are managed as a group on the server\n // console.log(`📎 Individual file removal not supported for group uploads. Document ${documentIndex}, File: ${fileName}`);\n // }\n\n // constructor() {\n // this.userMasterForm = this.fb.group({\n // // Basic User Information from auth_user_mst table\n // user_username: ['', []],\n // user_firstname: ['', []],\n // user_middlename: [''],\n // user_lastname: ['', []],\n // user_fullname: ['', []],\n // user_emailid: ['', [Validators.email]],\n // user_mobileno: ['', []],\n // user_password: [''],\n // user_confirm_password: [''],\n // user_photo_id_cyfm: [''],\n // user_passwordchangeonlogin: [false],\n // user_isactive: [true],\n\n // // Entity mappings as FormArray\n // core_entity_mapping: this.fb.array([]),\n\n // // Contact addresses as FormArray\n // core_user_contact_addresses: this.fb.array([]),\n\n // // Documents as FormArray\n // core_user_documents: this.fb.array([]),\n\n // // Family details as FormArray\n // core_user_family_details: this.fb.array([])\n // });\n\n // // Initialize role permissions grid configuration\n // this.initializeRolePermissionsGrid();\n // }\n\n // // FormArray getter for entity mappings\n // get entityMappingsFormArray(): FormArray {\n // return this.userMasterForm.get('core_entity_mapping') as FormArray;\n // }\n\n // // FormArray getter for contact addresses\n // get contactAddressesFormArray(): FormArray {\n // return this.userMasterForm.get('core_user_contact_addresses') as FormArray;\n // }\n\n // // FormArray getter for documents\n // get documentsFormArray(): FormArray {\n // return this.userMasterForm.get('core_user_documents') as FormArray;\n // }\n\n // // FormArray getter for family details\n // get familyDetailsFormArray(): FormArray {\n // return this.userMasterForm.get('core_user_family_details') as FormArray;\n // }\n\n // // User search functionality for family member selection\n // userSearchResults = signal<{ [familyIndex: number]: AuthUserMst[] }>({});\n // userSearchLoading = signal<{ [familyIndex: number]: boolean }>({});\n\n // // Debounce timer for search\n // private searchDebounceTimers: { [familyIndex: number]: number } = {};\n\n // // Helper method to create entity mapping FormGroup\n // private createEntityMappingFormGroup(): FormGroup {\n // const today = new Date().toISOString().split('T')[0];\n // return this.fb.group({\n // _id: [''],\n // syenm_entity_id_syen: ['', []],\n // syenm_role_id_syusrol: [''],\n // syenm_designation_id_sydsg: [''],\n // syenm_department_id_sydept: [''],\n // syenm_activefrom: [today, []],\n // syenm_activeupto: [''],\n // syenm_isdefault: [false],\n // syenm_isactive: [true],\n // syenm_isloggedin: [true],\n // exceptions: this.fb.array([]) // Add exceptions FormArray\n // });\n // }\n\n // // Helper method to create contact address FormGroup\n // private createContactAddressFormGroup(): FormGroup {\n // return this.fb.group({\n // _id: [''],\n // sycad_contact_person_name: [''],\n // sycad_address_type_id_sygms: [''],\n // sycad_contact_address: [''],\n // sycad_contact_pin_sypin: [''],\n // sycad_contact_city_sypin: [''],\n // sycad_contact_state_sypin: [''],\n // sycad_contact_country_syctr: [''],\n // sycad_contact_phone: [''],\n // sycad_contact_phone_alt: [''],\n // sycad_contact_fax: [''],\n // sycad_contact_email: [''],\n // sycad_contact_email_alt: ['']\n // });\n // }\n\n // // Helper method to create document FormGroup\n // private createDocumentFormGroup(): FormGroup {\n // const formGroup = this.fb.group({\n // _id: [''],\n // syusd_user_id_user: [''],\n // syusd_document_type_id_sygms: [''],\n // syusd_doc_number: [''],\n // syusd_doc_name_as_per_doc: [''],\n // syusd_doc_issue_date: [''],\n // syusd_doc_expiry_date: [''],\n // syusd_photo_group_id_cyfm: [''],\n // syusd_doc_verification_status_id_sygms: [''],\n // syusd_doc_kyc_status_id_sygms: [''],\n // syusd_isactive: [true]\n // });\n\n // // Initialize file storage for this document\n // (formGroup as DocumentFormGroup)._uploadedFiles = [];\n\n // return formGroup;\n // }\n\n // // Helper method to create family detail FormGroup\n // private createFamilyDetailFormGroup(): FormGroup {\n // return this.fb.group({\n // _id: [''],\n // syfdl_family_member_name: [''],\n // syfdl_family_member_id_user: [''],\n // syfdl_family_member_dob: [''],\n // syfdl_relationship_id_sygms: [''],\n // syfdl_blood_group_sygms: [''],\n // syfdl_contact_email: [''],\n // syfdl_contact_email_id: [''],\n // syfdl_contact_phone: [''],\n // syfdl_contact_number: [''],\n // syfdl_isactive: [true]\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 // // User search methods for family member selection\n // searchUsers(query: string = '', familyIndex: number = 0) {\n // // Update loading state for specific family member\n // this.userSearchLoading.update(loading => ({\n // ...loading,\n // [familyIndex]: true\n // }));\n\n // // Create payload for user search - no pagination, larger page size\n // const searchPayload = {\n // total: 0,\n // pageIndex: 1,\n // pageSize: 100, // Load more users at once since no pagination\n // query: query || '',\n // pagination: false, // Disable pagination\n // sort: {\n // order: 'asc' as 'asc',\n // key: 'user_fullname'\n // }\n // };\n\n // this.userMasterService.getUserList(searchPayload).subscribe({\n // next: (response) => {\n // if (response?.success) {\n // const userData = response?.data || [];\n // this.userSearchResults.update(results => ({\n // ...results,\n // [familyIndex]: userData\n // }));\n // } else {\n // this.userSearchResults.update(results => ({\n // ...results,\n // [familyIndex]: []\n // }));\n // }\n // },\n // error: (error) => {\n // console.error('Error searching users:', error);\n // this.userSearchResults.update(results => ({\n // ...results,\n // [familyIndex]: []\n // }));\n // },\n // complete: () => {\n // this.userSearchLoading.update(loading => ({\n // ...loading,\n // [familyIndex]: false\n // }));\n // }\n // });\n // }\n\n // // Get user options for the select component\n // userOptions(familyIndex: number = 0): AuthUserMst[] {\n // return this.userSearchResults()[familyIndex] || [];\n // }\n\n // // Handle search change from the select component with debouncing\n // onUserSearchChange(searchEvent: selectSearchType, familyIndex: number) {\n // const query = searchEvent?.query;\n\n // // Clear existing debounce timer for this family member\n // if (this.searchDebounceTimers[familyIndex]) {\n // clearTimeout(this.searchDebounceTimers[familyIndex]);\n // }\n\n // // Set new debounce timer (300ms delay)\n // this.searchDebounceTimers[familyIndex] = setTimeout(() => {\n // if (query) {\n // this.searchUsers(query, familyIndex);\n // } else {\n // // If no query, load all users\n // this.searchUsers('', familyIndex);\n // }\n // }, 300);\n // }\n\n // // Load initial users for the select component\n // loadInitialUsers() {\n // // Load initial users for all existing family members\n // const familyCount = this.familyDetailsFormArray.length;\n // for (let i = 0; i < familyCount; i++) {\n // this.searchUsers('', i);\n // }\n // }\n\n // // Handle user selection change in the form\n // onUserSelectionChange(event: AuthUserMst, familyIndex: number) {\n // const selectedUserId = event?._id;\n // if (selectedUserId) {\n // // Find the selected user from the results for this specific family member\n // const userResults = this.userSearchResults()[familyIndex] || [];\n // const selectedUser = userResults.find((user: AuthUserMst) => user._id === selectedUserId);\n // if (selectedUser) {\n // // Update the family member name field with the selected user's name\n // const familyGroup = this.familyDetailsFormArray.at(familyIndex);\n // familyGroup.patchValue({\n // syfdl_family_member_name: selectedUser.user_fullname || selectedUser.user_username || ''\n // });\n // }\n // }\n // }\n\n // entityOptions = signal<CoreSystemEntityListResponse[]>([]);\n // roleOptions = signal<{ [entityId: string]: CoreUserRoleResponse[] }>({});\n // designationOptions = signal<{ [entityId: string]: ICoreSydsg[] }>({});\n // departmentOptions = signal<{ [entityId: string]: ICoreSydept[] }>({});\n // menuOptions = signal<ICoreSyme[]>([]);\n\n // // Role permissions grid properties\n // rolePermissionsGridConfig = 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_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 // key: 'syme_permissions_id_sygms',\n // header: 'Permissions',\n // type: 'custom',\n // width: '200px',\n // truncate: true,\n // align: 'left',\n // renderer: 'permissionsRenderer'\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: 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 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 // 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 // selectedRoleId = signal<string | null>(null);\n // selectedEntityIndex = signal<number | null>(null);\n\n // // Template renderers for role permissions grid\n // menuDetailsRendererTemplate = viewChild<TemplateRef<TemplateContext>>('menuDetailsRendererTemplate');\n // permissionsCheckboxRendererTemplate = viewChild<TemplateRef<TemplateContext>>('permissionsCheckboxRendererTemplate');\n // menuTypeRendererTemplate = viewChild<TemplateRef<TemplateContext>>('menuTypeRendererTemplate');\n // menuRightsPermissionsRendererTemplate = viewChild<TemplateRef<TemplateContext>>('menuRightsPermissionsRendererTemplate');\n // permissionsRendererTemplate = viewChild<TemplateRef<TemplateContext>>('permissionsRendererTemplate');\n // addressTypeOptions = signal<ICoreSygms[]>([]);\n\n // // Document and Family dropdown options\n // documentTypeOptions = signal<ICoreSygms[]>([]);\n // photoGroupOptions = signal<ICoreSygms[]>([]);\n // documentVerificationStatusOptions = signal<ICoreSygms[]>([]);\n // documentKycStatusOptions = signal<ICoreSygms[]>([]);\n // bloodGroupOptions = signal<ICoreSygms[]>([]);\n // relationshipOptionsData = signal<ICoreSygms[]>([]);\n\n // // Address-related data - separate for each address\n // addressPostalCodes = signal<{ [addressIndex: number]: pinCodeSelectResponseData[] }>({});\n // addressCountries = signal<{ [addressIndex: number]: ICoreSyctr[] }>({});\n // addressPostalCodesLoading = signal<{ [addressIndex: number]: boolean }>({});\n // addressCountriesLoading = signal<{ [addressIndex: number]: boolean }>({});\n // postalCodeDataCache = signal<{ [addressIndex: number]: pinCodeSelectResponseData[] }>({});\n\n // ngOnInit(): void {\n // this.initializeComponent();\n // }\n\n // /**\n // * Initialize component\n // */\n // private initializeComponent(): void {\n // // Get user information from route (for edit mode)\n // this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\n // const queryParams = params['query'];\n // console.log(queryParams, 'queryParams');\n\n // if (queryParams) {\n // // Query parameters passed (following page-controls pattern)\n // const queryData = generateObjectFromString(queryParams);\n // if (queryData?.user_id) {\n // this.userId.set(queryData.user_id);\n // this.isEditMode.set(true);\n // this.showPasswordFields.set(false); // Reset password fields for edit mode\n // this.loadUserData(queryData.user_id);\n // }\n // } else {\n // // Create mode - show password fields by default\n // this.isEditMode.set(false);\n // this.showPasswordFields.set(true);\n // }\n\n // // Always load dropdown options\n // this.loadDropdownOptions();\n // this.loadUserRightsTypeId(); // Load user rights type and permissions\n // this.setupFormSubscriptions();\n // this.setEntityIdFromAppState();\n\n // // Set up floating uploader with current user ID\n // this.setupFloatingUploader();\n\n // // Load initial users for family member selection\n // this.loadInitialUsers();\n // });\n // }\n\n // /**\n // * Setup floating uploader with current user ID\n // */\n // private setupFloatingUploader(): void {\n // // Get current user ID from app state or use a default\n // const currentUser = this.appState.currentUser();\n // const currentUserId = currentUser?._id || 'current-user';\n // console.log('🚀 [UserCreate] Current user ID:', currentUserId);\n // }\n\n // /**\n // * Setup form subscriptions\n // */\n // private setupFormSubscriptions(): void {\n // // Watch for password field changes to trigger confirm password validation\n // const passwordControl = this.userMasterForm.get('user_password');\n // const confirmPasswordControl = this.userMasterForm.get('user_confirm_password');\n\n // if (passwordControl && confirmPasswordControl) {\n // // When password changes, re-validate confirm password\n // passwordControl.valueChanges\n // .pipe(takeUntilDestroyed(this.destroyRef))\n // .subscribe(() => {\n // confirmPasswordControl.updateValueAndValidity();\n // });\n // }\n\n // // Watch for form changes\n // this.userMasterForm.valueChanges\n // .pipe(takeUntilDestroyed(this.destroyRef))\n // .subscribe(() => {\n // // Form validation is handled by reactive forms\n // });\n // }\n\n // /**\n // * Set entity ID from app state for new user creation\n // */\n // private setEntityIdFromAppState(): void {\n // if (!this.isEditMode()) {\n // const entityId = this.appState.getActiveEntityId();\n // if (entityId && this.entityMappings().length === 0) {\n // // Add default entity mapping for new users\n // this.addDefaultEntityMapping(entityId);\n // }\n // }\n // // Set password validation based on mode\n // this.updatePasswordValidation();\n // }\n\n // /**\n // * Cleanup when component is destroyed\n // */\n // ngOnDestroy(): void {\n // console.log('🧹 CideCoreUserCreateComponent: Cleaning up component state');\n\n // // Clear all debounce timers\n // Object.values(this.searchDebounceTimers).forEach(timer => {\n // if (timer) {\n // clearTimeout(timer);\n // }\n // });\n // this.searchDebounceTimers = {};\n\n // console.log('🧹 CideCoreUserCreateComponent: Component state cleaned up');\n // }\n\n // /**\n // * Update password validation based on create/edit mode\n // */\n // private updatePasswordValidation(): void {\n // const passwordControl = this.userMasterForm.get('user_password');\n // const confirmPasswordControl = this.userMasterForm.get('user_confirm_password');\n\n // if (this.isEditMode()) {\n // // In edit mode, passwords are optional but if provided, must meet requirements\n // passwordControl?.setValidators([Validators.minLength(8)]);\n // confirmPasswordControl?.setValidators([this.passwordMatchValidator.bind(this)]);\n // } else {\n // // In create mode, password is required\n // passwordControl?.setValidators([Validators.required, Validators.minLength(8)]);\n // confirmPasswordControl?.setValidators([Validators.required, this.passwordMatchValidator.bind(this)]);\n // }\n\n // passwordControl?.updateValueAndValidity();\n // confirmPasswordControl?.updateValueAndValidity();\n // }\n\n // /**\n // * Custom validator for password confirmation\n // */\n // private passwordMatchValidator(control: AbstractControl): ValidationErrors | null {\n // if (!this.userMasterForm) {\n // return null; // Form not initialized yet\n // }\n\n // const passwordControl = this.userMasterForm.get('user_password');\n // const password = passwordControl?.value;\n // const confirmPassword = control.value;\n\n // // In edit mode, both fields can be empty (no password change)\n // if (this.isEditMode() && !password && !confirmPassword) {\n // return null;\n // }\n\n // // In create mode, both fields are required\n // if (!this.isEditMode() && (!password || !confirmPassword)) {\n // return { passwordRequired: true };\n // }\n\n // // If password is provided, confirm password must match\n // if (password && confirmPassword && password !== confirmPassword) {\n // return { passwordMismatch: true };\n // }\n\n // return null;\n // }\n\n // /**\n // * Check if password update is required (edit mode with password fields filled or triggered)\n // */\n // isPasswordUpdateRequired(): boolean {\n // if (!this.isEditMode()) {\n // return false; // In create mode, password is always required\n // }\n\n // // In edit mode, check if user explicitly wants to update password\n // return this.showPasswordFields();\n // }\n\n // /**\n // * Add default entity mapping with active entity\n // */\n // private addDefaultEntityMapping(entityId: string): void {\n // // Create new FormGroup for entity mapping with active entity\n // const newMappingFormGroup = this.createEntityMappingFormGroup();\n // newMappingFormGroup.patchValue({\n // syenm_entity_id_syen: entityId,\n // syenm_isdefault: true\n // });\n\n // // Add to FormArray\n // this.entityMappingsFormArray.push(newMappingFormGroup);\n\n // // Update the signal for backward compatibility with template functions\n // this.entityMappings.update(mappings => [...mappings, {\n // syenm_id_user: this.userId(),\n // syenm_id_logses: '',\n // syenm_entity_id_syen: { _id: entityId, syen_name: '' },\n // syenm_role_id_syusrol: { _id: '', syusrol_name: '' },\n // syenm_designation_id_sydsg: { _id: '', sydsg_name: '' },\n // syenm_department_id_sydept: { _id: '', sydept_name: '' },\n // syenm_activefrom: new Date().toISOString().split('T')[0],\n // syenm_activeupto: '',\n // syenm_isdefault: true,\n // syenm_isactive: true,\n // syenm_isloggedin: true\n // }]);\n // }\n\n // /**\n // * Load user data for edit mode\n // */\n // private loadUserData(userId: string): void {\n // this.loading.set(true);\n\n // // Create payload using the updated service pattern\n // const getPayload = new AuthUserMstGetByIdPayload({\n // user_id: userId,\n // syenm_entity_id_syen: this.appState.getActiveEntityId()\n // });\n\n // this.userMasterService.getUserMasterById(getPayload)\n // .pipe(takeUntilDestroyed(this.destroyRef))\n // .subscribe({\n // next: (response: authUserMstGetByIdControllerResponse) => {\n // console.log(response, 'response');\n // if (response.success && response.data) {\n // this.populateFormWithUserData(response.data);\n // } else {\n // this.notificationService.error(response.message || 'Failed to load user data', {\n // title: 'Load Failed',\n // duration: 5000\n // });\n // }\n // this.loading.set(false);\n // },\n // error: (error) => {\n // console.error('Error loading user data:', error);\n // this.notificationService.error('Failed to load user data. Please try again.', {\n // title: 'Load Failed',\n // duration: 5000\n // });\n // this.loading.set(false);\n // }\n // });\n // }\n\n // /**\n // * Populate form with user data\n // */\n // private populateFormWithUserData(data: AuthUserMstGetByIdData): void {\n // if (data.auth_user_mst) {\n // // Exclude password from the loaded data\n // const { user_password, ...userDataWithoutPassword } = data.auth_user_mst;\n // this.userMasterForm.patchValue(userDataWithoutPassword);\n\n // // Clear password fields in edit mode\n // this.userMasterForm.patchValue({\n // user_password: '',\n // user_confirm_password: ''\n // });\n\n // // Handle profile photo if it exists\n // if (data.auth_user_mst.user_photo_id_cyfm) {\n // console.log('📸 Loading existing profile photo:', data.auth_user_mst.user_photo_id_cyfm);\n // // The file-input component will automatically load the file details when the form control value is set\n // // We can set a preview URL if we have the file data\n // this.loadProfilePhotoPreview(data.auth_user_mst.user_photo_id_cyfm);\n // }\n // }\n\n // // Set additional data\n // if (data.core_entity_mapping) {\n // this.entityMappings.set(data.core_entity_mapping);\n // this.entityMappings()?.forEach((mapping: AuthUserCoreEntityMapping, index: number) => {\n // this.onEntityChange(index, mapping);\n // if (mapping?.syenm_department_id_sydept) {\n // this.onDepartmentChange(mapping?.syenm_department_id_sydept)\n // }\n\n // });\n // // Update entity mappings FormArray\n // const entityMappingFormArray = this.entityMappingsFormArray;\n // entityMappingFormArray.clear();\n // data.core_entity_mapping.forEach((mapping: AuthUserCoreEntityMapping) => {\n // const mappingGroup = this.createEntityMappingFormGroup();\n // let core_entity_mapping: CoreEntityMapping = {};\n // core_entity_mapping = {\n // ...mapping,\n // syenm_entity_id_syen: mapping?.syenm_entity_id_syen?._id,\n // syenm_designation_id_sydsg: mapping?.syenm_designation_id_sydsg?._id,\n // syenm_role_id_syusrol: mapping?.syenm_role_id_syusrol?._id,\n // syenm_department_id_sydept: mapping?.syenm_department_id_sydept?._id\n // };\n // mappingGroup.patchValue(core_entity_mapping);\n // mappingGroup.get('syenm_entity_id_syen')?.disable();\n // entityMappingFormArray.push(mappingGroup);\n // });\n\n // // Load role permissions for each mapping that has a role selected\n // data.core_entity_mapping.forEach((mapping: AuthUserCoreEntityMapping, index: number) => {\n // if (mapping.syenm_role_id_syusrol) {\n // const roleId = typeof mapping.syenm_role_id_syusrol === 'object'\n // ? mapping.syenm_role_id_syusrol._id\n // : mapping.syenm_role_id_syusrol;\n\n // if (roleId) {\n // console.log(`🎭 Loading role permissions for mapping ${index} with role ${roleId}`);\n // this.loadRolePermissions(roleId, index);\n // }\n // }\n // });\n // }\n\n // // Handle existing role exceptions\n // if (data.core_user_role_exceptions && Array.isArray(data.core_user_role_exceptions)) {\n // console.log('🎭 Loading existing role exceptions:', data.core_user_role_exceptions);\n\n // // Group exceptions by mapping index\n // const exceptionsByMapping: { [mappingIndex: string]: CoreUserRoleExceptionsMapping[] } = {};\n\n // data.core_user_role_exceptions.forEach((exception: CoreUserRoleExceptionsMapping) => {\n // // Find the mapping index for this exception\n // const mappingIndex = this.findMappingIndexByEntityMappingId(exception.syusrex_user_entity_mapping_id_syenm || '');\n // if (mappingIndex !== null) {\n // if (!exceptionsByMapping[mappingIndex.toString()]) {\n // exceptionsByMapping[mappingIndex.toString()] = [];\n // }\n // exceptionsByMapping[mappingIndex.toString()].push(exception);\n // }\n // });\n\n // // Add exceptions to each mapping\n // Object.keys(exceptionsByMapping).forEach(mappingIndexStr => {\n // const mappingIndex = parseInt(mappingIndexStr);\n // const mapping = this.entityMappings()[mappingIndex];\n // if (mapping) {\n // (mapping as (AuthUserCoreEntityMapping & { exceptions?: CoreUserRoleExceptionsMapping[] })).exceptions = exceptionsByMapping[mappingIndexStr];\n // }\n // });\n // }\n\n // if (data.core_user_contact_addresses) {\n // this.contactAddresses.set(data.core_user_contact_addresses);\n // // Update contact addresses FormArray\n // const contactFormArray = this.contactAddressesFormArray;\n // contactFormArray.clear();\n // data.core_user_contact_addresses.forEach((address: AuthUserCoreUserContactAddresses) => {\n // const addressGroup = this.createContactAddressFormGroup();\n // let core_user_contact_addresses: CoreUserContactAddresses = {\n // ...address,\n // sycad_address_type_id_sygms: address?.sycad_address_type_id_sygms?._id || \"\",\n // sycad_contact_person_syfdl: address?.sycad_contact_person_syfdl?._id || \"\",\n // sycad_contact_pin_sypin: address?.sycad_contact_pin_sypin?._id || \"\",\n // sycad_contact_country_syctr: address?.sycad_contact_country_syctr?._id || \"\"\n // };\n // addressGroup.patchValue(core_user_contact_addresses);\n // contactFormArray.push(addressGroup);\n // });\n\n // // Load dropdown data for existing addresses\n // this.loadDropdownDataForExistingAddresses();\n\n // // Apply access control after form is populated\n // this.applyContactAddressAccessControl();\n // }\n\n // // Handle documents if present in API response\n // if (data.core_user_documents && Array.isArray(data.core_user_documents)) {\n // const documentsData = data.core_user_documents;\n // this.documents.set(documentsData);\n\n // // Clear existing documents FormArray\n // while (this.documentsFormArray.length !== 0) {\n // this.documentsFormArray.removeAt(0);\n // }\n\n // // Add documents to FormArray\n // documentsData.forEach((document) => {\n // const documentGroup = this.createDocumentFormGroup();\n // documentGroup.patchValue({\n // _id: document._id || '',\n // syusd_user_id_user: this.appState.getUserId() || '',\n // syusd_document_type_id_sygms: document.syusd_document_type_id_sygms?._id || '',\n // syusd_doc_number: document.syusd_doc_number || '',\n // syusd_doc_name_as_per_doc: document.syusd_doc_name_as_per_doc || '',\n // syusd_photo_group_id_cyfm: document.syusd_photo_group_id_cyfm || '',\n // syusd_doc_issue_date: document.syusd_doc_issue_date || '',\n // syusd_doc_expiry_date: document.syusd_doc_expiry_date || '',\n // syusd_doc_verification_status_id_sygms: document.syusd_doc_verification_status_id_sygms?._id || '',\n // syusd_doc_kyc_status_id_sygms: document.syusd_doc_kyc_status_id_sygms?._id || '',\n // syusd_isactive: document.syusd_isactive ?? true\n // });\n // this.documentsFormArray.push(documentGroup);\n // });\n\n // // Apply access control after documents are populated\n // this.applyDocumentAccessControl();\n // }\n\n // // Handle family details if present in API response\n // if (data.core_user_family_details && Array.isArray(data.core_user_family_details)) {\n // const familyData = data.core_user_family_details;\n // this.familyDetails.set(familyData);\n\n // // Clear existing family details FormArray\n // while (this.familyDetailsFormArray.length !== 0) {\n // this.familyDetailsFormArray.removeAt(0);\n // }\n\n // // Add family details to FormArray\n // familyData.forEach((familyDetail: AuthUserCoreUserFamilyDetails) => {\n // const familyGroup = this.createFamilyDetailFormGroup();\n // familyGroup.patchValue({\n // _id: familyDetail._id || '',\n // syfdl_family_member_name: familyDetail.syfdl_family_member_name || '',\n // syfdl_family_member_id_user: familyDetail.syfdl_family_member_id_user?._id || '',\n // syfdl_family_member_dob: familyDetail.syfdl_family_member_dob || '',\n // syfdl_relationship_id_sygms: familyDetail.syfdl_relationship_id_sygms?._id || '',\n // syfdl_blood_group_sygms: familyDetail.syfdl_blood_group_sygms?._id || '',\n // syfdl_contact_email: familyDetail.syfdl_contact_email_id || '',\n // syfdl_contact_email_id: familyDetail.syfdl_contact_email_id || '',\n // syfdl_contact_phone: familyDetail.syfdl_contact_number || '',\n // syfdl_contact_number: familyDetail.syfdl_contact_number || '',\n // syfdl_isactive: true\n // });\n // this.familyDetailsFormArray.push(familyGroup);\n // });\n\n // // Apply access control after family details are populated\n // this.applyFamilyDetailAccessControl();\n // }\n\n // // Update password validation for edit mode\n // this.updatePasswordValidation();\n // }\n\n // private loadDropdownOptions() {\n // // Load entity options\n // this.entityService.getEntityList({}).subscribe({\n // next: (response) => {\n // if (response?.success) {\n // console.log(`🏢 entities:`, response.data);\n // this.entityOptions.set(response.data || []);\n // }\n // },\n // error: (error) => console.error('Error loading entities:', error)\n // });\n\n // // Countries will be loaded individually for each address when needed\n\n // // Load address types from general master\n // this.loadAddressTypes();\n\n // // Load document and family dropdown options\n // this.loadDocumentTypes();\n // this.loadDocumentVerificationStatus();\n // this.loadDocumentKycStatus();\n // this.loadBloodGroups();\n // this.loadRelationshipOptions();\n\n // // Load menu options from API\n // this.loadMenuOptions();\n\n // }\n\n\n\n // relationshipOptions() {\n // return this.relationshipOptionsData();\n // }\n\n // onTabChange(tab: TabItem) {\n // this.activeTab.set(tab.id);\n // }\n\n // // Entity Mapping Methods\n // addEntityMapping() {\n // // Create new FormGroup for entity mapping\n // const newMappingFormGroup = this.createEntityMappingFormGroup();\n\n // // Add to FormArray\n // this.entityMappingsFormArray.push(newMappingFormGroup);\n\n // // Update the signal for backward compatibility with template functions\n // this.entityMappings.update(mappings => [...mappings, {\n // syenm_id_user: this.userId(),\n // syenm_id_logses: '',\n // syenm_entity_id_syen: { _id: '', syen_name: '' },\n // syenm_role_id_syusrol: { _id: '', syusrol_name: '' },\n // syenm_designation_id_sydsg: { _id: '', sydsg_name: '' },\n // syenm_department_id_sydept: { _id: '', sydept_name: '' },\n // syenm_activefrom: new Date().toISOString().split('T')[0],\n // syenm_activeupto: '',\n // syenm_isdefault: false,\n // syenm_isactive: true,\n // syenm_isloggedin: true\n // }]);\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 from FormArray\n // this.entityMappingsFormArray.removeAt(index);\n\n // // Update the signal for backward compatibility with template functions\n // this.entityMappings.update(mappings => mappings.filter((_, i) => i !== index));\n\n // // Trigger update of entity dropdowns to make removed entity available again\n // this.triggerEntityDropdownUpdate();\n // }\n\n\n\n // onEntityChange(mappingIndex: number, event: AuthUserCoreEntityMapping) {\n // // When entity changes, load departments and filter roles based on entity\n // console.log(`🏢 Entity changed for mapping ${mappingIndex}:`, event);\n\n // // Clear menu rights for this mapping when entity changes\n // this.clearMenuRightsForMapping(mappingIndex);\n\n // // Clear department selection for this mapping\n // this.clearDepartmentForMapping(mappingIndex);\n\n // // Clear role selection for this mapping\n // this.clearRoleForMapping(mappingIndex);\n\n // // Load departments for the selected entity\n // if (event) {\n // const entityId = event?.syenm_entity_id_syen?._id || '';\n // this.loadDepartmentsForEntity(mappingIndex, entityId);\n\n // // Load roles for the selected entity\n // if (entityId) {\n // this.loadRolesForEntity(mappingIndex, entityId);\n // }\n // }\n\n // // Trigger change detection to update other entity dropdowns\n // this.triggerEntityDropdownUpdate();\n\n // // Automatically load menu rights when both entity and role are selected\n // const mapping = this.entityMappings()[mappingIndex];\n // if (mapping?.syenm_entity_id_syen && mapping?.syenm_role_id_syusrol) {\n // console.log(`🚀 Auto-loading menu rights for mapping ${mappingIndex}`);\n // this.loadMenuRights(mappingIndex);\n // }\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 // /**\n // * Trigger update of entity dropdowns to reflect changes in selected entities\n // */\n // private triggerEntityDropdownUpdate(): void {\n // // Force change detection by updating the form\n // const currentValue = this.entityMappingsFormArray.value;\n // this.entityMappingsFormArray.setValue(currentValue);\n // }\n\n // onDepartmentChange(event: ICoreSydept) {\n // if (!event?._id) {\n // return;\n // }\n // if (this.designationOptions()[event?._id]) {\n // return;\n // }\n // // get the designation options for the selected department;\n // this.designationService.getDesignationList({\n // sydsg_department_id_sydpt: event?._id || ''\n // }).subscribe({\n // next: (response: designationControllerResponse) => {\n // console.log(response, 'response Designation');\n // // designation entty specific\n // this.designationOptions.update(map => ({\n // ...map,\n // [event?._id || '']: response.data || []\n // }));\n // },\n // error: (error) => {\n // console.error('Error loading designations:', error);\n // }\n // });\n\n\n // }\n\n // getRoleOptionsForEntity(mappingIndex: number): CoreUserRoleResponse[] {\n // const mapping = this.entityMappings()[mappingIndex];\n // console.log(`🎭 getRoleOptionsForEntity:`, mapping);\n // if (!mapping?.syenm_entity_id_syen?._id) {\n // return [];\n // }\n\n // const entityId = mapping?.syenm_entity_id_syen?._id || '';\n // console.log(`🎭 roles:`, this.roleOptions());\n // const roles = this.roleOptions()[entityId];\n\n // if (roles) {\n // return roles;\n // }\n\n // // Return empty array if no roles found for this entity\n // return [];\n // }\n\n // /**\n // * Get filtered entity options with disabled state for already selected entities in other mappings\n // * @param currentMappingIndex The index of the current mapping being edited\n // * @returns Entity options with disabled state for already selected entities\n // */\n // getFilteredEntityOptions(currentMappingIndex: number): (CoreSystemEntityListResponse & { disabled?: boolean })[] {\n // const allEntities = this.entityOptions();\n // const currentMappings: CoreEntityMapping[] = this.entityMappingsFormArray.getRawValue();\n\n // // Get all selected entity IDs from other mappings (excluding current mapping)\n // const selectedEntityIds = currentMappings\n // .map((mapping: CoreEntityMapping, index: number) => {\n // if (index !== currentMappingIndex && mapping.syenm_entity_id_syen) {\n // // Handle both object and string formats\n // const entityId = mapping.syenm_entity_id_syen;\n // return entityId;\n // }\n // return null;\n // })\n // .filter((id: string | null) => id !== null && id !== '');\n\n // console.log(`🔍 Filtering entities for mapping ${currentMappingIndex}:`, {\n // totalEntities: allEntities.length,\n // selectedEntityIds,\n // availableEntities: allEntities.length - selectedEntityIds.length\n // });\n // console.log(`🏢 getFilteredEntityOptions selectedEntityIds:`, selectedEntityIds);\n // // Return all entities with disabled state for already selected ones\n // return allEntities.map((entity: CoreSystemEntityListResponse) => {\n // const entityId = entity._id;\n // const isDisabled = selectedEntityIds.includes(entityId as string);\n\n // if (isDisabled) {\n // console.log(`🚫 Entity \"${entity.syen_name}\" (${entityId}) is already selected in another mapping - marking as disabled`);\n // }\n\n // return {\n // ...entity,\n // disabled: isDisabled\n // };\n // });\n // }\n\n // /**\n // * Check if all entities are already selected in other mappings\n // * @param currentMappingIndex The index of the current mapping being edited\n // * @returns True if all entities are already selected\n // */\n // isAllEntitiesSelected(currentMappingIndex: number): boolean {\n // const allEntities = this.entityOptions();\n // const currentMappings = this.entityMappingsFormArray.value;\n\n // // Get all selected entity IDs from other mappings (excluding current mapping)\n // const selectedEntityIds = currentMappings\n // .map((mapping: EntityMappingWithExceptions, index: number) => {\n // if (index !== currentMappingIndex && mapping.syenm_entity_id_syen) {\n // const entityId = typeof mapping.syenm_entity_id_syen === 'object'\n // ? mapping.syenm_entity_id_syen._id\n // : mapping.syenm_entity_id_syen;\n // return entityId;\n // }\n // return null;\n // })\n // .filter((id: string | null) => id !== null && id !== '');\n\n // // Check if all entities are selected\n // return allEntities.length > 0 && selectedEntityIds.length >= allEntities.length;\n // }\n\n // /**\n // * Check if all entities are already mapped (for disabling Add Entity Mapping button)\n // * @returns True if all entities are already mapped\n // */\n // isAllEntitiesMapped(): boolean {\n // const allEntities = this.entityOptions();\n // const currentMappings = this.entityMappingsFormArray.value;\n\n // // Get all selected entity IDs\n // const selectedEntityIds = currentMappings\n // .map((mapping: EntityMappingWithExceptions) => {\n // if (mapping.syenm_entity_id_syen) {\n // const entityId = typeof mapping.syenm_entity_id_syen === 'object'\n // ? mapping.syenm_entity_id_syen._id\n // : mapping.syenm_entity_id_syen;\n // return entityId;\n // }\n // return null;\n // })\n // .filter((id: string | null) => id !== null && id !== '');\n\n // // Check if all entities are selected\n // return allEntities.length > 0 && selectedEntityIds.length >= allEntities.length;\n // }\n\n // /**\n // * Clear department selection for a specific mapping\n // */\n // private clearDepartmentForMapping(mappingIndex: number): void {\n // const formControl = this.userMasterForm.get(`core_entity_mapping.${mappingIndex}.syenm_department_id_sydept`);\n // if (formControl) {\n // formControl.setValue('');\n // }\n // }\n\n // /**\n // * Clear role selection for a specific mapping\n // */\n // private clearRoleForMapping(mappingIndex: number): void {\n // const formControl = this.userMasterForm.get(`core_entity_mapping.${mappingIndex}.syenm_role_id_syusrol`);\n // if (formControl) {\n // formControl.setValue('');\n // }\n // }\n\n // /**\n // * Load departments for a specific entity\n // */\n // private loadDepartmentsForEntity(mappingIndex: number, entityId: string): void {\n // console.log(`🏢 Loading departments for entity ${entityId} in mapping ${mappingIndex}`, this.departmentOptions());\n\n // // Check if we already have departments for this entity\n // const existingDepartments = this.departmentOptions()[entityId];\n // if (existingDepartments) {\n // console.log(`🏢 Using cached departments for entity ${entityId}:`, existingDepartments);\n // return;\n // }\n\n // // Load departments from service\n // this.departmentService.getDepartmentList({\n // sydept_entity_id_syen: entityId\n // }).subscribe({\n // next: (response) => {\n // if (response?.success) {\n // console.log(`🏢 Departments loaded for entity ${entityId}:`, response.data);\n\n // // Store departments for this entity\n // this.departmentOptions.update(map => ({\n // ...map,\n // [entityId]: response.data || []\n // }));\n // console.log(`🏢 departments:`, this.departmentOptions());\n // } else {\n // console.error(`❌ Failed to load departments for entity ${entityId}:`, response);\n // }\n // },\n // error: (error) => {\n // console.error(`❌ Error loading departments for entity ${entityId}:`, error);\n // }\n // });\n // }\n\n // /**\n // * Load roles for a specific entity\n // */\n // private loadRolesForEntity(mappingIndex: number, entityId: string): void {\n // console.log(`🎭 Loading roles for entity ${entityId} in mapping ${mappingIndex}`, this.roleOptions());\n\n // // Check if we already have roles for this entity\n // const existingRoles = this.roleOptions()[entityId];\n // if (existingRoles) {\n // console.log(`🎭 Using cached roles for entity ${entityId}:`, existingRoles);\n // return;\n // }\n\n // // Load roles from service using getUserRoleList\n // this.userRoleService.getUserRoleList({\n // syusrol_role_entity_id_syen: entityId\n // }).subscribe({\n // next: (response) => {\n // if (response?.success) {\n // console.log(`🎭 Roles loaded for entity ${entityId}:`, response.data);\n\n // // Store roles for this entity\n // this.roleOptions.update(map => ({\n // ...map,\n // [entityId]: response.data || []\n // }));\n // console.log(`🎭 roles:`, this.roleOptions());\n // } else {\n // console.error(`❌ Failed to load roles for entity ${entityId}:`, response);\n // }\n // },\n // error: (error) => {\n // console.error(`❌ Error loading roles for entity ${entityId}:`, error);\n // }\n // });\n // }\n\n // /**\n // * Get department options for a specific entity mapping\n // */\n // getDepartmentOptionsForEntity(mappingIndex: number): ICoreSydept[] {\n // const mapping = this.entityMappings()[mappingIndex];\n // console.log(`🏢 getDepartmentOptionsForEntity:`, mapping);\n // if (!mapping?.syenm_entity_id_syen?._id) {\n // return [];\n // }\n\n // const entityId = mapping?.syenm_entity_id_syen?._id || '';\n // console.log(`🏢 departments:`, this.departmentOptions());\n // const departments = this.departmentOptions()[entityId];\n\n // if (departments) {\n // return departments;\n // }\n // return [];\n // }\n\n // getDesignationOptionsForEntity(mappingIndex: number): ICoreSydsg[] {\n // const mapping = (this.entityMappingsFormArray?.getRawValue() as CoreEntityMapping[])[mappingIndex];\n // console.log(`🏢 Mapping:`, mapping);\n // if (!mapping?.syenm_department_id_sydept) {\n // return [];\n // }\n // const departmentId = mapping?.syenm_department_id_sydept || '';\n // const designations = this.designationOptions()[departmentId];\n // if (designations) {\n // return designations;\n // }\n\n // return [];\n // }\n\n // /**\n // * Initialize role permissions grid configuration\n // */\n // private initializeRolePermissionsGrid(): void {\n // this.rolePermissionsGridConfig.set({\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_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 // key: 'syme_permissions_id_sygms',\n // header: 'Permissions',\n // type: 'custom',\n // width: '200px',\n // truncate: true,\n // align: 'left',\n // renderer: 'permissionsRenderer'\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: 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 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 // 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\n // /**\n // * Handle role selection change\n // */\n // onRoleChange(mappingIndex: number, role: CoreUserRoleResponse): void {\n // console.log(`🎭 Role changed for mapping ${mappingIndex}:`, role);\n\n // if (!role) {\n // this.clearRolePermissions();\n // return;\n // }\n\n // this.selectedEntityIndex.set(mappingIndex);\n // this.selectedRoleId.set(role?._id || '');\n\n // // Load role details and permissions\n // this.loadRolePermissions(role?._id || '', mappingIndex);\n\n // // Automatically load menu rights when both entity and role are selected\n // const mapping = this.entityMappings()[mappingIndex];\n // if (mapping?.syenm_entity_id_syen && mapping?.syenm_role_id_syusrol) {\n // console.log(`🚀 Auto-loading menu rights for mapping ${mappingIndex}`);\n // this.loadMenuRights(mappingIndex);\n\n // // Force refresh the grid to show updated permission states\n // setTimeout(() => {\n // this.cdr.detectChanges();\n // }, 100);\n // }\n // }\n\n // /**\n // * Load role permissions from API\n // */\n // private loadRolePermissions(roleId: string, mappingIndex: number): void {\n // console.log(`🎭 Loading permissions for role:`, roleId);\n\n // this.loading.set(true);\n\n // // Load role details by ID\n // this.userRoleService.getUserRoleById({ syusrol_id: roleId }).subscribe({\n // next: (response) => {\n // if (response?.success && response.data) {\n // console.log(`🎭 Role details loaded:`, response.data);\n\n // // Store role permissions for simple lookup\n // this.storeRolePermissions(response.data, mappingIndex);\n // } else {\n // console.error(`❌ Failed to load role details:`, response);\n // this.notificationService.error('Failed to load role permissions', {\n // title: 'Load Failed',\n // duration: 5000\n // });\n // }\n // this.loading.set(false);\n // },\n // error: (error) => {\n // console.error(`❌ Error loading role details:`, error);\n // this.notificationService.error('Error loading role permissions', {\n // title: 'Load Failed',\n // duration: 5000\n // });\n // this.loading.set(false);\n // }\n // });\n // }\n\n // /**\n // * Update permission values for a specific menu row\n // */\n // updateMenuPermissionValues(mappingIndex: number, menuId: string): void {\n // console.log(`🎭 updateMenuPermissionValues called for mapping ${mappingIndex}, menu ${menuId}`);\n\n // this.menuRightsMap.update(map => {\n // const newMap = { ...map };\n // const menuRights = newMap[mappingIndex.toString()] || [];\n // console.log(`🎭 Current menuRights for mapping ${mappingIndex}:`, menuRights);\n\n // const updatedMenuRights = menuRights.map(menu => {\n // if (menu._id === menuId) {\n // // Re-compute permission values for this menu\n // const permissionValues: PermissionValues = {};\n\n // console.log(`🎭 Menu ${menu.syme_title} permissions:`, menu.syme_permissions_id_sygms);\n // if (menu.syme_permissions_id_sygms && menu.syme_permissions_id_sygms.length > 0) {\n // menu.syme_permissions_id_sygms.forEach(permissionId => {\n // const permission = this.getPermissionById(permissionId);\n // if (permission) {\n // const actualValue = this.isPermissionInRole(permissionId, mappingIndex, menu._id);\n\n // // For role permissions, use actualValue as the initial modifiedValue\n // // This ensures role permissions are checked when first loaded\n // let modifiedValue = actualValue;\n\n // // Only check form control value if we have a current mapping context\n // const currentMappingIndex = this.getCurrentMappingIndex();\n // if (currentMappingIndex !== null && currentMappingIndex === mappingIndex) {\n // modifiedValue = this.getFormControlValue(menu, permissionId);\n // }\n\n // permissionValues[permissionId] = {\n // checked: modifiedValue, // Use modified value for UI\n // permission: permission,\n // actual: actualValue, // Original role permission\n // modified: modifiedValue // Current form value\n // };\n\n // console.log(`🎭 Permission ${permission.sygms_title} for menu ${menu.syme_title}:`, {\n // actual: actualValue,\n // modified: modifiedValue,\n // checked: modifiedValue\n // });\n // }\n // });\n // }\n\n // console.log(`🎭 Final permissionValues for menu ${menu.syme_title}:`, permissionValues);\n\n // return {\n // ...menu,\n // _permissionValues: permissionValues\n // };\n // }\n // return menu;\n // });\n\n // newMap[mappingIndex.toString()] = updatedMenuRights;\n // return newMap;\n // });\n // }\n\n // /**\n // * Store role permissions for simple lookup\n // */\n // private storeRolePermissions(roleData: CoreUserRolePermissionData, mappingIndex: number): void {\n // console.log(`🎭 Storing role permissions for mapping ${mappingIndex}:`, roleData);\n\n // // Extract role permissions from the role data\n // const roleRights = roleData.core_user_role_rights;\n\n // if (roleRights && Array.isArray(roleRights)) {\n // // Store role permissions as objects with ID and title\n // const rolePermissionObjects = roleRights.map((right: CoreUserRoleRightsResponse) => {\n // const permission = right.syusrgt_role_permissions_id_sygms;\n // return {\n // _id: permission?._id as string,\n // sygms_title: permission?.sygms_title as string,\n // menu_id: right.syusrgt_menu_id_syme?._id\n // };\n // }).filter((permission: { _id: string; sygms_title: string }) => permission._id && permission.sygms_title);\n\n // // Update menuRightsMap with role permissions for each menu\n // this.menuRightsMap.update(menuMap => {\n // const newMenuMap = { ...menuMap };\n // const currentMenuRights = newMenuMap[mappingIndex.toString()] || [];\n\n // // Update each menu with its role permissions\n // const updatedMenuRights = currentMenuRights.map(menu => {\n // if (menu._id) {\n // const menuSpecificPermissions = rolePermissionObjects\n // .filter(permission =>\n // // Permission must be in the menu's allowed permissions list\n // menu.syme_permissions_id_sygms?.includes(permission._id) &&\n // // AND must be assigned to this menu in the role data\n // permission.menu_id === menu._id\n // );\n\n // return {\n // ...menu,\n // _rolePermissions: menuSpecificPermissions\n // };\n // }\n // return menu;\n // });\n\n // newMenuMap[mappingIndex.toString()] = updatedMenuRights;\n // return newMenuMap;\n // });\n\n // // Update permission values for all menus in this mapping\n // const menuRights = this.menuRightsMap()[mappingIndex.toString()] || [];\n // menuRights.forEach(menu => {\n // if (menu._id) {\n // this.updateMenuPermissionValues(mappingIndex, menu._id);\n // }\n // });\n\n // console.log(`🎭 Stored role permission objects for mapping ${mappingIndex}:`, rolePermissionObjects);\n\n // // Force UI update after role permissions are loaded\n // setTimeout(() => {\n // this.cdr.detectChanges();\n // this.updateMenuRightsGridData(mappingIndex);\n // }, 50);\n // } else {\n // console.log(`🎭 No role permissions found in role data`);\n // }\n // }\n\n // /**\n // * Clear role permissions\n // */\n // private clearRolePermissions(): void {\n // this.selectedRoleId.set(null);\n // this.selectedEntityIndex.set(null);\n // }\n\n // /**\n // * Find mapping index by entity mapping ID\n // */\n // private findMappingIndexByEntityMappingId(entityMappingId: string): number | null {\n // const mappings = this.entityMappings();\n // for (let i = 0; i < mappings.length; i++) {\n // if (mappings[i]._id === entityMappingId) {\n // return i;\n // }\n // }\n // return null;\n // }\n\n // /**\n // * Handle grid events for role permissions\n // */\n // onRolePermissionsGridEvent(event: GridEvent): void {\n // console.log('🎭 Role permissions grid event:', event);\n\n // switch (event.type) {\n // case 'search':\n // // Handle search if needed\n // break;\n // case 'rowClick':\n // // Handle row click if needed\n // break;\n // default:\n // break;\n // }\n // }\n\n // /**\n // * Get template renderers for role permissions grid\n // */\n // get templateRenderers() {\n // return {\n // menuDetailsRenderer: this.menuDetailsRendererTemplate(),\n // permissionsCheckboxRenderer: this.permissionsCheckboxRendererTemplate(),\n // menuTypeRenderer: this.menuTypeRendererTemplate()\n // };\n // }\n\n // /**\n // * Get permission by ID\n // */\n // getPermissionById(permissionId: string): ICoreSygms | undefined {\n // return this.permissions().find(permission => permission._id === permissionId);\n // }\n\n // /**\n // * Check if permission is available in the selected role for a specific menu\n // */\n // isPermissionInRole(permissionId: string, mappingIndex: number, menuId?: string): boolean {\n // const mapping = this.entityMappings()[mappingIndex];\n // const roleId = mapping?.syenm_role_id_syusrol;\n\n // console.log(`🎭 Checking permission ${permissionId} for role:`, roleId, 'menu:', menuId);\n\n // if (!roleId || !menuId) {\n // console.log(`🎭 No role ID or menu ID found for mapping ${mappingIndex}`);\n // return false;\n // }\n\n // // Get role permissions from the menu objects in menuRightsMap\n // const menuRights = this.menuRightsMap()[mappingIndex.toString()] || [];\n // const menu = menuRights.find(m => m._id === menuId);\n\n // if (menu && (menu as MenuWithPermissions)._rolePermissions) {\n // const rolePermissions = (menu as MenuWithPermissions)._rolePermissions;\n // const isInRole = rolePermissions?.some((permission) => permission._id === permissionId && permission.menu_id === menuId) || false;\n \n // // Check if there's an exception that overrides this role permission\n // const mapping = this.entityMappings()[mappingIndex];\n // const exceptions = (mapping as AuthUserCoreEntityMapping & { exceptions?: Array<CoreUserRoleExceptionsWithTracking> }).exceptions || [];\n // const exception = exceptions.find((ex) =>\n // ex.syusrex_menu_id_syme === menuId &&\n // ex.syusrex_role_permissions_id_sygms === permissionId\n // );\n \n // if (exception) {\n // // Exception overrides role permission - return the exception status\n // console.log(`🎭 Permission ${permissionId} has exception with status: ${exception.syusrex_status} for menu ${menuId}`);\n // return exception.syusrex_status || false;\n // }\n \n // console.log(`🎭 Permission ${permissionId} in role for menu ${menuId}: ${isInRole}`);\n // return isInRole;\n // }\n\n // // If role permissions are not loaded yet, return false\n // // This will be updated when role permissions are loaded\n // console.log(`🎭 Role permissions not loaded yet for mapping ${mappingIndex}, menu ${menuId}`);\n // return false;\n // }\n\n // /**\n // * Get form control value for a permission\n // */\n // getFormControlValue(row: ICoreSyme, permissionId: string): boolean {\n // console.log(`🎭 Getting form control value for permission: ${permissionId} for menu: ${row.syme_title}`, row);\n // const permission = this.getPermissionById(permissionId);\n // if (!permission) {\n // console.log(`🎭 Permission not found for ID: ${permissionId}`);\n // return false;\n // }\n\n // // Find the current mapping index\n // const mappingIndex = this.getCurrentMappingIndex();\n // if (mappingIndex === null) {\n // console.log(`🎭 No current mapping index found`);\n // return false;\n // }\n\n // // Check if permission is available in the role for this specific menu\n // const isRolePermission = this.isPermissionInRole(permissionId, mappingIndex, row._id);\n // console.log(`🎭 Permission ${permission.sygms_title} for menu ${row.syme_title}: isRolePermission = ${isRolePermission}`);\n\n // if (isRolePermission) {\n // // If permission is in role, it should be checked by default\n // console.log(`🎭 Returning true for role permission: ${permission.sygms_title}`);\n // return true;\n // } else {\n // // If permission is not in role, check if it's added as exception\n // const mapping = this.entityMappings()[mappingIndex];\n // const exceptions = (mapping as AuthUserCoreEntityMapping & { exceptions?: Array<CoreUserRoleExceptionsWithTracking> }).exceptions || [];\n // const exception = exceptions.find((ex) =>\n // ex.syusrex_menu_id_syme === row._id &&\n // ex.syusrex_role_permissions_id_sygms === permissionId\n // );\n \n // if (exception) {\n // // Return the actual status from the exception (true = checked, false = unchecked)\n // console.log(`🎭 Permission ${permission.sygms_title} exception status: ${exception.syusrex_status}`);\n // return exception.syusrex_status || false;\n // }\n \n // console.log(`🎭 Permission ${permission.sygms_title} no exception found`);\n // return false;\n // }\n // }\n\n\n // /**\n // * Handle permission change with type safety\n // */\n // onPermissionChangeSafe(checked: inputType, row: ICoreSyme, permissionId: string): void {\n // this.onPermissionChange(Boolean(checked), row, permissionId);\n // }\n\n // /**\n // * Handle permission change\n // */\n // onPermissionChange(checked: boolean, row: ICoreSyme, permissionId: string): void {\n // const permission = this.getPermissionById(permissionId);\n // if (!permission) return;\n\n // // Find the current mapping index\n // const mappingIndex = this.getCurrentMappingIndex();\n // if (mappingIndex === null) return;\n\n // // Check if permission is in role for this specific menu\n // const isRolePermission = this.isPermissionInRole(permissionId, mappingIndex, row._id);\n\n // if (isRolePermission) {\n // // Role permissions are handled by the role itself, no form controls needed\n // console.log('🎭 Role permission (handled by role):', {\n // menu: row.syme_title,\n // permission: permission.sygms_title,\n // checked: checked\n // });\n // } else {\n // // Handle exception permission\n // if (checked) {\n // // Add exception\n // this.addRoleException(mappingIndex, row._id || '', permissionId);\n // } else {\n // // Remove exception\n // this.removeRoleException(mappingIndex, row._id || '', permissionId);\n // }\n\n // console.log('🎭 Exception permission changed:', {\n // menu: row.syme_title,\n // permission: permission.sygms_title,\n // checked: checked\n // });\n // }\n\n // // Update the modified value for this specific permission\n // this.updatePermissionModifiedValue(mappingIndex, row._id || '', permissionId, checked);\n // }\n\n // /**\n // * Update the modified value for a specific permission\n // */\n // private updatePermissionModifiedValue(mappingIndex: number, menuId: string, permissionId: string, modifiedValue: boolean): void {\n // this.menuRightsMap.update(map => {\n // const newMap = { ...map };\n // const menuRights = newMap[mappingIndex.toString()] || [];\n\n // const updatedMenuRights = menuRights.map((menu: MenuWithPermissions) => {\n // if (menu._id === menuId && menu._permissionValues && menu._permissionValues[permissionId]) {\n // const currentPermission = menu._permissionValues[permissionId];\n // const actualValue = currentPermission.actual; // Original role permission value\n\n // // Update the modified value while keeping actual value unchanged\n // menu._permissionValues[permissionId] = {\n // ...currentPermission,\n // modified: modifiedValue,\n // checked: modifiedValue // Also update checked for UI\n // };\n\n // console.log(`🎭 Updated permission modified value for menu ${menuId}, permission ${permissionId}:`, {\n // actual: actualValue,\n // modified: modifiedValue,\n // changed: actualValue !== modifiedValue,\n // permission: currentPermission.permission?.sygms_title\n // });\n // }\n // return menu;\n // });\n\n // newMap[mappingIndex.toString()] = updatedMenuRights;\n // return newMap;\n // });\n // }\n\n // /**\n // * Handle permission change for specific mapping\n // */\n // onPermissionChangeForMapping(checked: boolean, row: ICoreSyme, permissionId: string, mappingIndex: number): void {\n // const permission = this.getPermissionById(permissionId);\n // if (!permission) return;\n\n // const controlName = `core_entity_mapping.${mappingIndex}.menu_rights.${row._id}.${permission.sygms_title}`;\n // this.userMasterForm.get(controlName)?.setValue(checked);\n\n // console.log('🎭 Permission changed for mapping:', {\n // mappingIndex,\n // menu: row.syme_title,\n // permission: permission.sygms_title,\n // checked: checked,\n // controlName\n // });\n // }\n\n // /**\n // * Get current mapping index (helper method)\n // */\n // private getCurrentMappingIndex(): number | null {\n // // Find the mapping index that has both entity and role selected\n // const entityMappings = this.entityMappings();\n // for (let i = 0; i < entityMappings.length; i++) {\n // const entityId = this.userMasterForm.get(`core_entity_mapping.${i}.syenm_entity_id_syen`)?.value;\n // const roleId = this.userMasterForm.get(`core_entity_mapping.${i}.syenm_role_id_syusrol`)?.value;\n\n // if (entityId && roleId) {\n // return i;\n // }\n // }\n // return null;\n // }\n\n // /**\n // * Add role exception\n // */\n // addRoleException(mappingIndex: number, menuId: string, permissionId: string): void {\n // const mapping = this.entityMappings()[mappingIndex];\n // const permission = this.getPermissionById(permissionId);\n\n // if (!mapping || !permission) return;\n\n // // Get the role ID directly (not as object)\n // const roleId = typeof mapping.syenm_role_id_syusrol === 'object'\n // ? (mapping.syenm_role_id_syusrol as { _id?: string })?._id ?? ''\n // : (mapping.syenm_role_id_syusrol as string | undefined) ?? '';\n\n // // Create exception object with change tracking\n // const exception: CoreUserRoleExceptionsWithTracking = {\n // syusrex_user_entity_mapping_id_syenm: mapping._id || '',\n // syusrex_role_id_syusrol: roleId, // Direct ID string\n // syusrex_role_permissions_id_sygms: permissionId,\n // syusrex_menu_id_syme: menuId,\n // syusrex_isactive: true,\n // syusrex_status: true, // Status for manually added exceptions (always true when explicitly added)\n // _isUserAdded: true, // Mark as explicitly added by user\n // _changeType: 'added' as const // Track the change type\n // };\n\n // // Add to entity mapping exceptions (check for duplicates first)\n // this.entityMappings.update(mappings => {\n // const updatedMappings = [...mappings];\n // const mappingWithExceptions = updatedMappings[mappingIndex] as AuthUserCoreEntityMapping & { exceptions?: Array<CoreUserRoleExceptionsWithTracking> };\n // if (!mappingWithExceptions.exceptions) {\n // mappingWithExceptions.exceptions = [];\n // }\n\n // // Check if exception already exists to prevent duplicates\n // const existingException = mappingWithExceptions.exceptions.find(ex =>\n // ex.syusrex_menu_id_syme === menuId &&\n // ex.syusrex_role_permissions_id_sygms === permissionId\n // );\n\n // if (!existingException) {\n // mappingWithExceptions.exceptions.push(exception);\n // console.log('🎭 Role exception added (new):', exception);\n // } else {\n // // If exception exists but was removed, mark it as added again\n // if ((existingException as CoreUserRoleExceptionsWithTracking)._isUserRemoved) {\n // (existingException as CoreUserRoleExceptionsWithTracking)._isUserRemoved = false;\n // (existingException as CoreUserRoleExceptionsWithTracking)._isUserAdded = true;\n // (existingException as CoreUserRoleExceptionsWithTracking)._changeType = 'added';\n // existingException.syusrex_isactive = true;\n // console.log('🎭 Role exception reactivated:', existingException);\n // } else {\n // console.log('🎭 Role exception already exists, skipping duplicate:', existingException);\n // }\n // }\n\n // return updatedMappings;\n // });\n\n // console.log('🎭 Role exception added:', exception);\n // }\n\n // /**\n // * Remove role exception\n // */\n // removeRoleException(mappingIndex: number, menuId: string, permissionId: string): void {\n // this.entityMappings.update(mappings => {\n // const updatedMappings = [...mappings];\n // const mapping = updatedMappings[mappingIndex] as AuthUserCoreEntityMapping & { exceptions?: Array<CoreUserRoleExceptionsWithTracking> };\n // if (mapping.exceptions) {\n // // Instead of removing, mark as removed for tracking\n // mapping.exceptions = mapping.exceptions.map((exception) => {\n // if (exception.syusrex_menu_id_syme === menuId && exception.syusrex_role_permissions_id_sygms === permissionId) {\n // return {\n // ...exception,\n // _isUserRemoved: true,\n // _changeType: 'removed' as const,\n // syusrex_isactive: false\n // };\n // }\n // return exception;\n // });\n // }\n // return updatedMappings;\n // });\n\n // console.log('🎭 Role exception marked as removed:', { mappingIndex, menuId, permissionId });\n // }\n\n // /**\n // * Collect only changed role exceptions from entity mappings\n // */\n // collectRoleExceptions(): Array<{\n // syusrex_user_entity_mapping_id_syenm: string;\n // syusrex_role_id_syusrol: string;\n // syusrex_role_permissions_id_sygms: string;\n // syusrex_menu_id_syme: string;\n // syusrex_isactive: boolean;\n // _changeType: string;\n // }> {\n // const exceptions: Array<{\n // syusrex_user_entity_mapping_id_syenm: string;\n // syusrex_role_id_syusrol: string;\n // syusrex_role_permissions_id_sygms: string;\n // syusrex_menu_id_syme: string;\n // syusrex_isactive: boolean;\n // _changeType: string;\n // }> = [];\n // const entityMappings = this.entityMappings();\n\n // entityMappings.forEach((mapping, mappingIndex) => {\n // // Get exceptions from the mapping\n // const mappingWithExceptions = mapping as AuthUserCoreEntityMapping & { exceptions?: Array<CoreUserRoleExceptionsWithTracking> };\n // const mappingExceptions = mappingWithExceptions.exceptions || [];\n\n // // Only include exceptions that have been explicitly changed by the user\n // mappingExceptions.forEach((exception) => {\n // // Check if this exception was explicitly added or removed by the user\n // if (exception._isUserAdded || exception._isUserRemoved) {\n // // Ensure role ID is direct string, not object\n // const roleId = (mapping.syenm_role_id_syusrol as { _id?: string })?._id ?? '';\n\n // // Create a unique key for this exception to prevent duplicates\n // const exceptionKey = `${mapping._id || `temp_${mappingIndex}`}_${roleId}_${exception.syusrex_role_permissions_id_sygms}_${exception.syusrex_menu_id_syme}`;\n\n // // Check if this exception already exists in the collection\n // const existingException = exceptions.find(ex =>\n // ex.syusrex_user_entity_mapping_id_syenm === (mapping._id || `temp_${mappingIndex}`) &&\n // ex.syusrex_role_id_syusrol === roleId &&\n // ex.syusrex_role_permissions_id_sygms === exception.syusrex_role_permissions_id_sygms &&\n // ex.syusrex_menu_id_syme === exception.syusrex_menu_id_syme\n // );\n\n // if (!existingException) {\n // exceptions.push({\n // syusrex_user_entity_mapping_id_syenm: mapping._id || `temp_${mappingIndex}`,\n // syusrex_role_id_syusrol: roleId,\n // syusrex_role_permissions_id_sygms: exception.syusrex_role_permissions_id_sygms || '',\n // syusrex_menu_id_syme: exception.syusrex_menu_id_syme || '',\n // syusrex_isactive: exception.syusrex_isactive || false,\n // _changeType: exception._changeType || 'unknown'\n // });\n // } else {\n // console.log('🎭 Duplicate exception prevented:', exceptionKey);\n // }\n // }\n // });\n // });\n\n // console.log('🎭 Collected changed role exceptions:', exceptions);\n // return exceptions;\n // }\n\n\n // /**\n // * Check if permission is selected for a menu\n // */\n // isPermissionSelected(menuId: string, permissionId: string): boolean {\n // const mappingIndex = this.getCurrentMappingIndex();\n // if (mappingIndex === null) return false;\n\n // return this.isPermissionInRole(permissionId, mappingIndex, menuId);\n // }\n\n // /**\n // * Handle permission checkbox change (read-only in this context)\n // */\n // onPermissionCheckboxChange(menuId: string, permissionId: string, isSelected: boolean): void {\n // // This is read-only, so we don't actually change anything\n // console.log(`🎭 Permission checkbox change (read-only): ${menuId} - ${permissionId} - ${isSelected}`);\n // }\n\n // /**\n // * Check if a menu has child menus with permissions\n // */\n // hasChildMenusWithPermissions(menuId: string): boolean {\n // // For simplified approach, we don't need to check child menus\n // // Just return false as we're not using hierarchical permission checking\n // return false;\n // }\n\n // /**\n // * Update menu rights grid data to force refresh\n // */\n // updateMenuRightsGridData(mappingIndex: number): void {\n // const menuRights = this.getMenuRightsForMapping(mappingIndex);\n // console.log('🔄 Updating menu rights grid data:', menuRights);\n\n // // Force update the grid configuration\n // this.menuRightsMap.update(map => {\n // const newMap = { ...map };\n // newMap[mappingIndex.toString()] = menuRights;\n // return newMap;\n // });\n // }\n\n // /**\n // * Get menu rights grid configuration for a specific mapping\n // */\n // getMenuRightsGridConfig(mappingIndex: number): GridConfiguration<MenuWithPermissions> {\n // const menuRights = this.getMenuRightsForMapping(mappingIndex);\n\n // console.log(`🔍 Grid config for mapping ${mappingIndex}:`);\n // console.log(`📊 Menu rights count:`, menuRights.length);\n // console.log(`📋 Menu rights data:`, menuRights);\n\n // return {\n // id: `menu-rights-grid-${mappingIndex}`,\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_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 // key: 'syme_permissions_id_sygms',\n // header: 'Permissions',\n // type: 'custom',\n // width: '200px',\n // truncate: true,\n // align: 'left',\n // renderer: 'permissionsRenderer'\n // }\n // ],\n // data: menuRights,\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 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 // 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\n // /**\n // * Get template renderers for menu rights grid\n // */\n // getMenuRightsTemplateRenderers(mappingIndex: number) {\n // return {\n // menuDetailsRenderer: this.menuDetailsRendererTemplate(),\n // menuTypeRenderer: this.menuTypeRendererTemplate(),\n // permissionsRenderer: this.permissionsRendererTemplate()\n // };\n // }\n\n // /**\n // * Handle menu rights grid events\n // */\n // onMenuRightsGridEvent(event: GridEvent<MenuWithPermissions>, mappingIndex: number): void {\n // console.log('🎭 Menu rights grid event:', event, 'for mapping:', mappingIndex);\n\n // switch (event.type) {\n // case 'search':\n // // Handle search if needed\n // break;\n // case 'rowClick':\n // // Handle row click if needed\n // break;\n // default:\n // break;\n // }\n // }\n\n\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(`core_entity_mapping.${mappingIndex}.exceptions.${exceptionIndex}.syusrex_menu_id_syme`, this.fb.control(''));\n // // this.userMasterForm.addControl(`core_entity_mapping.${mappingIndex}.exceptions.${exceptionIndex}.syusrex_role_permissions_id_sygms`, this.fb.control(''));\n // // this.userMasterForm.addControl(`core_entity_mapping.${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((_, i: number) => i !== exceptionIndex);\n // return updatedMappings;\n // });\n // }\n\n // private removePermissionExceptionControls(mappingIndex: number, exceptionIndex: number) {\n // this.userMasterForm.removeControl(`core_entity_mapping.${mappingIndex}.exceptions.${exceptionIndex}.syusrex_menu_id_syme`);\n // this.userMasterForm.removeControl(`core_entity_mapping.${mappingIndex}.exceptions.${exceptionIndex}.syusrex_role_permissions_id_sygms`);\n // this.userMasterForm.removeControl(`core_entity_mapping.${mappingIndex}.exceptions.${exceptionIndex}.syusrex_isactive`);\n // }\n\n // getPermissionExceptions(mappingIndex: number): CoreUserRoleExceptionsWithTracking[] {\n // const mapping = this.entityMappings()[mappingIndex];\n // // return mapping?.exceptions || [];\n // return [];\n // }\n\n // // Menu Rights Methods\n // getMenuRightsForMapping(mappingIndex: number): MenuWithPermissions[] {\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_entity_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 // console.log('🚀 Loading menu rights for mapping:', mappingIndex);\n // this.loading.set(true);\n\n // // Use actual API call to get menu list\n // const requestBody: MMenuListPayload = {\n // pageIndex: 1,\n // pageSize: 1000, // Get all menu items - increased to ensure we get all records\n // total: 1000, // Set total to match pageSize to get all records\n // sort: { order: 'asc', key: 'syme_order_by' }\n // };\n\n // console.log('📤 Request body for menu list:', requestBody);\n\n // this.menuService.getMenuList(requestBody)\n // .pipe(takeUntilDestroyed(this.destroyRef))\n // .subscribe({\n // next: (response) => {\n // console.log('✅ Menu list loaded successfully:', response);\n // console.log('📊 Total menu items received:', response?.data?.length || 0);\n // console.log('📋 Menu items data:', response?.data);\n // if (response?.success && response?.data) {\n // // Use menu data directly without transformation\n // const menuRights = response.data.map((menu: ICoreSyme): MenuWithPermissions => {\n // // Get only the permissions that are mapped to this menu\n // const mappedPermissions = this.permissions().filter(permission =>\n // menu.syme_permissions_id_sygms?.includes(permission._id || '')\n // );\n\n // // Pre-compute permission values for template performance\n // const permissionValues: {\n // [permissionId: string]: {\n // checked: boolean;\n // permission: ICoreSygms;\n // actual: boolean; // Original role permission value\n // modified: boolean; // Current form value (may differ from actual)\n // }\n // } = {};\n\n // if (menu.syme_permissions_id_sygms) {\n // menu.syme_permissions_id_sygms.forEach(permissionId => {\n // const permission = this.getPermissionById(permissionId);\n // if (permission) {\n // // Initialize with false values - will be updated when role permissions are loaded\n // const actualValue = false; // Will be updated by storeRolePermissions\n // const modifiedValue = false; // Will be updated by storeRolePermissions\n\n // permissionValues[permissionId] = {\n // checked: modifiedValue, // Use modified value for UI\n // permission: permission,\n // actual: actualValue, // Original role permission\n // modified: modifiedValue // Current form value\n // };\n // }\n // });\n // }\n\n // return {\n // ...menu,\n // role_rights: mappedPermissions, // Use only mapped permissions\n // exceptions: [],\n // _permissionValues: permissionValues // Pre-computed values\n // };\n // });\n\n // // Update menu rights map\n // this.menuRightsMap.update(map => {\n // const newMap = {\n // ...map,\n // [mappingIndex.toString()]: menuRights\n // };\n // console.log('🗺️ Updated menu rights map:', newMap);\n // return newMap;\n // });\n\n // console.log('📊 Processed menu rights count:', menuRights.length);\n // console.log('📋 Menu rights data:', menuRights);\n\n // // Initialize entity mapping exceptions array if not exists\n // this.entityMappings.update(mappings => {\n // const updatedMappings = [...mappings];\n // if (!(updatedMappings[mappingIndex] as EntityMappingWithExceptions).exceptions) {\n // (updatedMappings[mappingIndex] as EntityMappingWithExceptions).exceptions = [];\n // }\n // return updatedMappings;\n // });\n\n // console.log('✅ Menu rights loaded for mapping', mappingIndex);\n\n // // Check if role permissions are loaded, if not, load them\n // const mapping = this.entityMappings()[mappingIndex];\n // const roleId = typeof mapping.syenm_role_id_syusrol === 'object'\n // ? mapping.syenm_role_id_syusrol._id\n // : mapping.syenm_role_id_syusrol;\n\n // if (roleId) {\n // // Load role permissions - exceptions will be applied after role permissions are loaded\n // console.log(`🎭 Loading role permissions for mapping ${mappingIndex} with role ${roleId}`);\n // this.loadRolePermissions(roleId, mappingIndex);\n // }\n\n // // Force refresh the grid to show updated permission states\n // setTimeout(() => {\n // this.cdr.detectChanges();\n // // Also update the grid configuration to ensure data refresh\n // this.updateMenuRightsGridData(mappingIndex);\n // }, 100);\n // } else {\n // console.warn('⚠️ No menu data received from API');\n // this.notificationService.error('No menu data received from server', {\n // title: 'Load Failed',\n // duration: 5000\n // });\n // }\n // this.loading.set(false);\n // },\n // error: (error) => {\n // console.error('❌ Error loading menu rights:', error);\n // this.notificationService.error('Failed to load menu rights', {\n // title: 'Load Failed',\n // duration: 5000\n // });\n // this.loading.set(false);\n // }\n // });\n // }\n\n // refreshMenuRights(mappingIndex: number) {\n // this.clearMenuRightsForMapping(mappingIndex);\n // this.loadMenuRights(mappingIndex);\n // }\n\n // clearMenuRightsForMapping(mappingIndex: number) {\n // // Clear exceptions from entity mapping\n // this.entityMappings.update(mappings => {\n // const updatedMappings = [...mappings];\n // (updatedMappings[mappingIndex] as EntityMappingWithExceptions).exceptions = [];\n // return updatedMappings;\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 // /**\n // * Load user rights type ID from general master types\n // */\n // private loadUserRightsTypeId(): void {\n // this.generalMasterTypeService.getTypeList({\n // sygmt_code: \"user_rights\"\n // })\n // .pipe(takeUntilDestroyed(this.destroyRef))\n // .subscribe({\n // next: (response) => {\n // if (response?.success && response.data) {\n // const userRightsType = response.data.find(type =>\n // type.sygmt_code === 'user_rights' || type.sygmt_title?.toLowerCase().includes('user_rights')\n // );\n // if (userRightsType) {\n // this.userRightsTypeId.set(userRightsType._id || null);\n // this.loadPermissions();\n // } else {\n // this.notificationService.error('User rights type not found in general master types', {\n // title: 'Configuration Error',\n // duration: 5000\n // });\n // }\n // }\n // },\n // error: (err) => {\n // this.notificationService.error('Failed to load user rights type', {\n // title: 'Load Failed',\n // duration: 5000\n // });\n // }\n // });\n // }\n\n // /**\n // * Load permissions from general master\n // */\n // private loadPermissions(): void {\n // const typeId = this.userRightsTypeId();\n // if (!typeId) {\n // this.notificationService.error('User rights type not found. Please ensure the \"user_rights\" type exists in general master types.', {\n // title: 'Configuration Error',\n // duration: 5000\n // });\n // return;\n // }\n\n // const payload: IGeneralMasterListRequest = { sygms_id_sygmt: typeId };\n // this.CideCoreGeneralMasterService.getMasterList(payload)\n // .pipe(takeUntilDestroyed(this.destroyRef))\n // .subscribe({\n // next: (response) => {\n // if (response?.success && response.data) {\n // this.permissions.set(response.data);\n // } else {\n // this.permissions.set([]);\n // this.notificationService.error('No permissions found. Please ensure permissions are configured in general master.', {\n // title: 'Configuration Error',\n // duration: 5000\n // });\n // }\n // },\n // error: (err) => {\n // this.permissions.set([]);\n // this.notificationService.error('Failed to load permissions from general master. Please check your configuration.', {\n // title: 'Load Failed',\n // duration: 5000\n // });\n // }\n // });\n // }\n\n // hasRoleRight(menuRight: MenuRight, permission: string): boolean {\n // return menuRight.role_rights.includes(permission);\n // }\n\n // canOverrideRight(menuRight: MenuRight, 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: EventWithQuery | Event) {\n // console.log(event, 'onDefaultEntityChange');\n // const isDefault = (event as any)?.target?.checked || (event as any)?.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 FormArray controls to reflect the change\n // for (let i = 0; i < this.entityMappingsFormArray.length; i++) {\n // const formGroup = this.entityMappingsFormArray.at(i) as FormGroup;\n // const defaultControl = formGroup.get('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._id === defaultMapping.syenm_entity_id_syen);\n // return entity?.syen_name || '';\n // }\n // return '';\n // }\n\n // hasDefaultEntity(): boolean {\n // return this.entityMappings().some(mapping => mapping.syenm_isdefault);\n // }\n\n // // User Context Header Methods\n // getUserFullName(): string {\n // const firstName = this.userMasterForm.get('user_firstname')?.value || '';\n // const middleName = this.userMasterForm.get('user_middlename')?.value || '';\n // const lastName = this.userMasterForm.get('user_lastname')?.value || '';\n\n // const fullName = this.userMasterForm.get('user_fullname')?.value;\n // if (fullName) {\n // return fullName;\n // }\n\n // // Auto-generate from parts\n // const parts = [firstName, middleName, lastName].filter(part => part.trim());\n // return parts.join(' ');\n // }\n\n // // Auto-generate full name from name components\n // generateFullName(): void {\n // const firstName = this.userMasterForm.get('user_firstname')?.value || '';\n // const middleName = this.userMasterForm.get('user_middlename')?.value || '';\n // const lastName = this.userMasterForm.get('user_lastname')?.value || '';\n\n // // Create full name from parts, filtering out empty values\n // const parts = [firstName, middleName, lastName].filter(part => part && part.trim());\n // const generatedFullName = parts.join(' ');\n\n // // Update the full name field if we have any name parts\n // console.log('Generated full name:', generatedFullName);\n // if (generatedFullName) {\n // this.userMasterForm.get('user_fullname')?.setValue(generatedFullName);\n // }\n // }\n\n // // Handle name field changes to auto-generate full name\n // onNameFieldChange(): void {\n // this.generateFullName();\n // }\n\n // getUserUsername(): string {\n // return this.userMasterForm.get('user_username')?.value || '';\n // }\n\n // getUserEmail(): string {\n // return this.userMasterForm.get('user_emailid')?.value || '';\n // }\n\n // getUserMobile(): string {\n // return this.userMasterForm.get('user_mobileno')?.value || '';\n // }\n\n // getUserActivePeriod(): string {\n // // Active period is now managed at entity mapping level\n // return 'Managed per entity';\n // }\n\n // getUserActiveStatus(): boolean {\n // return this.userMasterForm.get('user_isactive')?.value || false;\n // }\n\n // getUserPhoto(): string | null {\n // // Return the profile photo preview URL if available\n // return this.profilePhotoPreview();\n // }\n\n // getEntityMappingCount(): number {\n // return this.entityMappings().length;\n // }\n\n // /**\n // * Handle profile photo upload success\n // */\n // onProfilePhotoUploadSuccess(fileId: string): void {\n // console.log('✅ Profile photo uploaded successfully with ID:', fileId);\n // // The form control is automatically updated by the file input component\n // }\n\n // /**\n // * Handle profile photo upload error\n // */\n // onProfilePhotoUploadError(error: string): void {\n // console.error('❌ Profile photo upload failed:', error);\n // // Error notifications are now handled by the file input component itself\n // }\n\n // /**\n // * Handle profile photo upload progress\n // */\n // onProfilePhotoUploadProgress(progress: number): void {\n // // Progress notifications are now handled by the file input component itself\n // console.log('📸 Profile photo upload progress:', progress);\n // }\n\n // /**\n // * Get upload data for profile photo\n // */\n // getProfilePhotoUploadData() {\n // return {\n // altText: 'User Profile Photo',\n // userId: this.appState.currentUser()?._id || '',\n // permissions: ['read', 'write'],\n // tags: ['user', 'profile', 'photo', 'avatar'],\n // uploadType: 'user_profile_photo',\n // };\n // }\n\n // /**\n // * Get upload data for document files with group ID\n // */\n // getDocumentUploadData(documentIndex: number) {\n // const documentFormGroup = this.documentsFormArray.at(documentIndex);\n // const photoGroupId = documentFormGroup?.get('syusd_photo_group_id_cyfm')?.value;\n // const documentType = documentFormGroup?.get('syusd_document_type_id_sygms')?.value;\n // const documentNumber = documentFormGroup?.get('syusd_doc_number')?.value;\n\n // // Get document type name for better tagging\n // const documentTypeName = this.documentTypeOptions().find(opt => opt._id === documentType)?.sygms_title || 'Document';\n\n // return {\n // altText: `${documentTypeName} - ${documentNumber || 'Document'}`,\n // userId: this.appState.currentUser()?._id || '',\n // groupId: photoGroupId, // Use photo group ID or generate one\n // permissions: ['read', 'write'],\n // tags: ['user', 'document', documentTypeName.toLowerCase(), 'file'],\n // uploadType: 'user_document',\n // documentIndex: documentIndex,\n // documentType: documentType,\n // documentNumber: documentNumber\n // };\n // }\n\n // /**\n // * Handle document upload success\n // * For multiple file upload, uploadResponse is the group ID\n // */\n // onDocumentUploadSuccess(groupId: string, documentIndex: number): void {\n // console.log(`📎 Document upload success for document ${documentIndex} with group ID:`, groupId);\n\n // // Update the photo group ID in the form\n // const documentFormGroup = this.documentsFormArray.at(documentIndex);\n // if (documentFormGroup && groupId) {\n // documentFormGroup.get('syusd_photo_group_id_cyfm')?.setValue(groupId);\n // console.log(`📎 Updated photo group ID for document ${documentIndex}:`, groupId);\n // }\n\n // // For multiple file upload, we don't track individual files here\n // // The files are managed by the group ID on the server\n // // Clear any existing file tracking since we now use group ID\n // (documentFormGroup as DocumentFormGroup)._uploadedFiles = [];\n // }\n\n // /**\n // * Handle document upload error\n // */\n // onDocumentUploadError(error: Error | string, documentIndex: number): void {\n // console.error(`❌ Document upload error for document ${documentIndex}:`, error);\n // this.notificationService.error(`Failed to upload document file: ${typeof error === 'string' ? error : error?.message || 'Unknown error'}`, {\n // title: 'Upload Failed',\n // duration: 5000\n // });\n // }\n\n // /**\n // * Handle document upload progress\n // */\n // onDocumentUploadProgress(progress: number, documentIndex: number): void {\n // console.log(`📊 Document upload progress for document ${documentIndex}: ${progress}%`);\n // // You can add progress indication here if needed\n // }\n\n // /**\n // * Load profile photo preview for existing photos\n // */\n // private loadProfilePhotoPreview(fileId: string): void {\n // // The file-input component will handle loading the file details automatically\n // // when the form control value is set to the file ID\n // console.log('📸 Profile photo preview will be loaded by file-input component for ID:', fileId);\n // }\n\n // addContactAddress() {\n // // Generate a new ObjectId for the address\n // this.fileManagerService.generateObjectId().subscribe({\n // next: (response: mongooseObjectIdCreateControllerResponse) => {\n // const newObjectId = response.data?.objectId as string;\n // console.log('🆔 [UserCreate] Generated new ObjectId for address:', newObjectId);\n\n // // Create entity access pass management record with owner rights\n // const currentUser = this.appState.currentUser();\n // const currentEntity = this.appState.activeEntity();\n\n // const core_entity_access_pass_management = {\n // syepm_user_id_user: currentUser?._id || '',\n // syepm_entity_id_syen: currentEntity?._id || '',\n // syepm_access_passs_to: newObjectId,\n // syepm_can_view: true,\n // syepm_can_edit: true,\n // syepm_is_owner: true, // Set as owner\n // syepm_isactive: true,\n // syepm_actions_allowed: ['view', 'edit', 'delete', 'share']\n // };\n\n // const newAddress = {\n // _id: newObjectId, // Assign the generated ObjectId\n // sycad_contact_person_name: '',\n // sycad_address_type_id_sygms: {\n // _id: '',\n // sygms_name: ''\n // },\n // sycad_contact_person_syfdl: {\n // _id: '',\n // syfdl_first_name: ''\n // },\n // sycad_contact_pin_sypin: {\n // _id: '',\n // sypin_pincode: 0\n // },\n // sycad_contact_country_syctr: {\n // _id: '',\n // syctr_country_iso_name: ''\n // },\n // sycad_contact_address: '',\n // sycad_contact_city_sypin: '',\n // sycad_contact_state_sypin: '',\n // sycad_contact_phone: undefined,\n // sycad_contact_phone_alt: undefined,\n // sycad_contact_fax: '',\n // sycad_contact_email: '',\n // sycad_contact_email_alt: '',\n // core_entity_access_pass_management: core_entity_access_pass_management // Add access pass management directly to address\n // };\n\n // // Update signal for UI tracking\n // this.contactAddresses.update(addresses => [...addresses, newAddress]);\n\n // // Add FormGroup to FormArray\n // const addressFormGroup = this.createContactAddressFormGroup();\n // // Set the _id in the FormGroup\n // addressFormGroup.patchValue({ _id: newObjectId });\n // this.contactAddressesFormArray.push(addressFormGroup);\n\n // // Get the new address index\n // const newAddressIndex = this.contactAddresses().length - 1;\n\n // // Initialize dropdown data for the new address\n // this.addressPostalCodes.update(current => ({ ...current, [newAddressIndex]: [] }));\n // this.addressCountries.update(current => ({ ...current, [newAddressIndex]: [] }));\n // this.addressPostalCodesLoading.update(current => ({ ...current, [newAddressIndex]: false }));\n // this.addressCountriesLoading.update(current => ({ ...current, [newAddressIndex]: false }));\n // this.postalCodeDataCache.update(current => ({ ...current, [newAddressIndex]: [] }));\n\n // // Load initial countries for this address\n // this.loadCountriesForAddress(newAddressIndex);\n\n // // Apply access control after adding new address\n // this.applyContactAddressAccessControl();\n // },\n // error: (error: Error) => {\n // console.error('❌ [UserCreate] Failed to generate ObjectId for address:', error);\n // // Fallback: create address without ObjectId (will be generated on save)\n // const newAddress = {\n // sycad_contact_person_name: '',\n // sycad_address_type_id_sygms: {\n // _id: '',\n // sygms_name: ''\n // },\n // sycad_contact_person_syfdl: {\n // _id: '',\n // syfdl_first_name: ''\n // },\n // sycad_contact_pin_sypin: {\n // _id: '',\n // sypin_pincode: 0\n // },\n // sycad_contact_country_syctr: {\n // _id: '',\n // syctr_country_iso_name: ''\n // },\n // sycad_contact_address: '',\n // sycad_contact_city_sypin: '',\n // sycad_contact_state_sypin: '',\n // sycad_contact_phone: undefined,\n // sycad_contact_phone_alt: undefined,\n // sycad_contact_fax: '',\n // sycad_contact_email: '',\n // sycad_contact_email_alt: ''\n // };\n\n // // Update signal for UI tracking\n // this.contactAddresses.update(addresses => [...addresses, newAddress]);\n\n // // Add FormGroup to FormArray\n // const addressFormGroup = this.createContactAddressFormGroup();\n // // Note: _id will be empty for fallback case, will be generated on save\n // this.contactAddressesFormArray.push(addressFormGroup);\n\n // // Get the new address index\n // const newAddressIndex = this.contactAddresses().length - 1;\n\n // // Initialize dropdown data for the new address\n // this.addressPostalCodes.update(current => ({ ...current, [newAddressIndex]: [] }));\n // this.addressCountries.update(current => ({ ...current, [newAddressIndex]: [] }));\n // this.addressPostalCodesLoading.update(current => ({ ...current, [newAddressIndex]: false }));\n // this.addressCountriesLoading.update(current => ({ ...current, [newAddressIndex]: false }));\n // this.postalCodeDataCache.update(current => ({ ...current, [newAddressIndex]: [] }));\n\n // // Load initial countries for this address\n // this.loadCountriesForAddress(newAddressIndex);\n\n // // Apply access control after adding new address (fallback case)\n // this.applyContactAddressAccessControl();\n // }\n // });\n // }\n\n // removeContactAddress(index: number) {\n // // Remove from FormArray\n // this.contactAddressesFormArray.removeAt(index);\n\n // // Update signal for UI tracking\n // this.contactAddresses.update(addresses => addresses.filter((_, i) => i !== index));\n\n // // Apply access control after removing address\n // this.applyContactAddressAccessControl();\n\n // // Clean up dropdown data for the removed address\n // this.addressPostalCodes.update(current => {\n // const newData = { ...current };\n // delete newData[index];\n // return newData;\n // });\n // this.addressCountries.update(current => {\n // const newData = { ...current };\n // delete newData[index];\n // return newData;\n // });\n // this.addressPostalCodesLoading.update(current => {\n // const newData = { ...current };\n // delete newData[index];\n // return newData;\n // });\n // this.addressCountriesLoading.update(current => {\n // const newData = { ...current };\n // delete newData[index];\n // return newData;\n // });\n // this.postalCodeDataCache.update(current => {\n // const newData = { ...current };\n // delete newData[index];\n // return newData;\n // });\n // }\n\n // addDocument() {\n // // Generate a new ObjectId for the document\n // this.fileManagerService.generateObjectId().subscribe({\n // next: (response: mongooseObjectIdCreateControllerResponse) => {\n // const newObjectId = response.data?.objectId as string;\n // console.log('🆔 [UserCreate] Generated new ObjectId for document:', newObjectId);\n\n // // Create entity access pass management record with owner rights\n // const currentUser = this.appState.currentUser();\n // const currentEntity = this.appState.activeEntity();\n\n // const core_entity_access_pass_management = {\n // syepm_user_id_user: currentUser?._id || '',\n // syepm_entity_id_syen: currentEntity?._id || '',\n // syepm_access_passs_to: newObjectId,\n // syepm_can_view: true,\n // syepm_can_edit: true,\n // syepm_is_owner: true, // Set as owner\n // syepm_isactive: true,\n // syepm_actions_allowed: ['view', 'edit', 'delete', 'share']\n // };\n\n // const newDocument = {\n // _id: newObjectId, // Assign the generated ObjectId\n // syusd_user_id_user: '',\n // syusd_document_type_id_sygms: {\n // _id: '',\n // sygms_name: ''\n // },\n // syusd_doc_number: '',\n // syusd_doc_name_as_per_doc: '',\n // syusd_doc_issue_date: new Date(),\n // syusd_doc_expiry_date: new Date(),\n // syusd_photo_group_id_cyfm: {\n // _id: '',\n // cyfm_name: ''\n // },\n // syusd_doc_verification_status_id_sygms: {\n // _id: '',\n // sygms_name: ''\n // },\n // syusd_doc_kyc_status_id_sygms: {\n // _id: '',\n // sygms_name: ''\n // },\n // syusd_isactive: true,\n // core_entity_access_pass_management: core_entity_access_pass_management // Add access pass management directly to document\n // } as DocumentObject;\n\n // // Update signal for UI tracking\n // this.documents.update(docs => [...docs, newDocument]);\n\n // // Add FormGroup to FormArray\n // const documentFormGroup = this.createDocumentFormGroup();\n // // Set the _id in the FormGroup\n // documentFormGroup.patchValue({ _id: newObjectId });\n // this.documentsFormArray.push(documentFormGroup);\n\n // // Apply access control after adding new document\n // this.applyDocumentAccessControl();\n // },\n // error: (error: Error) => {\n // console.error('❌ [UserCreate] Failed to generate ObjectId for document:', error);\n\n // // Fallback: Create document without _id (old behavior)\n // const newDocumentGroup = this.createDocumentFormGroup();\n // this.documentsFormArray.push(newDocumentGroup);\n // this.documents.update(docs => [...docs, newDocumentGroup.value]);\n // this.applyDocumentAccessControl();\n // }\n // });\n // }\n\n // removeDocument(index: number) {\n // // Clean up uploaded files for this document\n // const documentFormGroup = this.documentsFormArray.at(index);\n // if (documentFormGroup) {\n // (documentFormGroup as DocumentFormGroup)._uploadedFiles = [];\n // }\n\n // // Remove the document from the FormArray\n // this.documentsFormArray.removeAt(index);\n\n // // Update the documents signal to keep UI in sync\n // this.documents.update(docs => docs.filter((_, i) => i !== index));\n\n // // Apply access control after removing document\n // this.applyDocumentAccessControl();\n // }\n\n // addFamilyDetail() {\n // // Generate a new ObjectId for the family detail\n // this.fileManagerService.generateObjectId().subscribe({\n // next: (response: mongooseObjectIdCreateControllerResponse) => {\n // const newObjectId = response.data?.objectId as string;\n // console.log('🆔 [UserCreate] Generated new ObjectId for family detail:', newObjectId);\n\n // // Create entity access pass management record with owner rights\n // const currentUser = this.appState.currentUser();\n // const currentEntity = this.appState.activeEntity();\n\n // const core_entity_access_pass_management = {\n // syepm_user_id_user: currentUser?._id || '',\n // syepm_entity_id_syen: currentEntity?._id || '',\n // syepm_access_passs_to: newObjectId,\n // syepm_can_view: true,\n // syepm_can_edit: true,\n // syepm_is_owner: true, // Set as owner\n // syepm_isactive: true,\n // syepm_actions_allowed: ['view', 'edit', 'delete', 'share']\n // };\n\n // const newFamilyDetail = {\n // _id: newObjectId, // Assign the generated ObjectId\n // syfdl_user_id_user: '',\n // syfdl_family_member_name: '',\n // syfdl_family_member_id_user: {\n // _id: '',\n // user_fullname: ''\n // },\n // syfdl_family_member_dob: new Date(),\n // syfdl_relationship_id_sygms: {\n // _id: '',\n // sygms_name: ''\n // },\n // syfdl_blood_group_sygms: {\n // _id: '',\n // sygms_name: ''\n // },\n // syfdl_contact_email: '',\n // syfdl_contact_email_id: '',\n // syfdl_contact_phone: '',\n // syfdl_contact_number: '',\n // syfdl_isactive: true,\n // core_entity_access_pass_management: core_entity_access_pass_management // Add access pass management directly to family detail\n // } as FamilyDetailObject;\n\n // // Update signal for UI tracking\n // this.familyDetails.update(families => [...families, newFamilyDetail]);\n\n // // Add FormGroup to FormArray\n // const familyFormGroup = this.createFamilyDetailFormGroup();\n // // Set the _id in the FormGroup\n // familyFormGroup.patchValue({ _id: newObjectId });\n // this.familyDetailsFormArray.push(familyFormGroup);\n\n // // Load initial users for the new family member\n // const newIndex = this.familyDetailsFormArray.length - 1;\n // this.searchUsers('', newIndex);\n\n // // Apply access control after adding new family detail\n // this.applyFamilyDetailAccessControl();\n // },\n // error: (error: Error) => {\n // console.error('❌ [UserCreate] Failed to generate ObjectId for family detail:', error);\n\n // // Fallback: Create family detail without _id (old behavior)\n // const newFamilyGroup = this.createFamilyDetailFormGroup();\n // this.familyDetailsFormArray.push(newFamilyGroup);\n // this.familyDetails.update(families => [...families, newFamilyGroup.value]);\n\n // // Load initial users for the new family member\n // const newIndex = this.familyDetailsFormArray.length - 1;\n // this.searchUsers('', newIndex);\n\n // this.applyFamilyDetailAccessControl();\n // }\n // });\n // }\n\n // removeFamilyDetail(index: number) {\n // // Remove the family detail from the FormArray\n // this.familyDetailsFormArray.removeAt(index);\n\n // // Update the family details signal to keep UI in sync\n // this.familyDetails.update(families => families.filter((_, i) => i !== index));\n\n // // Clean up user search data for the removed family member\n // this.userSearchResults.update(results => {\n // const newResults = { ...results };\n // delete newResults[index];\n // return newResults;\n // });\n\n // this.userSearchLoading.update(loading => {\n // const newLoading = { ...loading };\n // delete newLoading[index];\n // return newLoading;\n // });\n\n // // Apply access control after removing family detail\n // this.applyFamilyDetailAccessControl();\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 exceptions\n // const {\n // core_entity_mapping,\n // core_user_contact_addresses,\n // core_user_documents,\n // core_user_family_details,\n // ...auth_user_mst\n // } = this.userMasterForm.value;\n\n // // Process role exceptions using the new permission tracking system\n // const core_user_role_exceptions = this.processRoleExceptions();\n\n // const formData: AuthUserMstCreatePayload = {\n // auth_user_mst: auth_user_mst,\n // core_entity_mapping: core_entity_mapping || [],\n // core_user_role_exceptions: core_user_role_exceptions,\n // core_user_contact_addresses: core_user_contact_addresses || [],\n // core_user_documents: core_user_documents || [],\n // core_user_family_details: core_user_family_details || [],\n // core_user_attributes: []\n // };\n\n // if (this.userId()) {\n // formData.auth_user_mst._id = this.userId();\n // }\n // // Handle password fields based on mode\n // if (this.isEditMode()) {\n // // In edit mode, only include password if it's being updated\n // if (!this.isPasswordUpdateRequired()) {\n // // Remove password fields if not updating password\n // const { user_password, user_confirm_password, ...dataWithoutPasswords } = formData?.auth_user_mst as (AuthUserMst & { user_confirm_password?: string });\n // formData.auth_user_mst = dataWithoutPasswords;\n // } else {\n // // Encrypt password before sending and remove confirm password field\n // const { user_confirm_password, ...dataWithPassword } = formData?.auth_user_mst as (AuthUserMst & { user_confirm_password?: string });\n // if (dataWithPassword.user_password) {\n // console.log('🔐 Encrypting password for edit mode...');\n // const originalPassword = dataWithPassword.user_password;\n // dataWithPassword.user_password = customEncrypt(dataWithPassword.user_password);\n\n // console.log('✅ Password encrypted for edit mode:', { originalLength: originalPassword, encryptedLength: customDecrypt(dataWithPassword.user_password), dataWithPassword: dataWithPassword.user_password });\n // }\n // formData.auth_user_mst = dataWithPassword;\n // }\n // } else {\n // // In create mode, encrypt password and remove confirm password field\n // const { user_confirm_password, ...dataWithPassword } = formData?.auth_user_mst as (AuthUserMst & { user_confirm_password?: string });\n // if (dataWithPassword.user_password) {\n // console.log('🔐 Encrypting password for create mode...');\n // const originalPassword = dataWithPassword.user_password;\n // dataWithPassword.user_password = customEncrypt(dataWithPassword.user_password);\n // console.log('✅ Password encrypted for create mode:', { originalLength: originalPassword, encryptedLength: dataWithPassword.user_password.length });\n // }\n // formData.auth_user_mst = dataWithPassword;\n // }\n\n // // Log final form data being sent (without password for security)\n // const logData = { ...formData };\n // console.log('📤 Sending form data to server:', logData);\n\n // // Use the service to save user master\n // this.userMasterService.saveUpdateUserMaster(logData)\n // .subscribe({\n // next: (response) => {\n // console.log('✅ User master saved successfully:', response);\n // this.loading.set(false);\n\n // if (this.isEditMode()) {\n // // In edit mode, show success notification\n // this.notificationService.success('User updated successfully! All changes have been saved.', {\n // title: 'User Updated',\n // duration: 5000\n // });\n // console.log('User updated successfully');\n // } else {\n // // In create mode, show success notification and reset form for new user\n // this.notificationService.success('User created successfully! You can now create another user.', {\n // title: 'User Created',\n // duration: 5000\n // });\n // this.resetForm();\n // }\n // },\n // error: (error) => {\n // console.error('❌ Error saving user master:', error);\n // this.notificationService.error('Failed to save user. Please try again.', {\n // title: 'Save Failed',\n // duration: 5000\n // });\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 contact addresses FormArray\n // while (this.contactAddressesFormArray.length !== 0) {\n // this.contactAddressesFormArray.removeAt(0);\n // }\n\n // // Clear documents FormArray\n // while (this.documentsFormArray.length !== 0) {\n // this.documentsFormArray.removeAt(0);\n // }\n\n // // Clear family details FormArray\n // while (this.familyDetailsFormArray.length !== 0) {\n // this.familyDetailsFormArray.removeAt(0);\n // }\n\n // // Clear entity mapping FormArray\n // while (this.entityMappingsFormArray.length !== 0) {\n // this.entityMappingsFormArray.removeAt(0);\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 // /**\n // * Go back to user list\n // */\n // goBackToUserList(): void {\n // this.router.navigate(['/control-panel/user-master']);\n // }\n\n // /**\n // * Cancel form and optionally navigate back\n // */\n // cancelForm(): void {\n // if (this.isEditMode()) {\n // this.goBackToUserList();\n // } else {\n // this.resetForm();\n // }\n // }\n\n // /**\n // * Get page title based on mode\n // */\n // getPageTitle(): string {\n // return this.isEditMode() ? 'Edit User' : 'Create New User';\n // }\n\n // /**\n // * Check if password fields should be shown in the UI\n // */\n // shouldShowPasswordFields(): boolean {\n // return this.showPasswordFields();\n // }\n\n // /**\n // * Get password field label based on mode\n // */\n // getPasswordFieldLabel(): string {\n // return this.isEditMode() ? 'New Password (leave blank to keep current)' : 'Password';\n // }\n\n // /**\n // * Get password confirmation field label based on mode \n // */\n // getPasswordConfirmLabel(): string {\n // return this.isEditMode() ? 'Confirm New Password' : 'Confirm Password';\n // }\n\n // /**\n // * Get password validation error message\n // */\n // getPasswordError(): string | null {\n // const passwordControl = this.userMasterForm.get('user_password');\n // if (passwordControl?.invalid && passwordControl?.touched) {\n // if (passwordControl.errors?.['required']) {\n // return 'Password is required';\n // }\n // if (passwordControl.errors?.['minlength']) {\n // return 'Password must be at least 8 characters long';\n // }\n // }\n // return null;\n // }\n\n // /**\n // * Get confirm password validation error message\n // */\n // getConfirmPasswordError(): string | null {\n // const confirmControl = this.userMasterForm.get('user_confirm_password');\n // if (confirmControl?.invalid && confirmControl?.touched) {\n // if (confirmControl.errors?.['required']) {\n // return 'Password confirmation is required';\n // }\n // if (confirmControl.errors?.['passwordRequired']) {\n // return 'Password confirmation is required';\n // }\n // if (confirmControl.errors?.['passwordMismatch']) {\n // return 'Passwords do not match';\n // }\n // }\n // return null;\n // }\n\n // /**\n // * Check if password field has error\n // */\n // hasPasswordError(): boolean {\n // const passwordControl = this.userMasterForm.get('user_password');\n // return !!(passwordControl?.invalid && passwordControl?.touched);\n // }\n\n // /**\n // * Check if confirm password field has error\n // */\n // hasConfirmPasswordError(): boolean {\n // const confirmControl = this.userMasterForm.get('user_confirm_password');\n // return !!(confirmControl?.invalid && confirmControl?.touched);\n // }\n\n // /**\n // * Check if password fields have any input\n // */\n // hasPasswordInput(): boolean {\n // const passwordControl = this.userMasterForm.get('user_password');\n // const confirmPasswordControl = this.userMasterForm.get('user_confirm_password');\n\n // return !!(passwordControl?.value?.trim() || confirmPasswordControl?.value?.trim());\n // }\n\n // /**\n // * Trigger password update mode (for edit mode)\n // */\n // triggerPasswordUpdate(): void {\n // // Check if there's any existing input in password fields\n // const passwordControl = this.userMasterForm.get('user_password');\n // const confirmPasswordControl = this.userMasterForm.get('user_confirm_password');\n\n // const hasPasswordInput = passwordControl?.value?.trim();\n // const hasConfirmPasswordInput = confirmPasswordControl?.value?.trim();\n\n // if (hasPasswordInput || hasConfirmPasswordInput) {\n // // If there's existing input, ask user for confirmation\n // const confirmClear = confirm(\n // 'There is existing text in the password fields. Do you want to clear them and start fresh?'\n // );\n\n // if (confirmClear) {\n // // Clear existing password values\n // passwordControl?.setValue('');\n // confirmPasswordControl?.setValue('');\n // passwordControl?.markAsUntouched();\n // confirmPasswordControl?.markAsUntouched();\n // }\n // }\n\n // // Enable password fields visibility in edit mode\n // this.showPasswordFields.set(true);\n\n // // Enable password fields by making them required\n // this.updatePasswordValidation();\n\n // // Focus on password field after a short delay to ensure UI updates\n // setTimeout(() => {\n // const passwordField = document.getElementById('user_password');\n // passwordField?.focus();\n // }, 100);\n // }\n\n // /**\n // * Cancel password update mode (for edit mode)\n // */\n // cancelPasswordUpdate(): void {\n // // Clear password values\n // const passwordControl = this.userMasterForm.get('user_password');\n // const confirmPasswordControl = this.userMasterForm.get('user_confirm_password');\n\n // passwordControl?.setValue('');\n // confirmPasswordControl?.setValue('');\n // passwordControl?.markAsUntouched();\n // confirmPasswordControl?.markAsUntouched();\n\n // // Hide password fields in edit mode\n // this.showPasswordFields.set(false);\n\n // // Update validation to make fields optional again\n // this.updatePasswordValidation();\n // }\n\n // // ==================== ADDRESS-RELATED METHODS ====================\n\n // /**\n // * Load countries for a specific address dropdown\n // */\n // loadCountriesForAddress(addressIndex: number): void {\n // this.addressCountriesLoading.update(loading => ({ ...loading, [addressIndex]: true }));\n // this.countryService.getAllCountries({}).subscribe({\n // next: (response: countryListControllerResponse) => {\n // console.log('✅ Countries response:', response);\n // const countries = response.data || [];\n // this.addressCountries.update(current => ({ ...current, [addressIndex]: countries }));\n // console.log('🌍 Loaded countries for address', addressIndex, ':', countries.length);\n // },\n // error: (error) => {\n // console.error('💥 Countries transform error:', error);\n // this.addressCountries.update(current => ({ ...current, [addressIndex]: [] }));\n // },\n // complete: () => {\n // this.addressCountriesLoading.update(loading => ({ ...loading, [addressIndex]: false }));\n // }\n // });\n // }\n\n // /**\n // * Search countries with filter for a specific address\n // */\n // onCountrySearch(event: EventWithQuery | selectSearchType, addressIndex: number): void {\n // const payload = {\n // query: event?.query || '',\n // syctr_id: String(event?.value || '')\n // };\n\n // this.addressCountriesLoading.update(loading => ({ ...loading, [addressIndex]: true }));\n // this.countryService.getAllCountries(payload).subscribe({\n // next: (response) => {\n // const countries = response.data || [];\n // this.addressCountries.update(current => ({ ...current, [addressIndex]: countries }));\n // console.log('🌍 Updated countries count for address', addressIndex, ':', countries.length);\n // },\n // error: (error) => {\n // console.error('❌ Failed to search countries:', error);\n // this.addressCountries.update(current => ({ ...current, [addressIndex]: [] }));\n // },\n // complete: () => {\n // this.addressCountriesLoading.update(loading => ({ ...loading, [addressIndex]: false }));\n // }\n // });\n // }\n\n // /**\n // * Search postal codes for a specific address\n // */\n // onPostalCodeSearch(event: EventWithQuery | selectSearchType, addressIndex: number): void {\n // const payload = {\n // sypin_pincode: event?.query || '',\n // sypin_id: String(event?.value || '')\n // };\n\n // this.addressPostalCodesLoading.update(loading => ({ ...loading, [addressIndex]: true }));\n // this.pinCodeService.getPinCodeData(payload).pipe(\n // takeUntilDestroyed(this.destroyRef)\n // ).subscribe({\n // next: (response: pinCodeSelectControllerResponse) => {\n // console.log('📮 Postal codes response:', response);\n // const postalCodeData = response?.data?.core_pin_code || [];\n\n // // Update dropdown options\n // this.addressPostalCodes.update(current => ({ ...current, [addressIndex]: postalCodeData }));\n\n // // Cache the full postal code data for auto-filling\n // this.postalCodeDataCache.update(current => ({ ...current, [addressIndex]: postalCodeData }));\n // },\n // error: (error) => {\n // console.error('❌ Failed to search postal codes:', error);\n // this.addressPostalCodes.update(current => ({ ...current, [addressIndex]: [] }));\n // },\n // complete: () => {\n // this.addressPostalCodesLoading.update(loading => ({ ...loading, [addressIndex]: false }));\n // }\n // });\n // }\n\n // /**\n // * Handle postal code selection to auto-fill city, state, country\n // */\n // onPostalCodeSelection(event: pinCodeSelectResponseData, addressIndex: number): void {\n // console.log('📍 Postal Code Selection Event:', event, addressIndex);\n // const pinCodeId = event._id;\n // if (!pinCodeId) return;\n\n // // Get the postal code details from the specific address's postal codes\n // const addressPostalCodes = this.addressPostalCodes()[addressIndex] || [];\n // const selectedPostalCode = addressPostalCodes.find((pc: pinCodeSelectResponseData) => pc._id === pinCodeId);\n // console.log('📍 Selected Postal Code:', selectedPostalCode, addressPostalCodes, pinCodeId);\n // // Update the form with postal code and auto-fill city, state, country\n // const addressFormGroup = this.contactAddressesFormArray.at(addressIndex) as FormGroup;\n // if (addressFormGroup) {\n // addressFormGroup.patchValue({\n // sycad_contact_pin_sypin: pinCodeId,\n // sycad_contact_city_sypin: selectedPostalCode?.sypin_district || '',\n // sycad_contact_state_sypin: selectedPostalCode?.sypin_state_name || '',\n // sycad_contact_country_syctr: selectedPostalCode?.sypin_country_id_syctr || ''\n // });\n\n // // If country is not in the dropdown yet, load it\n // if (selectedPostalCode?.sypin_country_id_syctr && !this.isCountryInDropdown(selectedPostalCode.sypin_country_id_syctr, addressIndex)) {\n // this.loadCountryForPostalCode(selectedPostalCode.sypin_country_id_syctr, addressIndex);\n // }\n // }\n // }\n\n // /**\n // * Check if a country is already in the dropdown for a specific address\n // */\n // private isCountryInDropdown(countryId: string, addressIndex: number): boolean {\n // const addressCountries = this.addressCountries()[addressIndex] || [];\n // return addressCountries.some(country => country._id === countryId);\n // }\n\n // /**\n // * Load a specific country for postal code auto-fill\n // */\n // private loadCountryForPostalCode(countryId: string, addressIndex: number): void {\n // const payload = {\n // syctr_id: countryId\n // };\n\n // this.countryService.getAllCountries(payload).subscribe({\n // next: (response) => {\n // const countries = response.data || [];\n // if (countries.length > 0) {\n // // Add the country to the existing list\n // const currentCountries = this.addressCountries()[addressIndex] || [];\n // const updatedCountries = [...currentCountries, ...countries];\n // this.addressCountries.update(current => ({ ...current, [addressIndex]: updatedCountries }));\n // }\n // },\n // error: (error) => {\n // console.error('❌ Failed to load country for postal code:', error);\n // }\n // });\n // }\n\n // /**\n // * Get postal code data from the API response cache\n // */\n // private getPostalCodeDataFromResponse(pinCodeId: string, addressIndex: number): pinCodeSelectResponseData | undefined {\n // // Get the cached postal code data for this address\n // const postalCodeData = this.postalCodeDataCache()[addressIndex];\n // if (!postalCodeData) return undefined;\n\n // // Find the specific postal code data\n // return postalCodeData.find((item) => item._id === pinCodeId) as pinCodeSelectResponseData | undefined;\n // }\n\n // /**\n // * Load address types from general master service\n // */\n // private loadAddressTypes(): void {\n // this.CideCoreGeneralMasterService.getMasterList({\n // sygmt_code: 'user_address_type',\n // sygms_entity_id_syen: this.appState.getActiveEntityId()\n // }).subscribe({\n // next: (response: generalMasterListControllerResponse) => {\n // if (response?.success && response.data) {\n // console.log('🏠 Address types loaded:', response.data);\n // this.addressTypeOptions.set(response.data);\n // } else {\n // console.error('❌ Failed to load address types');\n // this.addressTypeOptions.set([]);\n // }\n // },\n // error: (error) => {\n // console.error('❌ Error loading address types:', error);\n // this.addressTypeOptions.set([]);\n // }\n // });\n // }\n\n // /**\n // * Load document types from general master service\n // */\n // private loadDocumentTypes(): void {\n // this.CideCoreGeneralMasterService.getMasterList({\n // sygmt_code: 'user_document_type',\n // sygms_entity_id_syen: this.appState.getActiveEntityId()\n // }).subscribe({\n // next: (response: generalMasterListControllerResponse) => {\n // if (response?.success && response.data) {\n // console.log('📄 Document types loaded:', response.data);\n // this.documentTypeOptions.set(response.data);\n // } else {\n // console.error('❌ Failed to load document types');\n // this.documentTypeOptions.set([]);\n // }\n // },\n // error: (error) => {\n // console.error('❌ Error loading document types:', error);\n // this.documentTypeOptions.set([]);\n // }\n // });\n // }\n\n // /**\n // * Load document verification status from general master service\n // */\n // private loadDocumentVerificationStatus(): void {\n // this.CideCoreGeneralMasterService.getMasterList({\n // sygmt_code: 'document_verification_status',\n // sygms_entity_id_syen: this.appState.getActiveEntityId()\n // }).subscribe({\n // next: (response: generalMasterListControllerResponse) => {\n // if (response?.success && response.data) {\n // console.log('✅ Document verification status loaded:', response.data);\n // this.documentVerificationStatusOptions.set(response.data);\n // } else {\n // console.error('❌ Failed to load document verification status');\n // this.documentVerificationStatusOptions.set([]);\n // }\n // },\n // error: (error) => {\n // console.error('❌ Error loading document verification status:', error);\n // this.documentVerificationStatusOptions.set([]);\n // }\n // });\n // }\n\n // /**\n // * Load document KYC status from general master service\n // */\n // private loadDocumentKycStatus(): void {\n // this.CideCoreGeneralMasterService.getMasterList({\n // sygmt_code: 'document_kyc_status',\n // sygms_entity_id_syen: this.appState.getActiveEntityId()\n // }).subscribe({\n // next: (response: generalMasterListControllerResponse) => {\n // if (response?.success && response.data) {\n // console.log('🔐 Document KYC status loaded:', response.data);\n // this.documentKycStatusOptions.set(response.data);\n // } else {\n // console.error('❌ Failed to load document KYC status');\n // this.documentKycStatusOptions.set([]);\n // }\n // },\n // error: (error) => {\n // console.error('❌ Error loading document KYC status:', error);\n // this.documentKycStatusOptions.set([]);\n // }\n // });\n // }\n\n // /**\n // * Load blood groups from general master service\n // */\n // private loadBloodGroups(): void {\n // this.CideCoreGeneralMasterService.getMasterList({\n // sygmt_code: 'blood_group',\n // sygms_entity_id_syen: this.appState.getActiveEntityId()\n // }).subscribe({\n // next: (response: generalMasterListControllerResponse) => {\n // if (response?.success && response.data) {\n // console.log('🩸 Blood groups loaded:', response.data);\n // this.bloodGroupOptions.set(response.data);\n // } else {\n // console.error('❌ Failed to load blood groups');\n // this.bloodGroupOptions.set([]);\n // }\n // },\n // error: (error) => {\n // console.error('❌ Error loading blood groups:', error);\n // this.bloodGroupOptions.set([]);\n // }\n // });\n // }\n\n // /**\n // * Load relationship options from general master service\n // */\n // private loadRelationshipOptions(): void {\n // this.CideCoreGeneralMasterService.getMasterList({\n // sygmt_code: 'family_relationship',\n // sygms_entity_id_syen: this.appState.getActiveEntityId()\n // }).subscribe({\n // next: (response: generalMasterListControllerResponse) => {\n // if (response?.success && response.data) {\n // console.log('👨‍👩‍👧‍👦 Relationship options loaded:', response.data);\n // this.relationshipOptionsData.set(response.data);\n // } else {\n // console.error('❌ Failed to load relationship options');\n // this.relationshipOptionsData.set([]);\n // }\n // },\n // error: (error) => {\n // console.error('❌ Error loading relationship options:', error);\n // this.relationshipOptionsData.set([]);\n // }\n // });\n // }\n\n // /**\n // * Load menu options from API\n // */\n // private loadMenuOptions(): void {\n // const requestBody: MMenuListPayload = {\n // pageIndex: 0,\n // pageSize: 1000, // Load all menus\n // total: 0,\n // query: '',\n // sort: {\n // order: 'asc',\n // key: 'syme_order_by'\n // }\n // };\n\n // this.menuService.getMenuList(requestBody).subscribe({\n // next: (response) => {\n // if (response?.success) {\n // console.log('🎭 Menu options loaded:', response.data);\n // this.menuOptions.set(response.data || []);\n // } else {\n // console.error('❌ Failed to load menu options:', response);\n // this.menuOptions.set([]);\n // }\n // },\n // error: (error) => {\n // console.error('❌ Error loading menu options:', error);\n // this.menuOptions.set([]);\n // }\n // });\n // }\n\n // /**\n // * Load dropdown data for existing addresses in edit mode\n // */\n // private loadDropdownDataForExistingAddresses(): void {\n // const addresses = this.contactAddresses();\n // addresses.forEach((_, index) => {\n // // Initialize dropdown data for each existing address\n // this.addressPostalCodes.update(current => ({ ...current, [index]: [] }));\n // this.addressCountries.update(current => ({ ...current, [index]: [] }));\n // this.addressPostalCodesLoading.update(current => ({ ...current, [index]: false }));\n // this.addressCountriesLoading.update(current => ({ ...current, [index]: false }));\n // this.postalCodeDataCache.update(current => ({ ...current, [index]: [] }));\n\n // // Load countries for each address\n // this.loadCountriesForAddress(index);\n // });\n // }\n}\n\n// Interface for permission values structure\ninterface PermissionValue {\n checked: boolean;\n permission: ICoreSygms;\n actual: boolean;\n modified: boolean;\n}\n\ninterface PermissionValues {\n [permissionId: string]: PermissionValue;\n}\n\n// Interface for FormGroup with custom uploaded files property\ninterface DocumentFormGroup extends FormGroup {\n _uploadedFiles?: File[];\n}\n\n// Interface for menu with permission values\ninterface MenuWithPermissions extends ICoreSyme {\n _permissionValues?: PermissionValues;\n _rolePermissions?: Array<{\n _id: string;\n sygms_title: string;\n menu_id?: string;\n }>;\n [key: string]: unknown;\n}\n\n// Extended ICoreSyme with index signature for compatibility\ninterface ICoreSymeExtended extends ICoreSyme {\n [key: string]: unknown;\n}\n\n// Interface for entity mapping with exceptions\ninterface EntityMappingWithExceptions extends AuthUserCoreEntityMapping {\n exceptions?: Array<CoreUserRoleExceptionsWithTracking>;\n}\n\n// Interface for user search result\ninterface UserSearchResult {\n _id: string;\n user_fullname?: string;\n user_username?: string;\n [key: string]: unknown;\n}\n\n// Interface for family detail data\ninterface FamilyDetailData {\n _id?: string;\n syfdl_family_member_name?: string;\n syfdl_family_member_id_user?: { _id: string };\n syfdl_family_member_dob?: Date;\n syfdl_relationship_id_sygms?: { _id: string };\n syfdl_blood_group_sygms?: { _id: string };\n syfdl_contact_email?: string;\n syfdl_contact_email_id?: string;\n syfdl_contact_phone?: string;\n syfdl_contact_number?: string;\n syfdl_isactive?: boolean;\n [key: string]: unknown;\n}\n\n// Interface for role option\ninterface RoleOption {\n _id: string;\n syusrol_name: string;\n [key: string]: unknown;\n}\n\n// Interface for menu right\ninterface MenuRight {\n role_rights: string[];\n [key: string]: unknown;\n}\n\n// Interface for event with query\ninterface EventWithQuery {\n query?: string;\n value?: string;\n target?: {\n checked?: boolean;\n };\n checked?: boolean;\n [key: string]: unknown;\n}\n\n\n// Interface for document object\ninterface DocumentObject {\n _id: string;\n syusd_user_id_user: string;\n syusd_document_type_id_sygms: {\n _id: string;\n sygms_name: string;\n };\n syusd_doc_number: string;\n syusd_doc_name_as_per_doc: string;\n syusd_doc_issue_date: Date;\n syusd_doc_expiry_date: Date;\n syusd_photo_group_id_cyfm: {\n _id: string;\n cyfm_name: string;\n };\n syusd_doc_verification_status_id_sygms: {\n _id: string;\n sygms_name: string;\n };\n syusd_doc_kyc_status_id_sygms: {\n _id: string;\n sygms_name: string;\n };\n syusd_isactive: boolean;\n core_entity_access_pass_management: CoreEntityAccessPassManagement;\n}\n\n// Interface for family detail object\ninterface FamilyDetailObject {\n _id: string;\n syfdl_user_id_user: string;\n syfdl_family_member_name: string;\n syfdl_family_member_id_user: {\n _id: string;\n user_fullname: string;\n };\n syfdl_family_member_dob: Date;\n syfdl_relationship_id_sygms: {\n _id: string;\n sygms_name: string;\n };\n syfdl_blood_group_sygms: {\n _id: string;\n sygms_name: string;\n };\n syfdl_contact_email: string;\n syfdl_contact_phone: string;\n syfdl_isactive: boolean;\n core_entity_access_pass_management: CoreEntityAccessPassManagement;\n}\n","","// User Management Module Export Index\n\n// Components\nexport { CideCoreUserCreateComponent } from './components/user-create/user-create.component';\n// export { CideCoreUserListComponent } from './components/user-list/user-list.component';\n\n// Services \n// export * from './services';\n\n// // User Forms Components\n// export { CideCoreUserAttributesComponent } from './components/user-forms/user-attributes.component';\n// export { CideCoreUserContactAddressesComponent } from './components/user-forms/user-contact-addresses.component';\n// export { CideCoreUserDocumentsComponent } from './components/user-forms/user-documents.component';\n// export { CideCoreUserEntityAccessComponent } from './components/user-forms/user-entity-access.component';\n// export { CideCoreUserFamilyDetailsComponent } from './components/user-forms/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// // User Role Management Module\n// export * from './lib/core/user-role-management';\n\n// // Entity Management Module\n// export * from './lib/core/entity-management';\n\n// // General Master Management Module\n// export * from './lib/core/general-master-management';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":";;;;;;;;;;;;;;;;AAGO,MAAM,UAAU,GAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC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"}