{"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/page-management/services/page-management.service.ts","../../../projects/cloud-ide-core/src/lib/core/menu-management/components/menu-list/menu-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/menu-management/components/menu-list/menu-list.component.html","../../../projects/cloud-ide-core/src/lib/core/menu-management/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/components/page-list/page-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-list/page-list.component.html","../../../projects/cloud-ide-core/src/lib/core/page-management/services/page-theme.service.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-theme/page-theme.component.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-theme/page-theme.component.html","../../../projects/cloud-ide-core/src/lib/core/page-management/services/page-controls.service.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-controls/page-controls.component.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-controls/page-controls.component.html","../../../projects/cloud-ide-core/src/lib/core/page-management/index.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/services/user-master.service.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/services/role-select.service.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/services/index.ts","../../../projects/cloud-ide-core/src/lib/core/user-role-management/services/user-role.service.ts","../../../projects/cloud-ide-core/src/lib/core/entity-management/services/entity-management.service.ts","../../../projects/cloud-ide-core/src/lib/core/general-master-management/components/general-master-type/general-master-type.component.ts","../../../projects/cloud-ide-core/src/lib/core/general-master-management/components/general-master-type/general-master-type.component.html","../../../projects/cloud-ide-core/src/lib/core/general-master-management/components/general-master/general-master.component.ts","../../../projects/cloud-ide-core/src/lib/core/general-master-management/components/general-master/general-master.component.html","../../../projects/cloud-ide-core/src/lib/core/general-master-management/index.ts","../../../projects/cloud-ide-core/src/lib/core/shared/services/pin-code.service.ts","../../../projects/cloud-ide-core/src/lib/core/shared/services/currency.service.ts","../../../projects/cloud-ide-core/src/lib/core/shared/services/country.service.ts","../../../projects/cloud-ide-core/src/lib/core/entity-management/components/entity-create/entity-create.component.ts","../../../projects/cloud-ide-core/src/lib/core/entity-management/components/entity-create/entity-create.component.html","../../../projects/cloud-ide-core/src/lib/core/entity-management/components/entity-list/entity-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/entity-management/components/entity-list/entity-list.component.html","../../../projects/cloud-ide-core/src/lib/core/entity-management/components/org-structure/org-structure.component.ts","../../../projects/cloud-ide-core/src/lib/core/entity-management/index.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-create/entity-selection-drawer.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-create/copy-role-from-entity-drawer.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-create/user-create.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-create/user-create.component.html","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-list/user-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-list/user-list.component.html","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-forms/user-attributes.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-forms/user-contact-addresses.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-forms/user-documents.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-forms/user-entity-access.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-forms/user-family-details.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/index.ts","../../../projects/cloud-ide-core/src/lib/core/user-role-management/components/user-role-list/user-role-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-role-management/components/user-role-list/user-role-list.component.html","../../../projects/cloud-ide-core/src/lib/core/user-role-management/components/user-role-form/copy-role-drawer.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-role-management/components/user-role-form/user-role-form.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-role-management/components/user-role-form/user-role-form.component.html","../../../projects/cloud-ide-core/src/lib/core/user-role-management/interfaces/user-role.interface.ts","../../../projects/cloud-ide-core/src/lib/core/user-role-management/index.ts","../../../projects/cloud-ide-core/src/lib/core/shared/services/nationality.service.ts","../../../projects/cloud-ide-core/src/lib/core/shared/services/class-program-master.service.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-shared';\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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            sypg_page_code: \"core_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            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            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            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            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            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            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            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, signal } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, throwError, BehaviorSubject, of } from 'rxjs';\nimport { catchError, tap, map } from 'rxjs/operators';\nimport { \n  cidePath, \n  coreRoutesUrl, \n  generateStringFromObject, \n  hostManagerRoutesUrl, \n  ICoreSyme, \n  MCoreSymeDeletePayload, \n  MCoreSymeGetByIdPayload, \n  menuByIdControllerResponse, \n  menuChangeSequenceControllerResponse, \n  menuDeleteControllerResponse, \n  menuListControllerResponse, \n  MMenuChangeSequencePayload, \n  MMenuListPayload\n} from 'cloud-ide-lms-model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class MenuManagementService {\n  private apiUrl = `${coreRoutesUrl?.getSidebarMenues}`;\n  private menuListSubject = new BehaviorSubject<ICoreSyme[]>([]);\n  public menuList$ = this.menuListSubject.asObservable();\n\n  /** Signal bumped on every create/update/delete/toggle so consumers can refresh. */\n  readonly listInvalidated = signal(0);\n\n  constructor(private http: HttpClient) {\n    console.log('MenuManagementService initialized - using real API');\n  }\n\n\n  /**\n   * Get menu list from API\n   */\n  getMenuList(body: MMenuListPayload): Observable<menuListControllerResponse> {\n    const query = generateStringFromObject(body);\n    return this.http?.get<menuListControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, query]))\n      .pipe(\n        tap((response: menuListControllerResponse) => {\n          if (response?.success) {\n            this.menuListSubject.next(response?.data || []);\n          }\n        }),\n        catchError(error => {\n          console.error('CideCoreMenuManagementService API error:', error);\n          return this.handleError(error);\n        })\n      );\n  }\n\n  /**\n   * Get menu list from cache (if available)\n   */\n  getMenuListFromCache(): ICoreSyme[] {\n    return this.menuListSubject.value;\n  }\n\n  /**\n   * Create new menu item\n   * POST ${coreRoutesUrl?.menu} - payload: MCoreSymeInsertUpdatePayload, response: menuInsertUpdateControllerResponse\n   */\n  createMenuItem(menuItem: ICoreSyme): Observable<menuListControllerResponse> {\n    console.log('Creating menu item:', menuItem);\n    const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu]);\n    return this.http.post<menuListControllerResponse>(url, menuItem)\n      .pipe(\n        tap((response: menuListControllerResponse) => {\n          if (response.success) {\n            this.refreshMenuList();\n            this.listInvalidated.update(v => v + 1);\n          }\n        }),\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Update existing menu item\n   * POST ${coreRoutesUrl?.menu} - payload: MCoreSymeInsertUpdatePayload, response: menuInsertUpdateControllerResponse\n   */\n  updateMenuItem(id: string, menuItem: ICoreSyme): Observable<menuListControllerResponse> {\n    console.log('Updating menu item:', id, menuItem);\n    const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu]);\n    return this.http.post<menuListControllerResponse>(url, menuItem)\n      .pipe(\n        tap((response: menuListControllerResponse) => {\n          if (response.success) {\n            this.refreshMenuList();\n            this.listInvalidated.update(v => v + 1);\n          }\n        }),\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Get menu item by ID\n   * GET ${coreRoutesUrl?.menu}/byId/:query - payload: MCoreSymeGetByIdPayload, response: menuByIdControllerResponse\n   * TODO: Update to use MCoreSymeGetByIdPayload and menuByIdControllerResponse when available\n   */\n  getMenuItemById(id: string): Observable<menuByIdControllerResponse> {\n    console.log('Getting menu item by ID:', id);\n    const payload: MCoreSymeGetByIdPayload = { syme_id: id };\n    const query = generateStringFromObject(payload);\n    const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, 'byId', query]);\n    return this.http.get<menuByIdControllerResponse>(url)\n      .pipe(\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Delete menu item\n   * DELETE ${coreRoutesUrl?.menu}/:query - payload: MCoreSymeDeletePayload, response: menuDeleteControllerResponse\n   * TODO: Update to use MCoreSymeDeletePayload and menuDeleteControllerResponse when available\n   */\n  deleteMenuItem(id: string): Observable<menuDeleteControllerResponse> {\n    const payload: MCoreSymeDeletePayload = { syme_id: id };\n    const query = generateStringFromObject(payload);\n    const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, query]);\n    return this.http.delete<menuDeleteControllerResponse>(url)\n      .pipe(\n        tap((response: menuDeleteControllerResponse) => {\n          if (response.success) {\n            this.refreshMenuList();\n            this.listInvalidated.update(v => v + 1);\n          }\n        }),\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Delete multiple menu items\n   * DELETE ${coreRoutesUrl?.menu}/:query - payload: MCoreSymeDeletePayload, response: menuDeleteControllerResponse\n   * TODO: Update to use MCoreSymeDeletePayload and menuDeleteControllerResponse when available\n   */\n  deleteMultipleMenuItems(ids: string[]): Observable<{ success: boolean; message?: string; data?: unknown }> {\n    console.log('Deleting multiple menu items:', ids);\n    const payload = { ids };\n    const query = generateStringFromObject(payload);\n    const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, 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.refreshMenuList();\n            this.listInvalidated.update(v => v + 1);\n          }\n        }),\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Toggle menu item active status\n   */\n  toggleMenuItemStatus(id: string): Observable<menuListControllerResponse> {\n    console.log('Toggling menu item status:', id);\n    const payload = { id };\n    const query = generateStringFromObject(payload);\n    const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, query]);\n    return this.http.put<menuListControllerResponse>(url, {})\n      .pipe(\n        tap((response: menuListControllerResponse) => {\n          if (response.success) {\n            this.refreshMenuList();\n            this.listInvalidated.update(v => v + 1);\n          }\n        }),\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Change menu sequence\n   * PATCH ${coreRoutesUrl?.menu}/change-sequence - payload: menu sequence data, response: menuChangeSequenceControllerResponse\n   */\n  changeMenuSequence(payload: MMenuChangeSequencePayload): Observable<menuChangeSequenceControllerResponse> {\n    console.log('Changing menu sequence:', payload);\n    const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, 'change-sequence']);\n    return this.http.patch<menuChangeSequenceControllerResponse>(url, payload)\n      .pipe(\n        tap((response: menuChangeSequenceControllerResponse) => {\n          if (response.success) {\n            this.refreshMenuList();\n            this.listInvalidated.update(v => v + 1);\n          }\n        }),\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Get available menu types\n   */\n  getMenuTypes(): Observable<string[]> {\n    return this.http.get<{ data: string[] }>('/api/menu/types')\n      .pipe(\n        map((response: { data: string[] }) => response.data),\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Get available icons\n   */\n  getAvailableIcons(): Observable<string[]> {\n    return this.http.get<{ data: string[] }>('/api/menu/icons')\n      .pipe(\n        map((response: { data: string[] }) => response.data),\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Find menu item by ID (including nested items)\n   */\n  findMenuItemById(id: string, items: ICoreSyme[] = this.menuListSubject.value): ICoreSyme | null {\n    // Local search in current menu list\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 menu items for dropdown selection\n   */\n  getParentMenuItems(excludeId?: string): ICoreSyme[] {\n    const allItems: ICoreSyme[] = [];\n\n    const flattenItems = (items: ICoreSyme[], level: number = 0) => {\n      items.forEach(item => {\n        if (item._id !== excludeId) {\n          allItems.push({\n            ...item,\n            syme_title: '  '.repeat(level) + item.syme_title\n          });\n        }\n      });\n    };\n\n    flattenItems(this.menuListSubject.value);\n    return allItems;\n  }\n\n  /**\n   * Refresh menu list from server\n   */\n  private refreshMenuList(): void {\n    // Create a default body for getting all menu items\n    const defaultBody: MMenuListPayload = {\n      pageIndex: 1,\n      pageSize: 10\n    };\n    this.getMenuList(defaultBody).subscribe({\n      next: () => {\n        console.log('Menu list refreshed successfully');\n      },\n      error: (error) => {\n        console.error('Error refreshing menu 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('Menu Management Service Error:', errorMessage);\n    return throwError(() => new Error(errorMessage));\n  }\n} ","import { Injectable, inject, signal } 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\nimport { IGeneralMasterService } from 'cloud-ide-shared';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CideCoreGeneralMasterService implements IGeneralMasterService {\n  private http = inject(HttpClient);\n  private generalMasterListSubject = new BehaviorSubject<ICoreSygms[]>([]);\n  public generalMasterList$ = this.generalMasterListSubject.asObservable();\n\n  /** Signal bumped on every create/update/delete/toggle so consumers can refresh. */\n  readonly listInvalidated = signal(0);\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            this.listInvalidated.update(v => v + 1);\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            this.listInvalidated.update(v => v + 1);\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            this.listInvalidated.update(v => v + 1);\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    // Handle HTTP error responses\n    if (error && typeof error === 'object' && 'error' in error) {\n      const httpError = error as { error?: { message?: string; success?: boolean; code?: number } | string; message?: string; status?: number };\n\n      // Check if error.error is an object with message\n      if (httpError.error && typeof httpError.error === 'object' && 'message' in httpError.error) {\n        errorMessage = httpError.error.message || 'An error occurred';\n      } else if (typeof httpError.error === 'string') {\n        errorMessage = httpError.error;\n      } else if (httpError.message) {\n        errorMessage = httpError.message;\n      }\n    } else 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, error);\n    return throwError(() => ({ error: { message: errorMessage }, message: errorMessage }));\n  }\n} ","import { Injectable, inject, signal } 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  /** Signal bumped on every create/update/delete/toggle so consumers can refresh. */\n  readonly listInvalidated = signal(0);\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            this.listInvalidated.update(v => v + 1);\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            this.listInvalidated.update(v => v + 1);\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            this.listInvalidated.update(v => v + 1);\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            this.listInvalidated.update(v => v + 1);\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 { 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, computed, viewChild, TemplateRef, DestroyRef, inject, OnInit, effect } 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, ICoreSypg, MSystemPages } 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 { CideCorePageManagementService } from '../../../page-management/services/page-management.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';\nimport { RightsService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\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    CideLytSharedWrapperComponent\n  ],\n  templateUrl: './menu-list.component.html',\n  styleUrls: []\n})\nexport class MenuListComponent implements OnInit {\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 pageService = inject(CideCorePageManagementService);\n  private notificationService = inject(NotificationService);\n  private fb = inject(NonNullableFormBuilder);\n  private router = inject(Router);\n  private rightsService = inject(RightsService);\n\n  /** Refetch permissions when general master list is invalidated elsewhere. */\n  private readonly generalMasterInvalidationEffect = effect(() => {\n    const count = this.generalMasterService.listInvalidated();\n    if (count > 0 && this.userRightsTypeId()) {\n      this.loadPermissions();\n    }\n  });\n\n  /** Refetch menu list when menu list is invalidated elsewhere (e.g. save/delete in another tab). */\n  private readonly menuListInvalidationEffect = effect(() => {\n    if (this.menuService.listInvalidated() > 0) this.loadMenuItems();\n  });\n\n  // Shared wrapper setup\n  shared_wrapper_setup_param = { sypg_page_code: 'core_menu_list' };\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  pages = signal<ICoreSypg[]>([]);\n  pagesLoading = signal(false);\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' | 'internal'>('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    syme_pages_id_sypg: 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  // Page options for multi-select\n  pageOptions = computed(() => {\n    return this.pages().map(page => ({\n      value: page._id || '',\n      label: page.sypg_title || page.sypg_page_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) => {\n      this.editMenuItem(row._id || '');\n    },\n    onToggleMenuItem: (row: ICoreSyme) => {\n      this.toggleItemStatus(row._id || '');\n    },\n    onDeleteMenuItem: (row: ICoreSyme) => {\n      this.deleteMenuItem(row._id || '');\n    },\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  // Rights computed signals\n  canCreate = computed(() => this.rightsService.hasRight('CREATE'));\n  canEdit = computed(() => this.rightsService.hasRight('EDIT'));\n  canDelete = computed(() => this.rightsService.hasRight('DELETE'));\n  canView = computed(() => this.rightsService.hasRight('VIEW'));\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  ngOnInit(): void {\n    // Initialize rights for menu management\n    this.rightsService.initializeRights('core_menu_list');\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.loadPages();\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   * Load pages from service\n   */\n  loadPages(): void {\n    console.log('🚀 MenuListComponent.loadPages() called');\n    this.pagesLoading.set(true);\n\n    // Check if service exists\n    if (!this.pageService) {\n      console.error('❌ PageService is not available');\n      this.pagesLoading.set(false);\n      return;\n    }\n\n    const requestBody: MSystemPages = {\n      pageSize: 1000, // Load all pages\n      pageIndex: 1,\n      query: '', // Empty query to get all pages\n      sort: { order: 'asc', key: 'sypg_title' }\n    };\n\n    this.pageService.getPageList(requestBody)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe({\n        next: (response) => {\n          console.log('📥 MenuListComponent received pages response:', response);\n          if (response?.success && response.data) {\n            console.log('✅ Pages loaded successfully:', response.data);\n            // Filter to only active pages if needed\n            const activePages = response.data.filter(page => page.sypg_isactive !== false);\n            this.pages.set(activePages);\n          } else {\n            console.error('❌ Failed to load pages:', response);\n          }\n        },\n        error: (err) => {\n          console.error('❌ MenuListComponent error loading pages:', err);\n        },\n        complete: () => {\n          console.log('MenuListComponent loadPages completed');\n          this.pagesLoading.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_pages_id_sypg: menuItem.syme_pages_id_sypg || [],\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      syme_pages_id_sypg: formValue.syme_pages_id_sypg || []\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      syme_pages_id_sypg: []\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 and non-internal types\n   */\n  onMenuTypeChange(): void {\n    const currentType = this.quickAddForm.get('syme_type')?.value;\n    if (currentType !== 'menu' && currentType !== 'internal') {\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    const items: DropdownItem[] = [];\n    \n    if (this.canCreate()) {\n      items.push({\n        id: 'addChild',\n        label: 'Add Child',\n        icon: 'add',\n        disabled: false\n      });\n    }\n    \n    if (this.canEdit()) {\n      items.push({\n        id: 'edit',\n        label: 'Edit',\n        icon: 'edit',\n        disabled: false\n      });\n    }\n    \n    if (this.canDelete()) {\n      items.push({\n        id: 'delete',\n        label: 'Delete',\n        icon: 'delete',\n        disabled: false\n      });\n    }\n    \n    if (this.canEdit()) {\n      items.push({\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    return items;\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 with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_menu_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 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, internal menu, and title types) -->\n      @if (quickAddForm.get('syme_type')?.value === 'menu' || quickAddForm.get('syme_type')?.value === 'internal') {\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      <!-- Pages (multiselect) -->\n      <div>\n        <cide-ele-select \n          label=\"Pages\" \n          [options]=\"pageOptions()\" \n          formControlName=\"syme_pages_id_sypg\"\n          placeholder=\"Select pages to connect\"\n          [multiple]=\"true\"\n          [loading]=\"pagesLoading()\"\n          [searchable]=\"true\"\n          size=\"sm\">\n        </cide-ele-select>\n      </div>\n      \n      <!-- Link -->\n      <div>\n        <cide-ele-input \n          id=\"quickLink\" \n          type=\"text\"\n          label=\"Link\" \n          formControlName=\"syme_link\"\n          placeholder=\"External link\"\n          size=\"sm\">\n        </cide-ele-input>\n      </div>\n      \n      <!-- 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=\"xs\" \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=\"xs\" \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' || row.syme_type === 'internal') {\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</cide-lyt-shared-wrapper>\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, signal } 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  ICoreSydept, \n  MDepartmentDeletePayload, \n  MDepartmentGetByIdPayload, \n  departmentByIdControllerResponse, \n  departmentDeleteControllerResponse, \n  departmentControllerResponse,\n  MDepartment,\n  MDepartmentToggleStatusPayload,\n  departmentToggleStatusControllerResponse\n} from 'cloud-ide-lms-model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CideCoreDepartmentManagementService {\n  private departmentListSubject = new BehaviorSubject<ICoreSydept[]>([]);\n  public departmentList$ = this.departmentListSubject.asObservable();\n\n  /** Signal bumped on every create/update/delete/toggle so consumers can refresh. */\n  readonly listInvalidated = signal(0);\n\n  constructor(private http: HttpClient) {\n    console.log('CideCoreDepartmentManagementService initialized - using real API');\n  }\n\n  /**\n   * Get department list from API\n   */\n  getDepartmentList(body: MDepartment): Observable<departmentControllerResponse> {\n    const query = generateStringFromObject(body);\n    return this.http?.get<departmentControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, query]))\n      .pipe(\n        tap((response: departmentControllerResponse) => {\n          if (response?.success) {\n            this.departmentListSubject.next(response?.data || []);\n          }\n        }),\n        catchError(error => {\n          console.error('CideCoreDepartmentManagementService API error:', error);\n          return this.handleError(error);\n        })\n      );\n  }\n\n  /**\n   * Get department list from cache (if available)\n   */\n  getDepartmentListFromCache(): ICoreSydept[] {\n    return this.departmentListSubject.value;\n  }\n\n  /**\n   * Create new department\n   * POST ${coreRoutesUrl?.department} - payload: MDepartmentInsertUpdatePayload, response: departmentInsertUpdateControllerResponse\n   */\n  createDepartment(department: ICoreSydept): Observable<departmentControllerResponse> {\n    console.log('Creating department:', department);\n    const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department]);\n    return this.http.post<departmentControllerResponse>(url, department)\n      .pipe(\n        tap((response: departmentControllerResponse) => {\n          if (response.success) {\n            this.refreshDepartmentList();\n            this.listInvalidated.update(v => v + 1);\n          }\n        }),\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Update existing department\n   * POST ${coreRoutesUrl?.department} - payload: MDepartmentInsertUpdatePayload, response: departmentInsertUpdateControllerResponse\n   */\n  updateDepartment(id: string, department: ICoreSydept): Observable<departmentControllerResponse> {\n    console.log('Updating department:', id, department);\n    const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department]);\n    return this.http.post<departmentControllerResponse>(url, department)\n      .pipe(\n        tap((response: departmentControllerResponse) => {\n          if (response.success) {\n            this.refreshDepartmentList();\n            this.listInvalidated.update(v => v + 1);\n          }\n        }),\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Get department by ID\n   * GET ${coreRoutesUrl?.department}/byId/:query - payload: MDepartmentGetByIdPayload, response: departmentByIdControllerResponse\n   */\n  getDepartmentById(id: string): Observable<departmentByIdControllerResponse> {\n    console.log('Getting department by ID:', id);\n    const payload: MDepartmentGetByIdPayload = { sydept_id: id };\n    const query = generateStringFromObject(payload);\n    const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, 'byId', query]);\n    return this.http.get<departmentByIdControllerResponse>(url)\n      .pipe(\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Delete department\n   * DELETE ${coreRoutesUrl?.department}/:query - payload: MDepartmentDeletePayload, response: departmentDeleteControllerResponse\n   */\n  deleteDepartment(id: string): Observable<departmentDeleteControllerResponse> {\n    const payload: MDepartmentDeletePayload = { sydept_id: id };\n    const query = generateStringFromObject(payload);\n    const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, query]);\n    return this.http.delete<departmentDeleteControllerResponse>(url)\n      .pipe(\n        tap((response: departmentDeleteControllerResponse) => {\n          if (response.success) {\n            this.refreshDepartmentList();\n            this.listInvalidated.update(v => v + 1);\n          }\n        }),\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Delete multiple departments\n   */\n  deleteMultipleDepartments(ids: string[]): Observable<{ success: boolean; message?: string; data?: unknown }> {\n    console.log('Deleting multiple departments:', ids);\n    const payload = { ids };\n    const query = generateStringFromObject(payload);\n    const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, 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.refreshDepartmentList();\n            this.listInvalidated.update(v => v + 1);\n          }\n        }),\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Toggle department active status\n   */\n  toggleDepartmentStatus(payload: MDepartmentToggleStatusPayload): Observable<departmentToggleStatusControllerResponse> {\n    const query = generateStringFromObject(payload); \n    const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, 'toggleStatus', query]);\n    return this.http.put<departmentToggleStatusControllerResponse>(url, {})\n      .pipe(\n        tap((response: departmentToggleStatusControllerResponse) => {\n          if (response.success) {\n            this.refreshDepartmentList();\n            this.listInvalidated.update(v => v + 1);\n          }\n        }),\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Find department by ID\n   */\n  findDepartmentById(id: string, items: ICoreSydept[] = this.departmentListSubject.value): ICoreSydept | 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 departments for dropdown selection\n   */\n  getParentDepartments(excludeId?: string): ICoreSydept[] {\n    const allItems: ICoreSydept[] = [];\n\n    const flattenItems = (items: ICoreSydept[], level: number = 0) => {\n      items.forEach(item => {\n        if (item._id !== excludeId) {\n          allItems.push({\n            ...item,\n            sydept_name: '  '.repeat(level) + item.sydept_name\n          });\n        }\n      });\n    };\n\n    flattenItems(this.departmentListSubject.value);\n    return allItems;\n  }\n\n  /**\n   * Refresh department list from server\n   */\n  private refreshDepartmentList(): void {\n    const defaultBody = {\n      pageIndex: 1,\n      pageSize: 10\n    };\n    this.getDepartmentList(defaultBody).subscribe({\n      next: () => {\n        console.log('Department list refreshed successfully');\n      },\n      error: (error) => {\n        console.error('Error refreshing department 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('Department Management Service Error:', errorMessage);\n    return throwError(() => new Error(errorMessage));\n  }\n} ","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject, effect } 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, MDepartment } from 'cloud-ide-lms-model';\nimport { CideCoreDepartmentManagementService } from '../../services/department-management.service';\nimport { AppStateHelperService, RightsService } 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  private rightsService = inject(RightsService);\n\n  private readonly departmentListInvalidationEffect = effect(() => {\n    if (this.departmentService.listInvalidated() > 0) this.loadDepartments();\n  });\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  // Rights computed signals\n  canCreate = computed(() => this.rightsService.hasRight('CREATE'));\n  canEdit = computed(() => this.rightsService.hasRight('EDIT'));\n  canDelete = computed(() => this.rightsService.hasRight('DELETE'));\n  canView = computed(() => this.rightsService.hasRight('VIEW'));\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    // Initialize rights for department management\n    this.rightsService.initializeRights('core_department_list');\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 activeEntityId = this.appState.getActiveEntityId();\n    if (!activeEntityId) {\n      console.error('❌ No active entity ID found');\n      this.error.set('No active entity selected');\n      this.loading.set(false);\n      return;\n    }\n\n    const requestBody = new MDepartment({\n      total: this.totalItems(),\n      pageIndex: this.currentPage(),\n      pageSize: this.pageSize(),\n      query: this.searchTerm(),\n      sydept_entity_id_syen: activeEntityId\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    const items: DropdownItem[] = [];\n    \n    if (this.canEdit()) {\n      items.push({\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    \n    if (this.canCreate()) {\n      items.push({\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    \n    if (this.canEdit()) {\n      items.push({\n        id: 'toggle',\n        label: row.sydept_isactive ? 'Deactivate' : 'Activate',\n        icon: 'power_settings_new',\n        iconColor: 'tw-text-orange-400',\n        textColor: 'tw-text-orange-600',\n        hoverBgColor: 'hover:tw-bg-orange-50'\n      });\n    }\n    \n    if (this.canDelete()) {\n      items.push({\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    return items;\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 - Show if user has VIEW, CREATE, or EDIT rights -->\n    @if (canView() || canCreate() || canEdit()) {\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\n              Add Department' }}</h6>\n          </div>\n          @if (selectedParentDepartment()) {\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\n                under:' }}</span>\n              <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ selectedParentDepartment()?.sydept_name\n                }}</span>\n            </div>\n            <button cideEleButton variant=\"ghost\" size=\"xs\" type=\"button\" (click)=\"clearSelectedParent()\"\n              [disabled]=\"canView() && !canCreate() && !canEdit()\" 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 id=\"sydept_code\" label=\"Code\" formControlName=\"sydept_code\" placeholder=\"DEPT001\"\n                [disabled]=\"canView() && !canCreate() && !canEdit()\" size=\"sm\">\n              </cide-ele-input>\n            </div>\n\n            <!-- Department Name -->\n            <div>\n              <cide-ele-input id=\"sydept_name\" label=\"Name\" formControlName=\"sydept_name\" placeholder=\"Department name\"\n                [disabled]=\"canView() && !canCreate() && !canEdit()\" 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 id=\"sydept_isactive\" type=\"checkbox\" label=\"Active\" formControlName=\"sydept_isactive\"\n                [disabled]=\"canView() && !canCreate() && !canEdit()\" 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=\"sydept_description\" label=\"Description\" formControlName=\"sydept_description\"\n                placeholder=\"Department description\" rows=\"2\" [disabled]=\"canView() && !canCreate() && !canEdit()\"\n                size=\"sm\">\n              </cide-ele-textarea>\n            </div>\n\n\n\n            <!-- Action Buttons -->\n            @if (canCreate() || canEdit()) {\n            <div class=\"tw-flex tw-flex-col tw-justify-end\">\n              <div class=\"tw-flex tw-space-x-2\">\n                @if (isEditMode() ? canEdit() : canCreate()) {\n                <button cideEleButton variant=\"primary\" size=\"xs\" type=\"submit\" [disabled]=\"quickAddForm.invalid\"\n                  class=\"tw-px-2 tw-py-1 tw-w-20\">\n                  <cide-ele-icon size=\"sm\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add'\n                    }}</cide-ele-icon>\n                  {{ isEditMode() ? 'Update' : 'Add' }}\n                </button>\n                }\n                <button cideEleButton variant=\"outline\" size=\"xs\" type=\"button\" (click)=\"resetQuickAddForm()\"\n                  [disabled]=\"canView() && !canCreate() && !canEdit()\" class=\"tw-px-2 tw-py-1 tw-w-16\">\n                  <cide-ele-icon size=\"sm\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\n                  Reset\n                </button>\n              </div>\n            </div>\n            }\n          </div>\n        </form>\n      </div>\n    </div>\n    }\n\n    <!-- Header Section with Filters -->\n\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  <!-- 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 class=\"tw-text-gray-400\" size=\"sm\">\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\" [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\" [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\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.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 [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>","// 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, signal } 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  /** Signal bumped on every create/update/delete/toggle so consumers can refresh. */\n  readonly listInvalidated = signal(0);\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            this.listInvalidated.update(v => v + 1);\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            this.listInvalidated.update(v => v + 1);\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            this.listInvalidated.update(v => v + 1);\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            this.listInvalidated.update(v => v + 1);\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            this.listInvalidated.update(v => v + 1);\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, signal } 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  ICoreSydsgl, \n  gradeLevelControllerResponse, \n  gradeLevelByIdControllerResponse,\n  gradeLevelToggleStatusControllerResponse,\n  MGradeLevel,\n  MGradeLevelGetByIdPayload,\n  MGradeLevelToggleStatusPayload,\n  MGradeLevelDeletePayload,\n  gradeLevelDeleteControllerResponse,\n  MGradeLevelChangeSequencePayload,\n  gradeLevelChangeSequenceControllerResponse\n} from 'cloud-ide-lms-model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CideCoreGradeLevelManagementService {\n  private apiUrl = `${coreRoutesUrl?.gradeLevel}`;\n  private gradeLevelListSubject = new BehaviorSubject<ICoreSydsgl[]>([]);\n  public gradeLevelList$ = this.gradeLevelListSubject.asObservable();\n\n  /** Signal bumped on every create/update/delete/toggle so consumers can refresh. */\n  readonly listInvalidated = signal(0);\n\n  constructor(private http: HttpClient) {\n    console.log('CideCoreGradeLevelManagementService initialized - using real API');\n  }\n\n  /**\n   * Get grade level list from API\n   */\n  getGradeLevelList(body: MGradeLevel): Observable<gradeLevelControllerResponse> {\n    const query = generateStringFromObject(body);\n    return this.http?.get<gradeLevelControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, query]))\n      .pipe(\n        tap((response: gradeLevelControllerResponse) => {\n          if (response?.success) {\n            this.gradeLevelListSubject.next(response?.data || []);\n          }\n        }),\n        catchError(error => {\n          console.error('CideCoreGradeLevelManagementService API error:', error);\n          return this.handleError(error);\n        })\n      );\n  }\n\n  /**\n   * Get grade level list from cache (if available)\n   */\n  getGradeLevelListFromCache(): ICoreSydsgl[] {\n    return this.gradeLevelListSubject.value;\n  }\n\n  /**\n   * Create new grade level\n   * POST ${coreRoutesUrl?.gradeLevel} - payload: MGradeLevel, response: gradeLevelInsertUpdateControllerResponse\n   */\n  createGradeLevel(gradeLevel: ICoreSydsgl): Observable<gradeLevelControllerResponse> {\n    console.log('Creating grade level:', gradeLevel);\n    const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel]);\n    return this.http.post<gradeLevelControllerResponse>(url, gradeLevel)\n      .pipe(\n        tap((response: gradeLevelControllerResponse) => {\n          if (response.success) {\n            this.refreshGradeLevelList();\n            this.listInvalidated.update(v => v + 1);\n          }\n        }),\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Update existing grade level\n   * POST ${coreRoutesUrl?.gradeLevel} - payload: MGradeLevel, response: gradeLevelInsertUpdateControllerResponse\n   */\n  updateGradeLevel(id: string, gradeLevel: ICoreSydsgl): Observable<gradeLevelControllerResponse> {\n    console.log('Updating grade level:', id, gradeLevel);\n    const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel]);\n    return this.http.post<gradeLevelControllerResponse>(url, gradeLevel)\n      .pipe(\n        tap((response: gradeLevelControllerResponse) => {\n          if (response.success) {\n            this.refreshGradeLevelList();\n            this.listInvalidated.update(v => v + 1);\n          }\n        }),\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Get grade level by ID\n   * GET ${coreRoutesUrl?.gradeLevel}/byId/:query - payload: { id }, response: gradeLevelByIdControllerResponse\n   */\n  getGradeLevelById(payload: MGradeLevelGetByIdPayload): Observable<gradeLevelByIdControllerResponse> {\n    const query = generateStringFromObject(payload);\n    const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, 'byId', query]);\n    return this.http.get<gradeLevelByIdControllerResponse>(url)\n      .pipe(\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Delete grade level\n   * DELETE ${coreRoutesUrl?.gradeLevel}/:query - payload: { id }, response: { success: boolean }\n   */\n  deleteGradeLevel(id: string): Observable<gradeLevelDeleteControllerResponse> {\n    const payload: MGradeLevelDeletePayload = { sydsgl_id: id };\n    const query = generateStringFromObject(payload);\n    const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, query]);\n    return this.http.delete<gradeLevelDeleteControllerResponse>(url)\n      .pipe(\n        tap((response: gradeLevelDeleteControllerResponse) => {\n          if (response.success) {\n            this.refreshGradeLevelList();\n            this.listInvalidated.update(v => v + 1);\n          }\n        }),\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Delete multiple grade levels\n   */\n  deleteMultipleGradeLevels(ids: string[]): Observable<{ success: boolean; message?: string; data?: unknown }> {\n    console.log('Deleting multiple grade levels:', ids);\n    const payload = { ids };\n    const query = generateStringFromObject(payload);\n    const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, 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.refreshGradeLevelList();\n            this.listInvalidated.update(v => v + 1);\n          }\n        }),\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Toggle grade level active status\n   * PATCH ${coreRoutesUrl?.gradeLevel}/toggle-status - payload: { id }, response: gradeLevelToggleStatusControllerResponse\n   */\n  toggleGradeLevelStatus(id: string): Observable<gradeLevelToggleStatusControllerResponse> {\n    console.log('Toggling grade level status:', id);\n    const payload: MGradeLevelToggleStatusPayload = { sydsgl_id: id };\n    const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, 'toggle-status']);\n    return this.http.patch<gradeLevelToggleStatusControllerResponse>(url, payload)\n      .pipe(\n        tap((response: gradeLevelToggleStatusControllerResponse) => {\n          if (response.success) {\n            this.refreshGradeLevelList();\n            this.listInvalidated.update(v => v + 1);\n          }\n        }),\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Change grade level sequence\n   * PATCH ${coreRoutesUrl?.gradeLevel}/change-sequence - payload: MGradeLevelChangeSequencePayload, response: gradeLevelChangeSequenceControllerResponse\n   */\n  changeGradeLevelSequence(payload: MGradeLevelChangeSequencePayload): Observable<gradeLevelChangeSequenceControllerResponse> {\n    console.log('Changing grade level sequence:', payload);\n    const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, 'change-sequence']);\n    return this.http.patch<gradeLevelChangeSequenceControllerResponse>(url, payload)\n      .pipe(\n        tap((response: gradeLevelChangeSequenceControllerResponse) => {\n          if (response.success) {\n            this.refreshGradeLevelList();\n            this.listInvalidated.update(v => v + 1);\n          }\n        }),\n        catchError(this.handleError)\n      );\n  }\n\n  /**\n   * Find grade level by ID\n   */\n  findGradeLevelById(id: string, items: ICoreSydsgl[] = this.gradeLevelListSubject.value): ICoreSydsgl | null {\n    for (const item of items) {\n      if (item._id === id) {\n        return item;\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Refresh grade level list from server\n   */\n  private refreshGradeLevelList(): void {\n    const defaultBody = {\n      pageIndex: 1,\n      pageSize: 10\n    };\n    this.getGradeLevelList(defaultBody).subscribe({\n      next: () => {\n        console.log('Grade level list refreshed successfully');\n      },\n      error: (error) => {\n        console.error('Error refreshing grade level 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('Grade Level Management Service Error:', errorMessage);\n    return throwError(() => new Error(errorMessage));\n  }\n} ","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject, effect } 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, MDesignation, MGradeLevel, MDepartment } 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, RightsService } 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  private rightsService = inject(RightsService);\n\n  private readonly designationListInvalidationEffect = effect(() => {\n    if (this.designationService.listInvalidated() > 0) this.loadDesignations();\n  });\n\n  private readonly departmentListInvalidationEffect = effect(() => {\n    if (this.departmentService.listInvalidated() > 0) this.loadDepartments();\n  });\n\n  private readonly gradeLevelListInvalidationEffect = effect(() => {\n    if (this.gradeLevelService.listInvalidated() > 0) this.loadGradeLevels();\n  });\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  // Rights computed signals\n  canCreate = computed(() => this.rightsService.hasRight('CREATE'));\n  canEdit = computed(() => this.rightsService.hasRight('EDIT'));\n  canDelete = computed(() => this.rightsService.hasRight('DELETE'));\n  canView = computed(() => this.rightsService.hasRight('VIEW'));\n\n  // Grade level options for dropdown\n  gradeLevelOptions = computed(() => {\n    const options = this.gradeLevels()\n      .filter(gradeLevel => gradeLevel.sydsgl_isactive !== false) // Only show active grade levels\n      .map(gradeLevel => ({\n        value: gradeLevel._id || '',\n        label: gradeLevel.sydsgl_name || 'Unknown'\n      }));\n    console.log('📋 Grade level options computed:', options);\n    return options;\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    // Initialize rights for designation management\n    this.rightsService.initializeRights('core_designation_list');\n    // Load departments and grade levels first for dropdown options\n    this.loadDepartments();\n    this.loadGradeLevels();\n    // Then load designations\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 activeEntityId = this.appState.getActiveEntityId();\n    if (!activeEntityId) {\n      console.error('❌ No active entity ID found');\n      this.error.set('No active entity selected');\n      this.loading.set(false);\n      return;\n    }\n\n    const requestBody = new MDesignation({\n      total: this.totalItems(),\n      pageIndex: this.currentPage(),\n      pageSize: this.pageSize(),\n      query: this.searchTerm(),\n      desg_entity_id_syen: activeEntityId\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            // 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 activeEntityId = this.appState.getActiveEntityId();\n    if (!activeEntityId) {\n      console.error('❌ No active entity ID found for departments');\n      return;\n    }\n\n    const requestBody = new MDepartment({\n      total: 0,\n      pageIndex: 1,\n      pageSize: 1000, // Load all departments for dropdown\n      query: '',\n      sydept_entity_id_syen: activeEntityId\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            // Use setTimeout to avoid ExpressionChangedAfterItHasBeenCheckedError\n            setTimeout(() => {\n              this.departments.set(departmentData);\n              // Update grid data after loading departments\n              this.updateGridData(this.designations());\n            }, 0);\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 activeEntityId = this.appState.getActiveEntityId();\n    if (!activeEntityId) {\n      console.error('❌ No active entity ID found for grade levels');\n      return;\n    }\n\n    const requestBody = new MGradeLevel({\n      pageIndex: 1,\n      pageSize: 100, // Load all grade levels for dropdown\n      pagination: false, // Disable pagination to get all results\n      sydsgl_entity_id_syen: activeEntityId\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            console.log('📊 Setting grade levels signal with data:', gradeLevelData);\n            // Use setTimeout to avoid ExpressionChangedAfterItHasBeenCheckedError\n            setTimeout(() => {\n              this.gradeLevels.set(gradeLevelData);\n              console.log('📊 Grade levels signal after set:', this.gradeLevels());\n              console.log('📊 Grade level options after set:', this.gradeLevelOptions());\n              // Update grid data if designations are already loaded\n              if (this.designations().length > 0) {\n                this.updateGridData(this.designations());\n              }\n            }, 0);\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  /**\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    const items: DropdownItem[] = [];\n    \n    // Handle hierarchical data structure\n    if (row.type === 'department') {\n      if (this.canCreate()) {\n        items.push({\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      if (this.canEdit()) {\n        items.push({\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      \n      if (this.canCreate()) {\n        items.push({\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      \n      if (this.canEdit()) {\n        items.push({\n          id: 'toggle',\n          label: row.status ? 'Deactivate' : 'Activate',\n          icon: 'power_settings_new',\n          iconColor: 'tw-text-orange-400',\n          textColor: 'tw-text-orange-600',\n          hoverBgColor: 'hover:tw-bg-orange-50'\n        });\n      }\n      \n      if (this.canDelete()) {\n        items.push({\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    return items;\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 - Show if user has VIEW, CREATE, or EDIT rights -->\n    @if (canView() || canCreate() || canEdit()) {\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\n              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\n                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              [disabled]=\"canView() && !canCreate() && !canEdit()\" 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              [disabled]=\"!canCreate() && !canEdit()\"\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                [disabled]=\"canView() && !canCreate() && !canEdit()\" 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                [disabled]=\"canView() && !canCreate() && !canEdit()\" size=\"sm\">\n              </cide-ele-input>\n            </div>\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\"\n                [disabled]=\"canView() && !canCreate() && !canEdit()\" 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\"\n                [disabled]=\"canView() && !canCreate() && !canEdit()\" 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                [disabled]=\"canView() && !canCreate() && !canEdit()\" 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\"\n                [disabled]=\"canView() && !canCreate() && !canEdit()\"\n                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            @if (canCreate() || canEdit()) {\n            <div class=\"tw-flex tw-flex-col tw-justify-end\">\n              <div class=\"tw-flex tw-space-x-2\">\n                @if (isEditMode() ? canEdit() : canCreate()) {\n                <button cideEleButton variant=\"primary\" size=\"xs\" type=\"submit\" [disabled]=\"quickAddForm.invalid\"\n                  class=\"tw-px-2 tw-py-1 tw-w-20\">\n                  <cide-ele-icon size=\"sm\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add'\n                    }}</cide-ele-icon>\n                  {{ isEditMode() ? 'Update' : 'Add' }}\n                </button>\n                }\n                <button cideEleButton variant=\"outline\" size=\"xs\" type=\"button\" (click)=\"resetQuickAddForm()\"\n                  [disabled]=\"canView() && !canCreate() && !canEdit()\" class=\"tw-px-2 tw-py-1 tw-w-16\">\n                  <cide-ele-icon size=\"sm\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\n                  Reset\n                </button>\n              </div>\n            </div>\n            }\n          </div>\n        </form>\n      </div>\n    </div>\n    }\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=\"sm\">\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, effect } 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, MGradeLevel } from 'cloud-ide-lms-model';\nimport { CideCoreGradeLevelManagementService } from '../../services/grade-level-management.service';\nimport { AppStateHelperService, RightsService } 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  private rightsService = inject(RightsService);\n\n  private readonly gradeLevelListInvalidationEffect = effect(() => {\n    if (this.gradeLevelService.listInvalidated() > 0) this.loadGradeLevels();\n  });\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  // Rights computed signals\n  canCreate = computed(() => this.rightsService.hasRight('CREATE'));\n  canEdit = computed(() => this.rightsService.hasRight('EDIT'));\n  canDelete = computed(() => this.rightsService.hasRight('DELETE'));\n  canView = computed(() => this.rightsService.hasRight('VIEW'));\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    // Initialize rights for grade level management\n    this.rightsService.initializeRights('core_grade_level_list');\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 activeEntityId = this.appState.getActiveEntityId();\n    if (!activeEntityId) {\n      console.error('❌ No active entity ID found');\n      this.error.set('No active entity selected');\n      this.loading.set(false);\n      return;\n    }\n\n    const requestBody = new MGradeLevel({\n      total: this.totalItems(),\n      pageIndex: this.currentPage(),\n      pageSize: this.pageSize(),\n      query: this.searchTerm(),\n      sydsgl_entity_id_syen: activeEntityId\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    const items: DropdownItem[] = [];\n    \n    if (this.canEdit()) {\n      items.push({\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    \n    if (this.canEdit()) {\n      items.push({\n        id: 'toggle',\n        label: row.sydsgl_isactive ? 'Deactivate' : 'Activate',\n        icon: 'power_settings_new',\n        iconColor: 'tw-text-orange-400',\n        textColor: 'tw-text-orange-600',\n        hoverBgColor: 'hover:tw-bg-orange-50'\n      });\n    }\n    \n    if (this.canDelete()) {\n      items.push({\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    return items;\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 - Show if user has VIEW, CREATE, or EDIT rights -->\n  @if (canView() || canCreate() || canEdit()) {\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\n          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 id=\"sydsgl_description\" label=\"Description\" formControlName=\"sydsgl_description\"\n          placeholder=\"Grade level description\" rows=\"2\" [disabled]=\"canView() && !canCreate() && !canEdit()\" 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=\"xs\" \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=\"xs\" \n            type=\"button\"\n            (click)=\"resetQuickAddForm()\"\n            class=\"tw-px-2 tw-py-1 tw-w-16\">\n            <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\n            Reset\n          </button>\n        </div>\n      </div>\n    </div>\n    </form>\n    </div>\n  </div>\n  }\n\n  <!-- 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 { Component, signal, viewChild, TemplateRef, DestroyRef, inject, computed, OnInit } 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, RightsService, CideLytSharedWrapperComponent } 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    CideLytSharedWrapperComponent\n  ],\n  templateUrl: './page-list.component.html'\n})\nexport class CideCorePageListComponent implements OnInit {\n  // Shared wrapper setup\n  shared_wrapper_setup_param = { sypg_page_code: 'core_page_list' };\n\n  // Dependency injection\n  private destroyRef = inject(DestroyRef);\n  private pageService = inject(CideCorePageManagementService);\n  private appState = inject(AppStateHelperService);\n  private router = inject(Router);\n  private rightsService = inject(RightsService);\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  // Rights computed signals\n  canCreate = computed(() => this.rightsService.hasRight('CREATE'));\n  canEdit = computed(() => this.rightsService.hasRight('EDIT'));\n  canDelete = computed(() => this.rightsService.hasRight('DELETE'));\n  canView = computed(() => this.rightsService.hasRight('VIEW'));\n  canManageThemes = computed(() => this.rightsService.hasRight('EDIT')); // Uses EDIT for MANAGE_THEMES\n  canManageControls = computed(() => this.rightsService.hasRight('EDIT')); // Uses EDIT for MANAGE_CONTROLS\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) => {\n      this.editPage(item);\n    },\n    onDelete: (item: ICoreSypg) => {\n      this.deletePage(item);\n    },\n    onToggleStatus: (item: ICoreSypg) => {\n      this.togglePageStatus(item);\n    },\n    onManageThemes: (item: ICoreSypg) => {\n      this.manageThemes(item);\n    },\n    onManageControls: (item: ICoreSypg) => {\n      this.manageControls(item);\n    }\n  };\n\n  constructor() {\n    this.initializeComponent();\n  }\n\n  ngOnInit(): void {\n    // Initialize rights for page management\n    this.rightsService.initializeRights('core_page_management');\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    const items: DropdownItem[] = [];\n    \n    if (this.canEdit()) {\n      items.push({\n        id: 'edit',\n        label: 'Edit',\n        icon: 'edit',\n        disabled: false\n      });\n    }\n    \n    if (this.canManageThemes()) {\n      items.push({\n        id: 'themes',\n        label: 'Manage Themes',\n        icon: 'palette',\n        disabled: false\n      });\n    }\n    \n    if (this.canManageControls()) {\n      items.push({\n        id: 'controls',\n        label: 'Manage Controls',\n        icon: 'settings',\n        disabled: false\n      });\n    }\n    \n    if (this.canEdit()) {\n      items.push({\n        id: 'toggle',\n        label: page.sypg_isactive ? 'Deactivate' : 'Activate',\n        icon: page.sypg_isactive ? 'block' : 'check_circle',\n        disabled: false\n      });\n    }\n    \n    if (this.canDelete()) {\n      items.push({\n        id: 'delete',\n        label: 'Delete',\n        icon: 'delete',\n        disabled: false\n      });\n    }\n    \n    return items;\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 with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_page_list' }\">\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          @if (canCreate()) {\n            <button\n              cideEleButton\n              variant=\"primary\"\n              size=\"xs\"\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          }\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>\n</cide-lyt-shared-wrapper> ","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, ConfirmationService } 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  private confirmationService = inject(ConfirmationService);\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: this.normalizeDrawerPayload(formValue.sytm_layout.sytm_layout_drawer)\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: this.normalizeDrawerPayload(formValue.sytm_layout.sytm_layout_drawer)\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      const drawer = d as { syth_status?: boolean; syth_config_syco_for?: string; syth_config_json?: unknown };\n      this.drawerArray.push(this.createDrawerGroup({\n        syth_status: drawer?.syth_status ?? true,\n        syth_config_syco_for: drawer?.syth_config_syco_for ?? 'drawer_notes',\n        syth_config_json: drawer?.syth_config_json\n      }));\n    });\n\n    this.themeForm.markAsPristine();\n  }\n\n  /**\n   * Delete theme\n   */\n  deleteTheme(theme: ICoreSytm): void {\n    this.confirmationService.ask({\n      title: 'Delete Theme',\n      message: `Are you sure you want to delete the theme \"${theme.sytm_title}\"?\\n\\nThis action cannot be undone.`,\n      confirmText: 'Delete',\n      cancelText: 'Cancel',\n      type: 'danger',\n      icon: 'delete_forever'\n    }).then((confirmed: boolean | string) => {\n      if (confirmed) {\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  /**\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    { value: 'drawer_docs', label: 'Drawer Docs' }\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> & { syth_config_json?: unknown }): FormGroup {\n    const configJson = drawer?.syth_config_json;\n    const configJsonStr = typeof configJson === 'string'\n      ? configJson\n      : (configJson != null ? JSON.stringify(configJson, null, 2) : '[]');\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      syth_config_json: [configJsonStr]\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  /** Parse syth_config_json string to object/array for API payload. */\n  private normalizeDrawerPayload(drawers: unknown[]): ICoreSythDrawer[] {\n    return (drawers || []).map((d: unknown) => {\n      const item = d as Record<string, unknown>;\n      let configJson = item['syth_config_json'];\n      if (typeof configJson === 'string' && configJson.trim()) {\n        try {\n          configJson = JSON.parse(configJson);\n        } catch {\n          configJson = undefined;\n        }\n      }\n      return {\n        syth_status: Boolean(item['syth_status']),\n        syth_config_syco_for: String(item['syth_config_syco_for'] || 'drawer_notes'),\n        ...(configJson != null && configJson !== '' ? { syth_config_json: configJson } : {})\n      } as ICoreSythDrawer;\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 -->\n<div class=\"tw-flex tw-h-full tw-w-full\">\n  \n  <!-- Left: Form and header (60%) -->\n  <div class=\"tw-w-full lg:tw-w-3/5 tw-flex tw-flex-col tw-border-r tw-border-gray-200\">\n\n  <!-- Header Section -->\n    <div class=\"tw-px-6 tw-py-2 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-2 sm:tw-space-y-0\">\n\n      <!-- Title and Back Button -->\n      <div class=\"tw-flex tw-items-center tw-space-x-4\">\n          <button cideEleButton variant=\"ghost\" size=\"xs\" (click)=\"goBack();\" class=\"tw-text-gray-600 hover:tw-text-gray-900\">\n          <cide-ele-icon class=\"tw-w-4 tw-h-4\">arrow_back</cide-ele-icon>\n        </button>\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\">palette</cide-ele-icon>\n          <div>\n            <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Theme Management</h5>\n            <p class=\"tw-text-sm tw-text-gray-500 tw-m-0\">Page: {{ pageTitle() }}</p>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <!-- Error Message -->\n    @if (error()) {\n    <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n      <div class=\"tw-flex 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\n    <!-- Quick Add/Edit Form Section -->\n    <div class=\"tw-px-6 tw-py-3 tw-bg-white tw-overflow-auto\">\n    <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-2\">\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 Theme' : 'Quick Add Theme' }}</h6>\n      </div>\n    </div>\n\n      <!-- Form (kept as-is) -->\n    <form [formGroup]=\"themeForm\" (ngSubmit)=\"saveTheme()\" class=\"tw-space-y-4\">\n      <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-[1fr_200px] tw-gap-4\">\n        <!-- Left Side: All Input Fields -->\n        <div class=\"tw-space-y-4\">\n          <!-- Row 1: Theme Title and Theme Code -->\n          <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\n            <div class=\"tw-space-y-2\">\n                <cide-ele-input id=\"sytm_title\" formControlName=\"sytm_title\" placeholder=\"Enter theme title\" label=\"Theme Title\" size=\"sm\"></cide-ele-input>\n            </div>\n            <div class=\"tw-space-y-2\">\n                <cide-ele-input id=\"sytm_theme_code\" formControlName=\"sytm_theme_code\" placeholder=\"Enter theme code\" label=\"Theme Code\" size=\"sm\"></cide-ele-input>\n            </div>\n          </div>\n          \n          <!-- Row 2: Sub Title and Active Status -->\n          <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\n            <div class=\"tw-space-y-2\">\n                <cide-ele-input id=\"sytm_sub_title\" formControlName=\"sytm_sub_title\" placeholder=\"Enter sub title\" label=\"Sub Title\" size=\"sm\"></cide-ele-input>\n            </div>\n            <div class=\"tw-space-y-2 tw-flex tw-items-center\">\n                <cide-ele-input\n                  id=\"sytm_isactive_cb\"\n                  type=\"checkbox\"\n                  label=\"Active\"\n                size=\"sm\"\n                  formControlName=\"sytm_isactive\">\n                </cide-ele-input>\n            </div>\n          </div>\n          \n          <!-- Row 3: Description -->\n          <div class=\"tw-space-y-2\">\n              <cide-ele-textarea id=\"sytm_desc\" formControlName=\"sytm_desc\" placeholder=\"Enter theme description\" rows=\"2\" label=\"Description\" size=\"sm\"></cide-ele-textarea>\n          </div>\n        </div>\n        \n        <!-- Right Side: File Upload -->\n        <div class=\"tw-flex tw-flex-col tw-justify-start tw-items-center tw-p-0\">\n            <cide-ele-file-input \n              id=\"sytm_preview_id_fm\" \n              formControlName=\"sytm_preview_id_fm\"\n              accept=\"image/*\"\n              [showPreview]=\"true\"\n              [previewBoxMode]=\"true\"\n              [showFileName]=\"false\"\n              previewWidth=\"180px\"\n              previewHeight=\"120px\"\n              placeholderText=\"Upload Preview Image\"\n              placeholderIcon=\"image\"\n              [autoUpload]=\"true\"\n              [uploadData]=\"getPreviewImageUploadData()\"\n              (uploadSuccess)=\"onPreviewImageUploadSuccess($event)\"\n              (uploadError)=\"onPreviewImageUploadError($event)\"\n              (uploadProgressChange)=\"onPreviewImageUploadProgress($event)\">\n            </cide-ele-file-input>\n        </div>\n      </div>\n      \n      <!-- Configuration JSON -->\n      <div class=\"tw-space-y-2\">\n            <cide-ele-json-editor label=\"Configuration JSON\" formControlName=\"sytm_configuration\" [required]=\"true\" [config]=\"{\n               showLineNumbers: true,\n               autoFormat: true,\n               validateOnChange: true,\n               minHeight: 150,\n               maxHeight: 300,\n               placeholder: 'Enter theme configuration JSON...'\n              }\" helperText=\"Enter valid JSON configuration for the theme\"></cide-ele-json-editor>\n         </div>\n      <!-- Layout Configuration + Selection -->\n      <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\n        <div class=\"tw-space-y-2\">\n            <div class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Layout & Selection</div>\n            <!-- Selected toggle -->\n            <div class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-md tw-px-3 tw-py-2\">\n              <cide-ele-input\n                id=\"sytm_isselected\"\n                type=\"checkbox\"\n                label=\"Selected (Default)\"\n                  size=\"sm\"\n                formControlName=\"sytm_isselected\">\n              </cide-ele-input>\n              </div>\n            <div formGroupName=\"sytm_layout\" class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-md tw-divide-y tw-overflow-hidden\">\n              <!-- Sidebar -->\n              <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_sidebar\">\n                <cide-ele-input id=\"layout_sidebar_status\" type=\"checkbox\" label=\"Sidebar\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\n            </div>\n            <!-- Header -->\n              <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_header\">\n                <cide-ele-input id=\"layout_header_status\" type=\"checkbox\" label=\"Header\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\n              </div>\n              <!-- Footer -->\n              <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_footer\">\n                <cide-ele-input id=\"layout_footer_status\" type=\"checkbox\" label=\"Footer\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\n              </div>\n              <!-- Breadcrumb -->\n              <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_breadcrumb\">\n                <cide-ele-input id=\"layout_breadcrumb_status\" type=\"checkbox\" label=\"Breadcrumb\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\n              </div>\n              <!-- Console -->\n              <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_console\">\n                <cide-ele-input id=\"layout_console_status\" type=\"checkbox\" label=\"Console\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\n            </div>\n              <!-- Request -->\n              <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_request\">\n                <cide-ele-input id=\"layout_request_status\" type=\"checkbox\" label=\"Request\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\n              </div>\n            </div>\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>\n        </div>\n        \n        <!-- Drawer Configuration -->\n        <div class=\"tw-space-y-2\">\n            <div class=\"tw-flex tw-items-center tw-justify-between\">\n              <div class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Drawers</div>\n              <button cideEleButton type=\"button\" size=\"xs\" variant=\"outline\" (click)=\"addDrawer()\">\n                Add Drawer\n              </button>\n            </div>\n\n            <div formGroupName=\"sytm_layout\">\n              <div class=\"tw-space-y-2\" formArrayName=\"sytm_layout_drawer\">\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-flex-col tw-gap-3\">\n                  <div class=\"tw-flex tw-items-center tw-gap-3\">\n                    <cide-ele-input id=\"drawer_active_{{i}}\" type=\"checkbox\" label=\"Active\" size=\"sm\" formControlName=\"syth_status\"></cide-ele-input>\n                    <div class=\"tw-flex-1\">\n                      <cide-ele-select\n                        id=\"drawer_config_{{i}}\"\n                        label=\"Drawer For\"\n                        size=\"sm\"\n                        [options]=\"drawerConfigOptions\"\n                        formControlName=\"syth_config_syco_for\">\n                      </cide-ele-select>\n                    </div>\n                    <button cideEleButton type=\"button\" size=\"xs\" variant=\"ghost\" (click)=\"removeDrawer(i)\">\n                      <cide-ele-icon class=\"tw-w-4 tw-h-4\">delete</cide-ele-icon>\n                    </button>\n                  </div>\n                  <ng-container *ngIf=\"drawerGrp.get('syth_config_syco_for')?.value === 'drawer_docs'\">\n                    <div class=\"tw-w-full\">\n                      <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-1\">Config JSON (array of objects with title, url, description)</label>\n                      <cide-ele-textarea\n                        formControlName=\"syth_config_json\"\n                        placeholder=\"Add JSON array of doc items\"\n                        rows=\"4\"\n                        class=\"tw-font-mono tw-text-xs\">\n                      </cide-ele-textarea>\n                    </div>\n                  </ng-container>\n                </div>\n                <p class=\"tw-text-xs tw-text-gray-500\">Configure multiple drawers as needed.</p>\n              </div>\n            </div>\n        </div>\n      </div>\n\n      <!-- Form Actions -->\n        <div class=\"tw-flex tw-flex-col tw-gap-2 tw-pt-4 tw-border-t tw-border-gray-200\">\n          <div class=\"tw-flex tw-items-center tw-justify-end tw-space-x-3\">\n            <button cideEleButton type=\"button\" variant=\"outline\" (click)=\"cancelForm()\" [disabled]=\"loading()\">Cancel</button>\n            <button cideEleButton type=\"submit\" variant=\"primary\" leftIcon=\"add\" [disabled]=\"!themeForm.valid || loading()\" [loading]=\"loading()\">\n          {{ isEditMode() ? 'Update Theme' : 'Create Theme' }}\n        </button>\n          </div>\n      </div>\n    </form>\n    </div>\n  </div>\n\n  <!-- Right: Theme gallery (40%) -->\n  <div class=\"tw-hidden lg:tw-flex tw-w-2/5 tw-flex-col\">\n    <!-- (Header consolidated above) -->\n\n    <!-- Gallery list -->\n    <div class=\"tw-flex-1 tw-overflow-auto tw-bg-gray-50\">\n      <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3 tw-p-4\">\n        @for (theme of filteredThemes(); track theme._id) {\n          <div class=\"tw-rounded-md tw-transition tw-cursor-pointer tw-relative\"\n               [ngClass]=\"theme.sytm_isselected\n                 ? 'tw-border tw-border-blue-500 tw-ring-2 tw-ring-blue-200 tw-bg-blue-50/50'\n                 : 'tw-bg-white tw-border tw-border-gray-200 hover:tw-shadow-sm'\"\n               (click)=\"editTheme(theme)\"\n               role=\"button\"\n               tabindex=\"0\"\n               [attr.aria-selected]=\"theme.sytm_isselected ? 'true' : 'false'\"\n               [attr.aria-label]=\"'Edit theme ' + (theme.sytm_title || theme.sytm_theme_code)\"\n               (keydown.enter)=\"editTheme(theme)\"\n               (keydown.space)=\"$event.preventDefault(); editTheme(theme)\">\n\n            <!-- Selected badge -->\n            <div *ngIf=\"theme.sytm_isselected\"\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\">\n              <cide-ele-icon class=\"tw-w-4 tw-h-4\">check</cide-ele-icon>\n            </div>\n \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\">\n              @if (theme.sytm_preview_id_fm) {\n                <img \n                  cideEleFileImage \n                  [fileId]=\"theme.sytm_preview_id_fm\" \n                  [altText]=\"'Theme Preview'\"\n                  class=\"tw-w-full tw-h-full tw-object-cover\" />\n              } @else {\n                <div class=\"tw-text-gray-400 tw-text-xs\">No preview</div>\n              }\n            </div>\n            <div class=\"tw-p-3 tw-space-y-1\">\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>\n              <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" [title]=\"theme.sytm_theme_code\">{{ theme.sytm_theme_code }}</div>\n              <div class=\"tw-flex tw-items-center tw-justify-between tw-pt-1\">\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'\">\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>\n                  {{ theme.sytm_isactive ? 'Active' : 'Inactive' }}\n                </span>\n                <div class=\"tw-flex tw-items-center tw-gap-1\">\n                  <!-- Set Selected Button - Clear and Simple -->\n                  @if (theme.sytm_isselected) {\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\">\n                      <cide-ele-icon class=\"tw-w-3 tw-h-3\">check</cide-ele-icon>\n                      Selected\n                    </span>\n                  } @else {\n                    <button cideEleButton \n                            variant=\"outline\" \n                            size=\"xs\"\n                            (click)=\"$event.stopPropagation(); setSelectedTheme(theme)\"\n                            [attr.aria-label]=\"'Select ' + (theme.sytm_title || theme.sytm_theme_code) + ' theme'\"\n                            class=\"tw-text-xs\">\n                      Select\n                    </button>\n                  }\n                  <button cideEleButton variant=\"ghost\" size=\"xs\" (click)=\"$event.stopPropagation(); editTheme(theme)\"\n                          [attr.aria-label]=\"'Edit theme ' + (theme.sytm_title || theme.sytm_theme_code)\">\n                    <cide-ele-icon class=\"tw-w-4 tw-h-4\">edit</cide-ele-icon>\n                  </button>\n                  <button cideEleButton variant=\"ghost\" size=\"xs\" (click)=\"$event.stopPropagation(); deleteTheme(theme)\"\n                          [attr.aria-label]=\"'Delete theme ' + (theme.sytm_title || theme.sytm_theme_code)\">\n                    <cide-ele-icon class=\"tw-w-4 tw-h-4\">delete</cide-ele-icon>\n                  </button>\n                </div>\n              </div>\n            </div>\n          </div>\n        }\n\n        @if (!loading() && filteredThemes().length === 0) {\n          <div class=\"tw-col-span-full tw-text-center tw-text-xs tw-text-gray-500 tw-py-8\">No themes found</div>\n        }\n  </div>\n    </div>\n  </div>\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<!-- Theme Details Renderer Template -->\n<ng-template #themeDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n  <div class=\"tw-flex tw-items-center tw-min-w-0\">\n    <!-- Theme Icon -->\n    <div class=\"tw-flex-shrink-0\">\n      <cide-ele-icon \n        class=\"tw-text-purple-600\" \n        size=\"sm\">\n        palette\n      </cide-ele-icon>\n    </div>\n    \n    <!-- Theme 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.sytm_title\">\n        {{ row.sytm_title || 'Untitled' }}\n      </div>\n      @if (row.sytm_desc) {\n        <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \n             [title]=\"row.sytm_desc\">\n          {{ row.sytm_desc }}\n        </div>\n      }\n    </div>\n  </div>\n</ng-template>\n\n<!-- Theme Status Renderer Template -->\n<ng-template #themeStatusRendererTemplate 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.sytm_isactive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800'\">\n    {{ row.sytm_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  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';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule, NonNullableFormBuilder, FormsModule } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\nimport { CideCorePageControlsService } from '../../services/page-controls.service';\r\nimport { AppStateHelperService } from 'cloud-ide-layout';\r\nimport { CideEleButtonComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideEleDropdownComponent, DropdownItem, CideFormFieldErrorComponent } from 'cloud-ide-element';\r\nimport { controlType, generateObjectFromString, ICoreSype, MPageElements, MPageElementsInsertUpdatePayload, themeSize } from 'cloud-ide-lms-model';\r\n\r\n@Component({\r\n  selector: 'cide-core-page-controls',\r\n  standalone: true,\r\n  imports: [\r\n    CommonModule,\r\n    ReactiveFormsModule,\r\n    FormsModule,\r\n    CideEleButtonComponent,\r\n    CideInputComponent,\r\n    CideSelectComponent,\r\n    CideIconComponent,\r\n    CideFormFieldErrorComponent\r\n  ],\r\n  templateUrl: './page-controls.component.html',\r\n  styleUrls: ['./page-controls.component.scss']\r\n})\r\nexport class CideCorePageControlsComponent implements OnInit {\r\n  // Dependency injection\r\n  private destroyRef = inject(DestroyRef);\r\n  private controlsService = inject(CideCorePageControlsService);\r\n  private appState = inject(AppStateHelperService);\r\n  private fb = inject(NonNullableFormBuilder);\r\n  private router = inject(Router);\r\n  private route = inject(ActivatedRoute);\r\n\r\n\r\n\r\n  // Make Math available in template\r\n  Math = Math;\r\n\r\n  // Signals for reactive state management\r\n  controls = signal<ICoreSype[]>([]);\r\n  loading = signal(false);\r\n  error = signal<string | null>(null);\r\n  selectedItems = signal<string[]>([]);\r\n  searchTerm = signal('');\r\n\r\n  // Page information\r\n  pageId = signal<string>('');\r\n  pageTitle = signal<string>('');\r\n\r\n  // Form state\r\n  isEditMode = signal(false);\r\n  editingControlId = signal<string | null>(null);\r\n  retrievedControl = signal<ICoreSype | null>(null);\r\n\r\n  // Control selection for new layout\r\n  selectedControlId = signal<string | null>(null);\r\n\r\n  // Pagination signals\r\n  currentPage = signal(1);\r\n  pageSize = signal(10);\r\n  totalItems = signal(0);\r\n\r\n  // Modern reactive forms with signals - No validators for simplicity\r\n  controlForm = this.fb.group({\r\n    sype_key: [''],\r\n    sype_label: [''],\r\n    sype_label_hide: [false],\r\n    sype_auto_complete: [false], // Changed to boolean for checkbox\r\n    sype_hide_helper_and_error_text: [false],\r\n    sype_type: [''], // controlType\r\n    sype_option_key: [''],\r\n    sype_placeholder: [''],\r\n    sype_min_length: [0],\r\n    sype_max_length: [20],\r\n    sype_regex: [''],\r\n    sype_required: [false],\r\n    sype_disabled: [false],\r\n    sype_width: [''], // Changed to string for px values like \"20px\"\r\n    sype_height: [''], // Changed to string for px values like \"20px\"\r\n    sype_label_placement: ['left' as 'floating' | 'fixed'],\r\n    sype_helper_text_collapse: [false],\r\n    sype_default: ['' as string | number | boolean],\r\n    sype_tooltip: [''],\r\n    sype_size: ['sm' as themeSize], // Changed default to small\r\n    sype_leading_icon: [''],\r\n    sype_isactive: [true],\r\n    sype_entity_id_syen: ['']\r\n  });\r\n\r\n  // Computed values\r\n  isFormDirty = computed(() => this.controlForm.dirty);\r\n\r\n\r\n\r\n  ngOnInit(): void {\r\n    this.initializeComponent();\r\n  }\r\n\r\n  /**\r\n   * Initialize component\r\n   */\r\n  private initializeComponent(): void {\r\n    // Get page information from route\r\n    this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\r\n      const queryParams = params['query'];\r\n      const queryData = generateObjectFromString(queryParams);\r\n      this.pageId.set(queryData?.sypg_id || '');\r\n      this.pageTitle.set(queryData?.sypg_title || '');\r\n\r\n      if (this.pageId()) {\r\n        this.loadControls();\r\n        this.setupFormSubscriptions();\r\n        this.setEntityIdFromAppState();\r\n      } else {\r\n        this.error.set('No page ID provided');\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Set entity ID from app state - auto-assigned internally\r\n   */\r\n  private setEntityIdFromAppState(): void {\r\n    const entityId = this.appState.getActiveEntityId();\r\n    if (entityId) {\r\n      this.controlForm.patchValue({\r\n        sype_entity_id_syen: entityId\r\n      });\r\n      // Disable the entity field since it's auto-assigned\r\n      this.controlForm.get('sype_entity_id_syen')?.disable();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Load controls from API\r\n   */\r\n  private loadControls(): void {\r\n    this.loading.set(true);\r\n    this.error.set(null);\r\n\r\n    const request: MPageElements = {\r\n      sype_page_id_sypg: this.pageId()\r\n    };\r\n\r\n    this.controlsService.getControlList(request)\r\n      .pipe(takeUntilDestroyed(this.destroyRef))\r\n      .subscribe({\r\n        next: (response) => {\r\n          if (response.success) {\r\n            this.controls.set(response.data || []);\r\n            this.totalItems.set(response.total || 0);\r\n          } else {\r\n            this.error.set(response.message || 'Failed to load controls');\r\n          }\r\n          this.loading.set(false);\r\n        },\r\n        error: (error) => {\r\n          console.error('Error loading controls:', error);\r\n          this.error.set('Failed to load controls. Please try again.');\r\n          this.loading.set(false);\r\n        }\r\n      });\r\n  }\r\n\r\n  /**\r\n   * Setup form subscriptions\r\n   */\r\n  private setupFormSubscriptions(): void {\r\n    // Watch for form changes to enable/disable save button\r\n    this.controlForm.valueChanges\r\n      .pipe(takeUntilDestroyed(this.destroyRef))\r\n      .subscribe(() => {\r\n        // Form validation is handled by computed signals\r\n      });\r\n  }\r\n\r\n\r\n\r\n  /**\r\n   * Create new control\r\n   */\r\n  createControl(): void {\r\n\r\n    const formValue = this.controlForm.getRawValue();\r\n    const entityId = this.appState.getActiveEntityId();\r\n\r\n    const newControl: MPageElementsInsertUpdatePayload = {\r\n      _id: '',\r\n      sype_key: formValue.sype_key,\r\n      sype_page_id_sypg: this.pageId(),\r\n      sype_label: formValue.sype_label,\r\n      sype_label_hide: formValue.sype_label_hide,\r\n      sype_auto_complete: formValue.sype_auto_complete,\r\n      sype_hide_helper_and_error_text: formValue.sype_hide_helper_and_error_text,\r\n      sype_type: formValue.sype_type as controlType,\r\n      sype_option_key: formValue.sype_option_key,\r\n      sype_placeholder: formValue.sype_placeholder,\r\n      sype_min_length: formValue.sype_min_length,\r\n      sype_max_length: formValue.sype_max_length,\r\n      sype_regex: formValue.sype_regex,\r\n      sype_required: formValue.sype_required,\r\n      sype_disabled: formValue.sype_disabled,\r\n      sype_width: formValue.sype_width,\r\n      sype_height: formValue.sype_height,\r\n      sype_label_placement: formValue.sype_label_placement,\r\n      sype_helper_text_collapse: formValue.sype_helper_text_collapse,\r\n      sype_default: formValue.sype_default,\r\n      sype_tooltip: formValue.sype_tooltip,\r\n      sype_size: formValue.sype_size,\r\n      sype_leading_icon: formValue.sype_leading_icon,\r\n      sype_isactive: formValue.sype_isactive,\r\n      sype_entity_id_syen: entityId || formValue.sype_entity_id_syen\r\n    };\r\n\r\n    this.loading.set(true);\r\n    this.controlsService.createControl(newControl)\r\n      .pipe(takeUntilDestroyed(this.destroyRef))\r\n      .subscribe({\r\n        next: (response) => {\r\n          if (response.success) {\r\n            this.resetForm();\r\n            this.loadControls();\r\n            console.log('Control created successfully');\r\n          } else {\r\n            console.error(response.message || 'Failed to create control');\r\n          }\r\n          this.loading.set(false);\r\n        },\r\n        error: (error) => {\r\n          console.error('Error creating control:', error);\r\n          console.error('Failed to create control. Please try again.');\r\n          this.loading.set(false);\r\n        }\r\n      });\r\n  }\r\n\r\n  /**\r\n   * Update existing control\r\n   */\r\n  updateControl(): void {\r\n    if (!this.editingControlId()) {\r\n      return;\r\n    }\r\n\r\n    const formValue = this.controlForm.getRawValue();\r\n    const entityId = this.appState.getActiveEntityId();\r\n\r\n    const updatedControl: MPageElementsInsertUpdatePayload = {\r\n      _id: this.editingControlId()!,\r\n      sype_key: formValue.sype_key,\r\n      sype_page_id_sypg: this.pageId(),\r\n      sype_label: formValue.sype_label,\r\n      sype_label_hide: formValue.sype_label_hide,\r\n      sype_auto_complete: Boolean(formValue.sype_auto_complete),\r\n      sype_hide_helper_and_error_text: formValue.sype_hide_helper_and_error_text,\r\n      sype_type: formValue.sype_type as controlType,\r\n      sype_option_key: formValue.sype_option_key,\r\n      sype_placeholder: formValue.sype_placeholder,\r\n      sype_min_length: formValue.sype_min_length,\r\n      sype_max_length: formValue.sype_max_length,\r\n      sype_regex: formValue.sype_regex,\r\n      sype_required: formValue.sype_required,\r\n      sype_disabled: formValue.sype_disabled,\r\n      sype_width: formValue.sype_width,\r\n      sype_height: formValue.sype_height,\r\n      sype_label_placement: formValue.sype_label_placement,\r\n      sype_helper_text_collapse: formValue.sype_helper_text_collapse,\r\n      sype_default: formValue.sype_default,\r\n      sype_tooltip: formValue.sype_tooltip,\r\n      sype_size: formValue.sype_size,\r\n      sype_leading_icon: formValue.sype_leading_icon,\r\n      sype_isactive: formValue.sype_isactive,\r\n      sype_entity_id_syen: entityId || formValue.sype_entity_id_syen\r\n    };\r\n\r\n    this.loading.set(true);\r\n    this.controlsService.updateControl(updatedControl)\r\n      .pipe(takeUntilDestroyed(this.destroyRef))\r\n      .subscribe({\r\n        next: (response) => {\r\n          if (response.success) {\r\n            this.resetForm();\r\n            this.loadControls();\r\n            console.log('Control updated successfully');\r\n          } else {\r\n            console.error(response.message || 'Failed to update control');\r\n          }\r\n          this.loading.set(false);\r\n        },\r\n        error: (error) => {\r\n          console.error('Error updating control:', error);\r\n          console.error('Failed to update control. Please try again.');\r\n          this.loading.set(false);\r\n        }\r\n      });\r\n  }\r\n\r\n  /**\r\n   * Edit control\r\n   */\r\n  editControl(control: ICoreSype): void {\r\n    this.isEditMode.set(true);\r\n    this.editingControlId.set(control._id || null);\r\n    this.retrievedControl.set(control);\r\n\r\n    this.controlForm.patchValue({\r\n      sype_key: control.sype_key,\r\n      sype_label: control.sype_label,\r\n      sype_label_hide: control.sype_label_hide,\r\n      sype_auto_complete: control.sype_auto_complete ? true : false,\r\n      sype_hide_helper_and_error_text: control.sype_hide_helper_and_error_text,\r\n      sype_type: control.sype_type,\r\n      sype_option_key: control.sype_option_key,\r\n      sype_placeholder: control.sype_placeholder,\r\n      sype_min_length: control.sype_min_length,\r\n      sype_max_length: control.sype_max_length,\r\n      sype_regex: control.sype_regex,\r\n      sype_required: control.sype_required,\r\n      sype_disabled: control.sype_disabled,\r\n      sype_width: control.sype_width?.toString() || '',\r\n      sype_height: control.sype_height?.toString() || '',\r\n      sype_label_placement: control.sype_label_placement,\r\n      sype_helper_text_collapse: control.sype_helper_text_collapse,\r\n      sype_default: control.sype_default as string | number | boolean,\r\n      sype_tooltip: control.sype_tooltip,\r\n      sype_size: control.sype_size as themeSize,\r\n      sype_leading_icon: control.sype_leading_icon,\r\n      sype_isactive: control.sype_isactive,\r\n      sype_entity_id_syen: String(control.sype_entity_id_syen || '')\r\n    });\r\n\r\n    this.controlForm.markAsPristine();\r\n  }\r\n\r\n  /**\r\n   * Delete control\r\n   */\r\n  deleteControl(control: ICoreSype): void {\r\n    if (confirm(`Are you sure you want to delete the control \"${control.sype_label}\"?`)) {\r\n      this.loading.set(true);\r\n      this.controlsService.deleteControl(control._id || '')\r\n        .pipe(takeUntilDestroyed(this.destroyRef))\r\n        .subscribe({\r\n          next: (response) => {\r\n            if (response.success) {\r\n              this.loadControls();\r\n              console.log('Control deleted successfully');\r\n            } else {\r\n              console.error(response.message || 'Failed to delete control');\r\n            }\r\n            this.loading.set(false);\r\n          },\r\n          error: (error) => {\r\n            console.error('Error deleting control:', error);\r\n            console.error('Failed to delete control. Please try again.');\r\n            this.loading.set(false);\r\n          }\r\n        });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Toggle control status\r\n   */\r\n  toggleControlStatus(control: ICoreSype): void {\r\n    this.loading.set(true);\r\n    this.controlsService.toggleControlStatus({ sype_id: control._id || '', sype_isactive: !control.sype_isactive })\r\n      .pipe(takeUntilDestroyed(this.destroyRef))\r\n      .subscribe({\r\n        next: (response) => {\r\n          if (response.success) {\r\n            this.loadControls();\r\n            console.log(`Control ${control.sype_isactive ? 'deactivated' : 'activated'} successfully`);\r\n          } else {\r\n            console.error(response.message || 'Failed to toggle control status');\r\n          }\r\n          this.loading.set(false);\r\n        },\r\n        error: (error) => {\r\n          console.error('Error toggling control status:', error);\r\n          console.error('Failed to toggle control status. Please try again.');\r\n          this.loading.set(false);\r\n        }\r\n      });\r\n  }\r\n\r\n  /**\r\n   * Save control (create or update)\r\n   */\r\n  saveControl(): void {\r\n    if (this.isEditMode()) {\r\n      this.updateControl();\r\n    } else {\r\n      this.createControl();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Cancel form\r\n   */\r\n  cancelForm(): void {\r\n    this.resetForm();\r\n  }\r\n\r\n  /**\r\n   * Go back to page list\r\n   */\r\n  goBack(): void {\r\n    this.router.navigate(['/core/page']);\r\n  }\r\n\r\n  /**\r\n   * Reset form\r\n   */\r\n  private resetForm(): void {\r\n    const entityId = this.appState.getActiveEntityId();\r\n\r\n    this.controlForm.reset({\r\n      sype_key: '',\r\n      sype_label: '',\r\n      sype_label_hide: false,\r\n      sype_auto_complete: false,\r\n      sype_hide_helper_and_error_text: false,\r\n      sype_type: '',\r\n      sype_option_key: '',\r\n      sype_placeholder: '',\r\n      sype_min_length: 0,\r\n      sype_max_length: 20,\r\n      sype_regex: '',\r\n      sype_required: false,\r\n      sype_disabled: false,\r\n      sype_width: '',\r\n      sype_height: '',\r\n      sype_label_placement: 'floating',\r\n      sype_helper_text_collapse: false,\r\n      sype_default: '' as string | number | boolean,\r\n      sype_tooltip: '',\r\n      sype_size: 'md',\r\n      sype_leading_icon: '',\r\n      sype_isactive: true,\r\n      sype_entity_id_syen: entityId || ''\r\n    });\r\n    this.isEditMode.set(false);\r\n    this.editingControlId.set(null);\r\n    this.retrievedControl.set(null);\r\n    this.controlForm.markAsPristine();\r\n    this.controlForm.markAsUntouched();\r\n  }\r\n\r\n  /**\r\n   * Mark form as touched to trigger validation display\r\n   */\r\n  private markFormAsTouched(): void {\r\n    Object.keys(this.controlForm.controls).forEach(key => {\r\n      const control = this.controlForm.get(key);\r\n      control?.markAsTouched();\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Get dropdown items for actions\r\n   */\r\n  getActionDropdownItems(control: ICoreSype): DropdownItem[] {\r\n    return [\r\n      {\r\n        id: 'edit',\r\n        label: 'Edit',\r\n        icon: 'edit'\r\n      },\r\n      {\r\n        id: 'toggle',\r\n        label: control.sype_isactive ? 'Deactivate' : 'Activate',\r\n        icon: control.sype_isactive ? 'block' : 'check_circle'\r\n      },\r\n      {\r\n        id: 'delete',\r\n        label: 'Delete',\r\n        icon: 'delete'\r\n      }\r\n    ];\r\n  }\r\n\r\n  /**\r\n   * Handle dropdown item click\r\n   */\r\n  onDropdownItemClick(item: DropdownItem, control: ICoreSype): void {\r\n    switch (item.id) {\r\n      case 'edit':\r\n        this.editControl(control);\r\n        break;\r\n      case 'toggle':\r\n        this.toggleControlStatus(control);\r\n        break;\r\n      case 'delete':\r\n        this.deleteControl(control);\r\n        break;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Close all dropdowns\r\n   */\r\n  closeAllDropdowns(): void {\r\n    // This method can be used to close dropdowns if needed\r\n  }\r\n\r\n  // New methods for the vertical layout\r\n  selectControl(control: ICoreSype): void {\r\n    this.selectedControlId.set(control._id || null);\r\n    console.log('Selected control:', control);\r\n  }\r\n\r\n  trackByControlId(index: number, control: ICoreSype): string {\r\n    return control._id || '';\r\n  }\r\n} ","<!-- Page Controls Container -->\r\n<div class=\"tw-flex tw-flex-col tw-h-full tw-bg-gray-50\">\r\n  <!-- Header Section -->\r\n  <div class=\"tw-bg-white tw-border-b tw-border-gray-200 tw-px-6 tw-py-4\">\r\n    <div class=\"tw-flex tw-items-center tw-justify-between\">\r\n      <div class=\"tw-flex tw-items-center tw-space-x-4\">\r\n        <button \r\n          cideEleButton\r\n          variant=\"ghost\"\r\n          size=\"xs\"\r\n          (click)=\"goBack()\"\r\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\">\r\n          <cide-ele-icon>arrow_back</cide-ele-icon>\r\n        </button>\r\n        <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n          <cide-ele-icon class=\"tw-text-blue-600 tw-text-xl\">settings</cide-ele-icon>\r\n          <div>\r\n            <h1 class=\"tw-text-xl tw-font-semibold tw-text-gray-900 tw-mb-0\">Control Management</h1>\r\n            <p class=\"tw-text-sm tw-text-gray-500 tw-mb-0\">Page: {{ pageTitle() }}</p>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- Error Message -->\r\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()\">\r\n    <cide-ele-icon class=\"tw-text-red-500 tw-flex-shrink-0 tw-mt-0.5\">error</cide-ele-icon>\r\n    <div>\r\n      <h3 class=\"tw-text-red-800 tw-font-medium tw-mb-1\">Error</h3>\r\n      <p class=\"tw-text-red-700 tw-text-sm tw-mb-0\">{{ error() }}</p>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- Main Content Area -->\r\n  <div class=\"tw-flex tw-flex-1 tw-gap-6 tw-p-6 tw-overflow-hidden lg:tw-flex-row tw-flex-col\">\r\n    <!-- Form Section -->\r\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\">\r\n      <div class=\"tw-flex tw-items-center tw-space-x-3 tw-p-6 tw-border-b tw-border-gray-200\">\r\n        <cide-ele-icon class=\"tw-text-blue-600\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n        <h3 class=\"tw-text-lg tw-font-medium tw-text-gray-900 tw-mb-0\">{{ isEditMode() ? 'Edit Control' : 'Quick Add Control' }}</h3>\r\n      </div>\r\n\r\n      <!-- Form -->\r\n      <form [formGroup]=\"controlForm\" (ngSubmit)=\"saveControl()\" class=\"tw-flex tw-flex-col tw-flex-1 tw-p-6 tw-overflow-y-auto\">\r\n        <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-4 tw-mb-6\">\r\n          \r\n          <!-- Basic Information Section -->\r\n          <!-- Control Key -->\r\n          <div class=\"tw-space-y-1\">\r\n            <cide-ele-input\r\n              id=\"sype_key\"\r\n              formControlName=\"sype_key\"\r\n              placeholder=\"Enter control key\"\r\n              label=\"Control Key\"\r\n              size=\"sm\">\r\n            </cide-ele-input>\r\n          </div>\r\n\r\n          <!-- Control Label -->\r\n          <div class=\"tw-space-y-1\">\r\n            <cide-ele-input\r\n              id=\"sype_label\"\r\n              formControlName=\"sype_label\"\r\n              placeholder=\"Enter control label\"\r\n              label=\"Control Label\"\r\n              size=\"sm\">\r\n            </cide-ele-input>\r\n          </div>\r\n\r\n          <!-- Control Type -->\r\n          <div class=\"tw-space-y-1\">\r\n            <cide-ele-select\r\n              id=\"sype_type\"\r\n              formControlName=\"sype_type\"\r\n              [options]=\"[\r\n                { value: 'text', label: 'Text Input' },\r\n                { value: 'textarea', label: 'Text Area' },\r\n                { value: 'select', label: 'Select' },\r\n                { value: 'checkbox', label: 'Checkbox' },\r\n                { value: 'radio', label: 'Radio' },\r\n                { value: 'date', label: 'Date' },\r\n                { value: 'number', label: 'Number' },\r\n                { value: 'email', label: 'Email' },\r\n                { value: 'password', label: 'Password' },\r\n                { value: 'file', label: 'File Upload' }\r\n              ]\"\r\n              label=\"Control Type\"\r\n              size=\"sm\">\r\n            </cide-ele-select>\r\n          </div>\r\n\r\n          <!-- Status - Checkbox aligned properly -->\r\n          <div class=\"tw-space-y-1\">\r\n            <cide-ele-input\r\n              id=\"sype_isactive\"\r\n              type=\"checkbox\"\r\n              formControlName=\"sype_isactive\"\r\n              label=\"Active Status\"\r\n              size=\"sm\">\r\n            </cide-ele-input>\r\n          </div>\r\n\r\n          <!-- Placeholder -->\r\n          <div class=\"tw-space-y-1\">\r\n            <cide-ele-input\r\n              id=\"sype_placeholder\"\r\n              formControlName=\"sype_placeholder\"\r\n              placeholder=\"Enter placeholder text\"\r\n              label=\"Placeholder\"\r\n              size=\"sm\">\r\n            </cide-ele-input>\r\n          </div>\r\n\r\n          <!-- Auto Complete - Checkbox aligned properly -->\r\n          <div class=\"tw-space-y-1\">\r\n            <cide-ele-input\r\n              id=\"sype_auto_complete\"\r\n              type=\"checkbox\"\r\n              formControlName=\"sype_auto_complete\"\r\n              label=\"Auto Complete\"\r\n              size=\"sm\">\r\n            </cide-ele-input>\r\n          </div>\r\n\r\n          <!-- Tooltip -->\r\n          <div class=\"tw-space-y-1\">\r\n            <cide-ele-input\r\n              id=\"sype_tooltip\"\r\n              formControlName=\"sype_tooltip\"\r\n              placeholder=\"Enter tooltip text\"\r\n              label=\"Tooltip\"\r\n              size=\"sm\">\r\n            </cide-ele-input>\r\n          </div>\r\n\r\n          <!-- Validation & Sizing Section -->\r\n          <!-- Min/Max Length - Side by side -->\r\n          <div class=\"tw-col-span-2 tw-flex tw-gap-4\">\r\n            <div class=\"tw-flex-1 tw-space-y-1\">\r\n              <cide-ele-input\r\n                id=\"sype_min_length\"\r\n                type=\"number\"\r\n                formControlName=\"sype_min_length\"\r\n                placeholder=\"0\"\r\n                label=\"Min Length\"\r\n                size=\"xs\">\r\n              </cide-ele-input>\r\n            </div>\r\n            <div class=\"tw-flex-1 tw-space-y-1\">\r\n              <cide-ele-input\r\n                id=\"sype_max_length\"\r\n                type=\"number\"\r\n                formControlName=\"sype_max_length\"\r\n                placeholder=\"20\"\r\n                label=\"Max Length\"\r\n                size=\"xs\">\r\n              </cide-ele-input>\r\n            </div>\r\n          </div>\r\n\r\n          <!-- Size & Label Placement - Side by side -->\r\n          <div class=\"tw-col-span-2 tw-flex tw-gap-4\">\r\n            <div class=\"tw-flex-1 tw-space-y-1\">\r\n              <cide-ele-select\r\n                id=\"sype_size\"\r\n                formControlName=\"sype_size\"\r\n                label=\"Size\"\r\n                size=\"xs\"\r\n                [options]=\"[\r\n                  { value: 'xs', label: 'XS' },\r\n                  { value: 'sm', label: 'SM' },\r\n                  { value: 'md', label: 'MD' },\r\n                  { value: 'lg', label: 'LG' },\r\n                  { value: 'xl', label: 'XL' },\r\n                  { value: 'xxl', label: 'XXL' }\r\n                ]\">\r\n              </cide-ele-select>\r\n            </div>\r\n            <div class=\"tw-flex-1 tw-space-y-1\">\r\n              <cide-ele-select\r\n                id=\"sype_label_placement\"\r\n                formControlName=\"sype_label_placement\"\r\n                label=\"Label Placement\"\r\n                size=\"xs\"\r\n                [options]=\"[\r\n                  { value: 'left', label: 'Left' },\r\n                  { value: 'floating', label: 'Floating' },\r\n                  { value: 'fixed', label: 'Fixed' }\r\n                ]\">\r\n              </cide-ele-select>\r\n            </div>\r\n          </div>\r\n\r\n          <!-- Width & Height - Side by side -->\r\n          <div class=\"tw-col-span-2 tw-flex tw-gap-4\">\r\n            <div class=\"tw-flex-1 tw-space-y-1\">\r\n              <cide-ele-input\r\n                id=\"sype_width\"\r\n                type=\"text\"\r\n                formControlName=\"sype_width\"\r\n                placeholder=\"20px\"\r\n                label=\"Width\"\r\n                size=\"xs\">\r\n              </cide-ele-input>\r\n            </div>\r\n            <div class=\"tw-flex-1 tw-space-y-1\">\r\n              <cide-ele-input\r\n                id=\"sype_height\"\r\n                type=\"text\"\r\n                formControlName=\"sype_height\"\r\n                placeholder=\"20px\"\r\n                label=\"Height\"\r\n                size=\"xs\">\r\n              </cide-ele-input>\r\n            </div>\r\n          </div>\r\n\r\n          <!-- Leading Icon -->\r\n          <div class=\"tw-space-y-1\">\r\n            <cide-ele-input\r\n              id=\"sype_leading_icon\"\r\n              formControlName=\"sype_leading_icon\"\r\n              placeholder=\"Enter icon name\"\r\n              label=\"Leading Icon\"\r\n              size=\"sm\">\r\n            </cide-ele-input>\r\n          </div>\r\n\r\n          <!-- Default Value -->\r\n          <div class=\"tw-space-y-1\">\r\n            <cide-ele-input\r\n              id=\"sype_default\"\r\n              formControlName=\"sype_default\"\r\n              placeholder=\"Enter default value\"\r\n              label=\"Default Value\"\r\n              size=\"sm\">\r\n            </cide-ele-input>\r\n          </div>\r\n\r\n          <!-- Regex Pattern -->\r\n          <div class=\"tw-space-y-1\">\r\n            <cide-ele-input\r\n              id=\"sype_regex\"\r\n              formControlName=\"sype_regex\"\r\n              placeholder=\"Enter regex pattern\"\r\n              label=\"Regex Pattern\"\r\n              size=\"sm\">\r\n            </cide-ele-input>\r\n          </div>\r\n\r\n          <!-- Option Key -->\r\n          <div class=\"tw-space-y-1\">\r\n            <cide-ele-input\r\n              id=\"sype_option_key\"\r\n              formControlName=\"sype_option_key\"\r\n              placeholder=\"Enter option key\"\r\n              label=\"Option Key\"\r\n              size=\"sm\">\r\n            </cide-ele-input>\r\n          </div>\r\n\r\n          <!-- Entity ID (Auto-assigned from AppState) - Hidden -->\r\n          <div class=\"tw-space-y-1\" style=\"display: none;\">\r\n            <cide-ele-input\r\n              id=\"sype_entity_id_syen\"\r\n              formControlName=\"sype_entity_id_syen\"\r\n              placeholder=\"Auto-assigned from system\"\r\n              label=\"Entity ID (Auto-assigned)\"\r\n              size=\"sm\"\r\n              readonly>\r\n            </cide-ele-input>\r\n          </div>\r\n\r\n          <!-- Control Options -->\r\n          <div class=\"tw-col-span-2 tw-space-y-1\">\r\n            <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mb-3\">Control Options</h6>\r\n            <div class=\"tw-grid tw-grid-cols-1 sm:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-3\">\r\n              \r\n              <!-- Required -->\r\n              <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n                <cide-ele-input\r\n                  id=\"sype_required\"\r\n                  type=\"checkbox\"\r\n                  formControlName=\"sype_required\"\r\n                  label=\"Required\"\r\n                  size=\"xs\">\r\n                </cide-ele-input>\r\n              </div>\r\n\r\n              <!-- Disabled -->\r\n              <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n                <cide-ele-input\r\n                  id=\"sype_disabled\"\r\n                  type=\"checkbox\"\r\n                  formControlName=\"sype_disabled\"\r\n                  label=\"Disabled\"\r\n                  size=\"xs\">\r\n                </cide-ele-input>\r\n              </div>\r\n\r\n              <!-- Hide Label -->\r\n              <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n                <cide-ele-input\r\n                  id=\"sype_label_hide\"\r\n                  type=\"checkbox\"\r\n                  formControlName=\"sype_label_hide\"\r\n                  label=\"Hide Label\"\r\n                  size=\"xs\">\r\n                </cide-ele-input>\r\n              </div>\r\n\r\n              <!-- Hide Helper Text -->\r\n              <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n                <cide-ele-input\r\n                  id=\"sype_hide_helper_and_error_text\"\r\n                  type=\"checkbox\"\r\n                  formControlName=\"sype_hide_helper_and_error_text\"\r\n                  label=\"Hide Helper Text\"\r\n                  size=\"xs\">\r\n                </cide-ele-input>\r\n              </div>\r\n\r\n              <!-- Helper Text Collapse -->\r\n              <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n                <cide-ele-input\r\n                  id=\"sype_helper_text_collapse\"\r\n                  type=\"checkbox\"\r\n                  formControlName=\"sype_helper_text_collapse\"\r\n                  label=\"Collapse Helper\"\r\n                  size=\"xs\">\r\n                </cide-ele-input>\r\n              </div>\r\n\r\n            </div>\r\n          </div>\r\n\r\n        </div>\r\n\r\n        <!-- Form Actions -->\r\n        <div class=\"tw-flex tw-justify-between tw-items-center tw-pt-4 tw-border-t tw-border-gray-200 tw-mt-auto\">\r\n          <!-- Error Message (Left Side) -->\r\n          <cide-form-field-error [formGroup]=\"controlForm\"></cide-form-field-error>\r\n          \r\n          <!-- Action Buttons (Right Side) -->\r\n          <div class=\"tw-flex tw-gap-3\">\r\n            <button \r\n              cideEleButton\r\n              type=\"button\"\r\n              variant=\"outline\"\r\n              (click)=\"cancelForm()\"\r\n              [disabled]=\"loading()\">\r\n              Cancel\r\n            </button>\r\n            <button \r\n              cideEleButton\r\n              type=\"submit\"\r\n              variant=\"primary\"\r\n              [disabled]=\"loading()\">\r\n              {{ isEditMode() ? 'Update Control' : 'Create Control' }}\r\n            </button>\r\n          </div>\r\n        </div>\r\n      </form>\r\n    </div>\r\n\r\n    <!-- Controls List Section -->\r\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\">\r\n      <div class=\"tw-p-6 tw-border-b tw-border-gray-200\">\r\n        <h3 class=\"tw-text-lg tw-font-medium tw-text-gray-900 tw-mb-1\">Page Controls</h3>\r\n        <p class=\"tw-text-sm tw-text-gray-500 tw-mb-0\">Controls connected to this page</p>\r\n      </div>\r\n      \r\n      <div class=\"tw-flex-1 tw-overflow-y-auto tw-p-4\" *ngIf=\"!loading() && controls().length > 0\">\r\n        <div \r\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\" \r\n          *ngFor=\"let control of controls(); trackBy: trackByControlId\"\r\n          [class.tw-bg-blue-50]=\"selectedControlId() === control._id\"\r\n          [class.tw-border-blue-300]=\"selectedControlId() === control._id\"\r\n          [class.tw-shadow-md]=\"selectedControlId() === control._id\"\r\n          (click)=\"selectControl(control)\"\r\n          (keyup.enter)=\"selectControl(control)\"\r\n          (keyup.space)=\"selectControl(control)\"\r\n          tabindex=\"0\"\r\n          role=\"button\"\r\n          [attr.aria-label]=\"'Select control ' + (control.sype_label || control.sype_key)\">\r\n          <div class=\"tw-flex tw-items-start tw-space-x-3\">\r\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\">\r\n              <cide-ele-icon class=\"tw-text-blue-600\">settings_input_component</cide-ele-icon>\r\n            </div>\r\n            <div class=\"tw-flex-1 tw-min-w-0\">\r\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>\r\n              <p class=\"tw-text-xs tw-text-gray-500 tw-mb-2 tw-truncate\">{{ control.sype_tooltip || 'No tooltip' }}</p>\r\n              <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\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>\r\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\" \r\n                      [class.tw-bg-red-100]=\"!control.sype_isactive\"\r\n                      [class.tw-text-red-800]=\"!control.sype_isactive\"\r\n                      [class.tw-bg-green-100]=\"control.sype_isactive\"\r\n                      [class.tw-text-green-800]=\"control.sype_isactive\">\r\n                  {{ control.sype_isactive ? 'Active' : 'Inactive' }}\r\n                </span>\r\n              </div>\r\n            </div>\r\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\" \r\n                 [class.tw-opacity-100]=\"selectedControlId() === control._id\">\r\n              <button \r\n                cideEleButton\r\n                variant=\"ghost\"\r\n                size=\"xs\"\r\n                (click)=\"editControl(control); $event.stopPropagation()\">\r\n                <cide-ele-icon>edit</cide-ele-icon>\r\n              </button>\r\n              <button \r\n                cideEleButton\r\n                variant=\"ghost\"\r\n                size=\"xs\"\r\n                (click)=\"deleteControl(control); $event.stopPropagation()\">\r\n                <cide-ele-icon>delete</cide-ele-icon>\r\n              </button>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\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\">\r\n        <cide-ele-icon class=\"tw-text-4xl tw-text-gray-300 tw-mb-4\">settings_input_component</cide-ele-icon>\r\n        <p class=\"tw-text-gray-500 tw-font-medium tw-mb-1\">No controls available</p>\r\n        <small class=\"tw-text-gray-400\">Create controls using the form on the left</small>\r\n      </div>\r\n\r\n      <div class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-py-12 tw-text-center\" *ngIf=\"loading()\">\r\n        <cide-ele-icon class=\"tw-text-2xl tw-text-blue-500 tw-mb-4 tw-animate-spin\">refresh</cide-ele-icon>\r\n        <p class=\"tw-text-gray-500\">Loading controls...</p>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n\r\n ","// Page Management Components\r\nexport * from './components/page-list/page-list.component';\r\nexport * from './components/page-theme/page-theme.component';\r\nexport * from './components/page-controls/page-controls.component';\r\n\r\n// Page Management Services\r\nexport * from './services/page-management.service';\r\nexport * from './services/page-theme.service';\r\nexport * from './services/page-controls.service';\r\n\r\n// Page Management Interfaces - Now using model interfaces from cloud-ide-lms-model ","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\nimport {\r\n  cidePath,\r\n  coreRoutesUrl,\r\n  hostManagerRoutesUrl,\r\n  generateStringFromObject,\r\n  userRoutesUrl,\r\n  authUserMstListControllerResponse,\r\n  AuthUserMstListPayload\r\n} from 'cloud-ide-lms-model';\r\nimport { mongooseObjectIdCreateControllerResponse } from 'cloud-ide-element';\r\n\r\n// Import payload types - temporarily using any until package is properly linked\r\ntype AuthUserMstCreatePayload = any;\r\ntype AuthUserMstGetByIdPayload = any;\r\ntype authUserMstCreateControllerResponse = any;\r\ntype authUserMstGetByIdControllerResponse = any;\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class CideCoreUserMasterService {\r\n  private http = inject(HttpClient);\r\n\r\n  /**\r\n   * Save or update user master data using proper API endpoint\r\n   * @param data - User master data to save (either form data or AuthUserMstCreatePayload)\r\n   * @returns Observable of the save response\r\n   */\r\n  saveUpdateUserMaster(data: AuthUserMstCreatePayload): Observable<authUserMstCreateControllerResponse> {\r\n    const url = cidePath.join([\r\n      hostManagerRoutesUrl.cideSuiteHost,\r\n      userRoutesUrl?.module,\r\n      userRoutesUrl?.user\r\n    ]);\r\n\r\n    // Convert flat form data to nested payload structure expected by API\r\n\r\n    return this.http.post(url, data);\r\n  }\r\n\r\n  /**\r\n   * Get user master by ID\r\n   * @returns Observable of user master data\r\n   */\r\n  getUserMasterById(payload: AuthUserMstGetByIdPayload): Observable<authUserMstGetByIdControllerResponse> {\r\n    const query = generateStringFromObject(payload);\r\n    const url = cidePath.join([\r\n      hostManagerRoutesUrl.cideSuiteHost,\r\n      userRoutesUrl.module,\r\n      userRoutesUrl?.user,\r\n      'byId',\r\n      query\r\n    ]);\r\n\r\n    return this.http.get(url);\r\n  }\r\n\r\n  /**\r\n   * Delete user master\r\n   * @param userId - User ID to delete\r\n   * @returns Observable of the delete response\r\n   */\r\n  deleteUserMaster(userId: string): Observable<any> {\r\n    const url = cidePath.join([\r\n      hostManagerRoutesUrl.cideSuiteHost,\r\n      coreRoutesUrl.module,\r\n      userRoutesUrl?.user,\r\n      userId\r\n    ]);\r\n\r\n    console.log('👤 USER MASTER SERVICE: Deleting user master with ID:', userId);\r\n\r\n    // For now, return simulated response\r\n    return new Observable(observer => {\r\n      setTimeout(() => {\r\n        observer.next({\r\n          success: true,\r\n          data: null,\r\n          message: 'User master deleted successfully'\r\n        });\r\n        observer.complete();\r\n      }, 500);\r\n    });\r\n\r\n    // Uncomment when actual API endpoint is available:\r\n    // return this.http.delete(url);\r\n  }\r\n\r\n  /**\r\n  * Get list of users using the proper API endpoint\r\n  * @param payload - AuthUserMstListPayload for filtering/pagination\r\n  * @returns Observable of response\r\n  */\r\n  getUserList(payload: AuthUserMstListPayload): Observable<authUserMstListControllerResponse> {\r\n    const query = generateStringFromObject(payload);\r\n    const url = cidePath.join([\r\n      hostManagerRoutesUrl.cideSuiteHost,\r\n      userRoutesUrl.module,\r\n      userRoutesUrl?.user,\r\n      query\r\n    ]);\r\n\r\n    console.log('🔍 USER MASTER SERVICE: Making API call to:', url);\r\n    console.log('🔍 USER MASTER SERVICE: Payload:', payload);\r\n\r\n    return this.http.get<authUserMstListControllerResponse>(url);\r\n  }\r\n\r\n  /**\r\n   * Toggle user status\r\n   * @param userId - User ID to toggle status\r\n   * @returns Observable of response\r\n   */\r\n  toggleUserStatus(userId: string): Observable<any> {\r\n    const url = cidePath.join([\r\n      hostManagerRoutesUrl.cideSuiteHost,\r\n      userRoutesUrl.module,\r\n      userRoutesUrl?.user,\r\n      'toggle-status',\r\n      userId\r\n    ]);\r\n\r\n    console.log('🔄 USER MASTER SERVICE: Toggling status for user:', userId);\r\n\r\n    return this.http.patch(url, {});\r\n  }\r\n\r\n  /**\r\n   * Delete user\r\n   * @param userId - User ID to delete\r\n   * @returns Observable of response\r\n   */\r\n  deleteUser(userId: string): Observable<any> {\r\n    const url = cidePath.join([\r\n      hostManagerRoutesUrl.cideSuiteHost,\r\n      userRoutesUrl.module,\r\n      userRoutesUrl?.user,\r\n      userId\r\n    ]);\r\n\r\n    console.log('🗑️ USER MASTER SERVICE: Deleting user:', userId);\r\n\r\n    return this.http.delete(url);\r\n  }\r\n\r\n  /**\r\n   * Generate Object ID for new user creation\r\n   * Calls the backend API to generate a unique ObjectId for new users\r\n   * @returns Observable with the generated ObjectId\r\n   */\r\n  generateObjectId(): Observable<mongooseObjectIdCreateControllerResponse> {\r\n    const url = cidePath.join([\r\n      hostManagerRoutesUrl.cideSuiteHost,\r\n      coreRoutesUrl.module,\r\n      'utility',\r\n      'generateObjectId'\r\n    ]);\r\n    \r\n    console.log('🆔 USER MASTER SERVICE: Generating ObjectId for new user from:', url);\r\n    \r\n    return this.http.get<mongooseObjectIdCreateControllerResponse>(url).pipe(\r\n      catchError((error) => {\r\n        console.error('❌ USER MASTER SERVICE: Error generating ObjectId:', error);\r\n        return throwError(() => error);\r\n      })\r\n    );\r\n  }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { cidePath, coreRoutesUrl, hostManagerRoutesUrl } from 'cloud-ide-lms-model';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class CideCoreRoleSelectService {\r\n  private http = inject(HttpClient);\r\n\r\n  /**\r\n   * Get role options for user master form\r\n   * @returns Observable of role options\r\n   */\r\n  getRoleOptions(): Observable<any> {\r\n    const url = cidePath.join([\r\n      hostManagerRoutesUrl.cideSuiteHost, \r\n      coreRoutesUrl.module, \r\n      'role-select'\r\n    ]);\r\n    \r\n    console.log('👥 ROLE SELECT SERVICE: Making API call to:', url);\r\n    \r\n    // For now, return simulated data\r\n    return new Observable(observer => {\r\n      setTimeout(() => {\r\n        observer.next({\r\n          success: true,\r\n          data: [\r\n            { value: 'role-admin', label: 'Administrator' },\r\n            { value: 'role-teacher', label: 'Teacher' },\r\n            { value: 'role-student', label: 'Student' },\r\n            { value: 'role-staff', label: 'Staff' },\r\n            { value: 'role-parent', label: 'Parent' }\r\n          ]\r\n        });\r\n        observer.complete();\r\n      }, 300);\r\n    });\r\n    \r\n    // Uncomment when actual API endpoint is available:\r\n    // return this.http.get(url);\r\n  }\r\n\r\n  /**\r\n   * Get role list with default parameters\r\n   * @returns Observable of role list\r\n   */\r\n  getAllRoles(): Observable<any> {\r\n    return this.getRoleOptions();\r\n  }\r\n}\r\n","// User Management Services Export Index\r\nexport { CideCoreUserMasterService } from './user-master.service';\r\nexport { CideCoreRoleSelectService } from './role-select.service';\r\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { type Observable } from 'rxjs';\nimport {\n  cidePath,\n  coreRoutesUrl,\n  hostManagerRoutesUrl,\n  generateStringFromObject,\n  type userRoleControllerResponse,\n  type MUserRole,\n  type userRoleByIdControllerResponse,\n  type MUserRoleGetByIdPayload,\n  type userRoleInsertUpdateControllerResponse,\n  type MUserRoleWithRightsPayload,\n  type userRoleDeleteControllerResponse,\n  type MUserRoleDeletePayload,\n  type userRoleToggleStatusControllerResponse,\n  type MUserRoleToggleStatusPayload,\n} from 'cloud-ide-lms-model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CideCoreUserRoleService {\n  private readonly http = inject(HttpClient);\n\n  /**\n   * Get list of user roles\n   * @param payload - Query parameters for filtering/pagination\n   * @returns Observable of user role list response\n   */\n  getUserRoleList(payload: MUserRole): Observable<userRoleControllerResponse> {\n    const query = generateStringFromObject(payload);\n    const url = cidePath.join([\n      hostManagerRoutesUrl.cideSuiteHost,\n      coreRoutesUrl.module,\n      coreRoutesUrl.userRole,\n      query\n    ]);\n\n    return this.http.get(url);\n  }\n\n  /**\n   * Get user role by ID\n   * @param payload - User role ID payload\n   * @returns Observable of user role data\n   */\n  getUserRoleById(payload: MUserRoleGetByIdPayload): Observable<userRoleByIdControllerResponse> {\n    const query = generateStringFromObject(payload);\n    const url = cidePath.join([\n      hostManagerRoutesUrl.cideSuiteHost,\n      coreRoutesUrl.module,\n      coreRoutesUrl.userRole,\n      'byId',\n      query\n    ]);\n\n    return this.http.get(url);\n  }\n\n\n  /**\n   * Create or update user role\n   * @param data - User role data to save\n   * @returns Observable of the save response\n   */\n  saveUpdateUserRole(data: MUserRoleWithRightsPayload): Observable<userRoleInsertUpdateControllerResponse> {\n    const url = cidePath.join([\n      hostManagerRoutesUrl.cideSuiteHost,\n      coreRoutesUrl.module,\n      coreRoutesUrl.userRole\n    ]);\n\n    return this.http.post(url, data);\n  }\n\n\n  /**\n   * Delete user role\n   * @param payload - User role ID payload\n   * @returns Observable of the delete response\n   */\n  deleteUserRole(payload: MUserRoleDeletePayload): Observable<userRoleDeleteControllerResponse> {\n    const query = generateStringFromObject(payload);\n    const url = cidePath.join([\n      hostManagerRoutesUrl.cideSuiteHost,\n      coreRoutesUrl.module,\n      coreRoutesUrl.userRole,\n      'delete',\n      query\n    ]);\n\n    return this.http.delete(url);\n  }\n\n  /**\n   * Toggle user role status\n   * @param payload - User role ID payload\n   * @returns Observable of the toggle response\n   */\n  toggleUserRoleStatus(payload: MUserRoleToggleStatusPayload): Observable<userRoleToggleStatusControllerResponse> {\n    console.log('🔄 Toggle user role status service called with payload:', payload);\n    const url = cidePath.join([\n      hostManagerRoutesUrl.cideSuiteHost,\n      coreRoutesUrl.module,\n      coreRoutesUrl.userRole,\n      'toggle-status'\n    ]);\n\n    return this.http.patch(url, payload);\n  }\n\n  /**\n   * Get roles by entity ID\n   * @param entityId - Entity ID to filter roles\n   * @returns Observable of user role list response\n   */\n  getRolesByEntity(entityId: string): Observable<userRoleControllerResponse> {\n    return this.getUserRoleList({ \n      syusrol_role_entity_id_syen: entityId,\n      syusrol_isactive: true \n    } as MUserRole);\n  }\n}\n\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, of } from 'rxjs';\r\nimport { cidePath, coreRoutesUrl, entityControllerResponse, generateStringFromObject, hostManagerRoutesUrl, CoreSystemEntity, MEntity, CoreSystemEntitySaveUpdatePayload, entityByIdControllerResponse, controllerResponse } from 'cloud-ide-lms-model';\r\n\r\nimport { IEntityService } from 'cloud-ide-shared';\r\n\r\n/**\r\n * Entity Management Service for Core Project\r\n * \r\n * This service handles all entity management operations directly without dependencies on admin services.\r\n */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class CideCoreEntityManagementService implements IEntityService {\r\n  private http = inject(HttpClient);\r\n\r\n\r\n  /**\r\n   * Save or update entity data using coreRoutesUrl?.entity endpoint\r\n   * @param data - Entity data to save/update\r\n   * @returns Observable of the save response\r\n   */\r\n  saveUpdateEntity(data: CoreSystemEntitySaveUpdatePayload): Observable<entityControllerResponse> {\r\n    const url = cidePath.join([\r\n      hostManagerRoutesUrl.cideSuiteHost,\r\n      coreRoutesUrl.module,\r\n      coreRoutesUrl?.entity\r\n    ]);\r\n\r\n    return this.http.post<entityControllerResponse>(url, data);\r\n  }\r\n\r\n  /**\r\n   * Get entity by ID\r\n   * @param entityId - ID of the entity to retrieve\r\n   * @returns Observable of the entity data\r\n   */\r\n  getEntityById(entityId: string): Observable<entityByIdControllerResponse> {\r\n    const payload: Partial<MEntity> = {\r\n      syen_id: entityId\r\n    };\r\n    const query = generateStringFromObject(payload);\r\n    const url = cidePath.join([\r\n      hostManagerRoutesUrl.cideSuiteHost,\r\n      coreRoutesUrl.module,\r\n      coreRoutesUrl?.entityById,\r\n      query\r\n    ]);\r\n\r\n    return this.http.get<entityByIdControllerResponse>(url);\r\n  }\r\n\r\n  /**\r\n   * Get list of entities using the proper API endpoint\r\n   * @param body - MEntity payload for filtering/pagination\r\n   * @returns Observable of entityControllerResponse\r\n   */\r\n  getEntityList(body: MEntity): Observable<entityControllerResponse> {\r\n    const query = generateStringFromObject(body);\r\n    const url = cidePath.join([\r\n      hostManagerRoutesUrl.cideSuiteHost,\r\n      coreRoutesUrl.module,\r\n      coreRoutesUrl.entity,\r\n      query\r\n    ]);\r\n\r\n    return this.http.get(url) as Observable<entityControllerResponse>;\r\n  }\r\n\r\n  /**\r\n   * Delete entity by ID\r\n   * @param entityId - ID of the entity to delete\r\n   * @returns Observable of the delete response\r\n   */\r\n  deleteEntity(entityId: string): Observable<entityControllerResponse> {\r\n    const url = cidePath.join([\r\n      hostManagerRoutesUrl.cideSuiteHost,\r\n      coreRoutesUrl.module,\r\n      coreRoutesUrl?.entity,\r\n      entityId\r\n    ]);\r\n\r\n    return this.http.delete<entityControllerResponse>(url);\r\n  }\r\n\r\n  /**\r\n   * Get School Board Affiliations for an Entity\r\n   * @param entityId - ID of the entity\r\n   * @returns Observable of controllerResponse\r\n   */\r\n  getSchoolBoardAffiliations(entityId: string): Observable<controllerResponse> {\r\n    const payload = { entity_id: entityId };\r\n    const query = generateStringFromObject(payload);\r\n    const url = cidePath.join([\r\n      hostManagerRoutesUrl.cideSuiteHost,\r\n      coreRoutesUrl.module,\r\n      coreRoutesUrl.schoolBoardAffiliation,\r\n      query\r\n    ]);\r\n    return this.http.get<controllerResponse>(url);\r\n  }\r\n\r\n  /**\r\n   * Save School Board Affiliation\r\n   * @param payload - Affiliation data\r\n   * @returns Observable of controllerResponse\r\n   */\r\n  saveSchoolBoardAffiliation(payload: any): Observable<controllerResponse> {\r\n    const url = cidePath.join([\r\n      hostManagerRoutesUrl.cideSuiteHost,\r\n      coreRoutesUrl.module,\r\n      coreRoutesUrl.schoolBoardAffiliation\r\n    ]);\r\n    return this.http.post<controllerResponse>(url, payload);\r\n  }\r\n}","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject, OnInit, effect } 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 { CideCoreGeneralMasterTypeService } from '../../services/general-master-type.service';\nimport { CideEleDataGridComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, CideEleJsonEditorComponent, CideEleButtonComponent, ConfirmationService, NotificationService } from 'cloud-ide-element';\nimport { RightsService } from 'cloud-ide-layout';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { generateStringFromObject, ICoreSygmt } from 'cloud-ide-lms-model';\n\n@Component({\n  selector: 'cide-core-general-master-type',\n  standalone: true,\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    FormsModule,\n    CideEleDataGridComponent,\n    CideEleButtonComponent,\n    CideInputComponent,\n    CideTextareaComponent,\n    CideIconComponent,\n    CideEleDropdownComponent,\n    CideEleJsonEditorComponent\n  ],\n  templateUrl: './general-master-type.component.html',\n  styleUrls: []\n})\nexport class CideCoreGeneralMasterTypeComponent implements OnInit {\n  // Dependency injection\n  private destroyRef = inject(DestroyRef);\n  private typeService = inject(CideCoreGeneralMasterTypeService);\n  private fb = inject(NonNullableFormBuilder);\n  private router = inject(Router);\n  private confirmationService = inject(ConfirmationService);\n  private notificationService = inject(NotificationService);\n  private rightsService = inject(RightsService);\n\n  // Modern ViewChild signals for template renderers (Angular 20 approach)\n  typeDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('typeDetailsRendererTemplate');\n  typeStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('typeStatusRendererTemplate');\n  actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n\n  // Make Math available in template\n  Math = Math;\n\n  // Signals for reactive state management\n  types = signal<ICoreSygmt[]>([]);\n  loading = signal(false);\n  error = signal<string | null>(null);\n  selectedItems = signal<string[]>([]);\n  searchTerm = signal('');\n\n\n  // Form state\n  isEditMode = signal(false);\n  editingTypeId = signal<string | null>(null);\n  retrievedType = signal<ICoreSygmt | 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  typeForm = this.fb.group({\n    sygmt_code: [''],\n    sygmt_title: [''],\n    sygmt_desc: [''],\n    sygmt_configuration: ['{}'],\n    sygmt_isactive: [true],\n    sygmt_id_sygmt: [''] // Parent type ID for child types\n  });\n\n  // Computed values\n  isFormDirty = computed(() => this.typeForm.dirty);\n\n  // Rights computed signals\n  canCreate = computed(() => this.rightsService.hasRight('CREATE'));\n  canEdit = computed(() => this.rightsService.hasRight('EDIT'));\n  canDelete = computed(() => this.rightsService.hasRight('DELETE'));\n  canView = computed(() => this.rightsService.hasRight('VIEW'));\n\n  // Computed signal for form disabled state (for JSON editor which requires WritableSignal)\n  isFormDisabled = signal(false);\n\n  // Effect to update the disabled signal when rights change\n  private updateDisabledState = effect(() => {\n    this.isFormDisabled.set(this.canView() && !this.canCreate() && !this.canEdit());\n  });\n\n\n\n  // Grid configuration signal\n  gridConfig = signal<GridConfiguration<ICoreSygmt>>({\n    id: 'type-list-grid',\n    title: '',\n    subtitle: '',\n    columns: [\n      {\n        key: 'details',\n        header: 'Type Details',\n        type: 'custom',\n        width: 'auto',\n        truncate: true,\n        align: 'left',\n        renderer: 'typeDetailsRenderer'\n      },\n      {\n        key: 'sygmt_code',\n        header: 'Type Code',\n        type: 'text',\n        width: '150px',\n        truncate: true,\n        align: 'left'\n      },\n      {\n        key: 'sygmt_isactive',\n        header: 'Status',\n        type: 'custom',\n        width: '100px',\n        truncate: false,\n        align: 'center',\n        renderer: 'typeStatusRenderer'\n      },\n      {\n        key: 'actions',\n        header: '',\n        type: 'custom',\n        width: '150px',\n        truncate: false,\n        align: 'center',\n        renderer: 'actionsDropdownRenderer'\n      }\n    ],\n    data: [],\n    trackBy: '_id',\n    tree: {\n      enabled: true,\n      foreignKey: 'sygmt_id_sygmt',\n      primaryKey: '_id'\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 types...',\n      searchableColumns: ['sygmt_title', 'sygmt_desc', 'sygmt_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: 40\n    },\n    responsive: true,\n    striped: false,\n    bordered: true,\n    compact: true,\n    tableClass: 'tw-table-fixed tw-w-full tw-rounded-none'\n  });\n\n  // Action handlers for grid\n  actionHandlers = {\n    onEdit: (item: ICoreSygmt) => this.editType(item),\n    onDelete: (item: ICoreSygmt) => this.deleteType(item),\n    onToggleStatus: (item: ICoreSygmt) => this.toggleTypeStatus(item)\n  };\n\n  ngOnInit(): void {\n    // Initialize rights for general master type management\n    this.rightsService.initializeRights('core_general_master_type');\n    this.initializeComponent();\n\n    // Add form submission debugging\n    this.typeForm.valueChanges.subscribe(value => {\n      console.log('🔵 Form value changed:', value);\n    });\n\n    this.typeForm.statusChanges.subscribe(status => {\n      console.log('🔵 Form status changed:', status);\n    });\n  }\n\n  /**\n   * Initialize component\n   */\n  private initializeComponent(): void {\n    this.loadTypes();\n    this.setupFormSubscriptions();\n  }\n\n  /**\n   * Load types from API\n   */\n  loadTypes(): void {\n    this.loading.set(true);\n    this.error.set(null);\n\n    const request = {};\n\n    this.typeService.getTypeList(request)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe({\n        next: (response) => {\n          if (response.success) {\n            this.types.set(response.data || []);\n            this.totalItems.set(response.total || 0);\n            this.updateGridData();\n          } else {\n            this.error.set(response.message || 'Failed to load types');\n          }\n          this.loading.set(false);\n        },\n        error: (error) => {\n          console.error('Error loading types:', error);\n          this.error.set('Failed to load types. Please try again.');\n          this.loading.set(false);\n        }\n      });\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.typeForm.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.types()\n    }));\n  }\n\n  // Computed template renderers for grid\n  templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n    typeDetailsRenderer: this.typeDetailsRendererTemplate(),\n    typeStatusRenderer: this.typeStatusRendererTemplate(),\n    actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n  }));\n\n  /**\n   * Handle grid events\n   */\n  onGridEvent(event: GridEvent<ICoreSygmt>): 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.loadTypes();\n        }\n        break;\n      case 'search':\n        this.searchTerm.set(event.data as string);\n        this.currentPage.set(1);\n        this.loadTypes();\n        break;\n      case 'refresh':\n        this.loadTypes();\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 type\n   */\n  createType(): void {\n    if (!this.typeForm.valid) {\n      this.markFormAsTouched();\n      return;\n    }\n\n    const formValue = this.typeForm.getRawValue();\n    const newType: ICoreSygmt = {\n      _id: '', // Empty _id for create operation\n      sygmt_code: formValue.sygmt_code,\n      sygmt_title: formValue.sygmt_title,\n      sygmt_desc: formValue.sygmt_desc,\n      sygmt_configuration: JSON.parse(formValue.sygmt_configuration),\n      sygmt_isactive: formValue.sygmt_isactive\n    };\n\n    this.loading.set(true);\n    this.typeService.saveType(newType)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe({\n        next: (response) => {\n          if (response.success) {\n            this.cancelForm();\n            this.loadTypes();\n            console.log('✅ Type created successfully');\n          } else {\n            console.error('❌ Failed to create type:', response.message);\n          }\n          this.loading.set(false);\n        },\n        error: (error) => {\n          console.error('Error creating type:', error);\n          console.error('❌ Failed to create type. Please try again.');\n          this.loading.set(false);\n        }\n      });\n  }\n\n  /**\n   * Update existing type\n   */\n  updateType(): void {\n    console.log('🔵 updateType called');\n    console.log('🔵 form valid:', this.typeForm.valid);\n    console.log('🔵 editingTypeId:', this.editingTypeId());\n\n    if (!this.typeForm.valid || !this.editingTypeId()) {\n      console.log('🔵 Form validation failed or no editing ID');\n      this.markFormAsTouched();\n      return;\n    }\n\n    const formValue = this.typeForm.getRawValue();\n    const updatedType: ICoreSygmt = {\n      _id: this.editingTypeId()!, // Include _id for update operation\n      sygmt_code: formValue.sygmt_code,\n      sygmt_title: formValue.sygmt_title,\n      sygmt_desc: formValue.sygmt_desc,\n      sygmt_configuration: JSON.parse(formValue.sygmt_configuration || '{}'),\n      sygmt_isactive: formValue.sygmt_isactive\n    };\n\n    console.log('🔵 Making API call to update type:', updatedType);\n    this.loading.set(true);\n    this.typeService.saveType(updatedType)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe({\n        next: (response) => {\n          console.log('🔵 API response received:', response);\n          if (response.success) {\n            this.cancelForm();\n            this.loadTypes();\n            console.log('✅ Type updated successfully');\n          } else {\n            console.error('❌ Failed to update type:', response.message);\n          }\n          this.loading.set(false);\n        },\n        error: (error) => {\n          console.error('🔵 API error:', error);\n          console.error('❌ Failed to update type. Please try again.');\n          this.loading.set(false);\n        }\n      });\n  }\n\n  /**\n   * Edit type\n   */\n  editType(type: ICoreSygmt): void {\n    this.isEditMode.set(true);\n    this.editingTypeId.set(type._id || \"\");\n    this.retrievedType.set(type);\n\n    this.typeForm.patchValue({\n      sygmt_code: type.sygmt_code,\n      sygmt_title: type.sygmt_title,\n      sygmt_desc: type.sygmt_desc,\n      sygmt_configuration: JSON.stringify(type.sygmt_configuration, null, 2),\n      sygmt_isactive: type.sygmt_isactive\n    });\n\n    this.typeForm.markAsPristine();\n  }\n\n  /**\n   * Delete type\n   */\n  deleteType(type: ICoreSygmt): void {\n    if (!this.rightsService.hasRight('DELETE')) {\n      this.error.set('You do not have permission to delete general master types');\n      return;\n    }\n    this.confirmationService.confirmDelete(type.sygmt_title)\n      .then((confirmed: boolean | string) => {\n        if (confirmed) {\n          this.loading.set(true);\n          this.typeService.deleteType(type._id || \"\")\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe({\n              next: (response) => {\n                if (response.success) {\n                  this.loadTypes();\n                  this.notificationService.success(`Type \"${type.sygmt_title}\" has been deleted successfully.`);\n                  console.log('✅ Type deleted successfully');\n                } else {\n                  console.error('❌ Failed to delete type:', response.message);\n                  this.notificationService.error(response.message || 'Failed to delete type');\n                }\n                this.loading.set(false);\n              },\n              error: (error) => {\n                console.error('Error deleting type:', error);\n                this.notificationService.error('Failed to delete type. Please try again.');\n                this.loading.set(false);\n              }\n            });\n        }\n      });\n  }\n\n  /**\n   * Toggle type status\n   */\n  toggleTypeStatus(type: ICoreSygmt): void {\n    this.loading.set(true);\n    this.typeService.toggleTypeStatus({ sygmt_id: type._id || \"\" })\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe({\n        next: (response) => {\n          if (response.success) {\n            this.loadTypes();\n            console.log(`✅ Type ${type.sygmt_isactive ? 'deactivated' : 'activated'} successfully`);\n          } else {\n            console.error('❌ Failed to toggle type status:', response.message);\n          }\n          this.loading.set(false);\n        },\n        error: (error) => {\n          console.error('Error toggling type status:', error);\n          console.error('❌ Failed to toggle type status. Please try again.');\n          this.loading.set(false);\n        }\n      });\n  }\n\n  /**\n   * Navigate to general master management for this type\n   */\n  navigateToGeneralMaster(type: ICoreSygmt): void {\n    const payload = generateStringFromObject({\n      sygmt_id: type._id,\n      sygmt_title: type.sygmt_title\n    });\n    this.router.navigate(['control-panel', 'general_master_entry', payload]);\n  }\n\n  /**\n   * Handle form submission event\n   */\n  onSubmit(event: Event): void {\n    event.preventDefault();\n    console.log('🔵 Form onSubmit event triggered');\n    this.saveType();\n  }\n\n  /**\n   * Save type (create or update)\n   */\n  saveType(): void {\n    const requiredRight = this.isEditMode() ? 'EDIT' : 'CREATE';\n    if (!this.rightsService.hasRight(requiredRight)) {\n      this.error.set(`You do not have permission to ${this.isEditMode() ? 'edit' : 'create'} general master types`);\n      return;\n    }\n    console.log('🔵 saveType called');\n    console.log('🔵 isEditMode:', this.isEditMode());\n    console.log('🔵 editingTypeId:', this.editingTypeId());\n    console.log('🔵 form valid:', this.typeForm.valid);\n    console.log('🔵 form values:', this.typeForm.getRawValue());\n    console.log('🔵 form dirty:', this.typeForm.dirty);\n    console.log('🔵 form pristine:', this.typeForm.pristine);\n    console.log('🔵 form touched:', this.typeForm.touched);\n\n    if (this.isEditMode()) {\n      console.log('🔵 Calling updateType');\n      this.updateType();\n    } else {\n      console.log('🔵 Calling createType');\n      this.createType();\n    }\n  }\n\n  /**\n   * Cancel form (reset to defaults and exit edit mode)\n   */\n  cancelForm(): void {\n    this.typeForm.reset({\n      sygmt_code: '',\n      sygmt_title: '',\n      sygmt_desc: '',\n      sygmt_configuration: '{}',\n      sygmt_isactive: true,\n      sygmt_id_sygmt: '' // Clear parent type ID\n    });\n    this.isEditMode.set(false);\n    this.editingTypeId.set(null);\n    this.retrievedType.set(null);\n    this.typeForm.markAsPristine();\n    this.typeForm.markAsUntouched();\n  }\n\n  /**\n   * Mark form as touched to trigger validation display\n   */\n  private markFormAsTouched(): void {\n    Object.keys(this.typeForm.controls).forEach(key => {\n      const control = this.typeForm.get(key);\n      control?.markAsTouched();\n    });\n  }\n\n  /**\n   * Clear parent type relationship\n   */\n  clearParentType(): void {\n    this.typeForm.patchValue({\n      sygmt_id_sygmt: ''\n    });\n    console.log('🔵 Parent type relationship cleared');\n  }\n\n  /**\n   * Get dropdown configuration with portal support\n   */\n  getDropdownConfig() {\n    return { triggerIcon: 'more_vert', triggerSize: 'sm' as const };\n  }\n\n  /**\n   * Get dropdown items for actions\n   */\n  getActionDropdownItems(type: ICoreSygmt): DropdownItem[] {\n    const items: DropdownItem[] = [];\n\n    if (this.canEdit()) {\n      items.push({\n        id: 'edit',\n        label: 'Edit',\n        icon: 'edit',\n        disabled: false\n      });\n    }\n\n    if (this.canCreate()) {\n      items.push({\n        id: 'addChild',\n        label: 'Add Child',\n        icon: 'add',\n        disabled: false\n      });\n    }\n\n    // General Master navigation - always available if user can view\n    if (this.canView()) {\n      items.push({\n        id: 'general-master',\n        label: 'General Master',\n        icon: 'list',\n        disabled: false\n      });\n    }\n\n    if (this.canEdit()) {\n      items.push({\n        id: 'toggle',\n        label: type.sygmt_isactive ? 'Deactivate' : 'Activate',\n        icon: type.sygmt_isactive ? 'block' : 'check_circle',\n        disabled: false\n      });\n    }\n\n    if (this.canDelete()) {\n      items.push({\n        id: 'delete',\n        label: 'Delete',\n        icon: 'delete',\n        disabled: false\n      });\n    }\n\n    return items;\n  }\n\n  /**\n   * Get parent type display name\n   */\n  getParentTypeDisplay(): string {\n    const parentId = this.typeForm.get('sygmt_id_sygmt')?.value;\n    if (!parentId) return '';\n\n    const parentType = this.types().find(t => t._id === parentId);\n    return parentType ? (parentType.sygmt_title || 'Unknown Parent') : 'Unknown Parent';\n  }\n\n  /**\n   * Handle adding a child type\n   */\n  onAddChild(parentType: ICoreSygmt): void {\n    console.log('🔵 onAddChild called with:', parentType);\n    console.log('🔵 Parent title:', parentType.sygmt_title);\n\n    // Clear edit mode and retrieved item when adding a child\n    this.isEditMode.set(false);\n    this.editingTypeId.set(null);\n    this.retrievedType.set(null);\n\n    // Reset form and pre-fill with parent context\n    this.typeForm.patchValue({\n      sygmt_code: '',\n      sygmt_title: '',\n      sygmt_desc: '',\n      sygmt_configuration: '{}',\n      sygmt_isactive: true,\n      sygmt_id_sygmt: parentType._id // Set parent type ID\n    });\n\n    // Store the parent type for reference (you can display this in the UI)\n    console.log('🔵 Ready to add child type for parent:', parentType.sygmt_title);\n  }\n\n  /**\n   * Handle dropdown item click\n   */\n  onDropdownItemClick(item: DropdownItem, row: ICoreSygmt): void {\n    console.log('🔵 onDropdownItemClick called with:', item, row);\n\n    switch (item.id) {\n      case 'edit':\n        console.log('🔵 Calling editType with:', row);\n        this.editType(row);\n        break;\n      case 'addChild':\n        console.log('🔵 Calling onAddChild with:', row);\n        this.onAddChild(row);\n        break;\n      case 'general-master':\n        console.log('🔵 Calling navigateToGeneralMaster with:', row);\n        this.navigateToGeneralMaster(row);\n        break;\n      case 'toggle':\n        console.log('🔵 Calling toggleTypeStatus with:', row);\n        this.toggleTypeStatus(row);\n        break;\n      case 'delete':\n        console.log('🔵 Calling deleteType with:', row);\n        this.deleteType(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\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} ","<!-- General Master Type Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n  <!-- Quick Add Form Section - Show if user has VIEW, CREATE, or EDIT rights -->\n  @if (canView() || canCreate() || canEdit()) {\n  <div class=\"tw-table-row tw-h-0\">\n    <div class=\"tw-table-cell tw-px-4 tw-py-3 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-4 tw-h-4\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n          <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Type' : 'General Master\n            Type' }}</h6>\n        </div>\n\n        <!-- Parent Type Info (shown when adding child) -->\n        @if (typeForm.get('sygmt_id_sygmt')?.value) {\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\n              under:' }}</span>\n            <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ getParentTypeDisplay() }}</span>\n          </div>\n          <button cideEleButton variant=\"ghost\" size=\"xs\" type=\"button\" (click)=\"clearParentType()\"\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]=\"typeForm\" (ngSubmit)=\"onSubmit($event)\" class=\"tw-space-y-2 tw-relative\">\n        <!-- Hidden field for parent type ID -->\n        <input type=\"hidden\" formControlName=\"sygmt_id_sygmt\">\n\n        <!-- First Row - Basic fields -->\n        <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-6 tw-gap-2\">\n          <!-- Type Code -->\n          <div class=\"lg:tw-col-span-1\">\n            <cide-ele-input formControlName=\"sygmt_code\" label=\"Type Code\" placeholder=\"Enter type code\" size=\"sm\"\n              [maxlength]=\"40\" [disabled]=\"canView() && !canCreate() && !canEdit()\">\n            </cide-ele-input>\n          </div>\n\n          <!-- Type Title -->\n          <div class=\"lg:tw-col-span-2\">\n            <cide-ele-input formControlName=\"sygmt_title\" label=\"Type Title\" placeholder=\"Enter type title\" size=\"sm\"\n              [maxlength]=\"100\" [disabled]=\"canView() && !canCreate() && !canEdit()\">\n            </cide-ele-input>\n          </div>\n\n          <!-- Active Status -->\n          <div class=\"lg:tw-col-span-1 tw-flex tw-items-center tw-pt-0\">\n            <cide-ele-input formControlName=\"sygmt_isactive\" type=\"checkbox\" label=\"Active\" size=\"sm\"\n              [disabled]=\"canView() && !canCreate() && !canEdit()\">\n            </cide-ele-input>\n          </div>\n        </div>\n        <!-- Second Row - JSON Configuration and Description/Save side by side -->\n        <div class=\"tw-flex tw-gap-4\">\n          <!-- JSON Configuration (60% width) -->\n          <div class=\"tw-w-3/5\">\n            <cide-ele-json-editor formControlName=\"sygmt_configuration\" label=\"Configuration\" size=\"sm\"\n              [disabled]=\"isFormDisabled()\">\n            </cide-ele-json-editor>\n          </div>\n\n          <!-- Description and Save Button (40% width) -->\n          <div class=\"tw-w-2/5 tw-flex tw-flex-col tw-space-y-4\">\n            <!-- Description -->\n            <div class=\"tw-flex-1\">\n              <cide-ele-textarea formControlName=\"sygmt_desc\" label=\"Description\" placeholder=\"Enter description\"\n                size=\"sm\" [maxlength]=\"255\" [rows]=\"4\" [disabled]=\"canView() && !canCreate() && !canEdit()\">\n              </cide-ele-textarea>\n            </div>\n\n            <!-- Action Buttons -->\n            @if (canCreate() || canEdit()) {\n            <div class=\"tw-flex tw-justify-end tw-space-x-2\">\n              <button cideEleButton variant=\"outline\" size=\"xs\" type=\"button\" (click)=\"cancelForm()\"\n                [disabled]=\"loading() || (canView() && !canCreate() && !canEdit())\" class=\"tw-px-4 tw-py-2\">\n                Cancel\n              </button>\n              @if (isEditMode() ? canEdit() : canCreate()) {\n              <button cideEleButton variant=\"primary\" size=\"xs\" type=\"submit\" [disabled]=\"loading()\"\n                class=\"tw-px-4 tw-py-2\" [leftIcon]=\"isEditMode() ? 'edit' : 'add'\">\n                {{ isEditMode() ? 'Update' : 'Save' }}\n              </button>\n              }\n            </div>\n            }\n          </div>\n        </div>\n      </form>\n    </div>\n  </div>\n  }\n\n  <!-- Header Section with Filters -->\n  <div class=\"tw-table-row tw-h-0\">\n    <div class=\"tw-table-cell tw-px-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n\n      <!-- Error Message -->\n      @if (error()) {\n      <div class=\"tw-mt-3 tw-p-3 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-4 tw-h-4 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n          <div class=\"tw-ml-2\">\n            <h3 class=\"tw-text-xs tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n            <p class=\"tw-text-xs 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 [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers()\"\n          (gridEvent)=\"onGridEvent($event)\">\n        </cide-ele-data-grid>\n      </div>\n\n    </div>\n  </div>\n\n</div>\n\n<!-- Template Renderers -->\n<ng-template #typeDetailsRendererTemplate let-row=\"row\">\n  <div class=\"tw-flex tw-flex-col\">\n    <div class=\"tw-font-medium tw-text-gray-900\">{{ row.sygmt_title || 'N/A' }}</div>\n    <div class=\"tw-text-sm tw-text-gray-500 tw-truncate tw-max-w-xs\" title=\"{{ row.sygmt_desc || 'No description' }}\">{{\n      row.sygmt_desc || 'No description' }}</div>\n  </div>\n</ng-template>\n\n<ng-template #typeStatusRendererTemplate let-row=\"row\">\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\"\n    [class.tw-bg-green-100]=\"row.sygmt_isactive\" [class.tw-text-green-800]=\"row.sygmt_isactive\"\n    [class.tw-bg-red-100]=\"!row.sygmt_isactive\" [class.tw-text-red-800]=\"!row.sygmt_isactive\">\n    {{ row.sygmt_isactive ? 'Active' : 'Inactive' }}\n  </span>\n</ng-template>\n\n\n\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\n  <cide-ele-dropdown [items]=\"getActionDropdownItems(row)\" [config]=\"getDropdownConfig()\"\n    (itemClick)=\"onDropdownItemClick($event, row)\">\n  </cide-ele-dropdown>\n</ng-template>","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject, OnInit, effect } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Validators, ReactiveFormsModule, NonNullableFormBuilder, FormsModule } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideCoreGeneralMasterService } from '../../services/general-master.service';\nimport { CideCoreGeneralMasterTypeService } from '../../services/general-master-type.service';\nimport { CideEleDataGridComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, CideEleJsonEditorComponent, CideEleButtonComponent, NotificationService } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { generateObjectFromString, ICoreSygms, IGeneralMasterListRequest } from 'cloud-ide-lms-model';\nimport { AppStateHelperService, RightsService, CideLytRequestService } from 'cloud-ide-layout';\nimport { CideLytSharedWrapperComponent } from 'cloud-ide-layout';\n\n/**\n * General Master Component\n * \n * Note: This component now uses the new IGeneralMasterListRequest interface\n * which only supports:\n * - sygms_id_sygmt: Filter by master type\n * - sygms_entity_id_syen: Filter by entity (with hierarchical lookup)\n * \n * Features like search, pagination, and parent filtering are not supported\n * in the current interface and would need backend implementation.\n */\n@Component({\n  selector: 'cide-core-general-master',\n  standalone: true,\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    FormsModule,\n    CideEleButtonComponent,\n    CideEleDataGridComponent,\n    CideInputComponent,\n    CideTextareaComponent,\n    CideIconComponent,\n    CideEleDropdownComponent,\n    CideEleJsonEditorComponent,\n    CideLytSharedWrapperComponent\n  ],\n  templateUrl: './general-master.component.html',\n  styleUrls: []\n})\nexport class CideCoreGeneralMasterComponent implements OnInit {\n  // Dependency injection\n  private destroyRef = inject(DestroyRef);\n  private masterService = inject(CideCoreGeneralMasterService);\n  private typeService = inject(CideCoreGeneralMasterTypeService);\n  private fb = inject(NonNullableFormBuilder);\n  private router = inject(Router);\n  private route = inject(ActivatedRoute);\n  private appState = inject(AppStateHelperService);\n  private rightsService = inject(RightsService);\n  private notificationService = inject(NotificationService);\n  private requestService = inject(CideLytRequestService); // Injected as any to avoid build errors if type is missing\n\n  /** Refetch masters when list is invalidated elsewhere (e.g. another tab or component). */\n  private readonly listInvalidationEffect = effect(() => {\n    const count = this.masterService.listInvalidated();\n    if (count > 0 && this.typeId()) {\n      this.loadMasters();\n      this.loadParentMasterOptions();\n    }\n  });\n\n  // Modern ViewChild signals for template renderers (Angular 20 approach)\n  masterDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('masterDetailsRendererTemplate');\n  masterStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('masterStatusRendererTemplate');\n  actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n\n  // Make Math available in template\n  Math = Math;\n\n  // Signals for reactive state management\n  masters = signal<ICoreSygms[]>([]);\n  loading = signal(false);\n  error = signal<string | null>(null);\n  selectedItems = signal<string[]>([]);\n  searchTerm = signal('');\n  selectedParentMaster = signal<string>('');\n\n  // Type information\n  typeId = signal<string>('');\n  typeTitle = signal<string>('');\n  currentType = signal<ICoreSygms | null>(null);\n\n  // Form state\n  isEditMode = signal(false);\n  editingMasterId = signal<string | null>(null);\n  retrievedMaster = signal<ICoreSygms | 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  masterForm = this.fb.group({\n    sygms_code: ['', [Validators.required, Validators.maxLength(40)]],\n    sygms_title: ['', [Validators.required, Validators.maxLength(150)]],\n    sygms_desc: ['', [Validators.maxLength(500)]],\n    sygms_configuration: ['{}', [Validators.required]],\n    sygms_id_sygms: [''],\n    sygms_entity_id_syen: [this.appState.getActiveEntityId()],\n    sygms_isactive: [true]\n  });\n\n  // Computed values\n\n  isFormDirty = computed(() => this.masterForm.dirty);\n\n  // Permissions signals based on rights\n  canCreate = computed(() => this.rightsService.hasRight('CREATE'));\n  canEdit = computed(() => this.rightsService.hasRight('EDIT'));\n  canDelete = computed(() => this.rightsService.hasRight('DELETE'));\n  canToggleStatus = computed(() => this.rightsService.hasRight('TOGGLE_STATUS'));\n  canResetToParent = computed(() => this.rightsService.hasRight('RESET_TO_PARENT') || this.rightsService.hasRight('DELETE')); // Often shared or fallback\n\n  // Overall can perform any action\n  canPerformActions = computed(() => this.canEdit() || this.canDelete() || this.canToggleStatus() || this.canResetToParent());\n\n  // Parent master options for dropdown\n  parentMasterOptions = signal<{ value: string; label: string }[]>([]);\n\n  // Grid configuration computed signal\n  gridConfig = computed((): GridConfiguration<ICoreSygms> => {\n    const columns: any[] = [\n      {\n        key: 'details',\n        header: 'Master Details',\n        type: 'custom',\n        width: 'auto',\n        truncate: true,\n        align: 'left',\n        renderer: 'masterDetailsRenderer'\n      },\n      {\n        key: 'sygms_code',\n        header: 'Master Code',\n        type: 'text',\n        width: '150px',\n        truncate: true,\n        align: 'left'\n      },\n      {\n        key: 'sygms_isactive',\n        header: 'Status',\n        type: 'custom',\n        width: '100px',\n        truncate: false,\n        align: 'center',\n        renderer: 'masterStatusRenderer'\n      }\n    ];\n\n    // Conditionally add actions column if user has any action rights\n    if (this.canPerformActions()) {\n      columns.push({\n        key: 'actions',\n        header: '',\n        type: 'custom',\n        width: '150px',\n        truncate: false,\n        align: 'center',\n        renderer: 'actionsDropdownRenderer'\n      });\n    }\n\n    return {\n      id: 'master-list-grid',\n      title: '',\n      subtitle: '',\n      columns: columns,\n      data: this.normalizedMasters(),\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 masters...',\n        searchableColumns: ['sygms_title', 'sygms_desc', 'sygms_code'],\n        debounceMs: 300\n      },\n      loading: {\n        useDefer: true,\n        skeletonRows: 5,\n        showOverlay: false\n      },\n      scroll: {\n        enabled: true,\n        maxHeight: undefined,\n        minHeight: '',\n        stickyHeader: true,\n        virtualScroll: false,\n        rowHeight: 50\n      },\n      fullHeight: true,\n      tree: {\n        enabled: true,\n        primaryKey: '_id',\n        foreignKey: 'sygms_id_sygms',\n        childrenKey: 'children',\n        levelKey: 'level',\n        expandedKey: 'expanded',\n        hasChildrenKey: 'hasChildren'\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\n  // Action handlers for grid\n  actionHandlers = {\n    onEdit: (item: ICoreSygms) => this.editMaster(item),\n    onDelete: (item: ICoreSygms) => this.deleteMaster(item),\n    onToggleStatus: (item: ICoreSygms) => this.toggleMasterStatus(item)\n  };\n\n  ngOnInit(): void {\n    this.initializeComponent();\n  }\n\n  /**\n   * Initialize component\n   */\n  private initializeComponent(): void {\n    // Get type information from route\n    this.route.params.subscribe(params => {\n      const payload = generateObjectFromString(params['query'] || '');\n      this.typeId.set(payload.sygmt_id || '');\n      this.typeTitle.set(payload.sygmt_title || '');\n\n      if (this.typeId()) {\n        this.rightsService.initializeRights('core_general_master');\n        this.loadTypeDetails();\n        this.loadMasters();\n        this.loadParentMasterOptions();\n        this.setupFormSubscriptions();\n      } else {\n        this.error.set('No type ID provided');\n      }\n    });\n  }\n\n  /**\n   * Load type details\n   */\n  private loadTypeDetails(): void {\n    this.typeService.getTypeById(this.typeId())\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe({\n        next: (response) => {\n          if (response.success) {\n            this.currentType.set(response.data as ICoreSygms);\n          }\n        },\n        error: (error) => {\n          console.error('Error loading type details:', error);\n        }\n      });\n  }\n\n  /**\n   * Load masters from API\n   */\n  loadMasters(): void {\n    this.loading.set(true);\n    this.error.set(null);\n\n    const payload: IGeneralMasterListRequest = {\n      ...(this.typeId() && { sygms_id_sygmt: this.typeId() })\n      // Note: search, pagination, and parent_id are not supported in the new interface\n      // These would need to be implemented in the backend if needed\n    };\n\n    this.masterService.getMasterList(payload)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe({\n        next: (response) => {\n          if (response.success) {\n            this.masters.set(response.data || []);\n            this.totalItems.set(response.total || 0);\n            this.updateGridData();\n          } else {\n            this.error.set(response.message || 'Failed to load masters');\n          }\n          this.loading.set(false);\n        },\n        error: (error) => {\n          console.error('Error loading masters:', error);\n          this.error.set('Failed to load masters. Please try again.');\n          this.loading.set(false);\n        }\n      });\n  }\n\n  /**\n   * Load masters by entity ID\n   */\n  loadMastersByEntity(entityId: string): void {\n    this.loading.set(true);\n    this.error.set(null);\n\n    const payload: IGeneralMasterListRequest = {\n      sygms_entity_id_syen: entityId,\n      ...(this.typeId() && { sygms_id_sygmt: this.typeId() })\n    };\n\n    this.masterService.getMasterList(payload)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe({\n        next: (response) => {\n          if (response.success) {\n            this.masters.set(response.data || []);\n            this.totalItems.set(response.total || 0);\n            this.updateGridData();\n          } else {\n            this.error.set(response.message || 'Failed to load masters');\n          }\n          this.loading.set(false);\n        },\n        error: (error) => {\n          console.error('Error loading masters by entity:', error);\n          this.error.set('Failed to load masters. Please try again.');\n          this.loading.set(false);\n        }\n      });\n  }\n\n  /**\n   * Load parent master options for dropdown\n   */\n  private loadParentMasterOptions(): void {\n    const payload: IGeneralMasterListRequest = {\n      ...(this.typeId() && { sygms_id_sygmt: this.typeId() })\n    };\n\n    this.masterService.getMasterList(payload)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe({\n        next: (response) => {\n          if (response.success) {\n            const options = [\n              { value: '', label: '-- Select Parent Master --' },\n              ...(response.data || []).map(master => ({\n                value: master._id || \"\",\n                label: master.sygms_title || \"\"\n              }))\n            ];\n            this.parentMasterOptions.set(options);\n          }\n        },\n        error: (error) => {\n          console.error('Error loading parent master options:', error);\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.masterForm.valueChanges\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => {\n        // Form validation is handled by computed signals\n      });\n  }\n\n  /**\n   * Normalize parent field to string ID for tree view\n   */\n  private normalizeParentField(masters: ICoreSygms[]): ICoreSygms[] {\n    return masters.map(master => {\n      const normalized = { ...master };\n\n      // Normalize parent field to string ID for tree view\n      if (normalized.sygms_id_sygms) {\n        if (typeof normalized.sygms_id_sygms === 'object') {\n          normalized.sygms_id_sygms = (normalized.sygms_id_sygms as any)._id || '';\n        } else if (typeof normalized.sygms_id_sygms === 'string') {\n          // Already a string, keep as is\n          normalized.sygms_id_sygms = normalized.sygms_id_sygms;\n        }\n      } else {\n        // Ensure null/undefined becomes empty string for tree view\n        normalized.sygms_id_sygms = '';\n      }\n\n      return normalized;\n    });\n  }\n\n  /**\n   * Update grid data\n   */\n  private normalizedMasters = computed(() => {\n    return this.normalizeParentField(this.masters());\n  });\n\n  private updateGridData(): void {\n    // gridConfig is now a computed signal based on normalizedMasters\n  }\n\n\n\n  // Computed template renderers for grid\n  templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n    masterDetailsRenderer: this.masterDetailsRendererTemplate(),\n    masterStatusRenderer: this.masterStatusRendererTemplate(),\n    actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n  }));\n\n  /**\n   * Handle grid events\n   */\n  onGridEvent(event: GridEvent<ICoreSygms>): 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.loadMasters();\n        }\n        break;\n      case 'search':\n        this.searchTerm.set(event.data as string);\n        this.currentPage.set(1);\n        this.loadMasters();\n        break;\n      case 'refresh':\n        this.loadMasters();\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 master\n   */\n  createMaster(): void {\n    if (!this.masterForm.valid) {\n      this.markFormAsTouched();\n      return;\n    }\n\n    const formValue = this.masterForm.getRawValue();\n\n    // Helper to convert empty strings to null for FK fields\n    const toNullIfEmpty = (value: unknown): string | null | undefined => {\n      if (value === null || value === undefined) return value;\n      if (typeof value === 'string' && value.trim() === '') return null;\n      return value as string;\n    };\n\n    const newMaster: ICoreSygms = {\n      _id: '',\n      sygms_code: formValue.sygms_code,\n      sygms_id_sygmt: this.typeId(),\n      sygms_title: formValue.sygms_title,\n      sygms_desc: formValue.sygms_desc,\n      sygms_configuration: JSON.parse(formValue.sygms_configuration),\n      sygms_id_sygms: toNullIfEmpty(formValue.sygms_id_sygms),\n      sygms_entity_id_syen: toNullIfEmpty(this.appState.getActiveEntityId()),\n      sygms_isactive: formValue.sygms_isactive\n    };\n\n    this.loading.set(true);\n    this.masterService.createMaster(newMaster)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe({\n        next: (response) => {\n          if (response.success) {\n            this.notificationService.success('General master created successfully');\n\n            // Keep tab open for multiple entries\n            this.resetForm();\n            this.loadMasters();\n            this.loadParentMasterOptions();\n            console.log('✅ Master created successfully');\n          } else {\n            const errorMessage = response.message || 'Failed to create general master';\n            this.error.set(errorMessage);\n            this.notificationService.error(errorMessage);\n            console.error('❌ Failed to create master:', errorMessage);\n          }\n          this.loading.set(false);\n        },\n        error: (error) => {\n          console.error('Error creating master:', error);\n          const errorMessage = error?.error?.message || error?.message || 'Failed to create general master. Please try again.';\n          this.error.set(errorMessage);\n          this.notificationService.error(errorMessage);\n          this.loading.set(false);\n        }\n      });\n  }\n\n  /**\n   * Update existing master\n   */\n  updateMaster(): void {\n    if (!this.masterForm.valid || !this.editingMasterId()) {\n      this.markFormAsTouched();\n      return;\n    }\n\n    const formValue = this.masterForm.getRawValue();\n\n    // Helper to convert empty strings to null for FK fields\n    const toNullIfEmpty = (value: unknown): string | null | undefined => {\n      if (value === null || value === undefined) return value;\n      if (typeof value === 'string' && value.trim() === '') return null;\n      return value as string;\n    };\n\n    const updatedMaster: ICoreSygms = {\n      _id: this.editingMasterId()!,\n      sygms_code: formValue.sygms_code,\n      sygms_id_sygmt: this.typeId(),\n      sygms_title: formValue.sygms_title,\n      sygms_desc: formValue.sygms_desc,\n      sygms_configuration: JSON.parse(formValue.sygms_configuration),\n      sygms_id_sygms: toNullIfEmpty(formValue.sygms_id_sygms),\n      sygms_entity_id_syen: toNullIfEmpty(this.appState.getActiveEntityId()),\n      sygms_isactive: formValue.sygms_isactive\n    };\n\n    this.loading.set(true);\n    this.masterService.updateMaster(this.editingMasterId()!, updatedMaster)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe({\n        next: (response) => {\n          if (response.success) {\n            this.notificationService.success('General master updated successfully');\n\n            // Keep tab open\n            this.resetForm();\n            this.loadMasters();\n            this.loadParentMasterOptions();\n            console.log('✅ Master updated successfully');\n          } else {\n            const errorMessage = response.message || 'Failed to update general master';\n            this.error.set(errorMessage);\n            this.notificationService.error(errorMessage);\n            console.error('❌ Failed to update master:', errorMessage);\n          }\n          this.loading.set(false);\n        },\n        error: (error) => {\n          console.error('Error updating master:', error);\n          const errorMessage = error?.error?.message || error?.message || 'Failed to update general master. Please try again.';\n          this.error.set(errorMessage);\n          this.notificationService.error(errorMessage);\n          this.loading.set(false);\n        }\n      });\n  }\n\n  /**\n   * Edit master\n   */\n  editMaster(master: ICoreSygms): void {\n    this.isEditMode.set(true);\n    this.editingMasterId.set(master._id || \"\");\n    this.retrievedMaster.set(master);\n\n    this.masterForm.patchValue({\n      sygms_code: master.sygms_code,\n      sygms_title: master.sygms_title,\n      sygms_desc: master.sygms_desc,\n      sygms_configuration: JSON.stringify(master.sygms_configuration, null, 2),\n      sygms_id_sygms: master.sygms_id_sygms || '',\n      sygms_isactive: master.sygms_isactive\n    });\n\n    this.masterForm.markAsPristine();\n\n    // Scroll to form section\n    setTimeout(() => {\n      const formElement = document.querySelector('.tw-table-row.tw-h-0');\n      if (formElement) {\n        formElement.scrollIntoView({ behavior: 'smooth', block: 'start' });\n      }\n    }, 100);\n  }\n\n  /**\n   * Copy master - opens form with same data for creating a new record\n   */\n  copyMaster(master: ICoreSygms): void {\n    // Set to create mode (not edit mode)\n    this.isEditMode.set(false);\n    this.editingMasterId.set(null);\n    this.retrievedMaster.set(null);\n\n    // Generate copy suffix for code and title\n    const copySuffix = ' (Copy)';\n    const originalCode = master.sygms_code || '';\n    const originalTitle = master.sygms_title || '';\n\n    // Append \"(Copy)\" to code and title, but remove it if it already exists\n    const newCode = originalCode.endsWith(copySuffix)\n      ? originalCode\n      : originalCode + copySuffix;\n    const newTitle = originalTitle.endsWith(copySuffix)\n      ? originalTitle\n      : originalTitle + copySuffix;\n\n    // Patch form with master data, but with modified code and title\n    this.masterForm.patchValue({\n      sygms_code: newCode,\n      sygms_title: newTitle,\n      sygms_desc: master.sygms_desc || '',\n      sygms_configuration: JSON.stringify(master.sygms_configuration || {}, null, 2),\n      sygms_id_sygms: master.sygms_id_sygms || '',\n      sygms_entity_id_syen: master.sygms_entity_id_syen || this.appState.getActiveEntityId(),\n      sygms_isactive: master.sygms_isactive ?? true\n    });\n\n    // Mark form as dirty so user knows they need to save\n    this.masterForm.markAsDirty();\n\n    // Scroll to form section\n    setTimeout(() => {\n      const formElement = document.querySelector('.tw-table-row.tw-h-0');\n      if (formElement) {\n        formElement.scrollIntoView({ behavior: 'smooth', block: 'start' });\n      }\n    }, 100);\n  }\n\n  /**\n   * Delete master\n   */\n  deleteMaster(master: ICoreSygms): void {\n    if (!this.rightsService.hasRight('DELETE')) {\n      this.error.set('You do not have permission to delete general masters');\n      return;\n    }\n    if (confirm(`Are you sure you want to delete the master \"${master.sygms_title}\"?`)) {\n      this.loading.set(true);\n      this.masterService.deleteMaster(master._id || \"\")\n        .pipe(takeUntilDestroyed(this.destroyRef))\n        .subscribe({\n          next: (response) => {\n            if (response.success) {\n              this.loadMasters();\n              this.loadParentMasterOptions();\n              console.log('✅ Master deleted successfully');\n            } else {\n              console.error('❌ Failed to delete master:', response.message);\n            }\n            this.loading.set(false);\n          },\n          error: (error) => {\n            console.error('Error deleting master:', error);\n            console.error('❌ Failed to delete master. Please try again.');\n            this.loading.set(false);\n          }\n        });\n    }\n  }\n\n  /**\n   * Toggle master status\n   */\n  toggleMasterStatus(master: ICoreSygms): void {\n    if (!this.rightsService.hasRight('TOGGLE_STATUS')) {\n      this.error.set('You do not have permission to toggle general master status');\n      return;\n    }\n    this.loading.set(true);\n    this.masterService.toggleMasterStatus(master._id || \"\")\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe({\n        next: (response) => {\n          if (response.success) {\n            this.loadMasters();\n            console.log(`✅ Master ${master.sygms_isactive ? 'deactivated' : 'activated'} successfully`);\n          } else {\n            console.error('❌ Failed to toggle master status:', response.message);\n          }\n          this.loading.set(false);\n        },\n        error: (error) => {\n          console.error('Error toggling master status:', error);\n          console.error('❌ Failed to toggle master status. Please try again.');\n          this.loading.set(false);\n        }\n      });\n  }\n\n  /**\n   * Reset to parent (delete entity-specific override)\n   */\n  resetToParent(master: ICoreSygms): void {\n    if (confirm(`Are you sure you want to reset \"${master.sygms_title}\" to parent values?`)) {\n      this.loading.set(true);\n      this.masterService.deleteMaster(master._id || \"\")\n        .pipe(takeUntilDestroyed(this.destroyRef))\n        .subscribe({\n          next: (response) => {\n            if (response.success) {\n              this.loadMasters();\n              console.log('✅ Master reset to parent successfully');\n            } else {\n              console.error('❌ Failed to reset master:', response.message);\n            }\n            this.loading.set(false);\n          },\n          error: (error) => {\n            console.error('Error resetting master:', error);\n            console.error('❌ Failed to reset master. Please try again.');\n            this.loading.set(false);\n          }\n        });\n    }\n  }\n\n  /**\n   * Save master (create or update)\n   */\n  saveMaster(): void {\n    const requiredRight = this.isEditMode() ? 'EDIT' : 'CREATE';\n    if (!this.rightsService.hasRight(requiredRight)) {\n      this.error.set(`You do not have permission to ${this.isEditMode() ? 'edit' : 'create'} general masters`);\n      return;\n    }\n    if (this.isEditMode()) {\n      this.updateMaster();\n    } else {\n      this.createMaster();\n    }\n  }\n\n  /**\n   * Cancel form\n   */\n  cancelForm(): void {\n    this.resetForm();\n  }\n\n  /**\n   * Go back to type list\n   */\n  goBack(): void {\n    this.router.navigate(['/control-panel/general-master-type']);\n  }\n\n  /**\n   * Reset form\n   */\n  resetForm(): void {\n    this.masterForm.reset({\n      sygms_code: '',\n      sygms_title: '',\n      sygms_desc: '',\n      sygms_configuration: '{}',\n      sygms_id_sygms: '',\n      sygms_isactive: true\n    });\n    this.isEditMode.set(false);\n    this.editingMasterId.set(null);\n    this.retrievedMaster.set(null);\n    this.masterForm.markAsPristine();\n    this.masterForm.markAsUntouched();\n  }\n\n  /**\n   * Mark form as touched to trigger validation display\n   */\n  private markFormAsTouched(): void {\n    Object.keys(this.masterForm.controls).forEach(key => {\n      const control = this.masterForm.get(key);\n      control?.markAsTouched();\n    });\n  }\n\n  /**\n   * Get dropdown configuration with portal support\n   */\n  getDropdownConfig() {\n    return {};\n  }\n\n  /**\n   * Get dropdown items for actions\n   */\n  getActionDropdownItems(master: ICoreSygms): DropdownItem[] {\n    const items: DropdownItem[] = [];\n\n    if (this.canEdit()) {\n      items.push({\n        id: 'edit',\n        label: 'Edit',\n        icon: 'edit',\n        disabled: false\n      });\n\n      items.push({\n        id: 'copy',\n        label: 'Copy',\n        icon: 'content_copy',\n        disabled: false\n      });\n    }\n\n    if (this.canCreate()) {\n      items.push({\n        id: 'addChild',\n        label: 'Add Child',\n        icon: 'add',\n        disabled: false\n      });\n    }\n\n    if (this.canToggleStatus()) {\n      items.push({\n        id: 'toggle',\n        label: master.sygms_isactive ? 'Deactivate' : 'Activate',\n        icon: master.sygms_isactive ? 'block' : 'check_circle',\n        disabled: false\n      });\n    }\n\n    // Add reset to parent option if entity-specific\n    if (master.sygms_entity_id_syen && this.canResetToParent()) {\n      items.push({\n        id: 'reset',\n        label: 'Reset to Parent',\n        icon: 'restore',\n        disabled: false\n      });\n    }\n\n    if (this.canDelete()) {\n      items.push({\n        id: 'delete',\n        label: 'Delete',\n        icon: 'delete',\n        disabled: false\n      });\n    }\n\n    return items;\n  }\n\n  /**\n   * Handle dropdown item click\n   */\n  onDropdownItemClick(item: DropdownItem, row: ICoreSygms): void {\n    console.log('🔵 onDropdownItemClick called with:', item, row);\n\n    switch (item.id) {\n      case 'edit':\n        console.log('🔵 Calling editMaster with:', row);\n        this.editMaster(row);\n        break;\n      case 'copy':\n        console.log('🔵 Calling copyMaster with:', row);\n        this.copyMaster(row);\n        break;\n      case 'addChild':\n        console.log('🔵 Calling onAddChild with:', row);\n        this.onAddChild(row);\n        break;\n      case 'toggle':\n        console.log('🔵 Calling toggleMasterStatus with:', row);\n        this.toggleMasterStatus(row);\n        break;\n      case 'reset':\n        console.log('🔵 Calling resetToParent with:', row);\n        this.resetToParent(row);\n        break;\n      case 'delete':\n        console.log('🔵 Calling deleteMaster with:', row);\n        this.deleteMaster(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   * Add child master\n   */\n  onAddChild(parentMaster: ICoreSygms): void {\n    console.log('🔵 onAddChild called with:', parentMaster);\n    console.log('🔵 Parent title:', parentMaster.sygms_title);\n\n    // Clear edit mode and retrieved item when adding a child\n    this.isEditMode.set(false);\n    this.editingMasterId.set(null);\n    this.retrievedMaster.set(null);\n\n    // Reset form and pre-fill with parent context\n    this.masterForm.patchValue({\n      sygms_code: '',\n      sygms_title: '',\n      sygms_desc: '',\n      sygms_configuration: '{}',\n      sygms_id_sygms: parentMaster._id, // Set parent master ID\n      sygms_isactive: true\n    });\n\n    // Store the parent master for reference (you can display this in the UI)\n    console.log('🔵 Ready to add child master for parent:', parentMaster.sygms_title);\n  }\n\n  /**\n   * Get parent master display name\n   */\n  getParentMasterDisplay(): string {\n    const parentId = this.masterForm.get('sygms_id_sygms')?.value;\n    if (!parentId) return 'Unknown Parent';\n\n    const parentMaster = this.masters().find(master => master._id === parentId);\n    return parentMaster?.sygms_title || 'Unknown Parent';\n  }\n\n  /**\n   * Clear parent master from form\n   */\n  clearParentMaster(): void {\n    this.masterForm.patchValue({\n      sygms_id_sygms: ''\n    });\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} ","<!-- General Master with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_general_master' }\">\n  <div class=\"tw-table tw-w-full tw-h-full\">\n\n    <!-- Quick Add Form Section -->\n    @if (canCreate() || (isEditMode() && canEdit())) {\n    <div class=\"tw-table-row tw-h-0\">\n      <div class=\"tw-table-cell tw-px-4 tw-py-3 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-4 tw-h-4\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n            <div class=\"tw-flex tw-flex-col\">\n              <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Master' : 'Quick Add\n                Master' }}</h6>\n              @if (typeTitle()) {\n              <p class=\"tw-text-xs tw-text-gray-500 tw-m-0 tw-mt-0.5\">Type: <span\n                  class=\"tw-font-medium tw-text-gray-700\">{{ typeTitle() }}</span></p>\n              }\n            </div>\n          </div>\n\n          <!-- Parent Master Info Box -->\n          @if (masterForm.get('sygms_id_sygms')?.value) {\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            <span class=\"tw-text-sm tw-font-medium tw-text-blue-800\">Adding Child</span>\n            <span class=\"tw-text-xs tw-text-blue-700\">\n              Parent: <span class=\"tw-font-medium\">{{ getParentMasterDisplay() }}</span>\n            </span>\n            <button type=\"button\" (click)=\"clearParentMaster()\"\n              class=\"tw-text-sm tw-text-blue-600 hover:tw-text-blue-800 hover:tw-bg-blue-100 tw-rounded tw-px-1\">\n              ×\n            </button>\n          </div>\n          }\n        </div>\n\n        <form [formGroup]=\"masterForm\" class=\"tw-space-y-2\">\n\n          <!-- First Row - Basic fields -->\n          <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-6 tw-gap-2\">\n            <!-- Master Code -->\n            <div class=\"lg:tw-col-span-1\">\n              <cide-ele-input formControlName=\"sygms_code\" label=\"Master Code\" placeholder=\"Enter master code\" size=\"xs\"\n                [required]=\"true\" [maxlength]=\"40\">\n              </cide-ele-input>\n            </div>\n\n            <!-- Master Title -->\n            <div class=\"lg:tw-col-span-3\">\n              <cide-ele-input formControlName=\"sygms_title\" label=\"Master Title\" placeholder=\"Enter master title\"\n                size=\"xs\" [required]=\"true\" [maxlength]=\"150\">\n              </cide-ele-input>\n            </div>\n\n            <!-- Active Status -->\n            <div class=\"lg:tw-col-span-1 tw-flex tw-items-center tw-pt-0\">\n              <cide-ele-input formControlName=\"sygms_isactive\" type=\"checkbox\" label=\"Active\" size=\"xs\">\n              </cide-ele-input>\n            </div>\n          </div>\n\n          <!-- Third Row - JSON Configuration and Description/Save side by side -->\n          <div class=\"tw-flex tw-gap-4\">\n            <!-- JSON Configuration (60% width) -->\n            <div class=\"tw-w-3/5\">\n              <cide-ele-json-editor formControlName=\"sygms_configuration\" label=\"Configuration\" size=\"xs\"\n                [required]=\"true\">\n              </cide-ele-json-editor>\n            </div>\n\n            <!-- Description and Save Button (40% width) -->\n            <div class=\"tw-w-2/5 tw-flex tw-flex-col tw-space-y-4\">\n              <!-- Description -->\n              <div class=\"tw-flex-1\">\n                <cide-ele-textarea formControlName=\"sygms_desc\" label=\"Description\" placeholder=\"Enter description\"\n                  size=\"xs\" [maxlength]=\"500\" [rows]=\"4\">\n                </cide-ele-textarea>\n              </div>\n\n              <!-- Action Buttons -->\n              <div class=\"tw-flex tw-justify-end tw-space-x-2\">\n                <button cideEleButton variant=\"outline\" size=\"xs\" type=\"button\" (click)=\"resetForm()\"\n                  [disabled]=\"loading()\" class=\"tw-px-4 tw-py-2\">\n                  Reset\n                </button>\n                @if (isEditMode()) {\n                <button cideEleButton variant=\"outline\" size=\"xs\" type=\"button\" (click)=\"cancelForm()\"\n                  [disabled]=\"loading()\" class=\"tw-px-4 tw-py-2\">\n                  Cancel\n                </button>\n                }\n                <button cideEleButton variant=\"primary\" size=\"xs\" type=\"submit\" (click)=\"saveMaster()\"\n                  [disabled]=\"!masterForm.valid || loading()\" class=\"tw-px-4 tw-py-2\">\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' : 'Save' }}\n                </button>\n              </div>\n            </div>\n          </div>\n        </form>\n      </div>\n    </div>\n    }\n\n    <!-- Header Section with Filters -->\n    <div class=\"tw-table-row tw-h-0\">\n      <div class=\"tw-table-cell tw-px-4 tw-py-2 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-2 sm:tw-space-y-0\">\n\n          <!-- Title and Back Button -->\n          <div class=\"tw-flex tw-items-center tw-space-x-3\">\n            <div class=\"tw-flex tw-items-center tw-space-x-2\">\n              @if (typeTitle()) {\n              <div>\n                <p class=\"tw-text-xs tw-text-gray-500 tw-m-0\">Type: {{ typeTitle() }}</p>\n              </div>\n              }\n            </div>\n          </div>\n\n          <!-- Actions -->\n          <div\n            class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-2 sm:tw-space-y-0 sm:tw-space-x-3\">\n            <!-- Actions can be added here in the future -->\n          </div>\n        </div>\n\n        <!-- Error Message -->\n        @if (error()) {\n        <div class=\"tw-mt-3 tw-p-3 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-4 tw-h-4 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 tw-h-0\">\n      <div class=\"tw-table-cell tw-h-full tw-relative tw-p-0\">\n\n        <!-- Data Grid Component -->\n        <div class=\"tw-h-full tw-overflow-hidden\">\n          <cide-ele-data-grid class=\"tw-h-full\" [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers()\"\n            (gridEvent)=\"onGridEvent($event)\">\n          </cide-ele-data-grid>\n        </div>\n\n      </div>\n    </div>\n\n  </div>\n\n  <!-- Template Renderers -->\n  <ng-template #masterDetailsRendererTemplate let-row=\"row\">\n    <div class=\"tw-flex tw-flex-col tw-w-full\">\n      <div class=\"tw-font-medium tw-text-gray-900\">{{ row.sygms_title || 'N/A' }}</div>\n      <div class=\"tw-text-sm tw-text-gray-500 tw-truncate\">{{ row.sygms_desc || 'No description' }}</div>\n    </div>\n  </ng-template>\n\n  <ng-template #masterStatusRendererTemplate let-row=\"row\">\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\"\n      [class.tw-bg-green-100]=\"row.sygms_isactive\" [class.tw-text-green-800]=\"row.sygms_isactive\"\n      [class.tw-bg-red-100]=\"!row.sygms_isactive\" [class.tw-text-red-800]=\"!row.sygms_isactive\">\n      {{ row.sygms_isactive ? 'Active' : 'Inactive' }}\n    </span>\n  </ng-template>\n\n  <ng-template #actionsDropdownRendererTemplate let-row=\"row\">\n    <cide-ele-dropdown [items]=\"getActionDropdownItems(row)\" [config]=\"getDropdownConfig()\"\n      (itemClick)=\"onDropdownItemClick($event, row)\">\n    </cide-ele-dropdown>\n  </ng-template>\n</cide-lyt-shared-wrapper>","// Components\r\nexport * from './components/general-master-type/general-master-type.component';\r\nexport * from './components/general-master/general-master.component';\r\n\r\n// Services\r\nexport * from './services/general-master-type.service';\r\nexport * from './services/general-master.service'; ","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { cidePath, coreRoutesUrl, hostManagerRoutesUrl, MPinCodeSelect, pinCodeSelectControllerResponse } from 'cloud-ide-lms-model';\r\nimport { Observable } from 'rxjs';\r\n\r\n/**\r\n * @description Data service for pin code (postal code) operations\r\n * Handles API calls for retrieving pin code and location data\r\n */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class CideCorePinCodeService {\r\n  private http = inject(HttpClient);\r\n\r\n  /**\r\n   * Get pin code data from API\r\n   * @param body - MPinCodeSelect payload with sypin_pincode\r\n   * @returns Observable of pin code select response\r\n   */\r\n  getPinCodeData(body: MPinCodeSelect): Observable<pinCodeSelectControllerResponse> {\r\n    const url = cidePath.join([\r\n      hostManagerRoutesUrl.cideSuiteHost, \r\n      coreRoutesUrl.module, \r\n      coreRoutesUrl?.pinCode\r\n    ]);\r\n    \r\n    console.log('📍 PIN CODE SERVICE: Making API call to:', url);\r\n    console.log('📍 PIN CODE SERVICE: Payload:', body);\r\n    \r\n    return this.http.post(url, body) as Observable<pinCodeSelectControllerResponse>;\r\n  }\r\n\r\n  /**\r\n   * Get pin code data by specific pin code\r\n   * @param pincode - The pin code to search for\r\n   * @returns Observable of pin code data\r\n   */\r\n  getPinCodeByCode(pincode: string): Observable<pinCodeSelectControllerResponse> {\r\n    const payload: MPinCodeSelect = {\r\n      sypin_pincode: pincode\r\n    };\r\n    return this.getPinCodeData(payload);\r\n  }\r\n\r\n  /**\r\n   * Get all postal codes with default parameters\r\n   * @returns Observable of all postal codes\r\n   */\r\n  getAllPostalCodes(): Observable<pinCodeSelectControllerResponse> {\r\n    const payload: MPinCodeSelect = { \r\n      sypin_pincode: '' // Empty to get all or use a default\r\n    };\r\n    return this.getPinCodeData(payload);\r\n  }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { cidePath, coreRoutesUrl, hostManagerRoutesUrl, currencyListControllerResponse, MSycrList, generateStringFromObject } from 'cloud-ide-lms-model';\nimport { Observable } from 'rxjs';\nimport type { ICurrencyService } from 'cloud-ide-shared';\n\n/**\n * @description Data service for currency-related operations\n * Handles API calls for retrieving currency data\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class CideCoreCurrencyService implements ICurrencyService {\n  private http = inject(HttpClient);\n\n  /**\n   * Get all currencies from API\n   * @param body - MSycrList payload for filtering\n   * @returns Observable of currency list response\n   */\n  getAllCurrencies(body: Partial<MSycrList>): Observable<currencyListControllerResponse> {\n    const query = generateStringFromObject(body);\n    const url = cidePath.join([\n      hostManagerRoutesUrl.cideSuiteHost, \n      coreRoutesUrl.module, \n      coreRoutesUrl?.currency,\n      query\n    ]);\n    \n    console.log('💰 CURRENCY SERVICE: Making API call to:', url);\n    console.log('💰 CURRENCY SERVICE: Payload:', body);\n    \n    return this.http.get(url) as Observable<currencyListControllerResponse>;\n  }\n}\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { cidePath, coreRoutesUrl, countryListControllerResponse, generateStringFromObject, hostManagerRoutesUrl, MSyctrList } from 'cloud-ide-lms-model';\r\nimport { Observable } from 'rxjs';\r\n\r\n/**\r\n * @description Data service for country-related operations\r\n * Handles API calls for retrieving country data\r\n */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class CideCoreCountryService {\r\n  private http = inject(HttpClient);\r\n\r\n  /**\r\n   * Get all countries from API\r\n   * @param body - MSyctrList payload for filtering\r\n   * @returns Observable of country list response\r\n   */\r\n  getAllCountries(body: Partial<MSyctrList>): Observable<countryListControllerResponse> {\r\n    console.log(body, \"body body\")\r\n    const query = generateStringFromObject(body);\r\n    const url = cidePath.join([\r\n      hostManagerRoutesUrl.cideSuiteHost, \r\n      coreRoutesUrl.module, \r\n      coreRoutesUrl.country,\r\n      query\r\n    ]);\r\n    \r\n    console.log('🌍 COUNTRY SERVICE: Making API call to:', url);\r\n    console.log('🌍 COUNTRY SERVICE: Payload:', body);\r\n    \r\n    return this.http.get(url);\r\n  }\r\n\r\n  /**\r\n   * Get countries with default parameters\r\n   * @returns Observable of country list response\r\n   */\r\n  getCountries(): Observable<countryListControllerResponse> {\r\n    const defaultPayload: Partial<MSyctrList> = {};\r\n    return this.getAllCountries(defaultPayload);\r\n  }\r\n\r\n  /**\r\n   * Search countries with specific filters\r\n   * @param filters - Search criteria for countries\r\n   * @returns Observable of filtered country list\r\n   */\r\n  searchCountries(filters: Partial<MSyctrList>): Observable<countryListControllerResponse> {\r\n    return this.getAllCountries(filters);\r\n  }\r\n\r\n  /**\r\n   * Get country by ID\r\n   * @param countryId - ID of the country to retrieve\r\n   * @returns Observable of country data\r\n   */\r\n  getCountryById(countryId: string): Observable<countryListControllerResponse> {\r\n    const payload: Partial<MSyctrList> = {\r\n      syctr_id: countryId\r\n    };\r\n    return this.getAllCountries(payload);\r\n  }\r\n\r\n  /**\r\n   * Get countries by region\r\n   * @param region - Region code to filter countries\r\n   * @returns Observable of countries in the specified region\r\n   */\r\n  getCountriesByRegion(region: string): Observable<countryListControllerResponse> {\r\n    const payload: Partial<MSyctrList> = {\r\n      // Note: Replace with actual property name from MSyctrList interface\r\n      // syctr_region: region\r\n    } as any; // Temporary fix - update when MSyctrList interface is available\r\n    return this.getAllCountries(payload);\r\n  }\r\n}\r\n","import { Component, signal, OnInit, OnDestroy, inject, viewChild, TemplateRef, computed, effect } from '@angular/core';\nimport { ReactiveFormsModule, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { CideEleTabComponent, TabItem, CideEleButtonComponent, CideIconComponent } from 'cloud-ide-element';\nimport { CideEleFileManagerService, CideSelectComponent, CideFormFieldErrorComponent, CideEleDataGridComponent, GridConfiguration, GridColumn, TemplateContext } from 'cloud-ide-element';\nimport { CideInputComponent } from 'cloud-ide-element';\nimport { CideTextareaComponent, CideEleFileInputComponent } from 'cloud-ide-element';\nimport { SharedObjectIdService, IEducationBoardService, EDUCATION_BOARD_SERVICE_TOKEN, IEducationBoard } from 'cloud-ide-shared';\nimport {\n  pinCodeSelectControllerResponse, currencyListControllerResponse, ICoreSycr,\n  countryListControllerResponse, ICoreSyctr, ICoreSypin, selectSearchType, MPinCodeSelect,\n  MSyctrList, entityControllerResponse, CoreSystemEntityListResponse,\n  generateObjectFromString, generalMasterListControllerResponse, ICoreSygms,\n  authUserMstListControllerResponse, AuthUserCoreEntityMapping,\n  CoreSystemEntity,\n  CoreSystemEntitySaveUpdatePayload,\n  CoreEntityMapping,\n  entityByIdControllerResponse,\n  controllerResponse\n} from 'cloud-ide-lms-model';\nimport { Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\nimport { CideCoreEntityManagementService } from '../../services/entity-management.service';\nimport { CideCoreGeneralMasterService } from '../../../general-master-management';\nimport { CideCorePinCodeService } from '../../../shared/services/pin-code.service';\nimport { CideCoreCurrencyService } from '../../../shared/services/currency.service';\nimport { CideCoreCountryService } from '../../../shared/services/country.service';\nimport { CideCoreUserMasterService } from '../../../user-management';\nimport { AppStateHelperService, RightsService, CideLytRequestService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { NotificationService } from 'cloud-ide-element';\n\n\ninterface DropdownOption {\n  value: string;\n  label: string;\n}\n\n// Interface for pin code data structure with additional fields\ninterface PinCodeData extends ICoreSypin {\n  value?: string;\n  label?: string;\n}\n\n// Custom interface for user entity mapping with display name\ninterface UserEntityMappingWithDisplay extends AuthUserCoreEntityMapping {\n  _displayUserName?: string; // Custom property to store user name for display\n}\n\n@Component({\n  selector: 'cide-core-entity-create',\n  imports: [\n    ReactiveFormsModule,\n    CideLytSharedWrapperComponent,\n    CideInputComponent,\n    CideSelectComponent,\n    CideTextareaComponent,\n    CideEleFileInputComponent,\n    CideEleTabComponent,\n    CideEleButtonComponent,\n    CideIconComponent,\n    CideFormFieldErrorComponent,\n    CideEleDataGridComponent,\n  ],\n  templateUrl: './entity-create.component.html',\n  styleUrl: './entity-create.component.scss'\n})\nexport class CideCoreEntityCreateComponent implements OnInit, OnDestroy {\n  // Signal for breadcrumb data that will be passed to shared wrapper\n  breadcrumbData = signal<{ id: string; label: string; icon?: string; url?: string }[]>([]);\n\n  // Reactive form\n  entityForm: FormGroup;\n\n  // Generated entity ID - created during form initialization\n  generatedEntityId: string | null = null;\n\n  entityTypes = signal<DropdownOption[]>([]);\n  currencies = signal<DropdownOption[]>([]);\n  users = signal<DropdownOption[]>([]);\n  postalCodes = signal<DropdownOption[]>([]);\n  corporateCountries = signal<DropdownOption[]>([]);\n  registeredCountries = signal<DropdownOption[]>([]);\n\n  // Store the full pin code data for auto-population\n  private pinCodeDataMap = new Map<string, PinCodeData>();\n\n  // Store logo file for upload\n  private logoFile?: File;\n\n  loading = signal(false);\n  error = signal<string | null>(null);\n  success = signal<string | null>(null);\n\n  // Loading states for individual dropdowns\n  postalCodesLoading = signal(false);\n  usersLoading = signal(false);\n  registeredCountriesLoading = signal(false);\n  corporateCountriesLoading = signal(false);\n\n  // Entity mode and ID\n  isEditMode = signal(false);\n  entityId = signal<string | null>(null);\n\n  // Parent entity information\n  parentEntityId = signal<string | null>(null);\n  parentEntityName = signal<string | null>(null);\n  parentEntityLoading = signal(false);\n\n  // User Entity Mapping\n  userEntityMappings = signal<UserEntityMappingWithDisplay[]>([]);\n  userEntityMappingsLoading = signal(false);\n  availableUsers = signal<DropdownOption[]>([]);\n  availableUsersLoading = signal(false);\n\n  // User Entity Mapping Form\n  userMappingForm: FormGroup;\n\n  // Grid configuration for user entity mappings\n  userMappingsGridConfig: GridConfiguration<UserEntityMappingWithDisplay> = {\n    id: 'user-entity-mappings',\n    title: '', // Hide title\n    subtitle: '', // Hide subtitle\n    data: [],\n    trackBy: '_id',\n    responsive: true,\n    compact: true,\n    columns: [\n      {\n        key: 'syenm_id_user',\n        header: 'User',\n        type: 'custom',\n        width: 'lg',\n        sortable: true,\n        searchable: true,\n        renderer: 'userCell'\n      },\n      {\n        key: 'actions',\n        header: 'Actions',\n        type: 'custom',\n        width: 'sm',\n        align: 'center',\n        renderer: 'actionsCell'\n      }\n    ],\n    pagination: {\n      enabled: false, // Disable pagination\n      pageSize: 10,\n      pageSizeOptions: [5, 10, 20],\n      showQuickJump: false,\n      showPageInfo: false,\n      showRefresh: false\n    },\n    search: {\n      enabled: false, // Disable search functionality\n      placeholder: 'Search users...',\n      searchableColumns: ['userName'],\n      debounceMs: 300\n    },\n    loading: {\n      useDefer: false,\n      skeletonRows: 5,\n      showOverlay: true\n    },\n    scroll: {\n      enabled: true,\n      maxHeight: '400px',\n      stickyHeader: true\n    }\n  };\n\n  // Template renderers for user entity mappings grid\n  userCellRendererTemplate = viewChild<TemplateRef<TemplateContext<UserEntityMappingWithDisplay>>>('userCell');\n  actionsCellRendererTemplate = viewChild<TemplateRef<TemplateContext<UserEntityMappingWithDisplay>>>('actionsCell');\n\n  /**\n   * Get template renderers for user entity mappings grid\n   */\n  getUserMappingsTemplateRenderers() {\n    return {\n      userCell: this.userCellRendererTemplate(),\n      actionsCell: this.actionsCellRendererTemplate()\n    };\n  }\n\n  // Tab configuration\n  activeTab = signal('corporate');\n  entityTabs = signal<TabItem[]>([]);\n  /** When true, Registered Address tab shows the form; when false, shows a click-to-reveal placeholder. */\n  registeredTabContentVisible = signal(false);\n\n  // Modern dependency injection using inject() - Updated to use structured services\n  private entityService = inject(CideCoreEntityManagementService);\n  private CideCoreGeneralMasterService = inject(CideCoreGeneralMasterService);\n  private pinCodeService = inject(CideCorePinCodeService);\n  private userService = inject(CideCoreUserMasterService);\n  private currencyService = inject(CideCoreCurrencyService);\n  private countryService = inject(CideCoreCountryService);\n  private appState = inject(AppStateHelperService);\n  private notificationService = inject(NotificationService);\n  private fb = inject(FormBuilder);\n  private route = inject(ActivatedRoute);\n  private router = inject(Router);\n  private fileManagerService = inject(CideEleFileManagerService);\n  private sharedObjectIdService = inject(SharedObjectIdService);\n  private rightsService = inject(RightsService);\n  private requestService = inject(CideLytRequestService);\n  private educationBoardService = inject<IEducationBoardService>(EDUCATION_BOARD_SERVICE_TOKEN);\n\n  /** Refetch general-master dropdowns when general master list is invalidated elsewhere. */\n  private readonly generalMasterInvalidationEffect = effect(() => {\n    const count = this.CideCoreGeneralMasterService.listInvalidated();\n    if (count > 0) {\n      this.loadDropdowns();\n      this.loadBoardAffiliationStatuses();\n      this.loadBoardAffiliationLevels();\n    }\n  });\n\n  private destroy$ = new Subject<void>();\n\n  // Board Mapping\n  boardAffiliations = signal<any[]>([]);\n  boardAffiliationsLoading = signal(false);\n  educationBoards = signal<DropdownOption[]>([]);\n  educationBoardsLoading = signal(false);\n  boardAffiliationStatuses = signal<DropdownOption[]>([]);\n  boardAffiliationStatusesLoading = signal(false);\n  boardAffiliationLevels = signal<DropdownOption[]>([]);\n  boardAffiliationLevelsLoading = signal(false);\n  boardMappingForm: FormGroup;\n\n  // Grid config for board affiliations\n  boardAffiliationsGridConfig: GridConfiguration<any> = {\n    id: 'board-affiliations',\n    title: '',\n    subtitle: '',\n    data: [],\n    trackBy: '_id',\n    responsive: true,\n    compact: true,\n    columns: [\n      { key: 'board_name', header: 'Board Name', type: 'text', width: '350px', sortable: true },\n      { key: 'scbaf_affiliation_number', header: 'Affiliation No.', type: 'text', width: 'md' },\n      { key: 'levels', header: 'Level', type: 'text', width: 'md' },\n      { key: 'status', header: 'Status', type: 'text', width: 'sm' },\n      { key: 'actions', header: 'Actions', type: 'custom', width: 'sm', align: 'center', renderer: 'boardActionsCell' }\n    ],\n    pagination: { enabled: false, pageSize: 10, pageSizeOptions: [5, 10, 20], showQuickJump: false, showPageInfo: false, showRefresh: false },\n    search: { enabled: false, placeholder: 'Search...', searchableColumns: ['board_name'], debounceMs: 300 },\n    loading: { useDefer: false, skeletonRows: 3, showOverlay: true },\n    scroll: { enabled: true, maxHeight: '400px', stickyHeader: true }\n  };\n\n  // renderers for board grid\n  boardActionsCellRendererTemplate = viewChild<TemplateRef<TemplateContext<any>>>('boardActionsCell');\n\n  getBoardMappingsTemplateRenderers() {\n    return {\n      boardActionsCell: this.boardActionsCellRendererTemplate()\n    };\n  }\n  private globalErrorHandler?: (event: ErrorEvent) => void;\n  private globalRejectionHandler?: (event: PromiseRejectionEvent) => void;\n\n  // Search subjects for debouncing\n  private postalCodeSearchSubject = new Subject<selectSearchType>();\n  private userSearchSubject = new Subject<selectSearchType>();\n  private corporateCountrySearchSubject = new Subject<selectSearchType>();\n  private registeredCountrySearchSubject = new Subject<selectSearchType>();\n\n  constructor() {\n    this.entityForm = this.fb.group({\n      // Basic Information\n      syen_name: [''],\n      syen_entity_code: [''],\n      syen_entity_type_sygms: [''],\n      syen_id_syen: [''], // Parent entity ID for child entities\n      syen_udise_no: [''],\n      syen_affiliation_no: [''],\n      syen_isactive: [true],\n\n      // Corporate Address\n      syen_corporate_address: [''],\n      syen_corporate_city_sypin: [''],\n      syen_corporate_state_sypin: [''],\n      syen_corporate_country_syctr: [''],\n      syen_corporate_pin_sypin: [''],\n\n      // Contact Information\n      syen_corporate_contact_person_user: [''],\n      syen_corporate_phone: [''],\n      syen_corporate_phone_alt: [''],\n      syen_corporate_fax: [''],\n      syen_corporate_email: [''],\n      syen_corporate_email_alt: [''],\n      syen_website: [''],\n      syen_currency_sycr: [''],\n\n      // Registered Address\n      syen_registered_address: [''],\n      syen_registered_city_sypin: [''],\n      syen_registered_state_sypin: [''],\n      syen_registered_country_syctr: [''],\n      syen_registered_pin_sypin: [''],\n      syen_registered_contact_person_user: [''],\n      syen_registered_phone: [''],\n      syen_registered_email: [''],\n      syen_photo_id_cyfm: [''],\n\n      // Entity Image\n      syen_entity_image: ['']\n    });\n\n    // Listen for postal code changes to auto-populate address fields\n    this.setupPostalCodeListeners();\n\n    // Listen for country changes to auto-populate address fields\n    this.setupCountryListeners();\n\n    // Setup debounced search subscriptions\n    this.setupDebouncedSearch();\n\n    // Initialize user mapping form\n    this.userMappingForm = this.fb.group({\n      syenm_id_user: ['', Validators.required]\n    });\n\n    // Initialize board mapping form\n    this.boardMappingForm = this.fb.group({\n      scbaf_board_id_edbrd: ['', Validators.required],\n      scbaf_affiliation_number: ['', Validators.required],\n      scbaf_affiliation_status_sygms: ['', Validators.required],\n      scbaf_affiliation_level_multi_sygms: [[]],\n      scbaf_isprimary: [false],\n      scbaf_isactive: [true]\n    });\n  }\n\n  ngOnInit() {\n    // Initialize rights for entity management\n    this.rightsService.initializeRights('core_entity_form');\n    // Add global error handler to catch any unhandled errors\n    const errorHandler = (event: ErrorEvent) => {\n      console.error('💥 GLOBAL ERROR:', event.error);\n    };\n\n    const rejectionHandler = (event: PromiseRejectionEvent) => {\n      console.error('💥 UNHANDLED PROMISE REJECTION:', event.reason);\n    };\n\n    window.addEventListener('error', errorHandler);\n    window.addEventListener('unhandledrejection', rejectionHandler);\n\n    // Store handlers for cleanup\n    this.globalErrorHandler = errorHandler;\n    this.globalRejectionHandler = rejectionHandler;\n\n    // Generate entity ID during form initialization\n    this.generateEntityId();\n\n    // Initialize dropdown options\n    // this.initializeDropdownOptions(); // Removed - using shared wrapper breadcrumb system\n\n    // Check for entity ID in query parameters\n    this.checkForEntityId();\n\n    this.loadDropdowns();\n\n    // Initialize tabs based on mode\n    this.initializeTabs();\n  }\n\n  ngOnDestroy(): void {\n    // Clean up global event listeners\n    if (this.globalErrorHandler) {\n      window.removeEventListener('error', this.globalErrorHandler);\n    }\n    if (this.globalRejectionHandler) {\n      window.removeEventListener('unhandledrejection', this.globalRejectionHandler);\n    }\n\n\n    // Clean up breadcrumb timeout\n    // if (this.breadcrumbTimeout()) {\n    //   clearTimeout(this.breadcrumbTimeout()!);\n    // } // Removed - using shared wrapper breadcrumb system\n\n    // Clean up search subjects\n    this.postalCodeSearchSubject.complete();\n    this.userSearchSubject.complete();\n    this.corporateCountrySearchSubject.complete();\n    this.registeredCountrySearchSubject.complete();\n\n    // Clean up RxJS subscriptions\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n\n  // Board Mapping Methods\n\n  loadEducationBoards() {\n    this.educationBoardsLoading.set(true);\n    // Use existing search logic or fetch all\n    this.educationBoardService.getEducationBoardList({}).subscribe({\n      next: (response: any) => {\n        if (response?.success && response?.data) {\n          this.educationBoards.set(response.data.map((board: IEducationBoard) => ({\n            label: board.edbrd_name || board.edbrd_name_en || 'Unknown Board',\n            value: board._id || '',\n            data: board\n          })));\n        } else {\n          this.educationBoards.set([]);\n        }\n        this.educationBoardsLoading.set(false);\n      },\n      error: (err: any) => {\n        console.error('Error loading education boards:', err);\n        this.educationBoards.set([]);\n        this.educationBoardsLoading.set(false);\n      }\n    });\n  }\n\n  loadBoardAffiliationStatuses() {\n    this.boardAffiliationStatusesLoading.set(true);\n    this.CideCoreGeneralMasterService.getMasterList({ sygmt_code: 'board_affiliation_status' }).subscribe({\n      next: (response: generalMasterListControllerResponse) => {\n        if (response?.success && response?.data) {\n          this.boardAffiliationStatuses.set(response.data.map((status: ICoreSygms) => ({\n            label: status.sygms_title || 'Unknown Status',\n            value: status._id || ''\n          })));\n        } else {\n          this.boardAffiliationStatuses.set([]);\n        }\n        this.boardAffiliationStatusesLoading.set(false);\n      },\n      error: (err: any) => {\n        console.error('Error loading board affiliation statuses:', err);\n        this.boardAffiliationStatuses.set([]);\n        this.boardAffiliationStatusesLoading.set(false);\n      }\n    });\n  }\n\n  loadBoardAffiliationLevels() {\n    this.boardAffiliationLevelsLoading.set(true);\n    this.CideCoreGeneralMasterService.getMasterList({ sygmt_code: 'program_category_level' }).subscribe({\n      next: (response: generalMasterListControllerResponse) => {\n        if (response?.success && response?.data) {\n          this.boardAffiliationLevels.set(response.data.map((level: ICoreSygms) => ({\n            label: level.sygms_title || 'Unknown Level',\n            value: level._id || ''\n          })));\n        } else {\n          this.boardAffiliationLevels.set([]);\n        }\n        this.boardAffiliationLevelsLoading.set(false);\n      },\n      error: (err: any) => {\n        console.error('Error loading board affiliation levels:', err);\n        this.boardAffiliationLevels.set([]);\n        this.boardAffiliationLevelsLoading.set(false);\n      }\n    });\n  }\n\n  loadBoardAffiliations() {\n    const entityId = this.entityId();\n    if (!entityId) return;\n\n    this.boardAffiliationsLoading.set(true);\n    this.entityService.getSchoolBoardAffiliations(entityId).subscribe({\n      next: (response) => {\n        if (response?.success && response?.data) {\n          const mappings = Array.isArray(response.data) ? response.data : [response.data];\n          // Map response to grid friendly format if needed, or just set it\n          // We might need to enrich this data with board names if not present, but let's assume populate does it or we look up\n          // Actually the backend returns CoreSchoolBoardAffiliation objects. We might need to populate board name.\n          // The schema has `ref` so I assume population might be needed on backend or we Map it here.\n          // For now, let's just set data.\n          this.boardAffiliations.set(mappings);\n          this.boardAffiliationsGridConfig = {\n            ...this.boardAffiliationsGridConfig,\n            data: mappings\n          };\n        } else {\n          this.boardAffiliations.set([]);\n          this.boardAffiliationsGridConfig = {\n            ...this.boardAffiliationsGridConfig,\n            data: []\n          };\n        }\n        this.boardAffiliationsLoading.set(false);\n      },\n      error: (err) => {\n        console.error('Error loading board affiliations:', err);\n        this.boardAffiliations.set([]);\n        this.boardAffiliationsLoading.set(false);\n      }\n    });\n  }\n\n  addBoardAffiliation() {\n    if (this.boardMappingForm.valid) {\n      const payload = this.boardMappingForm.value;\n      const entityId = this.entityId();\n      if (!entityId) {\n        this.notificationService.error('Entity ID is missing');\n        return;\n      }\n\n      payload.scbaf_entity_id_syen = entityId;\n\n      this.entityService.saveSchoolBoardAffiliation(payload).subscribe({\n        next: (response) => {\n          if (response?.success) {\n            this.notificationService.success('Board affiliation saved successfully');\n            this.loadBoardAffiliations(); // Refresh list\n            this.boardMappingForm.reset({\n              scbaf_isactive: true,\n              scbaf_isprimary: false,\n              scbaf_affiliation_level_multi_sygms: []\n            });\n          } else {\n            this.notificationService.error(response?.message || 'Failed to save affiliation');\n          }\n        },\n        error: (err) => {\n          console.error('Error saving affiliation:', err);\n          this.notificationService.error('Error saving affiliation');\n        }\n      });\n    } else {\n      this.boardMappingForm.markAllAsTouched();\n      this.notificationService.error('Please fill all required fields');\n    }\n  }\n\n  // Check for entity ID and parent entity ID in query parameters\n  private checkForEntityId() {\n    this.route.params.pipe(takeUntil(this.destroy$)).subscribe(params => {\n      // Check for entityId, id, or entity parameter\n      const queryParams = params['query'];\n      const queryData = generateObjectFromString(queryParams);\n\n      // If entityId is an object string (from generateStringFromObject), try to parse it\n      const entityId = queryData.syen_id;\n      const parentEntityId = queryData.syen_parent_entity_id;\n\n      if (entityId) {\n        this.entityId.set(entityId);\n        this.isEditMode.set(true);\n        this.loadEntityData(entityId);\n        // Load board affiliations in edit mode\n        this.loadBoardAffiliations();\n      } else {\n        this.isEditMode.set(false);\n        this.entityId.set(null);\n      }\n\n      // Reinitialize tabs when mode changes\n      this.initializeTabs();\n\n      // Load boards and statuses for dropdown\n      this.loadEducationBoards();\n      this.loadBoardAffiliationStatuses();\n      this.loadBoardAffiliationLevels();\n\n      // Check for parent entity ID\n      if (parentEntityId) {\n        this.parentEntityId.set(parentEntityId);\n        this.loadParentEntityData(parentEntityId);\n      } else {\n        this.parentEntityId.set(null);\n        this.parentEntityName.set(null);\n        // Build default breadcrumb when no parent entity\n        this.buildDefaultBreadcrumbItems();\n      }\n    });\n  }\n\n  // Load entity data for editing\n  private loadEntityData(entityId: string) {\n    this.loading.set(true);\n    this.error.set(null);\n\n\n    this.entityService.getEntityById(entityId).pipe(\n      takeUntil(this.destroy$)\n    ).subscribe({\n      next: (response: entityByIdControllerResponse) => {\n\n        if (response?.success && response?.data) {\n          // Handle both array and single object responses\n          const entityData = response.data;\n          if (entityData) {\n            this.populateFormWithEntityData(entityData);\n            this.success.set('Entity data loaded successfully');\n\n            // Update breadcrumb for edit mode\n            this.updateBreadcrumbForEditMode(entityData);\n          } else {\n            this.error.set('Entity data not found');\n          }\n        } else {\n          this.error.set('Failed to load entity data');\n        }\n        this.loading.set(false);\n      },\n      error: (err) => {\n\n        let errorMessage = 'Failed to load entity data.';\n\n        if (err?.error?.message) {\n          errorMessage = err.error.message;\n        } else if (err?.message) {\n          errorMessage = err.message;\n        } else if (err?.status === 404) {\n          errorMessage = 'Entity not found.';\n        } else if (err?.status === 500) {\n          errorMessage = 'Server error. Please try again later.';\n        }\n\n        this.error.set(errorMessage);\n        this.loading.set(false);\n      }\n    });\n  }\n\n  // Update breadcrumb for edit mode with entity name\n  private updateBreadcrumbForEditMode(entityData: any) {\n    const additionalItems = [\n      {\n        id: entityData._id || 'entity',\n        label: entityData.syen_name || 'Entity',\n        icon: 'account_tree',\n        url: undefined\n      },\n      {\n        id: 'edit',\n        label: 'Edit',\n        icon: 'edit',\n        url: undefined\n      }\n    ];\n\n    console.log('🍞 Setting edit mode breadcrumb data:', additionalItems);\n    this.breadcrumbData.set(additionalItems);\n  }\n\n  // Update breadcrumb with current form data (useful when entity name changes)\n  updateBreadcrumbWithFormData() {\n    if (this.isEditMode()) {\n      const entityName = this.entityForm.get('syen_name')?.value || 'Entity';\n      const additionalItems = [\n        {\n          id: this.entityId() || 'entity',\n          label: entityName,\n          icon: 'account_tree',\n          url: undefined\n        },\n        {\n          id: 'edit',\n          label: 'Edit',\n          icon: 'edit',\n          url: undefined\n        }\n      ];\n\n      this.breadcrumbData.set(additionalItems);\n    }\n  }\n\n  // Load parent entity data to display parent entity name and build hierarchy\n  private loadParentEntityData(parentEntityId: string) {\n    this.parentEntityLoading.set(true);\n\n    // Set a timeout to handle slow API responses\n    const apiTimeout = setTimeout(() => {\n      this.parentEntityLoading.set(false);\n    }, 5000); // Hide loading after 5 seconds\n\n    this.entityService.getEntityById(parentEntityId).pipe(\n      takeUntil(this.destroy$)\n    ).subscribe({\n      next: (response: entityByIdControllerResponse) => {\n        clearTimeout(apiTimeout); // Clear timeout on success\n\n        if (response?.success && response?.data) {\n          // Handle both array and single object responses\n          const parentEntityData = Array.isArray(response.data) ? response.data[0] : response.data;\n          if (parentEntityData) {\n            this.parentEntityName.set(parentEntityData.syen_name || 'Parent Entity');\n\n            // Set parent entity ID in the form for child entity creation\n            this.entityForm.patchValue({\n              syen_id_syen: parentEntityId\n            });\n\n            // Build breadcrumb items immediately with parent entity name\n            this.buildBreadcrumbItems(parentEntityData);\n          } else {\n            this.parentEntityName.set('Parent Entity');\n            this.buildDefaultBreadcrumbItems();\n          }\n        } else {\n          this.parentEntityName.set('Parent Entity');\n          this.buildDefaultBreadcrumbItems();\n        }\n        this.parentEntityLoading.set(false);\n      },\n      error: (err) => {\n        clearTimeout(apiTimeout); // Clear timeout on error\n        console.error('Error loading parent entity data:', err);\n        this.parentEntityName.set('Parent Entity');\n        this.buildDefaultBreadcrumbItems();\n        this.parentEntityLoading.set(false);\n      }\n    });\n  }\n\n  // Build breadcrumb items from parent entity data\n  private buildBreadcrumbItems(entityData: any) {\n    const additionalItems = [\n      {\n        id: entityData._id || 'parent-entity',\n        label: entityData.syen_name || 'Parent Entity',\n        icon: 'account_tree',\n        url: undefined\n      },\n      {\n        id: this.isEditMode() ? 'edit' : 'create',\n        label: this.isEditMode() ? 'Edit' : 'Create',\n        icon: this.isEditMode() ? 'edit' : 'add',\n        url: undefined\n      }\n    ];\n\n    console.log('🍞 Setting breadcrumb data:', additionalItems);\n    this.breadcrumbData.set(additionalItems);\n    this.parentEntityLoading.set(false);\n  }\n\n  // Build default breadcrumb when no parent entity is available\n  private buildDefaultBreadcrumbItems() {\n    const additionalItems = [\n      {\n        id: this.isEditMode() ? 'edit' : 'create',\n        label: this.isEditMode() ? 'Edit' : 'Create',\n        icon: this.isEditMode() ? 'edit' : 'add',\n        url: undefined\n      }\n    ];\n\n    console.log('🍞 Setting default breadcrumb data:', additionalItems);\n    this.breadcrumbData.set(additionalItems);\n  }\n\n  // Initialize tabs based on create/edit mode\n  private initializeTabs() {\n    const baseTabs: TabItem[] = [\n      { id: 'corporate', label: 'Corporate Address', icon: 'business' },\n      { id: 'contact', label: 'Contact Information', icon: 'contact_phone' },\n      { id: 'registered', label: 'Registered Address', icon: 'location_on' }\n    ];\n\n    // Only add User Entity Mapping tab for create mode\n    if (!this.isEditMode()) {\n      baseTabs.push({ id: 'user-mapping', label: 'User Entity Mapping', icon: 'people' });\n    } else {\n      // Add Board Mapping in Edit Mode\n      baseTabs.push({ id: 'board-mapping', label: 'Board Mapping', icon: 'school' });\n    }\n\n    this.entityTabs.set(baseTabs);\n  }\n\n  // Grid action handlers - removed, using templates instead\n\n  // User Entity Mapping Methods\n  loadUserEntityMappings() {\n    if (!this.parentEntityId()) {\n      console.log('No parent entity ID available for user mapping');\n      return;\n    }\n\n    this.userEntityMappingsLoading.set(true);\n\n    // TODO: Replace with actual API call to get user entity mappings\n    // For now, using empty array (no dummy data)\n    setTimeout(() => {\n      // No test data - empty array\n      this.userEntityMappings.set([]);\n\n      // Update grid config data - create new reference to trigger change detection\n      this.userMappingsGridConfig = {\n        ...this.userMappingsGridConfig,\n        data: []\n      };\n\n      this.userEntityMappingsLoading.set(false);\n    }, 1000);\n  }\n\n  loadAvailableUsers() {\n    this.availableUsersLoading.set(true);\n\n    // Use the actual user master listing API - load all users since we're creating entity mappings\n    this.userService.getUserList({ syenm_entity_id_syen: this.appState.getActiveEntityId() }).subscribe({\n      next: (response) => {\n        try {\n          const users = this.transformUserToDropdown(response);\n          console.log('Loaded users:', users);\n          this.availableUsers.set(users);\n        } catch (error) {\n          console.error('Error transforming user data:', error);\n          this.availableUsers.set([]);\n        }\n        this.availableUsersLoading.set(false);\n      },\n      error: (err) => {\n        console.error('Error loading available users:', err);\n        this.availableUsers.set([]);\n        this.availableUsersLoading.set(false);\n      }\n    });\n  }\n\n  /**\n   * Generate entity ID during form initialization\n   * This ID will be used for the entity and its mappings\n   */\n  private generateEntityId(): void {\n    this.sharedObjectIdService.generateObjectId().subscribe({\n      next: (response) => {\n        if (response?.success && response?.data?.objectId) {\n          this.generatedEntityId = response.data.objectId;\n          console.log('🆔 [EntityCreate] Generated entity ID during initialization:', this.generatedEntityId);\n        } else {\n          console.error('❌ [EntityCreate] Failed to generate entity ID');\n        }\n      },\n      error: (error) => {\n        console.error('❌ [EntityCreate] Error generating entity ID:', error);\n      }\n    });\n  }\n\n  addUserMapping() {\n    if (this.userMappingForm.valid) {\n      const formValue = this.userMappingForm.value;\n\n      // Check if entity ID is available\n      if (!this.generatedEntityId) {\n        console.error('❌ [EntityCreate] Entity ID not generated yet');\n        this.notificationService.error('Entity ID not ready. Please try again.');\n        return;\n      }\n\n      // Generate mapping ID using shared service\n      this.sharedObjectIdService.generateObjectId().subscribe({\n        next: (mappingResponse) => {\n          if (mappingResponse?.success && mappingResponse?.data?.objectId) {\n            const generatedMappingId = mappingResponse.data.objectId;\n\n            // Check if user is already mapped to any entity\n            const existingMapping = this.userEntityMappings().find(m =>\n              m.syenm_id_user === formValue.syenm_id_user\n            );\n            if (existingMapping) {\n              this.notificationService.error('This user is already mapped to an entity');\n              return;\n            }\n\n            // Find user details from available users\n            const selectedUser = this.availableUsers().find(u => u.value === formValue.syenm_id_user);\n            if (!selectedUser) {\n              this.notificationService.error('Selected user not found');\n              return;\n            }\n\n            const newMapping: UserEntityMappingWithDisplay = {\n              _id: generatedMappingId, // Use generated mapping ID\n              syenm_id_user: formValue.syenm_id_user, // Store user ID as string\n              _displayUserName: selectedUser.label, // Store user name for display\n              syenm_id_logses: '',\n              syenm_entity_id_syen: this.generatedEntityId as any, // Use pre-generated entity ID\n              syenm_role_id_syusrol: undefined, // Set to undefined as requested\n              syenm_designation_id_sydsg: undefined, // Set to undefined as requested\n              syenm_department_id_sydept: undefined, // Set to undefined as requested\n              syenm_activefrom: new Date().toISOString().split('T')[0], // Default to today\n              syenm_activeupto: '', // Default to empty\n              syenm_isdefault: false, // Always false\n              syenm_isactive: true, // Always active\n              syenm_isloggedin: false // Always false\n            };\n\n            console.log('🍞 Selected user:', newMapping);\n\n            // Add to existing mappings\n            const currentMappings = this.userEntityMappings();\n            const updatedMappings = [...currentMappings, newMapping];\n\n            // Update signal first\n            this.userEntityMappings.set(updatedMappings);\n\n            // Update grid config data - create new reference to trigger change detection\n            this.userMappingsGridConfig = {\n              ...this.userMappingsGridConfig,\n              data: updatedMappings\n            };\n\n            // Reset form\n            this.userMappingForm.reset({\n              syenm_id_user: ''\n            });\n\n            this.notificationService.success('User mapping added successfully');\n\n            console.log('✅ [EntityCreate] User mapped successfully:', {\n              userId: formValue.syenm_id_user,\n              entityId: this.generatedEntityId,\n              mappingId: generatedMappingId\n            });\n          } else {\n            this.notificationService.error('Failed to generate mapping ID');\n          }\n        },\n        error: (err) => {\n          console.error('Error generating mapping ID:', err);\n          this.notificationService.error('Failed to generate mapping ID');\n        }\n      });\n    } else {\n      this.notificationService.error('Please fill in all required fields');\n    }\n  }\n\n  removeUserMapping(mappingId: string) {\n    const currentMappings = this.userEntityMappings();\n    const updatedMappings = currentMappings.filter(m => m._id !== mappingId);\n\n    // Update signal first\n    this.userEntityMappings.set(updatedMappings);\n\n    // Update grid config data - create new reference to trigger change detection\n    this.userMappingsGridConfig = {\n      ...this.userMappingsGridConfig,\n      data: updatedMappings\n    };\n\n    this.notificationService.success('User mapping removed successfully');\n  }\n\n  updateUserMapping(mappingId: string, updates: Partial<AuthUserCoreEntityMapping>) {\n    const currentMappings = this.userEntityMappings();\n    const updatedMappings = currentMappings.map(m =>\n      m._id === mappingId ? { ...m, ...updates } : m\n    );\n\n    // Update signal first\n    this.userEntityMappings.set(updatedMappings);\n\n    // Update grid config data - create new reference to trigger change detection\n    this.userMappingsGridConfig = {\n      ...this.userMappingsGridConfig,\n      data: updatedMappings\n    };\n\n    this.notificationService.success('User mapping updated successfully');\n  }\n\n  // Populate form with entity data\n  private populateFormWithEntityData(entityData: CoreSystemEntity) {\n    try {\n\n      // Map the entity data to form controls - only use properties that exist in CoreSystemEntityListResponse\n      const formData = {\n        // Basic Information\n        syen_name: entityData.syen_name || '',\n        syen_entity_code: entityData.syen_entity_code || '',\n        syen_entity_type_sygms: entityData.syen_entity_type_sygms || '',\n        syen_id_syen: entityData.syen_id_syen || '', // Parent entity ID for child entities\n        syen_isactive: entityData.syen_isactive !== undefined ? entityData.syen_isactive : true,\n\n        // Contact Information (only properties that exist in CoreSystemEntityListResponse)\n        syen_corporate_contact_person_user: entityData.syen_corporate_contact_person_user || '',\n        syen_corporate_phone: entityData.syen_corporate_phone || '',\n        syen_corporate_email: entityData.syen_corporate_email || '',\n\n        // Set default values for other fields since they're not in CoreSystemEntityListResponse\n        syen_udise_no: entityData.syen_udise_no || '',\n        syen_affiliation_no: entityData.syen_affiliation_no || '',\n        syen_corporate_address: entityData.syen_corporate_address || '',\n        syen_corporate_city_sypin: entityData.syen_corporate_city_sypin || '',\n        syen_corporate_state_sypin: entityData.syen_corporate_state_sypin || '',\n        syen_corporate_country_syctr: entityData.syen_corporate_country_syctr || '',\n        syen_corporate_pin_sypin: entityData.syen_corporate_pin_sypin || '',\n        syen_corporate_phone_alt: entityData.syen_corporate_phone_alt || '',\n        syen_corporate_fax: entityData.syen_corporate_fax || '',\n        syen_corporate_email_alt: entityData.syen_corporate_email_alt || '',\n        syen_website: entityData.syen_website || '',\n        syen_currency_sycr: entityData.syen_currency_sycr || '',\n        syen_registered_address: entityData.syen_registered_address || '',\n        syen_registered_city_sypin: entityData.syen_registered_city_sypin || '',\n        syen_registered_state_sypin: entityData.syen_registered_state_sypin || '',\n        syen_registered_country_syctr: entityData.syen_registered_country_syctr || '',\n        syen_registered_pin_sypin: entityData.syen_registered_pin_sypin || '',\n        syen_registered_contact_person_user: entityData.syen_registered_contact_person_user || '',\n        syen_registered_phone: entityData.syen_registered_phone || '',\n        syen_registered_email: entityData.syen_registered_email || '',\n        syen_registered_fax: entityData.syen_registered_fax || '',\n        syen_photo_id_cyfm: entityData.syen_photo_id_cyfm || ''\n      };\n\n      // Patch the form with the entity data\n      this.entityForm.patchValue(formData, { emitEvent: false });\n\n    } catch (error) {\n      this.error.set('Error loading entity data into form');\n    }\n  }\n\n  // Setup listeners for postal code changes\n  private setupPostalCodeListeners() {\n    // Corporate postal code listener\n    this.entityForm.get('syen_corporate_pin_sypin')?.valueChanges.pipe(\n      debounceTime(300),\n      distinctUntilChanged(),\n      takeUntil(this.destroy$)\n    ).subscribe(pinCodeId => {\n      if (pinCodeId) {\n        this.populateAddressFromPinCode(pinCodeId, 'corporate');\n      }\n    });\n\n    // Registered postal code listener\n    this.entityForm.get('syen_registered_pin_sypin')?.valueChanges.pipe(\n      debounceTime(300),\n      distinctUntilChanged(),\n      takeUntil(this.destroy$)\n    ).subscribe(pinCodeId => {\n      if (pinCodeId) {\n        this.populateAddressFromPinCode(pinCodeId, 'registered');\n      }\n    });\n  }\n\n  // Setup listeners for country changes\n  private setupCountryListeners() {\n    // Corporate country listener\n    this.entityForm.get('syen_corporate_country_syctr')?.valueChanges.pipe(\n      debounceTime(300),\n      distinctUntilChanged(),\n      takeUntil(this.destroy$)\n    ).subscribe(countryId => {\n      if (countryId) {\n        this.loadCountryUsingExistingSearch(countryId, 'corporate');\n      }\n    });\n\n    // Registered country listener\n    this.entityForm.get('syen_registered_country_syctr')?.valueChanges.pipe(\n      debounceTime(300),\n      distinctUntilChanged(),\n      takeUntil(this.destroy$)\n    ).subscribe(countryId => {\n      if (countryId) {\n        this.loadCountryUsingExistingSearch(countryId, 'registered');\n      }\n    });\n  }\n\n  // Auto-populate address fields based on selected postal code\n  private populateAddressFromPinCode(pinCodeId: string, addressType: 'corporate' | 'registered') {\n    const pinCodeData = this.pinCodeDataMap.get(pinCodeId);\n    if (!pinCodeData) {\n      return;\n    }\n\n    const prefix = addressType === 'corporate' ? 'syen_corporate' : 'syen_registered';\n    const countryId = pinCodeData.sypin_country_id_syctr;\n\n    // Populate city, state, and country fields\n    this.entityForm.patchValue({\n      [`${prefix}_city_sypin`]: pinCodeData.sypin_district || '',\n      [`${prefix}_state_sypin`]: pinCodeData.sypin_state_name || '',\n      [`${prefix}_country_syctr`]: countryId || ''\n    }, { emitEvent: false });\n\n    // Load country data using existing search methods if countryId exists\n    if (countryId) {\n      this.loadCountryUsingExistingSearch(countryId, addressType);\n    }\n\n    this.entityForm.patchValue({\n      [`${prefix}_city`]: pinCodeData.sypin_district,\n      [`${prefix}_state`]: pinCodeData.sypin_state_name,\n      [`${prefix}_country_syctr`]: countryId\n    });\n  }\n\n  loadDropdowns() {\n    try {\n\n      // Load entity types via general master service\n      this.CideCoreGeneralMasterService.getMasterList({ sygmt_code: 'core_entity_type', sygms_entity_id_syen: this.appState.getActiveEntityId() }).subscribe({\n        next: (response) => {\n          try {\n            const types = this.transformGeneralMasterToDropdown(response);\n            this.entityTypes.set(types);\n          } catch (error) {\n            this.entityTypes.set([]);\n          }\n        },\n        error: (err) => {\n          this.entityTypes.set([]);\n        }\n      });\n\n      // Load currencies via currency service\n      this.currencyService.getAllCurrencies({}).subscribe({\n        next: (response) => {\n          try {\n            const currencies = this.transformCurrencyToDropdown(response);\n            this.currencies.set(currencies);\n          } catch (error) {\n            this.currencies.set([]);\n          }\n        },\n        error: (err) => {\n          this.currencies.set([]);\n        }\n      });\n\n      // Load users via user service\n      const activeEntityId = this.appState.getActiveEntityId();\n      if (activeEntityId) {\n        this.userService.getUserList({ syenm_entity_id_syen: activeEntityId }).subscribe({\n          next: (response) => {\n            try {\n              const users = this.transformUserToDropdown(response);\n              this.users.set(users);\n            } catch (error) {\n              this.users.set([]);\n            }\n          },\n          error: (err) => {\n            this.users.set([]);\n          }\n        });\n      } else {\n        this.users.set([]);\n      }\n\n      // Initialize postal codes as empty - will be loaded via search\n      this.postalCodes.set([]);\n\n\n      // \n      this.countryService.getAllCountries({}).subscribe({\n        next: (response) => {\n          try {\n            const countries = this.transformCountryToDropdown(response);\n            this.corporateCountries.set(countries);\n            this.registeredCountries.set(countries);\n          } catch (error) {\n            this.corporateCountries.set([]);\n            this.registeredCountries.set([]);\n          }\n        },\n        error: (err) => {\n          this.corporateCountries.set([]);\n          this.registeredCountries.set([]);\n        }\n      });\n    } catch (error) {\n      console.error('💥 LOADDROPDOWNS EXCEPTION:', error);\n    }\n  }\n\n  // Helper method to transform general master response to dropdown options\n  private transformGeneralMasterToDropdown(response: generalMasterListControllerResponse): DropdownOption[] {\n    if (!response?.success || !response?.data) {\n      return [];\n    }\n\n    let dataArray: ICoreSygms[] = [];\n\n    // Handle different response structures - all general master data is in core_general_master\n    if (Array.isArray(response.data)) {\n      dataArray = response.data;\n    }\n\n    return dataArray.map((item: ICoreSygms, index: number) => {\n      return {\n        // API response already includes value and label fields\n        value: (item as { value?: string }).value || item._id || `value_${index}`,\n        label: (item as { label?: string }).label || item.sygms_title || 'Untitled'\n      };\n    });\n  }\n\n  // Helper method to transform currency response to dropdown options\n  private transformCurrencyToDropdown(response: currencyListControllerResponse): DropdownOption[] {\n    if (!response?.success || !response?.data) {\n      return [];\n    }\n\n    // Handle different response structures\n    let dataArray: ICoreSycr[] = [];\n\n    if (Array.isArray(response.data)) {\n      dataArray = response.data;\n    }\n\n    return dataArray.map((item: ICoreSycr) => {\n      return {\n        value: item._id,\n        label: `${item.sycr_code} - ${item.sycr_name} (${item.sycr_symbol})`\n      };\n    });\n  }\n\n  // Helper method to transform user response to dropdown options\n  private transformUserToDropdown(response: authUserMstListControllerResponse): DropdownOption[] {\n    if (!response?.success || !response?.data) {\n      return [];\n    }\n\n    let dataArray: any[] = [];\n\n    // Handle different response structures\n    if (Array.isArray(response.data)) {\n      dataArray = response.data;\n    } else if (response.data && typeof response.data === 'object') {\n      // If data is an object, try to extract the array\n      dataArray = (response.data as any).data || (response.data as any).users || [];\n    }\n\n    return dataArray.map((item: any) => {\n      return {\n        value: item._id || \"\",\n        label: item?.user_fullname || `${item?.user_firstname || ''} ${item?.user_lastname || ''}`.trim() || \"\"\n      };\n    });\n  }\n\n  // Helper method to transform pin code response to dropdown options\n  private transformPinCodeToDropdown(response: pinCodeSelectControllerResponse): DropdownOption[] {\n    if (!response?.success || !response?.data) {\n      return [];\n    }\n    let dataArray: PinCodeData[] = [];\n\n    // Handle different response structures\n    if ('core_pin_code' in response.data && response.data.core_pin_code) {\n      dataArray = response.data.core_pin_code;\n    }\n\n    // Clear the data map and rebuild it\n    this.pinCodeDataMap.clear();\n\n    return dataArray.map((item: PinCodeData) => {\n      const pinCodeId = String(item._id);\n      // Store the full pin code data for auto-population\n      this.pinCodeDataMap.set(pinCodeId, item);\n\n      // API response already includes value and label fields\n      return {\n        value: pinCodeId,\n        label: `${item.sypin_pincode} - ${item.sypin_office_name || ''}`\n      };\n    });\n  }\n\n  // Helper method to transform country response to dropdown options\n  private transformCountryToDropdown(response: countryListControllerResponse): DropdownOption[] {\n    try {\n      if (!response?.success || !response?.data) {\n        return [];\n      }\n\n      let dataArray: ICoreSyctr[] = [];\n\n      // Handle different response structures\n      if (Array.isArray(response.data)) {\n        dataArray = response.data;\n      } else if (response.data) {\n        dataArray = response.data;\n      }\n\n      return dataArray.map((item: ICoreSyctr) => {\n        const countryId = String(item._id);\n\n        return {\n          value: countryId,\n          label: `${item.syctr_country_iso_name || ''} (${item.syctr_country_iso_code_two_char || 'XX'})`\n        };\n      });\n    } catch (error) {\n      return [];\n    }\n  }\n\n  // Load country data by ID using existing search methods\n  private loadCountryUsingExistingSearch(countryId: string, addressType: 'corporate' | 'registered') {\n\n    // Use existing search methods with country ID\n    const searchEvent: selectSearchType = {\n      query: '', // Empty query to get specific country by ID\n      value: countryId\n    };\n\n    if (addressType === 'corporate') {\n      this.performCorporateCountrySearch(searchEvent);\n    } else {\n      this.performRegisteredCountrySearch(searchEvent);\n    }\n  }\n\n  // Helper method to get form control\n  getControl(controlName: string) {\n    return this.entityForm.get(controlName);\n  }\n\n  // Setup debounced search subscriptions\n  private setupDebouncedSearch(): void {\n    // Postal code search with debounce\n    this.postalCodeSearchSubject.pipe(\n      debounceTime(300),\n      distinctUntilChanged((prev, curr) => prev.query === curr.query),\n      takeUntil(this.destroy$)\n    ).subscribe(event => {\n      this.performPostalCodeSearch(event);\n    });\n\n    // User search with debounce\n    this.userSearchSubject.pipe(\n      debounceTime(300),\n      distinctUntilChanged((prev, curr) => prev.query === curr.query),\n      takeUntil(this.destroy$)\n    ).subscribe(event => {\n      this.performUserSearch(event);\n    });\n\n    // Corporate country search with debounce\n    this.corporateCountrySearchSubject.pipe(\n      debounceTime(300),\n      distinctUntilChanged((prev, curr) => prev.query === curr.query),\n      takeUntil(this.destroy$)\n    ).subscribe(event => {\n      this.performCorporateCountrySearch(event);\n    });\n\n    // Registered country search with debounce\n    this.registeredCountrySearchSubject.pipe(\n      debounceTime(300),\n      distinctUntilChanged((prev, curr) => prev.query === curr.query),\n      takeUntil(this.destroy$)\n    ).subscribe(event => {\n      this.performRegisteredCountrySearch(event);\n    });\n  }\n\n  // Handle postal code search with debouncing\n  onPostalCodeSearch(event: selectSearchType) {\n    this.postalCodeSearchSubject.next(event);\n  }\n\n  // Perform actual postal code search\n  private performPostalCodeSearch(event: selectSearchType) {\n    try {\n\n      // Set loading state\n      this.postalCodesLoading.set(true);\n\n      const payload: MPinCodeSelect = {\n        sypin_pincode: event.query || \"\",\n        sypin_id: event.value as string || \"\"\n      };\n\n      this.pinCodeService.getPinCodeData(payload).pipe(\n        takeUntil(this.destroy$)\n      ).subscribe({\n        next: (response) => {\n          const postalCodes = this.transformPinCodeToDropdown(response);\n          this.postalCodes.set(postalCodes);\n        },\n        error: (err) => {\n          this.postalCodes.set([]);\n        },\n        complete: () => {\n          // Clear loading state\n          this.postalCodesLoading.set(false);\n        }\n      });\n    } catch (error) {\n      this.postalCodes.set([]);\n      this.postalCodesLoading.set(false);\n    }\n  }\n\n  // Handle user search\n  onUserSearch(event: selectSearchType) {\n    this.userSearchSubject.next(event);\n  }\n\n  // Perform actual user search\n  private performUserSearch(event: selectSearchType) {\n    try {\n\n      // Set loading state\n      this.usersLoading.set(true);\n\n      // Use getUserList with search parameters\n      const payload = {\n        query: event?.query || \"\",\n        syenm_entity_id_syen: this.appState.getActiveEntityId(),\n        pagination: false // Get all matching users for dropdown\n      };\n\n      this.userService.getUserList(payload).subscribe({\n        next: (response) => {\n          const users = this.transformUserToDropdown(response);\n          this.users.set(users);\n        },\n        error: (err) => {\n          this.users.set([]);\n        },\n        complete: () => {\n          // Clear loading state\n          this.usersLoading.set(false);\n        }\n      });\n    } catch (error) {\n      this.users.set([]);\n      this.usersLoading.set(false);\n    }\n  }\n\n  // Handle country search\n  onCorporateCountrySearch(event: selectSearchType) {\n    this.corporateCountrySearchSubject.next(event);\n  }\n\n  // Perform actual corporate country search\n  private performCorporateCountrySearch(event: selectSearchType) {\n    try {\n      // Set loading state\n      this.corporateCountriesLoading.set(true);\n\n      const payload: Partial<MSyctrList> = {\n        query: event.query,\n        syctr_id: event.value as string,\n      };\n\n      this.countryService.getAllCountries(payload).subscribe({\n        next: (response) => {\n          const countries = this.transformCountryToDropdown(response);\n          this.corporateCountries.set(countries);\n        },\n        error: (err) => {\n          this.corporateCountries.set([]);\n        },\n        complete: () => {\n          // Clear loading state\n          this.corporateCountriesLoading.set(false);\n        }\n      });\n    } catch (error) {\n      this.corporateCountries.set([]);\n      this.corporateCountriesLoading.set(false);\n    }\n  }\n\n  onRegisteredCountrySearch(event: selectSearchType) {\n    this.registeredCountrySearchSubject.next(event);\n  }\n\n  // Perform actual registered country search\n  private performRegisteredCountrySearch(event: selectSearchType) {\n    try {\n\n      // Set loading state\n      this.registeredCountriesLoading.set(true);\n\n      const payload: Partial<MSyctrList> = {\n        query: event.query,\n        syctr_id: event.value as string,\n      }\n\n      this.countryService.getAllCountries(payload).subscribe({\n        next: (response) => {\n          const countries = this.transformCountryToDropdown(response);\n          this.registeredCountries.set(countries);\n        },\n        error: (err) => {\n          this.registeredCountries.set([]);\n        },\n        complete: () => {\n          // Clear loading state\n          this.registeredCountriesLoading.set(false);\n        }\n      });\n    } catch (error) {\n      this.registeredCountries.set([]);\n      this.registeredCountriesLoading.set(false);\n    }\n  }\n\n  // Handle postal code selection\n  onPostalCodeSelection(event: Event | string) {\n    let pinCodeId = '';\n    if (typeof event === 'string') {\n      pinCodeId = event;\n    } else {\n      const target = event.target as HTMLSelectElement;\n      pinCodeId = target?.value || '';\n    }\n    // The auto-population is handled by the form value change listeners\n    // This method can be used for additional logic if needed\n  }\n\n  // Check if form is valid\n  get isFormValid(): boolean {\n    return this.entityForm.valid;\n  }\n\n  // Get current mode for display\n  get currentMode(): string {\n    return this.isEditMode() ? 'Edit' : 'Create';\n  }\n\n  // Get current entity ID for display\n  get currentEntityId(): string | null {\n    return this.entityId();\n  }\n\n  // Get dynamic page title\n  get pageTitle(): string {\n    if (this.isEditMode()) {\n      const entityName = this.entityForm.get('syen_name')?.value;\n      return entityName ? `Edit Entity: ${entityName}` : 'Edit Entity';\n    }\n\n    // Check if creating a child entity\n    if (this.parentEntityId()) {\n      return 'Create Child Entity';\n    }\n\n    return 'Create New Entity';\n  }\n\n  // Get dynamic page subtitle\n  get pageSubtitle(): string {\n    if (this.isEditMode()) {\n      return 'Update the entity information below';\n    }\n\n    // Check if creating a child entity\n    if (this.parentEntityId()) {\n      const parentName = this.parentEntityName();\n      return parentName ? `Create a new child entity under \"${parentName}\"` : 'Create a new child entity';\n    }\n\n    return 'Fill in the required information to create a new entity';\n  }\n\n  onFileChange(event: FileList | null) {\n    if (event && event.length > 0) {\n      this.logoFile = event[0];\n      console.log('�� Logo File Selected:', this.logoFile.name);\n    } else {\n      this.logoFile = undefined;\n    }\n  }\n\n  onTabChange(tab: TabItem) {\n    this.activeTab.set(tab.id);\n    // Registered Address tab: hide content until user clicks to reveal\n    if (tab.id === 'registered') {\n      this.registeredTabContentVisible.set(false);\n    }\n    // Load data when switching to user mapping tab\n    if (tab.id === 'user-mapping') {\n      this.loadUserEntityMappings();\n      this.loadAvailableUsers();\n    }\n  }\n\n  /** Show Registered Address form (called when user clicks the placeholder in that tab). */\n  showRegisteredAddressContent() {\n    this.registeredTabContentVisible.set(true);\n  }\n\n  onSubmit() {\n    if (this.entityForm.valid) {\n      this.loading.set(true);\n      this.error.set(null);\n      this.success.set(null);\n\n      const payload: CoreSystemEntitySaveUpdatePayload = {\n        core_system_entity: {\n          ...this.entityForm.value,\n        },\n        core_entity_mapping: []\n      };\n      const isEdit = this.isEditMode();\n      const entityId = this.entityId();\n\n\n      // Add entity ID to form data if in edit mode\n      if (isEdit && entityId) {\n        (payload.core_system_entity as CoreSystemEntity)._id = entityId;\n      }\n\n      // Handle parent entity ID (syen_id_syen)\n      const parentEntityId = this.parentEntityId();\n      const formParentEntityId = this.entityForm.get('syen_id_syen')?.value;\n\n      if (isEdit) {\n        // In edit mode, preserve the existing syen_id_syen from form (which was loaded from entity data)\n        if (formParentEntityId) {\n          (payload.core_system_entity as CoreSystemEntity).syen_id_syen = formParentEntityId;\n        }\n      } else {\n        // In create mode, use parentEntityId from route params if available\n        if (parentEntityId) {\n          (payload.core_system_entity as CoreSystemEntity).syen_id_syen = parentEntityId;\n        }\n      }\n\n      // If creating a new entity and user mappings exist, ensure we send them with the entity\n      if (!isEdit && this.userEntityMappings().length > 0) {\n        // Use the generated entity id from user mapping (created during addUserMapping)\n        const generatedEntityId = String(this.userEntityMappings()[0].syenm_entity_id_syen || '');\n        if (generatedEntityId) {\n          // Ensure the entity being created uses the same _id\n          (payload.core_system_entity as CoreSystemEntity)._id = (payload.core_system_entity as CoreSystemEntity)._id || generatedEntityId;\n        }\n\n        // Normalize mappings to point to the same entity id and strip display-only fields\n        const normalizedMappings = this.userEntityMappings().map(m => {\n          const { _displayUserName, ...rest } = m;\n          return {\n            ...rest,\n            syenm_entity_id_syen: ((payload.core_system_entity as CoreSystemEntity)._id || generatedEntityId) as any\n          };\n        });\n\n        // Attach mappings to payload expected by backend\n        (payload.core_entity_mapping as CoreEntityMapping[]) = normalizedMappings as CoreEntityMapping[];\n      }\n\n      const saveOperation = this.entityService.saveUpdateEntity(payload);\n\n      saveOperation.pipe(takeUntil(this.destroy$))\n        .subscribe({\n          next: (response: entityControllerResponse) => {\n\n            if (response?.success) {\n              const successMessage = isEdit\n                ? 'Entity updated successfully!'\n                : 'Entity created successfully!';\n              this.success.set(successMessage);\n\n              // Update the entity ID if it's a new entity\n              if (!isEdit && response?.data) {\n                const entityData = Array.isArray(response.data) ? response.data[0] : response.data;\n                if (entityData?._id) {\n                  this.entityId.set(entityData._id);\n                  this.isEditMode.set(true);\n                }\n              }\n\n              // Success handling - show notification and manage tabs\n              this.notificationService.success(`${isEdit ? 'Updated' : 'Created'} successfully!`);\n\n              // Get current active tab ID to close it after navigation\n              const activeTabId = this.requestService.activeTabId();\n\n              // Force refresh list route to ensure new data is loaded when tab becomes active\n              this.requestService.forceRefreshRoute('/control-panel/entity-list');\n\n              if (activeTabId) {\n                // Close current tab - this will handle navigation back to the previous active tab (usually the list)\n                this.requestService.closeTab(activeTabId);\n              } else {\n                // Fallback: regular navigation if tab ID not found\n                this.router.navigate(['/control-panel/entity-list']);\n              }\n            } else {\n              this.error.set(response?.message || `Failed to ${isEdit ? 'update' : 'create'} entity. Please try again.`);\n            }\n            this.loading.set(false);\n          },\n          error: (err: any) => {\n\n            let errorMessage = `Failed to ${isEdit ? 'update' : 'save'} entity settings.`;\n\n            if (err?.error?.message) {\n              errorMessage = err.error.message;\n            } else if (err?.message) {\n              errorMessage = err.message;\n            } else if (err?.status === 400) {\n              errorMessage = 'Invalid data provided. Please check your input.';\n            } else if (err?.status === 404 && isEdit) {\n              errorMessage = 'Entity not found. It may have been deleted.';\n            } else if (err?.status === 409) {\n              errorMessage = 'Entity with this code already exists. Please use a different code.';\n            } else if (err?.status === 500) {\n              errorMessage = 'Server error. Please try again later.';\n            }\n\n            this.error.set(errorMessage);\n            this.loading.set(false);\n          }\n        });\n    } else {\n      // Mark all fields as touched to show validation errors\n      this.entityForm.markAllAsTouched();\n\n\n      this.error.set('Please check your form data and try again.');\n    }\n  }\n\n  onReset() {\n    if (this.isEditMode() && this.entityId()) {\n      // In edit mode, reload the original data from API\n      this.loadEntityData(this.entityId()!);\n    } else {\n      // In create mode, clear the form\n\n      // Clear logo file\n      this.logoFile = undefined;\n\n      // Reset form to initial values\n      this.entityForm.reset({\n        syen_name: '',\n        syen_entity_type_sygms: '',\n        syen_entity_code: '',\n        syen_udise_no: '',\n        syen_affiliation_no: '',\n        syen_isactive: true,\n        syen_corporate_address: '',\n        syen_corporate_pin_sypin: '',\n        syen_corporate_city_sypin: '',\n        syen_corporate_state_sypin: '',\n        syen_corporate_country_syctr: '',\n        syen_corporate_contact_person_user: '',\n        syen_corporate_phone: '',\n        syen_corporate_phone_alt: '',\n        syen_corporate_fax: '',\n        syen_corporate_email: '',\n        syen_corporate_email_alt: '',\n        syen_website: '',\n        syen_currency_sycr: '',\n        syen_registered_address: '',\n        syen_registered_pin_sypin: '',\n        syen_registered_city_sypin: '',\n        syen_registered_state_sypin: '',\n        syen_registered_country_syctr: '',\n        syen_registered_contact_person_user: '',\n        syen_registered_phone: '',\n        syen_registered_fax: '',\n        syen_registered_email: '',\n        syen_photo_id_cyfm: ''\n      });\n    }\n\n    this.success.set(null);\n    this.error.set(null);\n  }\n\n  onImageUploadSuccess(uploadedId: string) {\n    // The form control is automatically updated by the file input component\n  }\n\n  onImageUploadError(error: string) {\n    // Error notifications are now handled by the file input component itself\n  }\n\n  onImageUploadProgress(progress: number) {\n    // Progress notifications are now handled by the file input component itself\n  }\n\n  getUploadData() {\n    return {\n      altText: 'Entity Logo',\n      userId: this.appState.getCurrentUser()?._id || '',\n      permissions: ['read', 'write'],\n      tags: ['entity', 'logo', 'image'],\n      uploadType: 'entity_logo',\n    };\n  }\n\n  /**\n   * Navigate back to the previous page\n   */\n  onBack(): void {\n    // Force refresh list route to ensure new data is loaded\n    this.requestService.forceRefreshRoute('/control-panel/entity-list');\n\n    const activeTabId = this.requestService.activeTabId();\n    if (activeTabId) {\n      // Close current tab - this will handle navigation back to the previous active tab\n      this.requestService.closeTab(activeTabId);\n    } else {\n      this.router.navigate(['/control-panel/entity-list']);\n    }\n  }\n} ","<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_entity_form' }\"\r\n  [breadcrumb_data]=\"breadcrumbData()\">\r\n  <!-- Modern Entity Create Form -->\r\n  <div class=\"tw-min-h-screen\">\r\n    <div class=\"tw-mx-auto\">\r\n\r\n      <form [formGroup]=\"entityForm\" [class.tw-opacity-60]=\"loading()\" [class.tw-pointer-events-none]=\"loading()\"\r\n        (ngSubmit)=\"onSubmit()\">\r\n\r\n        <!-- Breadcrumb is now rendered by shared wrapper; inline breadcrumb removed -->\r\n\r\n        <!-- Basic Information Section -->\r\n        <div class=\"tw-p-2 tw-pb-0\">\r\n          <div class=\"tw-space-y-6\">\r\n            <!-- Top Section: Image on Right, Form Fields on Left -->\r\n            <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-[1fr_200px] tw-gap-4\">\r\n              <!-- Left Side: Form Fields -->\r\n              <div class=\"tw-space-y-6\">\r\n                <!-- Institution Name, Entity Type & Active Status -->\r\n                <div\r\n                  class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_250px_120px] tw-gap-4 tw-items-end\">\r\n                  <cide-ele-input id=\"syen_name\" type=\"text\" label=\"Institution Name\" formControlName=\"syen_name\"\r\n                    placeholder=\"Enter institution name\" size=\"sm\">\r\n                  </cide-ele-input>\r\n\r\n                  <cide-ele-select label=\"Entity Type\" labelPlacement=\"floating\" [options]=\"entityTypes()\"\r\n                    formControlName=\"syen_entity_type_sygms\" placeholder=\"Select institution type\" size=\"sm\">\r\n                  </cide-ele-select>\r\n\r\n                  <div class=\"tw-flex tw-items-center tw-justify-center tw-gap-1 tw-h-full\">\r\n                    <cide-ele-input type=\"checkbox\" formControlName=\"syen_isactive\" size=\"sm\" label=\"Is Active\">\r\n                    </cide-ele-input>\r\n                  </div>\r\n                </div>\r\n\r\n                <!-- UDISE, Affiliation & Institution Code -->\r\n                <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-4\">\r\n                  <cide-ele-input label=\"UDISE Number\" formControlName=\"syen_udise_no\" placeholder=\"Enter UDISE number\"\r\n                    size=\"sm\">\r\n                  </cide-ele-input>\r\n\r\n                  <cide-ele-input label=\"Affiliation Number\" formControlName=\"syen_affiliation_no\"\r\n                    placeholder=\"Enter affiliation number\" size=\"sm\">\r\n                  </cide-ele-input>\r\n\r\n                  <cide-ele-input label=\"Institution Code\" formControlName=\"syen_entity_code\"\r\n                    placeholder=\"Enter unique code\" size=\"sm\">\r\n                  </cide-ele-input>\r\n                </div>\r\n              </div>\r\n\r\n              <!-- Right Side: Entity Image Upload -->\r\n              <div class=\"tw-flex tw-items-start tw-justify-center tw-pt-0\">\r\n                <cide-ele-file-input id=\"entity_image_upload\" formControlName=\"syen_photo_id_cyfm\" accept=\"image/*\"\r\n                  [showPreview]=\"true\" [previewBoxMode]=\"true\" [showFileName]=\"false\" previewWidth=\"180px\"\r\n                  previewHeight=\"120px\" [required]=\"true\" placeholderText=\"Upload Logo\" placeholderIcon=\"cloud_upload\"\r\n                  [autoUpload]=\"true\" [uploadData]=\"getUploadData()\" (uploadSuccess)=\"onImageUploadSuccess($event)\"\r\n                  (uploadError)=\"onImageUploadError($event)\" (uploadProgressChange)=\"onImageUploadProgress($event)\">\r\n                </cide-ele-file-input>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <!-- Tab Navigation -->\r\n        <div class=\"tw-px-4 !tw-mt-0\">\r\n          <cide-ele-tab [tabs]=\"entityTabs()\" [activeTabId]=\"activeTab()\" size=\"sm\" variant=\"default\"\r\n            (tabChange)=\"onTabChange($event)\">\r\n          </cide-ele-tab>\r\n        </div>\r\n\r\n        <!-- Tab Content -->\r\n        <div class=\"tw-transition-all tw-duration-300 tw-ease-in-out !tw-mt-2\" [class.tw-opacity-60]=\"loading()\"\r\n          [class.tw-pointer-events-none]=\"loading()\">\r\n          @switch (activeTab()) {\r\n\r\n          @case ('corporate') {\r\n          <div class=\"tw-p-4\">\r\n            <div class=\"tw-space-y-6\">\r\n              <!-- Corporate Address - Full Width -->\r\n              <div class=\"tw-w-full\">\r\n                <cide-ele-textarea label=\"Corporate Address\" formControlName=\"syen_corporate_address\"\r\n                  placeholder=\"Enter complete corporate address\" [rows]=\"4\">\r\n                </cide-ele-textarea>\r\n              </div>\r\n\r\n              <!-- Postal Code, City, State & Country - Four Columns -->\r\n              <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[220px_0.8fr_0.7fr_240px] tw-gap-6\">\r\n                <cide-ele-select label=\"Postal Code\" [options]=\"postalCodes()\"\r\n                  formControlName=\"syen_corporate_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\r\n                  [loading]=\"postalCodesLoading()\" (searchChange)=\"onPostalCodeSearch($event)\" size=\"sm\">\r\n                </cide-ele-select>\r\n\r\n                <cide-ele-input label=\"City\" formControlName=\"syen_corporate_city_sypin\" placeholder=\"Enter city name\">\r\n                </cide-ele-input>\r\n\r\n                <cide-ele-input label=\"State\" formControlName=\"syen_corporate_state_sypin\"\r\n                  placeholder=\"Enter state name\">\r\n                </cide-ele-input>\r\n\r\n                <cide-ele-select label=\"Country\" [options]=\"corporateCountries()\"\r\n                  formControlName=\"syen_corporate_country_syctr\" placeholder=\"Select country\" [searchable]=\"true\"\r\n                  (searchChange)=\"onCorporateCountrySearch($event)\" [loading]=\"corporateCountriesLoading()\" size=\"sm\">\r\n                </cide-ele-select>\r\n              </div>\r\n\r\n              <!-- Contact Person, Phone, Email & Fax - Four Columns -->\r\n              <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_200px_1fr_150px] tw-gap-6\">\r\n                <cide-ele-select label=\"Contact Person\" [options]=\"users()\"\r\n                  formControlName=\"syen_corporate_contact_person_user\" placeholder=\"Select contact person\"\r\n                  [searchable]=\"true\" [loading]=\"usersLoading()\" (searchChange)=\"onUserSearch($event)\">\r\n                </cide-ele-select>\r\n\r\n                <cide-ele-input label=\"Phone\" formControlName=\"syen_corporate_phone\" type=\"tel\"\r\n                  placeholder=\"Enter phone number\" size=\"sm\">\r\n                </cide-ele-input>\r\n\r\n                <cide-ele-input label=\"Email\" formControlName=\"syen_corporate_email\" type=\"email\"\r\n                  placeholder=\"Enter email address\">\r\n                </cide-ele-input>\r\n\r\n                <cide-ele-input label=\"Fax\" formControlName=\"syen_corporate_fax\" placeholder=\"Enter fax number\"\r\n                  size=\"sm\">\r\n                </cide-ele-input>\r\n              </div>\r\n            </div>\r\n          </div>\r\n          }\r\n\r\n          @case ('contact') {\r\n          <div class=\"tw-p-4\">\r\n            <div class=\"tw-space-y-6\">\r\n              <!-- Currency Selection -->\r\n              <div class=\"tw-w-full\">\r\n                <cide-ele-select label=\"Currency\" [options]=\"currencies()\" formControlName=\"syen_currency_sycr\"\r\n                  placeholder=\"Select currency\">\r\n                </cide-ele-select>\r\n              </div>\r\n\r\n              <!-- Alternate Phone & Website - Two Columns -->\r\n              <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\r\n                <cide-ele-input label=\"Alternate Phone\" formControlName=\"syen_corporate_phone_alt\" type=\"tel\"\r\n                  placeholder=\"Enter alternate phone number\">\r\n                </cide-ele-input>\r\n\r\n                <cide-ele-input label=\"Website URL\" formControlName=\"syen_website\" type=\"url\"\r\n                  placeholder=\"https://example.com\" autocomplete=\"url\" leadingIcon=\"language\"\r\n                  helperText=\"Enter a valid website URL starting with http:// or https://\">\r\n                </cide-ele-input>\r\n              </div>\r\n\r\n              <!-- Alternate Email - Full Width -->\r\n              <div class=\"tw-w-full\">\r\n                <cide-ele-input label=\"Alternate Email\" formControlName=\"syen_corporate_email_alt\" type=\"email\"\r\n                  placeholder=\"Enter alternate email address\">\r\n                </cide-ele-input>\r\n              </div>\r\n            </div>\r\n          </div>\r\n          }\r\n\r\n          @case ('registered') {\r\n          <div class=\"tw-p-4\">\r\n            @if (registeredTabContentVisible()) {\r\n            <div class=\"tw-space-y-6\">\r\n              <!-- Registered Address - Full Width -->\r\n              <div class=\"tw-w-full\">\r\n                <cide-ele-textarea label=\"Registered Address\" formControlName=\"syen_registered_address\"\r\n                  placeholder=\"Enter complete registered address\" [rows]=\"4\">\r\n                </cide-ele-textarea>\r\n              </div>\r\n\r\n              <!-- Postal Code, City, State & Country - Four Columns -->\r\n              <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[220px_0.8fr_0.7fr_240px] tw-gap-6\">\r\n                <cide-ele-select label=\"Postal Code\" [options]=\"postalCodes()\"\r\n                  formControlName=\"syen_registered_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\r\n                  [loading]=\"postalCodesLoading()\" (searchChange)=\"onPostalCodeSearch($event)\" size=\"sm\">\r\n                </cide-ele-select>\r\n\r\n                <cide-ele-input label=\"City\" formControlName=\"syen_registered_city_sypin\" placeholder=\"Enter city name\">\r\n                </cide-ele-input>\r\n\r\n                <cide-ele-input label=\"State\" formControlName=\"syen_registered_state_sypin\"\r\n                  placeholder=\"Enter state name\">\r\n                </cide-ele-input>\r\n\r\n                <cide-ele-select label=\"Country\" [options]=\"registeredCountries()\"\r\n                  formControlName=\"syen_registered_country_syctr\" placeholder=\"Select country\" [searchable]=\"true\"\r\n                  (searchChange)=\"onRegisteredCountrySearch($event)\" [loading]=\"registeredCountriesLoading()\" size=\"sm\">\r\n                </cide-ele-select>\r\n              </div>\r\n\r\n              <!-- Contact Person, Phone, Email & Fax - Four Columns -->\r\n              <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_200px_1fr_150px] tw-gap-6\">\r\n                <cide-ele-select label=\"Contact Person\" [options]=\"users()\"\r\n                  formControlName=\"syen_registered_contact_person_user\" placeholder=\"Select contact person\"\r\n                  [searchable]=\"true\" [loading]=\"usersLoading()\" (searchChange)=\"onUserSearch($event)\">\r\n                </cide-ele-select>\r\n\r\n                <cide-ele-input label=\"Phone\" formControlName=\"syen_registered_phone\" type=\"tel\"\r\n                  placeholder=\"Enter phone number\" size=\"sm\">\r\n                </cide-ele-input>\r\n\r\n                <cide-ele-input label=\"Email\" formControlName=\"syen_registered_email\" type=\"email\"\r\n                  placeholder=\"Enter email address\">\r\n                </cide-ele-input>\r\n\r\n                <cide-ele-input label=\"Fax\" formControlName=\"syen_registered_fax\" placeholder=\"Enter fax number\"\r\n                  size=\"sm\">\r\n                </cide-ele-input>\r\n              </div>\r\n            </div>\r\n            } @else {\r\n            <button type=\"button\"\r\n              class=\"tw-w-full tw-py-12 tw-px-4 tw-border-2 tw-border-dashed tw-border-gray-300 tw-rounded-lg tw-bg-gray-50 hover:tw-bg-gray-100 hover:tw-border-gray-400 tw-transition-colors tw-text-gray-500 hover:tw-text-gray-700 tw-cursor-pointer tw-flex tw-flex-col tw-items-center tw-gap-2\"\r\n              (click)=\"showRegisteredAddressContent()\">\r\n              <cide-ele-icon class=\"tw-text-4xl tw-text-gray-400\">location_on</cide-ele-icon>\r\n              <span class=\"tw-text-sm tw-font-medium\">Click to load Registered Address</span>\r\n              <span class=\"tw-text-xs\">Form and fields will appear here</span>\r\n            </button>\r\n            }\r\n          </div>\r\n          }\r\n\r\n          @case ('user-mapping') {\r\n          <div class=\"tw-p-2\">\r\n            <div class=\"tw-space-y-4\">\r\n              <!-- Add User Mapping Form -->\r\n              <div class=\"tw-bg-white tw-p-4 tw-rounded-lg tw-border tw-shadow-sm\">\r\n                <div class=\"tw-flex tw-items-center tw-gap-2 tw-mb-3\">\r\n                  <cide-ele-icon class=\"tw-text-blue-600 tw-text-sm\">person_add</cide-ele-icon>\r\n                  <h3 class=\"tw-text-sm tw-font-semibold tw-text-gray-800\">Add User to Entity</h3>\r\n                </div>\r\n\r\n                <form [formGroup]=\"userMappingForm\" (ngSubmit)=\"addUserMapping()\">\r\n                  <div class=\"tw-flex tw-items-end tw-gap-3\">\r\n                    <div class=\"tw-flex-1\">\r\n                      <cide-ele-select label=\"Select User\" [options]=\"availableUsers()\" formControlName=\"syenm_id_user\"\r\n                        placeholder=\"Choose user to add to entity\" [searchable]=\"true\"\r\n                        [loading]=\"availableUsersLoading()\" size=\"md\">\r\n                      </cide-ele-select>\r\n                    </div>\r\n\r\n                    <!-- Add Button -->\r\n                    <div class=\"tw-flex tw-items-end\">\r\n                      <button cideEleButton type=\"submit\" variant=\"primary\" size=\"xs\"\r\n                        [disabled]=\"userMappingForm.invalid || availableUsersLoading()\"\r\n                        class=\"tw-shadow-sm tw-h-8 tw-px-3\">\r\n                        <cide-ele-icon class=\"tw-mr-1 tw-text-xs\">add</cide-ele-icon>\r\n                        <span class=\"tw-text-xs\">Add</span>\r\n                      </button>\r\n                    </div>\r\n                  </div>\r\n                </form>\r\n              </div>\r\n\r\n              <!-- User Mappings Grid -->\r\n              <div class=\"tw-bg-white tw-rounded-md tw-border tw-overflow-hidden tw-shadow-sm\">\r\n                @if (userEntityMappingsLoading()) {\r\n                <div class=\"tw-p-4 tw-text-center\">\r\n                  <div class=\"tw-inline-flex tw-items-center tw-gap-2 tw-text-gray-500\">\r\n                    <div class=\"tw-animate-spin tw-rounded-full tw-h-3 tw-w-3 tw-border-b-2 tw-border-gray-500\"></div>\r\n                    <span class=\"tw-text-xs\">Loading...</span>\r\n                  </div>\r\n                </div>\r\n                } @else if (userEntityMappings().length === 0) {\r\n                <div class=\"tw-p-4 tw-text-center tw-text-gray-500\">\r\n                  <cide-ele-icon class=\"tw-text-2xl tw-mb-1 tw-text-gray-300\">people_outline</cide-ele-icon>\r\n                  <p class=\"tw-text-sm tw-font-medium tw-mb-1\">No users mapped yet</p>\r\n                  <p class=\"tw-text-xs tw-text-gray-400\">Add users above to grant them access to this entity</p>\r\n                </div>\r\n                } @else {\r\n                <cide-ele-data-grid [config]=\"userMappingsGridConfig\"\r\n                  [templateRenderers]=\"getUserMappingsTemplateRenderers()\">\r\n\r\n                  <!-- Custom user cell template -->\r\n                  <ng-template #userCell let-row=\"row\">\r\n                    <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n                      <div\r\n                        class=\"tw-w-6 tw-h-6 tw-bg-gradient-to-br tw-from-blue-100 tw-to-indigo-100 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-shadow-sm\">\r\n                        <cide-ele-icon class=\"tw-text-blue-600 tw-text-xs\">person</cide-ele-icon>\r\n                      </div>\r\n                      <div class=\"tw-flex tw-flex-col\">\r\n                        <span class=\"tw-font-medium tw-text-gray-900 tw-text-xs\">\r\n                          {{ row?._displayUserName }}\r\n                        </span>\r\n                      </div>\r\n                    </div>\r\n                  </ng-template>\r\n\r\n                  <!-- Custom actions cell template -->\r\n                  <ng-template #actionsCell let-row=\"row\">\r\n                    <div class=\"tw-flex tw-items-center tw-gap-1 tw-justify-center\">\r\n                      <button (click)=\"updateUserMapping(row._id!, { syenm_isactive: !row.syenm_isactive })\"\r\n                        class=\"tw-w-8 tw-h-8 tw-flex tw-items-center tw-justify-center tw-rounded-md tw-transition-colors tw-border tw-border-transparent hover:tw-border-gray-300\"\r\n                        [class.tw-bg-green-100]=\"row.syenm_isactive\" [class.tw-text-green-700]=\"row.syenm_isactive\"\r\n                        [class.tw-bg-gray-100]=\"!row.syenm_isactive\" [class.tw-text-gray-600]=\"!row.syenm_isactive\"\r\n                        [title]=\"row.syenm_isactive ? 'Deactivate' : 'Activate'\">\r\n                        <cide-ele-icon class=\"tw-text-sm\">\r\n                          {{ row.syenm_isactive ? 'pause' : 'play_arrow' }}\r\n                        </cide-ele-icon>\r\n                      </button>\r\n\r\n                      <button (click)=\"removeUserMapping(row._id!)\"\r\n                        class=\"tw-w-8 tw-h-8 tw-flex tw-items-center tw-justify-center tw-rounded-md tw-bg-red-100 tw-text-red-600 hover:tw-bg-red-200 tw-transition-colors tw-border tw-border-transparent hover:tw-border-red-300\"\r\n                        title=\"Remove User\">\r\n                        <cide-ele-icon class=\"tw-text-sm\">delete</cide-ele-icon>\r\n                      </button>\r\n                    </div>\r\n                  </ng-template>\r\n                </cide-ele-data-grid>\r\n                }\r\n              </div>\r\n            </div>\r\n          </div>\r\n          }\r\n\r\n\r\n          @case ('board-mapping') {\r\n          <div class=\"tw-p-2\">\r\n            <div class=\"tw-space-y-4\">\r\n              <!-- Add Board Mapping Form -->\r\n              <div class=\"tw-bg-white tw-p-4 tw-rounded-lg tw-border tw-shadow-sm\">\r\n                <div class=\"tw-flex tw-items-center tw-gap-2 tw-mb-3\">\r\n                  <cide-ele-icon class=\"tw-text-blue-600 tw-text-sm\">school</cide-ele-icon>\r\n                  <h3 class=\"tw-text-sm tw-font-semibold tw-text-gray-800\">Map Education Board</h3>\r\n                </div>\r\n\r\n                <form [formGroup]=\"boardMappingForm\" (ngSubmit)=\"addBoardAffiliation()\">\r\n                  <div class=\"tw-flex tw-flex-wrap tw-gap-3 tw-items-end\">\r\n\r\n                    <!-- Board Selection -->\r\n                    <div class=\"tw-flex-1 tw-min-w-[250px]\">\r\n                      <cide-ele-select label=\"Select Board\" [options]=\"educationBoards()\"\r\n                        formControlName=\"scbaf_board_id_edbrd\" placeholder=\"Choose education board\" [searchable]=\"true\"\r\n                        [loading]=\"educationBoardsLoading()\" size=\"sm\">\r\n                      </cide-ele-select>\r\n                    </div>\r\n\r\n                    <!-- Affiliation Number -->\r\n                    <div class=\"tw-w-44\">\r\n                      <cide-ele-input label=\"Affiliation No.\" formControlName=\"scbaf_affiliation_number\"\r\n                        placeholder=\"Enter number\" size=\"sm\">\r\n                      </cide-ele-input>\r\n                    </div>\r\n\r\n                    <!-- Status Dropdown -->\r\n                    <div class=\"tw-w-40\">\r\n                      <cide-ele-select label=\"Status\" [options]=\"boardAffiliationStatuses()\"\r\n                        formControlName=\"scbaf_affiliation_status_sygms\" placeholder=\"Select status\"\r\n                        [loading]=\"boardAffiliationStatusesLoading()\" size=\"sm\">\r\n                      </cide-ele-select>\r\n                    </div>\r\n\r\n                    <!-- Affiliation Level Multi-Select -->\r\n                    <div class=\"tw-w-64\">\r\n                      <cide-ele-select label=\"Affiliation Level\" [options]=\"boardAffiliationLevels()\"\r\n                        formControlName=\"scbaf_affiliation_level_multi_sygms\" placeholder=\"Select levels\"\r\n                        [loading]=\"boardAffiliationLevelsLoading()\" [multiple]=\"true\" size=\"sm\">\r\n                      </cide-ele-select>\r\n                    </div>\r\n\r\n                    <!-- Checkboxes -->\r\n                    <div class=\"tw-flex tw-items-center tw-gap-4 tw-pb-2\">\r\n                      <cide-ele-input type=\"checkbox\" formControlName=\"scbaf_isprimary\" size=\"sm\" label=\"Primary\">\r\n                      </cide-ele-input>\r\n\r\n                      <cide-ele-input type=\"checkbox\" formControlName=\"scbaf_isactive\" size=\"sm\" label=\"Active\">\r\n                      </cide-ele-input>\r\n                    </div>\r\n\r\n                    <!-- Add Button -->\r\n                    <div class=\"tw-flex tw-items-end\">\r\n                      <button cideEleButton type=\"submit\" variant=\"primary\" size=\"xs\"\r\n                        [disabled]=\"boardMappingForm.invalid || educationBoardsLoading()\"\r\n                        class=\"tw-shadow-sm tw-h-8 tw-px-3\">\r\n                        <cide-ele-icon class=\"tw-mr-1 tw-text-xs\">add</cide-ele-icon>\r\n                        <span class=\"tw-text-xs\">Add</span>\r\n                      </button>\r\n                    </div>\r\n                  </div>\r\n                </form>\r\n              </div>\r\n\r\n              <!-- Board Affiliations Grid -->\r\n              <div class=\"tw-bg-white tw-rounded-md tw-border tw-overflow-hidden tw-shadow-sm\">\r\n                @if (boardAffiliationsLoading()) {\r\n                <div class=\"tw-p-4 tw-text-center\">\r\n                  <div class=\"tw-inline-flex tw-items-center tw-gap-2 tw-text-gray-500\">\r\n                    <div class=\"tw-animate-spin tw-rounded-full tw-h-3 tw-w-3 tw-border-b-2 tw-border-gray-500\"></div>\r\n                    <span class=\"tw-text-xs\">Loading...</span>\r\n                  </div>\r\n                </div>\r\n                } @else if (boardAffiliations().length === 0) {\r\n                <div class=\"tw-p-4 tw-text-center tw-text-gray-500\">\r\n                  <cide-ele-icon class=\"tw-text-2xl tw-mb-1 tw-text-gray-300\">school</cide-ele-icon>\r\n                  <p class=\"tw-text-sm tw-font-medium tw-mb-1\">No boards mapped yet</p>\r\n                  <p class=\"tw-text-xs tw-text-gray-400\">Map education boards above to link them to this entity</p>\r\n                </div>\r\n                } @else {\r\n                <cide-ele-data-grid [config]=\"boardAffiliationsGridConfig\"\r\n                  [templateRenderers]=\"getBoardMappingsTemplateRenderers()\">\r\n\r\n                  <!-- Custom actions cell template -->\r\n                  <ng-template #boardActionsCell let-row=\"row\">\r\n                    <div class=\"tw-flex tw-items-center tw-gap-1 tw-justify-center\">\r\n                      <!-- Edit/Delete implementation pending -->\r\n                      <button\r\n                        class=\"tw-w-8 tw-h-8 tw-flex tw-items-center tw-justify-center tw-rounded-md tw-transition-colors tw-border tw-border-transparent hover:tw-border-gray-300 tw-text-gray-400 cursor-not-allowed\"\r\n                        title=\"Actions not implemented\">\r\n                        <cide-ele-icon class=\"tw-text-sm\">more_horiz</cide-ele-icon>\r\n                      </button>\r\n                    </div>\r\n                  </ng-template>\r\n                </cide-ele-data-grid>\r\n                }\r\n              </div>\r\n            </div>\r\n          </div>\r\n          }\r\n\r\n          }\r\n\r\n          <!-- Form Actions -->\r\n          <div class=\"tw-p-4\">\r\n            <div class=\"tw-flex tw-items-center tw-justify-between tw-gap-3\">\r\n              <!-- Error Message (Left Side) -->\r\n              <cide-form-field-error [formGroup]=\"entityForm\"></cide-form-field-error>\r\n\r\n              <!-- Action Buttons (Right Side) -->\r\n              <div class=\"tw-flex tw-gap-3\">\r\n                <button cideEleButton type=\"button\" variant=\"outline\" size=\"xs\" (click)=\"onBack()\"\r\n                  [disabled]=\"loading()\">\r\n                  <cide-ele-icon>arrow_back</cide-ele-icon>\r\n                  Back\r\n                </button>\r\n\r\n                <button cideEleButton type=\"button\" variant=\"secondary\" size=\"xs\" (click)=\"onReset()\"\r\n                  [disabled]=\"loading()\">\r\n                  <cide-ele-icon>refresh</cide-ele-icon>\r\n                  Reset Form\r\n                </button>\r\n\r\n                <button cideEleButton type=\"submit\" variant=\"primary\" size=\"xs\"\r\n                  [disabled]=\"loading() || entityForm.invalid\" [loading]=\"loading()\">\r\n                  <cide-ele-icon>{{ isEditMode() ? 'save' : 'add' }}</cide-ele-icon>\r\n                  {{ isEditMode() ? 'Update Entity' : 'Create Entity' }}\r\n                </button>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </form>\r\n    </div>\r\n  </div>\r\n</cide-lyt-shared-wrapper>","import { Component, signal, OnInit, inject, viewChild, TemplateRef, computed, DestroyRef, effect } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideIconComponent } from 'cloud-ide-element';\nimport { CideEleButtonComponent, CideSelectComponent } from 'cloud-ide-element';\nimport { CideEleDataGridComponent ,GridConfiguration, GridEvent, TemplateContext} from 'cloud-ide-element';\nimport { CideEleDropdownComponent, DropdownItem } from 'cloud-ide-element';\nimport { entityControllerResponse, CoreSystemEntityListResponse, generateStringFromObject, ICoreSygms, generalMasterListControllerResponse, IGeneralMasterListRequest } from 'cloud-ide-lms-model';\nimport { CideCoreEntityManagementService } from '../../services/entity-management.service';\nimport { CideCoreGeneralMasterService } from '../../../general-master-management';\nimport { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { RightsService } from 'cloud-ide-layout';\n\n\n@Component({\n  selector: 'cide-core-entity-list',\n  imports: [\n    CommonModule,\n    FormsModule,\n    CideIconComponent,\n    CideEleButtonComponent,\n    CideEleDataGridComponent,\n    CideEleDropdownComponent,\n    CideLytSharedWrapperComponent\n  ],\n  templateUrl: './entity-list.component.html',\n  styleUrl: './entity-list.component.scss',\n  styles: [`\n    :host {\n      height: 100%;\n      display: flex;\n      flex-direction: column;\n    }\n    \n    .entity-list-container {\n      height: 100%;\n      display: flex;\n      flex-direction: column;\n      overflow: hidden;\n    }\n    \n    .tw-overflow-auto {\n      flex: 1;\n      min-height: 0;\n    }\n    \n    cide-ele-data-grid {\n      flex: 1;\n      min-height: 0;\n      display: flex;\n      flex-direction: column;\n    }\n  `]\n})\nexport class CideCoreEntityListComponent implements OnInit {\n  // Shared wrapper setup\n  shared_wrapper_setup_param = { sypg_page_code: 'core_entity_list' };\n\n  // Modern dependency injection using inject()\n  router = inject(Router);  // Made public for template access\n  private entityService = inject(CideCoreEntityManagementService);\n  private generalMasterService = inject(CideCoreGeneralMasterService);\n  private appState = inject(AppStateHelperService);\n  private rightsService = inject(RightsService);\n  private destroyRef = inject(DestroyRef);\n\n  /** Refetch entity types when general master list is invalidated elsewhere (e.g. after add/update/delete). */\n  private readonly generalMasterInvalidationEffect = effect(() => {\n    const count = this.generalMasterService.listInvalidated();\n    if (count > 0) {\n      this.loadEntityTypes();\n    }\n  });\n\n  // ViewChild reference to the grid component using modern signal approach\n  gridComponent = viewChild<CideEleDataGridComponent<CoreSystemEntityListResponse>>(CideEleDataGridComponent);\n\n  // Template references using modern viewChild signal approach with proper typing\n  entityDetailsRenderer = viewChild.required<TemplateRef<TemplateContext<CoreSystemEntityListResponse>>>('entityDetailsRenderer');\n  entityTypeRenderer = viewChild.required<TemplateRef<TemplateContext<CoreSystemEntityListResponse>>>('entityTypeRenderer');\n  actionsDropdownRenderer = viewChild.required<TemplateRef<TemplateContext<CoreSystemEntityListResponse>>>('actionsDropdownRenderer');\n\n  // State management using Angular Signals\n  entities = signal<CoreSystemEntityListResponse[]>([]);\n  loading = signal(false);\n  error = signal<string | null>(null);\n  searchQuery = signal('');\n  currentPage = signal(1);\n  pageSize = signal(10);\n  totalItems = signal(0);\n  \n  // Entity type lookup map (ID -> Name)\n  entityTypeMap = signal<Map<string, string>>(new Map());\n  entityTypesLoading = signal(false);\n\n  // Pagination calculations\n  totalPages = signal(0);\n  hasNextPage = signal(false);\n  hasPreviousPage = signal(false);\n  jumpToPage: number = 1;\n  loadStartTime: number = 0;\n\n\n  // Rights computed signals\n  canCreate = computed(() => this.rightsService.hasRight('CREATE'));\n  canEdit = computed(() => this.rightsService.hasRight('EDIT'));\n  canDelete = computed(() => this.rightsService.hasRight('DELETE'));\n  canView = computed(() => this.rightsService.hasRight('VIEW'));\n\n  // Grid configuration signal\n  gridConfig = signal<GridConfiguration<CoreSystemEntityListResponse>>({\n    id: 'entity-list-grid',\n    title: '',\n    subtitle: '',\n    columns: [\n      {\n        key: 'details',\n        header: 'Entity Details',\n        type: 'custom',\n        width: 'lg',\n        truncate: true,\n        align: 'left',\n        renderer: 'entityDetailsRenderer'\n      },\n      {\n        key: 'syen_isactive',\n        header: 'Status',\n        type: 'status',\n        width: 'md',\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: 'syen_entity_type_sygms',\n        header: 'Entity Type',\n        type: 'custom',\n        width: 'md',\n        truncate: false,\n        align: 'center',\n        renderer: 'entityTypeRenderer'\n      },\n      {\n        key: 'actions',\n        header: 'Actions',\n        type: 'custom',\n        width: 'sm',\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 entities...',\n      searchableColumns: ['syen_name', 'syen_entity_code', 'syen_corporate_email'],\n      debounceMs: 300\n    },\n    loading: {\n      useDefer: true,\n      skeletonRows: 5,\n      showOverlay: false\n    },\n    responsive: true,\n    striped: false,\n    bordered: true,\n    compact: false,\n    fullHeight: true,\n    onRowClick: 'onEntityRowClick',\n    onRefresh: 'onEntityRefresh',\n    tree: {\n      enabled: true,\n      primaryKey: '_id',\n      foreignKey: 'syen_id_syen',\n      childrenKey: 'children',\n      levelKey: 'level',\n      expandedKey: 'isExpanded',\n      hasChildrenKey: 'hasChildren',\n      defaultExpandAll: true\n    }\n  });\n\n  // Template renderers for complex columns using computed signal\n  templateRenderers = computed((): Record<string, TemplateRef<TemplateContext<CoreSystemEntityListResponse>>> => ({\n    entityDetailsRenderer: this.entityDetailsRenderer(),\n    entityTypeRenderer: this.entityTypeRenderer(),\n    actionsDropdownRenderer: this.actionsDropdownRenderer()\n  }));\n\n\n  // Helper method to get entity type name for template\n  getEntityTypeName(row: CoreSystemEntityListResponse): string {\n    const entityTypeId = row.syen_entity_type_sygms;\n    \n    // If no entity type ID, return N/A\n    if (!entityTypeId) {\n      return 'N/A';\n    }\n    \n    // Check if entity_type_details exists in the row data (populated from backend)\n    const rowData = row as any;\n    if (rowData.entity_type_details?.sygms_title) {\n      return rowData.entity_type_details.sygms_title;\n    } else if (rowData.syen_entity_type_details?.sygms_title) {\n      return rowData.syen_entity_type_details.sygms_title;\n    } else if (rowData.syen_entity_type_sygms?.sygms_title) {\n      // If populated as object with title\n      return rowData.syen_entity_type_sygms.sygms_title;\n    }\n    \n    // Convert to string for lookup (handle ObjectId, string, or object with _id)\n    // Since syen_entity_type_sygms is typed as string | undefined, but could be populated as object\n    let entityTypeIdStr = '';\n    \n    // Type guard: if it's already a string, use it directly\n    if (typeof entityTypeId === 'string') {\n      entityTypeIdStr = entityTypeId;\n    } \n    // Handle case where it might be populated as an object (even though type says string)\n    else if (entityTypeId != null) {\n      // Type assertion to handle populated objects from backend\n      const entityTypeAny = entityTypeId as unknown;\n      \n      // Check if it's an object with _id property (populated reference)\n      if (typeof entityTypeAny === 'object' && entityTypeAny !== null) {\n        const entityTypeObj = entityTypeAny as Record<string, unknown>;\n        // Use bracket notation for index signature access\n        const idValue = entityTypeObj?.['_id'];\n        if (idValue != null) {\n          entityTypeIdStr = String(idValue);\n        } else {\n          // Try to convert the object itself to string\n          entityTypeIdStr = String(entityTypeAny);\n        }\n      } else {\n        // Fallback: convert to string\n        entityTypeIdStr = String(entityTypeAny);\n      }\n    }\n    \n    // Use lookup map to get entity type name\n    const entityTypeMap = this.entityTypeMap();\n    const entityTypeName = entityTypeMap.get(entityTypeIdStr);\n    \n    if (entityTypeName) {\n      return entityTypeName;\n    }\n    \n    // If map is still loading, show loading state\n    if (this.entityTypesLoading()) {\n      return 'Loading...';\n    }\n    \n    // Final fallback: return N/A if not found\n    return 'N/A';\n  }\n\n  // Type helper for templates - ensures proper typing in template context\n  $any = (value: any): any => value;\n\n  // Dropdown configuration with portal support\n  getDropdownConfig() {\n    return {};\n  }\n\n  // Dropdown methods\n  getDropdownItems(entity: CoreSystemEntityListResponse): DropdownItem[] {\n    const items: DropdownItem[] = [];\n    \n    if (this.canEdit()) {\n      items.push({\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    \n    if (this.canCreate()) {\n      items.push({\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    \n    if (this.canEdit()) {\n      items.push({\n        id: 'toggle',\n        label: entity.syen_isactive ? 'Deactivate' : 'Activate',\n        icon: 'power_settings_new',\n        iconColor: 'tw-text-orange-400',\n        textColor: 'tw-text-orange-600',\n        hoverBgColor: 'hover:tw-bg-orange-50'\n      });\n    }\n    \n    if (this.canDelete()) {\n      items.push({\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    return items;\n  }\n\n  onDropdownItemClick(item: DropdownItem, entity: CoreSystemEntityListResponse): void {\n    switch (item.id) {\n      case 'edit':\n        this.editEntity(entity);\n        break;\n      case 'addChild':\n        this.addChildEntity(entity);\n        break;\n      case 'toggle':\n        this.toggleEntityStatus(entity);\n        break;\n      case 'delete':\n        this.deleteEntity(entity);\n        break;\n      default:\n        console.log('Unknown action:', item.id);\n    }\n  }\n\n  private editEntity(entity: CoreSystemEntityListResponse): void {\n      const query: string = generateStringFromObject({\n        syen_id: entity._id\n    });\n      this.router.navigate(['control-panel', 'entity-create', query]);\n  }\n\n  private addChildEntity(entity: CoreSystemEntityListResponse): void {\n    console.log('Adding child entity for:', entity.syen_name);\n    // Navigate to entity create form with parent entity ID\n    const query: string = generateStringFromObject({\n      syen_parent_entity_id: entity._id\n    });\n    this.router.navigate(['control-panel', 'entity-create', query]);\n  }\n\n  private toggleEntityStatus(entity: CoreSystemEntityListResponse): void {\n    console.log('Toggling entity status for:', entity.syen_name);\n    const action = entity.syen_isactive ? 'deactivate' : 'activate';\n    const entityName = entity.syen_name || 'this entity';\n    \n    if (confirm(`Are you sure you want to ${action} ${entityName}?`)) {\n      // TODO: Implement actual API call to toggle entity status\n      console.log(`${action} entity:`, entity._id);\n      // For now, just reload the entities\n      this.loadEntities(true);\n    }\n  }\n\n  private deleteEntity(entity: CoreSystemEntityListResponse): void {\n      const entityName = entity.syen_name || 'this entity';\n      if (confirm(`Are you sure you want to delete ${entityName}?`)) {\n        this.onDeleteEntityConfirmed(entity._id || '');\n      }\n    }\n\n  // Action handlers (simplified since we're using dropdown)\n  actionHandlers = {};\n\n  ngOnInit() {\n    console.log('🔧 ENTITY LIST: Component initializing');\n    // Initialize rights for entity management\n    this.rightsService.initializeRights('core_entity_list');\n    this.updatePaginationState();\n\n    // Set initial loading state to false to allow grid to render\n    this.loading.set(false);\n\n    // Load entity types first, then load entities\n    this.loadEntityTypes();\n    this.loadEntities();\n  }\n\n  // Load entity types from general master\n  loadEntityTypes(): void {\n    this.entityTypesLoading.set(true);\n    \n    // Get entity type master list with code 'core_entity_type'\n    const payload: IGeneralMasterListRequest = {\n      sygmt_code: 'core_entity_type',\n      sygms_entity_id_syen: this.appState.getActiveEntityId() || undefined\n    };\n\n    this.generalMasterService.getMasterList(payload)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe({\n        next: (response: generalMasterListControllerResponse) => {\n          if (response.success && response.data) {\n            // Create a map of entity type ID -> Name\n            const typeMap = new Map<string, string>();\n            response.data.forEach((type: ICoreSygms) => {\n              if (type._id && type.sygms_title) {\n                typeMap.set(type._id.toString(), type.sygms_title);\n              }\n            });\n            this.entityTypeMap.set(typeMap);\n            console.log('✅ Entity types loaded:', typeMap.size, 'types');\n          }\n          this.entityTypesLoading.set(false);\n        },\n        error: (error: unknown) => {\n          console.error('Error loading entity types:', error);\n          this.entityTypesLoading.set(false);\n          // Continue even if entity types fail to load\n        }\n      });\n  }\n\n  // Grid event handler\n  onGridEvent(event: GridEvent<CoreSystemEntityListResponse>) {\n    console.log('📡 GRID EVENT: Received grid event:', event.type, event);\n\n    switch (event.type) {\n      case 'rowClick':\n        this.onEntityRowClick(event.data as CoreSystemEntityListResponse);\n        break;\n      case 'refresh':\n        this.onEntityRefresh();\n        break;\n      case 'search':\n        this.onEntitySearch(event.data as string);\n        break;\n      case 'pageChange':\n        this.onEntityPageChange(event.data as number);\n        break;\n      default:\n        console.log('Unhandled grid event:', event.type);\n    }\n  }\n\n  // Event handlers for grid events\n  private onEntityRowClick(entity: CoreSystemEntityListResponse) {\n    console.log('Entity row clicked:', entity);\n    this.router.navigate(['admin', 'entity', 'view', entity._id]);\n  }\n\n  private onEntityRefresh() {\n    console.log('Refreshing entities...');\n    this.loadEntities(true);\n  }\n\n  private onEntitySearch(query: string) {\n    console.log('Search entities:', query);\n    this.searchQuery.set(query ?? '');\n    this.currentPage.set(1);\n    this.loadEntities(false);\n  }\n\n  private onEntityPageChange(pageOrPayload: number | { page?: number; pageSize?: number }) {\n    const payload = pageOrPayload as { page?: number; pageSize?: number };\n    if (payload != null && typeof payload === 'object' && 'pageSize' in payload && typeof payload.pageSize === 'number') {\n      this.pageSize.set(payload.pageSize);\n      this.gridConfig.update(c => ({\n        ...c,\n        pagination: { ...c.pagination, pageSize: payload.pageSize! }\n      }));\n    }\n    const page = typeof pageOrPayload === 'number' ? pageOrPayload : (payload?.page ?? 1);\n    console.log('Page changed to:', page);\n    this.currentPage.set(page);\n    this.loadEntities(false);\n  }\n\n  private onDeleteEntityConfirmed(entityId: string) {\n    // In a real app, you'd call the API to delete\n    console.log('Deleting entity:', entityId);\n    // For now, just reload the entities\n    this.loadEntities(true);\n  }\n\n  // Update grid data method\n  private updateGridData(entities: CoreSystemEntityListResponse[]) {\n    console.log('📊 GRID UPDATE: Updating grid with', entities.length, 'entities');\n    console.log('📊 GRID UPDATE: Sample entity data:', entities[0] || 'No entities');\n\n    // Set the entities signal\n    this.entities.set(entities);\n\n    // Update grid configuration with new data, preserving current pageSize so it does not reset to 10 when data loads\n    this.gridConfig.update(config => ({\n      ...config,\n      data: entities,\n      pagination: { ...config.pagination, pageSize: this.pageSize() }\n    }));\n\n    // Ensure loading states are cleared\n    this.loading.set(false);\n    \n    // Clear page change loading state in the grid component\n    const gridComp = this.gridComponent();\n    if (gridComp) {\n      gridComp.clearPageChangeLoading();\n    }\n\n    console.log('📊 GRID UPDATE: Grid config updated successfully');\n    console.log('📊 GRID UPDATE: Current grid data length:', this.gridConfig().data.length);\n    console.log('📊 GRID UPDATE: Loading state:', this.loading());\n    console.log('📊 GRID UPDATE: Full grid config for debugging:', JSON.stringify(this.gridConfig(), null, 2));\n  }\n\n  loadEntities(isRefresh: boolean = false) {\n    if (isRefresh) {\n      console.log('🔄 ENTITY LIST: Refreshing entities');\n      // Set the grid's refresh state to true\n      const gridComp = this.gridComponent();\n      if (gridComp) {\n        gridComp.setRefreshing(true);\n      }\n    } else {\n      this.loading.set(true);\n      console.log('🔍 ENTITY LIST: Loading entities from API');\n    }\n    this.error.set(null);\n    this.loadStartTime = Date.now();\n\n    const payload = {\n      pageIndex: this.currentPage(),\n      pageSize: this.pageSize(),\n      ...(this.searchQuery()?.trim() ? { query: this.searchQuery().trim() } : {})\n    };\n    this.entityService.getEntityList(payload as any).subscribe({\n      next: (response: entityControllerResponse) => {\n        console.log('✅ ENTITY LIST: API response received:', response);\n\n        const entitiesData = response?.data\n          ? (Array.isArray(response.data) ? response.data : [response.data])\n          : [];\n        // Parse total robustly: API may return number or string (e.g. \"13\"); avoid using data length so pagination is correct\n        const rawTotal = response?.total;\n        const total =\n          typeof rawTotal === 'number' && Number.isFinite(rawTotal)\n            ? rawTotal\n            : typeof rawTotal === 'string'\n              ? parseInt(rawTotal, 10)\n              : Number(rawTotal);\n        const totalResolved = Number.isFinite(total) ? total : entitiesData.length;\n\n        this.totalItems.set(totalResolved);\n        this.updateGridData(entitiesData);\n        this.updatePaginationState();\n        this.loading.set(false);\n        \n        // Clear page change loading state in the grid component\n        const gridComp = this.gridComponent();\n        if (gridComp) {\n          gridComp.clearPageChangeLoading();\n        }\n        \n        // Set the grid's refresh state to false when done\n        if (isRefresh && gridComp) {\n          gridComp.setRefreshing(false);\n        }\n      },\n      error: (err: any) => {\n        console.error('❌ ENTITY LIST: API error:', err);\n        console.log('🧪 ENTITY LIST: API failed, loading test data for demonstration');\n\n        // Load test data when API fails\n        this.error.set('API unavailable. Showing sample data.');\n\n        this.loading.set(false);\n        \n        // Clear page change loading state in the grid component\n        const gridComp = this.gridComponent();\n        if (gridComp) {\n          gridComp.clearPageChangeLoading();\n        }\n        \n        // Set the grid's refresh state to false when done\n        if (isRefresh && gridComp) {\n          gridComp.setRefreshing(false);\n        }\n      }\n    });\n  }\n\n  private updatePaginationState() {\n    const total = Math.ceil(this.totalItems() / this.pageSize());\n    this.totalPages.set(total);\n    this.hasNextPage.set(this.currentPage() < total);\n    this.hasPreviousPage.set(this.currentPage() > 1);\n  }\n\n  onSearch() {\n    this.currentPage.set(1);\n    this.loadEntities();\n  }\n\n  onFilterChange() {\n    this.currentPage.set(1);\n    this.loadEntities();\n  }\n\n  onPageChange(page: number | string) {\n    if (parseInt(page as string) >= 1 && parseInt(page as string) <= this.totalPages()) {\n      this.currentPage.set(parseInt(page as string));\n      this.loadEntities();\n    }\n  }\n\n  onPageSizeChange() {\n    this.currentPage.set(1);\n    this.loadEntities();\n  }\n\n  onRefresh() {\n    this.loadEntities(true); // Pass true for refresh\n  }\n\n  onAddEntity() {\n    // Navigate to entity create form\n    this.router.navigate(['/control-panel/entity-create']);\n  }\n\n  onEditEntity(entity: CoreSystemEntityListResponse) {\n    // TODO: Implement edit functionality - navigate to edit form with entity ID\n    this.router.navigate(['/control-panel/entity-create'], {\n      queryParams: { id: entity._id, mode: 'edit' }\n    });\n    console.log('Edit entity:', entity);\n  }\n\n  onViewEntity(entity: CoreSystemEntityListResponse) {\n    // TODO: Implement view functionality\n    console.log('View entity:', entity);\n  }\n\n  onDeleteEntity(entity: CoreSystemEntityListResponse) {\n    if (confirm(`Are you sure you want to delete \"${entity.syen_name}\"?`)) {\n      // TODO: Implement delete functionality\n      console.log('Delete entity:', entity);\n    }\n  }\n\n  getStatusClass(isActive: boolean): string {\n    return isActive\n      ? 'tw-bg-green-100 tw-text-green-800'\n      : 'tw-bg-red-100 tw-text-red-800';\n  }\n\n  getStatusText(isActive: boolean): string {\n    return isActive ? 'Active' : 'Inactive';\n  }\n\n  formatDate(date: Date | string | undefined): string {\n    if (!date) return 'N/A';\n    return new Date(date).toLocaleDateString();\n  }\n\n  // Pagination helper methods\n  getPageNumbers(): number[] {\n    const total = this.totalPages();\n    const current = this.currentPage();\n    const delta = 2; // Number of pages to show on each side of current page\n\n    const pages: number[] = [];\n    const start = Math.max(1, current - delta);\n    const end = Math.min(total, current + delta);\n\n    for (let i = start; i <= end; i++) {\n      pages.push(i);\n    }\n\n    return pages;\n  }\n\n  getItemRangeText(): string {\n    const start = (this.currentPage() - 1) * this.pageSize() + 1;\n    const end = Math.min(this.currentPage() * this.pageSize(), this.totalItems());\n    const total = this.totalItems();\n\n    return `${start}-${end} of ${total}`;\n  }\n\n  trackByEntityId(index: number, entity: CoreSystemEntityListResponse): string {\n    return entity?._id || '';\n  }\n\n  // ===== Enhanced Pagination Methods =====\n\n  /**\n   * Get enhanced page numbers with ellipsis for better navigation\n   */\n  getEnhancedPageNumbers(): (number | string)[] {\n    const total = this.totalPages();\n    const current = this.currentPage();\n    const pages: (number | string)[] = [];\n\n    if (total <= 7) {\n      // Show all pages if 7 or fewer\n      for (let i = 1; i <= total; i++) {\n        pages.push(i);\n      }\n    } else {\n      // Always show first page\n      pages.push(1);\n\n      if (current <= 4) {\n        // Current page is near the beginning\n        for (let i = 2; i <= 5; i++) {\n          pages.push(i);\n        }\n        pages.push('...');\n        pages.push(total);\n      } else if (current >= total - 3) {\n        // Current page is near the end\n        pages.push('...');\n        for (let i = total - 4; i <= total; i++) {\n          pages.push(i);\n        }\n      } else {\n        // Current page is in the middle\n        pages.push('...');\n        for (let i = current - 1; i <= current + 1; i++) {\n          pages.push(i);\n        }\n        pages.push('...');\n        pages.push(total);\n      }\n    }\n\n    return pages;\n  }\n\n  /**\n   * Calculate progress percentage based on current position\n   */\n  getProgressPercentage(): number {\n    if (this.totalPages() === 0) return 0;\n    return Math.round((this.currentPage() / this.totalPages()) * 100);\n  }\n\n  /**\n   * Jump to specific page functionality\n   */\n  onJumpToPage(): void {\n    if (this.jumpToPage >= 1 && this.jumpToPage <= this.totalPages()) {\n      this.onPageChange(this.jumpToPage);\n    }\n  }\n\n  /**\n   * Get simulated load time for performance display\n   */\n  getLoadTime(): number {\n    return this.loadStartTime > 0 ? Date.now() - this.loadStartTime : 0;\n  }\n\n  /**\n   * Get total data size for display\n   */\n  getTotalDataSize(): number {\n    return this.totalItems();\n  }\n\n  /**\n   * Export current page entities\n   */\n  onExportCurrentPage(): void {\n    const currentPageEntities = this.entities();\n    console.log('Exporting current page:', currentPageEntities);\n    // TODO: Implement actual export functionality\n    alert(`Exporting ${currentPageEntities.length} entities from current page`);\n  }\n\n  /**\n   * Export all entities\n   */\n  onExportAll(): void {\n    console.log('Exporting all entities');\n    // TODO: Implement actual export functionality\n    alert(`Exporting all ${this.totalItems()} entities`);\n  }\n\n  /**\n   * Navigate to organization structure page\n   */\n  onOrgStructure(): void {\n    this.router.navigate(['/control-panel/org-structure']);\n  }\n} ","<!-- Entity List with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_entity_list' }\">\n  <!-- Breadcrumb Actions: Org Structure Button -->\n  <div breadcrumb-actions class=\"tw-flex tw-justify-end tw-items-center tw-gap-2\">\n    <button cideEleButton variant=\"secondary\" size=\"xs\" (click)=\"onOrgStructure()\" [adaptive]=\"true\"\n      class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\n      <cide-ele-icon size=\"xs\" class=\"tw-w-6 tw-h-5\">account_tree</cide-ele-icon>\n      Org Structure\n    </button>\n\n    <!-- Add Entity Button -->\n    @if (canCreate()) {\n    <button cideEleButton variant=\"primary\" size=\"xs\" (click)=\"router.navigate(['control-panel', 'entity-create'])\"\n      [adaptive]=\"true\" class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\n      <cide-ele-icon size=\"xs\" class=\"tw-w-6 tw-h-5\">add</cide-ele-icon>\n      Add Entity\n    </button>\n    }\n\n  </div>\n\n  <div class=\"entity-list-container tw-bg-white tw-shadow-lg tw-rounded-lg tw-overflow-hidden\">\n\n    <!-- Data Grid Component - API-side pagination: one request per page/size/search -->\n    <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers()\"\n      [actionHandlers]=\"actionHandlers\" [serverSidePagination]=\"true\"\n      [totalServerItems]=\"totalItems()\" [currentServerPage]=\"currentPage()\"\n      [currentServerPageSize]=\"pageSize()\" (gridEvent)=\"onGridEvent($event)\">\n    </cide-ele-data-grid>\n\n  </div>\n\n  <!-- Custom Renderer Templates -->\n\n  <!-- Entity Details Renderer Template -->\n  <!-- Context: { $implicit: unknown, row: entityResponseData, value: unknown, column: GridColumn } -->\n  <ng-template #entityDetailsRenderer let-value=\"value\" let-entity=\"row\">\n    <div class=\"tw-flex tw-items-center tw-space-x-3\">\n      <div\n        class=\"tw-flex-shrink-0 tw-w-10 tw-h-10 tw-bg-blue-100 tw-rounded-full tw-flex tw-items-center tw-justify-center\">\n        <span class=\"tw-text-blue-600 tw-font-semibold tw-text-sm\">\n          {{ (entity.syen_entity_code || 'NA').substring(0, 2).toUpperCase() }}\n        </span>\n      </div>\n      <div class=\"tw-flex-1 tw-min-w-0\">\n        <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\"\n          [title]=\"entity.syen_name || 'Unknown Entity'\">\n          {{ entity.syen_name || 'Unknown Entity' }}\n        </p>\n        <p class=\"tw-text-sm tw-text-gray-500 tw-truncate\" [title]=\"entity.syen_entity_code || 'N/A'\">\n          Code: {{ entity.syen_entity_code || 'N/A' }}\n        </p>\n      </div>\n    </div>\n  </ng-template>\n\n\n  <!-- Entity Type Renderer Template -->\n  <!-- Context: { $implicit: unknown, row: entityResponseData, value: unknown, column: GridColumn } -->\n  <ng-template #entityTypeRenderer let-value=\"value\" let-entity=\"row\">\n    <div class=\"tw-flex tw-flex-col tw-items-center tw-space-y-1\">\n      <span class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"getEntityTypeName(entity)\">\n        {{ getEntityTypeName(entity) }}\n      </span>\n    </div>\n  </ng-template>\n\n  <!-- Actions Dropdown Renderer Template -->\n  <!-- Context: { $implicit: unknown, row: entityResponseData, value: unknown, column: GridColumn } -->\n  <ng-template #actionsDropdownRenderer let-value=\"value\" let-entity=\"row\">\n    <cide-ele-dropdown [items]=\"getDropdownItems(entity)\" [config]=\"getDropdownConfig()\"\n      (itemClick)=\"onDropdownItemClick($event, entity)\">\n    </cide-ele-dropdown>\n  </ng-template>\n</cide-lyt-shared-wrapper>","import { Component, OnInit, inject, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Router } from '@angular/router';\r\nimport { CideCoreEntityManagementService } from '../../services/entity-management.service';\r\nimport { CideSharedOrgStructureComponent } from 'cloud-ide-shared';\r\nimport { CideLytSharedWrapperComponent } from 'cloud-ide-layout';\r\nimport { CideIconComponent, CideEleButtonComponent } from 'cloud-ide-element';\r\nimport { CoreSystemEntityListResponse } from 'cloud-ide-lms-model';\r\n\r\n@Component({\r\n  selector: 'cide-core-org-structure',\r\n  imports: [\r\n    CommonModule,\r\n    CideSharedOrgStructureComponent,\r\n    CideIconComponent,\r\n    CideEleButtonComponent,\r\n    CideLytSharedWrapperComponent\r\n  ],\r\n  template: `\r\n    <cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'org_structure' }\">\r\n      <div breadcrumb-actions class=\"tw-flex tw-items-center tw-gap-2\">\r\n        <button cideEleButton variant=\"outline\" size=\"xs\" (click)=\"onBack()\" class=\"tw-whitespace-nowrap tw-flex tw-items-center\">\r\n          <cide-ele-icon size=\"xs\" class=\"tw-w-6 tw-h-5\">arrow_back</cide-ele-icon>\r\n          Back to Entities\r\n        </button>\r\n        <button cideEleButton variant=\"outline\" size=\"xs\" (click)=\"orgStructureRef.expandAll()\" class=\"tw-whitespace-nowrap tw-flex tw-items-center\">\r\n          <cide-ele-icon size=\"xs\" class=\"tw-w-6 tw-h-5\">unfold_more</cide-ele-icon>\r\n          Expand all\r\n        </button>\r\n        <button cideEleButton variant=\"outline\" size=\"xs\" (click)=\"orgStructureRef.collapseAll()\" class=\"tw-whitespace-nowrap tw-flex tw-items-center\">\r\n          <cide-ele-icon size=\"xs\" class=\"tw-w-6 tw-h-5\">unfold_less</cide-ele-icon>\r\n          Collapse all\r\n        </button>\r\n      </div>\r\n\r\n      <cide-shared-org-structure\r\n        #orgStructureRef\r\n        [allowSwitching]=\"allowSwitching()\"\r\n        [showActions]=\"showActions()\"\r\n        [mode]=\"mode()\"\r\n        (entityClick)=\"onEntityClick($event)\"\r\n        (entitySelect)=\"onEntitySelect($event)\"\r\n        (entityView)=\"onEntityView($event)\">\r\n      </cide-shared-org-structure>\r\n    </cide-lyt-shared-wrapper>\r\n  `,\r\n  styleUrl: './org-structure.component.scss'\r\n})\r\nexport class CideCoreOrgStructureComponent implements OnInit {\r\n  allowSwitching = input<boolean>(true);\r\n  showActions = input<boolean>(true);\r\n  mode = input<'selection' | 'view'>('view');\r\n\r\n  // Output events\r\n  entityClick = output<CoreSystemEntityListResponse>(); // Emit when entity is clicked\r\n  entitySelect = output<CoreSystemEntityListResponse>(); // Emit when entity is selected for switching\r\n  entityView = output<CoreSystemEntityListResponse>(); // Emit when entity is viewed\r\n\r\n  private entityService = inject(CideCoreEntityManagementService);\r\n  public router = inject(Router);\r\n\r\n  ngOnInit(): void {\r\n    // No initialization needed - shared component handles everything\r\n  }\r\n\r\n  /**\r\n   * Navigate back to entity list\r\n   */\r\n  onBack(): void {\r\n    this.router.navigate(['/control-panel/entity-list']);\r\n  }\r\n\r\n  /**\r\n   * Handle entity click event from shared org structure\r\n   */\r\n  onEntityClick(entity: CoreSystemEntityListResponse): void {\r\n    this.entityClick.emit(entity);\r\n  }\r\n\r\n  /**\r\n   * Handle entity select event from shared org structure\r\n   */\r\n  onEntitySelect(entity: CoreSystemEntityListResponse): void {\r\n    this.entitySelect.emit(entity);\r\n  }\r\n\r\n  /**\r\n   * Handle entity view event from shared org structure\r\n   */\r\n  onEntityView(entity: CoreSystemEntityListResponse): void {\r\n    this.entityView.emit(entity);\r\n  }\r\n}","// Entity Management Components\r\nexport * from './components/entity-create/entity-create.component';\r\nexport * from './components/entity-list/entity-list.component';\r\nexport * from './components/org-structure/org-structure.component';\r\n\r\n// Entity Management Services\r\nexport * from './services/entity-management.service';\r\n\r\n","import { Component, input, output, inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CideEleButtonComponent, CideIconComponent } from 'cloud-ide-element';\r\nimport { CoreSystemEntityListResponse } from 'cloud-ide-lms-model';\r\nimport { CideEleFloatingContainerService } from 'cloud-ide-element';\r\n\r\n@Component({\r\n  selector: 'cide-entity-selection-drawer',\r\n  standalone: true,\r\n  imports: [CommonModule, CideEleButtonComponent, CideIconComponent],\r\n  template: `\r\n    <div class=\"tw-flex tw-flex-col tw-h-full\">\r\n      <!-- Content -->\r\n      <div class=\"tw-flex-1 tw-overflow-y-auto tw-p-3\">\r\n        <!-- Available Entities List -->\r\n        <div class=\"tw-space-y-1.5\">\r\n          @for (entity of entities(); track entity._id) {\r\n            @if (entity._id) {\r\n              <button \r\n                type=\"button\"\r\n                (click)=\"onEntitySelect(entity._id)\"\r\n                class=\"tw-w-full tw-text-left tw-px-3 tw-py-2 tw-border tw-border-gray-200 dark:tw-border-gray-700 tw-rounded-md tw-transition-all hover:tw-border-blue-400 dark:hover:tw-border-blue-500 hover:tw-bg-blue-50 dark:hover:tw-bg-blue-900/20 tw-bg-white dark:tw-bg-gray-800 tw-cursor-pointer tw-text-sm\">\r\n                <div class=\"tw-flex tw-items-center tw-justify-between tw-gap-2\">\r\n                  <div class=\"tw-flex-1 tw-min-w-0\">\r\n                    <div class=\"tw-font-medium tw-text-gray-900 dark:tw-text-gray-100 tw-truncate\">{{ entity.syen_name }}</div>\r\n                    @if (entity.syen_entity_code) {\r\n                      <div class=\"tw-text-xs tw-text-gray-500 dark:tw-text-gray-400 tw-truncate\">{{ entity.syen_entity_code }}</div>\r\n                    }\r\n                  </div>\r\n                  <cide-ele-icon variant=\"blue\" size=\"xs\" class=\"tw-flex-shrink-0\">arrow_forward</cide-ele-icon>\r\n                </div>\r\n              </button>\r\n            }\r\n          } @empty {\r\n            <div class=\"tw-text-center tw-py-6 tw-text-gray-500 dark:tw-text-gray-400\">\r\n              <cide-ele-icon variant=\"gray\" size=\"md\" class=\"tw-mb-1\">info</cide-ele-icon>\r\n              <p class=\"tw-text-xs\">All available entities are already mapped.</p>\r\n            </div>\r\n          }\r\n        </div>\r\n      </div>\r\n\r\n      <!-- Footer -->\r\n      <div class=\"tw-border-t tw-border-gray-200 dark:tw-border-gray-700 tw-px-3 tw-py-2 tw-flex tw-justify-end tw-flex-shrink-0 tw-bg-white dark:tw-bg-gray-800\">\r\n        <button \r\n          cideEleButton \r\n          variant=\"secondary\" \r\n          size=\"xs\" \r\n          type=\"button\" \r\n          (click)=\"onCancel()\">\r\n          Cancel\r\n        </button>\r\n      </div>\r\n    </div>\r\n  `,\r\n  styles: []\r\n})\r\nexport class EntitySelectionDrawerComponent {\r\n  entities = input.required<CoreSystemEntityListResponse[]>();\r\n  entitySelect = output<string>();\r\n  cancel = output<void>();\r\n\r\n  private floatingContainerService = inject(CideEleFloatingContainerService);\r\n\r\n  onEntitySelect(entityId: string): void {\r\n    this.entitySelect.emit(entityId);\r\n    // Close the floating container after selection\r\n    this.floatingContainerService.hide('entity-selection-for-mapping');\r\n  }\r\n\r\n  onCancel(): void {\r\n    this.cancel.emit();\r\n    // Close the floating container on cancel\r\n    this.floatingContainerService.hide('entity-selection-for-mapping');\r\n  }\r\n}\r\n\r\n\r\n\r\n\r\n","import { Component, input, output, inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CideEleButtonComponent, CideIconComponent } from 'cloud-ide-element';\r\nimport { CoreSystemEntityListResponse } from 'cloud-ide-lms-model';\r\nimport { CideEleFloatingContainerService } from 'cloud-ide-element';\r\n\r\nexport interface EntityMappingForCopy {\r\n  entityId: string;\r\n  entityName: string;\r\n  entityCode?: string;\r\n  roleId?: string;\r\n  roleName?: string;\r\n}\r\n\r\n@Component({\r\n  selector: 'cide-copy-role-from-entity-drawer',\r\n  standalone: true,\r\n  imports: [CommonModule, CideEleButtonComponent, CideIconComponent],\r\n  template: `\r\n    <div class=\"tw-flex tw-flex-col tw-h-full\">\r\n      <!-- Header Description -->\r\n      <div class=\"tw-px-3 tw-py-2 tw-bg-blue-50 dark:tw-bg-blue-900/20 tw-border-b tw-border-blue-200 dark:tw-border-blue-700\">\r\n        <p class=\"tw-text-xs tw-text-blue-700 dark:tw-text-blue-300 tw-m-0\">\r\n          Select an entity mapping to copy role, department, designation, and menu rights from.\r\n        </p>\r\n      </div>\r\n\r\n      <!-- Content -->\r\n      <div class=\"tw-flex-1 tw-overflow-y-auto tw-p-3\">\r\n        <!-- Entity Mappings List -->\r\n        <div class=\"tw-space-y-2\">\r\n          @for (mapping of entityMappings(); track mapping.entityId) {\r\n            @if (mapping.entityId) {\r\n              <button \r\n                type=\"button\"\r\n                (click)=\"onMappingSelect(mapping.entityId)\"\r\n                class=\"tw-w-full tw-text-left tw-px-3 tw-py-3 tw-border tw-border-gray-200 dark:tw-border-gray-700 tw-rounded-md tw-transition-all hover:tw-border-blue-400 dark:hover:tw-border-blue-500 hover:tw-bg-blue-50 dark:hover:tw-bg-blue-900/20 tw-bg-white dark:tw-bg-gray-800 tw-cursor-pointer\">\r\n                <div class=\"tw-flex tw-items-start tw-justify-between tw-gap-2\">\r\n                  <div class=\"tw-flex-1 tw-min-w-0\">\r\n                    <div class=\"tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100 tw-mb-1\">\r\n                      {{ mapping.entityName }}\r\n                    </div>\r\n                    @if (mapping.entityCode) {\r\n                      <div class=\"tw-text-xs tw-text-gray-500 dark:tw-text-gray-400 tw-mb-1\">\r\n                        {{ mapping.entityCode }}\r\n                      </div>\r\n                    }\r\n                    @if (mapping.roleName) {\r\n                      <div class=\"tw-flex tw-items-center tw-gap-1 tw-mt-2\">\r\n                        <cide-ele-icon variant=\"blue\" size=\"xs\">admin_panel_settings</cide-ele-icon>\r\n                        <span class=\"tw-text-xs tw-text-blue-600 dark:tw-text-blue-400 tw-font-medium\">\r\n                          Role: {{ mapping.roleName }}\r\n                        </span>\r\n                      </div>\r\n                    }\r\n                  </div>\r\n                  <cide-ele-icon variant=\"blue\" size=\"sm\" class=\"tw-flex-shrink-0\">content_copy</cide-ele-icon>\r\n                </div>\r\n              </button>\r\n            }\r\n          } @empty {\r\n            <div class=\"tw-text-center tw-py-8 tw-text-gray-500 dark:tw-text-gray-400\">\r\n              <cide-ele-icon variant=\"gray\" size=\"lg\" class=\"tw-mb-2\">info</cide-ele-icon>\r\n              <p class=\"tw-text-sm tw-font-medium tw-mb-1\">No Entity Mappings Available</p>\r\n              <p class=\"tw-text-xs\">You need at least one entity mapping to copy from.</p>\r\n            </div>\r\n          }\r\n        </div>\r\n      </div>\r\n\r\n      <!-- Footer -->\r\n      <div class=\"tw-border-t tw-border-gray-200 dark:tw-border-gray-700 tw-px-3 tw-py-2 tw-flex tw-justify-end tw-flex-shrink-0 tw-bg-white dark:tw-bg-gray-800\">\r\n        <button \r\n          cideEleButton \r\n          variant=\"secondary\" \r\n          size=\"xs\" \r\n          type=\"button\" \r\n          (click)=\"onCancel()\">\r\n          Cancel\r\n        </button>\r\n      </div>\r\n    </div>\r\n  `,\r\n  styles: []\r\n})\r\nexport class CopyRoleFromEntityDrawerComponent {\r\n  entityMappings = input.required<EntityMappingForCopy[]>();\r\n  mappingSelect = output<string>();\r\n  cancel = output<void>();\r\n\r\n  private floatingContainerService = inject(CideEleFloatingContainerService);\r\n\r\n  onMappingSelect(entityId: string): void {\r\n    this.mappingSelect.emit(entityId);\r\n    // Close the floating container after selection\r\n    this.floatingContainerService.hide('copy-role-from-entity');\r\n  }\r\n\r\n  onCancel(): void {\r\n    this.cancel.emit();\r\n    // Close the floating container on cancel\r\n    this.floatingContainerService.hide('copy-role-from-entity');\r\n  }\r\n}\r\n\r\n\r\n\r\n\r\n","import { Component, inject, signal, OnInit, OnDestroy, DestroyRef, ChangeDetectorRef, computed, effect } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, FormsModule, Validators, FormArray, AbstractControl, ValidationErrors } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideTextareaComponent, CideEleButtonComponent, CideEleTabComponent, TabItem, CideSelectComponent, CideEleDataGridComponent, GridConfiguration, GridEvent, TemplateContext, CideEleToastNotificationComponent, CideFormFieldErrorComponent, CideEleCardComponent } from 'cloud-ide-element';\nimport {\n  CideCoreUserMasterService\n} from '../../services';\nimport { CideInputComponent } from 'cloud-ide-element';\nimport { CideCoreUserRoleService } from '../../../user-role-management/services/user-role.service';\nimport { CideIconComponent, CideEleFileInputComponent, CideEleFileImageDirective } from \"cloud-ide-element\";\nimport { MenuManagementService } from '../../../menu-management';\nimport { TemplateRef, viewChild } from '@angular/core';\nimport {\n  authUserMstGetByIdControllerResponse, AuthUserMstGetByIdPayload,\n  generateObjectFromString, customEncrypt, CoreSystemEntityListResponse,\n  AuthUserMstGetByIdData, ICoreSydsg, ICoreSydept, designationControllerResponse,\n  AuthUserCoreEntityMapping, CoreEntityMapping, pinCodeSelectControllerResponse,\n  pinCodeSelectResponseData, countryListControllerResponse, ICoreSyctr,\n  AuthUserMstCreatePayload, AuthUserMst, generalMasterListControllerResponse,\n  ICoreSygms, AuthUserCoreUserContactAddresses, CoreUserContactAddresses,\n  AuthUserCoreUserDocuments, AuthUserCoreUserFamilyDetails, customDecrypt, ICoreSyme,\n  MMenuListPayload, IGeneralMasterListRequest,\n  CoreUserRoleResponse,\n  CoreUserRoleRightsResponse,\n  CoreUserRolePermissionData,\n  selectSearchType,\n  CoreUserRoleExceptionsMapping,\n  inputType,\n  CoreEntityAccessPassManagement,\n  CoreUserTypeMapping\n} from 'cloud-ide-lms-model';\nimport { AppStateHelperService, RightsService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { CideLytFloatingEntityRightsSharingService } from 'cloud-ide-layout';\nimport { CideEleFloatingFeaturesService, CideEleFileManagerService, CideEleFloatingContainerService, FloatingContainerConfig } from 'cloud-ide-element';\nimport { NotificationService } from 'cloud-ide-element';\nimport { mongooseObjectIdCreateControllerResponse } from 'cloud-ide-element';\nimport { SharedObjectIdService } from 'cloud-ide-shared';\nimport { CideCoreEntityManagementService } from '../../../entity-management';\nimport { CideCoreDepartmentManagementService } from '../../../department-management';\nimport { CideCoreDesignationManagementService } from '../../../designation-management';\nimport { CideCoreGeneralMasterService } from '../../../general-master-management';\nimport { CideCoreGeneralMasterTypeService } from '../../../general-master-management/services/general-master-type.service';\nimport { CideCorePinCodeService } from '../../../shared/services/pin-code.service';\nimport { CideCoreCountryService } from '../../../shared/services/country.service';\nimport { CoreUserRoleExceptions } from 'cloud-ide-lms-model';\nimport { EntitySelectionDrawerComponent } from './entity-selection-drawer.component';\nimport { CopyRoleFromEntityDrawerComponent, EntityMappingForCopy } from './copy-role-from-entity-drawer.component';\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    CideFormFieldErrorComponent,\n    CideLytSharedWrapperComponent,\n    CideEleCardComponent\n  ],\n  templateUrl: './user-create.component.html',\n  styles: [`\n    :host ::ng-deep .entity-mapping-card {\n      transition: all 0.2s ease;\n    }\n    \n    :host ::ng-deep .entity-mapping-card:hover {\n      transform: translateY(-2px);\n    }\n    \n    :host ::ng-deep .entity-mapping-card .cide-card-header {\n      background: linear-gradient(135deg, rgba(59, 130, 246, 0.05) 0%, rgba(147, 51, 234, 0.05) 100%);\n      border-bottom: 1px solid rgba(59, 130, 246, 0.1);\n    }\n    \n    :host ::ng-deep .dark .entity-mapping-card .cide-card-header {\n      background: linear-gradient(135deg, rgba(59, 130, 246, 0.1) 0%, rgba(147, 51, 234, 0.1) 100%);\n      border-bottom: 1px solid rgba(59, 130, 246, 0.2);\n    }\n    \n    :host ::ng-deep .entity-mapping-card .cide-card-header-content {\n      font-weight: 600;\n    }\n    \n    :host ::ng-deep .entity-mapping-card .cide-card-body {\n      background: linear-gradient(180deg, rgba(249, 250, 251, 0.5) 0%, rgba(255, 255, 255, 0.5) 100%);\n    }\n    \n    :host ::ng-deep .dark .entity-mapping-card .cide-card-body {\n      background: linear-gradient(180deg, rgba(17, 24, 39, 0.5) 0%, rgba(31, 41, 55, 0.5) 100%);\n    }\n  `]\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 floatingContainerService = inject(CideEleFloatingContainerService);\n  private fileManagerService = inject(CideEleFileManagerService);\n  private sharedObjectIdService = inject(SharedObjectIdService);\n  private entityRightsService = inject(CideLytFloatingEntityRightsSharingService);\n  private notificationService = inject(NotificationService);\n  private rightsService = inject(RightsService);\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  // Check if viewing own profile (for disabling entity mapping modifications)\n  isViewingOwnProfile = computed(() => {\n    const routeUserId = this.userId();\n    const currentUserId = this.appState.currentUser()?._id;\n    return routeUserId && currentUserId && routeUserId === currentUserId;\n  });\n\n  // User type information from route data (TEACHER, STUDENT, USER, etc.)\n  userType = signal<string | null>(null);\n  typeSpecificId = signal<string | null>(null);\n\n  // Track if userType came from query params/route data (to disable dropdown)\n  userTypeFromQueryParams = signal<boolean>(false);\n\n  // Computed signal to check if type-specific ID should be visible (only for STUDENT and TEACHER/FACULTY)\n  showTypeSpecificId = computed(() => {\n    const type = this.userType()?.toUpperCase();\n    return type === 'STUDENT' || type === 'TEACHER' || type === 'FACULTY';\n  });\n\n  userTypeOptions = [\n    { value: 'STUDENT', label: 'Student' },\n    { value: 'TEACHER', label: 'Faculty/Teacher' },\n    { value: 'EMPLOYEE', label: 'Employee' },\n    { value: 'PARENT', label: 'Parent' },\n    { value: 'GUARDIAN', label: 'Guardian' },\n    { value: 'ADMIN', label: 'Admin' },\n    { value: 'STAFF', label: 'Staff' },\n    { value: 'OTHER', label: 'Other' }\n  ];\n\n  // Page code based on user type for breadcrumb\n  pageCode = computed(() => {\n    const type = this.userType()?.toUpperCase();\n    if (type === 'TEACHER' || type === 'FACULTY') {\n      return 'academics_teacher_create';\n    } else if (type === 'STUDENT') {\n      return 'academics_student_create';\n    }\n    return 'core_user_management_create'; // Default page code\n  });\n\n  // Breadcrumb data based on user type\n  // Note: Only add items that come AFTER the current page (which is already included by shared wrapper)\n  // Do NOT include \"Home\" as it's already shown as an icon by the breadcrumb component\n  // Do NOT include the list page if it's the same as the current page title\n  breadcrumbData = computed(() => {\n    const type = this.userType()?.toUpperCase();\n    const breadcrumbs: { id: string; label: string; icon?: string; url?: string }[] = [];\n\n    // Only add the \"Create/Edit\" action item since module and list page are already in default breadcrumbs\n    if (type === 'TEACHER' || type === 'FACULTY') {\n      breadcrumbs.push(\n        { id: 'teacher-create', label: this.isEditMode() ? 'Edit Faculty' : 'Create Faculty', icon: this.isEditMode() ? 'edit' : 'add' }\n      );\n    } else if (type === 'STUDENT') {\n      breadcrumbs.push(\n        { id: 'student-create', label: this.isEditMode() ? 'Edit Student' : 'Create Student', icon: this.isEditMode() ? 'edit' : 'add' }\n      );\n    } else {\n      breadcrumbs.push(\n        { id: 'user-create', label: this.isEditMode() ? 'Edit User' : 'Create User', icon: this.isEditMode() ? 'edit' : 'add' }\n      );\n    }\n\n    return breadcrumbs;\n  });\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  allUserTypeMappings = signal<CoreUserTypeMapping[]>([]); // All user type mappings across all entities\n\n  // Track target mapping index for copying role from another entity\n  targetMappingIndexForCopy = signal<number | null>(null);\n\n  // Cache for role permissions to avoid redundant API calls\n  private rolePermissionsCache = signal<{ [roleId: string]: any }>({});\n\n  // Track which mappings have already loaded their data (to avoid redundant loads)\n  private loadedMappingData = new Set<number>();\n\n  // Entity selection state\n  selectedEntityForMapping = signal<string | null>(null);\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/update/delete core_user_role_exceptions\n   * \n   * Logic:\n   * - If modified !== actual: create/update exception\n   * - If modified === actual BUT exception exists in DB: delete exception\n   * - If modified === actual AND no exception exists: do nothing\n   * - Also process all existing exceptions from DB to ensure nothing is missed\n   */\n  processRoleExceptions(): CoreUserRoleExceptions[] {\n    const exceptions: CoreUserRoleExceptions[] = [];\n    const processedExceptionKeys = new Set<string>(); // Track processed exceptions to avoid duplicates\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      const mappingWithExceptions = mapping as AuthUserCoreEntityMapping & { exceptions?: CoreUserRoleExceptionsMapping[] };\n      const existingExceptions = mappingWithExceptions.exceptions || [];\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            // Find existing exception for this menu/permission combination\n            const existingException = this.findExistingException(\n              this.userId() || '',\n              mapping._id || '',\n              permissionId,\n              menu._id || ''\n            );\n\n            // Create a unique key for this exception\n            const exceptionKey = `${mapping._id || ''}_${menu._id || ''}_${permissionId}`;\n            processedExceptionKeys.add(exceptionKey);\n\n            // Check if permission was modified (different from actual role permission)\n            if (permissionData.modified !== permissionData.actual) {\n              // Create or update exception\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/updated 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            } else if (existingException && existingException._id) {\n              // Modified === actual, but exception exists in DB - mark for deletion\n              const exceptionToDelete: CoreUserRoleExceptions & { isDelete: boolean } = {\n                _id: existingException._id,\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: false, // Not used for deletion, but required by type\n                isDelete: true\n              };\n\n              exceptions.push(exceptionToDelete);\n\n              console.log(`🗑️ Exception marked for deletion (modified === actual) for mapping ${mappingIndex}, menu ${menu.syme_title}, permission ${permissionData.permission?.sygms_title}:`, {\n                actual: permissionData.actual,\n                modified: permissionData.modified,\n                exceptionId: existingException._id\n              });\n            }\n          });\n        }\n      });\n\n      // CRITICAL: Process ALL existing exceptions from DB, even if not in current menu rights\n      // This ensures we don't miss any exceptions that should be deleted\n      existingExceptions.forEach((existingException: CoreUserRoleExceptionsMapping) => {\n        if (existingException._id) {\n          const exceptionKey = `${existingException.syusrex_user_entity_mapping_id_syenm || ''}_${existingException.syusrex_menu_id_syme || ''}_${existingException.syusrex_role_permissions_id_sygms || ''}`;\n\n          // If this exception wasn't processed above, we need to decide what to do with it\n          if (!processedExceptionKeys.has(exceptionKey)) {\n            // Find the corresponding menu and permission to check current state\n            const menuRights = this.menuRightsMap()[mappingIndex.toString()] || [];\n            const menu = menuRights.find((m: MenuWithPermissions) => m._id === existingException.syusrex_menu_id_syme);\n\n            if (menu && menu._permissionValues) {\n              // Menu exists in current rights - check permission state\n              const permissionId = existingException.syusrex_role_permissions_id_sygms?.toString() || '';\n              const permissionData = menu._permissionValues[permissionId];\n\n              if (permissionData) {\n                // Permission exists - if modified === actual, delete the exception\n                if (permissionData.modified === permissionData.actual) {\n                  const exceptionToDelete: CoreUserRoleExceptions & { isDelete: boolean } = {\n                    _id: existingException._id,\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: false,\n                    isDelete: true\n                  };\n\n                  exceptions.push(exceptionToDelete);\n                  console.log(`🗑️ Exception marked for deletion (permission matches role): ${existingException._id}`);\n                }\n                // If modified !== actual, it should have been processed above, so we don't need to do anything\n              } else {\n                // Permission doesn't exist in menu - this shouldn't happen, but mark for deletion to be safe\n                const exceptionToDelete: CoreUserRoleExceptions & { isDelete: boolean } = {\n                  _id: existingException._id,\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: false,\n                  isDelete: true\n                };\n\n                exceptions.push(exceptionToDelete);\n                console.log(`🗑️ Exception marked for deletion (permission not found in menu): ${existingException._id}`);\n              }\n            } else {\n              // Menu doesn't exist in current rights - mark for deletion\n              // This handles cases where menu was removed or user no longer has access\n              const exceptionToDelete: CoreUserRoleExceptions & { isDelete: boolean } = {\n                _id: existingException._id,\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: existingException.syusrex_role_permissions_id_sygms?.toString() || '',\n                syusrex_menu_id_syme: existingException.syusrex_menu_id_syme?.toString() || '',\n                syusrex_isactive: true,\n                syusrex_status: false,\n                isDelete: true\n              };\n\n              exceptions.push(exceptionToDelete);\n              console.log(`🗑️ Exception marked for deletion (menu not in current rights): ${existingException._id}`);\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      syutm_user_type: [''],\n      syutm_type_specific_id: [''],\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    // Watch for page code changes and re-initialize rights when userType changes\n    effect(() => {\n      console.log('🔐 Page code changed:', this.pageCode());\n      const currentPageCode = this.pageCode();\n      if (!currentPageCode) return;\n\n      // Re-initialize rights when page code changes (due to userType change)\n      // Check if already initialized for this page code to prevent infinite loops\n      if (this.rightsService.getCurrentPageCode() !== currentPageCode) {\n        this.rightsService.initializeRights(currentPageCode);\n        console.log('🔐 Rights re-initialized for page code:', currentPageCode);\n      } else {\n        console.log('🔐 Rights already initialized for page code:', currentPageCode);\n      }\n    });\n\n    // Refetch GM-backed dropdowns when general master list is invalidated elsewhere\n    effect(() => {\n      if (this.CideCoreGeneralMasterService.listInvalidated() > 0) this.loadDropdownOptions();\n    });\n\n    // Refetch menu dropdown when menu list is invalidated elsewhere\n    effect(() => {\n      if (this.menuService.listInvalidated() > 0) this.loadMenuOptions();\n    });\n\n    // Refetch department dropdowns when department list is invalidated elsewhere\n    effect(() => {\n      if (this.departmentService.listInvalidated() > 0) {\n        this.departmentOptions.set({});\n        const arr = this.entityMappingsFormArray;\n        for (let i = 0; i < arr.length; i++) {\n          const mappingGroup = arr.at(i);\n          const entityValue = mappingGroup.get('syenm_entity_id_syen')?.value;\n          const entityId = entityValue == null ? '' : (typeof entityValue === 'string' ? entityValue : (entityValue as { _id?: string })._id || '');\n          if (entityId) this.loadDepartmentsForEntity(i, entityId);\n        }\n      }\n    });\n\n    // Refetch designation dropdowns when designation list is invalidated elsewhere\n    effect(() => {\n      if (this.designationService.listInvalidated() > 0) {\n        this.designationOptions.set({});\n        const arr = this.entityMappingsFormArray;\n        for (let i = 0; i < arr.length; i++) {\n          const mappingGroup = arr.at(i);\n          const deptValue = mappingGroup.get('syenm_department_id_sydept')?.value;\n          const departmentId = deptValue == null ? '' : (typeof deptValue === 'string' ? deptValue : (deptValue as { _id?: string })._id || '');\n          if (!departmentId) continue;\n          this.designationService.getDesignationList({ sydsg_department_id_sydpt: departmentId }).subscribe({\n            next: (response: designationControllerResponse) => {\n              if (response?.success) {\n                this.designationOptions.update(map => ({ ...map, [departmentId]: response.data || [] }));\n              }\n            },\n            error: (err) => console.error('Error loading designations on invalidation:', err)\n          });\n        }\n      }\n    });\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(entity?: CoreSystemEntityListResponse): FormGroup {\n    const today = new Date().toISOString().split('T')[0];\n    const entityValue = entity ? entity._id : undefined;\n\n    const formGroup = this.fb.group({\n      _id: [''],\n      syenm_entity_id_syen: [entityValue, []], // Set entity if provided\n      syenm_role_id_syusrol: [undefined],\n      syenm_designation_id_sydsg: [undefined],\n      syenm_department_id_sydept: [undefined],\n      syenm_activefrom: [today, []],\n      syenm_activeupto: [undefined],\n      syenm_isdefault: [false],\n      syenm_isactive: [true],\n      syenm_isloggedin: [true],\n      exceptions: this.fb.array([]) // Add exceptions FormArray\n    });\n\n    // If entity is provided, disable the entity control\n    if (entity && entityValue) {\n      const entityControl = formGroup.get('syenm_entity_id_syen');\n      if (entityControl) {\n        entityControl.disable();\n      }\n    }\n\n    return formGroup;\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      syenm_entity_id_syen: this.appState.getActiveEntityId() || '',\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: '300px',\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    // Initialize component first to get userType from route\n    this.initializeComponent();\n\n    // Initial rights initialization will happen via effect when pageCode is determined\n  }\n\n  /**\n   * Initialize component\n   */\n  private initializeComponent(): void {\n    // Check query params first for userType\n    this.route.queryParams.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\n      const userTypeParam = params['userType'] || params['filterType'];\n      console.log(userTypeParam, 'userTypeParam');\n      if (userTypeParam) {\n        const resolvedType = userTypeParam.toString().trim().toUpperCase();\n        // Map common variations\n        let finalType = resolvedType;\n        if (resolvedType === 'FACULTY' || resolvedType === 'TEACHER') {\n          finalType = 'TEACHER';\n        } else if (resolvedType === 'STUDENT') {\n          finalType = 'STUDENT';\n        }\n\n        this.userType.set(finalType);\n        this.userMasterForm.patchValue({ syutm_user_type: finalType });\n        this.userTypeFromQueryParams.set(true);\n        // Disable the user type control when it comes from query params\n        this.userMasterForm.get('syutm_user_type')?.disable();\n        console.log('👤 User type from query params:', finalType);\n      }\n    });\n\n    // Read route data for user type (TEACHER, STUDENT, USER, etc.)\n    this.route.data.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(data => {\n      if (data['userType']) {\n        const type = data['userType'].toString().toUpperCase();\n        this.userType.set(type);\n        this.userMasterForm.patchValue({ syutm_user_type: type });\n        this.userTypeFromQueryParams.set(true);\n        // Disable the user type control when it comes from route data\n        this.userMasterForm.get('syutm_user_type')?.disable();\n        console.log('👤 User type from route data:', type);\n      }\n      if (data['typeSpecificId']) {\n        this.typeSpecificId.set(data['typeSpecificId']);\n        this.userMasterForm.patchValue({ syutm_type_specific_id: data['typeSpecificId'] });\n        console.log('🆔 Type-specific ID from route:', data['typeSpecificId']);\n      }\n    });\n\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          // Disable username field in edit mode (username should not be changed)\n          this.userMasterForm.get('user_username')?.disable();\n          // Disable type-specific ID field in edit mode (it's auto-generated)\n          this.userMasterForm.get('syutm_type_specific_id')?.disable();\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        // Enable username field in create mode\n        this.userMasterForm.get('user_username')?.enable();\n        // Disable type-specific ID field in create mode (it's auto-generated)\n        this.userMasterForm.get('syutm_type_specific_id')?.disable();\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 user type changes to update userType signal (for type-specific ID visibility)\n    const userTypeControl = this.userMasterForm.get('syutm_user_type');\n    if (userTypeControl) {\n      userTypeControl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(value => {\n        if (value) {\n          const type = value.toString().toUpperCase();\n          // Map common variations\n          let finalType = type;\n          if (type === 'FACULTY' || type === 'TEACHER') {\n            finalType = 'TEACHER';\n          } else if (type === 'STUDENT') {\n            finalType = 'STUDENT';\n          }\n          this.userType.set(finalType);\n          // Ensure type-specific ID field is always disabled (it's auto-generated)\n          this.userMasterForm.get('syutm_type_specific_id')?.disable();\n        } else {\n          this.userType.set(null);\n        }\n      });\n    }\n\n    // Ensure type-specific ID field is always disabled (it's auto-generated)\n    this.userMasterForm.get('syutm_type_specific_id')?.disable();\n\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      confirmPasswordControl?.setValidators([this.passwordMatchValidator.bind(this)]);\n    } else {\n      // In create mode, password is required\n      confirmPasswordControl?.setValidators([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    // Handle user type mapping - store all mappings and populate form with current entity's mapping\n    if (data.core_user_type_mapping && Array.isArray(data.core_user_type_mapping) && data.core_user_type_mapping.length > 0) {\n      const currentEntityId = this.appState.getActiveEntityId();\n      console.log('👤 Loading user type mappings:', data.core_user_type_mapping, 'Current entity:', currentEntityId);\n\n      // Store all user type mappings for display in entity mapping cards\n      this.allUserTypeMappings.set(data.core_user_type_mapping);\n\n      // Try to find mapping for current entity first\n      let selectedMapping: CoreUserTypeMapping | null = null;\n      if (currentEntityId) {\n        selectedMapping = data.core_user_type_mapping.find(\n          (mapping: CoreUserTypeMapping) => mapping.syutm_entity_id_syen === currentEntityId\n        ) || null;\n      }\n\n      // If no mapping found for current entity, use the first one\n      if (!selectedMapping && data.core_user_type_mapping.length > 0) {\n        selectedMapping = data.core_user_type_mapping[0];\n      }\n\n      if (selectedMapping) {\n        console.log('✅ Selected user type mapping:', selectedMapping);\n        // Populate form controls with the selected mapping\n        this.userMasterForm.patchValue({\n          syutm_user_type: selectedMapping.syutm_user_type || '',\n          syutm_type_specific_id: selectedMapping.syutm_type_specific_id || ''\n        });\n\n        // Also update component signals for consistency\n        if (selectedMapping.syutm_user_type) {\n          this.userType.set(selectedMapping.syutm_user_type);\n        }\n        if (selectedMapping.syutm_type_specific_id) {\n          this.typeSpecificId.set(selectedMapping.syutm_type_specific_id);\n        }\n      }\n    } else {\n      // Clear mappings if none exist\n      this.allUserTypeMappings.set([]);\n    }\n\n    // Set additional data\n    if (data.core_entity_mapping) {\n      // Reset loaded mapping data tracking for fresh load\n      this.loadedMappingData.clear();\n\n      // Update entity mappings FormArray\n      const entityMappingFormArray = this.entityMappingsFormArray;\n      entityMappingFormArray.clear();\n\n      data.core_entity_mapping.forEach((mapping: AuthUserCoreEntityMapping, index: number) => {\n        const mappingGroup = this.createEntityMappingFormGroup();\n        let core_entity_mapping: CoreEntityMapping = {};\n\n        // Extract entity ID as string for form control (handle both object and string formats)\n        const entityIdValue = mapping?.syenm_entity_id_syen;\n        const entityIdString = typeof entityIdValue === 'string'\n          ? entityIdValue\n          : (entityIdValue?._id || '');\n\n        core_entity_mapping = {\n          ...mapping,\n          syenm_entity_id_syen: entityIdString,\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      // Update entity mappings signal with full objects (including entity names)\n      this.entityMappings.set(data.core_entity_mapping || []);\n      console.log(`✅ Entity mappings signal updated with full objects. Cards will be collapsed by default - data loads on expand.`);\n\n      // DON'T load data here - let it load lazily when user expands each card\n      // This significantly reduces initial API calls and loading time\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    // Defer general master list loading to allow UI to render first\n    // This makes the form load faster by not blocking on these API calls\n    setTimeout(() => {\n      this.loadAddressTypes();\n      this.loadDocumentTypes();\n      this.loadDocumentVerificationStatus();\n      this.loadDocumentKycStatus();\n      this.loadBloodGroups();\n      this.loadRelationshipOptions();\n      this.loadMenuOptions();\n    }, 0); // Use setTimeout(0) to defer to next event loop cycle\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    // Show entity selection in floating drawer instead of directly creating mapping\n    if (this.isAllEntitiesMapped()) {\n      this.notificationService.warning('All available entities are already mapped.');\n      return;\n    }\n    this.showEntitySelectionDrawer();\n  }\n\n  /**\n   * Get available entities for selection (excluding already mapped ones)\n   */\n  getAvailableEntitiesForSelection(): CoreSystemEntityListResponse[] {\n    const allEntities = this.entityOptions();\n    if (!allEntities || allEntities.length === 0) {\n      return [];\n    }\n\n    // Get all selected entity IDs from existing mappings\n    const selectedEntityIds = this.entityMappingsFormArray.getRawValue()\n      .map((mapping: CoreEntityMapping) => {\n        if (mapping.syenm_entity_id_syen) {\n          const entityValue = mapping.syenm_entity_id_syen;\n          if (typeof entityValue === 'object' && entityValue !== null && '_id' in entityValue) {\n            return (entityValue as { _id: string })._id;\n          }\n          if (typeof entityValue === 'string' && entityValue !== '') {\n            return entityValue;\n          }\n        }\n        return null;\n      })\n      .filter((id: string | null) => id !== null && id !== '');\n\n    // Return entities that are not already mapped and have valid IDs\n    return allEntities.filter((entity): entity is CoreSystemEntityListResponse & { _id: string } => {\n      const entityId = entity._id;\n      return entityId !== undefined && entityId !== null && !selectedEntityIds.includes(entityId as string);\n    });\n  }\n\n  /**\n   * Show entity selection in floating drawer\n   */\n  showEntitySelectionDrawer(): void {\n    const availableEntities = this.getAvailableEntitiesForSelection();\n\n    if (availableEntities.length === 0) {\n      this.notificationService.warning('All available entities are already mapped.');\n      return;\n    }\n\n    // Register the entity selection component if not already registered\n    if (!this.floatingContainerService.isComponentRegistered('entity-selection-for-mapping')) {\n      this.floatingContainerService.registerComponent('entity-selection-for-mapping', EntitySelectionDrawerComponent);\n    }\n\n    // Create signal for entities input\n    const entitiesSignal = signal(availableEntities);\n\n    const config: FloatingContainerConfig = {\n      id: 'entity-selection-for-mapping',\n      title: 'Select Entity',\n      icon: 'business',\n      width: '450px',\n      height: '600px',\n      minWidth: '400px',\n      minHeight: '400px',\n      resizable: true,\n      draggable: true,\n      closable: true,\n      minimizable: true,\n      maximizable: true,\n      componentId: 'entity-selection-for-mapping',\n      componentConfig: {\n        inputs: {\n          entities: entitiesSignal\n        },\n        outputs: {\n          entitySelect: (event: any) => {\n            const entityId = typeof event === 'string' ? event : (event?.value || event);\n            if (typeof entityId === 'string') {\n              this.selectEntityForMapping(entityId);\n            }\n          },\n          cancel: (event?: any) => {\n            this.closeEntitySelectionDrawer();\n          }\n        } as { [key: string]: (event: any) => void }\n      }\n    };\n\n    this.floatingContainerService.show(config);\n  }\n\n  /**\n   * Close entity selection drawer\n   */\n  closeEntitySelectionDrawer(): void {\n    this.floatingContainerService.hide('entity-selection-for-mapping');\n    this.selectedEntityForMapping.set(null);\n  }\n\n  /**\n   * Select entity for mapping from drawer\n   */\n  selectEntityForMapping(entityId: string): void {\n    this.selectedEntityForMapping.set(entityId);\n    this.addEntityMappingWithEntity(entityId);\n    this.closeEntitySelectionDrawer();\n  }\n\n  /**\n   * Create entity mapping with pre-selected entity\n   */\n  addEntityMappingWithEntity(entityId: string): void {\n    const entity = this.entityOptions().find(e => e._id === entityId);\n    if (!entity) {\n      this.notificationService.error('Selected entity not found.');\n      return;\n    }\n\n    // Create new FormGroup for entity mapping with pre-selected entity\n    const newMappingFormGroup = this.createEntityMappingFormGroup(entity);\n\n    // Prepare the new mapping object for the signal\n    const newMapping: AuthUserCoreEntityMapping = {\n      syenm_id_user: this.userId(),\n      syenm_id_logses: '',\n      syenm_entity_id_syen: {\n        _id: entity._id as string,\n        syen_name: entity.syen_name || ''\n      },\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    // Update the signal FIRST - this ensures the template has the data before rendering\n    this.entityMappings.update(mappings => [...mappings, newMapping]);\n\n    // Add to FormArray AFTER signal update\n    this.entityMappingsFormArray.push(newMappingFormGroup);\n\n    // Mark form as dirty and touched to ensure change detection\n    this.userMasterForm.markAsDirty();\n    this.userMasterForm.markAsTouched();\n\n    // Entity control is already disabled in createEntityMappingFormGroup\n    const newIndex = this.entityMappingsFormArray.length - 1;\n\n    // Update form array value to trigger change detection\n    this.entityMappingsFormArray.updateValueAndValidity();\n\n    // Force change detection IMMEDIATELY to ensure UI updates\n    this.cdr.detectChanges();\n\n    // Trigger entity dropdown update to refresh options\n    this.triggerEntityDropdownUpdate();\n\n    // Use requestAnimationFrame to ensure DOM is ready before next change detection\n    requestAnimationFrame(() => {\n      this.cdr.detectChanges();\n\n      // Mark as loaded since we're loading data now for new mapping\n      this.loadedMappingData.add(newIndex);\n\n      // Load departments and roles for the selected entity after UI is rendered\n      this.loadDepartmentsForEntity(newIndex, entityId);\n      this.loadRolesForEntity(newIndex, entityId);\n    });\n  }\n\n  /**\n   * Show copy role from entity drawer\n   * @param targetMappingIndex Index of the mapping to copy TO\n   */\n  showCopyRoleFromEntityDrawer(targetMappingIndex: number): void {\n    const availableMappings = this.getAvailableMappingsForCopy(targetMappingIndex);\n\n    if (availableMappings.length === 0) {\n      this.notificationService.warning('No other entity mappings available to copy from.');\n      return;\n    }\n\n    // Store target mapping index\n    this.targetMappingIndexForCopy.set(targetMappingIndex);\n\n    // Register the copy role drawer component if not already registered\n    if (!this.floatingContainerService.isComponentRegistered('copy-role-from-entity')) {\n      this.floatingContainerService.registerComponent('copy-role-from-entity', CopyRoleFromEntityDrawerComponent);\n    }\n\n    // Create signal for entity mappings input\n    const mappingsSignal = signal(availableMappings);\n\n    const config: FloatingContainerConfig = {\n      id: 'copy-role-from-entity',\n      title: 'Copy Role from Entity',\n      icon: 'content_copy',\n      width: '500px',\n      height: '600px',\n      minWidth: '450px',\n      minHeight: '400px',\n      resizable: true,\n      draggable: true,\n      closable: true,\n      minimizable: true,\n      maximizable: true,\n      componentId: 'copy-role-from-entity',\n      componentConfig: {\n        inputs: {\n          entityMappings: mappingsSignal\n        },\n        outputs: {\n          mappingSelect: (event: any) => {\n            const entityId = typeof event === 'string' ? event : (event?.value || event);\n            if (typeof entityId === 'string') {\n              this.copyRoleFromEntityMapping(entityId);\n            }\n          },\n          cancel: (event?: any) => {\n            this.closeCopyRoleFromEntityDrawer();\n          }\n        } as { [key: string]: (event: any) => void }\n      }\n    };\n\n    this.floatingContainerService.show(config);\n  }\n\n  /**\n   * Get available entity mappings for copying (excluding the target mapping)\n   * @param excludeIndex Index of mapping to exclude\n   */\n  getAvailableMappingsForCopy(excludeIndex: number): EntityMappingForCopy[] {\n    const mappings = this.entityMappings();\n    const availableMappings: EntityMappingForCopy[] = [];\n\n    mappings.forEach((mapping, index) => {\n      // Skip the target mapping\n      if (index === excludeIndex) {\n        return;\n      }\n\n      // Get entity ID and name\n      const entityId = this.getEntityIdFromMapping(index);\n      if (!entityId) {\n        return;\n      }\n\n      const entity = this.entityOptions().find(e => e._id === entityId);\n      if (!entity) {\n        return;\n      }\n\n      // Get role name\n      const roleId = this.getRoleIdFromMapping(index);\n      const roleName = roleId\n        ? this.roleOptions()[entityId]?.find(r => r._id === roleId)?.syusrol_role_name\n        : undefined;\n\n      availableMappings.push({\n        entityId: entityId,\n        entityName: entity.syen_name || 'Unknown Entity',\n        entityCode: entity.syen_entity_code,\n        roleId: roleId,\n        roleName: roleName\n      });\n    });\n\n    return availableMappings;\n  }\n\n  /**\n   * Copy role, department, designation, and menu rights from one entity mapping to another\n   * @param sourceEntityId Entity ID of the source mapping to copy FROM\n   */\n  copyRoleFromEntityMapping(sourceEntityId: string): void {\n    const targetIndex = this.targetMappingIndexForCopy();\n    if (targetIndex === null || targetIndex < 0 || targetIndex >= this.entityMappings().length) {\n      this.notificationService.error('Invalid target mapping index.');\n      this.closeCopyRoleFromEntityDrawer();\n      return;\n    }\n\n    // Find source mapping index\n    const sourceIndex = this.entityMappings().findIndex((mapping, index) => {\n      if (index === targetIndex) return false; // Skip target\n      const entityId = this.getEntityIdFromMapping(index);\n      return entityId === sourceEntityId;\n    });\n\n    if (sourceIndex === -1) {\n      this.notificationService.error('Source entity mapping not found.');\n      this.closeCopyRoleFromEntityDrawer();\n      return;\n    }\n\n    try {\n      // Get source mapping form group\n      const sourceMappingFormGroup = this.entityMappingsFormArray.at(sourceIndex);\n      const targetMappingFormGroup = this.entityMappingsFormArray.at(targetIndex);\n\n      if (!sourceMappingFormGroup || !targetMappingFormGroup) {\n        this.notificationService.error('Failed to access mapping data.');\n        this.closeCopyRoleFromEntityDrawer();\n        return;\n      }\n\n      // Get source values and extract IDs (handling both string and object formats)\n      const sourceRoleValue = sourceMappingFormGroup.get('syenm_role_id_syusrol')?.value;\n      const sourceRoleId = sourceRoleValue\n        ? (typeof sourceRoleValue === 'string' ? sourceRoleValue : (sourceRoleValue._id || sourceRoleValue))\n        : undefined;\n\n      const sourceDepartmentValue = sourceMappingFormGroup.get('syenm_department_id_sydept')?.value;\n      const sourceDepartmentId = sourceDepartmentValue\n        ? (typeof sourceDepartmentValue === 'string' ? sourceDepartmentValue : (sourceDepartmentValue._id || sourceDepartmentValue))\n        : undefined;\n\n      const sourceDesignationValue = sourceMappingFormGroup.get('syenm_designation_id_sydsg')?.value;\n      const sourceDesignationId = sourceDesignationValue\n        ? (typeof sourceDesignationValue === 'string' ? sourceDesignationValue : (sourceDesignationValue._id || sourceDesignationValue))\n        : undefined;\n\n      const sourceActiveFrom = sourceMappingFormGroup.get('syenm_activefrom')?.value;\n      const sourceActiveUpto = sourceMappingFormGroup.get('syenm_activeupto')?.value;\n      const sourceIsActive = sourceMappingFormGroup.get('syenm_isactive')?.value;\n\n      // Get target entity ID\n      const targetEntityId = this.getEntityIdFromMapping(targetIndex);\n      if (!targetEntityId) {\n        this.notificationService.error('Target entity not found.');\n        this.closeCopyRoleFromEntityDrawer();\n        return;\n      }\n\n      // Copy role if available and valid for target entity\n      if (sourceRoleId) {\n        // Check if role exists for target entity\n        const rolesForTarget = this.roleOptions()[targetEntityId] || [];\n        const roleToCopy = rolesForTarget.find(r => r._id === sourceRoleId);\n\n        if (roleToCopy) {\n          targetMappingFormGroup.get('syenm_role_id_syusrol')?.setValue(sourceRoleId);\n          // Trigger role change to load menu rights\n          this.onRoleChange(targetIndex, roleToCopy);\n        } else {\n          this.notificationService.warning(`Role is not available for target entity. Other settings copied.`);\n        }\n      }\n\n      // Copy department if available\n      if (sourceDepartmentId) {\n        const departmentsForTarget = this.getDepartmentOptionsForEntity(targetIndex);\n        const departmentToCopy = departmentsForTarget.find(d => d._id === sourceDepartmentId);\n        if (departmentToCopy) {\n          targetMappingFormGroup.get('syenm_department_id_sydept')?.setValue(sourceDepartmentId);\n          this.onDepartmentChange(departmentToCopy);\n        }\n      }\n\n      // Copy designation if available\n      if (sourceDesignationId) {\n        const designationsForTarget = this.getDesignationOptionsForEntity(targetIndex);\n        const desigExists = designationsForTarget.some(d => d._id === sourceDesignationId);\n        if (desigExists) {\n          targetMappingFormGroup.get('syenm_designation_id_sydsg')?.setValue(sourceDesignationId);\n        }\n      }\n\n      // Copy active dates\n      if (sourceActiveFrom) {\n        targetMappingFormGroup.get('syenm_activefrom')?.setValue(sourceActiveFrom);\n      }\n      if (sourceActiveUpto) {\n        targetMappingFormGroup.get('syenm_activeupto')?.setValue(sourceActiveUpto);\n      }\n\n      // Copy active status\n      if (sourceIsActive !== undefined) {\n        targetMappingFormGroup.get('syenm_isactive')?.setValue(sourceIsActive);\n      }\n\n      // Note: Menu rights will be automatically loaded when role is set via onRoleChange()\n      // Custom menu right modifications are role-specific and will be reset to default for the copied role\n\n      this.notificationService.success('Role and settings copied successfully.');\n      this.closeCopyRoleFromEntityDrawer();\n\n      // Mark form as dirty\n      this.userMasterForm.markAsDirty();\n      this.userMasterForm.markAsTouched();\n\n    } catch (error) {\n      console.error('Error copying role from entity mapping:', error);\n      this.notificationService.error('Failed to copy role from entity mapping.');\n      this.closeCopyRoleFromEntityDrawer();\n    }\n  }\n\n  /**\n   * Close copy role from entity drawer\n   */\n  closeCopyRoleFromEntityDrawer(): void {\n    this.floatingContainerService.hide('copy-role-from-entity');\n    this.targetMappingIndexForCopy.set(null);\n  }\n\n  /**\n   * Handle entity mapping card state change (expand/collapse)\n   * Load data lazily when card is expanded\n   */\n  onEntityMappingCardStateChange(state: string, mappingIndex: number): void {\n    // Only load data when expanding and if we haven't loaded it yet\n    if (state === 'expanded' && !this.loadedMappingData.has(mappingIndex)) {\n      console.log(`📂 Loading data for expanded mapping ${mappingIndex}`);\n      this.loadedMappingData.add(mappingIndex);\n\n      const mapping = this.entityMappings()[mappingIndex];\n      if (!mapping) {\n        console.warn(`⚠️ Mapping ${mappingIndex} not found`);\n        return;\n      }\n\n      // Get entity ID\n      const entityIdValue = mapping?.syenm_entity_id_syen;\n      const entityId = typeof entityIdValue === 'string'\n        ? entityIdValue\n        : (entityIdValue?._id || '');\n\n      if (entityId) {\n        // Load roles and departments for this entity (cached if already loaded)\n        this.loadRolesForEntity(mappingIndex, entityId);\n        this.loadDepartmentsForEntity(mappingIndex, entityId);\n      }\n\n      // Get role ID\n      const roleIdValue = mapping?.syenm_role_id_syusrol;\n      const roleId = typeof roleIdValue === 'object' && roleIdValue !== null\n        ? roleIdValue._id\n        : roleIdValue;\n\n      if (roleId && entityId) {\n        // Load role permissions and menu rights\n        this.loadRolePermissions(roleId, mappingIndex);\n\n        // Load menu rights after a short delay\n        setTimeout(() => {\n          this.loadMenuRights(mappingIndex);\n        }, 200);\n      }\n    }\n  }\n\n  removeEntityMapping(index: number) {\n    // Remove from loaded data tracking\n    this.loadedMappingData.delete(index);\n\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: string | CoreSystemEntityListResponse | AuthUserCoreEntityMapping) {\n    // When entity changes, load departments and filter roles based on entity\n    console.log(`🏢 Entity changed for mapping ${mappingIndex}:`, event);\n\n    // First, get the actual form control value (ControlValueAccessor should have already set it)\n    const formControl = this.userMasterForm.get(`core_entity_mapping.${mappingIndex}.syenm_entity_id_syen`);\n    let entityId: string = '';\n    let entityObject: CoreSystemEntityListResponse | null = null;\n\n    // Prioritize the form control value since ControlValueAccessor should have set it\n    if (formControl && formControl.value) {\n      const formValue = formControl.value;\n      entityId = typeof formValue === 'string' ? formValue : (formValue?._id || '');\n      if (entityId) {\n        entityObject = this.entityOptions().find(e => e._id === entityId) || null;\n      }\n    }\n\n    // If form control doesn't have a value, extract from the event\n    if (!entityId && event) {\n      if (typeof event === 'string') {\n        entityId = event;\n        entityObject = this.entityOptions().find(e => e._id === entityId) || null;\n      } else if (typeof event === 'object') {\n        // Check if it's a CoreSystemEntityListResponse (has _id directly)\n        if ('_id' in event) {\n          entityId = (event as CoreSystemEntityListResponse)._id || '';\n          entityObject = event as CoreSystemEntityListResponse;\n        }\n        // Check if it's AuthUserCoreEntityMapping (has syenm_entity_id_syen)\n        else if ('syenm_entity_id_syen' in event) {\n          const entityValue = (event as AuthUserCoreEntityMapping).syenm_entity_id_syen;\n          if (typeof entityValue === 'object' && entityValue !== null && '_id' in entityValue) {\n            entityId = (entityValue as { _id: string })._id || '';\n            entityObject = this.entityOptions().find(e => e._id === entityId) || null;\n          } else if (typeof entityValue === 'string') {\n            entityId = entityValue;\n            entityObject = this.entityOptions().find(e => e._id === entityId) || null;\n          }\n        }\n      }\n\n      // If we extracted entityId from event but form control doesn't have it, set it\n      if (entityId && formControl && formControl.value !== entityId) {\n        formControl.setValue(entityId, { emitEvent: false });\n      }\n    }\n\n    // Update the signal for backward compatibility\n    if (entityId && entityObject && entityObject._id) {\n      this.entityMappings.update(mappings => {\n        const updated = [...mappings];\n        if (updated[mappingIndex]) {\n          updated[mappingIndex] = {\n            ...updated[mappingIndex],\n            syenm_entity_id_syen: {\n              _id: entityObject._id as string,\n              syen_name: (entityObject.syen_name || '') as string\n            }\n          };\n        }\n        return updated;\n      });\n\n      // Trigger change detection to update UI (especially user type mappings display)\n      this.cdr.detectChanges();\n    }\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 (entityId) {\n      this.loadDepartmentsForEntity(mappingIndex, entityId);\n\n      // Load roles for the selected entity\n      this.loadRolesForEntity(mappingIndex, entityId);\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\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    // First try to get entity ID from form control (most reliable)\n    const mappingFormGroup = this.entityMappingsFormArray.at(mappingIndex);\n    let entityId: string | undefined = undefined;\n\n    if (mappingFormGroup) {\n      const entityIdValue = mappingFormGroup.get('syenm_entity_id_syen')?.value;\n      if (entityIdValue) {\n        // Handle both string and object formats\n        entityId = typeof entityIdValue === 'string'\n          ? entityIdValue\n          : (entityIdValue._id || undefined);\n      }\n    }\n\n    // Fallback: try to get from entity mappings signal\n    if (!entityId) {\n      const mapping = this.entityMappings()[mappingIndex];\n      if (mapping?.syenm_entity_id_syen) {\n        const entityValue = mapping.syenm_entity_id_syen;\n        // Handle both string and object formats\n        entityId = typeof entityValue === 'string'\n          ? entityValue\n          : (entityValue._id || undefined);\n      }\n    }\n\n    if (!entityId) {\n      console.log(`🎭 getRoleOptionsForEntity: No entity ID found for mapping ${mappingIndex}`);\n      return [];\n    }\n\n    console.log(`🎭 getRoleOptionsForEntity for entity ${entityId}:`, this.roleOptions());\n    const roles = this.roleOptions()[entityId];\n\n    // If roles are not loaded yet, trigger loading\n    if (!roles && entityId) {\n      console.log(`🎭 Roles not cached for entity ${entityId}, loading...`);\n      this.loadRolesForEntity(mappingIndex, entityId);\n      return []; // Return empty while loading\n    }\n\n    return roles || [];\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\n    // Return empty array if no entities available\n    if (!allEntities || allEntities.length === 0) {\n      return [];\n    }\n\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 entityValue = mapping.syenm_entity_id_syen;\n          if (typeof entityValue === 'object' && entityValue !== null && '_id' in entityValue) {\n            const entityId = (entityValue as { _id: string })._id;\n            return entityId && entityId !== '' ? entityId : null;\n          }\n          if (typeof entityValue === 'string' && entityValue !== '') {\n            return entityValue;\n          }\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\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 = entityId ? selectedEntityIds.includes(entityId as string) : false;\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      this.clearRoleForMapping(mappingIndex);\n      return;\n    }\n\n    const roleId = role?._id || '';\n    this.selectedEntityIndex.set(mappingIndex);\n    this.selectedRoleId.set(roleId);\n\n    // Update the signal with the selected role\n    this.entityMappings.update(mappings => {\n      const updated = [...mappings];\n      if (updated[mappingIndex]) {\n        updated[mappingIndex] = {\n          ...updated[mappingIndex],\n          syenm_role_id_syusrol: {\n            _id: roleId,\n            syusrol_name: role.syusrol_role_name || ''\n          }\n        };\n      }\n      return updated;\n    });\n\n    // Load role details and permissions\n    this.loadRolePermissions(roleId, mappingIndex);\n\n    // Get entity ID from form control or signal\n    const mappingFormGroup = this.entityMappingsFormArray.at(mappingIndex);\n    let entityId: string | undefined = undefined;\n\n    if (mappingFormGroup) {\n      const entityIdValue = mappingFormGroup.get('syenm_entity_id_syen')?.value;\n      if (entityIdValue) {\n        entityId = typeof entityIdValue === 'string'\n          ? entityIdValue\n          : (entityIdValue._id || undefined);\n      }\n    }\n\n    // Fallback to signal\n    if (!entityId) {\n      const mapping = this.entityMappings()[mappingIndex];\n      if (mapping?.syenm_entity_id_syen) {\n        const entityValue = mapping.syenm_entity_id_syen;\n        entityId = typeof entityValue === 'string'\n          ? entityValue\n          : (entityValue._id || undefined);\n      }\n    }\n\n    // Automatically load menu rights when both entity and role are selected\n    if (entityId && roleId) {\n      console.log(`🚀 Auto-loading menu rights for mapping ${mappingIndex} with entity ${entityId} and role ${roleId}`);\n      this.loadMenuRights(mappingIndex);\n\n      // Force refresh the grid to show updated permission states\n      setTimeout(() => {\n        this.cdr.detectChanges();\n      }, 100);\n    } else {\n      console.warn(`⚠️ Cannot load menu rights: entity=${entityId}, role=${roleId}`);\n    }\n  }\n\n  /**\n   * Load role permissions from API (with caching)\n   */\n  private loadRolePermissions(roleId: string, mappingIndex: number): void {\n    console.log(`🎭 Loading permissions for role:`, roleId);\n\n    // Check if we already have cached permissions for this role\n    const cachedPermissions = this.rolePermissionsCache()[roleId];\n    if (cachedPermissions) {\n      console.log(`🎭 Using cached permissions for role ${roleId}`);\n      this.storeRolePermissions(cachedPermissions, mappingIndex);\n      return;\n    }\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          // Cache the role permissions\n          this.rolePermissionsCache.update(cache => ({\n            ...cache,\n            [roleId]: response.data\n          }));\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    // Get entity ID from form control or signal\n    const mappingFormGroup = this.entityMappingsFormArray.at(mappingIndex);\n    let entityId: string | undefined = undefined;\n    let roleId: string | undefined = undefined;\n\n    // Try to get from form control first\n    if (mappingFormGroup) {\n      const entityIdValue = mappingFormGroup.get('syenm_entity_id_syen')?.value;\n      if (entityIdValue) {\n        entityId = typeof entityIdValue === 'string'\n          ? entityIdValue\n          : (entityIdValue._id || undefined);\n      }\n\n      const roleIdValue = mappingFormGroup.get('syenm_role_id_syusrol')?.value;\n      if (roleIdValue) {\n        roleId = typeof roleIdValue === 'string'\n          ? roleIdValue\n          : (roleIdValue._id || undefined);\n      }\n    }\n\n    // Fallback to signal\n    if (!entityId || !roleId) {\n      const mapping = this.entityMappings()[mappingIndex];\n      if (mapping?.syenm_entity_id_syen && !entityId) {\n        const entityValue = mapping.syenm_entity_id_syen;\n        entityId = typeof entityValue === 'string'\n          ? entityValue\n          : (entityValue._id || undefined);\n      }\n      if (mapping?.syenm_role_id_syusrol && !roleId) {\n        const roleValue = mapping.syenm_role_id_syusrol;\n        roleId = typeof roleValue === 'string'\n          ? roleValue\n          : (roleValue._id || undefined);\n      }\n    }\n\n    if (!entityId || !roleId) {\n      console.warn('Entity and Role must be selected before loading menu rights', {\n        mappingIndex,\n        entityId,\n        roleId,\n        formControl: mappingFormGroup?.value,\n        signal: this.entityMappings()[mappingIndex]\n      });\n      return;\n    }\n\n    console.log('🚀 Loading menu rights for mapping:', mappingIndex, 'Entity:', entityId, 'Role:', roleId);\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 !== undefined\n      ? (event as any)?.target?.checked\n      : ((event as any)?.checked !== undefined ? (event as any)?.checked : true);\n\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: isDefault };\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 && isDefault);\n      }\n    }\n\n    console.log(`Entity mapping ${mappingIndex} set as default. All others unset.`);\n  }\n\n  onActiveMappingChange(mappingIndex: number, event: Event): void {\n    const isActive = (event.target as HTMLInputElement)?.checked ?? true;\n\n    // Update signal\n    this.entityMappings.update(mappings => {\n      return mappings.map((mapping, index) => {\n        if (index === mappingIndex) {\n          return { ...mapping, syenm_isactive: isActive };\n        }\n        return mapping;\n      });\n    });\n\n    // Update FormArray control\n    const formGroup = this.entityMappingsFormArray.at(mappingIndex) as FormGroup;\n    const activeControl = formGroup?.get('syenm_isactive');\n    if (activeControl) {\n      activeControl.setValue(isActive);\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   * Get entity ID from a mapping form group by index\n   * @param mappingIndex - Index of the entity mapping\n   * @returns Entity ID string or undefined\n   */\n  /**\n   * Get role ID from mapping by index\n   */\n  getRoleIdFromMapping(mappingIndex: number): string | undefined {\n    // First try to get from form control\n    const mappingFormGroup = this.entityMappingsFormArray.at(mappingIndex);\n    if (mappingFormGroup) {\n      const roleIdValue = mappingFormGroup.get('syenm_role_id_syusrol')?.value;\n      if (roleIdValue) {\n        // Handle both string and object formats\n        const roleId = typeof roleIdValue === 'string'\n          ? roleIdValue\n          : (roleIdValue._id || roleIdValue.toString?.() || undefined);\n        if (roleId) {\n          return roleId.toString();\n        }\n      }\n    }\n\n    // Fallback: try to get from entity mappings signal\n    const entityMappings = this.entityMappings();\n    if (entityMappings && entityMappings[mappingIndex]) {\n      const mapping = entityMappings[mappingIndex];\n      const roleIdFromSignal = mapping.syenm_role_id_syusrol;\n      if (roleIdFromSignal) {\n        // Handle both string and object formats\n        const roleId = typeof roleIdFromSignal === 'string'\n          ? roleIdFromSignal\n          : (roleIdFromSignal._id || roleIdFromSignal.toString?.() || undefined);\n        if (roleId) {\n          return roleId.toString();\n        }\n      }\n    }\n\n    return undefined;\n  }\n\n  getEntityIdFromMapping(mappingIndex: number): string | undefined {\n    // First try to get from form control\n    const mappingFormGroup = this.entityMappingsFormArray.at(mappingIndex);\n    if (mappingFormGroup) {\n      const entityIdValue = mappingFormGroup.get('syenm_entity_id_syen')?.value;\n      if (entityIdValue) {\n        // Handle both string and object formats\n        const entityId = typeof entityIdValue === 'string'\n          ? entityIdValue\n          : (entityIdValue._id || entityIdValue.toString?.() || undefined);\n        if (entityId) {\n          return entityId.toString();\n        }\n      }\n    }\n\n    // Fallback: try to get from entity mappings signal (this is the most reliable source)\n    const entityMappings = this.entityMappings();\n    if (entityMappings && entityMappings[mappingIndex]) {\n      const mapping = entityMappings[mappingIndex];\n      const entityIdFromSignal = mapping.syenm_entity_id_syen;\n      if (entityIdFromSignal) {\n        // Handle both string and object formats\n        // From API response, it comes as object: { _id: \"...\", syen_name: \"...\" }\n        const entityId = typeof entityIdFromSignal === 'string'\n          ? entityIdFromSignal\n          : (entityIdFromSignal._id || entityIdFromSignal.toString?.() || undefined);\n        if (entityId) {\n          return entityId.toString();\n        }\n      }\n    }\n\n    return undefined;\n  }\n\n  /**\n   * Get entity name from mapping for display purposes\n   */\n  getEntityNameFromMapping(mappingIndex: number): string {\n    // First try to get from entity mappings signal\n    const entityMappings = this.entityMappings();\n\n    if (entityMappings && entityMappings[mappingIndex]) {\n      const mapping = entityMappings[mappingIndex];\n      const entityValue = mapping.syenm_entity_id_syen;\n\n      if (entityValue) {\n        // Handle object format: { _id: \"...\", syen_name: \"...\" }\n        if (typeof entityValue === 'object' && entityValue !== null && 'syen_name' in entityValue) {\n          return (entityValue as { syen_name: string }).syen_name || '';\n        }\n      }\n    }\n\n    // Fallback: try to get from form control and look up entity name\n    const mappingFormGroup = this.entityMappingsFormArray.at(mappingIndex);\n    if (mappingFormGroup) {\n      const entityIdValue = mappingFormGroup.get('syenm_entity_id_syen')?.value;\n\n      if (entityIdValue) {\n        const entityId = typeof entityIdValue === 'string'\n          ? entityIdValue\n          : (entityIdValue._id || entityIdValue.toString?.() || undefined);\n\n        if (entityId) {\n          const entity = this.entityOptions().find(e => e._id === entityId);\n\n          if (entity && entity.syen_name) {\n            return entity.syen_name;\n          }\n        }\n      }\n    }\n\n    return 'Unknown Entity';\n  }\n\n  /**\n   * Check if a user type mapping belongs to a specific entity\n   * @param typeMapping - User type mapping to check\n   * @param entityId - Entity ID to compare against\n   * @returns True if the mapping belongs to the entity\n   */\n  isUserTypeMappingForEntity(typeMapping: CoreUserTypeMapping, entityId: string | undefined): boolean {\n    if (!entityId || !typeMapping.syutm_entity_id_syen) {\n      return false;\n    }\n\n    const mappingEntityId = typeMapping.syutm_entity_id_syen.toString().trim();\n    const searchEntityId = entityId.toString().trim();\n\n    return mappingEntityId === searchEntityId;\n  }\n\n  /**\n   * Get user type mappings for a specific entity\n   * @param entityId - Entity ID to filter mappings (can be string or object with _id property)\n   * @returns Array of user type mappings for the entity\n   */\n  getUserTypeMappingsForEntity(entityId: string | { _id?: string } | undefined): CoreUserTypeMapping[] {\n    const allMappings = this.allUserTypeMappings();\n\n    // If no entity ID provided, return empty array\n    if (!entityId) {\n      return [];\n    }\n\n    // Extract entity ID string from object or use string directly\n    const entityIdString = typeof entityId === 'object' && entityId._id\n      ? entityId._id\n      : (typeof entityId === 'string' ? entityId : undefined);\n\n    if (!entityIdString) {\n      return [];\n    }\n\n    // Normalize the search entity ID to string\n    const searchEntityId = entityIdString.toString().trim();\n\n    const filteredMappings = allMappings.filter((mapping: CoreUserTypeMapping) => {\n      // Get entity ID from user type mapping and normalize to string\n      const mappingEntityId = mapping.syutm_entity_id_syen;\n      if (!mappingEntityId) {\n        return false;\n      }\n\n      // Normalize both to strings for comparison\n      const mappingEntityIdStr = mappingEntityId.toString().trim();\n      const matches = mappingEntityIdStr === searchEntityId;\n\n      return matches;\n    });\n\n    // Debug logging\n    if (allMappings.length > 0) {\n      console.log('🔍 Filtering user type mappings for entity:', {\n        searchEntityId: searchEntityId,\n        totalMappings: allMappings.length,\n        allMappings: allMappings.map(m => ({\n          entityId: m.syutm_entity_id_syen,\n          entityIdString: m.syutm_entity_id_syen?.toString(),\n          userType: m.syutm_user_type,\n          typeSpecificId: m.syutm_type_specific_id\n        })),\n        filteredCount: filteredMappings.length,\n        filteredMappings: filteredMappings.map(m => ({\n          entityId: m.syutm_entity_id_syen,\n          userType: m.syutm_user_type,\n          typeSpecificId: m.syutm_type_specific_id\n        }))\n      });\n    }\n\n    return filteredMappings;\n  }\n\n  /**\n   * Get user type label for display\n   */\n  getUserTypeLabel(userTypeOverride?: string): string {\n    // Use override if provided, otherwise fall back to signal\n    const type = (userTypeOverride || this.userType())?.toString().toUpperCase();\n    if (type === 'TEACHER' || type === 'FACULTY') {\n      return 'Faculty';\n    } else if (type === 'STUDENT') {\n      return 'Student';\n    } else if (type) {\n      return type.charAt(0) + type.slice(1).toLowerCase();\n    }\n    return 'User';\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 using shared service\n    this.sharedObjectIdService.generateObjectId().subscribe({\n      next: (response: mongooseObjectIdCreateControllerResponse) => {\n        const newObjectId = response.data?.objectId as string;\n        console.log('🆔 [UserCreate] Generated new ObjectId for address via SharedObjectIdService:', 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 using shared service\n    this.sharedObjectIdService.generateObjectId().subscribe({\n      next: (response: mongooseObjectIdCreateControllerResponse) => {\n        const newObjectId = response.data?.objectId as string;\n        console.log('🆔 [UserCreate] Generated new ObjectId for document via SharedObjectIdService:', 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 using shared service\n    this.sharedObjectIdService.generateObjectId().subscribe({\n      next: (response: mongooseObjectIdCreateControllerResponse) => {\n        const newObjectId = response.data?.objectId as string;\n        console.log('🆔 [UserCreate] Generated new ObjectId for family detail via SharedObjectIdService:', 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        syutm_user_type,\n        syutm_type_specific_id,\n        ...auth_user_mst\n      } = this.userMasterForm.getRawValue();\n\n      // Process role exceptions using the new permission tracking system\n      const core_user_role_exceptions = this.processRoleExceptions();\n\n      // Get entity mappings with raw values (to include disabled controls) and ensure entity IDs are properly extracted\n      const rawEntityMappings = this.entityMappingsFormArray.getRawValue() as CoreEntityMapping[];\n\n      // Define type for mapping with optional exceptions property (used in forms but not in API)\n      type CoreEntityMappingWithExceptions = CoreEntityMapping & { exceptions?: any[] };\n\n      const processedEntityMappings = rawEntityMappings.map((mapping: CoreEntityMapping) => {\n        const processedMapping: CoreEntityMapping = { ...mapping };\n\n        // Extract entity ID - handle both object and string formats\n        if (mapping.syenm_entity_id_syen) {\n          const entityValue = mapping.syenm_entity_id_syen;\n          if (typeof entityValue === 'object' && entityValue !== null && '_id' in entityValue) {\n            // Extract _id from object\n            processedMapping.syenm_entity_id_syen = (entityValue as { _id: string })._id;\n          } else if (typeof entityValue === 'string' && entityValue.trim() !== '') {\n            // Already a string, use as-is\n            processedMapping.syenm_entity_id_syen = entityValue;\n          }\n        }\n\n        // Extract role ID if it's an object\n        if (mapping.syenm_role_id_syusrol) {\n          const roleValue = mapping.syenm_role_id_syusrol;\n          if (typeof roleValue === 'object' && roleValue !== null && '_id' in roleValue) {\n            processedMapping.syenm_role_id_syusrol = (roleValue as { _id: string })._id;\n          }\n        }\n\n        // Extract designation ID if it's an object\n        if (mapping.syenm_designation_id_sydsg) {\n          const designationValue = mapping.syenm_designation_id_sydsg;\n          if (typeof designationValue === 'object' && designationValue !== null && '_id' in designationValue) {\n            processedMapping.syenm_designation_id_sydsg = (designationValue as { _id: string })._id;\n          }\n        }\n\n        // Extract department ID if it's an object\n        if (mapping.syenm_department_id_sydept) {\n          const departmentValue = mapping.syenm_department_id_sydept;\n          if (typeof departmentValue === 'object' && departmentValue !== null && '_id' in departmentValue) {\n            processedMapping.syenm_department_id_sydept = (departmentValue as { _id: string })._id;\n          }\n        }\n\n        // Remove empty _id for new mappings (let backend generate it)\n        if (processedMapping._id === '' || processedMapping._id === null || processedMapping._id === undefined) {\n          delete processedMapping._id;\n        }\n\n        // Remove exceptions array if empty (it's handled separately)\n        // Cast to extended type to safely access exceptions property\n        const mappingWithExceptions = processedMapping as CoreEntityMappingWithExceptions;\n        if ('exceptions' in mappingWithExceptions && Array.isArray(mappingWithExceptions.exceptions) && mappingWithExceptions.exceptions.length === 0) {\n          delete mappingWithExceptions.exceptions;\n        }\n\n        return processedMapping;\n      });\n\n      const formData: AuthUserMstCreatePayload = {\n        auth_user_mst: auth_user_mst,\n        core_entity_mapping: processedEntityMappings,\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\n      // Add user type mapping if provided via form or route data\n      const formUserType = (syutm_user_type || this.userType())?.toString().toUpperCase();\n      const formTypeSpecificId = syutm_type_specific_id || this.typeSpecificId();\n\n      if (formUserType) {\n        // Add as core_user_type_mapping object\n        const currentEntityId = this.appState.getActiveEntityId();\n        formData.core_user_type_mapping = {\n          syutm_user_type: formUserType,\n          syutm_type_specific_id: formTypeSpecificId || '',\n          syutm_entity_id_syen: currentEntityId || undefined,\n          syutm_isactive: true\n        };\n\n        console.log('👤 Adding user type mapping:', {\n          core_user_type_mapping: formData.core_user_type_mapping\n        });\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            // Extract user type and type-specific ID from response (for both create and edit)\n            type UserCreateResponse = {\n              data?: {\n                syutm_user_type?: string;\n                syutm_type_specific_id?: string;\n                [key: string]: any;\n              };\n              syutm_user_type?: string;\n              syutm_type_specific_id?: string;\n              [key: string]: any;\n            };\n            const responseData = response as UserCreateResponse;\n            const responseGeneratedId = responseData?.data?.syutm_type_specific_id;\n            const responseUserType = responseData?.data?.syutm_user_type || formUserType;\n\n            // Get user type label from actual form/response value, not signal\n            const actualUserType = responseUserType || formUserType || this.userType();\n            const userTypeLabel = this.getUserTypeLabel(actualUserType);\n            const userType = actualUserType?.toString().toUpperCase();\n\n            if (this.isEditMode()) {\n              // In edit mode, check if we received a reference ID that wasn't in the payload\n              const payloadTypeSpecificId = formTypeSpecificId || '';\n              const hasIdInPayload = !!payloadTypeSpecificId && payloadTypeSpecificId.trim() !== '';\n\n              console.log('🔍 Edit mode - Checking for reference ID:', {\n                payloadId: payloadTypeSpecificId,\n                responseId: responseGeneratedId,\n                hasIdInPayload,\n                responseUserType,\n                actualUserType,\n                userTypeLabel\n              });\n\n              // If we didn't have an ID in payload but received one in response, show popup\n              if (!hasIdInPayload && responseGeneratedId &&\n                (responseUserType === 'STUDENT' || responseUserType === 'TEACHER' || responseUserType === 'FACULTY')) {\n                const idLabel = responseUserType === 'STUDENT' ? 'Student ID' : 'Faculty ID';\n                console.log('✅ Showing confirmation popup for edit with generated ID:', { idLabel, responseGeneratedId });\n\n                this.notificationService.success(\n                  `${userTypeLabel} updated successfully!\\n\\n${idLabel}: ${responseGeneratedId}`,\n                  {\n                    title: `${userTypeLabel} Updated Successfully`,\n                    duration: 10000\n                  }\n                );\n              } else {\n                // Regular update notification\n                this.notificationService.success(`${userTypeLabel} updated successfully! All changes have been saved.`, {\n                  title: `${userTypeLabel} Updated`,\n                  duration: 5000\n                });\n              }\n              console.log(`${userTypeLabel} updated successfully`);\n            } else {\n              // Create mode - Debug logging to see what we're getting\n              console.log('🔍 Create mode - Response data for confirmation popup:', {\n                fullResponse: response,\n                responseData: responseData,\n                dataObject: responseData?.data,\n                generatedId: responseGeneratedId,\n                userType: responseUserType,\n                formUserType: formUserType\n              });\n\n              console.log('🎯 Create mode - Extracted values:', {\n                generatedId: responseGeneratedId,\n                responseUserType,\n                formUserType\n              });\n\n              // If a type-specific ID was auto-generated/returned, show it in a confirmation popup\n              if (responseGeneratedId && (responseUserType === 'STUDENT' || responseUserType === 'TEACHER' || responseUserType === 'FACULTY')) {\n                const idLabel = responseUserType === 'STUDENT' ? 'Student ID' : 'Faculty ID';\n                console.log('✅ Showing confirmation popup with:', { idLabel, generatedId: responseGeneratedId, userTypeLabel });\n\n                // Show a prominent confirmation popup with the generated ID\n                this.notificationService.success(\n                  `${userTypeLabel} created successfully!\\n\\n${idLabel}: ${responseGeneratedId}`,\n                  {\n                    title: `${userTypeLabel} Created Successfully`,\n                    duration: 10000\n                  }\n                );\n\n                // Delay navigation to ensure the notification is visible\n                setTimeout(() => {\n                  // Navigate to appropriate listing page based on user type\n                  if (userType === 'TEACHER' || userType === 'FACULTY') {\n                    this.router.navigate(['/control-panel/teacher']);\n                  } else if (userType === 'STUDENT') {\n                    this.router.navigate(['/control-panel/student']);\n                  } else {\n                    this.router.navigate(['/control-panel']);\n                  }\n                }, 2000); // Wait 2 seconds before navigating\n              } else {\n                console.warn('⚠️ Confirmation popup not shown. Reason:', {\n                  hasGeneratedId: !!responseGeneratedId,\n                  responseUserType,\n                  formUserType,\n                  condition: responseUserType === 'STUDENT' || responseUserType === 'TEACHER' || responseUserType === 'FACULTY'\n                });\n\n                // Show basic success notification if no ID to show\n                this.notificationService.success(`${userTypeLabel} created successfully!`, {\n                  title: `${userTypeLabel} Created`,\n                  duration: 5000\n                });\n\n                // Navigate to appropriate listing page based on user type\n                if (userType === 'TEACHER' || userType === 'FACULTY') {\n                  this.router.navigate(['/control-panel/teacher']);\n                } else if (userType === 'STUDENT') {\n                  this.router.navigate(['/control-panel/student']);\n                } else {\n                  this.router.navigate(['/control-panel']);\n                }\n              }\n            }\n          },\n          error: (error) => {\n            console.error('❌ Error saving user master:', error);\n\n            // Extract error message from API response\n            let errorMessage = 'Failed to save user. Please try again.';\n            let errorTitle = 'Save Failed';\n            let duplicateField: string | null = null;\n\n            // Check if error has a response with message (handle both error.error and direct error)\n            const apiError = error?.error || error;\n            if (apiError?.message) {\n              errorMessage = apiError.message;\n              errorTitle = 'Validation Error';\n\n              // Check if it's a duplicate key error\n              if (apiError?.data?.errorCode === 'DUPLICATE_KEY_ERROR' ||\n                apiError?.code === 409 ||\n                error?.status === 409 ||\n                errorMessage.toLowerCase().includes('already') ||\n                errorMessage.toLowerCase().includes('duplicate') ||\n                errorMessage.toLowerCase().includes('registered') ||\n                errorMessage.toLowerCase().includes('taken')) {\n                errorTitle = 'Duplicate Entry';\n\n                // Get duplicate field from error data\n                duplicateField = apiError?.data?.duplicateField || null;\n\n                // Set form field error for the duplicate field\n                if (duplicateField) {\n                  const fieldName = duplicateField.toLowerCase().replace(/\\s+/g, '_');\n                  if (fieldName === 'email_id' || fieldName === 'emailid') {\n                    const emailControl = this.userMasterForm.get('user_emailid');\n                    if (emailControl) {\n                      emailControl.setErrors({\n                        duplicate: true,\n                        message: errorMessage\n                      });\n                      emailControl.markAsTouched();\n                    }\n                  } else if (fieldName === 'username') {\n                    const usernameControl = this.userMasterForm.get('user_username');\n                    if (usernameControl) {\n                      usernameControl.setErrors({\n                        duplicate: true,\n                        message: errorMessage\n                      });\n                      usernameControl.markAsTouched();\n                    }\n                  } else if (fieldName === 'mobile_number' || fieldName === 'mobileno') {\n                    const mobileControl = this.userMasterForm.get('user_mobileno');\n                    if (mobileControl) {\n                      mobileControl.setErrors({\n                        duplicate: true,\n                        message: errorMessage\n                      });\n                      mobileControl.markAsTouched();\n                    }\n                  }\n                }\n              }\n            } else if (error?.message) {\n              errorMessage = error.message;\n            } else if (error?.status === 409) {\n              errorMessage = 'A user with this information already exists. Please check and modify the duplicate field.';\n              errorTitle = 'Duplicate Entry';\n            } else if (error?.status === 400) {\n              errorMessage = 'Invalid data provided. Please check your input.';\n              errorTitle = 'Validation Error';\n            } else if (error?.status === 500) {\n              errorMessage = 'Server error occurred. Please try again later.';\n              errorTitle = 'Server Error';\n            }\n\n            // Show error notification with the extracted message\n            this.notificationService.error(errorMessage, {\n              title: errorTitle,\n              duration: 7000 // Longer duration for important errors\n            });\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    console.log(this.userMasterForm, \"userMasterFormuserMasterForm\")\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 (async, non-blocking)\n   */\n  private loadAddressTypes(): void {\n    this.CideCoreGeneralMasterService.getMasterList({\n      sygmt_code: 'user_address_type',\n      sygms_entity_id_syen: this.appState.getActiveEntityId()\n    })\n      .pipe(takeUntilDestroyed(this.destroyRef))\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            this.cdr.markForCheck(); // Trigger change detection to re-render with new 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 (async, non-blocking)\n   */\n  private loadDocumentTypes(): void {\n    this.CideCoreGeneralMasterService.getMasterList({\n      sygmt_code: 'user_document_type',\n      sygms_entity_id_syen: this.appState.getActiveEntityId()\n    })\n      .pipe(takeUntilDestroyed(this.destroyRef))\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            this.cdr.markForCheck(); // Trigger change detection to re-render with new 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 (async, non-blocking)\n   */\n  private loadDocumentVerificationStatus(): void {\n    this.CideCoreGeneralMasterService.getMasterList({\n      sygmt_code: 'document_verification_status',\n      sygms_entity_id_syen: this.appState.getActiveEntityId()\n    })\n      .pipe(takeUntilDestroyed(this.destroyRef))\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            this.cdr.markForCheck(); // Trigger change detection to re-render with new 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 (async, non-blocking)\n   */\n  private loadDocumentKycStatus(): void {\n    this.CideCoreGeneralMasterService.getMasterList({\n      sygmt_code: 'document_kyc_status',\n      sygms_entity_id_syen: this.appState.getActiveEntityId()\n    })\n      .pipe(takeUntilDestroyed(this.destroyRef))\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            this.cdr.markForCheck(); // Trigger change detection to re-render with new 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 (async, non-blocking)\n   */\n  private loadBloodGroups(): void {\n    this.CideCoreGeneralMasterService.getMasterList({\n      sygmt_code: 'blood_group',\n      sygms_entity_id_syen: this.appState.getActiveEntityId()\n    })\n      .pipe(takeUntilDestroyed(this.destroyRef))\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            this.cdr.markForCheck(); // Trigger change detection to re-render with new 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 (async, non-blocking)\n   */\n  private loadRelationshipOptions(): void {\n    this.CideCoreGeneralMasterService.getMasterList({\n      sygmt_code: 'family_relationship',\n      sygms_entity_id_syen: this.appState.getActiveEntityId()\n    })\n      .pipe(takeUntilDestroyed(this.destroyRef))\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            this.cdr.markForCheck(); // Trigger change detection to re-render with new 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   * Generate Object ID for new user creation\n   * Uses the shared object ID service to generate a unique ObjectId\n   * @returns Promise<string> - The generated ObjectId\n   */\n  async generateObjectId(): Promise<string> {\n    try {\n      const objectId = await this.sharedObjectIdService.generateObjectIdAsync();\n      console.log('🆔 [UserCreate] Generated new ObjectId for user via SharedObjectIdService:', objectId);\n      return objectId;\n    } catch (error) {\n      console.error('❌ [UserCreate] Error generating ObjectId:', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Generate Object ID for user-related entities (addresses, documents, family details)\n   * Uses the shared object ID service for consistency\n   * @returns Promise<string> - The generated ObjectId\n   */\n  async generateEntityObjectId(): Promise<string> {\n    try {\n      const objectId = await this.sharedObjectIdService.generateObjectIdAsync();\n      console.log('🆔 [UserCreate] Generated new ObjectId for entity via SharedObjectIdService:', objectId);\n      return objectId;\n    } catch (error) {\n      console.error('❌ [UserCreate] Error generating entity ObjectId:', error);\n      throw error;\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","<!-- \n  ENTERPRISE USER MASTER FORM\n  \n  Enterprise-Level Styling with Tailwind CSS\n  Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: pageCode() }\" [breadcrumb_data]=\"breadcrumbData()\">\n  <div class=\"tw-w-full tw-h-full tw-p-1 tw-pt-2\">\n    <!-- Toast Notifications -->\n    <cide-ele-toast-notification></cide-ele-toast-notification>\n    \n    <form class=\"tw-max-w-7xl tw-mx-auto tw-bg-transparent\" [formGroup]=\"userMasterForm\" [class.tw-opacity-60]=\"loading()\"\n      (ngSubmit)=\"onSubmit()\">\n\n\n    <!-- User Context Header -->\n    <div\n      class=\"tw-bg-gradient-to-r tw-from-blue-50 tw-to-indigo-50 tw-border tw-border-blue-200 tw-rounded-md tw-p-1 tw-mb-2 tw-shadow-sm\">\n      <div class=\"tw-flex tw-items-center tw-justify-between tw-flex-wrap tw-gap-2\">\n        <!-- User Basic Info Display -->\n        <div class=\"tw-flex tw-items-center tw-gap-3 tw-flex-wrap\">\n          <!-- Profile Photo Preview -->\n          <div class=\"tw-flex tw-items-center tw-gap-2\">\n            <div\n              class=\"tw-w-8 tw-h-8 tw-rounded-full tw-bg-blue-100 tw-border tw-border-blue-200 tw-flex tw-items-center tw-justify-center tw-overflow-hidden\">\n              @if (userMasterForm.get('user_photo_id_cyfm')?.value) {\n              <img cideEleFileImage [fileId]=\"userMasterForm.get('user_photo_id_cyfm')?.value\"\n                [altText]=\"'Profile Photo'\" class=\"tw-w-full tw-h-full tw-object-cover\">\n              } @else {\n              <cide-ele-icon name=\"person\" class=\"tw-w-5 tw-h-5 tw-text-blue-600\">\n              </cide-ele-icon>\n              }\n            </div>\n            <div class=\"tw-flex tw-flex-col\">\n              <span class=\"tw-text-xs tw-font-medium tw-text-blue-900\">\n                {{ getUserFullName() || 'New User' }}\n              </span>\n              <span class=\"tw-text-xs tw-text-blue-600\">\n                {{ getUserUsername() || 'Username not set' }}\n              </span>\n            </div>\n          </div>\n\n          <!-- Contact Info -->\n          <div class=\"tw-flex tw-items-center tw-gap-3\">\n            <div class=\"tw-flex tw-items-center tw-gap-1 tw-text-xs tw-text-gray-700\">\n              <cide-ele-icon variant=\"gray\" size=\"sm\">email</cide-ele-icon>\n              <span>{{ getUserEmail() || 'Email not set' }}</span>\n            </div>\n            <div class=\"tw-flex tw-items-center tw-gap-1 tw-text-xs tw-text-gray-700\">\n              <cide-ele-icon variant=\"gray\" size=\"sm\">phone</cide-ele-icon>\n              <span>{{ getUserMobile() || 'Mobile not set' }}</span>\n            </div>\n          </div>\n\n          <!-- Active Status -->\n          <div class=\"tw-flex tw-items-center tw-gap-1\">\n            @if (getUserActiveStatus()) {\n            <span\n              class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-700\">\n              <cide-ele-icon variant=\"green\" size=\"sm\" class=\"tw-mr-1\">check_circle</cide-ele-icon>\n              Active\n            </span>\n            } @else {\n            <span\n              class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded tw-text-xs tw-font-medium tw-bg-red-100 tw-text-red-700\">\n              <cide-ele-icon variant=\"red\" size=\"sm\" class=\"tw-mr-1\">cancel</cide-ele-icon>\n              Inactive\n            </span>\n            }\n          </div>\n        </div>\n\n        <!-- Entity Info -->\n        <div class=\"tw-flex tw-items-center tw-gap-2\">\n          @if (hasDefaultEntity()) {\n          <div class=\"tw-flex tw-items-center tw-gap-1 tw-text-xs tw-text-blue-700\">\n            <cide-ele-icon variant=\"blue\" size=\"sm\">business</cide-ele-icon>\n            <span class=\"tw-font-medium\">{{ getDefaultEntityName() }}</span>\n          </div>\n          } @else {\n          <div class=\"tw-flex tw-items-center tw-gap-1 tw-text-xs tw-text-gray-500\">\n            <cide-ele-icon variant=\"gray\" size=\"sm\">business</cide-ele-icon>\n            <span class=\"tw-italic\">No entity</span>\n          </div>\n          }\n\n          <span class=\"tw-text-xs tw-text-gray-600 tw-px-2 tw-py-1 tw-bg-gray-100 tw-rounded\">\n            {{ getEntityMappingCount() }} mapping(s)\n          </span>\n        </div>\n      </div>\n    </div>\n\n    <!-- Tab Navigation -->\n    <div class=\"tw-p-0 tw-mb-2 tw-border-b tw-border-gray-200\">\n      <cide-ele-tab [tabs]=\"userTabs()\" [activeTabId]=\"activeTab()\" size=\"sm\" variant=\"default\"\n        (tabChange)=\"onTabChange($event)\">\n      </cide-ele-tab>\n    </div>\n\n    <!-- Tab Content -->\n    <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n      @switch (activeTab()) {\n\n      @case ('basic') {\n      <!-- User Basic Information Section -->\n      <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\n\n        <!-- Top Section: Form Fields on Left, Profile Photo on Right -->\n        <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-[1fr_200px] tw-gap-4 tw-mb-4\">\n          <!-- Left Side: Form Fields -->\n          <div class=\"tw-space-y-4\">\n            <!-- Name Fields - All in One Row -->\n            <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-4\">\n              <cide-ele-input id=\"user_firstname\" label=\"First Name\" formControlName=\"user_firstname\"\n                placeholder=\"Enter first name\" [maxlength]=\"20\" size=\"sm\" (ngModelChange)=\"onNameFieldChange()\">\n              </cide-ele-input>\n\n              <cide-ele-input id=\"user_middlename\" label=\"Middle Name\" formControlName=\"user_middlename\"\n                placeholder=\"Enter middle name\" [maxlength]=\"20\" size=\"sm\" (ngModelChange)=\"onNameFieldChange()\">\n              </cide-ele-input>\n\n              <cide-ele-input id=\"user_lastname\" label=\"Last Name\" formControlName=\"user_lastname\"\n                placeholder=\"Enter last name\" [maxlength]=\"20\" size=\"sm\" (ngModelChange)=\"onNameFieldChange()\">\n              </cide-ele-input>\n\n              <cide-ele-input id=\"user_fullname\" label=\"Full Name (Auto-generated)\" formControlName=\"user_fullname\"\n                placeholder=\"Auto-generated from name fields or enter manually\" [maxlength]=\"62\" size=\"sm\">\n              </cide-ele-input>\n            </div>\n\n            <!-- Contact Information - All in One Row -->\n            <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-4\">\n              <cide-ele-input id=\"user_username\" label=\"Username\" formControlName=\"user_username\"\n                placeholder=\"Enter unique username\" [maxlength]=\"20\" size=\"sm\">\n              </cide-ele-input>\n\n              <cide-ele-input id=\"user_emailid\" label=\"Email ID\" formControlName=\"user_emailid\" type=\"email\"\n                placeholder=\"Enter valid email address\" [maxlength]=\"320\" size=\"sm\">\n              </cide-ele-input>\n\n              <cide-ele-input id=\"user_mobileno\" label=\"Mobile Number\" formControlName=\"user_mobileno\" type=\"tel\"\n                placeholder=\"Enter mobile number\" [maxlength]=\"15\" size=\"sm\">\n              </cide-ele-input>\n            </div>\n\n            <!-- User Type Mapping -->\n            <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\n              <cide-ele-select\n                id=\"syutm_user_type\"\n                label=\"User Type\"\n                placeholder=\"Select user type\"\n                [options]=\"userTypeOptions\"\n                valueKey=\"value\"\n                labelKey=\"label\"\n                formControlName=\"syutm_user_type\"\n                size=\"sm\">\n              </cide-ele-select>\n\n              @if (showTypeSpecificId()) {\n                <cide-ele-input\n                  id=\"syutm_type_specific_id\"\n                  label=\"Type-Specific ID\"\n                  placeholder=\"Auto-generated (e.g., STU001, TCH001)\"\n                  formControlName=\"syutm_type_specific_id\"\n                  [maxlength]=\"50\"\n                  size=\"sm\"\n                  [disabled]=\"true\">\n                </cide-ele-input>\n              }\n            </div>\n          </div>\n\n          <!-- Right Side: Profile Photo Upload -->\n          <div class=\"tw-flex tw-items-start tw-justify-center tw-p-0\">\n            <cide-ele-file-input id=\"user_photo_id_cyfm\" formControlName=\"user_photo_id_cyfm\" accept=\"image/*\"\n              [showPreview]=\"true\" [previewBoxMode]=\"true\" [showFileName]=\"false\" previewWidth=\"180px\"\n              previewHeight=\"120px\" placeholderText=\"Upload Photo\" placeholderIcon=\"cloud_upload\" [autoUpload]=\"true\"\n              [uploadData]=\"getProfilePhotoUploadData()\" (uploadSuccess)=\"onProfilePhotoUploadSuccess($event)\"\n              (uploadError)=\"onProfilePhotoUploadError($event)\"\n              (uploadProgressChange)=\"onProfilePhotoUploadProgress($event)\">\n            </cide-ele-file-input>\n          </div>\n        </div>\n\n\n\n        <!-- Status Control -->\n        <div class=\"tw-grid tw-grid-cols-1 tw-mb-2\">\n          <div class=\"tw-p-2 tw-bg-blue-50 tw-border tw-border-blue-100 tw-rounded-lg\">\n            <label\n              class=\"tw-flex tw-flex-col tw-cursor-pointer tw-py-2 tw-bg-transparent tw-border-none tw-rounded-none tw-transition-all tw-duration-200 hover:tw-bg-blue-75\">\n              <cide-ele-input type=\"checkbox\" label=\"Active User Status\" formControlName=\"user_isactive\"\n                class=\"tw-h-5 tw-accent-blue-500 tw-rounded tw-mb-1\" />\n              <span class=\"tw-font-semibold tw-text-gray-700 tw-text-base\"></span>\n              <span class=\"tw-text-sm tw-text-gray-600 tw-mt-1 tw-leading-relaxed\">Enable this user account for system\n                access and operations</span>\n            </label>\n          </div>\n        </div>\n      </div>\n      }\n\n      @case ('auth') {\n      <!-- Authentication Section -->\n      <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\n        <!-- Password Fields -->\n        @if (shouldShowPasswordFields()) {\n        <div class=\"tw-mb-4\">\n          <!-- Password Fields Header for Edit Mode -->\n          @if (isEditMode()) {\n          <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\n            <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-800\">Update Password</h6>\n            <button type=\"button\"\n              class=\"tw-px-3 tw-py-1 tw-bg-gray-100 tw-text-gray-600 tw-border tw-border-gray-300 tw-rounded-md tw-text-xs tw-font-medium hover:tw-bg-gray-200 tw-transition-colors\"\n              (click)=\"cancelPasswordUpdate()\">\n              Cancel Password Update\n            </button>\n          </div>\n          }\n\n          <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 md:tw-grid-cols-1 tw-gap-6\">\n            <cide-ele-input id=\"user_password\" [label]=\"getPasswordFieldLabel()\" formControlName=\"user_password\"\n              type=\"password\" placeholder=\"Enter secure password (min 8 characters)\" size=\"sm\">\n            </cide-ele-input>\n\n            <cide-ele-input id=\"user_confirm_password\" [label]=\"getPasswordConfirmLabel()\"\n              formControlName=\"user_confirm_password\" type=\"password\" placeholder=\"Confirm your password\" size=\"sm\">\n            </cide-ele-input>\n          </div>\n        </div>\n        }\n\n        <!-- Password Update Option for Edit Mode -->\n        @if (isEditMode() && !shouldShowPasswordFields()) {\n        <div class=\"tw-mb-4\">\n          <div class=\"tw-p-2 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-lg\">\n            <h6 class=\"tw-text-sm tw-font-semibold tw-text-blue-800 tw-mb-2\">Password Update</h6>\n            <p class=\"tw-text-sm tw-text-blue-600 tw-mb-3\">Current password will be kept. Click below to change\n              password.</p>\n\n            @if (hasPasswordInput()) {\n            <div\n              class=\"tw-mb-3 tw-p-2 tw-bg-yellow-50 tw-border tw-border-yellow-200 tw-rounded tw-text-sm tw-text-yellow-700\">\n              <cide-ele-icon variant=\"yellow\" size=\"sm\" class=\"tw-mr-1\">warning</cide-ele-icon>\n              Password fields contain text. Click \"Change Password\" to manage existing input.\n            </div>\n            }\n\n            <button type=\"button\"\n              class=\"tw-px-4 tw-py-2 tw-bg-blue-100 tw-text-blue-700 tw-border tw-border-blue-300 tw-rounded-md tw-text-sm tw-font-medium hover:tw-bg-blue-200 tw-transition-colors\"\n              (click)=\"triggerPasswordUpdate()\">\n              @if (hasPasswordInput()) {\n              Manage Password Fields\n              } @else {\n              Change Password\n              }\n            </button>\n          </div>\n        </div>\n        }\n\n        <!-- Password Options -->\n        <div class=\"tw-grid tw-grid-cols-1 tw-gap-4 tw-mb-4\">\n          <div class=\"tw-p-2 tw-bg-yellow-50 tw-border tw-border-yellow-100 tw-rounded-lg\">\n            <label\n              class=\"tw-flex tw-flex-col tw-gap-2 tw-cursor-pointer tw-py-2 tw-bg-transparent tw-border-none tw-rounded-none tw-transition-all tw-duration-200\">\n              <cide-ele-input type=\"checkbox\" label=\"Force Password Change on Login\"\n                formControlName=\"user_passwordchangeonlogin\" class=\"tw-h-5 tw-accent-yellow-500 tw-rounded tw-mb-1\" />\n              <span class=\"tw-text-sm tw-text-gray-600 tw-mt-1 tw-leading-relaxed\">User will be required to change\n                password on next login</span>\n            </label>\n          </div>\n        </div>\n\n      </div>\n      }\n\n      @case ('roles') {\n      <!-- Entity, Roles & Permissions Mapping Section -->\n      <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\n\n\n\n        <!-- Important Note -->\n        <div class=\"tw-bg-amber-50 tw-border tw-border-amber-200 tw-rounded-lg tw-p-2 tw-mb-4\">\n          <div class=\"tw-flex tw-items-start tw-gap-3\">\n            <cide-ele-icon variant=\"amber\" size=\"lg\">info</cide-ele-icon>\n            <div class=\"tw-flex-1\">\n              <h4 class=\"tw-text-sm tw-font-semibold tw-text-amber-800 tw-mb-1\">Entity-Role Based Access</h4>\n              <p class=\"tw-text-sm tw-text-amber-700 tw-mb-2\">User access is completely managed through entity-role\n                mappings below. At least one entity mapping is required for user access.</p>\n              @if (hasDefaultEntity()) {\n              <div class=\"tw-flex tw-items-center tw-gap-2 tw-mt-2 tw-p-2 tw-bg-amber-100 tw-rounded\">\n                <cide-ele-icon variant=\"amber\" size=\"sm\">star</cide-ele-icon>\n                <span class=\"tw-text-sm tw-text-amber-800\">\n                  <strong>Default Entity:</strong> {{ getDefaultEntityName() }}\n                </span>\n              </div>\n              } @else {\n              <div class=\"tw-text-sm tw-text-amber-600 tw-mt-2 tw-italic\">\n                ⚠️ No default entity selected. Please set one entity as default.\n              </div>\n              }\n            </div>\n          </div>\n        </div>\n\n        <!-- Entity-Role Mapping Section -->\n        <div class=\"tw-flex tw-text-center tw-justify-between tw-items-center tw-mb-4\">\n          <div>\n            <h4 class=\"tw-text-sm tw-text-left tw-font-semibold tw-text-blue-900 tw-mb-1\">Entity-Role Mapping</h4>\n            <p class=\"tw-text-sm tw-text-blue-700\">Map user to entities with specific roles and permissions</p>\n          </div>\n          <div class=\"tw-flex tw-flex-col tw-items-end\">\n            <button cideEleButton variant=\"primary\" size=\"xs\" type=\"button\" (click)=\"addEntityMapping()\"\n              leftIcon=\"add\" [disabled]=\"isViewingOwnProfile() || isAllEntitiesMapped()\"\n              [title]=\"isViewingOwnProfile() ? 'You cannot modify your own entity mappings' : (isAllEntitiesMapped() ? 'All entities are mapped' : 'Add Entity Mapping')\">\n              Add Entity Mapping\n            </button>\n\n            @if (isViewingOwnProfile()) {\n            <div class=\"tw-mt-2 tw-p-2 tw-bg-amber-50 tw-border tw-border-amber-200 tw-rounded-md tw-max-w-xs\">\n              <p class=\"tw-text-xs tw-text-amber-700\">\n                <cide-ele-icon variant=\"warning\" size=\"sm\" class=\"tw-mr-1\">lock</cide-ele-icon>\n                You cannot modify your own entity mappings.\n              </p>\n            </div>\n            } @else if (isAllEntitiesMapped()) {\n            <div class=\"tw-mt-2 tw-p-2 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-md tw-max-w-xs\">\n              <p class=\"tw-text-xs tw-text-blue-700\">\n                <cide-ele-icon variant=\"info\" size=\"sm\" class=\"tw-mr-1\">info</cide-ele-icon>\n                All available entities are already mapped.\n              </p>\n            </div>\n            }\n          </div>\n        </div>\n\n        <div formArrayName=\"core_entity_mapping\">\n            @for (mapping of entityMappings(); track mapping.syenm_entity_id_syen?._id || mapping.syenm_entity_id_syen || $index; let i = $index) {\n            <cide-ele-card\n              [title]=\"getEntityNameFromMapping(i) || 'Entity Mapping ' + (i + 1)\"\n              [subtitle]=\"mapping.syenm_isdefault ? 'Primary Entity' : ''\"\n              [cardConfig]=\"{\n                collapsible: true,\n                minimizable: false,\n                maximizable: false,\n                removable: !mapping?._id && !isViewingOwnProfile(),\n                defaultState: 'collapsed',\n                showHeader: true,\n                showFooter: false,\n                variant: 'default',\n                size: 'sm',\n                shadow: true,\n                rounded: true,\n                bordered: true\n              }\"\n              (stateChange)=\"onEntityMappingCardStateChange($event, i)\"\n              (removed)=\"removeEntityMapping(i)\"\n              class=\"tw-mb-2 entity-mapping-card tw-block\">\n              \n              <div [formGroupName]=\"i\">\n              \n              <!-- Card Content -->\n              <div class=\"tw-space-y-3\">\n                <!-- Hidden form control to maintain form structure for entity -->\n                <input type=\"hidden\" [formControlName]=\"'syenm_entity_id_syen'\" />\n                \n                <!-- Role, Default, Active, and User Type in One Row -->\n                <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-4 tw-gap-3\">\n                  <!-- Role Selection with Copy Button -->\n                  <div class=\"tw-flex tw-flex-col\">\n                    <cide-ele-select label=\"Role for this Entity\" [options]=\"getRoleOptionsForEntity(i)\"\n                      formControlName=\"syenm_role_id_syusrol\" valueKey=\"_id\" labelKey=\"syusrol_role_name\"\n                      placeholder=\"Select role for this entity\" size=\"sm\" (change)=\"onRoleChange(i, $event)\">\n                    </cide-ele-select>\n                    @if (!isViewingOwnProfile() && entityMappings().length > 1) {\n                      <button \n                        type=\"button\"\n                        (click)=\"showCopyRoleFromEntityDrawer(i)\"\n                        class=\"tw-mt-1 tw-text-xs tw-text-blue-600 hover:tw-text-blue-800 tw-flex tw-items-center tw-gap-1 tw-w-fit tw-transition-colors\"\n                        title=\"Copy role and settings from another entity mapping\">\n                        <cide-ele-icon variant=\"blue\" size=\"sm\">content_copy</cide-ele-icon>\n                        <span>Copy from Entity</span>\n                      </button>\n                    }\n                  </div>\n                  \n                  <!-- Primary Entity Checkbox -->\n                  <div class=\"tw-flex tw-flex-col tw-justify-end\">\n                    <div class=\"tw-flex tw-items-center tw-gap-2 tw-px-3 tw-py-2 tw-rounded-md tw-border tw-border-green-300 tw-bg-green-50 dark:tw-bg-green-900/30 dark:tw-border-green-700\" (click)=\"$event.stopPropagation()\">\n                      <input \n                        type=\"checkbox\" \n                        [checked]=\"mapping.syenm_isdefault\"\n                        (change)=\"onDefaultEntityChange(i, $event)\" \n                        class=\"tw-h-4 tw-w-4 tw-accent-green-600 tw-cursor-pointer\" />\n                      <label class=\"tw-inline-flex tw-items-center tw-gap-1 tw-text-xs tw-font-semibold tw-text-green-700 dark:tw-text-green-300 tw-cursor-pointer\">\n                        <cide-ele-icon variant=\"green\" size=\"sm\" class=\"!tw-text-green-600 dark:!tw-text-green-400\">star</cide-ele-icon>\n                        DEFAULT\n                      </label>\n                    </div>\n                  </div>\n                  \n                  <!-- Active Mapping Checkbox -->\n                  <div class=\"tw-flex tw-flex-col tw-justify-end\">\n                    <div class=\"tw-flex tw-items-center tw-gap-2 tw-px-3 tw-py-2 tw-rounded-md tw-border tw-border-blue-300 tw-bg-blue-50 dark:tw-bg-blue-900/30 dark:tw-border-blue-700\" (click)=\"$event.stopPropagation()\">\n                      <input \n                        type=\"checkbox\" \n                        [checked]=\"mapping.syenm_isactive\"\n                        (change)=\"onActiveMappingChange(i, $event)\" \n                        class=\"tw-h-4 tw-w-4 tw-accent-blue-600 tw-cursor-pointer\" />\n                      <label class=\"tw-inline-flex tw-items-center tw-gap-1 tw-text-xs tw-font-semibold tw-text-blue-700 dark:tw-text-blue-300 tw-cursor-pointer\">\n                        <cide-ele-icon variant=\"blue\" size=\"sm\" class=\"!tw-text-blue-600 dark:!tw-text-blue-400\">check_circle</cide-ele-icon>\n                        Active\n                      </label>\n                    </div>\n                  </div>\n                  \n                  <!-- User Type Mappings -->\n                  <div class=\"tw-flex tw-flex-col tw-justify-end\">\n                    <div class=\"tw-flex tw-items-center tw-gap-1.5 tw-flex-wrap\">\n                      @if (getEntityIdFromMapping(i)) {\n                        @if (getUserTypeMappingsForEntity(getEntityIdFromMapping(i)).length > 0) {\n                          @for (typeMapping of getUserTypeMappingsForEntity(getEntityIdFromMapping(i)); track typeMapping._id || typeMapping.syutm_type_specific_id) {\n                            <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded tw-text-[10px] tw-font-medium tw-bg-purple-50 dark:tw-bg-purple-900/30 tw-text-gray-900 dark:tw-text-gray-100 tw-border tw-border-purple-300 dark:tw-border-purple-700\">\n                              <cide-ele-icon variant=\"purple\" size=\"sm\" class=\"tw-mr-1 !tw-text-purple-600 dark:!tw-text-purple-400\">person</cide-ele-icon>\n                              {{ typeMapping.syutm_user_type }}\n                              @if (typeMapping.syutm_isactive) {\n                                <span class=\"tw-ml-1 tw-w-1.5 tw-h-1.5 tw-rounded-full tw-bg-green-600\"></span>\n                              }\n                            </span>\n                          }\n                        }\n                      }\n                    </div>\n                  </div>\n                </div>\n\n\n                <!-- Entity-Specific Details and Active Period - All in One Row -->\n                <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3\">\n                  <cide-ele-select label=\"Department for this Entity\" [options]=\"getDepartmentOptionsForEntity(i)\"\n                    formControlName=\"syenm_department_id_sydept\" (change)=\"onDepartmentChange($event)\" valueKey=\"_id\"\n                    labelKey=\"sydept_name\" placeholder=\"Select department\" size=\"sm\">\n                  </cide-ele-select>\n\n                  <cide-ele-select label=\"Designation for this Entity\" [options]=\"getDesignationOptionsForEntity(i)\"\n                    valueKey=\"_id\" labelKey=\"sydsg_name\" formControlName=\"syenm_designation_id_sydsg\"\n                    placeholder=\"Select designation\" size=\"sm\">\n                  </cide-ele-select>\n\n                  <cide-ele-input label=\"Active From\" [id]=\"'syenm_activefrom['+i+']'\"\n                    formControlName=\"syenm_activefrom\" type=\"date\" size=\"sm\">\n                  </cide-ele-input>\n\n                  <cide-ele-input label=\"Active Until\" [id]=\"'syenm_activeupto['+i+']'\"\n                    formControlName=\"syenm_activeupto\" type=\"date\" size=\"sm\">\n                  </cide-ele-input>\n                </div>\n\n                <!-- Menu Rights Grid for this Entity-Role -->\n                <div class=\"tw-border-t tw-border-gray-200\">\n\n                  @if (getMenuRightsForMapping(i).length > 0) {\n                  <!-- Menu Rights Tree Grid -->\n\n                  <cide-ele-data-grid [config]=\"getMenuRightsGridConfig(i)\"\n                    [templateRenderers]=\"getMenuRightsTemplateRenderers(i)\"\n                    (gridEvent)=\"onMenuRightsGridEvent($event, i)\" class=\"tw-h-96 tw-w-full\">\n                  </cide-ele-data-grid>\n\n                  } @else {\n                  <div class=\"tw-text-center tw-py-8 tw-bg-gray-50 tw-border tw-border-gray-200 tw-rounded-lg\">\n                    <div class=\"tw-text-gray-400 tw-mb-3\">\n                      <cide-ele-icon variant=\"gray\" size=\"lg\">menu</cide-ele-icon>\n                    </div>\n                    <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-600 tw-mb-2\">No Menu Rights Available</h6>\n                    <p class=\"tw-text-xs tw-text-gray-500 tw-mb-3 tw-text-center\">Select both entity and role to\n                      automatically load\n                      menu rights for this mapping.</p>\n                  </div>\n                  }\n                </div>\n              </div>\n              </div>\n            </cide-ele-card>\n            }\n          </div>\n\n          @if (entityMappings().length === 0) {\n          <div class=\"tw-text-center tw-py-8 tw-bg-white tw-border tw-border-blue-200 tw-rounded-lg\">\n            <div class=\"tw-text-blue-400 tw-mb-3\">\n              <cide-ele-icon variant=\"blue\" size=\"lg\">business</cide-ele-icon>\n            </div>\n            <h4 class=\"tw-text-sm tw-font-medium tw-text-blue-800 tw-mb-2\">No Entity Mappings</h4>\n            <p class=\"tw-text-blue-600 tw-mb-4 tw-text-center\">Add entity mappings to assign specific roles and\n              permissions for different entities.</p>\n            @if (!isViewingOwnProfile()) {\n            <button class=\"tw-mx-auto\" cideEleButton variant=\"primary\" size=\"xs\" type=\"button\"\n              (click)=\"addEntityMapping()\" leftIcon=\"add\">\n              Add First Entity Mapping\n            </button>\n            } @else {\n            <p class=\"tw-text-amber-600 tw-text-sm tw-font-medium\">\n              <cide-ele-icon variant=\"warning\" size=\"sm\" class=\"tw-mr-1\">lock</cide-ele-icon>\n              You cannot modify your own entity mappings.\n            </p>\n            }\n          </div>\n          }\n        </div>\n      }\n\n      @case ('addresses') {\n      <!-- Contact Addresses Section -->\n      <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\n        <div class=\"tw-flex tw-justify-end\">\n          <div class=\"tw-flex tw-justify-between tw-items-end tw-mb-2 tw-gap-4\">\n            <button cideEleButton variant=\"primary\" size=\"xs\" type=\"button\" (click)=\"addContactAddress()\"\n              leftIcon=\"add\" [disabled]=\"!hasAddContactAddressRights()\">\n              Add New Address\n            </button>\n          </div>\n        </div>\n\n        <div formArrayName=\"core_user_contact_addresses\">\n          @for (address of contactAddresses(); track $index; let i = $index) {\n          <div [formGroupName]=\"i\"\n            class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-xl tw-mb-8 tw-overflow-hidden tw-transition-all tw-duration-300 hover:tw-shadow-lg tw-shadow-sm\">\n            <div\n              class=\"tw-bg-gradient-to-r tw-from-gray-50 tw-to-gray-100 tw-px-4 tw-py-2 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-gray-200\">\n              <!-- Use address type as header instead of generic \"Address X\" -->\n              <h4 class=\"tw-m-0 tw-text-gray-700 tw-text-sm tw-font-semibold tw-tracking-tight\">\n                {{ getAddressTypeLabel(i) || ('Address ' + (i + 1)) }}\n              </h4>\n              <div class=\"tw-flex tw-items-center tw-gap-2\">\n                @if (isAddressOwner(i)) {\n                <button cideEleButton variant=\"secondary\" size=\"xs\" type=\"button\" (click)=\"shareAddress(i)\"\n                  leftIcon=\"share\" class=\"tw-text-blue-600 hover:tw-text-blue-700\">\n                  Share\n                </button>\n                }\n                @if (!address?._id) {\n                <button cideEleButton variant=\"danger\" size=\"xs\" type=\"button\" (click)=\"removeContactAddress(i)\"\n                  leftIcon=\"delete\">\n                  Remove\n                </button>\n                }\n              </div>\n            </div>\n            <div class=\"tw-p-4\">\n              <!-- Main Layout: Inputs on Left, Address Textarea on Right -->\n              <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\n                \n                <!-- Left Side: Input Fields (3/4 width) -->\n                <div class=\"lg:tw-col-span-3\">\n                  <!-- Row 1: Address Type, Contact Person -->\n                  <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3 tw-mb-3\">\n                    <cide-ele-select label=\"Address Type\" [options]=\"addressTypeOptions()\" id=\"sycad_address_type_id_sygms\"\n                      formControlName=\"sycad_address_type_id_sygms\" placeholder=\"Select type\" size=\"sm\"\n                      valueKey=\"_id\" labelKey=\"sygms_title\" (change)=\"onAddressTypeChange(i)\">\n                    </cide-ele-select>\n\n                    <cide-ele-input label=\"Contact Person\" formControlName=\"sycad_contact_person_name\"\n                      placeholder=\"Enter contact person\" size=\"sm\">\n                    </cide-ele-input>\n                  </div>\n\n                  <!-- Row 2: Postal Code, City, State, Country -->\n                  <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-4 tw-gap-3\">\n                    <cide-ele-select label=\"Postal Code\" [options]=\"addressPostalCodes()[i] || []\"\n                      formControlName=\"sycad_contact_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\n                      [loading]=\"addressPostalCodesLoading()[i] || false\" (searchChange)=\"onPostalCodeSearch($event, i)\"\n                      (change)=\"onPostalCodeSelection($event, i)\" size=\"sm\">\n                    </cide-ele-select>\n\n                    <cide-ele-input label=\"City\" formControlName=\"sycad_contact_city_sypin\" placeholder=\"Enter city\"\n                      size=\"sm\">\n                    </cide-ele-input>\n\n                    <cide-ele-input label=\"State\" formControlName=\"sycad_contact_state_sypin\" placeholder=\"Enter state\"\n                      size=\"sm\">\n                    </cide-ele-input>\n\n                    <cide-ele-select label=\"Country\" [options]=\"addressCountries()[i] || []\"\n                      formControlName=\"sycad_contact_country_syctr\" placeholder=\"Select country\" valueKey=\"_id\"\n                      labelKey=\"syctr_country_iso_name\" [searchable]=\"true\" (searchChange)=\"onCountrySearch($event, i)\"\n                      [loading]=\"addressCountriesLoading()[i] || false\" size=\"sm\">\n                    </cide-ele-select>\n                  </div>\n                </div>\n\n                <!-- Right Side: Address Textarea (1/4 width, spans 2 rows) -->\n                <div class=\"lg:tw-col-span-1 lg:tw-row-span-2 tw-flex tw-flex-col\">\n                  <cide-ele-textarea label=\"Complete Address\" formControlName=\"sycad_contact_address\"\n                    placeholder=\"Enter complete address with area, city, and landmarks\" [rows]=\"4\" size=\"sm\"\n                    class=\"tw-h-full\">\n                  </cide-ele-textarea>\n                </div>\n              </div>\n\n              <!-- Contact Details: Primary Phone, Alt Phone, Fax, Primary Email in 4 columns -->\n              <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\n                <cide-ele-input label=\"Primary Phone\" formControlName=\"sycad_contact_phone\" type=\"tel\"\n                  placeholder=\"Primary phone\" size=\"sm\">\n                </cide-ele-input>\n\n                <cide-ele-input label=\"Alternate Phone\" formControlName=\"sycad_contact_phone_alt\" type=\"tel\"\n                  placeholder=\"Alternate phone\" size=\"sm\">\n                </cide-ele-input>\n\n                <cide-ele-input label=\"Fax Number\" formControlName=\"sycad_contact_fax\" placeholder=\"Fax number\"\n                  size=\"sm\">\n                </cide-ele-input>\n\n                <cide-ele-input label=\"Primary Email\" formControlName=\"sycad_contact_email\" type=\"email\"\n                  placeholder=\"Primary email\" size=\"sm\">\n                </cide-ele-input>\n              </div>\n\n              <!-- Alternate Email in single row -->\n              <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3\">\n                <cide-ele-input label=\"Alternate Email\" formControlName=\"sycad_contact_email_alt\" type=\"email\"\n                  placeholder=\"Alternate email address\" size=\"sm\">\n                </cide-ele-input>\n              </div>\n            </div>\n          </div>\n          }\n        </div>\n      </div>\n      }\n\n      @case ('documents') {\n      <!-- Documents Section -->\n      <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\n        <div class=\"tw-flex tw-justify-end tw-items-end tw-mb-2 tw-gap-4\">\n          <button cideEleButton variant=\"primary\" size=\"xs\" type=\"button\" (click)=\"addDocument()\" leftIcon=\"add\" [disabled]=\"!hasAddDocumentRights()\">\n            Add Document\n          </button>\n        </div>\n        <div formArrayName=\"core_user_documents\">\n          @for (doc of documents(); track $index; let i = $index) {\n          <div [formGroupName]=\"i\"\n            class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-xl tw-mb-8 tw-overflow-hidden tw-transition-all tw-duration-300 hover:tw-shadow-lg tw-shadow-sm\">\n            <div\n              class=\"tw-bg-gradient-to-r tw-from-gray-50 tw-to-gray-100 tw-px-4 tw-py-2 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-gray-200\">\n              <h4 class=\"tw-m-0 tw-text-gray-700 tw-text-sm tw-font-semibold tw-tracking-tight\">\n                {{ getDocumentTypeLabel(i) || ('Document ' + (i + 1)) }}\n              </h4>\n              <div class=\"tw-flex tw-gap-2\">\n                @if (doc?._id) {\n                <button cideEleButton variant=\"secondary\" size=\"xs\" type=\"button\" (click)=\"shareDocumentRights(i)\"\n                  leftIcon=\"share\">\n                  Share\n                </button>\n                }\n              </div>\n            </div>\n            <div class=\"tw-p-4\">\n              <!-- Main Layout: Inputs on Left, File Upload on Right -->\n              <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-3 tw-gap-4\">\n                \n                <!-- Left Side: Document Information (2/3 width) -->\n                <div class=\"lg:tw-col-span-2\">\n                  <!-- Row 1: Document Type, Document Number, Name as per Document -->\n                  <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-3 tw-mb-3\">\n                    <cide-ele-select label=\"Document Type\" [options]=\"documentTypeOptions()\"\n                      formControlName=\"syusd_document_type_id_sygms\" placeholder=\"Select type\" size=\"sm\"\n                      valueKey=\"_id\" labelKey=\"sygms_title\" (change)=\"onDocumentTypeChange(i)\">\n                    </cide-ele-select>\n\n                    <cide-ele-input label=\"Document Number\" formControlName=\"syusd_doc_number\"\n                      placeholder=\"Document number\" size=\"sm\">\n                    </cide-ele-input>\n\n                    <cide-ele-input label=\"Name as per Document\" formControlName=\"syusd_doc_name_as_per_doc\"\n                      placeholder=\"Name on document\" size=\"sm\">\n                    </cide-ele-input>\n                  </div>\n\n                  <!-- Row 2: Issue Date, Expiry Date, Photo Group -->\n                  <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-3 tw-mb-3\">\n                    <cide-ele-input label=\"Issue Date\" formControlName=\"syusd_doc_issue_date\"\n                      [id]=\"'syusd_doc_issue_date['+i+']'\" type=\"date\" size=\"sm\">\n                    </cide-ele-input>\n\n                    <cide-ele-input label=\"Expiry Date\" formControlName=\"syusd_doc_expiry_date\"\n                      [id]=\"'syusd_doc_expiry_date['+i+']'\" type=\"date\" size=\"sm\">\n                    </cide-ele-input>\n                  </div>\n\n                  <!-- Row 3: Verification Status, KYC Status -->\n                  <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3\">\n                    <cide-ele-select label=\"Verification Status\" [options]=\"documentVerificationStatusOptions()\"\n                      formControlName=\"syusd_doc_verification_status_id_sygms\" placeholder=\"Select status\"\n                      size=\"sm\" valueKey=\"_id\" labelKey=\"sygms_title\">\n                    </cide-ele-select>\n\n                    <cide-ele-select label=\"KYC Status\" [options]=\"documentKycStatusOptions()\"\n                      formControlName=\"syusd_doc_kyc_status_id_sygms\" placeholder=\"Select KYC status\" size=\"sm\"\n                      valueKey=\"_id\" labelKey=\"sygms_title\">\n                    </cide-ele-select>\n                  </div>\n                </div>\n\n                <!-- Right Side: File Upload (1/3 width) -->\n                <div class=\"lg:tw-col-span-1\">\n                  <div class=\"tw-bg-gray-50 tw-border tw-border-gray-200 tw-rounded-lg tw-p-3 tw-h-full\">\n                    \n                    <!-- File Upload Input -->\n                    <cide-ele-file-input\n                      [id]=\"'document-files-' + i\"\n                      [multiple]=\"true\"\n                      formControlName=\"syusd_photo_group_id_cyfm\"\n                      [accept]=\"'.pdf,.jpg,.jpeg,.png,.doc,.docx'\"\n                      [autoUpload]=\"true\"\n                      [uploadData]=\"getDocumentUploadData(i)\"\n                      (change)=\"onDocumentFilesSelected($event, i)\"\n                      (uploadSuccess)=\"onDocumentUploadSuccess($event, i)\"\n                      (uploadError)=\"onDocumentUploadError($event, i)\"\n                      (uploadProgressChange)=\"onDocumentUploadProgress($event, i)\"\n                      class=\"tw-mb-3\"\n                      size=\"sm\">\n                    </cide-ele-file-input>\n\n                    <!-- Upload Status -->\n                    <!-- Upload status is now handled by the file input component itself -->\n                  </div>\n                </div>\n              </div>\n            </div>\n          </div>\n          }\n        </div>\n      </div>\n      }\n\n      @case ('family') {\n      <!-- Family Details Section - Compact Design -->\n      <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\n        <div class=\"tw-flex tw-justify-end tw-items-end tw-mb-3 tw-gap-4\">\n          <button cideEleButton variant=\"primary\" size=\"xs\" type=\"button\" (click)=\"addFamilyDetail()\" leftIcon=\"add\" [disabled]=\"!hasAddFamilyDetailRights()\">\n            Add Family Member\n          </button>\n        </div>\n\n        <div formArrayName=\"core_user_family_details\">\n          @for (family of familyDetails(); track $index; let i = $index) {\n          <div [formGroupName]=\"i\"\n            class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-lg tw-mb-4 tw-overflow-hidden tw-transition-all tw-duration-200 hover:tw-shadow-md tw-shadow-sm\">\n            \n            <!-- Compact Header -->\n            <div class=\"tw-bg-gray-50 tw-px-4 tw-py-2 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-gray-200\">\n              <h4 class=\"tw-m-0 tw-text-gray-700 tw-text-sm tw-font-medium\">Family Member {{ i + 1 }}</h4>\n              <div class=\"tw-flex tw-gap-2\">\n                @if (family?._id) {\n                <button cideEleButton variant=\"secondary\" size=\"xs\" type=\"button\" (click)=\"shareFamilyDetailRights(i)\"\n                  leftIcon=\"share\">\n                  Share\n                </button>\n                }\n                @if (!family?._id) {\n                <button cideEleButton variant=\"danger\" size=\"xs\" type=\"button\" (click)=\"removeFamilyDetail(i)\" leftIcon=\"delete\">\n                  Remove\n                </button>\n                }\n              </div>\n            </div>\n            \n            <!-- Compact Form Content - 3 inputs per row -->\n            <div class=\"tw-p-4\">\n              <!-- Row 1: Name, User, and Combined Relationship/Active Status (33.33% each) -->\n              <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-3 tw-mb-3\">\n                <cide-ele-input label=\"Family Member Name\" formControlName=\"syfdl_family_member_name\"\n                  placeholder=\"Enter family member full name\" size=\"sm\">\n                </cide-ele-input>\n\n                <cide-ele-select label=\"Family Member User\" [options]=\"userOptions(i)\"\n                  formControlName=\"syfdl_family_member_id_user\" placeholder=\"Select family member user\" size=\"sm\"\n                  valueKey=\"_id\" labelKey=\"user_fullname\" [searchable]=\"true\"\n                  [loading]=\"userSearchLoading()[i] || false\" (searchChange)=\"onUserSearchChange($event, i)\"\n                  (change)=\"onUserSelectionChange($event, i)\">\n                </cide-ele-select>\n\n                <!-- Combined Relationship and Active Status (33.33%) -->\n                <div class=\"tw-flex tw-flex-row tw-gap-2 tw-items-end\">\n                  <div class=\"tw-flex-1\">\n                    <cide-ele-select label=\"Relationship\" [options]=\"relationshipOptions()\"\n                      formControlName=\"syfdl_relationship_id_sygms\" placeholder=\"Select relationship\" size=\"sm\"\n                      valueKey=\"_id\" labelKey=\"sygms_title\">\n                    </cide-ele-select>\n                  </div>\n\n                  <div class=\"tw-flex tw-items-center tw-pt-1 tw-flex-shrink-0\">\n                    <cide-ele-input formControlName=\"syfdl_isactive\" type=\"checkbox\" label=\"Active\" size=\"sm\">\n                    </cide-ele-input>\n                  </div>\n                </div>\n              </div>\n\n              <!-- Row 2: Blood Group, DOB, and Phone -->\n              <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 xl:tw-grid-cols-3 tw-gap-3 tw-mb-3\">\n                <cide-ele-select label=\"Blood Group\" [options]=\"bloodGroupOptions()\"\n                  formControlName=\"syfdl_blood_group_sygms\" placeholder=\"Select blood group\" size=\"sm\" valueKey=\"_id\"\n                  labelKey=\"sygms_title\">\n                </cide-ele-select>\n\n                <cide-ele-input label=\"Date of Birth\" formControlName=\"syfdl_family_member_dob\" type=\"date\" size=\"sm\"\n                  [id]=\"'syfdl_family_member_dob['+i+']'\">\n                </cide-ele-input>\n\n                <cide-ele-input label=\"Contact Phone\" formControlName=\"syfdl_contact_phone\" type=\"tel\"\n                  placeholder=\"Enter contact phone\" size=\"sm\">\n                </cide-ele-input>\n              </div>\n\n              <!-- Row 3: Email, Email ID, and Contact Number -->\n              <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 xl:tw-grid-cols-3 tw-gap-3 tw-mb-3\">\n                <cide-ele-input label=\"Contact Email\" formControlName=\"syfdl_contact_email\" type=\"email\"\n                  placeholder=\"Enter contact email\" size=\"sm\">\n                </cide-ele-input>\n\n                <cide-ele-input label=\"Contact Email ID\" formControlName=\"syfdl_contact_email_id\" type=\"email\"\n                  placeholder=\"Enter contact email ID\" size=\"sm\">\n                </cide-ele-input>\n\n                <cide-ele-input label=\"Contact Number\" formControlName=\"syfdl_contact_number\" type=\"tel\"\n                  placeholder=\"Enter contact number\" size=\"sm\">\n                </cide-ele-input>\n              </div>\n\n            </div>\n          </div>\n          }\n        </div>\n      </div>\n      }\n      }\n    </div>\n\n    <!-- Form Actions -->\n    <div\n      class=\"tw-flex tw-justify-between tw-items-center tw-gap-4 tw-py-2 tw-bg-white tw-border-t tw-border-gray-200 tw-sticky tw-bottom-0 tw-z-10\">\n      <!-- Error Display Component -->\n      <div class=\"tw-flex-1\">\n        <cide-form-field-error [formGroup]=\"userMasterForm\"></cide-form-field-error>\n      </div>\n\n      <!-- Action Buttons -->\n      <div class=\"tw-flex tw-gap-4\">\n      <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n        [disabled]=\"loading()\">\n        Reset Form\n      </button>\n\n      <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || userMasterForm.invalid\"\n        [loading]=\"loading()\" leftIcon=\"save\">\n        Save User Master\n      </button>\n      </div>\n    </div>\n  </form>\n</div>\n</cide-lyt-shared-wrapper>\n\n<!-- Template Renderers for Role Permissions Grid -->\n<ng-template #menuDetailsRendererTemplate let-row=\"row\">\n  <div class=\"tw-flex tw-items-center tw-space-x-3 tw-min-w-0\">\n    <!-- Menu Icon -->\n    <div class=\"tw-flex-shrink-0\">\n      @if (row.syme_type === 'module') {\n      <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">folder</cide-ele-icon>\n      } @else if (row.syme_type === 'section') {\n      <cide-ele-icon class=\"tw-text-green-600 tw-w-4 tw-h-4\">folder_open</cide-ele-icon>\n      } @else if (row.syme_type === 'menu') {\n      <cide-ele-icon class=\"tw-text-purple-600 tw-w-4 tw-h-4\">menu</cide-ele-icon>\n      } @else {\n      <cide-ele-icon class=\"tw-text-gray-600 tw-w-4 tw-h-4\">description</cide-ele-icon>\n      }\n    </div>\n\n    <!-- Menu Details -->\n    <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n      <div class=\"tw-flex tw-items-center tw-gap-2\">\n        <div class=\"tw-text-xs tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"row.syme_title\">\n          {{ row.syme_title || row.menu?.syme_title || row.menu?.syme_menu_name || 'Untitled' }}\n        </div>\n        <!-- Green pill indicator for parent menus with child permissions -->\n        @if (row.syme_type === 'module' || row.syme_type === 'section') {\n        @if (hasChildMenusWithPermissions(row._id)) {\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 tw-whitespace-nowrap\">\n          Assigned\n        </span>\n        }\n        }\n      </div>\n      @if (row.permission?.sygms_name) {\n      <div class=\"tw-text-xs tw-text-blue-500 tw-truncate\" [title]=\"row.permission?.sygms_name\">\n        {{ row.permission?.sygms_name }}\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  <div class=\"tw-flex tw-items-center tw-justify-center\">\n    @if (row.syme_type === 'module') {\n    <span\n      class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800\">\n      Module\n    </span>\n    } @else if (row.syme_type === 'section') {\n    <span\n      class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\n      Section\n    </span>\n    } @else if (row.syme_type === 'menu') {\n    <span\n      class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-purple-100 tw-text-purple-800\">\n      Menu\n    </span>\n    } @else {\n    <span\n      class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-gray-100 tw-text-gray-800\">\n      {{ row.syme_type || 'Unknown' }}\n    </span>\n    }\n  </div>\n</ng-template>\n\n<!-- Permissions Checkbox Renderer Template -->\n<ng-template #permissionsCheckboxRendererTemplate let-row=\"row\" let-value=\"value\">\n  <div class=\"tw-flex tw-flex-wrap tw-gap-2 tw-max-w-full\">\n    @if (row.syme_type === 'menu' && row?.syme_permissions_id_sygms && row?.syme_permissions_id_sygms.length > 0) {\n    @for (permissionId of row?.syme_permissions_id_sygms || []; track permissionId) {\n    <div class=\"tw-flex tw-items-center tw-space-x-1\">\n      <div class=\"tw-flex tw-items-center tw-space-x-1\">\n        <input type=\"checkbox\" [checked]=\"isPermissionSelected(row._id, permissionId)\" [disabled]=\"true\"\n          class=\"tw-h-4 tw-w-4 tw-text-blue-600 tw-bg-gray-100 tw-border-gray-300 tw-rounded focus:tw-ring-blue-500\">\n        <label class=\"tw-text-xs tw-text-gray-700\">\n          {{ getPermissionById(permissionId)?.sygms_title || 'Unknown' }}\n        </label>\n      </div>\n    </div>\n    }\n    } @else {\n    <!-- Show green checkmark for parent menus with child permissions -->\n    @if (row.syme_type === 'module' || row.syme_type === 'section' || row.syme_type === 'title') {\n    @if (hasChildMenusWithPermissions(row._id)) {\n    <div class=\"tw-flex tw-items-center tw-justify-center tw-w-6 tw-h-6 tw-bg-green-100 tw-rounded-full\">\n      <cide-ele-icon class=\"tw-text-green-600\" size=\"sm\">\n        check\n      </cide-ele-icon>\n    </div>\n    } @else {\n    <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\n    }\n    } @else {\n    <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\n    }\n    }\n  </div>\n</ng-template>\n\n<!-- Menu Rights Permissions Renderer Template -->\n<ng-template #menuRightsPermissionsRendererTemplate let-row=\"row\" let-value=\"value\">\n  <div class=\"tw-flex tw-flex-wrap tw-gap-2 tw-max-w-full\">\n    <!-- Role Rights Display -->\n    @if (row.role_rights && row.role_rights.length > 0) {\n    <div class=\"tw-mb-2\">\n      <div class=\"tw-text-xs tw-text-gray-500 tw-mb-1\">Role Rights:</div>\n      <div class=\"tw-flex tw-flex-wrap tw-gap-1\">\n        @for (right of row.role_rights; track $index) {\n        <span class=\"tw-inline-block tw-px-2 tw-py-1 tw-text-xs tw-bg-blue-100 tw-text-blue-800 tw-rounded\">\n          {{ right }}\n        </span>\n        }\n      </div>\n    </div>\n    }\n\n\n    <!-- Exception Indicator -->\n    @if (row.hasException) {\n    <div class=\"tw-mt-2\">\n      <span class=\"tw-inline-block tw-px-2 tw-py-1 tw-text-xs tw-bg-yellow-100 tw-text-yellow-800 tw-rounded\">\n        Override\n      </span>\n    </div>\n    } @else {\n    <div class=\"tw-mt-2\">\n      <span class=\"tw-text-xs tw-text-gray-400\">Default</span>\n    </div>\n    }\n  </div>\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-2 tw-max-w-full\">\n    @if (row._permissionValues && Object.keys(row._permissionValues).length > 0) {\n    @for (permissionId of Object.keys(row._permissionValues); track permissionId) {\n    <div class=\"tw-flex tw-items-center tw-space-x-2\">\n      <cide-ele-input type=\"checkbox\" [ngModel]=\"row._permissionValues[permissionId].checked\"\n        (ngModelChange)=\"onPermissionChangeSafe($event, row, permissionId)\"\n        [id]=\"'permission-' + row._id + '-' + permissionId\" class=\"tw-h-4 tw-w-4\">\n      </cide-ele-input>\n      <label [for]=\"'permission-' + row._id + '-' + permissionId\" \n        class=\"tw-text-xs tw-cursor-pointer\"\n        [ngClass]=\"{\n          'tw-text-gray-700': row._permissionValues[permissionId].modified === row._permissionValues[permissionId].actual,\n          'tw-text-blue-600 tw-font-semibold': row._permissionValues[permissionId].modified !== row._permissionValues[permissionId].actual\n        }\">\n        {{ row._permissionValues[permissionId].permission?.sygms_title }}\n        @if (row._permissionValues[permissionId].modified !== row._permissionValues[permissionId].actual) {\n        <span class=\"tw-text-xs tw-text-orange-500 tw-ml-1\" title=\"Modified from role permission\">\n          ({{ row._permissionValues[permissionId].actual ? '✓' : '✗' }})\n        </span>\n        }\n      </label>\n    </div>\n    }\n    } @else {\n    <!-- No permissions to display - show N/A (permissions are already loaded, just empty) -->\n    <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\n    }\n  </div>\n</ng-template>","import { Component, inject, signal, OnInit, AfterViewInit, ViewChild, TemplateRef, DestroyRef, effect, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n  CideIconComponent\n} from 'cloud-ide-element';\nimport { CideEleButtonComponent } from 'cloud-ide-element';\nimport {\n  CideEleDataGridComponent,\n  DropdownItem,\n  DropdownConfig,\n  GridConfiguration,\n  GridEvent,\n  GridColumn\n} from 'cloud-ide-element';\nimport { CideEleDropdownComponent } from 'cloud-ide-element';\nimport { NotificationService } from 'cloud-ide-element';\nimport { AuthUserMst, AuthUserMstListPayload, generateStringFromObject } from 'cloud-ide-lms-model';\nimport { AppStateHelperService, CideLytSharedService, RightsService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { CideCoreUserMasterService } from '../../services/user-master.service';\n\n// Using any type as per project preference - interfaces managed in cloud-ide-lms-model\n\n@Component({\n  selector: 'cide-core-user-list',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    CideIconComponent,\n    CideEleButtonComponent,\n    CideEleDataGridComponent,\n    CideEleDropdownComponent,\n    CideLytSharedWrapperComponent\n  ],\n  templateUrl: './user-list.component.html',\n  styles: [`\n    .user-master-listing-container {\n      @apply tw-w-full tw-h-full tw-flex tw-flex-col tw-min-w-0;\n    }\n\n    cide-ele-data-grid {\n      @apply tw-w-full tw-h-full tw-min-w-0;\n    }\n    \n    :host {\n      @apply tw-w-full tw-h-full tw-flex tw-flex-col tw-min-w-0;\n    }\n  `]\n})\nexport class CideCoreUserListComponent implements OnInit, AfterViewInit {\n  // Modern dependency injection using inject()\n  router = inject(Router);\n  route = inject(ActivatedRoute);\n  userMasterService = inject(CideCoreUserMasterService);\n  appState = inject(AppStateHelperService);\n  sharedService = inject(CideLytSharedService);\n  private notificationService = inject(NotificationService);\n  private rightsService = inject(RightsService);\n  private destroyRef = inject(DestroyRef);\n\n  // ViewChild reference to the grid component\n  @ViewChild(CideEleDataGridComponent) gridComponent!: CideEleDataGridComponent<any>;\n\n  // Template references for custom renderers\n  @ViewChild('actionsTemplate', { static: true }) actionsTemplate!: TemplateRef<any>;\n  @ViewChild('userDetailsTemplate', { static: true }) userDetailsTemplate!: TemplateRef<any>;\n  @ViewChild('contactInfoTemplate', { static: true }) contactInfoTemplate!: TemplateRef<any>;\n  @ViewChild('organizationTemplate', { static: true }) organizationTemplate!: TemplateRef<any>;\n  @ViewChild('validityTemplate', { static: true }) validityTemplate!: TemplateRef<any>;\n  @ViewChild('statusTemplate', { static: true }) statusTemplate!: TemplateRef<any>;\n\n  // State management using Angular Signals for server-side operations\n  users = signal<any[]>([]);\n  loading = signal(false);\n  error = signal<string | null>(null);\n\n  // Server-side pagination state\n  currentPage = signal(1);\n  pageSize = signal(10);\n  totalItems = signal(0);\n  totalPages = signal(0);\n\n  // Page config (title/subtitle) from page API via route data\n  pageTitle = signal<string>('');\n  pageSubtitle = signal<string>('');\n\n  // Page code computed based on user type\n  pageCode = computed(() => {\n    const type = this.userType()?.toUpperCase();\n    if (type === 'TEACHER' || type === 'FACULTY') {\n      return 'academics_teacher_list';\n    } else if (type === 'STUDENT') {\n      return 'academics_student_list';\n    }\n    return 'auth_user_mst'; // Default page code\n  });\n\n  // Shared wrapper setup - computed based on pageCode\n  shared_wrapper_setup_param = computed(() => ({ sypg_page_code: this.pageCode() }));\n\n  // Constructor to set up reactive effect for page data\n  constructor() {\n    // Watch for page code changes and re-initialize rights when userType changes\n    effect(() => {\n      const currentPageCode = this.pageCode();\n      if (!currentPageCode) return;\n\n      // Re-initialize rights when page code changes (due to userType change)\n      // Check if already initialized for this page code to prevent infinite loops\n      if (this.rightsService.getCurrentPageCode() !== currentPageCode) {\n        this.rightsService.initializeRights(currentPageCode);\n        console.log('🔐 Rights re-initialized for page code:', currentPageCode);\n      } else {\n        console.log('🔐 Rights already initialized for page code:', currentPageCode);\n      }\n    });\n\n    // Watch for page data changes in cache and update title/subtitle reactively\n    effect(() => {\n      const currentPageCode = this.pageCode();\n      if (!currentPageCode) return;\n\n      // Watch the page data cache signal from shared service\n      const pageDataCache = this.sharedService.pageDataStore();\n      const cachedData = pageDataCache[currentPageCode];\n      const page = cachedData?.data?.page;\n\n      if (page) {\n        let newTitle = '';\n        let newSubtitle = '';\n\n        // Try to parse configuration for title/subtitle\n        const cfgString = page?.sypg_configuration;\n        if (cfgString) {\n          try {\n            const cfg = JSON.parse(cfgString);\n            newTitle = cfg.title || page?.sypg_title || '';\n            newSubtitle = cfg.subTitle || page?.sypg_desc || '';\n          } catch (e) {\n            console.warn('Invalid page config JSON', e);\n            newTitle = page?.sypg_title || '';\n            newSubtitle = page?.sypg_desc || '';\n          }\n        } else {\n          newTitle = page?.sypg_title || '';\n          newSubtitle = page?.sypg_desc || '';\n        }\n\n        // Only update if changed to prevent potential infinite loops or extra cycles\n        if (this.pageTitle() !== newTitle) {\n          this.pageTitle.set(newTitle);\n        }\n        if (this.pageSubtitle() !== newSubtitle) {\n          this.pageSubtitle.set(newSubtitle);\n        }\n      }\n    });\n  }\n\n  // Server-side search state\n  searchQuery = signal('');\n\n  // Server-side sorting state\n  sortColumn = signal('user_fullname');\n  sortDirection = signal<'asc' | 'desc'>('asc');\n\n  // Server-side filtering state\n  userType = signal<string | null>(null); // STUDENT, TEACHER, etc. - Filter by user type\n\n  // Rights computed signals\n  canCreate = computed(() => this.rightsService.hasRight('CREATE'));\n  canEdit = computed(() => this.rightsService.hasRight('EDIT'));\n  canDelete = computed(() => this.rightsService.hasRight('DELETE'));\n  canView = computed(() => this.rightsService.hasRight('VIEW'));\n\n  // Grid configuration signal for server-side pagination\n  gridConfig = signal<GridConfiguration<any>>({\n    id: 'user-master-list-grid',\n    columns: [\n      {\n        key: 'user_identity',\n        header: 'User Identity',\n        type: 'custom',\n        width: 'lg',\n        truncate: false,\n        sortable: true,\n        renderer: 'userDetailsRenderer'\n      },\n      {\n        key: 'contact_info',\n        header: 'Contact & Login',\n        type: 'custom',\n        width: 'lg',\n        truncate: false,\n        renderer: 'contactInfoRenderer'\n      },\n      {\n        key: 'validity_period',\n        header: 'Validity Period',\n        type: 'custom',\n        width: 'md',\n        align: 'center',\n        renderer: 'validityRenderer'\n      },\n      {\n        key: 'user_isactive',\n        header: 'Status',\n        type: 'custom',\n        width: 'xs',\n        align: 'center',\n        sortable: true,\n        renderer: 'statusRenderer'\n      },\n      {\n        key: 'actions',\n        header: 'Actions',\n        type: 'custom',\n        width: 'sm',\n        truncate: false,\n        align: 'center',\n        renderer: 'actionsRenderer'\n      }\n    ],\n    data: [],\n    trackBy: '_id',\n    // Server-side pagination configuration\n    pagination: {\n      enabled: true,\n      pageSize: 10,\n      pageSizeOptions: [10, 25, 50, 100],\n      showQuickJump: true,\n      showPageInfo: true,\n      showRefresh: true\n    },\n    // Server-side search configuration\n    search: {\n      enabled: true,\n      placeholder: 'Search users by name, username, email, or mobile...',\n      searchableColumns: ['user_fullname', 'user_username', 'user_emailid', 'user_mobileno'],\n      debounceMs: 300\n    },\n    loading: {\n      useDefer: true,\n      skeletonRows: 5,\n      showOverlay: false\n    },\n    responsive: true,\n    striped: false,\n    bordered: true,\n    compact: false,\n    fullHeight: true,\n    onRowClick: 'onUserRowClick',\n    onRefresh: 'onUserRefresh'\n  });\n\n  // Template renderers for the grid (will be populated after view init)\n  templateRenderers: Record<string, TemplateRef<any>> = {};\n\n  ngOnInit() {\n    console.log('🔧 USER MASTER LIST: Component initializing');\n    // Initialize rights - will be updated when userType is determined\n    // We'll re-initialize after userType is set from route/query params\n\n    // Check query params for filtering by user type (from faculty/student list)\n    this.route.queryParams.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\n      const userTypeParam = params['userType'] || params['filterType'];\n      if (userTypeParam) {\n        const resolvedType = userTypeParam.toString().trim().toUpperCase();\n        // Map common variations\n        if (resolvedType === 'FACULTY' || resolvedType === 'TEACHER') {\n          this.userType.set('TEACHER');\n        } else if (resolvedType === 'STUDENT') {\n          this.userType.set('STUDENT');\n        } else {\n          this.userType.set(resolvedType);\n        }\n        console.log('👤 User type filter set from query params:', this.userType());\n      }\n    });\n\n    // Pick up user type and page config from route data/cache (shared wrapper already loaded page API)\n    this.route.data.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(data => {\n      const routeUserType = data['userType'] || this.route.snapshot.queryParamMap.get('userType');\n      const resolvedType = (routeUserType || '').toString().trim().toUpperCase();\n      if (resolvedType && !this.userType()) {\n        // Only set if not already set from query params\n        if (resolvedType === 'FACULTY' || resolvedType === 'TEACHER') {\n          this.userType.set('TEACHER');\n        } else if (resolvedType === 'STUDENT') {\n          this.userType.set('STUDENT');\n        } else {\n          this.userType.set(resolvedType);\n        }\n        console.log('👤 User type set from route data:', this.userType());\n      }\n\n      // Note: pageCode is now computed based on userType, so we don't set it directly\n      const codeFromRoute = data['page']?.sypg_page_code || data['sypg_page_code'];\n      const codeFromQuery = this.route.snapshot.queryParamMap.get('sypg_page_code');\n      const finalCode = (codeFromRoute || codeFromQuery || this.pageCode()).toString();\n      console.log('📄 Page code determined:', finalCode, 'User type:', this.userType(), 'Computed pageCode:', this.pageCode());\n\n      // Page title/subtitle will be updated reactively by the effect when page data is loaded\n      // Also check immediately if data is already available\n      const cached = finalCode ? this.sharedService.getCachedPageData(finalCode) : null;\n      const page = data['page'] || cached?.data?.page;\n      if (page) {\n        const cfgString = page?.sypg_configuration;\n        if (cfgString) {\n          try {\n            const cfg = JSON.parse(cfgString);\n            this.pageTitle.set(cfg.title || page?.sypg_title || '');\n            this.pageSubtitle.set(cfg.subTitle || page?.sypg_desc || '');\n          } catch (e) {\n            console.warn('Invalid page config JSON', e);\n            this.pageTitle.set(page?.sypg_title || '');\n            this.pageSubtitle.set(page?.sypg_desc || '');\n          }\n        } else {\n          this.pageTitle.set(page?.sypg_title || '');\n          this.pageSubtitle.set(page?.sypg_desc || '');\n        }\n      }\n    });\n\n    this.loading.set(false);\n    this.loadUsersFromServer(); // Use server-side loading\n  }\n\n  ngAfterViewInit() {\n    // Set up template renderers after view init\n    this.templateRenderers = {\n      'userDetailsRenderer': this.userDetailsTemplate,\n      'contactInfoRenderer': this.contactInfoTemplate,\n      'validityRenderer': this.validityTemplate,\n      'statusRenderer': this.statusTemplate,\n      'actionsRenderer': this.actionsTemplate\n    };\n\n    // Update grid config to use template renderers\n    this.gridConfig.update(config => ({\n      ...config,\n      columns: config.columns.map(col => {\n        if (col.renderer && this.templateRenderers[col.renderer]) {\n          return { ...col };\n        }\n        return col;\n      })\n    }));\n  }\n\n  // Grid event handler for server-side operations\n  onGridEvent(event: GridEvent<any>) {\n    console.log('📡 GRID EVENT: Received grid event:', event.type, event);\n\n    switch (event.type) {\n      case 'pageChange':\n        this.onUserPageChange(event.data as number);\n        break;\n      case 'search':\n        this.onUserSearch(event.data as string);\n        break;\n      case 'sort':\n        this.onUserSort(event.data as unknown as { column: string; direction: 'asc' | 'desc' });\n        break;\n      case 'refresh':\n        this.onUserRefresh();\n        break;\n      case 'rowClick':\n        this.onUserRowClick(event.data as any);\n        break;\n    }\n  }\n\n  // Grid event action handlers\n  onUserRowClick(user: any) {\n    const queryData = generateStringFromObject({ user_id: user._id });\n    console.log('📝 ROW CLICK: User row clicked:', queryData, user._id);\n    const type = this.getUserTypeFromRow(user);\n    if (type === 'STUDENT') {\n      this.router.navigate(['/control-panel/student/view', queryData]);\n    } else if (type === 'TEACHER' || type === 'FACULTY') {\n      this.router.navigate(['/control-panel/teacher/view', queryData]);\n    } else {\n      this.router.navigate(['/control-panel/user-master/view', queryData]);\n    }\n  }\n\n  onUserRefresh() {\n    console.log('🔄 REFRESH: User list refresh requested');\n    this.loadUsersFromServer(true);\n  }\n\n  onUserSearch(query: string) {\n    console.log('🔍 SEARCH: User search with query:', query);\n    this.searchQuery.set(query);\n    this.currentPage.set(1); // Reset to first page when search changes\n    this.loadUsersFromServer();\n  }\n\n  onUserPageChange(page: number) {\n    console.log('📄 PAGE CHANGE: Page changed to:', page);\n    this.currentPage.set(page);\n    this.loadUsersFromServer();\n  }\n\n  onPageSizeChange(pageSize: number) {\n    console.log('📊 PAGE SIZE CHANGE: Page size changed to:', pageSize);\n    this.pageSize.set(pageSize);\n    this.currentPage.set(1); // Reset to first page when page size changes\n    this.loadUsersFromServer();\n  }\n\n  onUserSort(sortData: { column: string; direction: 'asc' | 'desc' }) {\n    console.log('🔄 SORT CHANGE: Sort changed to:', sortData);\n    this.sortColumn.set(sortData.column);\n    this.sortDirection.set(sortData.direction);\n    this.currentPage.set(1); // Reset to first page when sorting changes\n    this.loadUsersFromServer();\n  }\n\n  onDeleteUserConfirmed(userId: string) {\n    console.log('🗑️ DELETE CONFIRMED: Deleting user:', userId);\n    this.loading.set(true);\n    this.error.set(null);\n\n    this.userMasterService.deleteUser(userId).subscribe({\n      next: (response: any) => {\n        // Some endpoints return { success }, some return deleted payload directly.\n        if (response?.success === false) {\n          const message = response?.message || 'Failed to delete user';\n          this.error.set(message);\n          this.notificationService.error(message);\n          this.loading.set(false);\n          return;\n        }\n\n        this.notificationService.success('User deleted successfully.');\n        this.loadUsersFromServer(true);\n      },\n      error: (error: any) => {\n        console.error('❌ DELETE ERROR: Failed to delete user:', error);\n        const message = error?.error?.message || 'Failed to delete user';\n        this.error.set(message);\n        this.notificationService.error(message);\n        this.loading.set(false);\n      }\n    });\n  }\n\n  // Update grid data method\n  private updateGridData(users: any[]) {\n    console.log('📊 GRID UPDATE: Updating grid with', users.length, 'users');\n\n    this.users.set(users);\n\n    this.gridConfig.update(config => ({\n      ...config,\n      data: users\n    }));\n\n    this.loading.set(false);\n\n    if (this.gridComponent) {\n      this.gridComponent.clearPageChangeLoading();\n    }\n  }\n\n  // Server-side data loading method\n  loadUsersFromServer(isRefresh: boolean = false): void {\n    console.log('🚀 USER MASTER LIST: Loading users from server');\n\n    if (isRefresh) {\n      console.log('🔄 USER MASTER LIST: Refreshing users');\n      if (this.gridComponent) {\n        this.gridComponent.setRefreshing(true);\n      }\n    } else {\n      this.loading.set(true);\n    }\n\n    this.error.set(null);\n\n    // Build server request payload using AuthUserMstListPayload\n    const requestPayload = new AuthUserMstListPayload({\n      total: this.totalItems(),\n      pageIndex: this.currentPage(),\n      pageSize: this.pageSize(),\n      query: this.searchQuery(),\n      pagination: true,\n      sort: {\n        order: this.sortDirection(),\n        key: this.sortColumn()\n      },\n      syenm_entity_id_syen: this.appState.getActiveEntityId() || '', // Add entity filter if needed\n      syutm_user_type: this.userType() || undefined // Optional user type filter\n    });\n\n    // Validate the payload before making the API call\n    const validationErrors = requestPayload.Validate?.();\n    if (validationErrors && Object.keys(validationErrors).length > 0) {\n      console.error('❌ Payload validation errors:', validationErrors);\n      this.error.set('Invalid request parameters');\n      this.loading.set(false);\n      return;\n    }\n\n    console.log('📋 Server request payload:', requestPayload);\n\n    // Use the service to load users\n    this.userMasterService.getUserList(requestPayload)\n      .subscribe({\n        next: (response) => {\n          console.log('✅ Server response received:', response);\n          if (response?.success) {\n            const userData = response?.data || [];\n            this.users.set(userData);\n            this.totalItems.set(response.total || 0);\n            this.totalPages.set(Math.ceil((response.total || 0) / this.pageSize()));\n\n            // Update grid\n            this.updateGridData(userData);\n\n            console.log('📊 Total items:', this.totalItems());\n            console.log('📄 Current page:', this.currentPage());\n            console.log('📝 Items on current page:', userData.length);\n          } else {\n            this.error.set('Failed to load users from server');\n          }\n        },\n        error: (error: any) => {\n          console.error('❌ Error loading users:', error);\n          this.error.set('Failed to load users from server');\n        },\n        complete: () => {\n          this.loading.set(false);\n\n          if (this.gridComponent) {\n            this.gridComponent.clearPageChangeLoading();\n            if (isRefresh) {\n              this.gridComponent.setRefreshing(false);\n            }\n          }\n        }\n      });\n  }\n\n  // Action handlers for dropdown menu\n  onViewUser(user: any) {\n    console.log('👁️ ACTIONS: Viewing user:', user);\n    const queryData = generateStringFromObject({ user_id: user._id });\n    const type = this.getUserTypeFromRow(user);\n    if (type === 'STUDENT') {\n      this.router.navigate(['/control-panel/student/view', queryData]);\n    } else if (type === 'TEACHER' || type === 'FACULTY') {\n      this.router.navigate(['/control-panel/teacher/view', queryData]);\n    } else {\n      this.router.navigate(['/control-panel/user-master/view', queryData]);\n    }\n  }\n\n  onEditUser(user: any) {\n    console.log('✏️ ACTIONS: Editing user:', user);\n    const queryData = generateStringFromObject({ user_id: user._id });\n    const type = this.getUserTypeFromRow(user);\n    if (type === 'STUDENT') {\n      this.router.navigate(['/control-panel/student/edit', queryData]);\n    } else if (type === 'TEACHER' || type === 'FACULTY') {\n      this.router.navigate(['/control-panel/teacher-edit', queryData]);\n    } else {\n      this.router.navigate(['/control-panel/user-master/edit', queryData]);\n    }\n  }\n\n  onManageAddresses(user: any) {\n    console.log('🏠 ACTIONS: Managing addresses for user:', user);\n    const queryData = generateStringFromObject({ user_id: user._id });\n    this.router.navigate(['/control-panel/user-master/addresses', queryData]);\n  }\n\n  onManageDocuments(user: any) {\n    console.log('📄 ACTIONS: Managing documents for user:', user);\n    const queryData = generateStringFromObject({ user_id: user._id });\n    this.router.navigate(['/control-panel/user-master/documents', queryData]);\n  }\n\n  onManageFamily(user: any) {\n    console.log('👨‍👩‍👧‍👦 ACTIONS: Managing family for user:', user);\n    const queryData = generateStringFromObject({ user_id: user._id });\n    this.router.navigate(['/control-panel/user-master/family', queryData]);\n  }\n\n  onResetPassword(user: any) {\n    console.log('🔑 ACTIONS: Resetting password for user:', user);\n    if (confirm(`Are you sure you want to reset password for ${user.user_fullname}?`)) {\n      console.log('Password reset confirmed for user:', user._id);\n      // TODO: Implement password reset logic using service\n    }\n  }\n\n  onToggleUserStatus(user: any) {\n    console.log('🔄 ACTIONS: Toggling status for user:', user);\n    const action = user.user_isactive ? 'deactivate' : 'activate';\n    if (confirm(`Are you sure you want to ${action} ${user.user_fullname}?`)) {\n      console.log(`User status toggle confirmed for user:`, user._id);\n      // TODO: Implement status toggle logic using service\n      this.loadUsersFromServer(true);\n    }\n  }\n\n  onDeleteUser(user: any) {\n    console.log('🗑️ ACTIONS: Deleting user:', user);\n    if (confirm(`Are you sure you want to delete ${user.user_fullname}? This action cannot be undone.`)) {\n      if (confirm('This will permanently delete the user and all associated data. Are you absolutely sure?')) {\n        this.onDeleteUserConfirmed(user._id);\n      }\n    }\n  }\n\n  onAddUser() {\n    console.log('➕ NAVIGATION: Adding new user');\n    const type = this.userType()?.toUpperCase();\n    if (type === 'STUDENT') {\n      this.router.navigate(['/control-panel/student/create']);\n    } else if (type === 'TEACHER' || type === 'FACULTY') {\n      this.router.navigate(['/control-panel/teacher-create']);\n    } else {\n      this.router.navigate(['/control-panel/user-master/create']);\n    }\n  }\n\n\n  // Helper methods for templates (avoid using new Date() in templates)\n  formatDate(dateString: string | undefined): string {\n    if (!dateString) return 'Not set';\n    try {\n      return new Date(dateString).toLocaleDateString();\n    } catch {\n      return 'Invalid date';\n    }\n  }\n\n  isDateExpired(dateString: string | undefined): boolean {\n    if (!dateString) return false;\n    try {\n      return new Date(dateString) < new Date();\n    } catch {\n      return false;\n    }\n  }\n\n  getValidityEndText(dateString: string | undefined): string {\n    return dateString ? this.formatDate(dateString) : 'No limit';\n  }\n\n  getUserInitials(firstName: string, lastName: string): string {\n    const firstInitial = firstName?.charAt(0) || '';\n    const lastInitial = lastName?.charAt(0) || '';\n    return (firstInitial + lastInitial).toUpperCase() || 'U';\n  }\n\n  getPasswordChangeText(requiresChange: boolean): string {\n    return requiresChange ? 'Required' : 'Not Required';\n  }\n\n  private getUserTypeFromRow(user: any): string | null {\n    const rowType = user?.user_type_mapping?.syutm_user_type;\n    const activeType = this.userType();\n    return (rowType || activeType || null)?.toString().toUpperCase() || null;\n  }\n\n  // Generate dropdown items for user actions\n  // Generate dropdown items for user actions\n  getDropdownItems(user: AuthUserMst): DropdownItem[] {\n    // console.log('🔵 getDropdownItems called for user:', user);\n    const items: DropdownItem[] = [];\n\n    if (this.canView()) {\n      items.push({\n        id: 'view',\n        label: 'View Details',\n        icon: 'visibility',\n        iconColor: 'tw-text-gray-400',\n        textColor: 'tw-text-gray-700',\n        hoverBgColor: 'hover:tw-bg-gray-100'\n      });\n    }\n\n    if (this.canEdit()) {\n      items.push({\n        id: 'edit',\n        label: 'Edit User',\n        icon: 'edit',\n        iconColor: 'tw-text-gray-400',\n        textColor: 'tw-text-gray-700',\n        hoverBgColor: 'hover:tw-bg-gray-100'\n      });\n    }\n\n    if (this.canEdit()) {\n      if (items.length > 0) {\n        items.push({\n          id: 'divider1',\n          label: '',\n          divider: true\n        });\n      }\n      items.push({\n        id: 'addresses',\n        label: 'Manage Addresses',\n        icon: 'location_on',\n        iconColor: 'tw-text-gray-400',\n        textColor: 'tw-text-gray-700',\n        hoverBgColor: 'hover:tw-bg-gray-100'\n      });\n      items.push({\n        id: 'documents',\n        label: 'Manage Documents',\n        icon: 'description',\n        iconColor: 'tw-text-gray-400',\n        textColor: 'tw-text-gray-700',\n        hoverBgColor: 'hover:tw-bg-gray-100'\n      });\n      items.push({\n        id: 'family',\n        label: 'Manage Family',\n        icon: 'family_restroom',\n        iconColor: 'tw-text-gray-400',\n        textColor: 'tw-text-gray-700',\n        hoverBgColor: 'hover:tw-bg-gray-100'\n      });\n    }\n\n    if (this.canEdit()) {\n      if (items.length > 0) {\n        items.push({\n          id: 'divider2',\n          label: '',\n          divider: true\n        });\n      }\n      items.push({\n        id: 'reset-password',\n        label: 'Reset Password',\n        icon: 'key',\n        iconColor: 'tw-text-gray-400',\n        textColor: 'tw-text-gray-700',\n        hoverBgColor: 'hover:tw-bg-gray-100'\n      });\n      items.push({\n        id: 'toggle-status',\n        label: user.user_isactive ? 'Deactivate User' : 'Activate User',\n        icon: user.user_isactive ? 'block' : 'check_circle',\n        iconColor: 'tw-text-gray-400',\n        textColor: 'tw-text-gray-700',\n        hoverBgColor: 'hover:tw-bg-gray-100'\n      });\n    }\n\n    if (this.canDelete()) {\n      if (items.length > 0) {\n        items.push({\n          id: 'divider3',\n          label: '',\n          divider: true\n        });\n      }\n      items.push({\n        id: 'delete',\n        label: 'Delete User',\n        icon: 'delete',\n        iconColor: 'tw-text-red-400',\n        textColor: 'tw-text-red-600',\n        hoverBgColor: 'hover:tw-bg-red-50'\n      });\n    }\n\n    // console.log('🔵 Returning dropdown items:', items);\n    return items;\n  }\n\n  // Handle dropdown item click\n  onDropdownItemClick(item: DropdownItem, user: AuthUserMst): void {\n    console.log('🔵 Dropdown item clicked:', item.id, user);\n\n    switch (item.id) {\n      case 'view':\n        this.onViewUser(user);\n        break;\n      case 'edit':\n        this.onEditUser(user);\n        break;\n      case 'addresses':\n        this.onManageAddresses(user);\n        break;\n      case 'documents':\n        this.onManageDocuments(user);\n        break;\n      case 'family':\n        this.onManageFamily(user);\n        break;\n      case 'reset-password':\n        this.onResetPassword(user);\n        break;\n      case 'toggle-status':\n        this.onToggleUserStatus(user);\n        break;\n      case 'delete':\n        this.onDeleteUser(user);\n        break;\n    }\n  }\n}\n","<!-- User List with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"shared_wrapper_setup_param()\">\n  <!-- Breadcrumb Actions -->\n  <div breadcrumb-actions>\n    @if (canCreate()) {\n    <button cideEleButton variant=\"primary\" size=\"xs\" (click)=\"onAddUser()\" leftIcon=\"add\" [adaptive]=\"true\">\n      Add User\n    </button>\n\n    }\n  </div>\n\n  <div class=\"user-master-listing-container tw-bg-white tw-shadow-lg tw-rounded-lg tw-w-full tw-h-full tw-overflow-hidden\">\n\n    <!-- Error Message -->\n    @if (error()) {\n    <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n      <div class=\"tw-flex\">\n        <cide-ele-icon name=\"exclamation-triangle\" class=\"tw-text-red-400\"></cide-ele-icon>\n        <div class=\"tw-ml-3\">\n          <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800\">Error</h3>\n          <p class=\"tw-text-sm tw-text-red-700 tw-mt-1\">{{ error() }}</p>\n        </div>\n      </div>\n    </div>\n    }\n    <div class=\"tw-flex-1 tw-min-h-0 tw-min-w-0 tw-relative\">\n      <div class=\"tw-h-full tw-w-full tw-overflow-auto tw-min-w-0\">\n        <!-- Data Grid Component -->\n        <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers\"\n          [serverSidePagination]=\"true\" [totalServerItems]=\"totalItems()\" [currentServerPage]=\"currentPage()\"\n          [currentServerPageSize]=\"pageSize()\" (gridEvent)=\"onGridEvent($event)\">\n        </cide-ele-data-grid>\n      </div>\n    </div>\n\n  </div>\n\n  <!-- Template Definitions for Grid Renderers -->\n\n  <!-- User Details Template -->\n  <ng-template #userDetailsTemplate let-value let-row=\"row\" let-column=\"column\">\n    <div class=\"tw-flex tw-items-center tw-space-x-3\">\n      <div\n        class=\"tw-flex-shrink-0 tw-w-12 tw-h-12 tw-bg-blue-100 tw-rounded-full tw-flex tw-items-center tw-justify-center\">\n        <span class=\"tw-text-blue-600 tw-font-semibold tw-text-sm\">\n          {{ getUserInitials(row.user_firstname, row.user_lastname) }}\n        </span>\n      </div>\n      <div class=\"tw-flex-1 tw-min-w-0\">\n        <p class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-truncate\" [title]=\"row.user_fullname\">\n          {{ row.user_fullname || 'Unknown User' }}\n        </p>\n        <p class=\"tw-text-xs tw-text-blue-600 tw-truncate tw-font-medium\" [title]=\"'Username: ' + row.user_username\">\n          @{{ row.user_username || 'No username' }}\n        </p>\n        <p class=\"tw-text-xs tw-text-gray-400 tw-truncate\" [title]=\"'ID: ' + row._id\">\n          ID: {{ row._id?.substring(0, 8) }}...\n        </p>\n      </div>\n    </div>\n  </ng-template>\n\n  <!-- Contact Info Template -->\n  <ng-template #contactInfoTemplate let-value let-row=\"row\" let-column=\"column\">\n    <div class=\"tw-space-y-1\">\n      <p class=\"tw-text-xs tw-text-gray-900 tw-flex tw-items-center\" [title]=\"'Email: ' + row.user_emailid\">\n        <svg class=\"tw-flex-shrink-0 tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n          <path d=\"M2.003 5.884L10 9.882l7.997-3.998A2 2 0 0016 4H4a2 2 0 00-1.997 1.884z\" />\n          <path d=\"M18 8.118l-8 4-8-4V14a2 2 0 002 2h12a2 2 0 002-2V8.118z\" />\n        </svg>\n        <span class=\"tw-truncate\">{{ row.user_emailid || 'No email' }}</span>\n      </p>\n      <p class=\"tw-text-xs tw-text-gray-600 tw-flex tw-items-center\" [title]=\"'Mobile: ' + row.user_mobileno\">\n        <svg class=\"tw-flex-shrink-0 tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n          <path\n            d=\"M2 3a1 1 0 011-1h2.153a1 1 0 01.986.836l.74 4.435a1 1 0 01-.54 1.06l-1.548.773a11.037 11.037 0 006.105 6.105l.774-1.548a1 1 0 011.059-.54l4.435.74a1 1 0 01.836.986V17a1 1 0 01-1 1h-2C7.82 18 2 12.18 2 5V3z\" />\n        </svg>\n        <span class=\"tw-truncate\">{{ row.user_mobileno || 'No mobile' }}</span>\n      </p>\n      <p class=\"tw-text-xs tw-text-gray-500 tw-flex tw-items-center\"\n        [title]=\"'Password Change: ' + getPasswordChangeText(row.user_passwordchangeonlogin)\">\n        <svg class=\"tw-flex-shrink-0 tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n          <path fill-rule=\"evenodd\"\n            d=\"M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z\"\n            clip-rule=\"evenodd\" />\n        </svg>\n        <span class=\"tw-truncate\">{{ getPasswordChangeText(row.user_passwordchangeonlogin) }}</span>\n      </p>\n    </div>\n  </ng-template>\n\n\n\n  <!-- Validity Template -->\n  <ng-template #validityTemplate let-value let-row=\"row\" let-column=\"column\">\n    <div class=\"tw-text-center tw-space-y-1\">\n      <p class=\"tw-text-xs tw-text-gray-900 tw-font-medium\">\n        Validity managed per entity\n      </p>\n      <p class=\"tw-text-xs tw-text-gray-600\">\n        Check entity mappings for details\n      </p>\n    </div>\n  </ng-template>\n\n  <!-- Status Template -->\n  <ng-template #statusTemplate let-value let-row=\"row\" let-column=\"column\">\n    <div class=\"tw-flex tw-justify-center\">\n      @if (row.user_isactive) {\n      <span\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-green-100 tw-text-green-800\">\n        <svg class=\"tw-w-1.5 tw-h-1.5 tw-mr-1\" fill=\"currentColor\" viewBox=\"0 0 8 8\">\n          <circle cx=\"4\" cy=\"4\" r=\"3\" />\n        </svg>\n        Active\n      </span>\n      } @else {\n      <span\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-red-100 tw-text-red-800\">\n        <svg class=\"tw-w-1.5 tw-h-1.5 tw-mr-1\" fill=\"currentColor\" viewBox=\"0 0 8 8\">\n          <circle cx=\"4\" cy=\"4\" r=\"3\" />\n        </svg>\n        Inactive\n      </span>\n      }\n    </div>\n  </ng-template>\n\n  <!-- Actions Template using cide-ele-dropdown -->\n  <ng-template #actionsTemplate let-value let-row=\"row\" let-column=\"column\">\n    <cide-ele-dropdown [items]=\"getDropdownItems(row)\"\n      [config]=\"{  triggerIcon: 'more_vert', triggerSize: 'sm', usePortal: true, minWidth: 200 }\"\n      (itemClick)=\"onDropdownItemClick($event, row)\">\n    </cide-ele-dropdown>\n  </ng-template>\n</cide-lyt-shared-wrapper>","import { Component, inject, signal, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { CideFormFieldErrorComponent } from 'cloud-ide-element';\n\n@Component({\n  selector: 'cide-core-user-attributes',\n  standalone: true,\n  imports: [CommonModule, ReactiveFormsModule, CideFormFieldErrorComponent],\n  template: `\n    <div class=\"p-5\">\n      <div class=\"bg-white rounded-lg shadow-md mb-5\">\n        <div class=\"p-5 border-b border-gray-200 flex justify-between items-center\">\n          <h2 class=\"text-2xl font-semibold text-gray-800 m-0\">\n            {{ isEditMode() ? 'Edit' : 'Add' }} User Attribute\n          </h2>\n          <div class=\"flex gap-2\">\n            <button \n              type=\"button\" \n              class=\"px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600 transition-colors duration-200\"\n              (click)=\"goBack()\"\n              (keyup.enter)=\"goBack()\"\n            >\n              <i class=\"fas fa-arrow-left\"></i> Back\n            </button>\n          </div>\n        </div>\n        \n        <div class=\"p-5\">\n          <form [formGroup]=\"attributeForm\" (ngSubmit)=\"onSubmit()\">\n            <div class=\"mb-8\">\n              <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Attribute Information</h3>\n              \n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"syuat_attribute_key\" class=\"mb-2 font-medium text-gray-700\">Attribute Key</label>\n                  <input \n                    id=\"syuat_attribute_key\"\n                    type=\"text\" \n                    formControlName=\"syuat_attribute_key\" \n                    placeholder=\"Enter attribute key\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                </div>\n                \n                <div class=\"flex flex-col\">\n                  <label for=\"syuat_data_type\" class=\"mb-2 font-medium text-gray-700\">Data Type</label>\n                  <select \n                    id=\"syuat_data_type\"\n                    formControlName=\"syuat_data_type\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                    <option value=\"\">Select data type</option>\n                    <option value=\"string\">String</option>\n                    <option value=\"number\">Number</option>\n                    <option value=\"boolean\">Boolean</option>\n                    <option value=\"date\">Date</option>\n                    <option value=\"object\">Object</option>\n                    <option value=\"array\">Array</option>\n                  </select>\n                </div>\n              </div>\n\n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"syuat_attribute_value\" class=\"mb-2 font-medium text-gray-700\">Attribute Value</label>\n                  <textarea \n                    id=\"syuat_attribute_value\"\n                    formControlName=\"syuat_attribute_value\" \n                    placeholder=\"Enter attribute value\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200 resize-y min-h-20\"\n                    rows=\"3\"\n                  ></textarea>\n                </div>\n                \n                <div class=\"flex flex-col\">\n                  <label for=\"syuat_industry_context_sygms\" class=\"mb-2 font-medium text-gray-700\">Industry Context</label>\n                  <select \n                    id=\"syuat_industry_context_sygms\"\n                    formControlName=\"syuat_industry_context_sygms\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                    <option value=\"\">Select industry context</option>\n                    <option value=\"it\">Information Technology</option>\n                    <option value=\"healthcare\">Healthcare</option>\n                    <option value=\"finance\">Finance</option>\n                    <option value=\"education\">Education</option>\n                    <option value=\"manufacturing\">Manufacturing</option>\n                    <option value=\"retail\">Retail</option>\n                    <option value=\"other\">Other</option>\n                  </select>\n                </div>\n              </div>\n            </div>\n\n            <div class=\"mb-8\">\n              <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Additional Information</h3>\n              \n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"syuat_user_id_user\" class=\"mb-2 font-medium text-gray-700\">User ID</label>\n                  <input \n                    id=\"syuat_user_id_user\"\n                    type=\"text\" \n                    formControlName=\"syuat_user_id_user\" \n                    placeholder=\"Enter user ID\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm bg-gray-50 cursor-not-allowed focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                    readonly\n                  >\n                  <small class=\"text-gray-500 text-xs mt-1 italic\">This field is automatically populated</small>\n                </div>\n              </div>\n            </div>\n\n            <div class=\"flex justify-between items-center gap-4 mt-8 pt-5 border-t border-gray-200\">\n              <!-- Error Message (Left Side) -->\n              <cide-form-field-error [formGroup]=\"attributeForm\"></cide-form-field-error>\n              \n              <!-- Action Buttons (Right Side) -->\n              <div class=\"flex gap-4\">\n                <button \n                  type=\"button\" \n                  class=\"px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600 transition-colors duration-200\"\n                  (click)=\"goBack()\"\n                  (keyup.enter)=\"goBack()\"\n                >\n                  Cancel\n                </button>\n                <button \n                  type=\"submit\" \n                  class=\"px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600 transition-colors duration-200 disabled:opacity-60 disabled:cursor-not-allowed\"\n                  [disabled]=\"attributeForm.invalid || isSubmitting()\"\n                >\n                  {{ isSubmitting() ? 'Saving...' : (isEditMode() ? 'Update' : 'Save') }}\n                </button>\n              </div>\n            </div>\n          </form>\n        </div>\n      </div>\n    </div>\n  `\n})\nexport class CideCoreUserAttributesComponent implements OnInit {\n  private fb = inject(FormBuilder);\n  private route = inject(ActivatedRoute);\n  private router = inject(Router);\n\n  // Signals\n  isEditMode = signal(false);\n  isSubmitting = signal(false);\n  \n  // Form\n  attributeForm!: FormGroup;\n\n  ngOnInit() {\n    this.initializeForm();\n    this.checkEditMode();\n  }\n\n  private initializeForm() {\n    this.attributeForm = this.fb.group({\n      syuat_attribute_key: ['', [Validators.required]],\n      syuat_attribute_value: [''],\n      syuat_data_type: [''],\n      syuat_industry_context_sygms: [''],\n      syuat_user_id_user: [''] // This will be populated from route or service\n    });\n  }\n\n  private checkEditMode() {\n    const id = this.route.snapshot.paramMap.get('id');\n    if (id) {\n      this.isEditMode.set(true);\n      this.loadAttribute(id);\n    }\n  }\n\n  private loadAttribute(id: string) {\n    // TODO: Load attribute data from service\n    console.log('Loading attribute:', id);\n  }\n\n  onSubmit() {\n    if (this.attributeForm.valid) {\n      this.isSubmitting.set(true);\n      \n      const formData = this.attributeForm.value;\n      console.log('Form data:', formData);\n      \n      // TODO: Submit to service\n      setTimeout(() => {\n        this.isSubmitting.set(false);\n        this.goBack();\n      }, 1000);\n    } else {\n      this.markFormGroupTouched();\n    }\n  }\n\n  private markFormGroupTouched() {\n    Object.keys(this.attributeForm.controls).forEach(key => {\n      const control = this.attributeForm.get(key);\n      control?.markAsTouched();\n    });\n  }\n\n  goBack() {\n    this.router.navigate(['/admin/user-master']);\n  }\n}\n","import { Component, inject, signal, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { CideFormFieldErrorComponent } from 'cloud-ide-element';\n\n@Component({\n  selector: 'cide-core-user-contact-addresses',\n  standalone: true,\n  imports: [CommonModule, ReactiveFormsModule, CideFormFieldErrorComponent],\n  template: `\n    <div class=\"p-5\">\n      <div class=\"bg-white rounded-lg shadow-md mb-5\">\n        <div class=\"p-5 border-b border-gray-200 flex justify-between items-center\">\n          <h2 class=\"text-2xl font-semibold text-gray-800 m-0\">\n            {{ isEditMode() ? 'Edit' : 'Add' }} Contact Address\n          </h2>\n          <div class=\"flex gap-2\">\n            <button \n              type=\"button\" \n              class=\"px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600 transition-colors duration-200\"\n              (click)=\"goBack()\"\n              (keyup.enter)=\"goBack()\"\n            >\n              <i class=\"fas fa-arrow-left\"></i> Back\n            </button>\n          </div>\n        </div>\n        \n        <div class=\"p-5\">\n          <form [formGroup]=\"contactAddressForm\" (ngSubmit)=\"onSubmit()\">\n            <div class=\"mb-8\">\n              <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Contact Information</h3>\n              \n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"sycad_contact_person_name\" class=\"mb-2 font-medium text-gray-700\">Contact Person Name</label>\n                  <input \n                    id=\"sycad_contact_person_name\"\n                    type=\"text\" \n                    formControlName=\"sycad_contact_person_name\" \n                    placeholder=\"Enter contact person name\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                  @if (contactAddressForm.get('sycad_contact_person_name')?.hasError('required') && contactAddressForm.get('sycad_contact_person_name')?.touched) {\n                    <div class=\"text-red-500 text-xs mt-1\">\n                      Contact person name is required\n                    </div>\n                  }\n                </div>\n                \n                <div class=\"flex flex-col\">\n                  <label for=\"sycad_address_type_id_sygms\" class=\"mb-2 font-medium text-gray-700\">Address Type</label>\n                  <select \n                    id=\"sycad_address_type_id_sygms\"\n                    formControlName=\"sycad_address_type_id_sygms\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                    <option value=\"\">Select address type</option>\n                    <option value=\"permanent\">Permanent</option>\n                    <option value=\"present\">Present</option>\n                    <option value=\"emergency\">Emergency</option>\n                    <option value=\"office\">Office</option>\n                  </select>\n                  @if (contactAddressForm.get('sycad_address_type_id_sygms')?.hasError('required') && contactAddressForm.get('sycad_address_type_id_sygms')?.touched) {\n                    <div class=\"text-red-500 text-xs mt-1\">\n                      Address type is required\n                    </div>\n                  }\n                </div>\n              </div>\n\n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"sycad_contact_person_famb\" class=\"mb-2 font-medium text-gray-700\">Family Member ID (Optional)</label>\n                  <input \n                    id=\"sycad_contact_person_famb\"\n                    type=\"text\" \n                    formControlName=\"sycad_contact_person_famb\" \n                    placeholder=\"Enter family member ID if applicable\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                </div>\n                \n                <div class=\"flex flex-col\">\n                  <label for=\"sycad_contact_phone\" class=\"mb-2 font-medium text-gray-700\">Contact Phone</label>\n                  <input \n                    id=\"sycad_contact_phone\"\n                    type=\"tel\" \n                    formControlName=\"sycad_contact_phone\" \n                    placeholder=\"Enter contact phone number\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                  @if (contactAddressForm.get('sycad_contact_phone')?.hasError('required') && contactAddressForm.get('sycad_contact_phone')?.touched) {\n                    <div class=\"text-red-500 text-xs mt-1\">\n                      Contact phone is required\n                    </div>\n                  }\n                </div>\n              </div>\n\n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"sycad_contact_phone_alt\" class=\"mb-2 font-medium text-gray-700\">Alternative Phone</label>\n                  <input \n                    id=\"sycad_contact_phone_alt\"\n                    type=\"tel\" \n                    formControlName=\"sycad_contact_phone_alt\" \n                    placeholder=\"Enter alternative phone number\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                </div>\n                \n                <div class=\"flex flex-col\">\n                  <label for=\"sycad_contact_email\" class=\"mb-2 font-medium text-gray-700\">Contact Email</label>\n                  <input \n                    id=\"sycad_contact_email\"\n                    type=\"email\" \n                    formControlName=\"sycad_contact_email\" \n                    placeholder=\"Enter contact email\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                  @if (contactAddressForm.get('sycad_contact_email')?.hasError('email') && contactAddressForm.get('sycad_contact_email')?.touched) {\n                    <div class=\"text-red-500 text-xs mt-1\">\n                      Please enter a valid email\n                    </div>\n                  }\n                </div>\n              </div>\n            </div>\n\n            <div class=\"mb-8\">\n              <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Address Details</h3>\n              \n              <div class=\"col-span-full mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"sycad_contact_address\" class=\"mb-2 font-medium text-gray-700\">Full Address</label>\n                  <textarea \n                    id=\"sycad_contact_address\"\n                    formControlName=\"sycad_contact_address\" \n                    placeholder=\"Enter complete address\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200 resize-y min-h-20\"\n                    rows=\"3\"\n                  ></textarea>\n                  @if (contactAddressForm.get('sycad_contact_address')?.hasError('required') && contactAddressForm.get('sycad_contact_address')?.touched) {\n                    <div class=\"text-red-500 text-xs mt-1\">\n                      Address is required\n                    </div>\n                  }\n                </div>\n              </div>\n\n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"sycad_contact_pin_sypin\" class=\"mb-2 font-medium text-gray-700\">PIN Code</label>\n                  <input \n                    id=\"sycad_contact_pin_sypin\"\n                    type=\"text\" \n                    formControlName=\"sycad_contact_pin_sypin\" \n                    placeholder=\"Enter PIN code\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                </div>\n                \n                <div class=\"flex flex-col\">\n                  <label for=\"sycad_contact_city_sypin\" class=\"mb-2 font-medium text-gray-700\">City</label>\n                  <input \n                    id=\"sycad_contact_city_sypin\"\n                    type=\"text\" \n                    formControlName=\"sycad_contact_city_sypin\" \n                    placeholder=\"Enter city name\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                </div>\n              </div>\n\n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"sycad_contact_state_sypin\" class=\"mb-2 font-medium text-gray-700\">State</label>\n                  <input \n                    id=\"sycad_contact_state_sypin\"\n                    type=\"text\" \n                    formControlName=\"sycad_contact_state_sypin\" \n                    placeholder=\"Enter state name\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                </div>\n                \n                <div class=\"flex flex-col\">\n                  <label for=\"sycad_contact_country_syctr\" class=\"mb-2 font-medium text-gray-700\">Country</label>\n                  <input \n                    id=\"sycad_contact_country_syctr\"\n                    type=\"text\" \n                    formControlName=\"sycad_contact_country_syctr\" \n                    placeholder=\"Enter country name\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                </div>\n              </div>\n            </div>\n\n            <div class=\"mb-8\">\n              <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Additional Information</h3>\n              \n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"sycad_contact_fax\" class=\"mb-2 font-medium text-gray-700\">Fax Number</label>\n                  <input \n                    id=\"sycad_contact_fax\"\n                    type=\"text\" \n                    formControlName=\"sycad_contact_fax\" \n                    placeholder=\"Enter fax number\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                </div>\n                \n                <div class=\"flex flex-col\">\n                  <label for=\"sycad_corporate_email_alt\" class=\"mb-2 font-medium text-gray-700\">Corporate Email Alternative</label>\n                  <input \n                    id=\"sycad_corporate_email_alt\"\n                    type=\"email\" \n                    formControlName=\"sycad_corporate_email_alt\" \n                    placeholder=\"Enter corporate email alternative\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                  @if (contactAddressForm.get('sycad_corporate_email_alt')?.hasError('email') && contactAddressForm.get('sycad_corporate_email_alt')?.touched) {\n                    <div class=\"text-red-500 text-xs mt-1\">\n                      Please enter a valid email\n                    </div>\n                  }\n                </div>\n              </div>\n            </div>\n\n            <div class=\"flex justify-between items-center gap-4 mt-8 pt-5 border-t border-gray-200\">\n              <!-- Error Message (Left Side) -->\n              <cide-form-field-error [formGroup]=\"contactAddressForm\"></cide-form-field-error>\n              \n              <!-- Action Buttons (Right Side) -->\n              <div class=\"flex gap-4\">\n                <button \n                  type=\"button\" \n                  class=\"px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600 transition-colors duration-200\"\n                  (click)=\"goBack()\"\n                  (keyup.enter)=\"goBack()\"\n                >\n                  Cancel\n                </button>\n                <button \n                  type=\"submit\" \n                  class=\"px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600 transition-colors duration-200 disabled:opacity-60 disabled:cursor-not-allowed\"\n                  [disabled]=\"contactAddressForm.invalid || isSubmitting()\"\n                >\n                  {{ isSubmitting() ? 'Saving...' : (isEditMode() ? 'Update' : 'Save') }}\n                </button>\n              </div>\n            </div>\n          </form>\n        </div>\n      </div>\n    </div>\n  `\n})\nexport class CideCoreUserContactAddressesComponent implements OnInit {\n  private fb = inject(FormBuilder);\n  private route = inject(ActivatedRoute);\n  private router = inject(Router);\n\n  // Signals\n  isEditMode = signal(false);\n  isSubmitting = signal(false);\n  \n  // Form\n  contactAddressForm!: FormGroup;\n\n  ngOnInit() {\n    this.initializeForm();\n    this.checkEditMode();\n  }\n\n  private initializeForm() {\n    this.contactAddressForm = this.fb.group({\n      sycad_contact_person_name: ['', [Validators.required]],\n      sycad_address_type_id_sygms: ['', [Validators.required]],\n      sycad_contact_person_famb: [''],\n      sycad_contact_address: ['', [Validators.required]],\n      sycad_contact_pin_sypin: [''],\n      sycad_contact_city_sypin: [''],\n      sycad_contact_state_sypin: [''],\n      sycad_contact_country_syctr: [''],\n      sycad_contact_phone: ['', [Validators.required]],\n      sycad_contact_phone_alt: [''],\n      sycad_contact_fax: [''],\n      sycad_contact_email: ['', [Validators.email]],\n      sycad_corporate_email_alt: ['', [Validators.email]]\n    });\n  }\n\n  private checkEditMode() {\n    const id = this.route.snapshot.paramMap.get('id');\n    if (id) {\n      this.isEditMode.set(true);\n      this.loadContactAddress(id);\n    }\n  }\n\n  private loadContactAddress(id: string) {\n    // TODO: Load contact address data from service\n    console.log('Loading contact address:', id);\n  }\n\n  onSubmit() {\n    if (this.contactAddressForm.valid) {\n      this.isSubmitting.set(true);\n      \n      const formData = this.contactAddressForm.value;\n      console.log('Form data:', formData);\n      \n      // TODO: Submit to service\n      setTimeout(() => {\n        this.isSubmitting.set(false);\n        this.goBack();\n      }, 1000);\n    } else {\n      this.markFormGroupTouched();\n    }\n  }\n\n  private markFormGroupTouched() {\n    Object.keys(this.contactAddressForm.controls).forEach(key => {\n      const control = this.contactAddressForm.get(key);\n      control?.markAsTouched();\n    });\n  }\n\n  goBack() {\n    this.router.navigate(['/admin/user-master']);\n  }\n}\n","import { Component, inject, signal, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { CideFormFieldErrorComponent } from 'cloud-ide-element';\n\n@Component({\n  selector: 'cide-core-user-documents',\n  standalone: true,\n  imports: [CommonModule, ReactiveFormsModule, CideFormFieldErrorComponent],\n  template: `\n    <div class=\"p-5\">\n      <div class=\"bg-white rounded-lg shadow-md mb-5\">\n        <div class=\"p-5 border-b border-gray-200 flex justify-between items-center\">\n          <h2 class=\"text-2xl font-semibold text-gray-800 m-0\">\n            {{ isEditMode() ? 'Edit' : 'Add' }} User Document\n          </h2>\n          <div class=\"flex gap-2\">\n            <button \n              type=\"button\" \n              class=\"px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600 transition-colors duration-200\"\n              (click)=\"goBack()\"\n              (keyup.enter)=\"goBack()\"\n            >\n              <i class=\"fas fa-arrow-left\"></i> Back\n            </button>\n          </div>\n        </div>\n        \n        <div class=\"p-5\">\n          <form [formGroup]=\"documentForm\" (ngSubmit)=\"onSubmit()\">\n            <div class=\"mb-8\">\n              <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Document Information</h3>\n              \n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"syusd_doc_number\" class=\"mb-2 font-medium text-gray-700\">Document Number</label>\n                  <input \n                    id=\"syusd_doc_number\"\n                    type=\"text\" \n                    formControlName=\"syusd_doc_number\" \n                    placeholder=\"Enter document number\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                </div>\n                \n                <div class=\"flex flex-col\">\n                  <label for=\"syusd_address_type_id_sygms\" class=\"mb-2 font-medium text-gray-700\">Document Type</label>\n                  <select \n                    id=\"syusd_address_type_id_sygms\"\n                    formControlName=\"syusd_address_type_id_sygms\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                    <option value=\"\">Select document type</option>\n                    <option value=\"passport\">Passport</option>\n                    <option value=\"aadhar\">Aadhar Card</option>\n                    <option value=\"pan\">PAN Card</option>\n                    <option value=\"driving_license\">Driving License</option>\n                    <option value=\"voter_id\">Voter ID</option>\n                    <option value=\"birth_certificate\">Birth Certificate</option>\n                    <option value=\"caste_certificate\">Caste Certificate</option>\n                    <option value=\"income_certificate\">Income Certificate</option>\n                    <option value=\"other\">Other</option>\n                  </select>\n                </div>\n              </div>\n\n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"syusd_doc_name_as_per_doc\" class=\"mb-2 font-medium text-gray-700\">Name as per Document</label>\n                  <input \n                    id=\"syusd_doc_name_as_per_doc\"\n                    type=\"text\" \n                    formControlName=\"syusd_doc_name_as_per_doc\" \n                    placeholder=\"Enter name exactly as it appears on document\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                </div>\n                \n                <div class=\"flex flex-col\">\n                  <label for=\"syusd_photo_group_id_cyfm\" class=\"mb-2 font-medium text-gray-700\">Photo/File Group ID</label>\n                  <input \n                    id=\"syusd_photo_group_id_cyfm\"\n                    type=\"text\" \n                    formControlName=\"syusd_photo_group_id_cyfm\" \n                    placeholder=\"Enter file manager group ID\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                </div>\n              </div>\n            </div>\n\n            <div class=\"mb-8\">\n              <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Document Dates</h3>\n              \n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"syusd_doc_issue_date\" class=\"mb-2 font-medium text-gray-700\">Issue Date</label>\n                  <input \n                    id=\"syusd_doc_issue_date\"\n                    type=\"date\" \n                    formControlName=\"syusd_doc_issue_date\" \n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                </div>\n                \n                <div class=\"flex flex-col\">\n                  <label for=\"syusd_doc_expiry_date\" class=\"mb-2 font-medium text-gray-700\">Expiry Date</label>\n                  <input \n                    id=\"syusd_doc_expiry_date\"\n                    type=\"date\" \n                    formControlName=\"syusd_doc_expiry_date\" \n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                </div>\n              </div>\n            </div>\n\n            <div class=\"mb-8\">\n              <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Verification Status</h3>\n              \n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"syusd_doc_verification_status_id_sygms\" class=\"mb-2 font-medium text-gray-700\">Document Verification Status</label>\n                  <select \n                    id=\"syusd_doc_verification_status_id_sygms\"\n                    formControlName=\"syusd_doc_verification_status_id_sygms\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                    <option value=\"\">Select verification status</option>\n                    <option value=\"pending\">Pending</option>\n                    <option value=\"verified\">Verified</option>\n                    <option value=\"rejected\">Rejected</option>\n                    <option value=\"under_review\">Under Review</option>\n                  </select>\n                </div>\n                \n                <div class=\"flex flex-col\">\n                  <label for=\"syusd_doc_kyc_status_id_sygms\" class=\"mb-2 font-medium text-gray-700\">KYC Status</label>\n                  <select \n                    id=\"syusd_doc_kyc_status_id_sygms\"\n                    formControlName=\"syusd_doc_kyc_status_id_sygms\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                    <option value=\"\">Select KYC status</option>\n                    <option value=\"pending\">Pending</option>\n                    <option value=\"in_progress\">In Progress</option>\n                    <option value=\"completed\">Completed</option>\n                    <option value=\"rejected\">Rejected</option>\n                  </select>\n                </div>\n              </div>\n\n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"syusd_isactive\" class=\"mb-2 font-medium text-gray-700\">Document Status</label>\n                  <div class=\"flex items-center gap-2 mt-2\">\n                    <input \n                      id=\"syusd_isactive\"\n                      type=\"checkbox\" \n                      formControlName=\"syusd_isactive\"\n                      class=\"w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 focus:ring-2\"\n                    >\n                    <label for=\"syusd_isactive\" class=\"text-sm text-gray-700 cursor-pointer\">\n                      Document is active\n                    </label>\n                  </div>\n                </div>\n              </div>\n            </div>\n\n            <div class=\"flex justify-between items-center gap-4 mt-8 pt-5 border-t border-gray-200\">\n              <!-- Error Message (Left Side) -->\n              <cide-form-field-error [formGroup]=\"documentForm\"></cide-form-field-error>\n              \n              <!-- Action Buttons (Right Side) -->\n              <div class=\"flex gap-4\">\n                <button \n                  type=\"button\" \n                  class=\"px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600 transition-colors duration-200\"\n                  (click)=\"goBack()\"\n                  (keyup.enter)=\"goBack()\"\n                >\n                  Cancel\n                </button>\n                <button \n                  type=\"submit\" \n                  class=\"px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600 transition-colors duration-200 disabled:opacity-60 disabled:cursor-not-allowed\"\n                  [disabled]=\"documentForm.invalid || isSubmitting()\"\n                >\n                  {{ isSubmitting() ? 'Saving...' : (isEditMode() ? 'Update' : 'Save') }}\n                </button>\n              </div>\n            </div>\n          </form>\n        </div>\n      </div>\n    </div>\n  `\n})\nexport class CideCoreUserDocumentsComponent implements OnInit {\n  private fb = inject(FormBuilder);\n  private route = inject(ActivatedRoute);\n  private router = inject(Router);\n\n  // Signals\n  isEditMode = signal(false);\n  isSubmitting = signal(false);\n  \n  // Form\n  documentForm!: FormGroup;\n\n  ngOnInit() {\n    this.initializeForm();\n    this.checkEditMode();\n  }\n\n  private initializeForm() {\n    this.documentForm = this.fb.group({\n      syusd_doc_number: ['', [Validators.required]],\n      syusd_address_type_id_sygms: ['', [Validators.required]],\n      syusd_doc_name_as_per_doc: ['', [Validators.required]],\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\n  private checkEditMode() {\n    const id = this.route.snapshot.paramMap.get('id');\n    if (id) {\n      this.isEditMode.set(true);\n      this.loadDocument(id);\n    }\n  }\n\n  private loadDocument(id: string) {\n    // TODO: Load document data from service\n    console.log('Loading document:', id);\n  }\n\n  onSubmit() {\n    if (this.documentForm.valid) {\n      this.isSubmitting.set(true);\n      \n      const formData = this.documentForm.value;\n      console.log('Form data:', formData);\n      \n      // TODO: Submit to service\n      setTimeout(() => {\n        this.isSubmitting.set(false);\n        this.goBack();\n      }, 1000);\n    } else {\n      this.markFormGroupTouched();\n    }\n  }\n\n  private markFormGroupTouched() {\n    Object.keys(this.documentForm.controls).forEach(key => {\n      const control = this.documentForm.get(key);\n      control?.markAsTouched();\n    });\n  }\n\n  goBack() {\n    this.router.navigate(['/admin/user-master']);\n  }\n}\n","import { Component, inject, signal, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\n\n@Component({\n  selector: 'cide-core-user-entity-access',\n  standalone: true,\n  imports: [CommonModule, ReactiveFormsModule],\n  template: `\n    <div class=\"p-5\">\n      <div class=\"bg-white rounded-lg shadow-md mb-5\">\n        <div class=\"p-5 border-b border-gray-200 flex justify-between items-center\">\n          <h2 class=\"text-2xl font-semibold text-gray-800 m-0\">\n            {{ isEditMode() ? 'Edit' : 'Add' }} Entity Access\n          </h2>\n          <div class=\"flex gap-2\">\n            <button \n              type=\"button\" \n              class=\"px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600 transition-colors duration-200\"\n              (click)=\"goBack()\"\n              (keyup.enter)=\"goBack()\"\n            >\n              <i class=\"fas fa-arrow-left\"></i> Back\n            </button>\n          </div>\n        </div>\n        \n        <div class=\"p-5\">\n          <form [formGroup]=\"accessForm\" (ngSubmit)=\"onSubmit()\">\n            <div class=\"mb-8\">\n              <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Entity Information</h3>\n              \n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"syepm_entity_id_syen\" class=\"mb-2 font-medium text-gray-700\">Entity ID</label>\n                  <input \n                    id=\"syepm_entity_id_syen\"\n                    type=\"text\" \n                    formControlName=\"syepm_entity_id_syen\" \n                    placeholder=\"Enter entity ID\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                  @if (accessForm.get('syepm_entity_id_syen')?.hasError('required') && accessForm.get('syepm_entity_id_syen')?.touched) {\n                    <div class=\"text-red-500 text-xs mt-1\">\n                      Entity ID is required\n                    </div>\n                  }\n                </div>\n                \n                <div class=\"flex flex-col\">\n                  <label for=\"syepm_ownership_status\" class=\"mb-2 font-medium text-gray-700\">Ownership Status</label>\n                  <select \n                    id=\"syepm_ownership_status\"\n                    formControlName=\"syepm_ownership_status\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                    <option value=\"\">Select ownership status</option>\n                    <option value=\"owner\">Owner</option>\n                    <option value=\"admin\">Admin</option>\n                    <option value=\"user\">User</option>\n                    <option value=\"viewer\">Viewer</option>\n                    <option value=\"guest\">Guest</option>\n                  </select>\n                </div>\n              </div>\n\n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"syepm_access_passs_to\" class=\"mb-2 font-medium text-gray-700\">Access Pass To</label>\n                  <input \n                    id=\"syepm_access_passs_to\"\n                    type=\"text\" \n                    formControlName=\"syepm_access_passs_to\" \n                    placeholder=\"Enter access pass details\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                </div>\n                \n                <div class=\"flex flex-col\">\n                  <label for=\"syepm_isactive\" class=\"mb-2 font-medium text-gray-700\">Access Status</label>\n                  <div class=\"flex items-center gap-2 mt-2\">\n                    <input \n                      id=\"syepm_isactive\"\n                      type=\"checkbox\" \n                      formControlName=\"syepm_isactive\"\n                      class=\"w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 focus:ring-2\"\n                    >\n                    <label for=\"syepm_isactive\" class=\"text-sm text-gray-700 cursor-pointer\">\n                      Access is active\n                    </label>\n                  </div>\n                </div>\n              </div>\n            </div>\n\n            <div class=\"mb-8\">\n              <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Permissions</h3>\n              \n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"can_edit\" class=\"mb-2 font-medium text-gray-700\">Can Edit</label>\n                  <div class=\"flex items-center gap-2 mt-2\">\n                    <input \n                      id=\"can_edit\"\n                      type=\"checkbox\" \n                      formControlName=\"can_edit\"\n                      class=\"w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 focus:ring-2\"\n                    >\n                    <label for=\"can_edit\" class=\"text-sm text-gray-700 cursor-pointer\">\n                      User can edit this entity\n                    </label>\n                  </div>\n                </div>\n                \n                <div class=\"flex flex-col\">\n                  <label for=\"can_view\" class=\"mb-2 font-medium text-gray-700\">Can View</label>\n                  <div class=\"flex items-center gap-2 mt-2\">\n                    <input \n                      id=\"can_view\"\n                      type=\"checkbox\" \n                      formControlName=\"can_view\"\n                      class=\"w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 focus:ring-2\"\n                    >\n                    <label for=\"can_view\" class=\"text-sm text-gray-700 cursor-pointer\">\n                      User can view this entity\n                    </label>\n                  </div>\n                </div>\n              </div>\n            </div>\n\n            <div class=\"mb-8\">\n              <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Additional Information</h3>\n              \n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"syepm_user_id_user\" class=\"mb-2 font-medium text-gray-700\">User ID</label>\n                  <input \n                    id=\"syepm_user_id_user\"\n                    type=\"text\" \n                    formControlName=\"syepm_user_id_user\" \n                    placeholder=\"Enter user ID\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm bg-gray-50 cursor-not-allowed focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                    readonly\n                  >\n                  <small class=\"text-gray-500 text-xs mt-1 italic\">This field is automatically populated</small>\n                </div>\n              </div>\n            </div>\n\n            <div class=\"flex justify-end gap-4 mt-8 pt-5 border-t border-gray-200\">\n              <button \n                type=\"button\" \n                class=\"px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600 transition-colors duration-200\"\n                (click)=\"goBack()\"\n                (keyup.enter)=\"goBack()\"\n              >\n                Cancel\n              </button>\n              <button \n                type=\"submit\" \n                class=\"px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600 transition-colors duration-200 disabled:opacity-60 disabled:cursor-not-allowed\"\n                [disabled]=\"accessForm.invalid || isSubmitting()\"\n              >\n                {{ isSubmitting() ? 'Saving...' : (isEditMode() ? 'Update' : 'Save') }}\n              </button>\n            </div>\n          </form>\n        </div>\n      </div>\n    </div>\n  `\n})\nexport class CideCoreUserEntityAccessComponent implements OnInit {\n  private fb = inject(FormBuilder);\n  private route = inject(ActivatedRoute);\n  private router = inject(Router);\n\n  // Signals\n  isEditMode = signal(false);\n  isSubmitting = signal(false);\n  \n  // Form\n  accessForm!: FormGroup;\n\n  ngOnInit() {\n    this.initializeForm();\n    this.checkEditMode();\n  }\n\n  private initializeForm() {\n    this.accessForm = this.fb.group({\n      syepm_entity_id_syen: ['', [Validators.required]],\n      syepm_ownership_status: [''],\n      syepm_access_passs_to: [''],\n      syepm_isactive: [true],\n      can_edit: [false],\n      can_view: [true],\n      syepm_user_id_user: [''] // This will be populated from route or service\n    });\n  }\n\n  private checkEditMode() {\n    const id = this.route.snapshot.paramMap.get('id');\n    if (id) {\n      this.isEditMode.set(true);\n      this.loadAccess(id);\n    }\n  }\n\n  private loadAccess(id: string) {\n    // TODO: Load access data from service\n    console.log('Loading access:', id);\n  }\n\n  onSubmit() {\n    if (this.accessForm.valid) {\n      this.isSubmitting.set(true);\n      \n      const formData = this.accessForm.value;\n      \n      // Transform the form data to match the expected structure\n      const transformedData = {\n        ...formData,\n        syepm_actions_allowed: {\n          can_edit: { status: formData.can_edit },\n          can_view: { status: formData.can_view }\n        }\n      };\n      \n      // Remove the individual checkbox values as they're now in actions_allowed\n      delete transformedData.can_edit;\n      delete transformedData.can_view;\n      \n      console.log('Form data:', transformedData);\n      \n      // TODO: Submit to service\n      setTimeout(() => {\n        this.isSubmitting.set(false);\n        this.goBack();\n      }, 1000);\n    } else {\n      this.markFormGroupTouched();\n    }\n  }\n\n  private markFormGroupTouched() {\n    Object.keys(this.accessForm.controls).forEach(key => {\n      const control = this.accessForm.get(key);\n      control?.markAsTouched();\n    });\n  }\n\n  goBack() {\n    this.router.navigate(['/admin/user-master']);\n  }\n}\n","import { Component, inject, signal, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { CideFormFieldErrorComponent } from 'cloud-ide-element';\n\n@Component({\n  selector: 'cide-core-user-family-details',\n  standalone: true,\n  imports: [CommonModule, ReactiveFormsModule, CideFormFieldErrorComponent],\n  template: `\n    <div class=\"p-5\">\n      <div class=\"bg-white rounded-lg shadow-md mb-5\">\n        <div class=\"p-5 border-b border-gray-200 flex justify-between items-center\">\n          <h2 class=\"text-2xl font-semibold text-gray-800 m-0\">\n            {{ isEditMode() ? 'Edit' : 'Add' }} Family Member\n          </h2>\n          <div class=\"flex gap-2\">\n            <button \n              type=\"button\" \n              class=\"px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600 transition-colors duration-200\"\n              (click)=\"goBack()\"\n              (keyup.enter)=\"goBack()\"\n            >\n              <i class=\"fas fa-arrow-left\"></i> Back\n            </button>\n          </div>\n        </div>\n        \n        <div class=\"p-5\">\n          <form [formGroup]=\"familyForm\" (ngSubmit)=\"onSubmit()\">\n            <div class=\"mb-8\">\n              <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Family Member Information</h3>\n              \n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"syfdl_family_member_name\" class=\"mb-2 font-medium text-gray-700\">Family Member Name</label>\n                  <input \n                    id=\"syfdl_family_member_name\"\n                    type=\"text\" \n                    formControlName=\"syfdl_family_member_name\" \n                    placeholder=\"Enter full name of family member\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                </div>\n                \n                <div class=\"flex flex-col\">\n                  <label for=\"syfdl_relationship_id_sygms\" class=\"mb-2 font-medium text-gray-700\">Relationship</label>\n                  <select \n                    id=\"syfdl_relationship_id_sygms\"\n                    formControlName=\"syfdl_relationship_id_sygms\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                    <option value=\"\">Select relationship</option>\n                    <option value=\"spouse\">Spouse</option>\n                    <option value=\"father\">Father</option>\n                    <option value=\"mother\">Mother</option>\n                    <option value=\"son\">Son</option>\n                    <option value=\"daughter\">Daughter</option>\n                    <option value=\"brother\">Brother</option>\n                    <option value=\"sister\">Sister</option>\n                    <option value=\"grandfather\">Grandfather</option>\n                    <option value=\"grandmother\">Grandmother</option>\n                    <option value=\"uncle\">Uncle</option>\n                    <option value=\"aunt\">Aunt</option>\n                    <option value=\"cousin\">Cousin</option>\n                    <option value=\"other\">Other</option>\n                  </select>\n                </div>\n              </div>\n\n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"syfdl_family_member_dob\" class=\"mb-2 font-medium text-gray-700\">Date of Birth</label>\n                  <input \n                    id=\"syfdl_family_member_dob\"\n                    type=\"date\" \n                    formControlName=\"syfdl_family_member_dob\" \n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                </div>\n                \n                <div class=\"flex flex-col\">\n                  <label for=\"syfdl_blood_group_sygms\" class=\"mb-2 font-medium text-gray-700\">Blood Group</label>\n                  <select \n                    id=\"syfdl_blood_group_sygms\"\n                    formControlName=\"syfdl_blood_group_sygms\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                    <option value=\"\">Select blood group</option>\n                    <option value=\"A+\">A+</option>\n                    <option value=\"A-\">A-</option>\n                    <option value=\"B+\">B+</option>\n                    <option value=\"B-\">B-</option>\n                    <option value=\"AB+\">AB+</option>\n                    <option value=\"AB-\">AB-</option>\n                    <option value=\"O+\">O+</option>\n                    <option value=\"O-\">O-</option>\n                  </select>\n                </div>\n              </div>\n\n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"syfdl_contact_number\" class=\"mb-2 font-medium text-gray-700\">Contact Number</label>\n                  <input \n                    id=\"syfdl_contact_number\"\n                    type=\"tel\" \n                    formControlName=\"syfdl_contact_number\" \n                    placeholder=\"Enter contact number\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                </div>\n                \n                <div class=\"flex flex-col\">\n                  <label for=\"syfdl_family_member_id_user\" class=\"mb-2 font-medium text-gray-700\">User ID (if member is a user)</label>\n                  <input \n                    id=\"syfdl_family_member_id_user\"\n                    type=\"text\" \n                    formControlName=\"syfdl_family_member_id_user\" \n                    placeholder=\"Enter user ID if applicable\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                  >\n                </div>\n              </div>\n            </div>\n\n            <div class=\"mb-8\">\n              <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Additional Information</h3>\n              \n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\n                <div class=\"flex flex-col\">\n                  <label for=\"syfdl_user_id_user\" class=\"mb-2 font-medium text-gray-700\">Primary User ID</label>\n                  <input \n                    id=\"syfdl_user_id_user\"\n                    type=\"text\" \n                    formControlName=\"syfdl_user_id_user\" \n                    placeholder=\"Enter primary user ID\"\n                    class=\"px-3 py-2 border border-gray-300 rounded-md text-sm bg-gray-50 cursor-not-allowed focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\n                    readonly\n                  >\n                  <small class=\"text-gray-500 text-xs mt-1 italic\">This field is automatically populated</small>\n                </div>\n              </div>\n            </div>\n\n            <div class=\"flex justify-between items-center gap-4 mt-8 pt-5 border-t border-gray-200\">\n              <!-- Error Message (Left Side) -->\n              <cide-form-field-error [formGroup]=\"familyForm\"></cide-form-field-error>\n              \n              <!-- Action Buttons (Right Side) -->\n              <div class=\"flex gap-4\">\n                <button \n                  type=\"button\" \n                  class=\"px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600 transition-colors duration-200\"\n                  (click)=\"goBack()\"\n                  (keyup.enter)=\"goBack()\"\n                >\n                  Cancel\n                </button>\n                <button \n                  type=\"submit\" \n                  class=\"px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600 transition-colors duration-200 disabled:opacity-60 disabled:cursor-not-allowed\"\n                  [disabled]=\"familyForm.invalid || isSubmitting()\"\n                >\n                  {{ isSubmitting() ? 'Saving...' : (isEditMode() ? 'Update' : 'Save') }}\n                </button>\n              </div>\n            </div>\n          </form>\n        </div>\n      </div>\n    </div>\n  `\n})\nexport class CideCoreUserFamilyDetailsComponent implements OnInit {\n  private fb = inject(FormBuilder);\n  private route = inject(ActivatedRoute);\n  private router = inject(Router);\n\n  // Signals\n  isEditMode = signal(false);\n  isSubmitting = signal(false);\n  \n  // Form\n  familyForm!: FormGroup;\n\n  ngOnInit() {\n    this.initializeForm();\n    this.checkEditMode();\n  }\n\n  private initializeForm() {\n    this.familyForm = this.fb.group({\n      syfdl_family_member_name: ['', [Validators.required]],\n      syfdl_relationship_id_sygms: ['', [Validators.required]],\n      syfdl_family_member_dob: [''],\n      syfdl_contact_number: ['', [Validators.required]],\n      syfdl_blood_group_sygms: [''],\n      syfdl_family_member_id_user: [''],\n      syfdl_user_id_user: [''] // This will be populated from route or service\n    });\n  }\n\n  private checkEditMode() {\n    const id = this.route.snapshot.paramMap.get('id');\n    if (id) {\n      this.isEditMode.set(true);\n      this.loadFamilyMember(id);\n    }\n  }\n\n  private loadFamilyMember(id: string) {\n    // TODO: Load family member data from service\n    console.log('Loading family member:', id);\n  }\n\n  onSubmit() {\n    if (this.familyForm.valid) {\n      this.isSubmitting.set(true);\n      \n      const formData = this.familyForm.value;\n      console.log('Form data:', formData);\n      \n      // TODO: Submit to service\n      setTimeout(() => {\n        this.isSubmitting.set(false);\n        this.goBack();\n      }, 1000);\n    } else {\n      this.markFormGroupTouched();\n    }\n  }\n\n  private markFormGroupTouched() {\n    Object.keys(this.familyForm.controls).forEach(key => {\n      const control = this.familyForm.get(key);\n      control?.markAsTouched();\n    });\n  }\n\n  goBack() {\n    this.router.navigate(['/admin/user-master']);\n  }\n}\n","// User Management Module Export Index\r\n\r\n// Components\r\nexport { CideCoreUserCreateComponent } from './components/user-create/user-create.component';\r\nexport { CideCoreUserListComponent } from './components/user-list/user-list.component';\r\n\r\n// Services  \r\nexport * from './services';\r\n\r\n// User Forms Components\r\nexport { CideCoreUserAttributesComponent } from './components/user-forms/user-attributes.component';\r\nexport { CideCoreUserContactAddressesComponent } from './components/user-forms/user-contact-addresses.component';\r\nexport { CideCoreUserDocumentsComponent } from './components/user-forms/user-documents.component';\r\nexport { CideCoreUserEntityAccessComponent } from './components/user-forms/user-entity-access.component';\r\nexport { CideCoreUserFamilyDetailsComponent } from './components/user-forms/user-family-details.component';\r\n","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject, OnInit, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideEleDataGridComponent, CideIconComponent, CideEleButtonComponent, CideSelectComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, TemplateContext, NotificationService, ConfirmationService, DropdownConfig } from 'cloud-ide-element';\nimport { type MUserRole, generateStringFromObject } from 'cloud-ide-lms-model';\nimport { AppStateHelperService, RightsService } from 'cloud-ide-layout';\nimport { CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { CideCoreUserRoleService } from '../../services/user-role.service';\nimport { Observable, forkJoin, of } from 'rxjs';\nimport { map, catchError, switchMap } from 'rxjs/operators';\nimport type { UserRole, Entity, ApiResponse } from '../../interfaces/user-role.interface';\nimport type { MUserRoleDeletePayload, MUserRoleToggleStatusPayload } from 'cloud-ide-lms-model';\n\n@Component({\n  selector: 'cide-core-user-role-list',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    CideIconComponent,\n    CideEleButtonComponent,\n    CideEleDataGridComponent,\n    CideEleDropdownComponent,\n    CideLytSharedWrapperComponent\n  ],\n  templateUrl: './user-role-list.component.html',\n  styles: [`\n    .user-role-listing-container {\n      @apply tw-w-full tw-h-full;\n    }\n    \n    :host {\n      @apply tw-w-full tw-h-full tw-flex tw-flex-col;\n    }\n  `]\n})\nexport class CideCoreUserRoleListComponent implements OnInit, OnDestroy {\n  // Dependency injection\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly userRoleService = inject(CideCoreUserRoleService);\n  private readonly router = inject(Router);\n  private readonly appState = inject(AppStateHelperService);\n  private readonly notificationService = inject(NotificationService);\n  private readonly confirmationService = inject(ConfirmationService);\n  private readonly rightsService = inject(RightsService);\n\n  // Modern ViewChild signals for template renderers (Angular 20 approach)\n  userRoleDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('userRoleDetailsRendererTemplate');\n  statusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('statusRendererTemplate');\n  actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n\n  // State management using Angular Signals for server-side operations\n  userRoles = signal<UserRole[]>([]);\n  loading = signal(false);\n  error = signal<string | null>(null);\n\n  // Server-side pagination state\n  currentPage = signal(1);\n  pageSize = signal(10);\n  totalItems = signal(0);\n  totalPages = signal(0);\n\n  // Server-side search state\n  searchQuery = signal('');\n\n  // Server-side sorting state\n  sortColumn = signal('syusrol_role_name');\n  sortDirection = signal<'asc' | 'desc'>('asc');\n\n  // Server-side filtering state\n  selectedStatusFilter = signal('');\n\n  // Getter and setter for ngModel compatibility\n  get selectedStatusFilterValue(): string {\n    return this.selectedStatusFilter();\n  }\n\n  set selectedStatusFilterValue(value: string) {\n    this.selectedStatusFilter.set(value);\n  }\n\n  // Filter options\n  statusFilterOptions = signal([\n    { value: '', label: 'All Status' },\n    { value: 'active', label: 'Active Roles' },\n    { value: 'inactive', label: 'Inactive Roles' },\n    { value: 'locked', label: 'Locked Roles' }\n  ]);\n\n  // Grid configuration signal\n  gridConfig = signal<GridConfiguration<UserRole>>({\n    id: 'user-role-list-grid',\n    columns: [\n      {\n        key: 'details',\n        header: 'Role Details',\n        type: 'custom',\n        width: 'auto',\n        truncate: true,\n        align: 'left',\n        renderer: 'userRoleDetailsRenderer'\n      },\n      {\n        key: 'syusrol_isactive',\n        header: 'Status',\n        type: 'custom',\n        width: '120px',\n        truncate: false,\n        align: 'center',\n        renderer: 'statusRenderer'\n      },\n      {\n        key: 'actions',\n        header: '',\n        type: 'custom',\n        width: '150px',\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 user roles...',\n      searchableColumns: ['syusrol_role_name', 'syusrol_role_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  });\n\n  // Rights computed signals\n  canCreate = computed(() => this.rightsService.hasRight('CREATE'));\n  canEdit = computed(() => this.rightsService.hasRight('EDIT'));\n  canDelete = computed(() => this.rightsService.hasRight('DELETE'));\n  canView = computed(() => this.rightsService.hasRight('VIEW'));\n  canToggleStatus = computed(() => this.rightsService.hasRight('TOGGLE_STATUS'));\n\n  ngOnInit(): void {\n    // Initialize rights for user role management\n    this.rightsService.initializeRights('core_user_role');\n    console.log('👥 User Role List Component initialized');\n    this.loadUserRoles();\n  }\n\n  ngOnDestroy(): void {\n    console.log('👥 User Role List Component destroyed');\n  }\n\n  /**\n   * Load user roles from API\n   */\n  loadUserRoles(): void {\n    this.loading.set(true);\n    this.error.set(null);\n\n    const payload: MUserRole = {\n      syusrol_role_entity_id_syen: this.appState.activeEntity()?._id || '',\n      pageIndex: this.currentPage(),\n      pageSize: this.pageSize(),\n      query: this.searchQuery() || \"\",\n      sort: {\n        key: this.sortColumn(),\n        order: this.sortDirection()\n      }\n    };\n\n    this.userRoleService.getUserRoleList(payload)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe({\n        next: (response) => {\n          if (response?.success && response.data) {\n            this.userRoles.set(response.data);\n            this.totalItems.set(response.data.length);\n            this.totalPages.set(Math.ceil(response.data.length / this.pageSize()));\n            this.updateGridData();\n            this.notificationService.success(`Loaded ${response.data.length} user role(s) successfully.`);\n          } else {\n            console.warn('⚠️ No user role data received');\n            this.userRoles.set([]);\n            this.totalItems.set(0);\n            this.totalPages.set(0);\n            this.notificationService.warning('No user roles found.');\n          }\n          this.loading.set(false);\n        },\n        error: (error) => {\n          console.error('❌ Error loading user roles:', error);\n          this.error.set('Failed to load user roles. Please try again.');\n          this.userRoles.set([]);\n          this.totalItems.set(0);\n          this.totalPages.set(0);\n          this.loading.set(false);\n          this.notificationService.error('Failed to load user roles. Please try again.');\n        }\n      });\n  }\n\n  /**\n   * Update grid data\n   */\n  private updateGridData(): void {\n    this.gridConfig.update(config => ({\n      ...config,\n      data: this.userRoles()\n    }));\n  }\n\n  // Computed template renderers for grid\n  templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n    userRoleDetailsRenderer: this.userRoleDetailsRendererTemplate(),\n    statusRenderer: this.statusRendererTemplate(),\n    actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n  }));\n\n  /**\n   * Handle grid events\n   */\n  onGridEvent(event: GridEvent<UserRole>): 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.loadUserRoles();\n        }\n        break;\n      case 'search':\n        this.searchQuery.set(event.data as string);\n        this.currentPage.set(1);\n        this.loadUserRoles();\n        break;\n      case 'refresh':\n        this.loadUserRoles();\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      default:\n        console.log('🔄 Unhandled grid event:', event.type);\n    }\n  }\n\n  // Filter handlers\n  onStatusFilterChange(): void {\n    console.log('🔍 Status filter changed:', this.selectedStatusFilter());\n    this.currentPage.set(1); // Reset to first page when filtering\n    this.loadUserRoles();\n  }\n\n  clearFilters(): void {\n    console.log('🧹 Clearing filters');\n    this.selectedStatusFilter.set('');\n    this.searchQuery.set('');\n    this.currentPage.set(1);\n    this.loadUserRoles();\n  }\n\n  // User Role actions\n  createUserRole(): void {\n    console.log('➕ Navigating to create user role');\n    this.notificationService.info('Opening user role creation form.');\n    this.router.navigate(['/control-panel/user-role/create']);\n  }\n\n  viewUserRole(userRole: UserRole): void {\n    console.log('👁️ Viewing user role:', userRole);\n    this.notificationService.info(`Opening user role \"${userRole.syusrol_role_name}\" for viewing.`);\n    const queryParams = generateStringFromObject({ syusrol_id: userRole._id });\n    this.router.navigate(['/control-panel/user-role/view', queryParams]);\n  }\n\n  editUserRole(userRole: UserRole): void {\n    console.log('✏️ Editing user role:', userRole);\n\n    this.notificationService.info(`Opening user role \"${userRole.syusrol_role_name}\" for editing.`);\n    const queryParams = generateStringFromObject({ syusrol_id: userRole._id });\n    this.router.navigate(['/control-panel/user-role/edit', queryParams]);\n  }\n\n  deleteUserRole(userRole: UserRole): void {\n    console.log('🗑️ DELETE METHOD CALLED - Deleting user role:', userRole);\n\n    // Show confirmation dialog\n    console.log('🔔 Showing confirmation dialog for delete');\n    this.confirmationService.ask({\n      title: 'Delete User Role',\n      message: `Are you sure you want to delete the user role \"${userRole.syusrol_role_name}\"?\\n\\nThis action cannot be undone and will also delete all associated role rights.`,\n      confirmText: 'Delete',\n      cancelText: 'Cancel',\n      type: 'danger'\n    }).then((confirmed: boolean | string) => {\n      console.log('🔔 Confirmation dialog result:', confirmed);\n      if (confirmed) {\n        console.log('🗑️ Confirmed deletion, calling service with ID:', userRole._id);\n        this.loading.set(true);\n\n        this.userRoleService.deleteUserRole({ syusrol_id: userRole._id || '' } as MUserRoleDeletePayload).subscribe({\n          next: (response) => {\n            if (response?.success) {\n              console.log('✅ User role deleted successfully');\n              this.notificationService.success(`User role \"${userRole.syusrol_role_name}\" has been deleted successfully.`);\n              this.loadUserRoles(); // Reload the list\n            } else {\n              console.error('❌ Failed to delete user role');\n              this.notificationService.error(response?.message || 'Failed to delete user role');\n              this.loading.set(false);\n            }\n          },\n          error: (error) => {\n            console.error('❌ Error deleting user role:', error);\n            this.notificationService.error('Failed to delete user role. Please try again.');\n            this.loading.set(false);\n          }\n        });\n      }\n    });\n  }\n\n  toggleUserRoleStatus(userRole: UserRole): void {\n    console.log('🔄 Toggling user role status:', userRole);\n\n    const action = userRole.syusrol_isactive ? 'deactivate' : 'activate';\n    const actionText = userRole.syusrol_isactive ? 'Deactivate' : 'Activate';\n\n    // Show confirmation dialog\n    console.log('🔔 Showing confirmation dialog for toggle status');\n    this.confirmationService.ask({\n      title: `${actionText} User Role`,\n      message: `Are you sure you want to ${action} the user role \"${userRole.syusrol_role_name}\"?`,\n      confirmText: actionText,\n      cancelText: 'Cancel',\n      type: 'warning'\n    }).then((confirmed: boolean | string) => {\n      console.log('🔔 Confirmation dialog result:', confirmed);\n      if (confirmed) {\n        console.log('🔄 Calling toggleUserRoleStatus with ID:', userRole._id);\n        this.userRoleService.toggleUserRoleStatus({ syusrol_id: userRole._id || '' } as MUserRoleToggleStatusPayload).subscribe({\n          next: (response) => {\n            console.log('🔄 Toggle user role status response:', response);\n            if (response?.success) {\n              console.log('✅ User role status toggled successfully');\n              this.notificationService.success(`User role \"${userRole.syusrol_role_name}\" has been ${action}d successfully.`);\n              this.loadUserRoles();\n            } else {\n              console.error('❌ Failed to toggle user role status');\n              this.notificationService.error(response?.message || 'Failed to toggle user role status');\n              this.loading.set(false);\n            }\n          },\n          error: (error) => {\n            console.error('❌ Error toggling user role status:', error);\n            this.notificationService.error('Failed to toggle user role status. Please try again.');\n            this.loading.set(false);\n          }\n        });\n      }\n    });\n  }\n\n  /**\n   * Get dropdown configuration\n   */\n  getDropdownConfig(): DropdownConfig {\n    return {\n      triggerIcon: 'more_vert',\n      triggerSize: 'sm',\n      menuPosition: 'right',\n      forcePosition: 'bottom',\n      offsetX: 0,\n      offsetY: 4,\n      usePortal: true\n    };\n  }\n\n  /**\n   * Get action dropdown items\n   */\n  getActionDropdownItems(userRole: UserRole): DropdownItem[] {\n    console.log('🔽 Generating dropdown items for:', userRole.syusrol_role_name);\n    console.log('🔽 User role data:', {\n      isActive: userRole.syusrol_isactive\n    });\n\n    const items: DropdownItem[] = [];\n\n    if (this.canView()) {\n      items.push({\n        id: 'view',\n        label: 'View Details',\n        icon: 'visibility',\n        iconColor: 'tw-text-gray-400',\n        textColor: 'tw-text-gray-700',\n        hoverBgColor: 'hover:tw-bg-gray-100'\n      });\n    }\n\n    if (this.canEdit()) {\n      items.push({\n        id: 'edit',\n        label: 'Edit',\n        icon: 'edit',\n        iconColor: 'tw-text-blue-400',\n        textColor: 'tw-text-blue-600',\n        hoverBgColor: 'hover:tw-bg-blue-50'\n      });\n    }\n\n    if (this.canToggleStatus()) {\n      items.push({\n        id: 'toggle-status',\n        label: userRole.syusrol_isactive ? 'Deactivate' : 'Activate',\n        icon: userRole.syusrol_isactive ? 'toggle_off' : 'toggle_on',\n        iconColor: 'tw-text-gray-400',\n        textColor: 'tw-text-gray-700',\n        hoverBgColor: 'hover:tw-bg-gray-100'\n      });\n    }\n\n    if (this.canDelete()) {\n      items.push({\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        divider: true\n      });\n    }\n\n    return items;\n  }\n\n  /**\n   * Handle dropdown item click\n   */\n  onDropdownItemClick(item: DropdownItem, userRole: UserRole): void {\n    console.log('🔽 Dropdown item clicked:', item.id, 'for user role:', userRole.syusrol_role_name);\n\n    switch (item.id) {\n      case 'view':\n        this.viewUserRole(userRole);\n        break;\n      case 'edit':\n        this.editUserRole(userRole);\n        break;\n      case 'toggle-status':\n        this.toggleUserRoleStatus(userRole);\n        break;\n      case 'delete':\n        this.deleteUserRole(userRole);\n        break;\n      default:\n        console.log('❓ Unknown dropdown item clicked:', item.id);\n    }\n  }\n\n  // Export handler\n  private handleExport(format: string): void {\n    console.log(`📤 Exporting user roles as ${format}`);\n    // Implement export logic here\n    // Could export current filtered/sorted data or all data\n  }\n\n  // Utility methods\n  formatDate(date: string | Date): string {\n    if (!date) return '-';\n    return new Date(date).toLocaleDateString();\n  }\n\n  getStatusBadgeClass(userRole: UserRole): string {\n    if (userRole.syusrol_isactive) return 'tw-bg-green-100 tw-text-green-800';\n    return 'tw-bg-orange-100 tw-text-orange-800';\n  }\n\n  getStatusText(userRole: UserRole): string {\n    if (userRole.syusrol_isactive) return 'Active';\n    return 'Inactive';\n  }\n\n  getEntityName(entity: any): string {\n    if (typeof entity === 'object' && entity?.syen_name) {\n      return entity.syen_name;\n    }\n    return entity || 'N/A';\n  }\n}\n","<!-- User Role List with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_user_role' }\">\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\n          class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n\n          <!-- Title -->\n          <div class=\"tw-flex tw-items-center tw-space-x-2\">\n            <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">admin_panel_settings</cide-ele-icon>\n            <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">User Role Management</h5>\n          </div>\n\n          <!-- Actions -->\n          <div\n            class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n            <button cideEleButton variant=\"primary\" size=\"xs\" leftIcon=\"add\" (click)=\"createUserRole()\">\n              Create User Role\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 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          <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers()\"\n            (gridEvent)=\"onGridEvent($event)\">\n          </cide-ele-data-grid>\n        </div>\n\n      </div>\n    </div>\n\n  </div>\n\n  <!-- Template Renderers -->\n  <ng-template #userRoleDetailsRendererTemplate let-row=\"row\">\n    <div class=\"tw-flex tw-flex-col tw-w-full\">\n      <div class=\"tw-font-medium tw-text-gray-900\">{{ row.syusrol_role_name || 'N/A' }}</div>\n      <div class=\"tw-text-sm tw-text-gray-500 tw-truncate\">{{ row.syusrol_role_description || 'No description' }}</div>\n    </div>\n  </ng-template>\n\n  <ng-template #statusRendererTemplate let-row=\"row\">\n    <div class=\"tw-flex tw-items-center tw-justify-center\">\n      <!-- Active/Inactive Status Badge -->\n      <span\n        class=\"tw-inline-flex tw-items-center tw-justify-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-text-center\"\n        [ngClass]=\"getStatusBadgeClass(row)\">\n        <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">\n          {{ row.syusrol_isactive ? 'check_circle' : 'cancel' }}\n        </cide-ele-icon>\n        {{ getStatusText(row) }}\n      </span>\n    </div>\n  </ng-template>\n\n  <ng-template #actionsDropdownRendererTemplate let-row=\"row\">\n    <cide-ele-dropdown [items]=\"getActionDropdownItems(row)\" [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n      (itemClick)=\"onDropdownItemClick($event, row)\">\n    </cide-ele-dropdown>\n  </ng-template>\n</cide-lyt-shared-wrapper>","import { Component, input, output, inject, signal, OnInit, AfterViewInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CideEleButtonComponent, CideIconComponent, CideEleFloatingContainerService, CideSelectComponent } from 'cloud-ide-element';\r\nimport { CoreSystemEntityListResponse, entityControllerResponse } from 'cloud-ide-lms-model';\r\nimport type { UserRole, UserRoleWithRights } from '../../interfaces/user-role.interface';\r\nimport { CideCoreUserRoleService } from '../../services/user-role.service';\r\nimport { IEntityService, ENTITY_SERVICE_TOKEN } from 'cloud-ide-shared';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\nexport interface RoleForCopy {\r\n  roleId: string;\r\n  roleName: string;\r\n  roleDescription?: string;\r\n  entityId: string;\r\n  entityName: string;\r\n  permissionsCount: number;\r\n}\r\n\r\n// Type-safe response interfaces for API calls\r\ninterface RolesByEntityResponse {\r\n  success: boolean;\r\n  data: UserRole[];\r\n  message?: string;\r\n}\r\n\r\ninterface UserRoleByIdResponse {\r\n  success: boolean;\r\n  data: UserRoleWithRights;\r\n  message?: string;\r\n}\r\n\r\n@Component({\r\n  selector: 'cide-copy-role-drawer',\r\n  standalone: true,\r\n  imports: [CommonModule, FormsModule, CideEleButtonComponent, CideIconComponent, CideSelectComponent],\r\n  template: `\r\n    <div class=\"tw-flex tw-flex-col tw-h-full\">\r\n      <!-- Header Description -->\r\n      <div class=\"tw-px-3 tw-py-2 tw-bg-blue-50 dark:tw-bg-blue-900/20 tw-border-b tw-border-blue-200 dark:tw-border-blue-700\">\r\n        <p class=\"tw-text-xs tw-text-blue-700 dark:tw-text-blue-300 tw-m-0\">\r\n          Select an entity and role to copy all permissions to the current role.\r\n        </p>\r\n      </div>\r\n\r\n      <!-- Content -->\r\n      <div class=\"tw-flex-1 tw-overflow-y-auto tw-p-3 tw-space-y-4\">\r\n        <!-- Entity Selection -->\r\n        <div>\r\n          <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 dark:tw-text-gray-300 tw-mb-2\">\r\n            Select Entity\r\n          </label>\r\n          <cide-ele-select \r\n            id=\"copy_entity_select\"\r\n            [ngModel]=\"selectedEntityId()\"\r\n            (ngModelChange)=\"onEntityChange($event)\"\r\n            size=\"md\">\r\n            <option value=\"\">Select an entity...</option>\r\n            @for (entity of flattenedEntities(); track entity._id) {\r\n              <option [value]=\"entity._id\">{{ entity.displayName }}</option>\r\n            }\r\n          </cide-ele-select>\r\n          <!-- Debug info -->\r\n          <div class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">\r\n            Debug: {{ flattenedEntities().length }} entities loaded\r\n          </div>\r\n        </div>\r\n\r\n        <!-- Role Selection -->\r\n        @if (selectedEntityId() && availableRoles().length > 0) {\r\n          <div>\r\n            <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 dark:tw-text-gray-300 tw-mb-2\">\r\n              Select Role to Copy\r\n            </label>\r\n            <cide-ele-select \r\n              id=\"copy_role_select\"\r\n              [ngModel]=\"selectedRoleId()\"\r\n              (ngModelChange)=\"onRoleChange($event)\"\r\n              size=\"md\">\r\n              <option value=\"\">Select a role...</option>\r\n              @for (role of availableRoles(); track role._id) {\r\n                <option [value]=\"role._id\">{{ role.syusrol_role_name }}</option>\r\n              }\r\n            </cide-ele-select>\r\n          </div>\r\n        }\r\n\r\n        <!-- Role Preview -->\r\n        @if (rolePreview()) {\r\n          <div class=\"tw-bg-blue-50 dark:tw-bg-blue-900/20 tw-border tw-border-blue-200 dark:tw-border-blue-700 tw-rounded-md tw-p-3\">\r\n            <div class=\"tw-flex tw-items-start tw-gap-2 tw-mb-2\">\r\n              <cide-ele-icon variant=\"blue\" size=\"sm\" class=\"tw-flex-shrink-0 tw-mt-0.5\">info</cide-ele-icon>\r\n              <div class=\"tw-flex-1 tw-min-w-0\">\r\n                <div class=\"tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100 tw-text-sm tw-mb-1\">\r\n                  {{ rolePreview()?.core_user_role?.syusrol_role_name }}\r\n                </div>\r\n                <div class=\"tw-text-xs tw-text-gray-600 dark:tw-text-gray-400 tw-mb-2\">\r\n                  {{ rolePreview()?.core_user_role?.syusrol_role_description }}\r\n                </div>\r\n                <div class=\"tw-flex tw-items-center tw-gap-2 tw-flex-wrap\">\r\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-blue-100 dark:tw-bg-blue-800 tw-text-blue-800 dark:tw-text-blue-200\">\r\n                    {{ rolePreview()?.core_user_role_rights?.length || 0 }} permissions\r\n                  </span>\r\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\"\r\n                        [class]=\"rolePreview()?.core_user_role?.syusrol_isactive \r\n                          ? 'tw-bg-green-100 dark:tw-bg-green-800 tw-text-green-800 dark:tw-text-green-200' \r\n                          : 'tw-bg-red-100 dark:tw-bg-red-800 tw-text-red-800 dark:tw-text-red-200'\">\r\n                    {{ rolePreview()?.core_user_role?.syusrol_isactive ? 'Active' : 'Inactive' }}\r\n                  </span>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        }\r\n\r\n        <!-- Loading State -->\r\n        @if (loading()) {\r\n          <div class=\"tw-text-center tw-py-4\">\r\n            <div class=\"tw-inline-block tw-animate-spin tw-w-6 tw-h-6 tw-border-2 tw-border-blue-600 tw-border-t-transparent tw-rounded-full\"></div>\r\n            <p class=\"tw-text-sm tw-text-gray-600 dark:tw-text-gray-400 tw-mt-2\">Loading...</p>\r\n          </div>\r\n        }\r\n\r\n        <!-- No Roles Message -->\r\n        @if (selectedEntityId() && !loading() && availableRoles().length === 0) {\r\n          <div class=\"tw-text-center tw-py-6 tw-text-gray-500 dark:tw-text-gray-400\">\r\n            <cide-ele-icon variant=\"gray\" size=\"lg\" class=\"tw-mb-2\">info</cide-ele-icon>\r\n            <p class=\"tw-text-sm tw-font-medium tw-mb-1\">No Roles Available</p>\r\n            <p class=\"tw-text-xs\">This entity has no roles to copy from.</p>\r\n          </div>\r\n        }\r\n      </div>\r\n\r\n      <!-- Footer -->\r\n      <div class=\"tw-border-t tw-border-gray-200 dark:tw-border-gray-700 tw-px-3 tw-py-2 tw-flex tw-justify-end tw-gap-2 tw-flex-shrink-0 tw-bg-white dark:tw-bg-gray-800\">\r\n        <button \r\n          cideEleButton \r\n          variant=\"secondary\" \r\n          size=\"xs\" \r\n          type=\"button\" \r\n          (click)=\"onCancel()\">\r\n          Cancel\r\n        </button>\r\n        <button \r\n          cideEleButton \r\n          variant=\"primary\" \r\n          size=\"xs\" \r\n          type=\"button\" \r\n          leftIcon=\"content_copy\"\r\n          [disabled]=\"!rolePreview()\"\r\n          (click)=\"onApply()\">\r\n          Apply Copy\r\n        </button>\r\n      </div>\r\n    </div>\r\n  `,\r\n  styles: []\r\n})\r\nexport class CopyRoleDrawerComponent implements OnInit, AfterViewInit {\r\n  private floatingContainerService = inject(CideEleFloatingContainerService);\r\n  private userRoleService = inject(CideCoreUserRoleService);\r\n  private entityService = inject(ENTITY_SERVICE_TOKEN) as IEntityService;\r\n  private destroyRef = takeUntilDestroyed();\r\n\r\n  // Outputs\r\n  roleSelect = output<UserRoleWithRights>();\r\n  cancel = output<void>();\r\n\r\n  // Signals\r\n  flattenedEntities = signal<Array<{_id: string, displayName: string, entity: CoreSystemEntityListResponse}>>([]);\r\n  selectedEntityId = signal<string>('');\r\n  selectedRoleId = signal<string>('');\r\n  availableRoles = signal<UserRole[]>([]);\r\n  rolePreview = signal<UserRoleWithRights | null>(null);\r\n  loading = signal(false);\r\n  private entitiesLoadAttempted = signal(false);\r\n\r\n  constructor() {\r\n    console.log('🏗️ [CopyRoleDrawer] Constructor called');\r\n    console.log('🏗️ [CopyRoleDrawer] EntityService available:', !!this.entityService);\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    console.log('🔄 [CopyRoleDrawer] ngOnInit called, loading entities...');\r\n    // Defer loading to avoid ExpressionChangedAfterItHasBeenCheckedError\r\n    setTimeout(() => this.loadEntitiesIfNeeded(), 0);\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    console.log('🔄 [CopyRoleDrawer] ngAfterViewInit called');\r\n    // Try loading again if it wasn't loaded in ngOnInit\r\n    setTimeout(() => this.loadEntitiesIfNeeded(), 0);\r\n  }\r\n\r\n  private loadEntitiesIfNeeded(): void {\r\n    if (!this.entitiesLoadAttempted()) {\r\n      this.entitiesLoadAttempted.set(true);\r\n      this.loadEntities();\r\n    }\r\n  }\r\n\r\n  private loadEntities(): void {\r\n    console.log('📞 [CopyRoleDrawer] Calling entityService.getEntityList()...');\r\n    this.loading.set(true);\r\n    \r\n    if (!this.entityService) {\r\n      console.error('❌ [CopyRoleDrawer] EntityService is not available!');\r\n      this.loading.set(false);\r\n      return;\r\n    }\r\n    \r\n    this.entityService.getEntityList({})\r\n      .pipe(this.destroyRef)\r\n      .subscribe({\r\n        next: (response) => {\r\n          console.log('✅ [CopyRoleDrawer] Entity list response received:', response);\r\n          const typedResponse = response as entityControllerResponse;\r\n          if (typedResponse?.success && typedResponse?.data) {\r\n            console.log(`✅ [CopyRoleDrawer] Processing ${typedResponse.data.length} entities`);\r\n            const hierarchical = this.buildEntityHierarchy(typedResponse.data);\r\n            console.log('✅ [CopyRoleDrawer] Hierarchical entities:', hierarchical);\r\n            const flattened = this.flattenEntitiesForDropdown(hierarchical);\r\n            console.log(`✅ [CopyRoleDrawer] Flattened ${flattened.length} entities for dropdown:`, flattened);\r\n            this.flattenedEntities.set(flattened);\r\n            console.log('✅ [CopyRoleDrawer] Signal updated. Current value:', this.flattenedEntities());\r\n          } else {\r\n            console.warn('⚠️ [CopyRoleDrawer] Invalid response structure:', typedResponse);\r\n          }\r\n          this.loading.set(false);\r\n        },\r\n        error: (error) => {\r\n          console.error('❌ [CopyRoleDrawer] Error loading entities:', error);\r\n          this.loading.set(false);\r\n        }\r\n      });\r\n  }\r\n\r\n  private buildEntityHierarchy(entities: CoreSystemEntityListResponse[]): CoreSystemEntityListResponse[] {\r\n    const nodeMap = new Map<string, CoreSystemEntityListResponse>();\r\n    const rootNodes: CoreSystemEntityListResponse[] = [];\r\n\r\n    entities.forEach(entity => {\r\n      const node: CoreSystemEntityListResponse = { ...entity, children: [] };\r\n      nodeMap.set(entity._id || '', node);\r\n    });\r\n\r\n    entities.forEach(entity => {\r\n      const node = nodeMap.get(entity._id || '');\r\n      if (node) {\r\n        const parentId = entity.syen_id_syen;\r\n        if (parentId && parentId !== \"\" && nodeMap.has(parentId)) {\r\n          const parent = nodeMap.get(parentId)!;\r\n          parent.children = parent.children || [];\r\n          parent.children.push(node);\r\n        } else {\r\n          rootNodes.push(node);\r\n        }\r\n      }\r\n    });\r\n\r\n    return rootNodes;\r\n  }\r\n\r\n  private flattenEntitiesForDropdown(\r\n    entities: CoreSystemEntityListResponse[], \r\n    level: number = 0\r\n  ): Array<{_id: string, displayName: string, entity: CoreSystemEntityListResponse}> {\r\n    const result: Array<{_id: string, displayName: string, entity: CoreSystemEntityListResponse}> = [];\r\n    \r\n    entities.forEach(entity => {\r\n      const indent = '\\u00A0\\u00A0\\u00A0'.repeat(level);\r\n      const prefix = level > 0 ? '└─ ' : '';\r\n      const displayName = `${indent}${prefix}${entity.syen_name || 'Unnamed Entity'}`;\r\n      \r\n      result.push({ _id: entity._id || '', displayName, entity });\r\n      \r\n      if (entity.children && entity.children.length > 0) {\r\n        const childrenFlattened = this.flattenEntitiesForDropdown(entity.children, level + 1);\r\n        result.push(...childrenFlattened);\r\n      }\r\n    });\r\n    \r\n    return result;\r\n  }\r\n\r\n  onEntityChange(entityIdValue: string | number | string[]): void {\r\n    // Convert entityId to string\r\n    const entityId = String(entityIdValue);\r\n    \r\n    this.selectedRoleId.set('');\r\n    this.rolePreview.set(null);\r\n    this.availableRoles.set([]);\r\n\r\n    if (entityId) {\r\n      this.loadRolesForEntity(entityId);\r\n    }\r\n  }\r\n\r\n  private loadRolesForEntity(entityId: string): void {\r\n    console.log('📞 [CopyRoleDrawer] Loading roles for entity:', entityId);\r\n    this.loading.set(true);\r\n    this.userRoleService.getRolesByEntity(entityId)\r\n      .pipe(this.destroyRef)\r\n      .subscribe({\r\n        next: (response) => {\r\n          console.log('✅ [CopyRoleDrawer] Roles response received:', response);\r\n          const typedResponse = response as RolesByEntityResponse;\r\n          if (typedResponse?.success && typedResponse.data) {\r\n            console.log(`✅ [CopyRoleDrawer] Loaded ${typedResponse.data.length} roles`);\r\n            this.availableRoles.set(typedResponse.data);\r\n          } else {\r\n            console.warn('⚠️ [CopyRoleDrawer] Invalid roles response:', typedResponse);\r\n          }\r\n          this.loading.set(false);\r\n        },\r\n        error: (error) => {\r\n          console.error('❌ [CopyRoleDrawer] Error loading roles:', error);\r\n          this.loading.set(false);\r\n        }\r\n      });\r\n  }\r\n\r\n  onRoleChange(roleIdValue: string | number | string[]): void {\r\n    // Convert roleId to string\r\n    const roleId = String(roleIdValue);\r\n    \r\n    this.rolePreview.set(null);\r\n\r\n    if (roleId) {\r\n      this.loadRolePreview(roleId);\r\n    }\r\n  }\r\n\r\n  private loadRolePreview(roleId: string): void {\r\n    console.log('📞 [CopyRoleDrawer] Loading role preview for:', roleId);\r\n    this.loading.set(true);\r\n    this.userRoleService.getUserRoleById({ syusrol_id: roleId })\r\n      .pipe(this.destroyRef)\r\n      .subscribe({\r\n        next: (response) => {\r\n          console.log('✅ [CopyRoleDrawer] Role preview response received:', response);\r\n          const typedResponse = response as UserRoleByIdResponse;\r\n          if (typedResponse?.success && typedResponse.data) {\r\n            console.log('✅ [CopyRoleDrawer] Role preview loaded');\r\n            this.rolePreview.set(typedResponse.data);\r\n          } else {\r\n            console.warn('⚠️ [CopyRoleDrawer] Invalid role preview response:', typedResponse);\r\n          }\r\n          this.loading.set(false);\r\n        },\r\n        error: (error) => {\r\n          console.error('❌ [CopyRoleDrawer] Error loading role preview:', error);\r\n          this.loading.set(false);\r\n        }\r\n      });\r\n  }\r\n\r\n  onApply(): void {\r\n    const preview = this.rolePreview();\r\n    if (preview) {\r\n      this.roleSelect.emit(preview);\r\n      this.floatingContainerService.hide('copy-role-drawer');\r\n    }\r\n  }\r\n\r\n  onCancel(): void {\r\n    this.cancel.emit();\r\n    this.floatingContainerService.hide('copy-role-drawer');\r\n  }\r\n}\r\n\r\n\r\n\r\n\r\n","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject, OnInit, OnDestroy, ChangeDetectorRef, effect } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, FormArray, Validators, ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { Subject, takeUntil } from 'rxjs';\nimport { CideEleButtonComponent, CideInputComponent, CideSelectComponent, CideTextareaComponent, CideIconComponent, NotificationService, ConfirmationService, GridConfiguration, GridEvent, TemplateContext, CideFormFieldErrorComponent, CideEleFloatingContainerService } from 'cloud-ide-element';\nimport { CideEleDataGridComponent } from 'cloud-ide-element';\nimport { generateStringFromObject, MUserRoleWithRightsPayload, generateObjectFromString, MMenuListPayload, ICoreSyme, menuListControllerResponse } from 'cloud-ide-lms-model';\nimport { AppStateHelperService, RightsService } from 'cloud-ide-layout';\nimport { CideCoreUserRoleService } from '../../services/user-role.service';\nimport { Observable, forkJoin, of } from 'rxjs';\nimport { map, catchError, switchMap } from 'rxjs/operators';\nimport type { UserRole, UserRoleRight, Entity, Menu, Permission, UserRoleWithRights } from '../../interfaces/user-role.interface';\nimport { CideCoreGeneralMasterService } from '../../../general-master-management/services/general-master.service';\nimport { CideCoreGeneralMasterTypeService } from '../../../general-master-management/services/general-master-type.service';\nimport { ICoreSygms, IGeneralMasterListRequest } from 'cloud-ide-lms-model';\nimport { MenuManagementService } from '../../../menu-management';\nimport { CopyRoleDrawerComponent } from './copy-role-drawer.component';\n\n@Component({\n  selector: 'cide-core-user-role-form',\n  standalone: true,\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    FormsModule,\n    CideEleButtonComponent,\n    CideIconComponent,\n    CideInputComponent,\n    CideSelectComponent,\n    CideTextareaComponent,\n    CideEleDataGridComponent,\n    CideFormFieldErrorComponent\n  ],\n  templateUrl: './user-role-form.component.html',\n  styles: [`\n    :host {\n      @apply tw-w-full tw-h-full tw-flex tw-flex-col;\n    }\n  `]\n})\nexport class CideCoreUserRoleFormComponent implements OnInit, OnDestroy {\n  // Dependency injection\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly userRoleService = inject(CideCoreUserRoleService);\n  private readonly menuService = inject(MenuManagementService);\n  private readonly generalMasterService = inject(CideCoreGeneralMasterService);\n  private readonly generalMasterTypeService = inject(CideCoreGeneralMasterTypeService);\n  private readonly floatingContainerService = inject(CideEleFloatingContainerService);\n\n  /** Refetch permissions when general master list is invalidated elsewhere. */\n  private readonly generalMasterInvalidationEffect = effect(() => {\n    const count = this.generalMasterService.listInvalidated();\n    if (count > 0 && this.userRightsTypeId()) {\n      this.loadPermissions();\n    }\n  });\n  private readonly router = inject(Router);\n  private readonly route = inject(ActivatedRoute);\n  private readonly appState = inject(AppStateHelperService);\n  private readonly notificationService = inject(NotificationService);\n  private readonly confirmationService = inject(ConfirmationService);\n  private readonly fb = inject(FormBuilder);\n  private readonly cdr = inject(ChangeDetectorRef);\n  private readonly rightsService = inject(RightsService);\n  private destroy$ = new Subject<void>();\n\n  // State management\n  userRoleForm!: FormGroup;\n  roleRightsForm!: FormGroup;\n  loading = signal(false);\n  error = signal<string | null>(null);\n  isEditMode = signal(false);\n  isViewMode = signal(false);\n  userRoleId = signal<string | null>(null);\n\n  // Data signals\n  entities = signal<Entity[]>([]);\n  menus = signal<ICoreSyme[]>([]);\n  permissions = signal<Permission[]>([]);\n  originalRights = signal<UserRoleRight[]>([]);\n  userRightsTypeId = signal<string | null>(null);\n  viewPermissionId = signal<string | null>(null);\n\n\n  // Template renderers for Role Rights grid\n  menuDetailsRendererTemplate = viewChild<TemplateRef<TemplateContext>>('menuDetailsRendererTemplate');\n  permissionsCheckboxRendererTemplate = viewChild<TemplateRef<TemplateContext>>('permissionsCheckboxRendererTemplate');\n\n  // Form mode\n  get formTitle(): string {\n    if (this.isViewMode()) return 'View User Role';\n    if (this.isEditMode()) return 'Edit User Role';\n    return 'Create User Role';\n  }\n\n  get submitButtonText(): string {\n    if (this.isViewMode()) return 'Close';\n    if (this.isEditMode()) return 'Update User Role';\n    return 'Create User Role';\n  }\n\n  // Grid configuration for Role Rights - Copied from working menu list\n  roleRightsGridConfig = signal<GridConfiguration<UserRoleRight>>({\n    id: 'menu-list-grid',\n    title: '',\n    subtitle: '',\n    fullHeight: true,\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_permissions_id_sygms',\n        header: 'Available Permissions',\n        type: 'custom',\n        width: '300px',\n        truncate: false,\n        align: 'left',\n        renderer: 'permissionsCheckboxRenderer'\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: false,\n      skeletonRows: 5,\n      showOverlay: false\n    },\n    scroll: {\n      enabled: true,\n      maxHeight: '900px',\n      minHeight: '200px',\n      stickyHeader: true,\n      virtualScroll: false,\n      rowHeight: 25\n    },\n\n    dragDrop: {\n      enabled: false,\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    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  // Computed template renderers for grid\n  templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => {\n    const renderers: Record<string, TemplateRef<TemplateContext>> = {};\n\n    if (this.menuDetailsRendererTemplate()) {\n      renderers['menuDetailsRenderer'] = this.menuDetailsRendererTemplate()!;\n    }\n    if (this.permissionsCheckboxRendererTemplate()) {\n      renderers['permissionsCheckboxRenderer'] = this.permissionsCheckboxRendererTemplate()!;\n    }\n\n    return renderers;\n  });\n\n  ngOnInit(): void {\n    // Initialize rights for user role management\n    this.rightsService.initializeRights('core_user_role');\n    console.log('👥 User Role Form Component initialized');\n    this.initializeForm();\n    this.loadMasterData();\n    this.checkForUserRoleId();\n  }\n\n  ngOnDestroy(): void {\n    console.log('👥 User Role Form Component destroyed');\n\n    // Clean up RxJS subscriptions\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  /**\n   * Initialize the forms\n   */\n  private initializeForm(): void {\n    // Get entity ID from app state\n    const currentEntityId = this.appState.activeEntity()?._id;\n\n    // Initialize main user role form\n    this.userRoleForm = this.fb.group({\n      syusrol_role_name: ['', Validators.required],\n      syusrol_role_description: ['', Validators.required],\n      syusrol_role_entity_id_syen: [currentEntityId, Validators.required], // Auto-set from app state\n      syusrol_isactive: [true]\n    });\n\n    // Initialize separate role rights form\n    this.roleRightsForm = this.fb.group({\n      roleRights: this.fb.array([])\n    });\n\n    // Subscribe to form changes to update grid data\n  }\n\n  /**\n   * Check for user role ID in query parameters\n   */\n  private checkForUserRoleId(): void {\n    console.log('🔍 Checking for user role ID in query parameters', this.route.params);\n    this.route.params.pipe(takeUntil(this.destroy$)).subscribe(params => {\n      console.log('🔍 Query params:', params);\n\n      const url = this.router.url;\n      const queryParams = params['query'];\n      const queryData = generateObjectFromString(queryParams);\n\n      // Check for user role ID\n      const userRoleId = queryData.syusrol_id;\n\n      if (userRoleId) {\n        console.log('🔍 User Role ID found in query params:', userRoleId);\n        this.userRoleId.set(userRoleId);\n\n        // Determine mode based on URL\n        if (url.includes('/view/')) {\n          this.isViewMode.set(true);\n          this.isEditMode.set(false);\n          this.loadUserRoleData(userRoleId, true);\n        } else if (url.includes('/edit/')) {\n          this.isViewMode.set(false);\n          this.isEditMode.set(true);\n          this.loadUserRoleData(userRoleId, false);\n        } else {\n          // Default to edit mode if ID is provided but no specific mode\n          this.isViewMode.set(false);\n          this.isEditMode.set(true);\n          this.loadUserRoleData(userRoleId, false);\n        }\n      } else {\n        console.log('🆕 No user role ID found - creating new user role');\n        this.isViewMode.set(false);\n        this.isEditMode.set(false);\n        this.userRoleId.set(null);\n      }\n    });\n  }\n\n  /**\n   * Load master data (menus, permissions)\n   */\n  private loadMasterData(): void {\n    console.log('🔄 Loading master data for User Role Form...');\n\n    // Load menus from API using the same service as menu listing\n    this.loadMenusFromAPI();\n\n    // Load permissions from general master\n    this.loadUserRightsTypeId();\n  }\n\n\n  /**\n   * Load menus from API using the same service as menu listing\n   */\n  private loadMenusFromAPI(): void {\n    console.log('📋 Loading menus from API...');\n\n    if (!this.menuService) {\n      console.error('❌ MenuService is not available');\n      return;\n    }\n\n    const requestBody: MMenuListPayload = {\n      pagination: false,\n      sort: { order: 'asc', key: 'syme_order_by' }\n    };\n\n    this.menuService.getMenuList(requestBody)\n      .pipe(takeUntil(this.destroy$))\n      .subscribe({\n        next: (response) => {\n          console.log('✅ Menus loaded from API:', response);\n          if (response?.success && response.data) {\n            // Assign directly to grid without any processing\n            this.roleRightsGridConfig.update(config => ({\n              ...config,\n              data: response.data as any\n            }));\n\n            // Initialize role rights for all menu items\n            this.initializeRoleRightsForAllMenus(response.data);\n          } else {\n            console.warn('⚠️ No menu data received from API');\n            this.roleRightsGridConfig.update(config => ({\n              ...config,\n              data: []\n            }));\n          }\n        },\n        error: (error: any) => {\n          console.error('❌ Error loading menus from API:', error);\n          this.roleRightsGridConfig.update(config => ({\n            ...config,\n            data: []\n          }));\n        }\n      });\n  }\n\n  /**\n   * Load user rights type ID from general master type service\n   */\n  private loadUserRightsTypeId(): void {\n    console.log('🔍 Loading user rights type ID...');\n\n    this.generalMasterTypeService.getTypeList({})\n      .pipe(takeUntil(this.destroy$))\n      .subscribe({\n        next: (response) => {\n          if (response?.success && response.data) {\n            // Find the type with code 'user_rights'\n            const userRightsType = response.data.find(type =>\n              type.sygmt_code === 'user_rights' || type.sygmt_title?.toLowerCase().includes('user_rights')\n            );\n\n            if (userRightsType) {\n              console.log('✅ Found user rights type:', userRightsType);\n              this.userRightsTypeId.set(userRightsType._id || null);\n              this.loadPermissions();\n            } else {\n              console.warn('⚠️ User rights type not found');\n              this.error.set('User rights type not found in general master types');\n            }\n          }\n        },\n        error: (err) => {\n          console.error('❌ Error loading user rights type:', err);\n          this.error.set('Failed to load user rights type');\n        }\n      });\n  }\n\n  /**\n   * Load permissions from general master service\n   */\n  private loadPermissions(): void {\n    const typeId = this.userRightsTypeId();\n    if (!typeId) {\n      console.warn('⚠️ Cannot load permissions: user rights type ID not found');\n      return;\n    }\n\n    console.log('🔍 Loading permissions for type ID:', typeId);\n\n    const payload: IGeneralMasterListRequest = {\n      sygms_id_sygmt: typeId\n    };\n\n    this.generalMasterService.getMasterList(payload)\n      .pipe(takeUntil(this.destroy$))\n      .subscribe({\n        next: (response) => {\n          if (response?.success && response.data) {\n            console.log('✅ Permissions loaded:', response.data);\n            // Convert ICoreSygms to Permission interface\n            const permissions: Permission[] = response.data.map(perm => ({\n              _id: perm._id,\n              sygms_name: perm.sygms_title || perm.sygms_code || 'Unknown',\n              sygms_code: perm.sygms_code || '',\n              sygms_description: perm.sygms_desc || '',\n              sygms_isactive: perm.sygms_isactive ?? true\n            }));\n            this.permissions.set(permissions);\n\n            // Find and store the view permission ID\n            const viewPermission = permissions.find(perm => perm.sygms_code === 'view_user_right');\n            if (viewPermission) {\n              this.viewPermissionId.set(viewPermission._id || null);\n              console.log('✅ View permission ID found:', viewPermission._id, 'Name:', viewPermission.sygms_name);\n            } else {\n              console.warn('⚠️ View permission with code \"view_user_right\" not found');\n              console.log('🔍 Available permissions:', permissions.map(p => ({ code: p.sygms_code, name: p.sygms_name })));\n            }\n          } else {\n            console.warn('⚠️ No permissions data received');\n            this.permissions.set([]);\n          }\n        },\n        error: (err) => {\n          console.error('❌ Error loading permissions:', err);\n          this.permissions.set([]);\n        }\n      });\n  }\n\n\n  /**\n   * Load user role data\n   */\n  private loadUserRoleData(userRoleId: string, isViewMode: boolean): void {\n    this.loading.set(true);\n    this.error.set(null);\n\n    this.userRoleService.getUserRoleById({ syusrol_id: userRoleId })\n      .pipe(takeUntil(this.destroy$))\n      .subscribe({\n        next: async (response) => {\n          if (response?.success && response.data) {\n            const userRoleData = response.data.core_user_role;\n\n            // Populate form with user role data\n            this.userRoleForm.patchValue({\n              syusrol_role_name: userRoleData.syusrol_role_name,\n              syusrol_role_description: userRoleData.syusrol_role_description,\n              syusrol_role_entity_id_syen: userRoleData.syusrol_role_entity_id_syen,\n              syusrol_isactive: userRoleData.syusrol_isactive\n            });\n\n            // Store original rights for comparison\n            const rightsData = await Promise.all((response?.data?.core_user_role_rights || [])?.map((rights) => {\n              return {\n                ...rights,\n                syusrgt_menu_id_syme: rights.syusrgt_menu_id_syme?._id,\n                syusrgt_role_permissions_id_sygms: rights.syusrgt_role_permissions_id_sygms?._id,\n              }\n            }));\n            this.originalRights.set(rightsData);\n\n            // Populate role rights\n            this.populateRoleRights(rightsData);\n\n            // Disable form if in view mode\n            if (isViewMode) {\n              this.userRoleForm.disable();\n            }\n\n            this.notificationService.success('User role data loaded successfully.');\n            setTimeout(() => this.cdr.detectChanges(), 0);\n          } else {\n            this.error.set('Failed to load user role data.');\n            this.notificationService.error('Failed to load user role data.');\n            this.cdr.detectChanges();\n          }\n          this.loading.set(false);\n        },\n        error: (error) => {\n          console.error('❌ Error loading user role data:', error);\n          this.error.set('Failed to load user role data. Please try again.');\n          this.loading.set(false);\n          this.notificationService.error('Failed to load user role data. Please try again.');\n          this.cdr.detectChanges();\n        }\n      });\n  }\n\n  /**\n   * Populate role rights form array\n   */\n  private populateRoleRights(rights: UserRoleRight[]): void {\n    const rightsArray = this.roleRightsForm.get('roleRights') as FormArray;\n    rightsArray.clear();\n\n    rights.forEach(right => {\n      rightsArray.push(this.createRoleRightFormGroup(right));\n    });\n  }\n\n  /**\n   * Create role right form group\n   */\n  private createRoleRightFormGroup(right?: UserRoleRight): FormGroup {\n    return this.fb.group({\n      _id: [right?._id || ''],\n      menuId: [right?.syusrgt_menu_id_syme || '', Validators.required], // Add menuId for easy lookup\n      syusrgt_menu_id_syme: [right?.syusrgt_menu_id_syme || '', Validators.required],\n      syusrgt_role_permissions_id_sygms: [right?.syusrgt_role_permissions_id_sygms || '', Validators.required],\n      syusrgt_isactive: [right?.syusrgt_isactive ?? true]\n    });\n  }\n\n  /**\n   * Get role rights form array\n   */\n  get roleRightsArray(): FormArray {\n    return this.roleRightsForm.get('roleRights') as FormArray;\n  }\n\n  /**\n   * Add new role right\n   */\n  addRoleRight(): void {\n    if (this.isViewMode()) return;\n\n    const rightsArray = this.roleRightsArray;\n    rightsArray.push(this.createRoleRightFormGroup());\n  }\n\n  /**\n   * Remove role right\n   */\n  removeRoleRight(index: number): void {\n    if (this.isViewMode()) return;\n\n    const rightsArray = this.roleRightsArray;\n    rightsArray.removeAt(index);\n  }\n\n  /**\n   * Get entity name by ID\n   */\n  getEntityName(entityId: string): string {\n    const entity = this.entities().find(e => e._id === entityId);\n    return entity?.syen_name || 'N/A';\n  }\n\n  /**\n   * Get menu name by ID\n   */\n  getMenuName(menuId: string): string {\n    const menu = this.menus().find(m => m._id === menuId);\n    return menu?.syme_title || 'N/A';\n  }\n\n  /**\n   * Get permission name by ID\n   */\n  getPermissionName(permissionId: string): string {\n    const permission = this.permissions().find(p => p._id === permissionId);\n    return permission?.sygms_name || 'N/A';\n  }\n\n  /**\n   * Get permission names by 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?.sygms_name || 'Unknown';\n      })\n      .filter(name => name !== 'Unknown');\n\n    return permissionNames.length > 0 ? permissionNames.join(', ') : 'No valid permissions';\n  }\n\n\n\n  /**\n   * Edit role right (focus on the form row)\n   */\n  editRoleRight(index: number): void {\n    // Scroll to the form row or highlight it\n    console.log('Edit role right at index:', index);\n    // You could add visual feedback here\n  }\n\n  /**\n   * Toggle role right status\n   */\n  toggleRoleRightStatus(index: number): void {\n    if (this.isViewMode()) return;\n\n    const control = this.roleRightsArray.at(index);\n    const currentStatus = control.get('syusrgt_isactive')?.value;\n    control.get('syusrgt_isactive')?.setValue(!currentStatus);\n  }\n\n  /**\n   * Handle grid events\n   */\n  onRoleRightsGridEvent(event: GridEvent<UserRoleRight>): void {\n    console.log('🔍 Role Rights Grid Event:', event);\n\n    // Log specific event types to debug automatic update calls\n    if (event.type) {\n      console.log('🔍 Grid Event Type:', event.type);\n    }\n\n    // Prevent any automatic form updates from grid events that shouldn't trigger form changes\n    if (event.type === 'rowClick' || event.type === 'sort' || event.type === 'pageChange' || event.type === 'search') {\n      console.log('🔍 Grid event detected that should not trigger form updates:', event.type);\n      return;\n    }\n\n    // Handle any other grid-specific events if needed\n  }\n\n  /**\n   * Handle form submission\n   */\n  onSubmit(): void {\n    if (this.isViewMode()) {\n      this.router.navigate(['/control-panel/user-role']);\n      return;\n    }\n    console.log(\"userRoleForm\", this.userRoleForm);\n    if (this.userRoleForm.invalid) {\n      this.notificationService.error('Please fill in all required fields correctly.');\n      this.cdr.detectChanges();\n      return;\n    }\n\n    const userRoleData = this.userRoleForm.value;\n    const roleRightsData = this.roleRightsForm.value;\n\n    // Build role rights - each record represents a single permission\n    const roleRightsWithPermissions = roleRightsData.roleRights\n      .filter((right: any) => right.syusrgt_role_permissions_id_sygms) // Only include records with permissions\n      .map((right: any) => ({\n        _id: right._id || undefined,\n        syusrgt_menu_id_syme: right.syusrgt_menu_id_syme,\n        syusrgt_role_permissions_id_sygms: right.syusrgt_role_permissions_id_sygms, // Single permission ID\n        syusrgt_isactive: right.syusrgt_isactive\n      }));\n\n    const payload: MUserRoleWithRightsPayload = {\n      core_user_role: {\n        _id: this.userRoleId() || undefined,\n        syusrol_role_name: userRoleData.syusrol_role_name,\n        syusrol_role_description: userRoleData.syusrol_role_description,\n        syusrol_role_entity_id_syen: userRoleData.syusrol_role_entity_id_syen,\n        syusrol_isactive: userRoleData.syusrol_isactive\n      },\n      core_user_role_rights: roleRightsWithPermissions,\n      core_user_role_rights_delete: this.getDeletedRightsIds()\n    };\n\n    console.log('💾 Saving user role with', roleRightsWithPermissions.length, 'role rights');\n\n    this.saveUserRole(payload);\n  }\n\n  /**\n   * Get deleted rights IDs\n   */\n  private getDeletedRightsIds(): string[] {\n    const currentRights = this.roleRightsArray.value;\n    const originalRights = this.originalRights();\n\n    return originalRights\n      .filter(original => !currentRights.some((current: any) => current._id === original._id))\n      .map(right => right._id!)\n      .filter(id => id);\n  }\n\n  /**\n   * Save user role\n   */\n  private saveUserRole(payload: MUserRoleWithRightsPayload): void {\n    this.loading.set(true);\n\n    const saveOperation = this.userRoleService.saveUpdateUserRole(payload);\n\n    saveOperation\n      .pipe(takeUntil(this.destroy$))\n      .subscribe({\n        next: (response) => {\n          if (response?.success) {\n            const action = this.isEditMode() ? 'updated' : 'created';\n            this.notificationService.success(`User role has been ${action} successfully.`);\n            this.cdr.detectChanges();\n\n            console.log('✅ Save success, navigating to user role list...');\n            this.router.navigate(['/control-panel/user-role'])\n              .then(success => {\n                console.log('🧭 Navigation result:', success);\n                if (!success) {\n                  console.error('❌ Navigation failed!');\n                }\n              })\n              .catch(err => console.error('❌ Navigation error:', err));\n\n          } else {\n            this.notificationService.error(response?.message || 'Failed to save user role.');\n            this.cdr.detectChanges();\n          }\n          this.loading.set(false);\n        },\n        error: (error) => {\n          console.error('❌ Error saving user role:', error);\n          this.notificationService.error('Failed to save user role. Please try again.');\n          this.cdr.detectChanges();\n          this.loading.set(false);\n        }\n      });\n  }\n\n  /**\n   * Handle cancel\n   */\n  onCancel(): void {\n    if (this.userRoleForm.dirty && !this.isViewMode()) {\n      this.confirmationService.ask({\n        title: 'Discard Changes',\n        message: 'You have unsaved changes. Are you sure you want to discard them?',\n        confirmText: 'Discard',\n        cancelText: 'Keep Editing',\n        type: 'warning'\n      }).then((confirmed: boolean | string) => {\n        if (confirmed) {\n          this.router.navigate(['/control-panel/user-role']);\n        }\n      });\n    } else {\n      this.router.navigate(['/control-panel/user-role']);\n    }\n  }\n\n  /**\n   * Handle permission checkbox change\n   */\n  onPermissionCheckboxChange(menuId: string, permissionId: string, isChecked: any): void {\n    if (this.isViewMode()) {\n      return; // Don't allow changes in view mode\n    }\n\n    // Prevent changes if forms are not initialized\n    if (!this.userRoleForm || !this.roleRightsForm) {\n      console.warn('⚠️ Forms not initialized, skipping permission change');\n      return;\n    }\n\n    // Handle different value types from cide-ele-input\n    const checked = isChecked === true || isChecked === 'true' || isChecked === 1;\n\n    if (checked) {\n      // Add a new role right record for this permission\n      this.addRoleRightForPermission(menuId, permissionId);\n\n      // Auto-check parent's view right if this is a child menu\n      this.autoCheckParentViewRight(menuId);\n    } else {\n      // Remove the role right record for this permission\n      this.removeRoleRightForPermission(menuId, permissionId);\n    }\n\n    // Update both forms to trigger validation\n    this.userRoleForm.updateValueAndValidity();\n    this.roleRightsForm.updateValueAndValidity();\n\n    // Trigger change detection to ensure UI updates\n    this.cdr.detectChanges();\n  }\n\n  /**\n   * Add a role right record for a specific permission\n   */\n  private addRoleRightForPermission(menuId: string, permissionId: string): void {\n    // Check if this permission already has a role right record\n    const existingIndex = this.roleRightsArray.controls.findIndex(control => {\n      const menuIdValue = control.get('menuId')?.value || control.get('syusrgt_menu_id_syme')?.value;\n      const permissionValue = control.get('syusrgt_role_permissions_id_sygms')?.value;\n      return menuIdValue === menuId && permissionValue === permissionId;\n    });\n\n    if (existingIndex === -1) {\n      // Create new role right record for this permission\n      const newRoleRight = this.createRoleRightFormGroup({\n        syusrgt_menu_id_syme: menuId,\n        syusrgt_role_permissions_id_sygms: permissionId,\n        syusrgt_isactive: true\n      });\n\n      this.roleRightsArray.push(newRoleRight);\n    }\n  }\n\n  /**\n   * Remove a role right record for a specific permission\n   */\n  private removeRoleRightForPermission(menuId: string, permissionId: string): void {\n    const indexToRemove = this.roleRightsArray.controls.findIndex(control => {\n      const menuIdValue = control.get('menuId')?.value || control.get('syusrgt_menu_id_syme')?.value;\n      const permissionValue = control.get('syusrgt_role_permissions_id_sygms')?.value;\n      return menuIdValue === menuId && permissionValue === permissionId;\n    });\n\n    if (indexToRemove >= 0) {\n      this.roleRightsArray.removeAt(indexToRemove);\n    }\n  }\n\n  /**\n   * Check if a permission is selected for a menu\n   */\n  isPermissionSelected(menuId: string, permissionId: string): boolean {\n    // Early return if forms are not initialized\n    if (!this.roleRightsForm || !this.roleRightsArray) {\n      return false;\n    }\n\n    // Check if there's a role right record for this specific menu and permission\n    const roleRight = this.roleRightsArray.controls.find(control => {\n      const menuIdValue = control.get('menuId')?.value || control.get('syusrgt_menu_id_syme')?.value;\n      const permissionValue = control.get('syusrgt_role_permissions_id_sygms')?.value;\n      return menuIdValue === menuId && permissionValue === permissionId;\n    });\n\n    return !!roleRight;\n  }\n\n  /**\n   * Get permission by ID\n   */\n  getPermissionById(permissionId: string): Permission | undefined {\n    return this.permissions().find(p => p._id === permissionId);\n  }\n\n  /**\n   * Check if a parent menu has view right automatically set\n   */\n  hasParentViewRight(menuId: string): boolean {\n    const viewPermissionId = this.viewPermissionId();\n    if (!viewPermissionId) {\n      console.log('🔍 hasParentViewRight: No view permission ID found for menu:', menuId);\n      return false;\n    }\n\n    const hasViewRight = this.isPermissionSelected(menuId, viewPermissionId);\n    console.log('🔍 hasParentViewRight: Menu:', menuId, 'View Permission ID:', viewPermissionId, 'Has View Right:', hasViewRight);\n    return hasViewRight;\n  }\n\n  /**\n   * Test method to manually trigger parent view right (for debugging)\n   */\n  testParentViewRight(menuId: string): void {\n    console.log('🧪 Testing parent view right for menu:', menuId);\n    this.autoCheckParentViewRight(menuId);\n  }\n\n  /**\n   * Get selected permissions for a menu (for debugging)\n   */\n  getSelectedPermissionsForMenu(menuId: string): string {\n    const roleRight = this.roleRightsArray.controls.find(control => {\n      const menuIdValue = control.get('menuId')?.value;\n      const syusrgtMenuId = control.get('syusrgt_menu_id_syme')?.value;\n      return menuIdValue === menuId || syusrgtMenuId === menuId;\n    });\n\n    if (roleRight) {\n      const permissions = roleRight.get('permissions')?.value || [];\n      return permissions.join(', ') || 'None';\n    }\n\n    return 'None';\n  }\n\n  /**\n   * Initialize role rights for all menu items\n   * Note: We don't create role rights upfront - they are created only when permissions are selected\n   */\n  private initializeRoleRightsForAllMenus(menuItems: ICoreSyme[]): void {\n    console.log('🔄 Menu items loaded for role rights grid:', menuItems?.length);\n    console.log('🔄 Role rights will be created dynamically when permissions are selected');\n\n    // Set the menu data to the menus signal\n    if (menuItems && menuItems.length > 0) {\n      this.menus.set(menuItems);\n      console.log('✅ Menu data set to menus signal:', menuItems.length, 'menus');\n    } else {\n      console.warn('⚠️ No menu data received in menuItems');\n      this.menus.set([]);\n    }\n\n    // Don't create role rights upfront - they will be created when checkboxes are checked\n    // This ensures we only have role rights for actually selected permissions\n  }\n\n\n  /**\n   * Check if the form has any role rights with permissions\n   */\n  hasAnyRoleRightsWithPermissions(): boolean {\n    // Check if there are any role right records (each record represents a permission)\n    return this.roleRightsArray.controls.length > 0;\n  }\n\n  /**\n   * Check if the form is ready to save\n   */\n  get isFormReadyToSave(): boolean {\n    return this.userRoleForm.valid && this.hasAnyRoleRightsWithPermissions();\n  }\n\n  /**\n   * Check if a parent menu has any child menus with assigned permissions\n   */\n  hasChildMenusWithPermissions(parentMenuId: string): boolean {\n    const roleRights = this.roleRightsArray.controls;\n\n    // Check if any role right has a menu that is a child of the parent AND has permissions\n    return roleRights.some(control => {\n      const menuId = control.get('menuId')?.value || control.get('syusrgt_menu_id_syme')?.value;\n      const permissionId = control.get('syusrgt_role_permissions_id_sygms')?.value;\n\n      // Check if this is a child menu of the parent AND has a permission assigned\n      return menuId && permissionId && this.isChildMenuOfParent(menuId, parentMenuId);\n    });\n  }\n\n  /**\n   * Show notification with proper change detection\n   */\n  private showNotification(message: string, type: 'success' | 'error' | 'info' | 'warning' = 'info'): void {\n    switch (type) {\n      case 'success':\n        this.notificationService.success(message);\n        break;\n      case 'error':\n        this.notificationService.error(message);\n        break;\n      case 'warning':\n        this.notificationService.warning(message);\n        break;\n      default:\n        this.notificationService.info(message);\n    }\n\n    // Force change detection after notification\n    setTimeout(() => this.cdr.detectChanges(), 0);\n  }\n\n  /**\n   * Check if a menu is a child of a parent menu (including grandparent, great-grandparent, etc.)\n   */\n  private isChildMenuOfParent(menuId: string, parentMenuId: string): boolean {\n    // Get all parent menus for the given menu\n    const allParentMenus = this.findAllParentMenus(menuId);\n\n    // Check if any of the parent menus matches the target parent\n    return allParentMenus.some(parent => parent._id === parentMenuId);\n  }\n\n  /**\n   * Find parent menu for a given child menu\n   */\n  private findParentMenu(childMenuId: string): ICoreSyme | null {\n    const childMenu = this.menus().find(menu => menu._id === childMenuId);\n    if (!childMenu || !childMenu.syme_id_syme) {\n      return null;\n    }\n\n    const parentMenu = this.menus().find(menu => menu._id === childMenu.syme_id_syme);\n    return parentMenu || null;\n  }\n\n  /**\n   * Find all parent menus in the hierarchy chain for a given child menu\n   */\n  private findAllParentMenus(childMenuId: string): ICoreSyme[] {\n    const parentMenus: ICoreSyme[] = [];\n    let currentMenuId = childMenuId;\n\n    while (currentMenuId) {\n      const parentMenu = this.findParentMenu(currentMenuId);\n      if (parentMenu) {\n        parentMenus.push(parentMenu);\n        currentMenuId = parentMenu._id || '';\n      } else {\n        break;\n      }\n    }\n\n    return parentMenus;\n  }\n\n  /**\n   * Auto-check parent's view right when any child menu right is checked\n   * This method now recursively checks all parent levels in the hierarchy\n   */\n  private autoCheckParentViewRight(childMenuId: string): void {\n    console.log('🔍 autoCheckParentViewRight called for child menu:', childMenuId);\n\n    const viewPermissionId = this.viewPermissionId();\n    if (!viewPermissionId) {\n      console.warn('⚠️ View permission ID not found, cannot auto-check parent view right');\n      return;\n    }\n\n    // Find all parent menus in the hierarchy chain\n    const allParentMenus = this.findAllParentMenus(childMenuId);\n\n    if (allParentMenus.length === 0) {\n      console.log('ℹ️ No parent menus found for child menu:', childMenuId);\n      return;\n    }\n\n    console.log('🔍 Found', allParentMenus.length, 'parent menus in hierarchy chain');\n\n    const updatedParents: string[] = [];\n\n    // Check each parent menu in the hierarchy chain\n    allParentMenus.forEach((parentMenu, index) => {\n      const parentId = parentMenu._id || '';\n      const level = index + 1;\n\n      console.log(`🔍 Checking parent level ${level}:`, parentMenu.syme_title, 'ID:', parentId);\n\n      // Check if parent already has view right\n      const parentHasViewRight = this.isPermissionSelected(parentId, viewPermissionId);\n      if (parentHasViewRight) {\n        console.log(`ℹ️ Parent level ${level} already has view right:`, parentMenu.syme_title);\n        return;\n      }\n\n      // Add view right to parent menu\n      console.log(`🔍 Auto-checking view right for parent level ${level}:`, parentMenu.syme_title);\n      this.addRoleRightForPermission(parentId, viewPermissionId);\n      updatedParents.push(parentMenu.syme_title || 'Unknown Menu');\n    });\n\n    // Show notification for all updated parents\n    if (updatedParents.length > 0) {\n      const parentList = updatedParents.join(', ');\n      this.showNotification(\n        `View right automatically enabled for parent menus: ${parentList}`,\n        'info'\n      );\n    }\n\n    // Force change detection to update UI\n    setTimeout(() => {\n      this.cdr.detectChanges();\n      console.log('🔍 Change detection triggered after auto-checking parent view rights');\n    }, 100);\n  }\n\n  // ============================================\n  // Copy Role Feature Methods\n  // ============================================\n\n  /**\n   * Open copy role drawer using floating container service\n   */\n  openCopyRoleDialog(): void {\n    console.log('📋 Opening copy role drawer');\n\n    // Register the copy role drawer component if not already registered\n    if (!this.floatingContainerService.isComponentRegistered('copy-role-drawer')) {\n      this.floatingContainerService.registerComponent('copy-role-drawer', CopyRoleDrawerComponent);\n    }\n\n    // Show the floating container with the drawer component\n    const containerId = this.floatingContainerService.show({\n      id: 'copy-role-drawer',\n      title: 'Copy Role from Entity',\n      componentId: 'copy-role-drawer',\n      width: '500px',\n      height: 'auto',\n      maxHeight: '80vh',\n      resizable: false,\n      draggable: true,\n      closable: true,\n      componentConfig: {\n        inputs: {},\n        outputs: {\n          roleSelect: (event: any) => {\n            // Extract role data from event (handles both direct value and event object)\n            const roleData: UserRoleWithRights = typeof event === 'object' && event !== null\n              ? (event.value || event)\n              : event;\n            this.onRoleSelected(roleData);\n          },\n          cancel: (event?: any) => {\n            this.floatingContainerService.hide('copy-role-drawer');\n          }\n        } as { [key: string]: (event: any) => void }\n      }\n    });\n\n    console.log('✅ Copy role drawer shown with ID:', containerId);\n  }\n\n  /**\n   * Handle role selection from drawer\n   */\n  private onRoleSelected(roleData: UserRoleWithRights): void {\n    console.log('📋 Role selected for copy:', roleData);\n\n    // Check if form has unsaved changes\n    if (this.userRoleForm.dirty) {\n      this.confirmationService.ask({\n        title: 'Overwrite Current Data',\n        message: 'This will overwrite any unsaved changes in the current form. Are you sure you want to continue?',\n        confirmText: 'Continue',\n        cancelText: 'Cancel',\n        type: 'warning'\n      }).then((confirmed: boolean | string) => {\n        if (confirmed) {\n          this.performRoleCopy(roleData);\n        }\n      });\n    } else {\n      this.performRoleCopy(roleData);\n    }\n  }\n\n  /**\n   * Perform the actual role copy operation\n   */\n  private performRoleCopy(previewData: UserRoleWithRights): void {\n    console.log('📋 Applying role copy:', previewData);\n\n    const roleData = previewData.core_user_role;\n    const currentEntityId = this.appState.activeEntity()?._id;\n\n    // Populate main form with copied data (append \" - Copy\" to name)\n    this.userRoleForm.patchValue({\n      syusrol_role_name: `${roleData.syusrol_role_name} - Copy`,\n      syusrol_role_description: roleData.syusrol_role_description,\n      syusrol_role_entity_id_syen: currentEntityId, // Keep current entity\n      syusrol_isactive: roleData.syusrol_isactive\n    });\n\n    // Clear existing rights\n    const rightsArray = this.roleRightsForm.get('roleRights') as FormArray;\n    rightsArray.clear();\n\n    // Copy role rights\n    if (previewData.core_user_role_rights && previewData.core_user_role_rights.length > 0) {\n      const copiedRights = previewData.core_user_role_rights.map(right => ({\n        syusrgt_menu_id_syme: typeof right.syusrgt_menu_id_syme === 'object'\n          ? (right.syusrgt_menu_id_syme as any)?._id\n          : right.syusrgt_menu_id_syme,\n        syusrgt_role_permissions_id_sygms: typeof right.syusrgt_role_permissions_id_sygms === 'object'\n          ? (right.syusrgt_role_permissions_id_sygms as any)?._id\n          : right.syusrgt_role_permissions_id_sygms,\n        syusrgt_isactive: right.syusrgt_isactive\n      }));\n\n      // Add each copied right to the form\n      copiedRights.forEach(right => {\n        rightsArray.push(this.createRoleRightFormGroup(right as UserRoleRight));\n      });\n\n      console.log('✅ Copied', copiedRights.length, 'role rights');\n    }\n\n    // Mark form as dirty to enable save\n    this.userRoleForm.markAsDirty();\n    this.roleRightsForm.markAsDirty();\n\n    // Show success notification\n    this.notificationService.success(\n      `Role \"${roleData.syusrol_role_name}\" copied successfully. You can now modify and save.`\n    );\n\n    // Trigger change detection\n    this.cdr.detectChanges();\n  }\n\n}\n","<!-- User Role Form Container -->\n<div class=\"tw-w-full tw-h-full\">\n  <form class=\"tw-max-w-7xl  tw-mx-auto tw-bg-transparent tw-h-full tw-flex tw-flex-col\" [formGroup]=\"userRoleForm\" [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n    <!-- Error Message -->\n    @if (error()) {\n      <div class=\"tw-mb-6 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    <!-- User Role Basic Information Section -->\n    <div class=\"tw-py-2 tw-border-b-0 tw-mb-0  tw-p-3\">\n\n      <!-- Copy Role Button (only in create mode) -->\n      @if (!isEditMode() && !isViewMode()) {\n        <div class=\"tw-mb-4\">\n          <button \n            cideEleButton \n            type=\"button\"\n            variant=\"secondary\" \n            leftIcon=\"content_copy\"\n            (click)=\"openCopyRoleDialog()\">\n            Copy from Existing Role\n          </button>\n        </div>\n      }\n\n      <!-- Basic Fields -->\n      <div class=\"tw-grid tw-grid-cols-1 xl:tw-grid-cols-2 lg:tw-grid-cols-2 md:tw-grid-cols-1 tw-gap-6 tw-mb-0\">\n        <!-- Left Column: Role Name -->\n        <div>\n          <cide-ele-input \n            id=\"syusrol_role_name\" \n            label=\"Role Name\" \n            formControlName=\"syusrol_role_name\"\n            placeholder=\"Enter role name\" \n            [maxlength]=\"50\" \n            size=\"md\"\n            [disabled]=\"isViewMode()\">\n          </cide-ele-input>\n        </div>\n\n        <!-- Right Column: Description -->\n        <div>\n          <cide-ele-textarea \n            id=\"syusrol_role_description\" \n            label=\"Description\" \n            formControlName=\"syusrol_role_description\"\n            placeholder=\"Enter role description\" \n            rows=\"3\"\n            [maxlength]=\"200\"\n            [disabled]=\"isViewMode()\">\n          </cide-ele-textarea>\n        </div>\n      </div>\n\n      <!-- Active Status Row -->\n      <div class=\"tw-mb-0\">\n        <cide-ele-input \n          id=\"syusrol_isactive\" \n          label=\"Active Status\" \n          formControlName=\"syusrol_isactive\"\n          type=\"checkbox\" \n          size=\"md\"\n          [disabled]=\"isViewMode()\">\n        </cide-ele-input>\n      </div>\n    </div>\n\n    <!-- Role Rights Section -->\n    <div class=\"tw-pt-2 tw-border-b-0 tw-mb-0 tw-flex-1 tw-flex tw-flex-col tw-min-h-0\">\n\n      <!-- Role Rights Grid -->\n      <div class=\"tw-flex-1 tw-min-h-0 tw-w-full\" style=\"height: 400px; max-height: 900px;\">\n        <cide-ele-data-grid \n          [config]=\"roleRightsGridConfig()\" \n          [templateRenderers]=\"templateRenderers()\"\n          (gridEvent)=\"onRoleRightsGridEvent($event)\"\n          class=\"tw-h-full tw-w-full\">\n        </cide-ele-data-grid>\n      </div>\n\n      <!-- Role Rights Form (Hidden but functional) -->\n      <div [formGroup]=\"roleRightsForm\" class=\"tw-hidden\">\n        <div formArrayName=\"roleRights\">\n        @for (right of roleRightsArray.controls; track $index; let i = $index) {\n          <div [formGroupName]=\"i\">\n            <cide-ele-select formControlName=\"syusrgt_menu_id_syme\">\n              <option value=\"\">Select Menu</option>\n              @for (menu of menus(); track menu._id) {\n                <option [value]=\"menu._id\">{{ menu.syme_title }}</option>\n              }\n            </cide-ele-select>\n            <cide-ele-select formControlName=\"syusrgt_role_permissions_id_sygms\">\n              <option value=\"\">Select Permission</option>\n              @for (permission of permissions(); track permission._id) {\n                <option [value]=\"permission._id\">{{ permission.sygms_name }}</option>\n              }\n            </cide-ele-select>\n            <cide-ele-input formControlName=\"syusrgt_isactive\" type=\"checkbox\"></cide-ele-input>\n          </div>\n        }\n        </div>\n      </div>\n    </div>\n\n    <!-- Form Actions -->\n    <div class=\"tw-flex tw-justify-between tw-items-center tw-p-3 tw-gap-4 tw-py-2 tw-bg-white tw-border-t tw-border-gray-200 tw-sticky tw-bottom-0 tw-z-10\">\n      <!-- Error Message (Left Side) -->\n      <cide-form-field-error [formGroup]=\"userRoleForm\"></cide-form-field-error>\n      \n      <!-- Action Buttons (Right Side) -->\n      <div class=\"tw-flex tw-gap-4\">\n        <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"onCancel()\" leftIcon=\"arrow_back\"\n          [disabled]=\"loading()\">\n          {{ isViewMode() ? 'Close' : 'Cancel' }}\n        </button>\n\n        @if (!isViewMode()) {\n          <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || !isFormReadyToSave\"\n            [loading]=\"loading()\" leftIcon=\"save\">\n            {{ submitButtonText }}\n          </button>\n        }\n      </div>\n    </div>\n  </form>\n</div>\n\n<!-- Template Renderers for Role Rights Grid -->\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-flex tw-items-center tw-gap-2\">\n        <div class=\"tw-text-xs tw-font-medium tw-text-gray-900 tw-truncate\" \n             [title]=\"row.syme_title\">\n          {{ row.syme_title || row.menu?.syme_title || row.menu?.syme_menu_name || 'Untitled' }}\n        </div>\n        <!-- Green pill indicator for parent menus with child permissions -->\n        @if (row.syme_type === 'module' || row.syme_type === 'section') {\n          @if (hasChildMenusWithPermissions(row._id)) {\n            <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800 tw-whitespace-nowrap\">\n              Assigned\n            </span>\n          }\n        }\n      </div>\n      @if (row.permission?.sygms_name) {\n        <div class=\"tw-text-xs tw-text-blue-500 tw-truncate\" \n             [title]=\"row.permission?.sygms_name\">\n          {{ row.permission?.sygms_name }}\n        </div>\n      }\n    </div>\n  </div>\n</ng-template>\n\n\n<!-- Permissions Checkbox Renderer Template -->\n<ng-template #permissionsCheckboxRendererTemplate let-row=\"row\" let-value=\"value\">\n  <div class=\"tw-flex tw-flex-wrap tw-gap-2 tw-max-w-full\">\n    @if (row.syme_type === 'menu' && row?.syme_permissions_id_sygms && row?.syme_permissions_id_sygms.length > 0) {\n      @for (permissionId of row?.syme_permissions_id_sygms || []; track permissionId) {\n         <div class=\"tw-flex tw-items-center tw-space-x-1\">\n           <cide-ele-input \n             type=\"checkbox\"\n             [label]=\"getPermissionById(permissionId)?.sygms_name || 'Unknown'\"\n             [ngModel]=\"isPermissionSelected(row._id, permissionId)\"\n             (ngModelChange)=\"onPermissionCheckboxChange(row._id, permissionId, $event)\"\n             size=\"xs\"\n             [disabled]=\"isViewMode()\">\n           </cide-ele-input>\n         </div>\n      }\n    } @else {\n      <!-- Show green checkmark for parent menus with child permissions -->\n      @if (row.syme_type === 'module' || row.syme_type === 'section' || row.syme_type === 'title') {\n        @if (hasChildMenusWithPermissions(row._id)) {\n          <div class=\"tw-flex tw-items-center tw-justify-center tw-w-6 tw-h-6 tw-bg-green-100 tw-rounded-full\" \n               [title]=\"hasParentViewRight(row._id) ? 'View right automatically enabled' : 'Child permissions assigned'\">\n            <cide-ele-icon \n              class=\"tw-text-green-600\" \n              size=\"xs\">\n              check\n            </cide-ele-icon>\n          </div>\n        } @else if (hasParentViewRight(row._id)) {\n          <!-- Show green checkmark for parent with view right -->\n          <cide-ele-icon \n            class=\"tw-text-green-600\" \n            size=\"xs\"\n            title=\"View right automatically enabled\">\n            check\n          </cide-ele-icon>\n        } @else {\n          <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\n        }\n      } @else {\n        <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\n      }\n    }\n  </div>\n</ng-template>","// Custom interfaces for better type safety\r\nexport interface UserRole {\r\n  _id?: string;\r\n  syusrol_role_name?: string;\r\n  syusrol_role_description?: string;\r\n  syusrol_role_entity_id_syen?: string | Entity;\r\n  syusrol_isactive?: boolean;\r\n  syusrol_islocked?: boolean;\r\n  syusrol_created_by?: string;\r\n  syusrol_created_at?: string | Date;\r\n  syusrol_updated_by?: string;\r\n  syusrol_updated_at?: string | Date;\r\n  __v?: number;\r\n}\r\n\r\nexport interface UserRoleRight {\r\n  _id?: string;\r\n  syusrgt_role_id_syusrol?: string | UserRole;\r\n  syusrgt_menu_id_syme?: string | Menu;\r\n  syusrgt_role_permissions_id_sygms?: string | Permission;\r\n  syusrgt_isactive?: boolean;\r\n  syusrgt_created_by?: string;\r\n  syusrgt_created_at?: string | Date;\r\n  syusrgt_updated_by?: string;\r\n  syusrgt_updated_at?: string | Date;\r\n  __v?: number;\r\n}\r\n\r\nexport interface Entity {\r\n  _id?: string;\r\n  syen_name?: string;\r\n  syen_code?: string;\r\n  syen_description?: string;\r\n  syen_isactive?: boolean;\r\n}\r\n\r\nexport interface Menu {\r\n  _id?: string;\r\n  syme_title?: string; // API response property\r\n  syme_menu_name?: string; // Fallback data property\r\n  syme_menu_code?: string;\r\n  syme_menu_description?: string;\r\n  syme_desc?: string; // API response property\r\n  syme_menu_url?: string;\r\n  syme_path?: string; // API response property\r\n  syme_icon?: string; // Menu icon\r\n  syme_parent_id?: string; // Parent menu ID for tree structure\r\n  syme_isactive?: boolean;\r\n}\r\n\r\nexport interface Permission {\r\n  _id?: string;\r\n  sygms_name?: string;\r\n  sygms_code?: string;\r\n  sygms_description?: string;\r\n  sygms_isactive?: boolean;\r\n}\r\n\r\nexport interface ApiResponse<T> {\r\n  success: boolean;\r\n  code: number;\r\n  data: T;\r\n  total?: number;\r\n  pageIndex?: number;\r\n  pageSize?: number;\r\n  message?: string;\r\n}\r\n\r\nexport interface UserRoleWithRights {\r\n  core_user_role: UserRole;\r\n  core_user_role_rights: UserRoleRight[];\r\n}\r\n\r\nexport interface UserRoleListResponse {\r\n  success: boolean;\r\n  code: number;\r\n  data: UserRole[];\r\n  total: number;\r\n  message: string;\r\n}\r\n\r\nexport interface UserRoleWithRightsResponse {\r\n  success: boolean;\r\n  code: number;\r\n  data: UserRoleWithRights;\r\n  message: string;\r\n}\r\n\r\n// DeleteUserRolePayload is now imported from cloud-ide-lms-model as MUserRoleDeletePayload\r\n// ToggleUserRolePayload is now imported from cloud-ide-lms-model as MUserRoleToggleStatusPayload\r\n\r\n// UserRoleWithRightsPayload is now imported from cloud-ide-lms-model as MUserRoleWithRightsPayload\r\n","// User Role Management Module Exports\r\nexport * from './services/user-role.service';\r\nexport * from './components/user-role-list/user-role-list.component';\r\nexport * from './components/user-role-form/user-role-form.component';\r\nexport * from './interfaces/user-role.interface';\r\n\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { cidePath, coreRoutesUrl, nationalityListControllerResponse, generateStringFromObject, hostManagerRoutesUrl, CoreNationalityListPayload } from 'cloud-ide-lms-model';\r\nimport { Observable } from 'rxjs';\r\n\r\n/**\r\n * @description Data service for nationality-related operations\r\n * Handles API calls for retrieving nationality data\r\n */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class CideCoreNationalityService {\r\n  private http = inject(HttpClient);\r\n\r\n  /**\r\n   * Get all nationalities from API\r\n   * @param body - CoreNationalityListPayload for filtering\r\n   * @returns Observable of nationality list response\r\n   */\r\n  getAllNationalities(body: Partial<CoreNationalityListPayload>): Observable<nationalityListControllerResponse> {\r\n    console.log(body, \"nationality body\")\r\n    const query = generateStringFromObject(body);\r\n    const url = cidePath.join([\r\n      hostManagerRoutesUrl.cideSuiteHost, \r\n      coreRoutesUrl.module, \r\n      coreRoutesUrl.nationality,\r\n      query\r\n    ]);\r\n    \r\n    console.log('🌍 NATIONALITY SERVICE: Making API call to:', url);\r\n    console.log('🌍 NATIONALITY SERVICE: Payload:', body);\r\n    \r\n    return this.http.get<nationalityListControllerResponse>(url);\r\n  }\r\n\r\n  /**\r\n   * Get nationalities with default parameters\r\n   * @returns Observable of nationality list response\r\n   */\r\n  getNationalities(): Observable<nationalityListControllerResponse> {\r\n    const defaultPayload: Partial<CoreNationalityListPayload> = {};\r\n    return this.getAllNationalities(defaultPayload);\r\n  }\r\n\r\n  /**\r\n   * Search nationalities with specific filters\r\n   * @param filters - Search criteria for nationalities\r\n   * @returns Observable of filtered nationality list\r\n   */\r\n  searchNationalities(filters: Partial<CoreNationalityListPayload>): Observable<nationalityListControllerResponse> {\r\n    return this.getAllNationalities(filters);\r\n  }\r\n\r\n  /**\r\n   * Get nationality by ID\r\n   * @param nationalityId - ID of the nationality to retrieve\r\n   * @returns Observable of nationality data\r\n   */\r\n  getNationalityById(nationalityId: string): Observable<nationalityListControllerResponse> {\r\n    const payload: Partial<CoreNationalityListPayload> = {\r\n      synat_id: nationalityId\r\n    };\r\n    return this.getAllNationalities(payload);\r\n  }\r\n}\r\n\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n  cidePath,\r\n  academicsRoutesUrl,\r\n  hostManagerRoutesUrl,\r\n  generateStringFromObject,\r\n  type classProgramMasterControllerResponse,\r\n  type MClassProgramMaster\r\n} from 'cloud-ide-lms-model';\r\nimport { IClassProgramMasterService } from 'cloud-ide-shared';\r\n\r\n/**\r\n * Service for managing class program master operations\r\n * Provides methods to interact with the class program master API\r\n */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class CideCoreClassProgramMasterService implements IClassProgramMasterService {\r\n  private http = inject(HttpClient);\r\n\r\n  /**\r\n   * Get all class program masters from API\r\n   * @param body - MClassProgramMaster for filtering\r\n   * @returns Observable of class program master list response\r\n   */\r\n  getClassProgramMasterList(body: Partial<MClassProgramMaster>): Observable<classProgramMasterControllerResponse> {\r\n    const query = generateStringFromObject(body);\r\n    const url = cidePath.join([\r\n      hostManagerRoutesUrl.cideSuiteHost,\r\n      academicsRoutesUrl.module,\r\n      academicsRoutesUrl.classProgramMaster,\r\n      query\r\n    ]);\r\n\r\n    return this.http.get<classProgramMasterControllerResponse>(url);\r\n  }\r\n\r\n  /**\r\n   * Get class program masters with default parameters (active only)\r\n   * @returns Observable of class program master list response\r\n   */\r\n  getClassProgramMasters(): Observable<classProgramMasterControllerResponse> {\r\n    return this.getClassProgramMasterList({ \r\n      acacpm_isactive: true,\r\n      pagination: false \r\n    } as Partial<MClassProgramMaster>);\r\n  }\r\n\r\n  /**\r\n   * Search class program masters with specific filters\r\n   * @param filters - Search criteria for class program masters\r\n   * @returns Observable of filtered class program master list\r\n   */\r\n  searchClassProgramMasters(filters: Partial<MClassProgramMaster>): Observable<classProgramMasterControllerResponse> {\r\n    return this.getClassProgramMasterList({\r\n      ...filters,\r\n      pagination: false\r\n    });\r\n  }\r\n}\r\n\r\n\r\n\r\n\r\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\nexport * from './lib/core/user-role-management';\n\n// // Entity Management Module\nexport * from './lib/core/entity-management';\n\n// // General Master Management Module\nexport * from './lib/core/general-master-management';\n\n// Shared Services\nexport * from './lib/core/shared/services/pin-code.service';\nexport * from './lib/core/shared/services/country.service';\nexport * from './lib/core/shared/services/nationality.service';\nexport * from './lib/core/shared/services/class-program-master.service';\nexport * from './lib/core/shared/services/currency.service';\n\n// Workflow Management\n// export * from './lib/core/workflow-management';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1"],"mappings":"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"}