cloud-ide-academics 0.0.28 → 0.0.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/cloud-ide-academics-class-program-term-create.component-B-7JRpVE.mjs +1196 -0
- package/fesm2022/cloud-ide-academics-class-program-term-create.component-B-7JRpVE.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-class-program-term-list.component-CP2vlRBP.mjs → cloud-ide-academics-class-program-term-list.component-DObKkh-y.mjs} +186 -48
- package/fesm2022/cloud-ide-academics-class-program-term-list.component-DObKkh-y.mjs.map +1 -0
- package/fesm2022/cloud-ide-academics-cloud-ide-academics-FwQEJSnJ.mjs +6127 -0
- package/fesm2022/cloud-ide-academics-cloud-ide-academics-FwQEJSnJ.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-program-class-create.component-KijRP6Nl.mjs → cloud-ide-academics-program-class-create.component-x0rh1ESo.mjs} +45 -23
- package/fesm2022/cloud-ide-academics-program-class-create.component-x0rh1ESo.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-program-class-list.component-B5cy2Gpk.mjs → cloud-ide-academics-program-class-list.component-CkzH8u8u.mjs} +10 -9
- package/fesm2022/cloud-ide-academics-program-class-list.component-CkzH8u8u.mjs.map +1 -0
- package/fesm2022/cloud-ide-academics.mjs +1 -1
- package/index.d.ts +500 -18
- package/package.json +1 -1
- package/fesm2022/cloud-ide-academics-class-program-term-create.component-BRbHViJN.mjs +0 -659
- package/fesm2022/cloud-ide-academics-class-program-term-create.component-BRbHViJN.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-class-program-term-list.component-CP2vlRBP.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-class-program-term.service-BW4PJQEM.mjs +0 -111
- package/fesm2022/cloud-ide-academics-class-program-term.service-BW4PJQEM.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-cloud-ide-academics-g9qZGJtG.mjs +0 -3102
- package/fesm2022/cloud-ide-academics-cloud-ide-academics-g9qZGJtG.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-program-class-create.component-KijRP6Nl.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-program-class-list.component-B5cy2Gpk.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-program-term-section-create.component-DHrTb-XI.mjs +0 -248
- package/fesm2022/cloud-ide-academics-program-term-section-create.component-DHrTb-XI.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-program-term-section-list.component-ktIAxvxR.mjs +0 -495
- package/fesm2022/cloud-ide-academics-program-term-section-list.component-ktIAxvxR.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-ide-academics-cloud-ide-academics-FwQEJSnJ.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/cloud-ide-academics.routes.ts","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/services/academic-year.service.ts","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/services/academic-year-mapping.service.ts","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/components/academic-year-create/academic-year-create.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/components/academic-year-create/academic-year-create.component.html","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/components/academic-year-list/academic-year-list.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/components/academic-year-list/academic-year-list.component.html","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/index.ts","../../../projects/cloud-ide-academics/src/lib/collection/class-program-branch-management/services/class-program-branch.service.ts","../../../projects/cloud-ide-academics/src/lib/collection/program-class-management/services/program-class.service.ts","../../../projects/cloud-ide-academics/src/lib/collection/class-program-branch-management/components/class-program-branch-list/class-program-branch-list.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/class-program-branch-management/components/class-program-branch-list/class-program-branch-list.component.html","../../../projects/cloud-ide-academics/src/lib/collection/class-program-branch-management/components/class-program-branch-form/class-program-branch-form.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/class-program-branch-management/components/class-program-branch-form/class-program-branch-form.component.html","../../../projects/cloud-ide-academics/src/lib/collection/class-program-branch-management/index.ts","../../../projects/cloud-ide-academics/src/lib/collection/class-program-term-management/services/class-program-term.service.ts","../../../projects/cloud-ide-academics/src/lib/collection/program-term-section-management/services/program-term-section.service.ts","../../../projects/cloud-ide-academics/src/lib/collection/program-term-section-management/components/program-term-section-create/program-term-section-create.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/program-term-section-management/components/program-term-section-create/program-term-section-create.component.html","../../../projects/cloud-ide-academics/src/lib/collection/program-term-section-management/components/program-term-section-list/program-term-section-list.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/program-term-section-management/components/program-term-section-list/program-term-section-list.component.html","../../../projects/cloud-ide-academics/src/lib/shared/components/program-section-selector/program-section-selector.component.ts","../../../projects/cloud-ide-academics/src/lib/shared/components/program-section-selector/program-section-selector.component.html","../../../projects/cloud-ide-academics/src/public-api.ts","../../../projects/cloud-ide-academics/src/cloud-ide-academics.ts"],"sourcesContent":["import { Route } from '@angular/router';\nimport { authGuard } from 'cloud-ide-auth';\nexport const academicsRoutes: Route[] = [\n // Academic Year Management Routes\n {\n path: 'academic_year',\n loadComponent: () => import('./collection/academic-year-management/components/academic-year-list/academic-year-list.component').then(c => c.AcademicYearListComponent),\n title: 'Academic Year Management',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"academic_year_list\"\n }\n },\n {\n path: 'academic_year/create',\n loadComponent: () => import('./collection/academic-year-management/components/academic-year-create/academic-year-create.component').then(c => c.AcademicYearCreateComponent),\n title: 'Create Academic Year',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"academic_year_list\"\n }\n },\n {\n path: 'academic_year/edit/:query',\n loadComponent: () => import('./collection/academic-year-management/components/academic-year-create/academic-year-create.component').then(c => c.AcademicYearCreateComponent),\n title: 'Edit Academic Year',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"academic_year_list\"\n }\n },\n {\n path: 'academic_year/view/:query',\n loadComponent: () => import('./collection/academic-year-management/components/academic-year-create/academic-year-create.component').then(c => c.AcademicYearCreateComponent),\n title: 'View Academic Year',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"academic_year_list\"\n }\n },\n {\n path: 'program-class-management',\n loadComponent: () => import('./collection/program-class-management/components/program-class-list/program-class-list.component').then(c => c.ProgramClassListComponent),\n title: 'Program Class Management',\n canActivate: [authGuard],\n data: {\n reuseTab: false,\n sypg_page_code: \"program_class\"\n }\n },\n {\n path: 'program-class-management/create',\n loadComponent: () => import('./collection/program-class-management/components/program-class-create/program-class-create.component').then(c => c.ProgramClassCreateComponent),\n title: 'Create Program Class',\n canActivate: [authGuard],\n data: {\n reuseTab: false,\n sypg_page_code: \"program_class\"\n }\n },\n {\n path: 'program-class-management/edit/:query',\n loadComponent: () => import('./collection/program-class-management/components/program-class-create/program-class-create.component').then(c => c.ProgramClassCreateComponent),\n title: 'Edit Program Class',\n canActivate: [authGuard],\n data: {\n reuseTab: false,\n sypg_page_code: \"program_class\"\n }\n },\n {\n path: 'program-class-management/view/:query',\n loadComponent: () => import('./collection/program-class-management/components/program-class-create/program-class-create.component').then(c => c.ProgramClassCreateComponent),\n title: 'View Program Class',\n canActivate: [authGuard],\n data: {\n reuseTab: false,\n sypg_page_code: \"program_class\"\n }\n },\n {\n path: 'program-term-management/create',\n loadComponent: () => import('./collection/class-program-term-management/components/class-program-term-create/class-program-term-create.component').then(c => c.ClassProgramTermCreateComponent),\n title: 'Create Class Program Term',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"class_program_term\"\n }\n },\n {\n path: 'program-term-management/create/:query',\n loadComponent: () => import('./collection/class-program-term-management/components/class-program-term-create/class-program-term-create.component').then(c => c.ClassProgramTermCreateComponent),\n title: 'Create Class Program Term',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"class_program_term\"\n }\n },\n {\n path: 'program-term-management/edit/:query',\n loadComponent: () => import('./collection/class-program-term-management/components/class-program-term-create/class-program-term-create.component').then(c => c.ClassProgramTermCreateComponent),\n title: 'Edit Class Program Term',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"class_program_term\"\n }\n },\n {\n path: 'program-term-management/view/:query',\n loadComponent: () => import('./collection/class-program-term-management/components/class-program-term-create/class-program-term-create.component').then(c => c.ClassProgramTermCreateComponent),\n title: 'View Class Program Term',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"class_program_term\"\n }\n },\n {\n path: 'program-term-management',\n loadComponent: () => import('./collection/class-program-term-management/components/class-program-term-list/class-program-term-list.component').then(c => c.ClassProgramTermListComponent),\n title: 'Class Program Term Management',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"class_program_term\"\n }\n },\n {\n path: 'program-term-management/:query',\n loadComponent: () => import('./collection/class-program-term-management/components/class-program-term-list/class-program-term-list.component').then(c => c.ClassProgramTermListComponent),\n title: 'Class Program Term Management',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"class_program_term\"\n }\n },\n {\n path: 'class-program-term',\n loadComponent: () => import('./collection/program-term-section-management/components/program-term-section-list/program-term-section-list.component').then(c => c.ProgramTermSectionListComponent),\n title: 'Program Term Section Management',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"program_term_section\"\n }\n },\n {\n path: 'class-program-term/create',\n loadComponent: () => import('./collection/program-term-section-management/components/program-term-section-create/program-term-section-create.component').then(c => c.ProgramTermSectionCreateComponent),\n title: 'Create Program Term Section',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"program_term_section\"\n }\n },\n {\n path: 'class-program-term/create/:query',\n loadComponent: () => import('./collection/program-term-section-management/components/program-term-section-create/program-term-section-create.component').then(c => c.ProgramTermSectionCreateComponent),\n title: 'Create Program Term Section',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"program_term_section\"\n }\n },\n {\n path: 'class-program-term/:query',\n loadComponent: () => import('./collection/program-term-section-management/components/program-term-section-list/program-term-section-list.component').then(c => c.ProgramTermSectionListComponent),\n title: 'Program Term Section Management',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"program_term_section\"\n }\n },\n {\n path: 'class-program-term/edit/:query',\n loadComponent: () => import('./collection/program-term-section-management/components/program-term-section-create/program-term-section-create.component').then(c => c.ProgramTermSectionCreateComponent),\n title: 'Edit Program Term Section',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"program_term_section\"\n }\n },\n {\n path: 'class-program-term/view/:query',\n loadComponent: () => import('./collection/program-term-section-management/components/program-term-section-create/program-term-section-create.component').then(c => c.ProgramTermSectionCreateComponent),\n title: 'View Program Term Section',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"program_term_section\"\n }\n },\n // Class Program Branch Management Routes\n {\n path: 'program_specialization/:query',\n loadComponent: () => import('./collection/class-program-branch-management/components/class-program-branch-list/class-program-branch-list.component').then(c => c.CideLytClassProgramBranchListComponent),\n title: 'Class Program Branch Management',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"class_program_branch\"\n }\n },\n {\n path: 'program_specialization',\n loadComponent: () => import('./collection/class-program-branch-management/components/class-program-branch-list/class-program-branch-list.component').then(c => c.CideLytClassProgramBranchListComponent),\n title: 'Class Program Branch Management',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"class_program_branch\"\n }\n },\n {\n path: 'program_specialization/create/:query',\n loadComponent: () => import('./collection/class-program-branch-management/components/class-program-branch-form/class-program-branch-form.component').then(c => c.CideLytClassProgramBranchFormComponent),\n title: 'Create Class Program Branch',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"class_program_branch\"\n }\n },\n {\n path: 'program_specialization/edit/:query',\n loadComponent: () => import('./collection/class-program-branch-management/components/class-program-branch-form/class-program-branch-form.component').then(c => c.CideLytClassProgramBranchFormComponent),\n title: 'Edit Class Program Branch',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"class_program_branch\"\n }\n },\n {\n path: 'program_specialization/view/:query',\n loadComponent: () => import('./collection/class-program-branch-management/components/class-program-branch-form/class-program-branch-form.component').then(c => c.CideLytClassProgramBranchFormComponent),\n title: 'View Class Program Branch',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"class_program_branch\"\n }\n }\n];\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, forkJoin, of, type OperatorFunction } from 'rxjs';\r\nimport { map, catchError, switchMap } from 'rxjs/operators';\r\nimport {\r\n cidePath,\r\n academicsRoutesUrl,\r\n hostManagerRoutesUrl,\r\n generateStringFromObject,\r\n type academicYearControllerResponse,\r\n type MAcademicYear,\r\n type academicYearByIdControllerResponse,\r\n type MAcademicYearGetByIdPayload,\r\n type academicYearInsertUpdateControllerResponse,\r\n type MAcademicYearInsertUpdatePayload,\r\n type academicYearDeleteControllerResponse,\r\n type MAcademicYearDeletePayload,\r\n type academicYearToggleStatusControllerResponse,\r\n type MAcademicYearToggleStatusPayload,\r\n type MAcademicYearMappingInsertUpdatePayload,\r\n type academicYearMappingInsertUpdateControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n// Types\r\ninterface AcademicYearMapping {\r\n _id?: string;\r\n acayrmp_entity_id_syen: string;\r\n acayrmp_islocked?: boolean;\r\n acayrmp_iscurrent?: boolean;\r\n}\r\n\r\ninterface AcademicYearWithMappings {\r\n acayr_academic_year_mappings?: AcademicYearMapping[];\r\n [key: string]: any;\r\n}\r\n\r\ninterface DeleteMappingPayload {\r\n acayrmp_id: string;\r\n}\r\n\r\ninterface ToggleMappingPayload {\r\n acayrmp_id: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideLytAcademicYearService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get list of academic years\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of academic year list response\r\n */\r\n getAcademicYearList(payload: MAcademicYear): Observable<academicYearControllerResponse> {\r\n console.log(\"payload\", payload)\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYear,\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get academic year by ID\r\n * @param payload - Academic year ID payload\r\n * @returns Observable of academic year data\r\n */\r\n getAcademicYearById(payload: MAcademicYearGetByIdPayload): Observable<academicYearByIdControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYear,\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 * Create or update academic year\r\n * @param data - Academic year data to save\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateAcademicYear(data: MAcademicYearInsertUpdatePayload): Observable<academicYearInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYear\r\n ]);\r\n\r\n return this.http.post(url, data);\r\n }\r\n\r\n /**\r\n * Create or update academic year with mappings\r\n * @param data - Academic year data with mappings\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateAcademicYearWithMappings(data: AcademicYearWithMappings): Observable<academicYearInsertUpdateControllerResponse> {\r\n // Extract mappings from the data\r\n const mappings = data.acayr_academic_year_mappings || [];\r\n const academicYearData = { ...data } as MAcademicYearInsertUpdatePayload;\r\n delete (academicYearData as any).acayr_academic_year_mappings;\r\n\r\n // First save/update the academic year\r\n return this.saveUpdateAcademicYear(academicYearData).pipe(\r\n switchMap((academicYearResponse) => {\r\n if (!academicYearResponse.success || !academicYearResponse.data) {\r\n return of(academicYearResponse);\r\n }\r\n\r\n const academicYearId = academicYearResponse.data._id;\r\n \r\n // If no mappings, return the academic year response\r\n if (mappings.length === 0) {\r\n return of(academicYearResponse);\r\n }\r\n\r\n // Process mappings\r\n const mappingObservables = mappings.map((mapping: AcademicYearMapping) => {\r\n const mappingPayload: MAcademicYearMappingInsertUpdatePayload = {\r\n _id: mapping._id && !mapping._id.startsWith('temp_') ? mapping._id : undefined,\r\n acayrmp_academic_year_id_acayr: academicYearId,\r\n acayrmp_entity_id_syen: mapping.acayrmp_entity_id_syen,\r\n acayrmp_islocked: mapping.acayrmp_islocked || false,\r\n acayrmp_iscurrent: mapping.acayrmp_iscurrent || false\r\n };\r\n\r\n const mappingUrl = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping\r\n ]);\r\n\r\n return this.http.post(mappingUrl, mappingPayload).pipe(\r\n catchError((error) => {\r\n console.error('Error saving mapping:', error);\r\n return of({ success: false, error });\r\n })\r\n );\r\n });\r\n\r\n // Execute all mapping operations\r\n return forkJoin(mappingObservables).pipe(\r\n map((mappingResponses: any) => {\r\n // Check if all mappings were successful\r\n const allMappingsSuccessful = mappingResponses.every((response: any) => response.success);\r\n \r\n if (allMappingsSuccessful) {\r\n return {\r\n ...academicYearResponse,\r\n message: 'Academic year and mappings saved successfully'\r\n };\r\n } else {\r\n return {\r\n ...academicYearResponse,\r\n message: 'Academic year saved but some mappings failed',\r\n mappingErrors: mappingResponses.filter((response: any) => !response.success)\r\n } as any;\r\n }\r\n })\r\n );\r\n }),\r\n catchError((error) => {\r\n console.error('Error in saveUpdateAcademicYearWithMappings:', error);\r\n return of({\r\n success: false,\r\n code: 500 as any,\r\n message: 'Error saving academic year with mappings',\r\n error\r\n } as any);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Delete academic year\r\n * @param payload - Academic year ID payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteAcademicYear(payload: MAcademicYearDeletePayload): Observable<academicYearDeleteControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYear,\r\n 'delete',\r\n query\r\n ]);\r\n\r\n return this.http.delete(url);\r\n }\r\n\r\n /**\r\n * Toggle academic year status\r\n * @param payload - Academic year ID payload\r\n * @returns Observable of the toggle response\r\n */\r\n toggleAcademicYearStatus(payload: MAcademicYearToggleStatusPayload): Observable<academicYearToggleStatusControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYear,\r\n 'toggle-status'\r\n ]);\r\n\r\n console.log('🔄 Making PATCH request to toggle academic year status:', { url, payload });\r\n return this.http.patch(url, payload);\r\n }\r\n\r\n /**\r\n * Delete academic year mapping\r\n * @param payload - Academic year mapping ID payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteAcademicYearMapping(payload: DeleteMappingPayload): Observable<academicYearMappingInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping\r\n ]);\r\n\r\n return this.http.delete(url, { body: payload });\r\n }\r\n\r\n /**\r\n * Toggle academic year mapping status\r\n * @param payload - Academic year mapping ID payload\r\n * @returns Observable of the toggle response\r\n */\r\n toggleAcademicYearMappingStatus(payload: ToggleMappingPayload): Observable<academicYearMappingInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping,\r\n 'toggle-status'\r\n ]);\r\n\r\n console.log('🔄 Making PATCH request to toggle academic year mapping status:', { url, payload });\r\n return this.http.patch(url, payload);\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 academicYearMappingControllerResponse,\r\n MAcademicYearMapping,\r\n academicYearMappingByIdControllerResponse,\r\n MAcademicYearMappingGetByIdPayload,\r\n academicYearMappingInsertUpdateControllerResponse,\r\n MAcademicYearMappingInsertUpdatePayload,\r\n academicYearMappingDeleteControllerResponse,\r\n MAcademicYearMappingDeletePayload,\r\n academicYearMappingToggleStatusControllerResponse,\r\n MAcademicYearMappingToggleStatusPayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideLytAcademicYearMappingService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get list of academic year mappings\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of academic year mapping list response\r\n */\r\n getAcademicYearMappingList(payload: MAcademicYearMapping): Observable<academicYearMappingControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping,\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get academic year mapping by ID\r\n * @param payload - Academic year mapping ID payload\r\n * @returns Observable of academic year mapping data\r\n */\r\n getAcademicYearMappingById(payload: MAcademicYearMappingGetByIdPayload): Observable<academicYearMappingByIdControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping,\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 * Create or update academic year mapping\r\n * @param data - Academic year mapping data to save\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateAcademicYearMapping(data: MAcademicYearMappingInsertUpdatePayload): Observable<academicYearMappingInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping\r\n ]);\r\n\r\n return this.http.post(url, data);\r\n }\r\n\r\n /**\r\n * Delete academic year mapping\r\n * @param payload - Academic year mapping ID payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteAcademicYearMapping(payload: MAcademicYearMappingDeletePayload): Observable<academicYearMappingDeleteControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping,\r\n 'delete',\r\n query\r\n ]);\r\n\r\n return this.http.delete(url);\r\n }\r\n\r\n /**\r\n * Toggle academic year mapping status\r\n * @param payload - Academic year mapping ID payload\r\n * @returns Observable of the toggle response\r\n */\r\n toggleAcademicYearMappingStatus(payload: MAcademicYearMappingToggleStatusPayload): Observable<academicYearMappingToggleStatusControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping,\r\n 'toggle-status'\r\n ]);\r\n\r\n return this.http.post(url, payload);\r\n }\r\n}\r\n","import { \n Component, \n inject, \n signal, \n OnInit, \n DestroyRef, \n OnDestroy,\n type OnDestroy as OnDestroyType \n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { \n FormBuilder, \n FormGroup, \n ReactiveFormsModule, \n Validators, \n FormArray,\n type AbstractControl \n} from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Observable, forkJoin, of, type OperatorFunction } from 'rxjs';\nimport { map, catchError, switchMap } from 'rxjs/operators';\nimport { \n CideTextareaComponent, \n CideEleButtonComponent, \n CideEleTabComponent, \n type TabItem, \n CideIconComponent \n} from 'cloud-ide-element';\nimport { CideLytAcademicYearService } from '../../services/academic-year.service';\nimport { CideLytAcademicYearMappingService } from '../../services/academic-year-mapping.service';\nimport { ENTITY_SERVICE_TOKEN, type IEntityService } from 'cloud-ide-shared';\nimport {\n type MAcademicYearInsertUpdatePayload,\n type MAcademicYearGetByIdPayload,\n type academicYearByIdControllerResponse,\n generateObjectFromString\n} from 'cloud-ide-lms-model';\nimport { CideSelectComponent, CideFormFieldErrorComponent } from 'cloud-ide-element';\nimport { CideInputComponent } from 'cloud-ide-element';\n\n// Types\ninterface AcademicYearMapping {\n _id?: string;\n acayrmp_entity_id_syen: string;\n acayrmp_islocked?: boolean;\n acayrmp_iscurrent?: boolean;\n}\n\ninterface Entity {\n _id?: string;\n syen_name?: string;\n syen_code?: string;\n}\n\n\n@Component({\n selector: 'cide-core-academic-year-create',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideInputComponent,\n CideTextareaComponent,\n CideEleButtonComponent,\n CideEleTabComponent,\n CideIconComponent,\n CideSelectComponent,\n CideFormFieldErrorComponent\n ],\n templateUrl: './academic-year-create.component.html'\n})\nexport class AcademicYearCreateComponent implements OnInit, OnDestroy {\n // Modern Angular 20+ dependency injection\n private readonly destroyRef = inject(DestroyRef);\n private readonly fb = inject(FormBuilder);\n private readonly academicYearService = inject(CideLytAcademicYearService);\n private readonly academicYearMappingService = inject(CideLytAcademicYearMappingService);\n private readonly entityService = inject<IEntityService>(ENTITY_SERVICE_TOKEN);\n private readonly router = inject(Router);\n private readonly route = inject(ActivatedRoute);\n\n // Form and state management with proper typing\n academicYearForm!: FormGroup;\n readonly activeTab = signal<string>('basic');\n readonly loading = signal<boolean>(false);\n\n // Academic year information from route\n readonly academicYearId = signal<string>('');\n readonly isEditMode = signal<boolean>(false);\n readonly originalMappings = signal<AcademicYearMapping[]>([]); // Track original mappings for deletion\n\n // Entity options for dropdown\n readonly entityOptions = signal<Entity[]>([]);\n\n constructor() {\n this.academicYearForm = this.fb.group({\n // Basic Academic Year Information\n acayr_code: ['', [Validators.required]],\n acayr_name: ['', [Validators.required]],\n acayr_description: [''],\n acayr_from_date: ['', [Validators.required]],\n acayr_to_date: ['', [Validators.required]],\n acayr_isactive: [true],\n acayr_iscurrent: [false],\n acayr_islocked: [false],\n \n // Academic Year Mapping Information\n acayr_academic_year_mappings: this.fb.array([])\n });\n }\n\n ngOnInit(): void {\n this.initializeComponent();\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n // Get academic year 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?.acayr_id) {\n this.academicYearId.set(queryData.acayr_id as string);\n this.isEditMode.set(true);\n this.loadAcademicYearData(queryData.acayr_id as string);\n }\n } else {\n // Create mode\n this.isEditMode.set(false);\n }\n\n // Always load dropdown options\n this.loadDropdownOptions();\n });\n }\n\n /**\n * Load dropdown options\n */\n private loadDropdownOptions(): void {\n console.log('🏢 Loading dropdown options');\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\n /**\n * Load academic year data for edit mode\n */\n private loadAcademicYearData(academicYearId: string): void {\n this.loading.set(true);\n\n const payload: MAcademicYearGetByIdPayload = {\n acayr_id: academicYearId\n };\n\n // Load academic year data\n this.academicYearService.getAcademicYearById(payload).subscribe({\n next: (response: academicYearByIdControllerResponse) => {\n if (response?.success && response.data) {\n console.log('📚 Academic year data loaded:', response.data);\n this.populateFormWithAcademicYearData(response.data);\n \n // Load existing mappings for this academic year\n this.loadAcademicYearMappings(academicYearId);\n } else {\n console.error('❌ Failed to load academic year data');\n this.loading.set(false);\n }\n },\n error: (error) => {\n console.error('❌ Error loading academic year data:', error);\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Load academic year mappings for edit mode\n */\n private loadAcademicYearMappings(academicYearId: string): void {\n const mappingPayload: any = {\n acayrmp_academic_year_id_acayr: academicYearId\n };\n\n this.academicYearMappingService.getAcademicYearMappingList(mappingPayload).subscribe({\n next: (response: any) => {\n if (response?.success && response.data) {\n console.log('🔗 Academic year mappings loaded:', response.data);\n this.populateFormWithMappingsData(response.data);\n } else {\n console.warn('⚠️ No mappings found for this academic year');\n }\n this.loading.set(false);\n },\n error: (error: any) => {\n console.error('❌ Error loading academic year mappings:', error);\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Populate form with academic year data\n */\n private populateFormWithAcademicYearData(data: any): void {\n if (data) {\n this.academicYearForm.patchValue({\n acayr_code: data.acayr_code || '',\n acayr_name: data.acayr_name || '',\n acayr_description: data.acayr_description || '',\n acayr_from_date: data.acayr_from_date ? new Date(data.acayr_from_date).toISOString().split('T')[0] : '',\n acayr_to_date: data.acayr_to_date ? new Date(data.acayr_to_date).toISOString().split('T')[0] : '',\n acayr_isactive: data.acayr_isactive ?? true,\n acayr_iscurrent: data.acayr_iscurrent ?? false,\n acayr_islocked: data.acayr_islocked ?? false\n });\n }\n }\n\n /**\n * Populate form with mappings data\n */\n private populateFormWithMappingsData(mappings: any[]): void {\n if (mappings && Array.isArray(mappings)) {\n // Store original mappings for deletion tracking\n this.originalMappings.set([...mappings]);\n \n // Clear existing mappings\n while (this.academicYearMappingsArray.length !== 0) {\n this.academicYearMappingsArray.removeAt(0);\n }\n \n // Add existing mappings\n mappings.forEach((mapping: any) => {\n const mappingGroup = this.fb.group({\n _id: [mapping._id || ''],\n acayrmp_academic_year_id_acayr: [mapping.acayrmp_academic_year_id_acayr || this.academicYearId() || '', [Validators.required]],\n acayrmp_entity_id_syen: [mapping.acayrmp_entity_id_syen || '', [Validators.required]],\n acayrmp_islocked: [mapping.acayrmp_islocked ?? false],\n acayrmp_iscurrent: [mapping.acayrmp_iscurrent ?? false]\n });\n this.academicYearMappingsArray.push(mappingGroup);\n });\n }\n }\n\n /**\n * Tab configuration\n */\n academicYearTabs() {\n return [\n { id: 'basic', label: 'Academic Year Details', icon: 'school' },\n { id: 'mapping', label: 'Mapping Configuration', icon: 'link' }\n ];\n }\n\n onTabChange(tab: TabItem) {\n this.activeTab.set(tab.id);\n }\n\n\n\n\n\n onSubmit() {\n \n if (this.academicYearForm.valid && this.validateMappings()) {\n this.loading.set(true);\n\n const formData = this.academicYearForm.value;\n\n // Prepare payload with mappings\n const payload: MAcademicYearInsertUpdatePayload = {\n ...formData,\n _id: this.isEditMode() ? this.academicYearId() : undefined,\n acayr_academic_year_mappings: this.getAcademicYearMappingsValue()\n };\n\n console.log('📤 Submitting academic year with mappings:', payload);\n\n // First delete removed mappings, then save/update academic year\n this.deleteRemovedMappings().pipe(\n switchMap(() => {\n // After deleting removed mappings, save/update the academic year\n return this.academicYearService.saveUpdateAcademicYearWithMappings(payload);\n })\n ).subscribe({\n next: (response) => {\n if (response?.success) {\n console.log('✅ Academic year and mappings saved successfully:', response.data);\n \n // Check if there were any mapping errors\n if ((response as any).mappingErrors && (response as any).mappingErrors.length > 0) {\n console.warn('⚠️ Some mappings failed:', (response as any).mappingErrors);\n } else {\n this.goBackToAcademicYearList();\n }\n } else {\n console.error('❌ Failed to save academic year');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error saving academic year:', error);\n this.loading.set(false);\n }\n });\n } else {\n console.warn('Form is invalid');\n this.markFormGroupTouched();\n }\n }\n\n /**\n * Mark all form controls as touched to trigger validation display\n */\n private markFormGroupTouched(): void {\n Object.keys(this.academicYearForm.controls).forEach(key => {\n const control = this.academicYearForm.get(key);\n control?.markAsTouched();\n });\n }\n\n resetForm() {\n this.academicYearForm.reset({\n acayr_isactive: true,\n acayr_iscurrent: false,\n acayr_islocked: false\n });\n \n // Clear the mappings array\n while (this.academicYearMappingsArray.length !== 0) {\n this.academicYearMappingsArray.removeAt(0);\n }\n\n // Reset academic year ID\n this.academicYearId.set('');\n this.isEditMode.set(false);\n this.originalMappings.set([]);\n \n // Reset entity options to show all entities again\n this.updateEntityOptionsForMappings();\n }\n\n /**\n * Go back to academic year list\n */\n goBackToAcademicYearList(): void {\n this.router.navigate(['/control-panel/academic-year']);\n }\n\n /**\n * Cancel form and optionally navigate back\n */\n cancelForm(): void {\n if (this.isEditMode()) {\n this.goBackToAcademicYearList();\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 Academic Year' : 'Create New Academic Year';\n }\n\n /**\n * Getter methods for form arrays\n */\n get academicYearMappingsArray(): FormArray {\n return this.academicYearForm.get('acayr_academic_year_mappings') as FormArray;\n }\n\n /**\n * Add new academic year mapping\n */\n addAcademicYearMapping(): void {\n // Check if there are any available entities to map\n const availableEntities = this.getAvailableEntityCount(this.academicYearMappingsArray.length);\n if (availableEntities === 0) {\n console.warn('No available entities to map');\n return;\n }\n\n // Generate a temporary ID for new mappings\n const tempId = 'temp_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);\n \n const academicYearMapping = this.fb.group({\n _id: [tempId],\n acayrmp_academic_year_id_acayr: [this.academicYearId() || '', [Validators.required]],\n acayrmp_entity_id_syen: ['', [Validators.required]],\n acayrmp_islocked: [false],\n acayrmp_iscurrent: [false]\n });\n this.academicYearMappingsArray.push(academicYearMapping);\n }\n\n /**\n * Update academic year ID in all existing mappings when academic year ID changes\n */\n private updateMappingsAcademicYearId(newAcademicYearId: string): void {\n const mappingsArray = this.academicYearMappingsArray;\n mappingsArray.controls.forEach((control: any) => {\n if (control.get('acayrmp_academic_year_id_acayr')) {\n control.get('acayrmp_academic_year_id_acayr').setValue(newAcademicYearId);\n }\n });\n }\n\n /**\n * Get form array value for validation or submission\n */\n getAcademicYearMappingsValue(): any[] {\n return this.academicYearMappingsArray.value;\n }\n\n /**\n * Check if mappings array has any invalid controls\n */\n isMappingsArrayValid(): boolean {\n return this.academicYearMappingsArray.valid;\n }\n\n /**\n * Set academic year ID for all existing mappings\n * This is useful when the academic year ID is generated after creation\n */\n setAcademicYearIdForMappings(academicYearId: string): void {\n this.academicYearId.set(academicYearId);\n this.updateMappingsAcademicYearId(academicYearId);\n }\n\n /**\n * Validate that all mappings have required fields\n */\n validateMappings(): boolean {\n const mappings = this.academicYearMappingsArray.controls;\n \n // Check if there are any mappings\n if (mappings.length === 0) {\n return true; // No mappings is valid\n }\n\n // Validate each mapping\n for (let i = 0; i < mappings.length; i++) {\n const mapping = mappings[i] as any;\n \n // Check required fields\n if (!mapping.get('acayrmp_entity_id_syen')?.value) {\n console.warn(`Mapping ${i + 1} is missing entity selection`);\n return false;\n }\n\n // Check for duplicate entity selections\n const currentEntityId = mapping.get('acayrmp_entity_id_syen')?.value;\n const duplicateIndex = this.findDuplicateEntitySelection(currentEntityId, i);\n if (duplicateIndex !== -1) {\n console.warn(`Mapping ${i + 1} has duplicate entity selection with mapping ${duplicateIndex + 1}`);\n return false;\n }\n }\n \n return true;\n }\n\n /**\n * Find duplicate entity selection in mappings\n */\n private findDuplicateEntitySelection(entityId: string, currentIndex: number): number {\n const mappings = this.academicYearMappingsArray.controls;\n \n for (let i = 0; i < mappings.length; i++) {\n if (i !== currentIndex) {\n const mapping = mappings[i] as any;\n if (mapping.get('acayrmp_entity_id_syen')?.value === entityId) {\n return i;\n }\n }\n }\n \n return -1;\n }\n\n /**\n * Remove academic year mapping\n */\n removeAcademicYearMapping(index: number): void {\n this.academicYearMappingsArray.removeAt(index);\n // Update entity options after removal to re-enable previously selected entities\n this.updateEntityOptionsForMappings();\n }\n\n /**\n * Handle entity selection change for a specific mapping\n */\n onMappingEntityChange(event: any, mappingIndex: number): void {\n const selectedEntityId = event?.value || event;\n if (selectedEntityId) {\n console.log(`🏢 Entity selected for mapping ${mappingIndex}:`, selectedEntityId);\n // Trigger change detection to update other mappings' entity options\n this.updateEntityOptionsForMappings();\n }\n }\n\n /**\n * Get filtered entity options excluding already selected entities in other mappings\n * @param currentMappingIndex The index of the current mapping being edited\n * @returns Entity options excluding already selected entities\n */\n getFilteredEntityOptions(currentMappingIndex: number): any[] {\n const allEntities = this.entityOptions();\n if (!allEntities || allEntities.length === 0) {\n return [];\n }\n\n // Get all currently selected entity IDs from other mappings (excluding current mapping)\n const selectedEntityIds = this.getSelectedEntityIds(currentMappingIndex);\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 only entities that are not already selected in other mappings\n return allEntities.filter((entity: any) => {\n const entityId = entity._id;\n const isAlreadySelected = selectedEntityIds.includes(entityId);\n \n if (isAlreadySelected) {\n console.log(`🚫 Entity \"${entity.syen_name}\" (${entityId}) is already selected in another mapping - excluding from options`);\n }\n \n return !isAlreadySelected;\n });\n }\n\n /**\n * Get all currently selected entity IDs from other mappings\n */\n private getSelectedEntityIds(excludeMappingIndex: number): string[] {\n const mappingsArray = this.academicYearMappingsArray;\n const selectedIds: string[] = [];\n \n mappingsArray.controls.forEach((control: any, index: number) => {\n if (index !== excludeMappingIndex) {\n const entityId = control.get('acayrmp_entity_id_syen')?.value;\n if (entityId) {\n selectedIds.push(entityId);\n }\n }\n });\n \n return selectedIds;\n }\n\n /**\n * Update entity options for all mappings to prevent duplicates\n */\n private updateEntityOptionsForMappings(): void {\n // This method triggers change detection to update the UI\n // The actual filtering is done in getEntityOptionsForMapping method\n console.log('🔄 Updating entity options for all mappings');\n }\n\n /**\n * Check if an entity is disabled for a specific mapping\n */\n isEntityDisabled(entityId: string, mappingIndex: number): boolean {\n const selectedEntityIds = this.getSelectedEntityIds(mappingIndex);\n return selectedEntityIds.includes(entityId);\n }\n\n /**\n * Get the count of available entities for a specific mapping\n */\n getAvailableEntityCount(mappingIndex: number): number {\n const availableEntities = this.getFilteredEntityOptions(mappingIndex);\n return availableEntities.length;\n }\n\n /**\n * Get the count of total entities\n */\n getTotalEntityCount(): number {\n return this.entityOptions().length;\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.academicYearMappingsArray.value;\n\n // Get all selected entity IDs from other mappings (excluding current mapping)\n const selectedEntityIds = currentMappings\n .map((mapping: any, index: number) => {\n if (index !== currentMappingIndex && mapping.acayrmp_entity_id_syen) {\n return mapping.acayrmp_entity_id_syen;\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.academicYearMappingsArray.value;\n\n // Get all selected entity IDs\n const selectedEntityIds = currentMappings\n .map((mapping: any) => {\n if (mapping.acayrmp_entity_id_syen) {\n return mapping.acayrmp_entity_id_syen;\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 * Cleanup when component is destroyed\n * This ensures that when the component is destroyed (e.g., tab closed),\n * all state is properly reset to prevent old data from persisting\n */\n ngOnDestroy(): void {\n console.log('🧹 AcademicYearCreateComponent: Cleaning up component state');\n\n // Reset all signals to their initial state\n this.activeTab.set('basic');\n this.loading.set(false);\n this.academicYearId.set('');\n this.isEditMode.set(false);\n this.originalMappings.set([]);\n this.entityOptions.set([]);\n\n // Reset form to initial state\n this.resetForm();\n\n console.log('🧹 AcademicYearCreateComponent: Component state cleaned up');\n }\n\n /**\n * Delete removed academic year mappings\n */\n private deleteRemovedMappings(): Observable<any[]> {\n const originalMappings = this.originalMappings();\n const currentMappings = this.getAcademicYearMappingsValue();\n \n // Find mappings that were removed (exist in original but not in current)\n const removedMappings = originalMappings.filter(originalMapping => {\n return !currentMappings.some(currentMapping => \n currentMapping._id === originalMapping._id && originalMapping._id\n );\n });\n\n console.log('🗑️ Mappings to delete:', removedMappings);\n\n if (removedMappings.length === 0) {\n return of([]);\n }\n\n // Create delete observables for each removed mapping\n const deleteObservables = removedMappings.map(mapping => {\n return this.academicYearService.deleteAcademicYearMapping({ \n acayrmp_id: mapping._id || '' \n }).pipe(\n catchError(error => {\n console.error('❌ Error deleting mapping:', error);\n return of({ success: false, error, mappingId: mapping._id });\n })\n );\n });\n\n return forkJoin(deleteObservables);\n }\n}\n","<!-- \n ACADEMIC YEAR MASTER FORM\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<div class=\"tw-w-full tw-h-full\">\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"academicYearForm\" [class.tw-opacity-60]=\"loading()\"\n (ngSubmit)=\"onSubmit()\">\n\n <!-- Simple Header Section -->\n <div class=\"tw-table-row tw-w-full tw-h-0\">\n <div class=\"tw-table-cell tw-w-full 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\">school</cide-ele-icon>\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">\n {{ isEditMode() ? 'Edit Academic Year' : 'Create Academic Year' }}\n </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 <!-- Back button or other actions can be added here if needed -->\n </div>\n </div>\n </div>\n </div>\n\n <!-- Tab Navigation -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-2 tw-py-0\">\n <cide-ele-tab [tabs]=\"academicYearTabs()\" [activeTabId]=\"activeTab()\" size=\"md\" variant=\"default\"\n (tabChange)=\"onTabChange($event)\">\n </cide-ele-tab>\n </div>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n @switch (activeTab()) {\n\n @case ('basic') {\n <!-- Basic Academic Year Information -->\n <div class=\"tw-space-y-6\">\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"Academic Year Code *\" formControlName=\"acayr_code\"\n placeholder=\"e.g., AY2024-25\" size=\"md\" leadingIcon=\"code\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Academic Year Name *\" formControlName=\"acayr_name\"\n placeholder=\"e.g., Academic Year 2024-2025\" size=\"md\" leadingIcon=\"school\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-textarea label=\"Description\" formControlName=\"acayr_description\"\n placeholder=\"Enter detailed description of the academic year...\"\n rows=\"3\" size=\"md\">\n </cide-ele-textarea>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"From Date *\" formControlName=\"acayr_from_date\" type=\"date\" size=\"md\"\n leadingIcon=\"calendar_today\" id=\"acayr_from_date\">\n </cide-ele-input>\n\n <cide-ele-input label=\"To Date *\" formControlName=\"acayr_to_date\" type=\"date\" size=\"md\"\n leadingIcon=\"calendar_today\" id=\"acayr_to_date\">\n </cide-ele-input>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-6\">\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acayr_isactive\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this academic year</span>\n </div>\n </div>\n\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acayr_iscurrent\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Current</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Mark as current academic year</span>\n </div>\n </div>\n\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acayr_islocked\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n </div>\n </div>\n }\n\n @case ('mapping') {\n <!-- Academic Year Mapping Configuration -->\n <div class=\"tw-bg-gradient-to-r tw-from-blue-50 tw-to-indigo-50 tw-border tw-border-blue-200 tw-rounded-xl tw-p-6\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-6\">\n <div class=\"tw-flex tw-items-center tw-gap-3\">\n <div class=\"tw-bg-blue-100 tw-p-2 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-6 tw-h-6\">link</cide-ele-icon>\n </div>\n <div>\n <h6 class=\"tw-text-lg tw-font-semibold tw-text-blue-900 tw-m-0\">Academic Year Mapping</h6>\n <p class=\"tw-text-sm tw-text-blue-600 tw-m-0\">Configure entity mappings for this academic year</p>\n </div>\n </div>\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"md\" leftIcon=\"add\"\n (click)=\"addAcademicYearMapping()\"\n class=\"tw-shadow-md hover:tw-shadow-lg tw-transition-shadow\">\n Add New Mapping\n </button>\n </div>\n \n @if (academicYearMappingsArray.length === 0) {\n <div class=\"tw-text-center tw-py-12 tw-text-gray-500\">\n <div class=\"tw-bg-white tw-p-4 tw-rounded-full tw-w-16 tw-h-16 tw-mx-auto tw-mb-4 tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-w-8 tw-h-8 tw-text-gray-400\">link</cide-ele-icon>\n </div>\n <h6 class=\"tw-text-base tw-font-medium tw-text-gray-600 tw-mb-2\">No Mappings Yet</h6>\n <p class=\"tw-text-sm tw-text-gray-500\">Click \"Add New Mapping\" to start configuring entity relationships for this academic year.</p>\n </div>\n } @else {\n <div class=\"tw-space-y-4\" formArrayName=\"acayr_academic_year_mappings\">\n @for (mapping of academicYearMappingsArray.controls; track $index) {\n <div class=\"tw-bg-white tw-rounded-xl tw-border tw-border-gray-200 tw-shadow-sm hover:tw-shadow-md tw-transition-shadow tw-p-6\">\n <div class=\"tw-flex tw-items-start tw-justify-between tw-mb-4\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <div class=\"tw-bg-blue-100 tw-p-2 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">settings</cide-ele-icon>\n </div>\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900\">Mapping #{{ $index + 1 }}</h6>\n </div>\n <button cideEleButton type=\"button\" variant=\"danger\" size=\"sm\" leftIcon=\"delete\"\n (click)=\"removeAcademicYearMapping($index)\"\n class=\"tw-opacity-80 hover:tw-opacity-100 tw-transition-opacity\">\n Remove\n </button>\n </div>\n \n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-4\" [formGroupName]=\"$index\">\n <!-- Hidden Academic Year ID field (internal use only) -->\n <input type=\"hidden\" formControlName=\"acayrmp_academic_year_id_acayr\">\n \n <!-- Entity Selection -->\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Select Entity *</label>\n <cide-ele-select \n [options]=\"entityOptions()\"\n formControlName=\"acayrmp_entity_id_syen\"\n placeholder=\"Choose entity for this mapping\" \n size=\"md\"\n valueKey=\"_id\"\n labelKey=\"syen_name\"\n class=\"tw-min-w-full\"\n (change)=\"onMappingEntityChange($event, $index)\">\n </cide-ele-select>\n </div>\n \n <!-- Status Controls -->\n <div class=\"tw-space-y-2\">\n <div class=\"tw-grid tw-grid-cols-1 tw-gap-3\">\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-p-3 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input \n formControlName=\"acayrmp_islocked\" \n type=\"checkbox\" \n size=\"sm\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n \n <div class=\"tw-flex tw-items-center tw-gap-2 tw-p-3 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input \n formControlName=\"acayrmp_iscurrent\" \n type=\"checkbox\" \n size=\"sm\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Current</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Mark as current mapping</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Mapping Validation Messages -->\n @if (academicYearMappingsArray.length > 0 && !isMappingsArrayValid()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-yellow-50 tw-border tw-border-yellow-200 tw-rounded-lg\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon variant=\"warning\" size=\"sm\">warning</cide-ele-icon>\n <span class=\"tw-text-sm tw-font-medium tw-text-yellow-800\">\n Please ensure all mappings have required fields filled in.\n </span>\n </div>\n </div>\n }\n </div>\n }\n }\n </div>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-justify-between tw-items-center tw-gap-4\">\n <!-- Form Validation Errors -->\n <cide-form-field-error [formGroup]=\"academicYearForm\"></cide-form-field-error>\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end 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=\"button\" variant=\"secondary\" (click)=\"cancelForm()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || academicYearForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ isEditMode() ? 'Update Academic Year' : 'Create Academic Year' }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </form>\n </div>","import { \n Component, \n signal, \n computed, \n viewChild, \n TemplateRef, \n DestroyRef, \n inject, \n OnInit,\n type OnDestroy \n} 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 { forkJoin, of, type Observable } from 'rxjs';\nimport { catchError, switchMap, map } from 'rxjs/operators';\nimport { \n CideEleDataGridComponent, \n CideIconComponent, \n CideEleButtonComponent, \n type GridConfiguration, \n type GridEvent, \n CideEleDropdownComponent, \n type DropdownItem, \n type TemplateContext, \n type DropdownConfig, \n ConfirmationService,\n NotificationService \n } from 'cloud-ide-element';\nimport { \n type AcaAcademicYear, \n generateStringFromObject, \n type MAcademicYear \n} from 'cloud-ide-lms-model';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideLytAcademicYearService } from '../../services/academic-year.service';\n\n// Types\ninterface AcademicYear {\n _id?: string;\n acayr_code?: string;\n acayr_name?: string;\n acayr_description?: string;\n acayr_from_date?: string | Date;\n acayr_to_date?: string | Date;\n acayr_isactive?: boolean;\n acayr_iscurrent?: boolean;\n acayr_islocked?: boolean;\n}\n\ninterface AcademicYearMapping {\n _id: string;\n acayrmp_academic_year_id_acayr: string;\n acayrmp_entity_id_syen: string;\n acayrmp_islocked: boolean;\n acayrmp_iscurrent: boolean;\n}\n\ninterface ApiResponse<T> {\n success: boolean;\n code: number;\n data: T;\n total?: number;\n pageIndex?: number;\n pageSize?: number;\n message: string;\n}\n\n@Component({\n selector: 'cide-core-academic-year-list',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n CideIconComponent,\n CideEleButtonComponent,\n CideEleDataGridComponent,\n CideEleDropdownComponent\n ],\n templateUrl: './academic-year-list.component.html',\n styles: [`\n :host {\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n \n .academic-year-listing-container {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\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 AcademicYearListComponent implements OnInit, OnDestroy {\n // Modern Angular 20+ dependency injection using inject()\n private readonly destroyRef = inject(DestroyRef);\n private readonly academicYearService = inject(CideLytAcademicYearService);\n private readonly router = inject(Router);\n private readonly appState = inject(AppStateHelperService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly notificationService = inject(NotificationService);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n readonly academicYearDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('academicYearDetailsRendererTemplate');\n readonly dateRangeRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('dateRangeRendererTemplate');\n readonly statusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('statusRendererTemplate');\n readonly actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n\n // Modern Angular 20+ state management using signals with proper typing\n readonly academicYears = signal<AcademicYear[]>([]);\n readonly loading = signal<boolean>(false);\n readonly error = signal<string | null>(null);\n\n // Server-side pagination state using signals\n readonly currentPage = signal<number>(1);\n readonly pageSize = signal<number>(10);\n readonly totalItems = signal<number>(0);\n readonly totalPages = signal<number>(0);\n\n // Server-side search state using signals\n readonly searchQuery = signal<string>('');\n\n // Server-side sorting state using signals\n readonly sortColumn = signal<string>('acayr_name');\n readonly sortDirection = signal<'asc' | 'desc'>('asc');\n\n // Server-side filtering state using signals\n readonly selectedStatusFilter = signal<string>('');\n\n // Filter options using computed signal for better performance\n readonly statusFilterOptions = computed(() => [\n { value: '', label: 'All Status' },\n { value: 'active', label: 'Active Years' },\n { value: 'inactive', label: 'Inactive Years' },\n { value: 'current', label: 'Current Year' },\n { value: 'locked', label: 'Locked Years' }\n ]);\n\n\n\n // Modern Angular 20+ grid configuration using computed signal with proper typing\n readonly gridConfig = computed<GridConfiguration<AcademicYear>>(() => ({\n id: 'academic-year-list-grid',\n columns: [\n {\n key: 'acayr_code',\n header: 'Academic Year Code',\n type: 'text',\n width: '140px',\n truncate: true,\n align: 'left',\n sortable: true\n },\n {\n key: 'details',\n header: 'Academic Year Details',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'academicYearDetailsRenderer',\n sortable: true\n },\n {\n key: 'date_range',\n header: 'Date Range',\n type: 'custom',\n width: '200px',\n truncate: false,\n align: 'left',\n renderer: 'dateRangeRenderer',\n sortable: true\n },\n {\n key: 'acayr_isactive',\n header: 'Status',\n type: 'custom',\n width: '140px',\n truncate: false,\n align: 'center',\n renderer: 'statusRenderer'\n },\n {\n key: 'actions',\n header: 'Actions',\n type: 'custom',\n width: '80px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: this.academicYears(),\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: this.pageSize(),\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search by code, name, or description...',\n searchableColumns: ['acayr_code', 'acayr_name', 'acayr_description'],\n debounceMs: 300,\n showClearButton: true\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: this.loading()\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n export: {\n enabled: true,\n formats: ['csv', 'excel', 'pdf'],\n filename: 'academic-years',\n includeHeaders: true\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 ngOnInit(): void {\n console.log('🎓 Academic Year List Component initialized');\n this.loadAcademicYears();\n }\n\n ngOnDestroy(): void {\n // Cleanup if needed\n }\n\n /**\n * Load academic years from API\n */\n loadAcademicYears(): void {\n this.loading.set(true);\n this.error.set(null);\n\n const payload: MAcademicYear = {\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.academicYearService.getAcademicYearList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n console.log('📚 Academic years loaded:', response.data);\n console.log('📊 Pagination info:', {\n total: response.total,\n pageIndex: response.pageIndex,\n pageSize: response.pageSize\n });\n \n this.academicYears.set(response.data);\n this.totalItems.set(response.total || 0);\n this.totalPages.set(Math.ceil((response.total || 0) / this.pageSize()));\n \n // Show success notification if data was loaded successfully\n if (response.data.length > 0) {\n this.notificationService.success(`Loaded ${response.data.length} academic year(s) successfully.`);\n }\n } else {\n console.warn('⚠️ No academic year data received');\n this.academicYears.set([]);\n this.totalItems.set(0);\n this.totalPages.set(0);\n this.notificationService.warning('No academic years found.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error loading academic years:', error);\n this.error.set('Failed to load academic years. Please try again.');\n this.academicYears.set([]);\n this.totalItems.set(0);\n this.totalPages.set(0);\n this.notificationService.error('Failed to load academic years. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n\n\n\n\n // Computed template renderers for grid\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n academicYearDetailsRenderer: this.academicYearDetailsRendererTemplate(),\n dateRangeRenderer: this.dateRangeRendererTemplate(),\n statusRenderer: this.statusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<any>): 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.loadAcademicYears();\n }\n break;\n case 'search':\n this.searchQuery.set(event.data as string);\n this.currentPage.set(1);\n this.loadAcademicYears();\n break;\n case 'refresh':\n this.loadAcademicYears();\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 if (event.data && typeof event.data === 'object' && 'column' in event.data && 'direction' in event.data) {\n this.sortColumn.set(event.data['column'] as string);\n this.sortDirection.set(event.data['direction'] as 'asc' | 'desc');\n this.currentPage.set(1); // Reset to first page when sorting\n this.loadAcademicYears();\n }\n break;\n case 'export':\n if (event.data && typeof event.data === 'string') {\n this.handleExport(event.data);\n }\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.loadAcademicYears();\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.loadAcademicYears();\n }\n\n // Academic Year actions with proper typing\n createAcademicYear(): void {\n console.log('➕ Navigating to create academic year');\n this.notificationService.info('Opening form to create a new academic year.');\n this.router.navigate(['/control-panel/academic_year/create']);\n }\n\n viewAcademicYear(academicYear: AcademicYear): void {\n console.log('👁️ Viewing academic year:', academicYear);\n this.notificationService.info(`Opening academic year \"${academicYear.acayr_name}\" for viewing.`);\n const queryParams = generateStringFromObject({ acayr_id: academicYear._id });\n this.router.navigate(['/control-panel/academic_year/view', queryParams]);\n }\n\n editAcademicYear(academicYear: AcademicYear): void {\n console.log('✏️ Editing academic year:', academicYear);\n \n // Check if the academic year is locked\n if (academicYear.acayr_islocked) {\n this.notificationService.error(`Cannot edit \"${academicYear.acayr_name}\" - This academic year is locked and cannot be modified. Please contact an administrator to unlock it first.`);\n return;\n }\n \n this.notificationService.info(`Opening academic year \"${academicYear.acayr_name}\" for editing.`);\n const queryParams = generateStringFromObject({ acayr_id: academicYear._id });\n this.router.navigate(['/control-panel/academic_year/edit', queryParams]);\n }\n\n\n /**\n * Get dropdown configuration\n */\n getDropdownConfig(): DropdownConfig {\n return {\n triggerIcon: 'more_vert',\n triggerSize: 'sm',\n // menuPosition: 'right' as const,\n // forcePosition: 'bottom' as const,\n // offsetX: 0,\n // offsetY: 1,\n // usePortal: true,\n // showArrow: false\n };\n }\n\n /**\n * Get action dropdown items\n */\n getActionDropdownItems(academicYear: AcademicYear): DropdownItem[] {\n console.log('🔽 Generating dropdown items for:', academicYear.acayr_name);\n console.log('🔽 Academic year data:', {\n isCurrent: academicYear.acayr_iscurrent,\n isLocked: academicYear.acayr_islocked,\n isActive: academicYear.acayr_isactive\n });\n \n const items: DropdownItem[] = [\n {\n id: 'view',\n label: 'View Details',\n icon: 'visibility',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n iconColor: academicYear?.acayr_islocked ? 'tw-text-gray-300' : 'tw-text-blue-400',\n textColor: academicYear?.acayr_islocked ? 'tw-text-gray-400' : 'tw-text-blue-600',\n hoverBgColor: academicYear?.acayr_islocked ? 'hover:tw-bg-gray-50' : 'hover:tw-bg-blue-50'\n },\n {\n id: 'toggle-status',\n label: academicYear.acayr_isactive ? 'Deactivate' : 'Activate',\n icon: academicYear.acayr_isactive ? 'toggle_off' : 'toggle_on',\n iconColor: academicYear?.acayr_islocked ? 'tw-text-gray-300' : 'tw-text-gray-400',\n textColor: academicYear?.acayr_islocked ? 'tw-text-gray-400' : 'tw-text-gray-700',\n hoverBgColor: academicYear?.acayr_islocked ? 'hover:tw-bg-gray-50' : 'hover:tw-bg-gray-100'\n }\n ];\n return items;\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, academicYear: AcademicYear): void {\n console.log('🖱️ Dropdown item clicked:', item.id, 'for academic year:', academicYear.acayr_name);\n \n // Check if item is disabled\n if (item.disabled) {\n console.log('⚠️ Item is disabled, ignoring click');\n return;\n }\n \n switch (item.id) {\n case 'view':\n this.viewAcademicYear(academicYear);\n break;\n case 'edit':\n this.editAcademicYear(academicYear);\n break;\n case 'toggle-status':\n this.toggleAcademicYearStatus(academicYear);\n break;\n default:\n console.log('❓ Unknown dropdown item clicked:', item.id);\n }\n }\n\n /**\n * Toggle academic year status (active/inactive)\n */\n toggleAcademicYearStatus(academicYear: AcademicYear): void {\n console.log('🔄 Toggling academic year status:', academicYear);\n \n // Check if the academic year is locked\n if (academicYear.acayr_islocked) {\n this.notificationService.error(`Cannot ${academicYear.acayr_isactive ? 'deactivate' : 'activate'} \"${academicYear.acayr_name}\" - This academic year is locked and its status cannot be changed. Please contact an administrator to unlock it first.`);\n return;\n }\n \n const action = academicYear.acayr_isactive ? 'deactivate' : 'activate';\n const actionText = academicYear.acayr_isactive ? 'Deactivate' : 'Activate';\n \n // Show confirmation dialog\n console.log('🔔 Showing confirmation dialog for toggle status');\n this.confirmationService.ask({\n title: `${actionText} Academic Year`,\n message: `Are you sure you want to ${action} the academic year \"${academicYear.acayr_name}\"?${!academicYear.acayr_isactive ? '\\n\\nThis will also deactivate all associated mappings.' : ''}`,\n confirmText: actionText,\n cancelText: 'Cancel',\n type: academicYear.acayr_isactive ? 'warning' : 'info'\n }).then((confirmed: boolean) => {\n console.log('🔔 Confirmation dialog result:', confirmed);\n if (confirmed) {\n this.loading.set(true);\n \n // First toggle the academic year status\n console.log('🔄 Calling toggleAcademicYearStatus with ID:', academicYear._id);\n this.academicYearService.toggleAcademicYearStatus({ acayr_id: academicYear._id }).subscribe({\n next: (response) => {\n console.log('🔄 Toggle academic year status response:', response);\n if (response?.success) {\n console.log('✅ Academic year status toggled successfully');\n \n // If deactivating, also toggle status of all academic year mappings\n if (!academicYear.acayr_isactive) { // If we're deactivating (was active, now inactive)\n this.toggleAcademicYearMappingsStatus(academicYear._id || '', false);\n } else {\n // If activating, just reload the list\n this.notificationService.success(`Academic year \"${academicYear.acayr_name}\" has been activated successfully.`);\n this.loadAcademicYears();\n }\n } else {\n console.error('❌ Failed to toggle academic year status');\n this.notificationService.error(response?.message || 'Failed to toggle academic year status');\n this.loading.set(false);\n }\n },\n error: (error) => {\n console.error('❌ Error toggling academic year status:', error);\n console.error('❌ Error details:', { \n status: error.status, \n message: error.message, \n error: error.error \n });\n this.notificationService.error('Failed to toggle academic year status. Please try again.');\n this.loading.set(false);\n }\n });\n }\n });\n }\n\n /**\n * Toggle status of all academic year mappings for a specific academic year\n */\n private toggleAcademicYearMappingsStatus(academicYearId: string, isActive: boolean): void {\n console.log(`🔄 Toggling mappings status for academic year ${academicYearId} to ${isActive ? 'active' : 'inactive'}`);\n \n // Get all mappings for this academic year and toggle their status\n // For now, we'll reload the academic year data to get the mappings\n // In a real implementation, you might want to get mappings separately\n this.academicYearService.getAcademicYearById({ acayr_id: academicYearId }).subscribe({\n next: (response) => {\n if (response?.success && response.data && (response.data as any).acayr_academic_year_mappings) {\n const mappings = (response.data as any).acayr_academic_year_mappings;\n console.log('📋 Found mappings to toggle:', mappings);\n \n // Toggle each mapping's status\n const toggleObservables = mappings.map((mapping: any) => {\n return this.academicYearService.toggleAcademicYearMappingStatus({ \n acayrmp_id: mapping._id \n }).pipe(\n catchError(error => {\n console.error('❌ Error toggling mapping status:', error);\n return of({ success: false, error, mappingId: mapping._id });\n })\n );\n });\n\n if (toggleObservables.length > 0) {\n forkJoin(toggleObservables).subscribe(\n (results) => {\n console.log('✅ All mapping statuses toggled:', results);\n const resultsArray = results as any[];\n const failedCount = resultsArray.filter((result: any) => !result.success).length;\n if (failedCount === 0) {\n this.notificationService.success(`Academic year and all ${resultsArray.length} associated mappings have been deactivated successfully.`);\n } else {\n this.notificationService.warning(`Academic year deactivated, but ${failedCount} out of ${resultsArray.length} mappings failed to update.`);\n }\n this.loadAcademicYears(); // Reload the list\n },\n (error) => {\n console.error('❌ Error toggling mapping statuses:', error);\n this.notificationService.error('Academic year deactivated, but failed to update some mappings.');\n this.loadAcademicYears(); // Still reload the list\n }\n );\n } else {\n this.notificationService.success('Academic year has been deactivated successfully.');\n this.loadAcademicYears(); // No mappings to toggle, just reload\n }\n } else {\n this.notificationService.success('Academic year has been deactivated successfully.');\n this.loadAcademicYears(); // No mappings found, just reload\n }\n },\n error: (error) => {\n console.error('❌ Error getting academic year mappings:', error);\n this.notificationService.error('Academic year deactivated, but failed to update mappings.');\n this.loadAcademicYears(); // Still reload the list\n }\n });\n }\n\n // Export handler\n private handleExport(format: string): void {\n console.log(`📤 Exporting academic years as ${format}`);\n \n const data = this.academicYears().map(item => ({\n 'Academic Year Code': item.acayr_code,\n 'Academic Year Name': item.acayr_name,\n 'Description': item.acayr_description,\n 'From Date': this.formatDate(item?.acayr_from_date || \"\"),\n 'To Date': this.formatDate(item?.acayr_to_date || \"\"),\n 'Duration': this.getDuration(item?.acayr_from_date || \"\", item?.acayr_to_date || \"\"),\n 'Status': this.getStatusText(item),\n 'Is Current': item.acayr_iscurrent ? 'Yes' : 'No',\n 'Is Active': item.acayr_isactive ? 'Yes' : 'No',\n 'Is Locked': item.acayr_islocked ? 'Yes' : 'No'\n }));\n\n // Create filename with timestamp\n const timestamp = new Date().toISOString().split('T')[0];\n const filename = `academic-years-${timestamp}`;\n\n switch (format.toLowerCase()) {\n case 'csv':\n this.exportToCSV(data, filename);\n break;\n case 'excel':\n this.exportToExcel(data, filename);\n break;\n case 'pdf':\n this.exportToPDF(data, filename);\n break;\n default:\n console.warn(`Unsupported export format: ${format}`);\n }\n }\n\n private exportToCSV(data: any[], filename: string): void {\n const headers = Object.keys(data[0] || {});\n const csvContent = [\n headers.join(','),\n ...data.map(row => headers.map(header => `\"${row[header] || ''}\"`).join(','))\n ].join('\\n');\n\n this.downloadFile(csvContent, `${filename}.csv`, 'text/csv');\n }\n\n private exportToExcel(data: any[], filename: string): void {\n // For Excel export, you might want to use a library like xlsx\n // For now, we'll export as CSV with .xlsx extension\n this.exportToCSV(data, filename);\n }\n\n private exportToPDF(data: any[], filename: string): void {\n // For PDF export, you might want to use a library like jsPDF\n // For now, we'll export as CSV\n this.exportToCSV(data, filename);\n }\n\n private downloadFile(content: string, filename: string, mimeType: string): void {\n const blob = new Blob([content], { type: mimeType });\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n }\n\n // Utility methods with proper typing\n formatDate(date: string | Date | null | undefined): string {\n if (!date) return '-';\n return new Date(date).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n });\n }\n\n getDuration(fromDate: string | Date | null | undefined, toDate: string | Date | null | undefined): string {\n if (!fromDate || !toDate) return '';\n \n const from = new Date(fromDate);\n const to = new Date(toDate);\n const diffTime = Math.abs(to.getTime() - from.getTime());\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n const months = Math.floor(diffDays / 30);\n const years = Math.floor(months / 12);\n \n if (years > 0) {\n return `${years} year${years > 1 ? 's' : ''}`;\n } else if (months > 0) {\n return `${months} month${months > 1 ? 's' : ''}`;\n } else {\n return `${diffDays} day${diffDays > 1 ? 's' : ''}`;\n }\n }\n\n getStatusBadgeClass(academicYear: AcademicYear): string {\n if (academicYear.acayr_iscurrent) return 'tw-bg-green-100 tw-text-green-800';\n if (academicYear.acayr_islocked) return 'tw-bg-red-100 tw-text-red-800';\n if (academicYear.acayr_isactive) return 'tw-bg-blue-100 tw-text-blue-800';\n return 'tw-bg-gray-100 tw-text-gray-800';\n }\n\n getActiveStatusBadgeClass(academicYear: AcademicYear): string {\n if (academicYear.acayr_isactive) {\n return 'tw-bg-green-100 tw-text-green-800';\n } else {\n return 'tw-bg-orange-100 tw-text-orange-800';\n }\n }\n\n getStatusText(academicYear: AcademicYear): string {\n if (academicYear.acayr_iscurrent) return 'Current';\n if (academicYear.acayr_islocked) return 'Locked';\n if (academicYear.acayr_isactive) return 'Active';\n return 'Inactive';\n }\n}\n","<!-- Academic Year Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n\n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">school</cide-ele-icon>\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Academic Year 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=\"sm\" leftIcon=\"add\" (click)=\"createAcademicYear()\">\n Create Academic Year\n </button>\n </div>\n </div>\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 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 #academicYearDetailsRendererTemplate 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.acayr_name || 'N/A' }}</div>\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate\">{{ row.acayr_description || 'No description' }}</div>\n </div>\n</ng-template>\n\n<ng-template #dateRangeRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-flex-col tw-text-sm\">\n <span class=\"tw-text-gray-900 tw-font-medium\">{{ formatDate(row.acayr_from_date) }}</span>\n <span class=\"tw-text-gray-500\">to {{ formatDate(row.acayr_to_date) }}</span>\n <span class=\"tw-text-xs tw-text-gray-400\">{{ getDuration(row.acayr_from_date, row.acayr_to_date) }}</span>\n </div>\n</ng-template>\n\n<ng-template #statusRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-flex-col tw-gap-1 tw-items-center\">\n <!-- Current Year Badge (Priority) -->\n @if (row.acayr_iscurrent) {\n <span\n class=\"tw-inline-flex tw-items-center tw-justify-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-yellow-100 tw-text-yellow-800 tw-text-center\">\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">star</cide-ele-icon>\n Current Year\n </span>\n }\n \n <!-- Active/Inactive Status Badge -->\n <span 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]=\"getActiveStatusBadgeClass(row)\">\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">\n {{ row.acayr_isactive ? 'check_circle' : 'cancel' }}\n </cide-ele-icon>\n {{ row.acayr_isactive ? 'Active' : 'Inactive' }}\n </span>\n \n <!-- Locked Status Badge (Additional info) -->\n @if (row.acayr_islocked) {\n <span\n class=\"tw-inline-flex tw-items-center tw-justify-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-red-100 tw-text-red-800 tw-text-center\">\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">lock</cide-ele-icon>\n Locked\n </span>\n }\n </div>\n</ng-template>\n\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>","// Academic Year Management Components\r\nexport * from './components/academic-year-create/academic-year-create.component';\r\nexport * from './components/academic-year-list/academic-year-list.component';\r\n\r\n// Academic Year Management Services\r\nexport * from './services/academic-year.service';\r\nexport * from './services/academic-year-mapping.service';\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 classPrgBranchControllerResponse,\r\n type AcaClassPrgBranchListPayload,\r\n type classPrgBranchByIdControllerResponse,\r\n type AcaClassPrgBranchGetByIdPayload,\r\n type classPrgBranchInsertUpdateControllerResponse,\r\n type AcaClassPrgBranchInsertUpdatePayload,\r\n type classPrgBranchDeleteControllerResponse,\r\n type AcaClassPrgBranchDeletePayload,\r\n type classPrgBranchToggleStatusControllerResponse,\r\n type AcaClassPrgBranchToggleStatusPayload,\r\n type classPrgBranchToggleLockControllerResponse,\r\n type AcaClassPrgBranchToggleLockPayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideLytClassProgramBranchService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get list of class program branches\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of class program branch list response\r\n */\r\n getClassProgramBranchList(payload: AcaClassPrgBranchListPayload): Observable<classPrgBranchControllerResponse> {\r\n console.log(\"Class Program Branch List Payload:\", payload);\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramBranch,\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get class program branch by ID\r\n * @param payload - Class program branch ID payload\r\n * @returns Observable of class program branch data\r\n */\r\n getClassProgramBranchById(payload: AcaClassPrgBranchGetByIdPayload): Observable<classPrgBranchByIdControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramBranch,\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 * Create or update class program branch\r\n * @param data - Class program branch data to save\r\n * @returns Observable of the save response\r\n */\r\n saveClassProgramBranch(data: AcaClassPrgBranchInsertUpdatePayload): Observable<classPrgBranchInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramBranch\r\n ]);\r\n\r\n return this.http.post(url, data);\r\n }\r\n\r\n /**\r\n * Delete class program branch\r\n * @param payload - Class program branch delete payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteClassProgramBranch(payload: AcaClassPrgBranchDeletePayload): Observable<classPrgBranchDeleteControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramBranch,\r\n query\r\n ]);\r\n\r\n return this.http.delete(url);\r\n }\r\n\r\n /**\r\n * Toggle class program branch status (active/inactive)\r\n * @param payload - Class program branch toggle status payload\r\n * @returns Observable of the toggle status response\r\n */\r\n toggleClassProgramBranchStatus(payload: AcaClassPrgBranchToggleStatusPayload): Observable<classPrgBranchToggleStatusControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramBranch,\r\n 'toggleStatus',\r\n query\r\n ]);\r\n\r\n return this.http.put(url, {});\r\n }\r\n\r\n /**\r\n * Toggle class program branch lock\r\n * @param payload - Class program branch toggle lock payload\r\n * @returns Observable of the toggle lock response\r\n */\r\n toggleClassProgramBranchLock(payload: AcaClassPrgBranchToggleLockPayload): Observable<classPrgBranchToggleLockControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramBranch,\r\n 'toggleLock',\r\n query\r\n ]);\r\n\r\n return this.http.put(url, {});\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 type classProgramMasterByIdControllerResponse,\r\n type MClassProgramMasterGetByIdPayload,\r\n type classProgramMasterInsertUpdateControllerResponse,\r\n type MClassProgramMasterInsertUpdatePayload,\r\n type classProgramMasterDeleteControllerResponse,\r\n type MClassProgramMasterDeletePayload,\r\n type classProgramMasterToggleStatusControllerResponse,\r\n type MClassProgramMasterToggleStatusPayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideLytProgramClassService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get list of program classes\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of program class list response\r\n */\r\n getProgramClassList(payload: MClassProgramMaster): Observable<classProgramMasterControllerResponse> {\r\n console.log(\"Program Class List Payload:\", payload);\r\n const query = generateStringFromObject(payload);\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(url);\r\n }\r\n\r\n /**\r\n * Get program class by ID\r\n * @param payload - Program class ID payload\r\n * @returns Observable of program class data\r\n */\r\n getProgramClassById(payload: MClassProgramMasterGetByIdPayload): Observable<classProgramMasterByIdControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramMaster,\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 * Create or update program class\r\n * @param data - Program class data to save\r\n * @returns Observable of the save response\r\n */\r\n saveProgramClass(data: MClassProgramMasterInsertUpdatePayload): Observable<classProgramMasterInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramMaster\r\n ]);\r\n\r\n return this.http.post(url, data);\r\n }\r\n\r\n /**\r\n * Delete program class\r\n * @param payload - Program class delete payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteProgramClass(payload: MClassProgramMasterDeletePayload): Observable<classProgramMasterDeleteControllerResponse> {\r\n const query = generateStringFromObject(payload);\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.delete(url);\r\n }\r\n\r\n /**\r\n * Toggle program class status (active/inactive)\r\n * @param payload - Program class toggle status payload\r\n * @returns Observable of the toggle status response\r\n */\r\n toggleProgramClassStatus(payload: MClassProgramMasterToggleStatusPayload): Observable<classProgramMasterToggleStatusControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramMaster,\r\n 'toggleStatus',\r\n query\r\n ]);\r\n\r\n return this.http.put(url, {});\r\n }\r\n}\r\n\r\n\r\n","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Router, ActivatedRoute, NavigationEnd } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter } from 'rxjs/operators';\nimport { CideEleDataGridComponent, CideIconComponent, CideEleButtonComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, NotificationService, ConfirmationService, CideSelectComponent } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport {\n AcaClassPrgBranchListPayload,\n type AcaClassPrgBranchDeletePayload,\n type AcaClassPrgBranchToggleStatusPayload,\n type AcaClassPrgBranchToggleLockPayload,\n generateObjectFromString,\n generateStringFromObject,\n AcaClassPrgBranchResponse,\n type MClassProgramMaster,\n type classProgramMasterControllerResponse\n} from 'cloud-ide-lms-model';\nimport { CideLytClassProgramBranchService } from '../../services/class-program-branch.service';\nimport { CideLytProgramClassService } from '../../../program-class-management/services/program-class.service';\n\n// Interfaces based on the actual API response\ninterface ClassProgramBranch {\n _id?: string;\n acabrn_class_program_id_acacpm?: any; // Can be string or populated object\n acabrn_name?: string;\n acabrn_code?: string;\n acabrn_sequence?: number;\n acabrn_isactive?: boolean;\n acabrn_islocked?: boolean;\n}\n\ninterface ClassProgramConfiguration {\n branchType?: boolean;\n semesterType?: boolean;\n}\n\ninterface ProgramClass {\n _id?: string;\n acacpm_name?: string;\n acacpm_code?: string;\n acacpm_alise_title?: string;\n acacpm_description?: string;\n acacpm_class_program_id_sygms?: {\n _id?: string;\n sygms_code?: string;\n sygms_title?: string;\n sygms_configuration?: ClassProgramConfiguration | string;\n } | string;\n}\n\n@Component({\n selector: 'cide-academics-class-program-branch-list',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n CideEleDataGridComponent,\n CideIconComponent,\n CideEleButtonComponent,\n CideEleDropdownComponent,\n CideSelectComponent,\n CideLytSharedWrapperComponent\n ],\n templateUrl: './class-program-branch-list.component.html',\n styles: [`\n :host {\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n \n cide-ele-data-grid {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n \n .drag-handle {\n cursor: move;\n }\n \n .drag-handle:hover {\n background-color: rgba(0, 0, 0, 0.05);\n border-radius: 4px;\n }\n \n .tw-table tbody tr {\n cursor: pointer;\n }\n \n .tw-table tbody tr:hover {\n background-color: rgba(0, 0, 0, 0.02);\n }\n \n .tw-table tbody tr.selected {\n background-color: rgba(59, 130, 246, 0.1);\n }\n `]\n})\nexport class CideLytClassProgramBranchListComponent implements OnInit {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private appState = inject(AppStateHelperService);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\n private classProgramBranchService = inject(CideLytClassProgramBranchService);\n private programClassService = inject(CideLytProgramClassService);\n\n // State management\n loading = signal(false);\n error = signal<string | null>(null);\n branches = signal<ClassProgramBranch[]>([]);\n totalCount = signal(0);\n programId = signal<string | null>(null);\n programClasses = signal<ProgramClass[]>([]);\n selectedProgramClassId = signal<string | null>(null);\n\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 // Template renderers\n dragHandleRendererTemplate = viewChild<TemplateRef<TemplateContext>>('dragHandleRendererTemplate');\n classProgramRendererTemplate = viewChild<TemplateRef<TemplateContext>>('classProgramRendererTemplate');\n actionsDropdownRendererTemplate = viewChild<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n\n // Grid configuration\n gridConfig = signal<GridConfiguration<ClassProgramBranch>>({\n id: 'class-program-branch-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'drag',\n header: '',\n type: 'custom',\n width: '40px',\n truncate: false,\n align: 'center',\n renderer: 'dragHandleRenderer'\n },\n {\n key: 'acabrn_name',\n header: 'Branch Name',\n type: 'text',\n width: '300px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'acabrn_code',\n header: 'Code',\n type: 'text',\n width: '150px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'acabrn_class_program_id_acacpm',\n header: 'Class Program',\n type: 'custom',\n width: '200px',\n truncate: true,\n align: 'left',\n renderer: 'classProgramRenderer',\n groupable: true,\n valueGetter: 'acabrn_class_program_id_acacpm.acacpm_alise_title',\n dataValueGetter: 'acabrn_class_program_id_acacpm.acacpm_alise_title'\n },\n {\n key: 'acabrn_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: 'acabrn_islocked',\n header: 'Locked',\n type: 'status',\n width: '100px',\n truncate: false,\n align: 'center',\n statusConfig: {\n activeValue: true,\n activeLabel: 'Locked',\n inactiveLabel: 'Unlocked',\n activeClass: 'tw-bg-yellow-100 tw-text-yellow-800',\n inactiveClass: 'tw-bg-gray-100 tw-text-gray-800'\n }\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '80px',\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 branches...',\n searchableColumns: ['acabrn_name', 'acabrn_code'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50,\n maxHeight: undefined // Explicitly no max-height - grid should fill available space\n },\n fullHeight: true,\n responsive: true,\n striped: true,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full',\n columnMenu: {\n enabled: true,\n showGroupBy: true,\n showFilter: true,\n showSort: true\n },\n dragDrop: {\n enabled: true\n },\n onRefresh: 'onRefresh',\n onPageChange: 'onPageChange',\n onSearch: 'onSearch',\n onRowReorder: 'onRowReorder'\n });\n\n // Computed template renderers\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => {\n const renderers: Record<string, TemplateRef<TemplateContext>> = {};\n\n if (this.dragHandleRendererTemplate()) {\n renderers['dragHandleRenderer'] = this.dragHandleRendererTemplate()!;\n }\n\n if (this.classProgramRendererTemplate()) {\n renderers['classProgramRenderer'] = this.classProgramRendererTemplate()!;\n }\n\n if (this.actionsDropdownRendererTemplate()) {\n renderers['actionsDropdownRenderer'] = this.actionsDropdownRendererTemplate()!;\n }\n\n return renderers;\n });\n\n ngOnInit(): void {\n console.log('🏢 Class Program Branch List Component initialized');\n this.initializeBreadcrumbData();\n this.loadProgramClasses();\n this.checkRouteParams();\n // Load all branches initially (will be filtered if programId is set in checkRouteParams)\n this.loadBranches();\n \n // Subscribe to router events to reload data when navigating back to this page\n this.router.events\n .pipe(\n filter(event => event instanceof NavigationEnd),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe((event: NavigationEnd) => {\n // Reload data when navigating to the listing page\n if (event.urlAfterRedirects.includes('/class-program-branch-management') && !event.urlAfterRedirects.includes('/create') && !event.urlAfterRedirects.includes('/edit') && !event.urlAfterRedirects.includes('/view')) {\n console.log('🔄 Navigation detected to listing page, reloading data...');\n this.loadBranches();\n }\n });\n }\n\n /**\n * Initialize breadcrumb data for list view\n */\n private initializeBreadcrumbData(): void {\n // The shared wrapper will automatically add:\n // 1. Module (Academics) from app state\n // 2. Current page (Class Program Branch Management) from page config\n // We can add additional items here if needed\n this.breadcrumbData.set([\n {\n id: 'list',\n label: 'List',\n icon: 'list',\n url: undefined\n }\n ]);\n }\n\n /**\n * Load program classes for dropdown\n * Only loads programs that have branchType: true in their configuration\n */\n private loadProgramClasses(): void {\n const payload: Partial<MClassProgramMaster> = {\n pagination: false,\n acacpm_isactive: true\n };\n\n this.programClassService.getProgramClassList(payload as MClassProgramMaster)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: classProgramMasterControllerResponse) => {\n console.log('✅ Program classes loaded:', response);\n if (response?.success && response.data) {\n const allPrograms = response.data as ProgramClass[];\n \n // Filter to only include programs with branchType: true\n const programsWithBranchType = allPrograms.filter(program => {\n const generalMaster = program.acacpm_class_program_id_sygms;\n if (!generalMaster || typeof generalMaster !== 'object') return false;\n \n let config: ClassProgramConfiguration | undefined;\n if ('sygms_configuration' in generalMaster) {\n const configValue = generalMaster.sygms_configuration;\n if (typeof configValue === 'string') {\n try {\n config = JSON.parse(configValue) as ClassProgramConfiguration;\n } catch {\n return false;\n }\n } else if (typeof configValue === 'object' && configValue !== null) {\n config = configValue as ClassProgramConfiguration;\n }\n }\n \n return config?.branchType === true;\n });\n \n console.log(`✅ Filtered ${programsWithBranchType.length} programs with branchType: true out of ${allPrograms.length} total programs`);\n this.programClasses.set(programsWithBranchType);\n } else {\n console.warn('⚠️ No program class data received');\n this.programClasses.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading program classes:', error);\n this.programClasses.set([]);\n }\n });\n }\n\n /**\n * Handle Program Class selection change\n */\n onProgramClassChange(programClassId: string | number | string[] | null): void {\n const programId = typeof programClassId === 'string' ? programClassId : (programClassId ? String(programClassId) : null);\n console.log('🔄 Program Class changed:', programId);\n \n // Update selected program class ID (can be null to show all branches)\n this.selectedProgramClassId.set(programId);\n this.programId.set(programId);\n \n // Load branches (will load all if programId is null)\n this.loadBranches();\n }\n\n /**\n * Check route parameters for program ID\n */\n private checkRouteParams(): void {\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\n const queryParams = params['query'];\n console.log('🏢 Route params:', params, 'queryParams:', queryParams);\n\n if (queryParams) {\n // Query parameters passed (following page-controls pattern)\n const queryData = generateObjectFromString(queryParams);\n console.log('🏢 Query data from route:', queryData);\n\n // Check for programId in various possible formats\n const programId = queryData?.programId\n\n if (programId) {\n this.programId.set(programId as string);\n this.selectedProgramClassId.set(programId as string);\n console.log('🏢 Program Class ID extracted from route:', programId);\n console.log('🏢 Will filter branches by acabrn_class_program_id_acacpm:', programId);\n this.loadBranches();\n } else {\n // No program ID in route params, check query params\n this.checkQueryParams();\n }\n } else {\n // No route query params, check direct query parameters\n this.checkQueryParams();\n }\n });\n }\n\n /**\n * Check direct query parameters for program ID\n */\n private checkQueryParams(): void {\n const queryParams = this.route.snapshot.queryParams;\n const programId = queryParams['programId']\n\n if (programId) {\n this.programId.set(programId);\n this.selectedProgramClassId.set(programId);\n console.log('🏢 Program Class ID from query params:', programId);\n console.log('🏢 Will filter branches by acabrn_class_program_id_acacpm:', programId);\n this.loadBranches();\n } else {\n // No program ID provided - load all branches\n console.log('🏢 No program class ID provided - loading all branches');\n this.programId.set(null);\n this.selectedProgramClassId.set(null);\n // Load all branches when no program ID is provided\n this.loadBranches();\n }\n }\n\n /**\n * Load branches from API\n */\n private loadBranches(): void {\n this.loading.set(true);\n this.error.set(null);\n\n // Build payload - class program is optional\n const currentProgramId = this.programId();\n \n const payloadData: Partial<AcaClassPrgBranchListPayload> = {\n pagination: true,\n pageIndex: 0,\n pageSize: 10\n };\n \n // Only include class program ID if one is selected\n if (currentProgramId && currentProgramId.trim() !== '') {\n payloadData.acabrn_class_program_id_acacpm = currentProgramId;\n }\n\n const payload: AcaClassPrgBranchListPayload = new AcaClassPrgBranchListPayload(payloadData);\n\n console.log('🏢 API Payload:', payload);\n\n this.classProgramBranchService.getClassProgramBranchList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('✅ Branches loaded:', response);\n if (response?.success && response.data) {\n // Normalize branches to ensure class program object structure is preserved for grouping\n const normalizedBranches = this.normalizeBranchesForGrouping(response.data as ClassProgramBranch[]);\n this.branches.set(normalizedBranches);\n this.totalCount.set(response.total || 0);\n this.updateGridData();\n } else {\n this.error.set('Failed to load branches');\n this.notificationService.error('Failed to load branches');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error loading branches:', error);\n this.error.set('Failed to load branches');\n this.loading.set(false);\n this.notificationService.error('Failed to load branches');\n }\n });\n }\n\n /**\n * Normalize branches to ensure class program object structure is preserved for grouping\n */\n private normalizeBranchesForGrouping(branches: ClassProgramBranch[]): ClassProgramBranch[] {\n return branches.map(branch => {\n const normalizedBranch = { ...branch };\n \n // Ensure class program object structure is preserved for grouping\n if (normalizedBranch.acabrn_class_program_id_acacpm) {\n if (typeof normalizedBranch.acabrn_class_program_id_acacpm === 'object') {\n // Ensure acacpm_alise_title exists, fallback to acacpm_name\n const programClass = normalizedBranch.acabrn_class_program_id_acacpm as any;\n if (!programClass.acacpm_alise_title && programClass.acacpm_name) {\n programClass.acacpm_alise_title = programClass.acacpm_name;\n }\n } else if (typeof normalizedBranch.acabrn_class_program_id_acacpm === 'string') {\n // If it's a string ID, we can't group by it - this should not happen with proper API response\n console.warn('⚠️ Class program is a string ID, not an object. Grouping may not work correctly.');\n }\n }\n \n return normalizedBranch;\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(): void {\n this.gridConfig.update(config => ({\n ...config,\n data: this.branches()\n }));\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ClassProgramBranch>): void {\n console.log('Grid Event:', event);\n\n switch (event.type) {\n case 'refresh':\n this.onRefresh();\n break;\n case 'pageChange':\n this.onPageChange(event.data);\n break;\n case 'search':\n this.onSearch(event.data);\n break;\n case 'rowReorder':\n this.onRowReorder(event.data);\n break;\n }\n }\n\n /**\n * Handle refresh\n */\n onRefresh(): void {\n this.loadBranches();\n }\n\n /**\n * Handle page change\n */\n onPageChange(event: any): void {\n console.log('Page change:', event);\n // Implement pagination logic here\n }\n\n /**\n * Handle search\n */\n onSearch(event: any): void {\n console.log('Search:', event);\n // Implement search logic here\n }\n\n /**\n * Handle row reorder (drag and drop)\n */\n onRowReorder(event: any): void {\n console.log('Row reorder:', event);\n\n if (event && event.newOrder) {\n // Update the sequence order based on the new drag and drop order\n this.updateSequenceOrder(event.newOrder);\n }\n }\n\n\n /**\n * Update sequence order for branches\n */\n private updateSequenceOrder(branches: ClassProgramBranch[]): void {\n // Update sequence numbers based on new order\n const updatedBranches = branches.map((branch, index) => ({\n ...branch,\n acabrn_sequence: index + 1\n }));\n\n // Update local state\n this.branches.set(updatedBranches);\n this.updateGridData();\n\n // TODO: Implement API call to update sequence order on server\n // This would typically be a bulk update API call\n console.log('Updated sequence order:', updatedBranches.map(b => ({ id: b._id, sequence: b.acabrn_sequence })));\n\n this.notificationService.success('Sequence order updated successfully');\n }\n\n\n /**\n * Navigate to create branch\n */\n onCreateBranch(event?: Event): void {\n console.log('🏢 Create Branch button clicked', event);\n const currentProgramId = this.programId();\n console.log('🏢 Current Program ID:', currentProgramId);\n\n if (!currentProgramId) {\n // Class program is required\n this.notificationService.warning('Please select a Class Program first before creating a branch');\n return;\n }\n\n // Use generateStringFromObject to pass programId as route parameter\n const queryParams = generateStringFromObject({ programId: currentProgramId });\n console.log('🏢 Navigating to create with programId:', queryParams);\n this.router.navigate(['/control-panel/program_specialization/create', queryParams]).then(\n (success) => {\n console.log('✅ Navigation successful:', success);\n },\n (error) => {\n console.error('❌ Navigation failed:', error);\n this.notificationService.error('Failed to navigate to create branch page');\n }\n );\n }\n\n /**\n * Navigate to view branch\n */\n onViewBranch(branch: ClassProgramBranch): void {\n if (branch._id) {\n const currentProgramId = this.programId();\n const queryParams = generateStringFromObject({ acabrn_id: branch._id });\n\n // Add programId as query parameter if available\n const navigationExtras: any = {};\n if (currentProgramId) {\n navigationExtras.queryParams = { programId: currentProgramId };\n }\n\n this.router.navigate(['/control-panel/program_specialization/view', queryParams], navigationExtras);\n }\n }\n\n /**\n * Navigate to edit branch\n */\n onEditBranch(branch: ClassProgramBranch): void {\n if (branch._id) {\n const currentProgramId = this.programId();\n const queryParams = generateStringFromObject({ acabrn_id: branch._id });\n\n\n this.router.navigate(['/control-panel/program_specialization/edit', queryParams]);\n }\n }\n\n /**\n * Navigate to manage term for branch\n */\n onManageTerm(branch: ClassProgramBranch): void {\n if (branch._id) {\n const currentProgramId = this.programId();\n const queryParams = generateStringFromObject({\n acabrn_id: branch._id,\n acacpm_id: currentProgramId\n });\n\n // Navigate to term management page\n this.router.navigate(['/control-panel/program-term-management', queryParams]);\n }\n }\n\n /**\n * Get dropdown items for branch actions\n */\n getBranchActionDropdownItems(branch: AcaClassPrgBranchResponse): DropdownItem[] {\n return [\n {\n id: 'view',\n label: 'View',\n icon: 'visibility'\n },\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit'\n },\n {\n id: 'manage-term',\n label: 'Manage Term',\n icon: 'school'\n },\n {\n id: 'toggle-status',\n label: branch.acabrn_isactive ? 'Deactivate' : 'Activate',\n icon: branch.acabrn_isactive ? 'block' : 'check_circle'\n },\n {\n id: 'toggle-lock',\n label: branch.acabrn_islocked ? 'Unlock' : 'Lock',\n icon: branch.acabrn_islocked ? 'lock_open' : 'lock'\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n }\n ];\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, branch: ClassProgramBranch): void {\n switch (item.id) {\n case 'view':\n this.onViewBranch(branch);\n break;\n case 'edit':\n this.onEditBranch(branch);\n break;\n case 'manage-term':\n this.onManageTerm(branch);\n break;\n case 'toggle-status':\n this.toggleBranchStatus(branch);\n break;\n case 'toggle-lock':\n this.toggleBranchLock(branch);\n break;\n case 'delete':\n this.deleteBranch(branch);\n break;\n }\n }\n\n /**\n * Toggle branch status\n */\n private toggleBranchStatus(branch: ClassProgramBranch): void {\n if (!branch._id) return;\n\n const action = branch.acabrn_isactive ? 'deactivate' : 'activate';\n\n this.confirmationService.ask({\n title: `${action.charAt(0).toUpperCase() + action.slice(1)} Branch`,\n message: `Are you sure you want to ${action} this branch?`,\n confirmText: action.charAt(0).toUpperCase() + action.slice(1),\n cancelText: 'Cancel',\n type: 'warning'\n }).then((confirmed: boolean) => {\n if (confirmed) {\n const payload: AcaClassPrgBranchToggleStatusPayload = {\n acabrn_id: branch._id!\n };\n\n this.classProgramBranchService.toggleClassProgramBranchStatus(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.notificationService.success(`Branch ${action}d successfully`);\n this.loadBranches();\n } else {\n this.notificationService.error(`Failed to ${action} branch`);\n }\n },\n error: (error) => {\n console.error('❌ Error toggling branch status:', error);\n this.notificationService.error(`Failed to ${action} branch`);\n }\n });\n }\n });\n }\n\n /**\n * Toggle branch lock\n */\n private toggleBranchLock(branch: ClassProgramBranch): void {\n if (!branch._id) return;\n\n const action = branch.acabrn_islocked ? 'unlock' : 'lock';\n\n this.confirmationService.ask({\n title: `${action.charAt(0).toUpperCase() + action.slice(1)} Branch`,\n message: `Are you sure you want to ${action} this branch?`,\n confirmText: action.charAt(0).toUpperCase() + action.slice(1),\n cancelText: 'Cancel',\n type: 'warning'\n }).then((confirmed: boolean) => {\n if (confirmed) {\n const payload: AcaClassPrgBranchToggleLockPayload = {\n acabrn_id: branch._id!\n };\n\n this.classProgramBranchService.toggleClassProgramBranchLock(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.notificationService.success(`Branch ${action}ed successfully`);\n this.loadBranches();\n } else {\n this.notificationService.error(`Failed to ${action} branch`);\n }\n },\n error: (error) => {\n console.error('❌ Error toggling branch lock:', error);\n this.notificationService.error(`Failed to ${action} branch`);\n }\n });\n }\n });\n }\n\n /**\n * Delete branch\n */\n private deleteBranch(branch: ClassProgramBranch): void {\n if (!branch._id) return;\n\n this.confirmationService.ask({\n title: 'Delete Branch',\n message: `Are you sure you want to delete \"${branch.acabrn_name}\"? This action cannot be undone.`,\n confirmText: 'Delete',\n cancelText: 'Cancel',\n type: 'danger'\n }).then((confirmed: boolean) => {\n if (confirmed) {\n const payload: AcaClassPrgBranchDeletePayload = {\n acabrn_id: branch._id!\n };\n\n this.classProgramBranchService.deleteClassProgramBranch(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.notificationService.success('Branch deleted successfully');\n this.loadBranches();\n } else {\n this.notificationService.error('Failed to delete branch');\n }\n },\n error: (error) => {\n console.error('❌ Error deleting branch:', error);\n this.notificationService.error('Failed to delete branch');\n }\n });\n }\n });\n }\n}\n\n","<!-- Class Program Branch List Component -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_branch' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <!-- Action Buttons in Breadcrumb Area -->\n <div breadcrumb-actions>\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"sm\" leftIcon=\"add\" (btnClick)=\"onCreateBranch($event)\">\n Create Branch\n </button>\n </div>\n\n <!-- Main Content -->\n <div class=\"tw-flex tw-flex-col tw-w-full tw-h-full tw-overflow-hidden\">\n <!-- Filter Section -->\n <div class=\"tw-flex-shrink-0 tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-items-center tw-gap-4\">\n <div class=\"tw-w-64\">\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Class Program</label>\n <cide-ele-select\n [options]=\"programClasses()\"\n [ngModel]=\"selectedProgramClassId() || ''\"\n (ngModelChange)=\"onProgramClassChange($event)\"\n placeholder=\"Select Class Program (Optional)\"\n valueKey=\"_id\"\n labelKey=\"acacpm_alise_title\">\n </cide-ele-select>\n </div>\n </div>\n </div>\n\n <!-- Data Grid Section -->\n <div class=\"tw-flex-1 tw-min-h-0 tw-p-0\">\n <cide-ele-data-grid\n class=\"tw-h-full\"\n [config]=\"gridConfig()\"\n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n </div>\n</cide-lyt-shared-wrapper>\n\n<!-- Template Renderers -->\n<ng-template #dragHandleRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-justify-center tw-cursor-move drag-handle\" title=\"Drag to reorder\">\n <cide-ele-icon name=\"drag_indicator\" class=\"tw-w-4 tw-h-4 tw-text-gray-400 hover:tw-text-gray-600\"></cide-ele-icon>\n </div>\n</ng-template>\n\n\n<ng-template #classProgramRendererTemplate let-row=\"row\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n {{ row.acabrn_class_program_id_acacpm?.acacpm_alise_title || 'N/A' }}\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\n <div class=\"tw-relative tw-inline-block\">\n <cide-ele-dropdown \n [items]=\"getBranchActionDropdownItems(row)\" \n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n </div>\n</ng-template>\n\n","import { Component, inject, signal, OnInit, DestroyRef, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Location } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideIconComponent, CideSelectComponent, NotificationService, ConfirmationService } from 'cloud-ide-element';\nimport { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { CideLytClassProgramBranchService } from '../../services/class-program-branch.service';\nimport { CideLytProgramClassService } from '../../../program-class-management/services/program-class.service';\nimport { CideCoreGeneralMasterService } from 'cloud-ide-shared';\nimport { ICoreSygms, IGeneralMasterListRequest } from 'cloud-ide-lms-model';\nimport {\n type AcaClassPrgBranchInsertUpdatePayload,\n type AcaClassPrgBranchGetByIdPayload,\n generateStringFromObject,\n generateObjectFromString\n} from 'cloud-ide-lms-model';\n\n// Interfaces based on the actual API response\ninterface ClassProgramBranch {\n _id?: string;\n acabrn_class_program_id_acacpm?: any; // Can be string or populated object\n acabrn_name?: string;\n acabrn_code?: string;\n acabrn_sequence?: number;\n acabrn_isactive?: boolean;\n acabrn_islocked?: boolean;\n}\n\ninterface ClassProgramConfiguration {\n branchType?: boolean;\n semesterType?: boolean;\n}\n\ninterface ProgramClass {\n _id?: string;\n acacpm_name?: string;\n acacpm_code?: string;\n acacpm_description?: string;\n acacpm_alise_title?: string;\n acacpm_class_program_id_sygms?: {\n _id?: string;\n sygms_code?: string;\n sygms_title?: string;\n sygms_configuration?: ClassProgramConfiguration | string;\n } | string;\n}\n\ninterface BranchMaster extends ICoreSygms {\n value?: string;\n label?: string;\n}\n\n\n@Component({\n selector: 'cide-academics-class-program-branch-form',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideInputComponent,\n CideEleButtonComponent,\n CideIconComponent,\n CideSelectComponent,\n CideLytSharedWrapperComponent,\n ],\n templateUrl: './class-program-branch-form.component.html'\n})\nexport class CideLytClassProgramBranchFormComponent implements OnInit, OnDestroy {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private fb = inject(FormBuilder);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private location = inject(Location);\n private appState = inject(AppStateHelperService);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\n private classProgramBranchService = inject(CideLytClassProgramBranchService);\n private programClassService = inject(CideLytProgramClassService);\n private generalMasterService = inject(CideCoreGeneralMasterService);\n\n // Form and state management\n branchForm: FormGroup;\n loading = signal(false);\n error = signal<string | null>(null);\n isEditMode = signal(false);\n isViewMode = signal(false);\n branchId = signal<string | null>(null);\n\n // Data signals\n programClasses = signal<ProgramClass[]>([]);\n branchMasters = signal<BranchMaster[]>([]);\n\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 // Signal to control Program Class dropdown visibility\n showProgramClassDropdown = signal<boolean>(true);\n\n // Flag to prevent auto-populate during data load\n private isLoadingData = false;\n\n constructor() {\n this.branchForm = this.fb.group({\n acabrn_name: ['', [Validators.required, Validators.minLength(2)]],\n acabrn_code: ['', [Validators.required, Validators.minLength(2)]],\n acabrn_sequence: [0, [Validators.required, Validators.min(0)]],\n acabrn_class_program_id_acacpm: ['', [Validators.required]],\n acabrn_branch_id_sygms: [''],\n acabrn_isactive: [true],\n acabrn_islocked: [false]\n });\n }\n\n ngOnInit(): void {\n console.log('🏢 Class Program Branch Form Component initialized');\n this.initializeComponent();\n this.setupFormListeners();\n }\n\n /**\n * Setup form control listeners\n */\n private setupFormListeners(): void {\n // Listen to SYGMS field changes\n this.branchForm.get('acabrn_branch_id_sygms')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((sygmsId: string) => {\n // Only auto-populate if not loading existing data\n if (sygmsId && !this.isLoadingData) {\n this.onBranchMasterChange(sygmsId);\n }\n });\n\n // Listen to Program Class field changes\n this.branchForm.get('acabrn_class_program_id_acacpm')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((programClassId: string) => {\n // Always trigger when program class changes (both create and edit modes)\n if (programClassId && !this.isLoadingData) {\n this.onProgramClassChange(programClassId);\n }\n });\n }\n\n /**\n * Handle Program Class selection change\n * This will load standard branch names based on the program's general master code\n */\n private onProgramClassChange(programClassId: string): void {\n if (!programClassId) {\n this.branchMasters.set([]);\n return;\n }\n\n console.log('🔄 Program Class changed:', programClassId);\n \n // Find the selected program class to get its general master code\n const selectedProgramClass = this.programClasses().find(p => p._id === programClassId);\n if (!selectedProgramClass) {\n console.warn('⚠️ Selected program class not found');\n this.branchMasters.set([]);\n return;\n }\n\n // Get the general master code from the program class\n let programCode: string | undefined;\n \n if (selectedProgramClass.acacpm_class_program_id_sygms) {\n if (typeof selectedProgramClass.acacpm_class_program_id_sygms === 'object' && 'sygms_code' in selectedProgramClass.acacpm_class_program_id_sygms) {\n programCode = (selectedProgramClass.acacpm_class_program_id_sygms as any).sygms_code;\n }\n }\n\n if (!programCode) {\n console.warn('⚠️ Program code not found in selected program class');\n this.branchMasters.set([]);\n return;\n }\n\n console.log('📚 Program code found:', programCode);\n \n // Load branch masters - API will find the parent master by type and code, then return its children\n this.loadBranchMastersByProgramCode(programCode);\n }\n\n ngOnDestroy(): void {\n console.log('🏢 Class Program Branch Form Component destroyed');\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n this.loadMasterData();\n this.checkRouteParams();\n }\n\n /**\n * Check route parameters to determine mode\n */\n private checkRouteParams(): void {\n const url = this.router.url;\n const queryParams = this.route.snapshot.queryParams;\n const routeParams = this.route.snapshot.params;\n\n // Check for program ID from route parameters or query parameters\n let programId: string | null = null;\n\n // Check route parameters for programId or acacpm_id (for create operations)\n if (routeParams['query']) {\n const params = generateObjectFromString(routeParams['query']);\n console.log('🏢 Params:generateObjectFromString', params);\n programId = params?.programId || params?.acacpm_id || null;\n }\n\n // Also check queryParams for programId or acacpm_id\n if (!programId) {\n programId = queryParams['programId'] || queryParams['acacpm_id'] || null;\n }\n\n if (programId) {\n console.log('🏢 Program Class Management ID from URL:', programId);\n // Always show the dropdown but it will be disabled in edit mode\n this.showProgramClassDropdown.set(true);\n // Use emitEvent: true to trigger valueChanges listener\n this.branchForm.patchValue({\n acabrn_class_program_id_acacpm: programId\n }, { emitEvent: true });\n // Also explicitly call onProgramClassChange after program classes are loaded\n // This will be handled in loadProgramClasses() after data is loaded\n } else {\n // Show the dropdown if no ID from URL\n this.showProgramClassDropdown.set(true);\n }\n\n if (url.includes('/view/')) {\n this.isViewMode.set(true);\n this.loadBranchForView(queryParams);\n } else if (url.includes('/edit/')) {\n this.isEditMode.set(true);\n this.loadBranchForEdit(queryParams);\n } else {\n // Create mode\n this.isEditMode.set(false);\n this.isViewMode.set(false);\n // Initialize breadcrumb for create mode\n this.updateBreadcrumbData();\n }\n }\n\n\n /**\n * Load master data\n */\n private loadMasterData(): void {\n console.log('🔄 Loading master data for Class Program Branch Form...');\n\n // Load program classes\n this.loadProgramClasses();\n \n // Load branch masters (SYGMS)\n this.loadBranchMasters();\n }\n\n /**\n * Load program classes\n * Only loads programs that have branchType: true in their configuration\n * (except in edit/view mode where we need to show the current program even if it doesn't have branchType)\n */\n private loadProgramClasses(): void {\n this.programClassService.getProgramClassList({ pagination: false, acacpm_isactive: true })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('✅ Program classes loaded:', response);\n if (response?.success && response.data) {\n const allPrograms = response.data as ProgramClass[];\n \n // In create mode, filter to only include programs with branchType: true\n // In edit/view mode, include all programs (to show the current program even if it doesn't have branchType)\n let filteredPrograms: ProgramClass[];\n if (this.isEditMode() || this.isViewMode()) {\n // In edit/view mode, show all programs (current program might not have branchType)\n filteredPrograms = allPrograms;\n } else {\n // In create mode, only show programs with branchType: true\n filteredPrograms = allPrograms.filter(program => {\n const generalMaster = program.acacpm_class_program_id_sygms;\n if (!generalMaster || typeof generalMaster !== 'object') return false;\n \n let config: ClassProgramConfiguration | undefined;\n if ('sygms_configuration' in generalMaster) {\n const configValue = generalMaster.sygms_configuration;\n if (typeof configValue === 'string') {\n try {\n config = JSON.parse(configValue) as ClassProgramConfiguration;\n } catch {\n return false;\n }\n } else if (typeof configValue === 'object' && configValue !== null) {\n config = configValue as ClassProgramConfiguration;\n }\n }\n \n return config?.branchType === true;\n });\n console.log(`✅ Filtered ${filteredPrograms.length} programs with branchType: true out of ${allPrograms.length} total programs`);\n }\n \n this.programClasses.set(filteredPrograms);\n \n // Check if there's already a program class ID in the form and load branches\n const currentProgramClassId = this.branchForm.get('acabrn_class_program_id_acacpm')?.value;\n if (currentProgramClassId && !this.isLoadingData) {\n console.log('🔄 Program classes loaded, triggering branch load for existing program class:', currentProgramClassId);\n // Use setTimeout to ensure form is ready\n setTimeout(() => {\n this.onProgramClassChange(currentProgramClassId);\n }, 100);\n }\n } else {\n console.warn('⚠️ No program class data received');\n this.programClasses.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading program classes:', error);\n this.programClasses.set([]);\n }\n });\n }\n\n /**\n * Load branch masters from SYGMS (General Master)\n * This method is called initially without program filter\n */\n private loadBranchMasters(): void {\n // Initially load empty or all branches - will be filtered when program is selected\n this.branchMasters.set([]);\n }\n\n /**\n * Load branch masters filtered by program code\n * The API will:\n * 1. Find general master with type \"class_program_type\" and code matching programCode\n * 2. Use that master's ID as sygms_id_sygms to get child branches (standard branch names)\n * All done in a single API call\n */\n private loadBranchMastersByProgramCode(programCode: string): void {\n console.log('🔍 Loading branch masters for program code:', programCode);\n \n // Single API call - API will find the parent master and return its children\n const payload: IGeneralMasterListRequest = {\n sygmt_code: 'class_program_type',\n sygms_code: programCode\n };\n\n this.generalMasterService.getMasterList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('✅ Branch masters loaded:', response);\n if (response?.success && response.data) {\n const masters = response.data.map((master: ICoreSygms) => ({\n ...master,\n value: master._id,\n label: master.sygms_title\n })) as BranchMaster[];\n this.branchMasters.set(masters);\n } else {\n console.warn('⚠️ No branch master data received');\n this.branchMasters.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading branch masters:', error);\n this.branchMasters.set([]);\n }\n });\n }\n\n /**\n * Handle SYGMS selection change - auto-populate name and code\n */\n onBranchMasterChange(sygmsId: string): void {\n if (!sygmsId) {\n return;\n }\n\n const selectedMaster = this.branchMasters().find(m => m._id === sygmsId);\n if (selectedMaster) {\n // Auto-populate name from SYGMS title\n if (selectedMaster.sygms_title) {\n this.branchForm.patchValue({\n acabrn_name: selectedMaster.sygms_title\n });\n }\n\n // Auto-populate code from SYGMS configuration or code\n if (selectedMaster.sygms_configuration && typeof selectedMaster.sygms_configuration === 'object') {\n const config = selectedMaster.sygms_configuration as any;\n if (config.code) {\n this.branchForm.patchValue({\n acabrn_code: config.code\n });\n } else if (selectedMaster.sygms_code) {\n this.branchForm.patchValue({\n acabrn_code: selectedMaster.sygms_code\n });\n }\n } else if (selectedMaster.sygms_code) {\n this.branchForm.patchValue({\n acabrn_code: selectedMaster.sygms_code\n });\n }\n }\n }\n\n\n /**\n * Load branch for viewing\n */\n private loadBranchForView(queryParams: any): void {\n const routeParams = this.route.snapshot.params;\n\n // Check query parameters first\n let params = generateObjectFromString(routeParams['query']);\n console.log('🏢 Params:generateObjectFromString', params);\n\n if (params?.acabrn_id) {\n console.log('🏢 Branch ID for view:', params.acabrn_id);\n this.branchId.set(params.acabrn_id);\n this.loadBranchData(params.acabrn_id, true);\n } else {\n console.error('❌ No branch ID found in route parameters');\n this.error.set('Branch ID not found in route parameters');\n }\n }\n\n /**\n * Load branch for editing\n */\n private loadBranchForEdit(queryParams: any): void {\n const routeParams = this.route.snapshot.params;\n\n // Check query parameters first\n let params = generateObjectFromString(routeParams['query']);\n console.log('🏢 Params:generateObjectFromString', params);\n\n if (params?.acabrn_id) {\n console.log('🏢 Branch ID for edit:', params.acabrn_id);\n this.branchId.set(params.acabrn_id);\n this.loadBranchData(params.acabrn_id, false);\n } else {\n console.error('❌ No branch ID found in route parameters');\n this.error.set('Branch ID not found in route parameters');\n }\n }\n\n /**\n * Load branch data\n */\n private loadBranchData(branchId: string, isViewMode: boolean): void {\n this.loading.set(true);\n this.error.set(null);\n this.isLoadingData = true; // Set flag to prevent auto-populate\n\n const payload: AcaClassPrgBranchGetByIdPayload = {\n acabrn_id: branchId\n };\n\n this.classProgramBranchService.getClassProgramBranchById(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n const branchData = response.data;\n\n // Get program class ID from branch data\n const programClassId = branchData.acabrn_class_program_id_acacpm?._id || branchData.acabrn_class_program_id_acacpm;\n\n // Populate form with branch data\n const programClassIdString = typeof programClassId === 'string' ? programClassId : (programClassId as any)?._id || programClassId;\n \n this.branchForm.patchValue({\n acabrn_name: branchData.acabrn_name,\n acabrn_code: branchData.acabrn_code,\n acabrn_sequence: branchData.acabrn_sequence,\n acabrn_class_program_id_acacpm: programClassIdString,\n acabrn_branch_id_sygms: branchData.acabrn_branch_id_sygms?._id || branchData.acabrn_branch_id_sygms || '',\n acabrn_isactive: (branchData).acabrn_isactive,\n acabrn_islocked: branchData.acabrn_islocked\n }, { emitEvent: true });\n\n // Reset flag after data is loaded\n this.isLoadingData = false;\n\n // Load branch names for the selected program class\n if (programClassIdString) {\n // Wait for program classes to be loaded, then load branches\n // Check if program classes are already loaded\n if (this.programClasses().length > 0) {\n // Program classes already loaded, load branches immediately\n setTimeout(() => {\n this.onProgramClassChange(programClassIdString);\n }, 100);\n } else {\n // Program classes not loaded yet, wait for them\n // The loadProgramClasses() method will handle this after classes are loaded\n console.log('⏳ Waiting for program classes to load before loading branches');\n }\n }\n\n // Disable form if in view mode\n if (isViewMode) {\n this.branchForm.disable();\n }\n\n // Update breadcrumb for edit/view mode\n this.updateBreadcrumbData(branchData, isViewMode);\n\n this.notificationService.success('Branch data loaded successfully.');\n } else {\n this.error.set('Failed to load branch data.');\n this.notificationService.error('Failed to load branch data.');\n this.isLoadingData = false;\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error loading branch data:', error);\n this.error.set('Failed to load branch data. Please try again.');\n this.loading.set(false);\n this.isLoadingData = false;\n this.notificationService.error('Failed to load branch data. Please try again.');\n }\n });\n }\n\n /**\n * Get form title\n */\n get formTitle(): string {\n if (this.isViewMode()) return 'View Program Specialization';\n if (this.isEditMode()) return 'Edit Program Specialization';\n return 'Create Program Specialization';\n }\n\n /**\n * Get submit button text\n */\n get submitButtonText(): string {\n if (this.isViewMode()) return 'Close';\n if (this.isEditMode()) return 'Update Branch';\n return 'Create Branch';\n }\n\n /**\n * Handle form submission\n */\n onSubmit(): void {\n if (this.isViewMode()) {\n this.location.back();\n return;\n }\n\n if (this.branchForm.invalid) {\n this.notificationService.error('Please fill in all required fields correctly.');\n return;\n }\n\n const formData = this.branchForm.value;\n const payload: AcaClassPrgBranchInsertUpdatePayload = {\n _id: this.branchId() || undefined,\n acabrn_name: formData.acabrn_name,\n acabrn_code: formData.acabrn_code,\n acabrn_sequence: formData.acabrn_sequence,\n acabrn_class_program_id_acacpm: formData.acabrn_class_program_id_acacpm,\n acabrn_branch_id_sygms: formData.acabrn_branch_id_sygms || undefined,\n acabrn_isactive: formData.acabrn_isactive,\n acabrn_islocked: formData.acabrn_islocked\n };\n\n this.saveBranch(payload);\n }\n\n /**\n * Save branch\n */\n private saveBranch(payload: AcaClassPrgBranchInsertUpdatePayload): void {\n this.loading.set(true);\n\n this.classProgramBranchService.saveClassProgramBranch(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n const action = this.isEditMode() ? 'updated' : 'created';\n this.notificationService.success(`Branch has been ${action} successfully.`);\n // Navigate back to listing page - it will auto-reload via router events subscription\n this.router.navigate(['/control-panel/class-program-branch-management']);\n } else {\n this.notificationService.error(response?.message || 'Failed to save branch.');\n }\n this.loading.set(false);\n },\n error: (error: unknown) => {\n console.error('❌ Error saving branch:', error);\n const errorMessage = error && typeof error === 'object' && 'error' in error \n ? (error.error && typeof error.error === 'object' && 'message' in error.error \n ? String(error.error.message) \n : 'message' in error ? String(error.message) : 'Failed to save branch')\n : error && typeof error === 'object' && 'message' in error\n ? String(error.message)\n : 'Failed to save branch';\n this.notificationService.error(errorMessage);\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Handle cancel\n */\n onCancel(): void {\n if (this.branchForm.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) => {\n if (confirmed) {\n this.location.back();\n }\n });\n } else {\n this.location.back();\n }\n }\n\n /**\n * Reset form to initial state\n */\n resetForm(): void {\n this.branchForm.reset();\n this.branchForm.patchValue({\n acabrn_isactive: true,\n acabrn_islocked: false,\n acabrn_sequence: 0,\n acabrn_branch_id_sygms: ''\n });\n this.notificationService.info('Form has been reset to initial values.');\n }\n\n /**\n * Toggle active status on card click\n */\n onActiveCardClick(): void {\n if (this.isViewMode()) return;\n\n const currentValue = this.branchForm.get('acabrn_isactive')?.value;\n this.branchForm.patchValue({\n acabrn_isactive: !currentValue\n });\n }\n\n /**\n * Toggle locked status on card click\n */\n onLockedCardClick(): void {\n if (this.isViewMode()) return;\n\n const currentValue = this.branchForm.get('acabrn_islocked')?.value;\n this.branchForm.patchValue({\n acabrn_islocked: !currentValue\n });\n }\n\n /**\n * Update breadcrumb data based on mode\n */\n private updateBreadcrumbData(branchData?: any, isViewMode: boolean = false): void {\n const additionalItems: { id: string; label: string; icon?: string; url?: string }[] = [];\n\n if (this.isEditMode() || isViewMode) {\n if (branchData) {\n additionalItems.push({\n id: branchData._id || 'branch',\n label: branchData.acabrn_name || 'Branch',\n icon: undefined,\n url: undefined\n });\n }\n\n if (isViewMode) {\n additionalItems.push({\n id: 'view',\n label: 'View',\n icon: 'visibility',\n url: undefined\n });\n } else {\n additionalItems.push({\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n url: undefined\n });\n }\n } else {\n // Create mode\n additionalItems.push({\n id: 'create',\n label: 'Create',\n icon: 'add',\n url: undefined\n });\n }\n\n this.breadcrumbData.set(additionalItems);\n }\n}\n\n","<!-- \n CLASS PROGRAM BRANCH FORM COMPONENT\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: 'class_program_branch' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n <div class=\"tw-w-full tw-h-full\">\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"branchForm\"\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Form Content -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\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\"\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\n <!-- Basic Branch Information -->\n <div class=\"tw-space-y-6\">\n <!-- Class Program Selection -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-1 tw-gap-6\">\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Class Program *</label>\n <cide-ele-select formControlName=\"acabrn_class_program_id_acacpm\" placeholder=\"Select class program\"\n [disabled]=\"isViewMode() || isEditMode()\" valueKey=\"_id\" labelKey=\"acacpm_alise_title\" [options]=\"programClasses()\">\n </cide-ele-select>\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-mr-1\"></cide-ele-icon>\n Sequence will be automatically assigned based on the order in the listing\n </p>\n </div>\n </div>\n\n <!-- Standard Branch Name (SYGMS) -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-1 tw-gap-6\">\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Standard Branch Name</label>\n <cide-ele-select formControlName=\"acabrn_branch_id_sygms\" placeholder=\"Select standard branch name\"\n [disabled]=\"isViewMode()\" valueKey=\"_id\" labelKey=\"sygms_title\" [options]=\"branchMasters()\">\n </cide-ele-select>\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-mr-1\"></cide-ele-icon>\n Selecting a standard branch will auto-populate the branch name and code\n </p>\n </div>\n </div>\n\n <!-- Branch Name and Code -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div>\n <cide-ele-input label=\"Branch Name *\" formControlName=\"acabrn_name\"\n placeholder=\"e.g., Computer Science Branch\" size=\"md\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-input label=\"Branch Code *\" formControlName=\"acabrn_code\" placeholder=\"e.g., CS\" size=\"md\"\n leadingIcon=\"code\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Status and Lock Options -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n [class.tw-cursor-not-allowed]=\"isViewMode()\" [class.tw-opacity-60]=\"isViewMode()\"\n (click)=\"onActiveCardClick()\">\n <cide-ele-input formControlName=\"acabrn_isactive\" type=\"checkbox\" size=\"md\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this branch</span>\n </div>\n </div>\n\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n [class.tw-cursor-not-allowed]=\"isViewMode()\" [class.tw-opacity-60]=\"isViewMode()\"\n (click)=\"onLockedCardClick()\">\n <cide-ele-input formControlName=\"acabrn_islocked\" type=\"checkbox\" size=\"md\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-justify-end 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=\"button\" variant=\"secondary\" (click)=\"onCancel()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n {{ isViewMode() ? 'Close' : 'Cancel' }}\n </button>\n\n @if (!isViewMode()) {\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || branchForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ submitButtonText }}\n </button>\n }\n </div>\n </div>\n </div>\n </form>\n </div>\n</cide-lyt-shared-wrapper>","// Class Program Branch Management Module\r\n// This module provides components and services for managing class program branches\r\n\r\n// Components\r\nexport { CideLytClassProgramBranchListComponent } from './components/class-program-branch-list/class-program-branch-list.component';\r\nexport { CideLytClassProgramBranchFormComponent } from './components/class-program-branch-form/class-program-branch-form.component';\r\n\r\n// Services\r\nexport { CideLytClassProgramBranchService } from './services/class-program-branch.service';\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 classProgramTermControllerResponse,\r\n type MClassProgramTerm,\r\n type classProgramTermByIdControllerResponse,\r\n type MClassProgramTermGetByIdPayload,\r\n type classProgramTermInsertUpdateControllerResponse,\r\n type MClassProgramTermInsertUpdatePayload,\r\n type classProgramTermDeleteControllerResponse,\r\n type MClassProgramTermDeletePayload,\r\n type classProgramTermToggleStatusControllerResponse,\r\n type MClassProgramTermToggleStatusPayload,\r\n type classProgramTermToggleLockControllerResponse,\r\n type MClassProgramTermToggleLockPayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideLytClassProgramTermService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get list of class program terms\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of class program term list response\r\n */\r\n getClassProgramTermList(payload: MClassProgramTerm): Observable<classProgramTermControllerResponse> {\r\n console.log(\"Class Program Term List Payload:\", payload);\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramTerm,\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get class program term by ID\r\n * @param payload - Class program term ID payload\r\n * @returns Observable of class program term data\r\n */\r\n getClassProgramTermById(payload: MClassProgramTermGetByIdPayload): Observable<classProgramTermByIdControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramTerm,\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 * Create or update class program term\r\n * @param data - Class program term data to save\r\n * @returns Observable of the save response\r\n */\r\n saveClassProgramTerm(data: MClassProgramTermInsertUpdatePayload): Observable<classProgramTermInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramTerm\r\n ]);\r\n\r\n return this.http.post(url, data);\r\n }\r\n\r\n /**\r\n * Delete class program term\r\n * @param payload - Class program term delete payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteClassProgramTerm(payload: MClassProgramTermDeletePayload): Observable<classProgramTermDeleteControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramTerm,\r\n query\r\n ]);\r\n\r\n return this.http.delete(url);\r\n }\r\n\r\n /**\r\n * Toggle class program term status (active/inactive)\r\n * @param payload - Class program term toggle status payload\r\n * @returns Observable of the toggle status response\r\n */\r\n toggleClassProgramTermStatus(payload: MClassProgramTermToggleStatusPayload): Observable<classProgramTermToggleStatusControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramTerm,\r\n 'toggleStatus',\r\n query\r\n ]);\r\n\r\n return this.http.put(url, {});\r\n }\r\n\r\n /**\r\n * Toggle class program term lock status\r\n * @param payload - Class program term toggle lock payload\r\n * @returns Observable of the toggle lock response\r\n */\r\n toggleClassProgramTermLock(payload: MClassProgramTermToggleLockPayload): Observable<classProgramTermToggleLockControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramTerm,\r\n 'toggleLock',\r\n query\r\n ]);\r\n\r\n return this.http.put(url, {});\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 prgTrmSectionControllerResponse,\r\n type MPrgTrmSection,\r\n type prgTrmSectionByIdControllerResponse,\r\n type MPrgTrmSectionGetByIdPayload,\r\n type prgTrmSectionInsertUpdateControllerResponse,\r\n type MPrgTrmSectionInsertUpdatePayload,\r\n type prgTrmSectionDeleteControllerResponse,\r\n type MPrgTrmSectionDeletePayload,\r\n type prgTrmSectionToggleStatusControllerResponse,\r\n type MPrgTrmSectionToggleStatusPayload,\r\n type prgTrmSectionToggleLockControllerResponse,\r\n type MPrgTrmSectionToggleLockPayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideLytProgramTermSectionService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get list of program term sections\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of program term section list response\r\n */\r\n getProgramTermSectionList(payload: MPrgTrmSection): Observable<prgTrmSectionControllerResponse> {\r\n console.log(\"Program Term Section List Payload:\", payload);\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.programTermSection,\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get program term section by ID\r\n * @param payload - Program term section ID payload\r\n * @returns Observable of program term section data\r\n */\r\n getProgramTermSectionById(payload: MPrgTrmSectionGetByIdPayload): Observable<prgTrmSectionByIdControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.programTermSection,\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 * Create or update program term section\r\n * @param data - Program term section data to save\r\n * @returns Observable of the save response\r\n */\r\n saveProgramTermSection(data: MPrgTrmSectionInsertUpdatePayload): Observable<prgTrmSectionInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.programTermSection\r\n ]);\r\n\r\n return this.http.post(url, data);\r\n }\r\n\r\n /**\r\n * Delete program term section\r\n * @param payload - Program term section delete payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteProgramTermSection(payload: MPrgTrmSectionDeletePayload): Observable<prgTrmSectionDeleteControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.programTermSection,\r\n query\r\n ]);\r\n\r\n return this.http.delete(url);\r\n }\r\n\r\n /**\r\n * Toggle program term section status (active/inactive)\r\n * @param payload - Program term section toggle status payload\r\n * @returns Observable of the toggle status response\r\n */\r\n toggleProgramTermSectionStatus(payload: MPrgTrmSectionToggleStatusPayload): Observable<prgTrmSectionToggleStatusControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.programTermSection,\r\n 'toggleStatus',\r\n query\r\n ]);\r\n\r\n return this.http.put(url, {});\r\n }\r\n\r\n /**\r\n * Toggle program term section lock status\r\n * @param payload - Program term section toggle lock payload\r\n * @returns Observable of the toggle lock response\r\n */\r\n toggleProgramTermSectionLock(payload: MPrgTrmSectionToggleLockPayload): Observable<prgTrmSectionToggleLockControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.programTermSection,\r\n 'toggleLock',\r\n query\r\n ]);\r\n\r\n return this.http.put(url, {});\r\n }\r\n}\r\n","import { Component, inject, signal, OnInit, DestroyRef, OnDestroy, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideEleTabComponent, TabItem, CideIconComponent, CideSelectComponent, NotificationService, ConfirmationService, SelectOption } from 'cloud-ide-element';\nimport { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { CideLytClassProgramBranchService } from '../../../class-program-branch-management/services/class-program-branch.service';\nimport { CideLytClassProgramTermService } from '../../../class-program-term-management/services/class-program-term.service';\nimport { CideLytProgramTermSectionService } from '../../services/program-term-section.service';\nimport { CLASS_PROGRAM_MASTER_SERVICE_TOKEN, type IClassProgramMasterService } from 'cloud-ide-shared';\nimport { generateObjectFromString, AcaClassPrgBranchListPayload, MClassProgramTerm, MClassProgramMaster, type classPrgBranchControllerResponse, type classProgramMasterControllerResponse, MPrgTrmSectionInsertUpdatePayload, type prgTrmSectionInsertUpdateControllerResponse, type prgTrmSectionByIdControllerResponse, type AcaPrgTrmSectionResponse, type classProgramTermControllerResponse, type AcaClassProgramTermReponse, AcaPrgTrmSection, type MClassProgramTermGetByIdPayload, type classProgramTermByIdControllerResponse } from 'cloud-ide-lms-model';\n\ninterface ProgramClass {\n _id?: string;\n acacpm_alise_title?: string;\n acacpm_class_program_id_sygms?: {\n sygms_configuration?: {\n branchType?: boolean;\n semesterType?: boolean;\n termType?: boolean;\n termLevelUpTo?: number;\n termProgramLevelOneConnected?: boolean;\n };\n };\n}\n\ninterface ClassProgramTerm {\n _id?: string;\n acapt_name?: string;\n acapt_code?: string;\n}\n\ninterface ClassProgramBranch {\n _id?: string;\n acabrn_name?: string;\n acabrn_code?: string;\n}\n\n@Component({\n selector: 'cide-academics-program-term-section-create',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideInputComponent,\n CideTextareaComponent,\n CideEleButtonComponent,\n CideEleTabComponent,\n CideIconComponent,\n CideSelectComponent,\n CideLytSharedWrapperComponent\n ],\n templateUrl: './program-term-section-create.component.html'\n})\nexport class ProgramTermSectionCreateComponent implements OnInit, OnDestroy {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private fb = inject(FormBuilder);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private appState = inject(AppStateHelperService);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\n private classProgramMasterService = inject(CLASS_PROGRAM_MASTER_SERVICE_TOKEN);\n private classProgramBranchService = inject(CideLytClassProgramBranchService);\n private classProgramTermService = inject(CideLytClassProgramTermService);\n private programTermSectionService = inject(CideLytProgramTermSectionService);\n\n programTermSectionForm: FormGroup;\n activeTab = signal('basic');\n loading = signal(false);\n error = signal<string | null>(null);\n\n // Program term section information from route\n programTermSectionId = signal<string>('');\n isEditMode = signal(false);\n isViewMode = signal(false);\n\n // Data signals\n programClasses = signal<ProgramClass[]>([]);\n selectedProgramClass = signal<ProgramClass | null>(null);\n classProgramBranches = signal<ClassProgramBranch[]>([]);\n classProgramTerms = signal<ClassProgramTerm[]>([]);\n\n // Options for dropdowns (transformed to SelectOption format)\n programClassOptions = signal<SelectOption[]>([]);\n classProgramBranchOptions = signal<SelectOption[]>([]);\n // For class program terms, we need to include parent field for tree view (normalized to string)\n classProgramTermOptions = signal<(SelectOption & { _id: string; acapt_name: string; acapt_parent_class_prog_term_acapt?: string })[]>([]);\n \n // Loading states\n programClassLoading = signal<boolean>(false);\n classProgramBranchLoading = signal<boolean>(false);\n classProgramTermLoading = signal<boolean>(false);\n \n // Computed signal to show/hide branch dropdown based on selected program class configuration\n showBranchDropdown = computed(() => {\n const selectedProgram = this.selectedProgramClass();\n if (!selectedProgram) return false;\n // Check if program has branchType configuration\n const config = selectedProgram?.acacpm_class_program_id_sygms?.sygms_configuration;\n return config && typeof config === 'object' && 'branchType' in config && config?.branchType === true;\n });\n\n // Computed signal to check if term dropdown should be shown\n // Hide term dropdown if termType=true, termProgramLevelOneConnected=true, and termLevelUpTo <= 1\n showTermDropdown = computed(() => {\n const selectedProgram = this.selectedProgramClass();\n if (!selectedProgram) return true; // Show by default if no program selected\n \n const config = selectedProgram?.acacpm_class_program_id_sygms?.sygms_configuration;\n if (!config || typeof config !== 'object') return true;\n \n // If termType=true AND termProgramLevelOneConnected=true AND termLevelUpTo <= 1, hide dropdown\n if (config.termType === true && \n config.termProgramLevelOneConnected === true && \n config.termLevelUpTo !== undefined && \n config.termLevelUpTo <= 1) {\n return false;\n }\n \n return true; // Show dropdown by default\n });\n\n // Route parameter signals\n acacpmId = signal<string | null>(null);\n acabrnId = signal<string | null>(null);\n acaptParentId = signal<string | null>(null);\n \n // Signal to track if parent term exists in edit mode\n hasParentTermInEditMode = signal<boolean>(true);\n\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 constructor() {\n this.programTermSectionForm = this.fb.group({\n // Basic Program Term Section Information\n acapts_code: ['', [Validators.required]],\n acapts_name: ['', [Validators.required]],\n acapts_description: [''],\n acapts_class_program_id_acacpm: ['', [Validators.required]],\n acapts_class_program_branch_id_acabrn: [''],\n acapts_parent_class_prog_term_acapt: ['', [Validators.required]],\n acapts_isactive: [true],\n acapts_iscurrent: [false],\n acapts_islocked: [false]\n });\n }\n\n ngOnInit(): void {\n console.log('🚀 Program Term Section Create Component - ngOnInit called');\n this.initializeComponent();\n this.updateBreadcrumbData();\n }\n\n /**\n * Update breadcrumb data based on mode\n */\n private updateBreadcrumbData(): void {\n const additionalItems: { id: string; label: string; icon?: string; url?: string }[] = [];\n \n if (this.isViewMode()) {\n additionalItems.push({\n id: 'view',\n label: 'View',\n icon: 'visibility',\n url: undefined\n });\n } else if (this.isEditMode()) {\n additionalItems.push({\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n url: undefined\n });\n } else {\n additionalItems.push({\n id: 'create',\n label: 'Create',\n icon: 'add',\n url: undefined\n });\n }\n \n this.breadcrumbData.set(additionalItems);\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n console.log('🔧 Initializing Program Term Section Create Component');\n console.log('📍 Current route URL:', this.router.url);\n \n // Check route parameters to determine mode\n const routeParams = this.route.snapshot.params;\n const queryParams = routeParams['query'];\n console.log('📋 Route params:', routeParams, 'Query params:', queryParams);\n \n // Check if we have query params (for edit/view mode)\n if (queryParams) {\n const queryData = generateObjectFromString(queryParams);\n \n // Check for edit mode (acapts_id in query)\n if (queryData?.['acapts_id']) {\n // This is edit mode\n this.isEditMode.set(true);\n this.programTermSectionId.set(queryData['acapts_id'] as string);\n this.loadProgramTermSectionForEdit(queryData);\n this.checkRouteParams(); // Still check for pre-selection of other fields\n } else if (this.router.url.includes('/view/')) {\n // View mode\n this.isViewMode.set(true);\n this.loadProgramTermSectionForView(queryData);\n } else {\n // Create mode with pre-selection\n this.checkRouteParams();\n }\n } else {\n // No query params - check URL for edit/view mode\n const url = this.router.url;\n if (url.includes('/view/')) {\n this.isViewMode.set(true);\n this.loadProgramTermSectionForView({});\n } else if (url.includes('/edit/')) {\n this.isEditMode.set(true);\n this.loadProgramTermSectionForEdit({});\n } else {\n // Create mode\n this.isEditMode.set(false);\n this.isViewMode.set(false);\n this.checkRouteParams();\n }\n }\n\n // Update breadcrumb after mode is determined\n this.updateBreadcrumbData();\n\n // Load dropdown options\n console.log('📥 Loading dropdown options...');\n this.loadDropdownOptions();\n \n // Watch for program class selection changes\n this.setupProgramClassChangeListener();\n }\n \n /**\n * Setup listener for program class selection changes\n */\n private setupProgramClassChangeListener(): void {\n console.log('🎧 Setting up program class change listener...');\n \n this.programTermSectionForm.get('acapts_class_program_id_acacpm')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((programClassId: string) => {\n console.log('🔄 Program class changed:', programClassId);\n \n if (!programClassId) {\n // Clear branches and terms when program class is cleared\n console.log('🧹 Clearing branches and terms - no program class selected');\n this.classProgramBranchOptions.set([]);\n this.classProgramTermOptions.set([]);\n this.selectedProgramClass.set(null);\n this.programTermSectionForm.patchValue({\n acapts_class_program_branch_id_acabrn: '',\n acapts_parent_class_prog_term_acapt: ''\n }, { emitEvent: false });\n return;\n }\n \n // Find the selected program class from loaded options\n const programClass = this.programClasses().find(p => p._id === programClassId);\n this.selectedProgramClass.set(programClass || null);\n \n console.log('📋 Found program class:', programClass);\n \n // Check if program has branch configuration\n const config = programClass?.acacpm_class_program_id_sygms?.sygms_configuration;\n const hasBranchConfig = config && typeof config === 'object' && 'branchType' in config && config?.branchType === true;\n \n console.log('📋 Program class config:', config, 'hasBranchConfig:', hasBranchConfig);\n \n // Check if a term is already selected to avoid clearing user selection\n const currentTermId = this.programTermSectionForm.get('acapts_parent_class_prog_term_acapt')?.value;\n \n if (hasBranchConfig) {\n // Load branches for this program class\n console.log('📚 Loading branches for program class:', programClassId);\n this.loadBranchesForProgramClass(programClassId);\n // Don't load terms yet - wait for branch selection\n // Only clear terms if no term is currently selected (to avoid clearing user selection)\n if (!currentTermId) {\n this.classProgramTermOptions.set([]);\n this.programTermSectionForm.patchValue({\n acapts_parent_class_prog_term_acapt: ''\n }, { emitEvent: false });\n }\n } else {\n // No branch config, clear branches and load terms directly\n console.log('ℹ️ No branch config, loading terms directly');\n this.classProgramBranchOptions.set([]);\n // Only clear branch if it's set\n const currentBranchId = this.programTermSectionForm.get('acapts_class_program_branch_id_acabrn')?.value;\n if (currentBranchId) {\n this.programTermSectionForm.patchValue({\n acapts_class_program_branch_id_acabrn: ''\n }, { emitEvent: false });\n }\n \n // Handle term dropdown visibility and auto-selection\n if (!this.showTermDropdown()) {\n // If term dropdown should be hidden, auto-select the term for this program\n this.autoSelectTermForProgram(programClassId, null);\n } else {\n // Only clear and reload terms if no term is currently selected\n if (!currentTermId) {\n this.programTermSectionForm.patchValue({\n acapts_parent_class_prog_term_acapt: ''\n }, { emitEvent: false });\n // Load terms without branch\n this.loadTermsForProgramClassAndBranch(programClassId, null);\n } else {\n // Term is already selected, don't reload terms to avoid circular dependency\n console.log('ℹ️ Term already selected, skipping term reload to avoid circular dependency');\n }\n }\n }\n });\n \n // Watch for branch selection changes to load terms when branch is selected\n this.programTermSectionForm.get('acapts_class_program_branch_id_acabrn')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((branchId: string) => {\n console.log('🔄 Branch changed:', branchId);\n \n const programClassId = this.programTermSectionForm.get('acapts_class_program_id_acacpm')?.value;\n \n // Check if a term is already selected to avoid clearing user selection\n const currentTermId = this.programTermSectionForm.get('acapts_parent_class_prog_term_acapt')?.value;\n \n if (!programClassId) {\n // No program class selected, clear terms only if no term is currently selected\n if (!currentTermId) {\n this.classProgramTermOptions.set([]);\n this.programTermSectionForm.patchValue({\n acapts_parent_class_prog_term_acapt: ''\n }, { emitEvent: false });\n }\n return;\n }\n \n if (branchId) {\n // Handle term dropdown visibility and auto-selection\n if (!this.showTermDropdown()) {\n // If term dropdown should be hidden, auto-select the term for this program\n this.autoSelectTermForProgram(programClassId, branchId);\n } else {\n // Branch selected, load terms for this branch\n // Only reload terms if no term is currently selected to avoid clearing user selection\n if (!currentTermId) {\n console.log('📚 Loading terms for program class and branch:', programClassId, branchId);\n this.loadTermsForProgramClassAndBranch(programClassId, branchId);\n } else {\n console.log('ℹ️ Term already selected, skipping term reload to avoid clearing user selection');\n }\n }\n } else {\n // Branch cleared, clear terms only if no term is currently selected\n if (!currentTermId) {\n this.classProgramTermOptions.set([]);\n this.programTermSectionForm.patchValue({\n acapts_parent_class_prog_term_acapt: ''\n }, { emitEvent: false });\n }\n }\n });\n \n // Watch for term selection changes to set class program from API\n // Note: Only set class program if it's not already set to avoid circular dependency\n this.programTermSectionForm.get('acapts_parent_class_prog_term_acapt')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((termId: string) => {\n console.log('🔄 Program term selected:', termId);\n \n if (termId && !this.isEditMode() && !this.isViewMode()) {\n // Check if class program is already selected\n const currentClassProgramId = this.programTermSectionForm.get('acapts_class_program_id_acacpm')?.value;\n \n if (!currentClassProgramId) {\n // Only load term details and set class program if class program is not already set\n // This prevents circular dependency when class program is already selected\n const selectedTerm = this.classProgramTermOptions().find(opt => opt._id === termId);\n \n if (selectedTerm) {\n // Load the full term details from API to get class program\n this.loadTermDetailsAndSetClassProgram(termId);\n }\n } else {\n console.log('ℹ️ Class program already selected, skipping auto-set to avoid circular dependency');\n }\n }\n });\n }\n\n /**\n * Load term details from API and set class program\n */\n private loadTermDetailsAndSetClassProgram(termId: string): void {\n this.classProgramTermService.getClassProgramTermById({ acapt_id: termId })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: any) => {\n if (response?.success && response.data) {\n const term = response.data;\n console.log('📋 Term details loaded:', term);\n \n // Get class program ID from term\n const classProgramId = typeof term.acapt_class_program_id_acacpm === 'string'\n ? term.acapt_class_program_id_acacpm\n : term.acapt_class_program_id_acacpm?._id;\n \n if (classProgramId) {\n console.log('📋 Setting class program from term:', classProgramId);\n // Set class program in form (this will trigger branch and term loading)\n this.programTermSectionForm.patchValue({\n acapts_class_program_id_acacpm: classProgramId\n }, { emitEvent: true });\n \n // Also set branch if available\n const branchId = typeof term.acapt_class_program_branch_id_acabrn === 'string'\n ? term.acapt_class_program_branch_id_acabrn\n : term.acapt_class_program_branch_id_acabrn?._id;\n \n if (branchId) {\n // Wait for branches to load, then set branch\n setTimeout(() => {\n this.programTermSectionForm.patchValue({\n acapts_class_program_branch_id_acabrn: branchId\n }, { emitEvent: true });\n }, 500);\n }\n }\n }\n },\n error: (error: unknown) => {\n console.error('❌ Error loading term details:', error);\n }\n });\n }\n\n /**\n * Check route parameters for pre-selecting fields\n */\n private checkRouteParams(): void {\n // First check synchronously from snapshot\n const routeParams = this.route.snapshot.params;\n const queryParams = routeParams['query'];\n console.log('📋 Route params (snapshot):', routeParams, 'queryParams:', queryParams);\n\n if (queryParams) {\n console.log('✅ Query parameters found in route, will pre-select fields');\n // Query parameters passed (following page-controls pattern)\n const queryData = generateObjectFromString(queryParams);\n console.log('📋 Program Term Section Create params from route:', queryData);\n \n if (queryData?.acacpm_id) {\n this.acacpmId.set(queryData.acacpm_id as string);\n console.log('📋 Program Class ID from route:', queryData.acacpm_id);\n }\n \n if (queryData?.acabrn_id) {\n this.acabrnId.set(queryData.acabrn_id as string);\n console.log('📋 Branch ID from route:', queryData.acabrn_id);\n }\n\n if (queryData?.acapt_parent_id || queryData?.acapt_id) {\n const parentId = (queryData.acapt_parent_id || queryData.acapt_id) as string;\n this.acaptParentId.set(parentId);\n console.log('📋 Parent Term ID from route:', parentId);\n }\n } else {\n console.log('ℹ️ No query parameters in route - creating new program term section without pre-selection');\n }\n\n // Also subscribe to route params for dynamic changes\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\n const dynamicQueryParams = params['query'];\n if (dynamicQueryParams && dynamicQueryParams !== queryParams) {\n const queryData = generateObjectFromString(dynamicQueryParams);\n console.log('📋 Route params changed:', queryData);\n \n if (queryData?.acacpm_id) {\n this.acacpmId.set(queryData.acacpm_id as string);\n }\n \n if (queryData?.acabrn_id) {\n this.acabrnId.set(queryData.acabrn_id as string);\n }\n\n if (queryData?.acapt_parent_id || queryData?.acapt_id) {\n const parentId = (queryData.acapt_parent_id || queryData.acapt_id) as string;\n this.acaptParentId.set(parentId);\n }\n }\n });\n }\n\n /**\n * Load program term section for viewing\n */\n private loadProgramTermSectionForView(queryParams: Record<string, unknown>): void {\n // Implementation for view mode\n this.programTermSectionForm.disable();\n }\n\n /**\n * Load program term section for editing\n */\n private loadProgramTermSectionForEdit(queryData: Record<string, unknown>): void {\n const routeParams = this.route.snapshot.params;\n const queryParams = routeParams['query'];\n \n // Get section ID from query data or route params\n let sectionId: string | undefined;\n if (queryData?.['acapts_id']) {\n sectionId = queryData['acapts_id'] as string;\n } else if (queryParams) {\n const decoded = generateObjectFromString(queryParams);\n sectionId = decoded?.['acapts_id'] as string;\n }\n \n if (!sectionId) {\n console.error('❌ No section ID found in route parameters for edit mode');\n this.error.set('Section ID not found in route parameters');\n return;\n }\n \n console.log('📋 Loading section for edit, ID:', sectionId);\n this.programTermSectionId.set(sectionId);\n this.loading.set(true);\n this.error.set(null);\n \n // Load section data\n this.programTermSectionService.getProgramTermSectionById({ acapts_id: sectionId })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('📋 Section data loaded for edit:', response);\n this.loading.set(false);\n \n if (response?.success && response.data) {\n const section = response.data as AcaPrgTrmSectionResponse & Record<string, unknown>;\n \n // Check if parent term exists\n const parentTermId = typeof section.acapts_parent_class_prog_term_acapt === 'string'\n ? section.acapts_parent_class_prog_term_acapt\n : section.acapts_parent_class_prog_term_acapt?._id;\n \n // Set signal based on whether parent term exists\n this.hasParentTermInEditMode.set(!!parentTermId);\n console.log('📋 Parent term exists:', this.hasParentTermInEditMode(), 'parentTermId:', parentTermId);\n \n // If no parent term, remove required validator\n if (!parentTermId) {\n const parentTermControl = this.programTermSectionForm.get('acapts_parent_class_prog_term_acapt');\n if (parentTermControl) {\n parentTermControl.clearValidators();\n parentTermControl.updateValueAndValidity();\n }\n }\n \n // Set program class and branch IDs for loading dropdowns\n if (section.acapts_class_program_id_acacpm) {\n const programId = typeof section.acapts_class_program_id_acacpm === 'string' \n ? section.acapts_class_program_id_acacpm \n : section.acapts_class_program_id_acacpm?._id;\n if (programId) {\n this.acacpmId.set(programId);\n }\n }\n \n // Access branch ID using bracket notation since it's not in the interface\n const branchIdValue = section['acapts_class_program_branch_id_acabrn'];\n if (branchIdValue) {\n const branchId = typeof branchIdValue === 'string'\n ? branchIdValue\n : (branchIdValue as { _id?: string })?._id;\n if (branchId) {\n this.acabrnId.set(branchId);\n }\n }\n \n // Load dropdowns first\n this.loadDropdownOptions();\n \n // Get program class ID and branch ID for form\n const programClassIdForForm = typeof section.acapts_class_program_id_acacpm === 'string'\n ? section.acapts_class_program_id_acacpm\n : section.acapts_class_program_id_acacpm?._id || '';\n \n const branchIdForForm = branchIdValue \n ? (typeof branchIdValue === 'string' ? branchIdValue : (branchIdValue as { _id?: string })?._id || '')\n : '';\n \n console.log('📋 Edit mode - Program class ID:', programClassIdForForm, 'Branch ID:', branchIdForForm);\n \n // Wait for program classes to load, then patch form\n setTimeout(() => {\n // Find the program class to check its configuration\n const programClass = this.programClasses().find(p => p._id === programClassIdForForm);\n const config = programClass?.acacpm_class_program_id_sygms?.sygms_configuration;\n const hasBranchConfig = config && typeof config === 'object' && 'branchType' in config && config?.branchType === true;\n \n console.log('📋 Edit mode - Program class:', branchIdForForm);\n \n // Patch form with all values including branch ID\n this.programTermSectionForm.patchValue({\n acapts_code: section.acapts_code || '',\n acapts_name: section.acapts_name || '',\n acapts_description: (section['acapts_description'] as string) || '',\n acapts_class_program_id_acacpm: programClassIdForForm,\n acapts_class_program_branch_id_acabrn: branchIdForForm,\n acapts_isactive: section.acapts_isactive ?? true,\n acapts_iscurrent: (section['acapts_iscurrent'] as boolean) ?? false,\n acapts_islocked: section.acapts_islocked ?? false\n }, { emitEvent: true });\n \n // Explicitly call branch API in edit mode if program has branch config\n if (hasBranchConfig && programClassIdForForm) {\n console.log('📚 Edit mode - Explicitly loading branches for program class:', programClassIdForForm);\n this.loadBranchesForProgramClass(programClassIdForForm);\n } else if (!hasBranchConfig && programClassIdForForm) {\n // No branch config, load terms directly\n console.log('📚 Edit mode - No branch config, loading terms directly');\n this.loadTermsForProgramClassAndBranch(programClassIdForForm, null);\n }\n \n // Wait for branches to load and be selected, then set parent term\n setTimeout(() => {\n this.programTermSectionForm.patchValue({\n acapts_parent_class_prog_term_acapt: parentTermId || ''\n }, { emitEvent: false });\n }, 800);\n }, 300);\n } else {\n this.error.set('Section data not found');\n }\n },\n error: (err) => {\n console.error('❌ Error loading section for edit:', err);\n this.loading.set(false);\n this.error.set('Failed to load section data');\n this.notificationService.error('Failed to load section data for editing');\n }\n });\n }\n\n /**\n * Load dropdown options\n */\n private loadDropdownOptions(): void {\n console.log('📋 loadDropdownOptions() called');\n // Load program class options from service\n console.log('📞 Calling loadProgramClasses()...');\n this.loadProgramClasses();\n\n // Load class program branch options (mock data for now - will be loaded when program class is selected)\n this.classProgramBranchOptions.set([]);\n\n // Load class program term options (mock data for now - will be loaded when program class and branch are selected)\n this.classProgramTermOptions.set([]);\n }\n\n /**\n * Load program classes from service\n */\n private loadProgramClasses(): void {\n this.programClassLoading.set(true);\n \n // Use the same service and payload pattern that works in the list component\n const payload: MClassProgramMaster = {\n pagination: false,\n acacpm_isactive: true\n };\n\n console.log('📚 Loading program classes with payload:', payload);\n\n this.classProgramMasterService.getClassProgramMasterList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: classProgramMasterControllerResponse) => {\n console.log('📚 Program classes response:', response);\n this.programClassLoading.set(false);\n \n if (response?.success && response.data) {\n console.log('✅ Program classes loaded:', response.data.length, 'items');\n \n // Store full program class data for configuration checking\n this.programClasses.set(response.data as ProgramClass[]);\n \n // Transform to SelectOption format - only use properties from the model interface\n const options: SelectOption[] = response.data.map((item) => ({\n value: item._id || '',\n label: item.acacpm_alise_title || ''\n }));\n \n this.programClassOptions.set(options);\n \n // Pre-select program class if provided in route\n const acacpmId = this.acacpmId();\n if (acacpmId && !this.isEditMode() && !this.isViewMode()) {\n // Find the program class to check its configuration\n const programClass = response.data.find((p) => p._id === acacpmId);\n const config = programClass?.acacpm_class_program_id_sygms?.sygms_configuration;\n const hasBranchConfig = config && typeof config === 'object' && 'branchType' in config && config?.branchType === true;\n \n console.log('📋 Pre-selecting program class:', acacpmId, 'hasBranchConfig:', hasBranchConfig);\n \n // Use emitEvent: true to trigger valueChanges listener which will check config and load branches/terms\n // But also manually trigger if needed to ensure it works\n setTimeout(() => {\n this.programTermSectionForm.patchValue({\n acapts_class_program_id_acacpm: acacpmId\n }, { emitEvent: true });\n }, 100);\n }\n } else {\n console.warn('⚠️ No program class data received or success is false');\n this.programClassOptions.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading program classes:', error);\n this.programClassLoading.set(false);\n this.programClassOptions.set([]);\n this.notificationService.error('Failed to load program classes');\n }\n });\n }\n\n /**\n * Load branches for a specific program class\n */\n private loadBranchesForProgramClass(programClassId: string): void {\n this.classProgramBranchLoading.set(true);\n \n const payload: AcaClassPrgBranchListPayload = new AcaClassPrgBranchListPayload({\n acabrn_class_program_id_acacpm: programClassId,\n pagination: false\n });\n\n this.classProgramBranchService.getClassProgramBranchList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: classPrgBranchControllerResponse) => {\n console.log('✅ Class program branches loaded for program class:', programClassId, response);\n this.classProgramBranchLoading.set(false);\n \n if (response?.success && response.data) {\n // Transform to SelectOption format\n const options: SelectOption[] = response.data.map((item) => ({\n value: item._id || '',\n label: item.acabrn_name || item.acabrn_code || ''\n }));\n \n this.classProgramBranchOptions.set(options);\n \n // Pre-select branch if provided in route or edit mode\n const acabrnId = this.acabrnId();\n if (acabrnId) {\n // Check if the branch ID exists in the loaded options\n const branchExists = options.some(opt => opt.value === acabrnId);\n if (branchExists) {\n this.programTermSectionForm.patchValue({\n acapts_class_program_branch_id_acabrn: acabrnId\n }, { emitEvent: true });\n \n // The branch valueChanges listener will load terms automatically\n } else {\n console.warn('⚠️ Branch ID not found in loaded options:', acabrnId);\n // Clear terms if branch not found\n this.classProgramTermOptions.set([]);\n this.programTermSectionForm.patchValue({\n acapts_parent_class_prog_term_acapt: ''\n }, { emitEvent: false });\n }\n } else {\n // No branch ID, don't load terms yet - wait for branch selection\n console.log('ℹ️ No branch ID provided, waiting for branch selection');\n this.classProgramTermOptions.set([]);\n this.programTermSectionForm.patchValue({\n acapts_parent_class_prog_term_acapt: ''\n }, { emitEvent: false });\n }\n } else {\n console.warn('⚠️ No branch data received');\n this.classProgramBranchOptions.set([]);\n // Clear terms - wait for branch selection\n this.classProgramTermOptions.set([]);\n this.programTermSectionForm.patchValue({\n acapts_parent_class_prog_term_acapt: ''\n }, { emitEvent: false });\n }\n },\n error: (error: unknown) => {\n console.error('❌ Error loading branches:', error);\n this.classProgramBranchLoading.set(false);\n this.classProgramBranchOptions.set([]);\n // Clear terms - wait for branch selection\n this.classProgramTermOptions.set([]);\n this.programTermSectionForm.patchValue({\n acapts_parent_class_prog_term_acapt: ''\n }, { emitEvent: false });\n }\n });\n }\n\n /**\n * Auto-select term for program when termType=true, termProgramLevelOneConnected=true, and termLevelUpTo <= 1\n */\n private autoSelectTermForProgram(programClassId: string, branchId: string | null): void {\n console.log('🔄 Auto-selecting term for program:', programClassId, 'branch:', branchId);\n \n const payload: MClassProgramTerm = new MClassProgramTerm({\n pageIndex: 0,\n pageSize: 1, // Only need one term\n query: \"\",\n sort: {\n key: 'acapt_sequence',\n order: 'asc'\n },\n acapt_class_program_id_acacpm: programClassId,\n acapt_class_prg_branch_acabrn: branchId || \"\"\n });\n \n this.classProgramTermService.getClassProgramTermList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: classProgramTermControllerResponse) => {\n if (response?.success && response.data && response.data.length > 0) {\n const term = response.data[0] as AcaClassProgramTermReponse;\n let termId = '';\n if (typeof term._id === 'string') {\n termId = term._id;\n } else if (term._id && typeof term._id === 'object') {\n termId = (term._id as { _id?: string })?._id || '';\n }\n \n if (termId) {\n console.log('✅ Auto-selected term:', termId, term.acapt_name);\n // Auto-select the term in the form\n this.programTermSectionForm.patchValue({\n acapts_parent_class_prog_term_acapt: termId\n }, { emitEvent: false });\n }\n } else {\n console.warn('⚠️ No term found for program:', programClassId);\n }\n },\n error: (error: unknown) => {\n console.error('❌ Error auto-selecting term:', error);\n }\n });\n }\n\n /**\n * Load terms for a specific program class and branch\n */\n private loadTermsForProgramClassAndBranch(programClassId: string, branchId: string | null): void {\n this.classProgramTermLoading.set(true);\n \n const payload: MClassProgramTerm = new MClassProgramTerm({\n pageIndex: 0,\n pageSize: 1000,\n query: \"\",\n sort: {\n key: 'acapt_name',\n order: 'asc'\n },\n acapt_class_program_id_acacpm: programClassId,\n acapt_class_prg_branch_acabrn: branchId || \"\"\n });\n\n this.classProgramTermService.getClassProgramTermList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: classProgramTermControllerResponse) => {\n console.log('✅ Class program terms loaded:', response);\n this.classProgramTermLoading.set(false);\n \n if (response?.success && response.data) {\n // Use all terms (not just leaf terms) for tree view to show full hierarchy\n const allTerms = response.data as AcaClassProgramTermReponse[];\n \n console.log('🌳 Total terms loaded:', allTerms.length);\n \n // Transform to SelectOption format while preserving parent relationship for tree view\n const options = allTerms.map((item: AcaClassProgramTermReponse) => {\n // Normalize parent field for tree view compatibility\n let parentId = '';\n if (item.acapt_parent_class_prog_term_acapt) {\n if (typeof item.acapt_parent_class_prog_term_acapt === 'object') {\n parentId = item.acapt_parent_class_prog_term_acapt._id || '';\n } else if (typeof item.acapt_parent_class_prog_term_acapt === 'string') {\n parentId = item.acapt_parent_class_prog_term_acapt || '';\n }\n }\n \n return {\n _id: item._id || '',\n value: item._id || '',\n label: item.acapt_name || item.acapt_code || '',\n acapt_name: item.acapt_name || '',\n acapt_parent_class_prog_term_acapt: parentId\n };\n });\n \n this.classProgramTermOptions.set(options);\n \n // Pre-select parent term if provided in route\n const acaptParentId = this.acaptParentId();\n if (acaptParentId && !this.isEditMode() && !this.isViewMode()) {\n setTimeout(() => {\n this.programTermSectionForm.patchValue({\n acapts_parent_class_prog_term_acapt: acaptParentId\n }, { emitEvent: false });\n }, 100);\n }\n } else {\n console.warn('⚠️ No term data received');\n this.classProgramTermOptions.set([]);\n }\n },\n error: (error: unknown) => {\n console.error('❌ Error loading terms:', error);\n this.classProgramTermLoading.set(false);\n this.classProgramTermOptions.set([]);\n }\n });\n }\n\n /**\n * Tab configuration\n */\n programTermSectionTabs() {\n return [\n { id: 'basic', label: 'Section Details', icon: 'group' },\n { id: 'configuration', label: 'Configuration', icon: 'tune' }\n ];\n }\n\n onTabChange(tab: TabItem) {\n this.activeTab.set(tab.id);\n }\n\n onSubmit() {\n if (this.isViewMode()) {\n this.router.navigate(['/control-panel/class-program-term']);\n return;\n }\n\n if (this.programTermSectionForm.invalid) {\n this.notificationService.error('Please fill in all required fields correctly.');\n this.markFormGroupTouched();\n return;\n }\n\n this.loading.set(true);\n this.error.set(null);\n\n const formData = this.programTermSectionForm.value;\n console.log('📤 Program Term Section Form Data:', formData);\n\n // Helper function to convert empty strings to null for FK fields\n const toNullIfEmpty = (value: unknown): string | null => {\n if (!value) {\n return null;\n }\n if (typeof value === 'string') {\n return value.trim() === '' ? null : value;\n }\n return null;\n };\n\n // Build payload for API using the model type - include all form fields\n // For FK fields, use null instead of empty string\n const payloadData: Partial<AcaPrgTrmSection> & Record<string, unknown> = {\n acapts_code: formData.acapts_code || '',\n acapts_name: formData.acapts_name || '',\n acapts_class_program_id_acacpm: toNullIfEmpty(formData.acapts_class_program_id_acacpm) as string | undefined,\n acapts_parent_class_prog_term_acapt: toNullIfEmpty(formData.acapts_parent_class_prog_term_acapt) as string | undefined,\n acapts_isactive: formData.acapts_isactive ?? true,\n acapts_islocked: formData.acapts_islocked ?? false,\n // Include all form fields even if optional\n acapts_description: formData.acapts_description || '',\n acapts_class_program_branch_id_acabrn: toNullIfEmpty(formData.acapts_class_program_branch_id_acabrn) as string | undefined,\n acapts_iscurrent: formData.acapts_iscurrent ?? false\n };\n \n // Add _id for edit mode\n if (this.isEditMode() && this.programTermSectionId()) {\n payloadData._id = this.programTermSectionId();\n }\n \n const payload: MPrgTrmSectionInsertUpdatePayload = new MPrgTrmSectionInsertUpdatePayload(payloadData as AcaPrgTrmSection);\n\n console.log('📤 API Payload:', payload);\n\n // Call API to save\n this.programTermSectionService.saveProgramTermSection(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: prgTrmSectionInsertUpdateControllerResponse) => {\n console.log('✅ Save response:', response);\n this.loading.set(false);\n\n if (response?.success) {\n const action = this.isEditMode() ? 'updated' : 'created';\n this.notificationService.success(`Program term section has been ${action} successfully.`);\n // Navigate back to listing page - it will auto-reload via router events subscription\n this.router.navigate(['/control-panel/class-program-term']);\n } else {\n this.error.set(response?.message || 'Failed to save program term section');\n this.notificationService.error(response?.message || 'Failed to save program term section');\n }\n },\n error: (error: unknown) => {\n console.error('❌ Error saving program term section:', error);\n this.loading.set(false);\n const errorMessage = error && typeof error === 'object' && 'error' in error \n ? (error.error && typeof error.error === 'object' && 'message' in error.error \n ? String(error.error.message) \n : 'message' in error ? String(error.message) : 'Failed to save program term section')\n : error && typeof error === 'object' && 'message' in error\n ? String(error.message)\n : 'Failed to save program term section';\n this.error.set(errorMessage);\n this.notificationService.error(errorMessage);\n }\n });\n }\n\n /**\n * Mark all form controls as touched to trigger validation display\n */\n private markFormGroupTouched(): void {\n Object.keys(this.programTermSectionForm.controls).forEach(key => {\n const control = this.programTermSectionForm.get(key);\n control?.markAsTouched();\n });\n }\n\n resetForm() {\n this.programTermSectionForm.reset({\n acapts_isactive: true,\n acapts_iscurrent: false,\n acapts_islocked: false\n });\n }\n\n /**\n * Go back to program term section list\n */\n goBackToProgramTermSectionList(): void {\n this.router.navigate(['/control-panel/class-program-term']);\n }\n\n /**\n * Cancel form and navigate back to listing page\n */\n cancelForm(): void {\n this.goBackToProgramTermSectionList();\n }\n\n /**\n * Get page title based on mode\n */\n getPageTitle(): string {\n if (this.isViewMode()) return 'View Program Term Section';\n return this.isEditMode() ? 'Edit Program Term Section' : 'Create New Program Term Section';\n }\n\n /**\n * Cleanup when component is destroyed\n */\n ngOnDestroy(): void {\n console.log('🧹 ProgramTermSectionCreateComponent: Cleaning up component state');\n\n // Reset all signals to their initial state\n this.activeTab.set('basic');\n this.loading.set(false);\n this.error.set(null);\n this.programTermSectionId.set('');\n this.isEditMode.set(false);\n this.programClassOptions.set([]);\n this.classProgramBranchOptions.set([]);\n this.classProgramTermOptions.set([]);\n\n // Reset form to initial state\n this.resetForm();\n\n console.log('🧹 ProgramTermSectionCreateComponent: Component state cleaned up');\n }\n}\n","<!-- \n PROGRAM TERM SECTION 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: 'program_term_section' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent tw-max-w-full tw-overflow-hidden\" [formGroup]=\"programTermSectionForm\"\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Tab Navigation -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-max-w-full tw-px-2 tw-py-0 tw-overflow-x-hidden\">\n <div class=\"tw-w-full tw-max-w-full tw-overflow-x-hidden\">\n <cide-ele-tab [tabs]=\"programTermSectionTabs()\" [activeTabId]=\"activeTab()\" size=\"md\" variant=\"default\"\n (tabChange)=\"onTabChange($event)\">\n </cide-ele-tab>\n </div>\n </div>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6 tw-overflow-y-auto tw-h-full\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n @switch (activeTab()) {\n\n @case ('basic') {\n <!-- Basic Program Term Section Information -->\n <div class=\"tw-space-y-6\">\n <!-- Program Class, Specialization, and Term at the top -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-6\" \n [class.md:tw-grid-cols-2]=\"(!showBranchDropdown() && (!isEditMode() || (isEditMode() && hasParentTermInEditMode()))) || (isEditMode() && !hasParentTermInEditMode())\"\n [class.md:tw-grid-cols-3]=\"showBranchDropdown() && (!isEditMode() || (isEditMode() && hasParentTermInEditMode()))\">\n <cide-ele-select \n label=\"Program Class *\" \n formControlName=\"acapts_class_program_id_acacpm\" \n placeholder=\"Select program class\"\n [options]=\"programClassOptions()\"\n [loading]=\"programClassLoading()\"\n [searchable]=\"true\"\n [disabled]=\"isViewMode() || isEditMode()\"\n size=\"md\">\n </cide-ele-select>\n\n @if (showBranchDropdown()) {\n <cide-ele-select \n label=\"Specialization\" \n formControlName=\"acapts_class_program_branch_id_acabrn\" \n placeholder=\"Select specialization\"\n [options]=\"classProgramBranchOptions()\"\n [loading]=\"classProgramBranchLoading()\"\n [searchable]=\"true\"\n [disabled]=\"isViewMode() || isEditMode()\"\n size=\"md\">\n </cide-ele-select>\n }\n\n @if ((!isEditMode() || (isEditMode() && hasParentTermInEditMode())) && showTermDropdown()) {\n <cide-ele-select \n label=\"Class Program Term *\" \n formControlName=\"acapts_parent_class_prog_term_acapt\" \n placeholder=\"Select class program term\"\n [options]=\"classProgramTermOptions()\"\n [loading]=\"classProgramTermLoading()\"\n [searchable]=\"true\"\n [disabled]=\"isViewMode() || isEditMode()\"\n valueKey=\"_id\"\n labelKey=\"acapt_name\"\n [treeView]=\"{ enabled: true, primaryKey: '_id', foreignKey: 'acapt_parent_class_prog_term_acapt' }\"\n size=\"md\">\n </cide-ele-select>\n }\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"Section Code *\" formControlName=\"acapts_code\" placeholder=\"e.g., SEC-A, SEC-B\"\n size=\"md\" leadingIcon=\"code\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Section Name *\" formControlName=\"acapts_name\"\n placeholder=\"e.g., Section A, Section B\" size=\"md\" leadingIcon=\"group\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-textarea label=\"Description\" formControlName=\"acapts_description\"\n placeholder=\"Enter detailed description of the section...\" rows=\"3\" size=\"md\">\n </cide-ele-textarea>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-6\">\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acapts_isactive\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this section</span>\n </div>\n </div>\n\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acapts_iscurrent\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Current</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Mark as current section</span>\n </div>\n </div>\n\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acapts_islocked\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n </div>\n </div>\n }\n\n @case ('configuration') {\n <!-- Section Configuration -->\n <div\n class=\"tw-bg-gradient-to-r tw-from-teal-50 tw-to-cyan-50 tw-border tw-border-teal-200 tw-rounded-xl tw-p-6\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-6\">\n <div class=\"tw-flex tw-items-center tw-gap-3\">\n <div class=\"tw-bg-teal-100 tw-p-2 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-6 tw-h-6\">tune</cide-ele-icon>\n </div>\n <div>\n <h6 class=\"tw-text-lg tw-font-semibold tw-text-teal-900 tw-m-0\">Section Configuration</h6>\n <p class=\"tw-text-sm tw-text-teal-600 tw-m-0\">Configure section-specific settings and parameters</p>\n </div>\n </div>\n </div>\n\n <div class=\"tw-space-y-4\">\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-p-4\">\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-mb-3\">Section Settings</h6>\n <div class=\"tw-space-y-3\">\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">people</cide-ele-icon>\n <div>\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Student Capacity</p>\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Configure maximum number of students for this section</p>\n </div>\n </div>\n \n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">schedule</cide-ele-icon>\n <div>\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Schedule Settings</p>\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Configure class timings and schedule preferences</p>\n </div>\n </div>\n\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">room</cide-ele-icon>\n <div>\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Room Assignment</p>\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Assign specific rooms or classroom preferences</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n }\n </div>\n\n <!-- Error Display -->\n @if (error()) {\n <div class=\"tw-mt-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-lg\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon variant=\"red\" size=\"sm\">error</cide-ele-icon>\n <span class=\"tw-text-sm tw-font-medium tw-text-red-800\">{{ error() }}</span>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-justify-end 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=\"button\" variant=\"secondary\" (click)=\"cancelForm()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || programTermSectionForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ isEditMode() ? 'Update Program Term Section' : 'Create Program Term Section' }}\n </button>\n </div>\n </div>\n </div>\n </form>\n</cide-lyt-shared-wrapper>\n\n","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Router, ActivatedRoute, NavigationEnd } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter } from 'rxjs';\nimport { CideEleDataGridComponent, CideIconComponent, CideEleButtonComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, NotificationService, ConfirmationService, CideSelectComponent } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { \n type MPrgTrmSection,\n type MPrgTrmSectionDeletePayload,\n type MPrgTrmSectionToggleStatusPayload,\n type AcaPrgTrmSectionResponse,\n MClassProgramTerm,\n MClassProgramMaster,\n type classProgramMasterControllerResponse,\n AcaClassPrgBranchListPayload,\n type classPrgBranchControllerResponse,\n generateStringFromObject\n} from 'cloud-ide-lms-model';\nimport { CideLytProgramTermSectionService } from '../../services/program-term-section.service';\nimport { CLASS_PROGRAM_MASTER_SERVICE_TOKEN, type IClassProgramMasterService } from 'cloud-ide-shared';\nimport { CideLytClassProgramBranchService } from '../../../class-program-branch-management/services/class-program-branch.service';\nimport { CideLytClassProgramTermService } from '../../../class-program-term-management/services/class-program-term.service';\n\n// Use the proper model type from cloud-ide-lms-model\ntype ProgramTermSection = AcaPrgTrmSectionResponse;\n\ninterface ProgramClass {\n _id?: string;\n acacpm_code?: string;\n acacpm_alise_title?: string;\n acacpm_name?: string;\n acacpm_description?: string;\n acacpm_class_program_id_sygms?: any;\n}\n\ninterface ClassProgramBranch {\n _id?: string;\n acabrn_name?: string;\n acabrn_code?: string;\n}\n\ninterface ClassProgramTerm {\n _id?: string;\n acapt_code?: string;\n acapt_name?: string;\n acapt_class_program_id_acacpm?: string | {\n _id?: string;\n };\n acapt_class_program_branch_id_acabrn?: string | {\n _id?: string;\n };\n acapt_parent_class_prog_term_acapt?: string | {\n _id?: string;\n };\n children?: ClassProgramTerm[];\n level?: number;\n isExpanded?: boolean;\n hasChildren?: boolean;\n}\n\ninterface ClassProgramConfiguration {\n branchType?: boolean;\n semesterType?: boolean;\n termType?: boolean;\n termLevelUpTo?: number;\n termProgramLevelOneConnected?: boolean;\n}\n\n@Component({\n selector: 'cide-academics-program-term-section-list',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n CideEleDataGridComponent,\n CideIconComponent,\n CideEleButtonComponent,\n CideEleDropdownComponent,\n CideSelectComponent,\n CideLytSharedWrapperComponent\n ],\n templateUrl: './program-term-section-list.component.html',\n styles: [`\n :host {\n height: 100%;\n display: flex;\n flex-direction: column;\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 ProgramTermSectionListComponent implements OnInit {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private appState = inject(AppStateHelperService);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\n private programTermSectionService = inject(CideLytProgramTermSectionService);\n private classProgramMasterService = inject(CLASS_PROGRAM_MASTER_SERVICE_TOKEN);\n private classProgramBranchService = inject(CideLytClassProgramBranchService);\n private classProgramTermService = inject(CideLytClassProgramTermService);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n programTermSectionDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('programTermSectionDetailsRendererTemplate');\n programTermSectionStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('programTermSectionStatusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n programClassRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('programClassRendererTemplate');\n termSpecializationRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('termSpecializationRendererTemplate');\n classProgramTermRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('classProgramTermRendererTemplate');\n parentClassProgramTermRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('parentClassProgramTermRendererTemplate');\n\n // Computed template renderers for grid\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n programTermSectionDetailsRenderer: this.programTermSectionDetailsRendererTemplate(),\n programTermSectionStatusRenderer: this.programTermSectionStatusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate(),\n programClassRenderer: this.programClassRendererTemplate(),\n termSpecializationRenderer: this.termSpecializationRendererTemplate(),\n classProgramTermRenderer: this.classProgramTermRendererTemplate(),\n parentClassProgramTermRenderer: this.parentClassProgramTermRendererTemplate()\n }));\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n programTermSections = signal<ProgramTermSection[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Filter dropdown signals\n classProgramMasters = signal<ProgramClass[]>([]);\n classProgramMastersLoading = signal<boolean>(false);\n selectedClassProgram = signal<ProgramClass | null>(null);\n classProgramBranches = signal<ClassProgramBranch[]>([]);\n classProgramBranchesLoading = signal<boolean>(false);\n selectedProgramClassId = signal<string | null>(null);\n selectedBranchId = signal<string | null>(null);\n classProgramTerms = signal<ClassProgramTerm[]>([]);\n classProgramTermsLoading = signal<boolean>(false);\n selectedTermId = signal<string | null>(null);\n\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 // Computed signals for dropdown options\n // Transform program classes to ensure labels are always present\n classProgramMastersOptions = computed(() => {\n const programs = this.classProgramMasters();\n return programs.map(program => ({\n ...program,\n // Ensure label is always available - use alise_title or fallback to name\n displayLabel: program.acacpm_alise_title || program.acacpm_name || program.acacpm_code || ''\n }));\n });\n classProgramBranchesOptions = computed(() => this.classProgramBranches());\n \n // Transform class program terms to SelectOption format for dropdown\n // Show all terms (not just leaf terms) for tree view to display full hierarchy\n classProgramTermOptions = computed(() => {\n const terms = this.classProgramTerms();\n if (!terms || terms.length === 0) return [];\n \n // Transform to SelectOption format with parent field for tree view\n // Use all terms to show complete hierarchy in tree view\n return terms.map(term => {\n const parentId = typeof term.acapt_parent_class_prog_term_acapt === 'string'\n ? term.acapt_parent_class_prog_term_acapt\n : term.acapt_parent_class_prog_term_acapt?._id;\n \n return {\n value: term._id || '',\n label: term.acapt_name || term.acapt_code || 'N/A',\n _id: term._id || '',\n acapt_name: term.acapt_name || '',\n acapt_parent_class_prog_term_acapt: parentId || ''\n };\n });\n });\n \n showBranchDropdown = computed(() => {\n const selectedProgram = this.selectedClassProgram();\n if (!selectedProgram) return false;\n // Check if program has branchType configuration\n const config = selectedProgram?.acacpm_class_program_id_sygms?.sygms_configuration;\n return config && typeof config === 'object' && 'branchType' in config && config?.branchType === true;\n });\n\n // Computed signal to check if term dropdown should be shown\n // Hide term dropdown if termType=true, termProgramLevelOneConnected=true, and termLevelUpTo <= 1\n showTermDropdown = computed(() => {\n const selectedProgram = this.selectedClassProgram();\n if (!selectedProgram) return true; // Show by default if no program selected\n \n const config = selectedProgram?.acacpm_class_program_id_sygms?.sygms_configuration;\n if (!config || typeof config !== 'object') return true;\n \n // If termType=true AND termProgramLevelOneConnected=true AND termLevelUpTo <= 1, hide dropdown\n if (config.termType === true && \n config.termProgramLevelOneConnected === true && \n config.termLevelUpTo !== undefined && \n config.termLevelUpTo <= 1) {\n return false;\n }\n \n return true; // Show dropdown by default\n });\n\n // Derived list filtered by searchTerm and dropdown selections\n filteredProgramTermSections = computed(() => {\n const q = (this.searchTerm() || '').toLowerCase().trim();\n const items = this.programTermSections() || [];\n let filtered = items;\n\n // Filter by class program\n const selectedProgramId = this.selectedProgramClassId();\n if (selectedProgramId) {\n filtered = filtered.filter(pts => {\n const programId = typeof pts.acapts_class_program_id_acacpm === 'string'\n ? pts.acapts_class_program_id_acacpm\n : pts.acapts_class_program_id_acacpm?._id;\n return programId === selectedProgramId;\n });\n }\n\n // Filter by branch if selected\n const selectedBranch = this.selectedBranchId();\n if (selectedBranch) {\n filtered = filtered.filter(pts => {\n const branchId = typeof pts.acapts_class_program_branch_id_acabrn === 'string'\n ? pts.acapts_class_program_branch_id_acabrn\n : pts.acapts_class_program_branch_id_acabrn?._id;\n return branchId === selectedBranch;\n });\n }\n\n // Filter by program term if selected\n const selectedTerm = this.selectedTermId();\n if (selectedTerm) {\n filtered = filtered.filter(pts => {\n const termId = typeof pts.acapts_parent_class_prog_term_acapt === 'string'\n ? pts.acapts_parent_class_prog_term_acapt\n : pts.acapts_parent_class_prog_term_acapt?._id;\n return termId === selectedTerm;\n });\n }\n\n // Filter by search term\n if (q) {\n filtered = filtered.filter(pts => {\n const name = (pts.acapts_name || '').toLowerCase();\n const code = (pts.acapts_code || '').toLowerCase();\n const description = (pts.acapts_description || '').toLowerCase();\n return name.includes(q) || code.includes(q) || description.includes(q);\n });\n }\n\n return filtered;\n });\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ProgramTermSection>>({\n id: 'program-term-section-list-grid',\n columns: [\n {\n key: 'details',\n header: 'Section Details',\n type: 'custom',\n width: '250px',\n truncate: true,\n align: 'left',\n renderer: 'programTermSectionDetailsRenderer',\n hidden: true // Hidden from display\n },\n {\n key: 'acapts_code',\n header: 'Code',\n type: 'text',\n width: '120px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'acapts_class_program_id_acacpm',\n header: 'Program Class',\n type: 'custom',\n width: '200px',\n truncate: true,\n align: 'left',\n renderer: 'programClassRenderer',\n groupable: true,\n valueGetter: 'acapts_class_program_id_acacpm.acacpm_alise_title',\n dataValueGetter: 'acapts_class_program_id_acacpm.acacpm_alise_title',\n hidden: true // Hidden from display but available for grouping - grouped first\n },\n {\n key: 'term_specialization',\n header: 'Term Specialization',\n type: 'custom',\n width: '200px',\n truncate: true,\n align: 'left',\n renderer: 'termSpecializationRenderer',\n groupable: true,\n valueGetter: 'acapts_parent_class_prog_term_acapt.acapt_class_program_branch_id_acabrn.acabrn_name',\n dataValueGetter: 'acapts_parent_class_prog_term_acapt.acapt_class_program_branch_id_acabrn.acabrn_name',\n hidden: true // Hidden from display but available for grouping - grouped second\n },\n {\n key: 'parent_term',\n header: 'Parent Class Program Term',\n type: 'custom',\n width: '200px',\n truncate: true,\n align: 'left',\n renderer: 'parentClassProgramTermRenderer',\n groupable: true,\n valueGetter: 'acapts_parent_class_prog_term_acapt.acapt_parent_class_prog_term_acapt.acapt_name',\n dataValueGetter: 'acapts_parent_class_prog_term_acapt.acapt_parent_class_prog_term_acapt.acapt_name',\n hidden: true // Hidden from display but available for grouping - grouped third\n },\n {\n key: 'acapts_parent_class_prog_term_acapt',\n header: 'Class Program Term',\n type: 'custom',\n width: '200px',\n truncate: true,\n align: 'left',\n renderer: 'classProgramTermRenderer',\n groupable: true,\n valueGetter: 'acapts_parent_class_prog_term_acapt.acapt_name',\n dataValueGetter: 'acapts_parent_class_prog_term_acapt.acapt_name'\n },\n {\n key: 'acapts_isactive',\n header: 'Status',\n type: 'custom',\n width: '120px',\n truncate: false,\n align: 'center',\n renderer: 'programTermSectionStatusRenderer'\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 program term sections...',\n searchableColumns: ['acapts_name', 'acapts_code', 'acapts_description'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50,\n maxHeight: undefined // Explicitly no max-height - grid should fill available space\n },\n fullHeight: true,\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none',\n columnMenu: {\n enabled: true,\n showGroupBy: true,\n showFilter: true,\n showSort: true\n }\n });\n\n /**\n * Get action dropdown items\n */\n getActionDropdownItems(programTermSection: ProgramTermSection): DropdownItem[] {\n const items: DropdownItem[] = [\n {\n id: 'view',\n label: 'View Details',\n icon: 'visibility',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700'\n },\n {\n id: 'edit',\n label: 'Edit Section',\n icon: 'edit',\n iconColor: 'tw-text-blue-400',\n textColor: 'tw-text-blue-700'\n },\n {\n id: 'toggleStatus',\n label: programTermSection?.acapts_isactive ? 'Deactivate' : 'Activate',\n icon: programTermSection?.acapts_isactive ? 'toggle_off' : 'toggle_on',\n iconColor: programTermSection?.acapts_isactive ? 'tw-text-orange-400' : 'tw-text-green-400',\n textColor: programTermSection?.acapts_isactive ? 'tw-text-orange-700' : 'tw-text-green-700'\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n iconColor: 'tw-text-red-400',\n textColor: 'tw-text-red-700'\n }\n ];\n\n return items;\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, programTermSection: ProgramTermSection): void {\n switch (item.id) {\n case 'view':\n this.viewProgramTermSection(programTermSection);\n break;\n case 'edit':\n this.editProgramTermSection(programTermSection);\n break;\n case 'toggleStatus':\n this.toggleProgramTermSectionStatus(programTermSection);\n break;\n case 'delete':\n this.deleteProgramTermSection(programTermSection);\n break;\n }\n }\n\n ngOnInit(): void {\n this.initializeBreadcrumbData();\n this.loadClassProgramMasters();\n this.loadProgramTermSections();\n \n // Subscribe to router events to reload data when navigating back to this page\n this.router.events\n .pipe(\n filter(event => event instanceof NavigationEnd),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe((event: NavigationEnd) => {\n // Reload data when navigating to the listing page\n if (event.urlAfterRedirects.includes('/class-program-term') && !event.urlAfterRedirects.includes('/create') && !event.urlAfterRedirects.includes('/edit') && !event.urlAfterRedirects.includes('/view')) {\n console.log('🔄 Navigation detected to listing page, reloading data...');\n this.loadProgramTermSections();\n }\n });\n }\n\n /**\n * Initialize breadcrumb data for list view\n */\n private initializeBreadcrumbData(): void {\n this.breadcrumbData.set([\n {\n id: 'list',\n label: 'List',\n icon: 'list',\n url: undefined\n }\n ]);\n }\n\n /**\n * Load program term sections data\n */\n private loadProgramTermSections(): void {\n this.loading.set(true);\n this.error.set(null);\n\n const payload: MPrgTrmSection = {\n pageIndex: 0,\n pageSize: 1000,\n query: this.searchTerm() || \"\",\n sort: {\n key: 'acapts_name',\n order: 'asc'\n }\n };\n\n // Add filter parameters if selected\n const selectedProgramId = this.selectedProgramClassId();\n if (selectedProgramId) {\n payload.acapts_class_program_id_acacpm = selectedProgramId;\n }\n\n const selectedBranchId = this.selectedBranchId();\n if (selectedBranchId) {\n payload.acapts_class_program_branch_id_acabrn = selectedBranchId;\n }\n\n const selectedTermId = this.selectedTermId();\n if (selectedTermId) {\n payload.acapts_parent_class_prog_term_acapt = selectedTermId;\n console.log('🔍 Filtering sections by program term:', selectedTermId);\n }\n\n this.programTermSectionService.getProgramTermSectionList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n console.log('📚 Program term sections loaded:', response.data);\n // Log first item structure for debugging\n if (response.data.length > 0) {\n const firstItem = response.data[0];\n console.log('🔍 First item structure:', {\n _id: firstItem?._id,\n acapts_name: firstItem?.acapts_name,\n programType: typeof firstItem?.acapts_class_program_id_acacpm,\n programValue: firstItem?.acapts_class_program_id_acacpm,\n termType: typeof firstItem?.acapts_parent_class_prog_term_acapt,\n termValue: firstItem?.acapts_parent_class_prog_term_acapt\n });\n }\n // Normalize sections to ensure object structures are preserved for grouping\n const normalizedSections = this.normalizeSectionsForGrouping(response.data);\n this.programTermSections.set(normalizedSections);\n this.updateGridData();\n } else {\n console.warn('⚠️ No program term section data received');\n this.programTermSections.set([]);\n this.updateGridData();\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error loading program term sections:', error);\n this.error.set('Failed to load program term sections');\n this.loading.set(false);\n this.notificationService.error('Failed to load program term sections');\n }\n });\n }\n\n /**\n * Normalize sections to ensure class program and term object structures are preserved for grouping\n */\n private normalizeSectionsForGrouping(sections: ProgramTermSection[]): ProgramTermSection[] {\n return sections.map(section => {\n const normalizedSection = { ...section };\n \n // Ensure class program object structure is preserved for grouping\n if (normalizedSection.acapts_class_program_id_acacpm) {\n if (typeof normalizedSection.acapts_class_program_id_acacpm === 'object') {\n // Ensure acacpm_alise_title exists, fallback to acacpm_name\n const programClass = normalizedSection.acapts_class_program_id_acacpm as any;\n if (!programClass.acacpm_alise_title && programClass.acacpm_name) {\n programClass.acacpm_alise_title = programClass.acacpm_name;\n }\n } else if (typeof normalizedSection.acapts_class_program_id_acacpm === 'string') {\n // If it's a string ID, we can't group by it - this should not happen with proper API response\n console.warn('⚠️ Class program is a string ID, not an object. Grouping may not work correctly.');\n }\n }\n \n // Ensure program term object structure is preserved for grouping\n if (normalizedSection.acapts_parent_class_prog_term_acapt) {\n if (typeof normalizedSection.acapts_parent_class_prog_term_acapt === 'object') {\n // Ensure acapt_name exists for grouping\n const programTerm = normalizedSection.acapts_parent_class_prog_term_acapt as any;\n if (!programTerm.acapt_name && programTerm.acapt_code) {\n programTerm.acapt_name = programTerm.acapt_code;\n }\n \n // Ensure parent term structure is preserved if it exists\n // This is the parent of the term (e.g., if term is \"Semester One\", parent might be \"First Year\")\n if (programTerm.acapt_parent_class_prog_term_acapt) {\n if (typeof programTerm.acapt_parent_class_prog_term_acapt === 'object') {\n const parentTerm = programTerm.acapt_parent_class_prog_term_acapt as any;\n if (!parentTerm.acapt_name && parentTerm.acapt_code) {\n parentTerm.acapt_name = parentTerm.acapt_code;\n }\n // Ensure parent term has all necessary fields for display\n if (!parentTerm.acapt_code && parentTerm.acapt_name) {\n parentTerm.acapt_code = parentTerm.acapt_name;\n }\n } else if (typeof programTerm.acapt_parent_class_prog_term_acapt === 'string') {\n // If parent term is a string ID, we can't display it - log warning\n console.warn('⚠️ Parent term is a string ID, not an object. Cannot display parent term name.');\n }\n }\n \n // Ensure term's specialization (branch) structure is preserved if it exists\n if (programTerm.acapt_class_program_branch_id_acabrn) {\n if (typeof programTerm.acapt_class_program_branch_id_acabrn === 'object') {\n const termBranch = programTerm.acapt_class_program_branch_id_acabrn as any;\n if (!termBranch.acabrn_name && termBranch.acabrn_code) {\n termBranch.acabrn_name = termBranch.acabrn_code;\n }\n }\n }\n } else if (typeof normalizedSection.acapts_parent_class_prog_term_acapt === 'string') {\n // If it's a string ID, we can't group by it - this should not happen with proper API response\n console.warn('⚠️ Program term is a string ID, not an object. Grouping may not work correctly.');\n }\n } else {\n // No program term - create a placeholder object for consistent grouping\n // This ensures sections without a term are grouped together\n (normalizedSection as any).acapts_parent_class_prog_term_acapt = {\n _id: null,\n acapt_name: 'No Term'\n };\n }\n \n // Ensure specialization (branch) object structure is preserved\n if (normalizedSection.acapts_class_program_branch_id_acabrn) {\n if (typeof normalizedSection.acapts_class_program_branch_id_acabrn === 'object') {\n // Ensure acabrn_name exists\n const branch = normalizedSection.acapts_class_program_branch_id_acabrn as any;\n if (!branch.acabrn_name && branch.acabrn_code) {\n branch.acabrn_name = branch.acabrn_code;\n }\n }\n }\n \n return normalizedSection;\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(): void {\n this.gridConfig.update(config => ({\n ...config,\n data: this.filteredProgramTermSections()\n }));\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ProgramTermSection>): 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.loadProgramTermSections();\n }\n break;\n case 'search':\n this.searchTerm.set(event.data as string);\n this.updateGridData();\n break;\n case 'refresh':\n this.loadProgramTermSections();\n break;\n }\n }\n\n /**\n * Create new program term section\n */\n createProgramTermSection(): void {\n console.log('🔄 Create Program Term Section button clicked');\n \n // Build query params with selected program class, branch, and term if available\n const queryParams: any = {};\n \n const selectedProgramClassId = this.selectedProgramClassId();\n if (selectedProgramClassId) {\n queryParams.acacpm_id = selectedProgramClassId;\n }\n \n const selectedBranchId = this.selectedBranchId();\n if (selectedBranchId) {\n queryParams.acabrn_id = selectedBranchId;\n }\n \n const selectedTermId = this.selectedTermId();\n if (selectedTermId) {\n queryParams.acapt_id = selectedTermId;\n }\n \n console.log('📋 Query params for create:', queryParams);\n \n // If we have any query params, include them in the route\n if (Object.keys(queryParams).length > 0) {\n const queryString = generateStringFromObject(queryParams);\n console.log('🔗 Navigating to create with query:', queryString);\n this.router.navigate(['/control-panel/class-program-term/create', queryString]);\n } else {\n // No filters selected, navigate without query params\n console.log('🔗 Navigating to create without query params');\n this.router.navigate(['/control-panel/class-program-term/create']);\n }\n }\n\n /**\n * View program term section details\n */\n viewProgramTermSection(programTermSection: ProgramTermSection): void {\n if (!programTermSection._id) {\n this.notificationService.error('Invalid section selected');\n return;\n }\n \n const queryParams = generateStringFromObject({ acapts_id: programTermSection._id });\n this.router.navigate(['/control-panel/class-program-term/view', queryParams]);\n }\n\n /**\n * Edit program term section\n */\n editProgramTermSection(programTermSection: ProgramTermSection): void {\n if (!programTermSection._id) {\n this.notificationService.error('Invalid section selected');\n return;\n }\n \n const queryParams = generateStringFromObject({ acapts_id: programTermSection._id });\n this.router.navigate(['/control-panel/class-program-term/edit', queryParams]);\n }\n\n /**\n * Delete program term section\n */\n deleteProgramTermSection(programTermSection: ProgramTermSection): void {\n this.confirmationService.confirmDelete(programTermSection?.acapts_name).then((confirmed: boolean) => {\n if (confirmed) {\n this.loading.set(true);\n const payload: MPrgTrmSectionDeletePayload = {\n acapts_id: programTermSection._id!\n };\n\n this.programTermSectionService.deleteProgramTermSection(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.programTermSections.update(sections => \n sections.filter(pts => pts._id !== programTermSection._id)\n );\n this.updateGridData();\n this.notificationService.success('Program term section deleted successfully.');\n } else {\n this.notificationService.error('Failed to delete program term section.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error deleting program term section:', error);\n this.notificationService.error('Failed to delete program term section.');\n this.loading.set(false);\n }\n });\n }\n });\n }\n\n /**\n * Toggle program term section status\n */\n toggleProgramTermSectionStatus(programTermSection: ProgramTermSection): void {\n this.loading.set(true);\n const payload: MPrgTrmSectionToggleStatusPayload = {\n acapts_id: programTermSection._id!\n };\n\n this.programTermSectionService.toggleProgramTermSectionStatus(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.programTermSections.update(sections => \n sections.map(pts => \n pts._id === programTermSection._id \n ? { ...pts, acapts_isactive: !pts.acapts_isactive }\n : pts\n )\n );\n this.updateGridData();\n this.notificationService.success(`Program term section ${programTermSection?.acapts_isactive ? 'deactivated' : 'activated'} successfully.`);\n } else {\n this.notificationService.error('Failed to toggle program term section status.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error toggling program term section status:', error);\n this.notificationService.error('Failed to toggle program term section status.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Refresh data\n */\n refreshData(): void {\n this.loadProgramTermSections();\n }\n\n /**\n * Load class program masters\n */\n private loadClassProgramMasters(): void {\n this.classProgramMastersLoading.set(true);\n \n // Use simpler payload pattern that works in other components\n const payload: MClassProgramMaster = {\n pagination: false,\n acacpm_isactive: true\n };\n\n console.log('📚 Loading class program masters with payload:', payload);\n\n this.classProgramMasterService.getClassProgramMasterList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: classProgramMasterControllerResponse) => {\n console.log('📚 Class program masters response:', response);\n if (response?.success && response.data) {\n console.log('✅ Class program masters loaded:', response.data.length, 'items');\n this.classProgramMasters.set(response.data as ProgramClass[]);\n } else {\n console.warn('⚠️ No class program master data received or success is false');\n this.classProgramMasters.set([]);\n }\n this.classProgramMastersLoading.set(false);\n },\n error: (error) => {\n console.error('❌ Error loading class program masters:', error);\n this.classProgramMasters.set([]);\n this.classProgramMastersLoading.set(false);\n this.notificationService.error('Failed to load program classes');\n }\n });\n }\n\n /**\n * Handle class program selection change\n */\n onClassProgramChange(programClassId: string | number | string[] | null): void {\n const programId = typeof programClassId === 'string' ? programClassId : (programClassId ? String(programClassId) : null);\n console.log('🔄 Class Program changed:', programId);\n \n this.selectedProgramClassId.set(programId);\n \n if (programId) {\n const selectedProgram = this.classProgramMasters().find(p => p._id === programId);\n this.selectedClassProgram.set(selectedProgram || null);\n \n // Load branches if branchType is configured\n if (this.showBranchDropdown()) {\n this.loadClassProgramBranches(programId);\n } else {\n this.classProgramBranches.set([]);\n this.selectedBranchId.set(null);\n // Load terms directly if no branch dropdown\n this.loadClassProgramTerms(programId);\n }\n } else {\n this.selectedClassProgram.set(null);\n this.classProgramBranches.set([]);\n this.selectedBranchId.set(null);\n this.classProgramTerms.set([]);\n this.selectedTermId.set(null);\n }\n \n // Reload sections when program class changes\n this.loadProgramTermSections();\n }\n\n /**\n * Load class program branches\n */\n private loadClassProgramBranches(classProgramId: string): void {\n this.classProgramBranchesLoading.set(true);\n const payload: AcaClassPrgBranchListPayload = new AcaClassPrgBranchListPayload({\n acabrn_class_program_id_acacpm: classProgramId,\n pagination: false\n });\n \n this.classProgramBranchService.getClassProgramBranchList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: classPrgBranchControllerResponse) => {\n if (response?.success && response.data) {\n this.classProgramBranches.set(response.data as ClassProgramBranch[]);\n } else {\n this.classProgramBranches.set([]);\n }\n this.classProgramBranchesLoading.set(false);\n },\n error: (error: any) => {\n console.error('❌ Error loading class program branches:', error);\n this.classProgramBranches.set([]);\n this.classProgramBranchesLoading.set(false);\n }\n });\n }\n\n /**\n * Handle branch selection change\n */\n onBranchChange(branchId: string | number | string[] | null): void {\n const branch = typeof branchId === 'string' ? branchId : (branchId ? String(branchId) : null);\n console.log('🔄 Specialization (Branch) changed:', branch);\n \n this.selectedBranchId.set(branch);\n \n // Clear previously selected term when branch changes (since term list will change)\n this.selectedTermId.set(null);\n \n // Load program terms for dropdown when branch is selected\n if (branch && this.selectedProgramClassId()) {\n // Handle term dropdown visibility and auto-selection\n if (!this.showTermDropdown()) {\n // If term dropdown should be hidden, auto-select the term for this program\n this.autoSelectTermForProgram(this.selectedProgramClassId()!, branch);\n } else {\n console.log('📚 Loading program terms for branch:', branch);\n this.loadClassProgramTerms(this.selectedProgramClassId()!, branch);\n }\n } else {\n // Clear terms if no branch selected\n this.classProgramTerms.set([]);\n this.selectedTermId.set(null);\n }\n \n // Reload sections when branch changes\n this.loadProgramTermSections();\n }\n\n /**\n * Auto-select term for program when termType=true, termProgramLevelOneConnected=true, and termLevelUpTo <= 1\n */\n private autoSelectTermForProgram(classProgramId: string, branchId?: string): void {\n console.log('🔄 Auto-selecting term for program:', classProgramId, 'branch:', branchId);\n \n const payload: MClassProgramTerm = new MClassProgramTerm({\n pageIndex: 0,\n pageSize: 1, // Only need one term\n pagination: false,\n query: \"\",\n sort: {\n key: 'acapt_sequence',\n order: 'asc'\n },\n acapt_class_program_id_acacpm: classProgramId,\n acapt_class_prg_branch_acabrn: branchId || \"\"\n });\n \n this.classProgramTermService.getClassProgramTermList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: any) => {\n if (response?.success && response.data && response.data.length > 0) {\n const term = response.data[0];\n const termId = typeof term._id === 'string' ? term._id : term._id?._id || '';\n \n if (termId) {\n console.log('✅ Auto-selected term:', termId, term.acapt_name);\n // Auto-select the term\n this.selectedTermId.set(termId);\n // Reload sections with the auto-selected term\n this.loadProgramTermSections();\n }\n } else {\n console.warn('⚠️ No term found for program:', classProgramId);\n }\n },\n error: (error: unknown) => {\n console.error('❌ Error auto-selecting term:', error);\n }\n });\n }\n\n /**\n * Load class program terms (simple list for dropdown)\n */\n private loadClassProgramTerms(classProgramId: string, branchId?: string): void {\n if (!classProgramId) {\n this.classProgramTerms.set([]);\n return;\n }\n \n this.classProgramTermsLoading.set(true);\n const payload: MClassProgramTerm = new MClassProgramTerm({\n pageIndex: 0,\n pageSize: 1000,\n pagination: false,\n query: \"\",\n sort: {\n key: 'acapt_name',\n order: 'asc'\n },\n acapt_class_program_id_acacpm: classProgramId,\n acapt_class_prg_branch_acabrn: branchId || \"\",\n });\n \n console.log('📚 Loading program terms:', payload);\n \n this.classProgramTermService.getClassProgramTermList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n console.log('✅ Program terms loaded:', response.data.length, 'items');\n // Store terms as-is for dropdown\n this.classProgramTerms.set(response.data as ClassProgramTerm[]);\n } else {\n console.warn('⚠️ No term data received');\n this.classProgramTerms.set([]);\n }\n this.classProgramTermsLoading.set(false);\n },\n error: (error: unknown) => {\n console.error('❌ Error loading class program terms:', error);\n this.classProgramTerms.set([]);\n this.classProgramTermsLoading.set(false);\n }\n });\n }\n\n /**\n * Handle program term selection change\n */\n onTermChange(termId: string | number | string[] | null): void {\n const term = typeof termId === 'string' ? termId : (termId ? String(termId) : null);\n console.log('🔄 Program Term changed:', term);\n this.selectedTermId.set(term);\n this.loadProgramTermSections();\n }\n\n /**\n * Handle class program master search\n */\n onClassProgramMasterSearch(event: any): void {\n // Trigger loading if needed\n if (event && event.query) {\n // Could implement search functionality here if needed\n }\n }\n}\n","<!-- Program Term Section Management Container -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'program_term_section' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <!-- Action Buttons in Breadcrumb Area -->\n <div breadcrumb-actions>\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"sm\" leftIcon=\"add\" (btnClick)=\"createProgramTermSection()\">\n Create Program Term Section\n </button>\n </div>\n\n <!-- Main Content -->\n <div class=\"tw-flex tw-flex-col tw-w-full tw-h-full tw-overflow-hidden\">\n <!-- Filter Section -->\n <div class=\"tw-flex-shrink-0 tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-4\">\n <div>\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Class Program</label>\n <cide-ele-select\n [options]=\"classProgramMastersOptions()\"\n [ngModel]=\"selectedProgramClassId() || ''\"\n (ngModelChange)=\"onClassProgramChange($event)\"\n placeholder=\"Select Class Program\"\n valueKey=\"_id\"\n labelKey=\"displayLabel\"\n [loading]=\"classProgramMastersLoading()\"\n [searchable]=\"true\"\n (searchChange)=\"onClassProgramMasterSearch($event)\">\n </cide-ele-select>\n </div>\n \n @if (showBranchDropdown()) {\n <div>\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Specialization</label>\n <cide-ele-select\n [options]=\"classProgramBranchesOptions()\"\n [ngModel]=\"selectedBranchId() || ''\"\n (ngModelChange)=\"onBranchChange($event)\"\n placeholder=\"Select Specialization\"\n valueKey=\"_id\"\n labelKey=\"acabrn_name\"\n [loading]=\"classProgramBranchesLoading()\">\n </cide-ele-select>\n </div>\n }\n \n @if (selectedProgramClassId() && (!showBranchDropdown() || selectedBranchId()) && showTermDropdown()) {\n <div>\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Program Term (Leaf Only)</label>\n <cide-ele-select\n [options]=\"classProgramTermOptions()\"\n [ngModel]=\"selectedTermId() || ''\"\n (ngModelChange)=\"onTermChange($event)\"\n placeholder=\"Select Program Term (Leaf Only)\"\n valueKey=\"_id\"\n labelKey=\"acapt_name\"\n [loading]=\"classProgramTermsLoading()\"\n [treeView]=\"{ enabled: true, primaryKey: '_id', foreignKey: 'acapt_parent_class_prog_term_acapt' }\"\n [searchable]=\"true\">\n </cide-ele-select>\n </div>\n }\n </div>\n </div>\n\n <!-- Data Grid Section -->\n <div class=\"tw-flex-1 tw-min-h-0 tw-p-0\">\n <cide-ele-data-grid\n class=\"tw-h-full\"\n [config]=\"gridConfig()\"\n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n </div>\n</cide-lyt-shared-wrapper>\n\n<!-- Template Renderers -->\n<ng-template #programTermSectionDetailsRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <div class=\"tw-flex-shrink-0\">\n <div class=\"tw-w-10 tw-h-10 tw-bg-teal-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">group</cide-ele-icon>\n </div>\n </div>\n <div class=\"tw-min-w-0 tw-flex-1\">\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-truncate tw-m-0\">\n {{ row?.acapts_name }}\n </h6>\n <p class=\"tw-text-xs tw-text-gray-500 tw-truncate tw-m-0\">\n {{ row?.acapts_description }}\n </p>\n </div>\n </div>\n</ng-template>\n\n<ng-template #programTermSectionStatusRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n @if (row?.acapts_iscurrent) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800\">\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">star</cide-ele-icon>\n Current\n </span>\n }\n @if (row?.acapts_islocked) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-yellow-100 tw-text-yellow-800\">\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">lock</cide-ele-icon>\n Locked\n </span>\n }\n <span [ngClass]=\"{\n 'tw-bg-green-100 tw-text-green-800': row?.acapts_isactive,\n 'tw-bg-red-100 tw-text-red-800': !row?.acapts_isactive\n }\" class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium\">\n <cide-ele-icon [ngClass]=\"{\n 'tw-text-green-600': row?.acapts_isactive,\n 'tw-text-red-600': !row?.acapts_isactive\n }\" class=\"tw-w-3 tw-h-3 tw-mr-1\">\n {{ row?.acapts_isactive ? 'check_circle' : 'cancel' }}\n </cide-ele-icon>\n {{ row?.acapts_isactive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(row)\"\n (itemClick)=\"onDropdownItemClick($event, row)\"\n size=\"sm\"\n variant=\"ghost\"\n icon=\"more_vert\">\n </cide-ele-dropdown>\n</ng-template>\n\n<ng-template #programClassRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n {{ row?.acapts_class_program_id_acacpm?.acacpm_alise_title || row?.acapts_class_program_id_acacpm?.acacpm_name || 'N/A' }}\n </div>\n</ng-template>\n\n<ng-template #termSpecializationRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n @if (row?.acapts_parent_class_prog_term_acapt?.acapt_class_program_branch_id_acabrn) {\n {{ row?.acapts_parent_class_prog_term_acapt?.acapt_class_program_branch_id_acabrn?.acabrn_name || row?.acapts_parent_class_prog_term_acapt?.acapt_class_program_branch_id_acabrn?.acabrn_code || 'N/A' }}\n } @else {\n <span class=\"tw-text-gray-400\">-</span>\n }\n </div>\n</ng-template>\n\n<ng-template #classProgramTermRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n {{ row?.acapts_parent_class_prog_term_acapt?.acapt_name || row?.acapts_parent_class_prog_term_acapt?.acapt_code || 'N/A' }}\n </div>\n</ng-template>\n\n<ng-template #parentClassProgramTermRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n @if (row?.acapts_parent_class_prog_term_acapt) {\n @if (row?.acapts_parent_class_prog_term_acapt?.acapt_parent_class_prog_term_acapt) {\n @if (typeof row?.acapts_parent_class_prog_term_acapt?.acapt_parent_class_prog_term_acapt === 'object') {\n {{ row?.acapts_parent_class_prog_term_acapt?.acapt_parent_class_prog_term_acapt?.acapt_name || row?.acapts_parent_class_prog_term_acapt?.acapt_parent_class_prog_term_acapt?.acapt_code || 'N/A' }}\n } @else {\n <span class=\"tw-text-gray-400\">-</span>\n }\n } @else {\n <span class=\"tw-text-gray-400\">-</span>\n }\n } @else {\n <span class=\"tw-text-gray-400\">-</span>\n }\n </div>\n</ng-template>\n","import { Component, OnInit, OnDestroy, inject, signal, computed, input, output, effect } from '@angular/core';\nimport { CommonModule, NgClass } from '@angular/common';\nimport { FormGroup, FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\nimport type { selectSearchType } from 'cloud-ide-lms-model';\nimport { HttpClient } from '@angular/common/http';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DestroyRef } from '@angular/core';\nimport { CideSelectComponent, NotificationService } from 'cloud-ide-element';\nimport { CLASS_PROGRAM_MASTER_SERVICE_TOKEN, type IClassProgramMasterService } from 'cloud-ide-shared';\nimport { CideLytProgramTermSectionService } from '../../../collection/program-term-section-management/services/program-term-section.service';\nimport { CideLytClassProgramBranchService } from '../../../collection/class-program-branch-management/services/class-program-branch.service';\nimport {\n cidePath,\n hostManagerRoutesUrl,\n academicsRoutesUrl,\n generateStringFromObject,\n type classProgramMasterControllerResponse,\n type classProgramTermControllerResponse,\n type prgTrmSectionControllerResponse,\n type MClassProgramTerm,\n MPrgTrmSection,\n type AcaClassProgramTermReponse,\n type AcaPrgTrmSectionResponse,\n type AcaClassProgramMasterResponse,\n type AcaClassPrgBranchResponse,\n type classPrgBranchControllerResponse,\n type controllerResponse\n} from 'cloud-ide-lms-model';\nimport { AcaClassPrgBranchListPayload } from 'cloud-ide-lms-model';\n\ninterface ClassProgramConfiguration {\n semesterType?: boolean; // Legacy property name\n termType?: boolean; // Current property name\n branchType?: boolean;\n termLevelUpTo?: number; // Number of term hierarchy levels\n termAdmissionLevelUpTo?: number; // For admission forms\n termProgramLevelOneConnected?: boolean; // Whether term is connected at program level\n getAdmission?: boolean; // For admission forms\n [key: string]: unknown;\n}\n\ninterface SelectOption {\n value: string;\n label: string;\n}\n\ninterface ProgramSectionSelectorValues {\n classProgramId?: string | null;\n branchId?: string | null;\n termId?: string | null;\n sectionId?: string | null;\n}\n\n@Component({\n selector: 'cide-academics-program-section-selector',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideSelectComponent,\n NgClass\n ],\n templateUrl: './program-section-selector.component.html',\n styleUrl: './program-section-selector.component.scss'\n})\nexport class ProgramSectionSelectorComponent implements OnInit, OnDestroy {\n // Inputs\n readonly formGroup = input.required<FormGroup>();\n readonly classProgramControlName = input<string>('class_program_id');\n readonly branchControlName = input<string>('branch_id');\n readonly termControlName = input<string>('term_id');\n readonly sectionControlName = input<string>('section_id');\n readonly academicYearId = input<string | null>(null);\n readonly entityId = input<string | null>(null);\n readonly disabled = input<boolean>(false);\n readonly showLabels = input<boolean>(true);\n readonly gridCols = input<string>('tw-grid-cols-1 md:tw-grid-cols-3');\n readonly showAllPrograms = input<boolean>(false); // If true, shows all programs regardless of academic year/entity filters\n readonly includeInactive = input<boolean>(false); // If true, includes inactive programs\n\n // Outputs\n readonly valuesChange = output<ProgramSectionSelectorValues>();\n\n // Services\n private readonly destroyRef = inject(DestroyRef);\n private readonly http = inject(HttpClient);\n private readonly classProgramService = inject(CLASS_PROGRAM_MASTER_SERVICE_TOKEN);\n private readonly branchService = inject(CideLytClassProgramBranchService);\n private readonly sectionService = inject(CideLytProgramTermSectionService);\n private readonly notificationService = inject(NotificationService);\n\n // State\n readonly classProgramMasters = signal<AcaClassProgramMasterResponse[]>([]);\n readonly classProgramBranches = signal<SelectOption[]>([]);\n readonly classProgramTerms = signal<SelectOption[]>([]);\n readonly programTermSections = signal<SelectOption[]>([]);\n \n readonly classProgramMastersLoading = signal<boolean>(false);\n readonly classProgramBranchesLoading = signal<boolean>(false);\n readonly classProgramTermsLoading = signal<boolean>(false);\n readonly programTermSectionsLoading = signal<boolean>(false);\n\n readonly selectedClassProgram = signal<AcaClassProgramMasterResponse | null>(null);\n readonly hasSections = signal<boolean>(false);\n private isProcessingInitialValues = false;\n\n // FormControl getters\n getClassProgramControl(): FormControl {\n return this.formGroup().get(this.classProgramControlName()) as FormControl;\n }\n\n getBranchControl(): FormControl {\n return this.formGroup().get(this.branchControlName()) as FormControl;\n }\n\n getTermControl(): FormControl {\n return this.formGroup().get(this.termControlName()) as FormControl;\n }\n\n getSectionControl(): FormControl {\n return this.formGroup().get(this.sectionControlName()) as FormControl;\n }\n\n // Computed signals\n readonly classProgramOptions = computed(() => {\n return this.classProgramMasters().map(cp => ({\n value: cp._id || '',\n label: cp.acacpm_alise_title || ''\n }));\n });\n\n readonly showBranchDropdown = computed(() => {\n const program = this.selectedClassProgram();\n if (!program) return false;\n \n const generalMaster = program.acacpm_class_program_id_sygms || (program as any).acacpm_class_program_id_sygmt;\n if (!generalMaster || typeof generalMaster !== 'object') return false;\n \n let config: ClassProgramConfiguration | undefined;\n if ('sygms_configuration' in generalMaster) {\n const configValue = generalMaster.sygms_configuration;\n if (typeof configValue === 'string') {\n try {\n config = JSON.parse(configValue) as ClassProgramConfiguration;\n } catch {\n return false;\n }\n } else if (typeof configValue === 'object' && configValue !== null) {\n config = configValue as ClassProgramConfiguration;\n }\n }\n \n return config?.branchType === true;\n });\n\n readonly showTermDropdown = computed(() => {\n const program = this.selectedClassProgram();\n if (!program) return false;\n \n const generalMaster = program.acacpm_class_program_id_sygms || (program as any).acacpm_class_program_id_sygmt;\n if (!generalMaster || typeof generalMaster !== 'object') return false;\n \n let config: ClassProgramConfiguration | undefined;\n if ('sygms_configuration' in generalMaster) {\n const configValue = generalMaster.sygms_configuration;\n if (typeof configValue === 'string') {\n try {\n config = JSON.parse(configValue) as ClassProgramConfiguration;\n } catch {\n return false;\n }\n } else if (typeof configValue === 'object' && configValue !== null) {\n config = configValue as ClassProgramConfiguration;\n }\n }\n \n // If termType is explicitly false, don't show the dropdown\n if (config?.termType === false) {\n return false;\n }\n \n // Special case: Hide dropdown if termType=true, termLevelUpTo=1, and termProgramLevelOneConnected=true\n if (config?.termType === true && \n config?.termLevelUpTo === 1 && \n config?.termProgramLevelOneConnected === true) {\n return false;\n }\n \n // Check for both termType (current) and semesterType (legacy) for backward compatibility\n return config?.termType === true || config?.semesterType === true;\n });\n\n constructor() {\n // Effect to emit values when form changes\n effect(() => {\n const form = this.formGroup();\n if (form) {\n const classProgramId = form.get(this.classProgramControlName())?.value;\n const branchId = form.get(this.branchControlName())?.value;\n const termId = form.get(this.termControlName())?.value;\n const sectionId = form.get(this.sectionControlName())?.value;\n \n this.valuesChange.emit({\n classProgramId: classProgramId || null,\n branchId: branchId || null,\n termId: termId || null,\n sectionId: sectionId || null\n });\n }\n });\n }\n\n ngOnInit(): void {\n this.loadClassProgramMasters();\n this.setupFormListeners();\n // Check for initial values in the form and load cascading options\n // Use setTimeout to ensure form is ready\n setTimeout(() => {\n this.handleInitialValues();\n }, 0);\n \n // Also watch for form value changes to handle values set after component initialization\n const form = this.formGroup();\n if (form) {\n // Watch for class program value being set\n form.get(this.classProgramControlName())?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n // If class program is set but we haven't processed initial values yet, process them\n const classProgramId = form.get(this.classProgramControlName())?.value;\n if (classProgramId && this.classProgramMasters().length > 0 && !this.selectedClassProgram()) {\n // Form value was set, but we haven't processed it yet - process now\n setTimeout(() => {\n this.handleInitialValues();\n }, 100);\n }\n });\n }\n }\n\n private handleInitialValues(): void {\n const form = this.formGroup();\n if (!form) return;\n\n const classProgramId = form.get(this.classProgramControlName())?.value;\n if (!classProgramId) return;\n\n // Set flag to prevent clearing values during initial load\n this.isProcessingInitialValues = true;\n\n // Wait for class programs to load, then process initial values\n const checkInterval = setInterval(() => {\n if (this.classProgramMasters().length > 0) {\n clearInterval(checkInterval);\n // Find the selected program\n const selectedProgram = this.classProgramMasters().find(cp => cp._id === classProgramId);\n if (selectedProgram) {\n this.selectedClassProgram.set(selectedProgram);\n \n // Read config directly from the program to determine what to show\n const generalMaster = selectedProgram.acacpm_class_program_id_sygms || (selectedProgram as any).acacpm_class_program_id_sygmt;\n let config: ClassProgramConfiguration | undefined;\n \n if (generalMaster && typeof generalMaster === 'object') {\n if ('sygms_configuration' in generalMaster) {\n const configValue = generalMaster.sygms_configuration;\n if (typeof configValue === 'string') {\n try {\n config = JSON.parse(configValue) as ClassProgramConfiguration;\n } catch {\n console.warn('Failed to parse config:', configValue);\n }\n } else if (typeof configValue === 'object' && configValue !== null) {\n config = configValue as ClassProgramConfiguration;\n }\n }\n }\n \n // Wait a tick for computed signals to update\n setTimeout(() => {\n const branchId = form.get(this.branchControlName())?.value;\n const termId = form.get(this.termControlName())?.value;\n const sectionId = form.get(this.sectionControlName())?.value;\n \n // Load branches if config says so AND we have a branch ID\n const shouldShowBranch = config?.branchType === true;\n if (shouldShowBranch) {\n this.loadClassProgramBranches(classProgramId);\n \n // Wait for branches to load\n if (branchId) {\n const branchCheckInterval = setInterval(() => {\n if (this.classProgramBranches().length > 0 || !this.classProgramBranchesLoading()) {\n clearInterval(branchCheckInterval);\n // Branch value is already set, now load terms\n this.loadClassProgramTerms(classProgramId, branchId);\n \n // Wait for terms to load\n if (termId) {\n const termCheckInterval = setInterval(() => {\n if (this.classProgramTerms().length > 0 || !this.classProgramTermsLoading()) {\n clearInterval(termCheckInterval);\n // Term value is already set, now load sections\n if (sectionId) {\n this.loadProgramTermSections(termId);\n }\n }\n }, 100);\n setTimeout(() => clearInterval(termCheckInterval), 5000);\n }\n }\n }, 100);\n setTimeout(() => clearInterval(branchCheckInterval), 5000);\n } else {\n // No branch ID but should show branch dropdown - load terms after branches load\n const branchCheckInterval = setInterval(() => {\n if (!this.classProgramBranchesLoading()) {\n clearInterval(branchCheckInterval);\n if (termId) {\n this.loadClassProgramTerms(classProgramId, undefined);\n if (sectionId) {\n const termCheckInterval = setInterval(() => {\n if (this.classProgramTerms().length > 0 || !this.classProgramTermsLoading()) {\n clearInterval(termCheckInterval);\n this.loadProgramTermSections(termId);\n }\n }, 100);\n setTimeout(() => clearInterval(termCheckInterval), 5000);\n }\n }\n }\n }, 100);\n setTimeout(() => clearInterval(branchCheckInterval), 5000);\n }\n } else {\n // No branch dropdown, load terms directly if config allows\n const shouldShowTerm = config?.termType === true || config?.semesterType === true;\n if (shouldShowTerm && termId) {\n this.loadClassProgramTerms(classProgramId, undefined);\n \n // Wait for terms to load, then load sections\n if (sectionId) {\n const termCheckInterval = setInterval(() => {\n if (this.classProgramTerms().length > 0 || !this.classProgramTermsLoading()) {\n clearInterval(termCheckInterval);\n this.loadProgramTermSections(termId);\n }\n }, 100);\n setTimeout(() => clearInterval(termCheckInterval), 5000);\n }\n }\n }\n }, 0);\n }\n }\n }, 100);\n // Timeout after 5 seconds\n setTimeout(() => {\n clearInterval(checkInterval);\n // Reset flag after processing is complete\n this.isProcessingInitialValues = false;\n }, 5000);\n }\n\n ngOnDestroy(): void {\n // Cleanup handled by takeUntilDestroyed\n }\n\n private setupFormListeners(): void {\n const form = this.formGroup();\n if (!form) return;\n\n // Listen for class program selection changes\n form.get(this.classProgramControlName())?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(classProgramId => {\n this.onClassProgramChange(classProgramId);\n });\n\n // Listen for branch selection changes\n form.get(this.branchControlName())?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(branchId => {\n this.onBranchChange(branchId);\n });\n\n // Listen for term selection changes\n form.get(this.termControlName())?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(termId => {\n this.onTermChange(termId);\n });\n }\n\n private loadClassProgramMasters(): void {\n this.classProgramMastersLoading.set(true);\n \n const academicYearId = this.academicYearId();\n const entityId = this.entityId();\n const showAll = this.showAllPrograms();\n const includeInactive = this.includeInactive();\n \n // Build payload - only include filters if not showing all programs\n const payload: Partial<any> = {\n pagination: false\n };\n\n // Only add academic year filter if not showing all programs and academic year is provided\n if (!showAll && academicYearId) {\n payload['acacpm_academic_year_id_acayr'] = academicYearId;\n }\n\n // Only add entity filter if not showing all programs and entity is provided\n if (!showAll && entityId) {\n payload['acacpm_entity_id_syen'] = entityId;\n }\n\n // Only add active filter if not including inactive programs\n if (!includeInactive) {\n payload['acacpm_isactive'] = true;\n }\n\n this.classProgramService.searchClassProgramMasters(payload).subscribe({\n next: (response: classProgramMasterControllerResponse) => {\n if (response?.success && response.data) {\n const dataArray: AcaClassProgramMasterResponse[] = Array.isArray(response.data) ? response.data : [];\n this.classProgramMasters.set(dataArray);\n console.log(`✅ Loaded ${dataArray.length} class programs`, {\n showAll,\n includeInactive,\n academicYearId,\n entityId,\n filters: payload\n });\n } else {\n this.classProgramMasters.set([]);\n console.warn('⚠️ No class programs found', response);\n }\n this.classProgramMastersLoading.set(false);\n },\n error: (response: { error: controllerResponse }) => {\n console.error('❌ Error loading class programs:', response);\n const errorMessage = response?.error?.message;\n if (errorMessage) {\n this.notificationService.error(errorMessage);\n }\n this.classProgramMasters.set([]);\n this.classProgramMastersLoading.set(false);\n }\n });\n }\n\n onClassProgramSearch(event: selectSearchType): void {\n this.classProgramMastersLoading.set(true);\n \n const academicYearId = this.academicYearId();\n const entityId = this.entityId();\n const showAll = this.showAllPrograms();\n const includeInactive = this.includeInactive();\n \n // Build payload for search\n const payload: Partial<any> = {\n query: event.query || \"\",\n acacpm_id: event.value ? String(event.value) : \"\",\n pagination: false\n };\n\n // Only add academic year filter if not showing all programs and academic year is provided\n if (!showAll && academicYearId) {\n payload['acacpm_academic_year_id_acayr'] = academicYearId;\n }\n\n // Only add entity filter if not showing all programs and entity is provided\n if (!showAll && entityId) {\n payload['acacpm_entity_id_syen'] = entityId;\n }\n\n // Only add active filter if not including inactive programs\n if (!includeInactive) {\n payload['acacpm_isactive'] = true;\n }\n\n this.classProgramService.searchClassProgramMasters(payload).subscribe({\n next: (response: classProgramMasterControllerResponse) => {\n if (response?.success && response.data) {\n const dataArray: AcaClassProgramMasterResponse[] = Array.isArray(response.data) ? response.data : [];\n this.classProgramMasters.set(dataArray);\n } else {\n this.classProgramMasters.set([]);\n }\n this.classProgramMastersLoading.set(false);\n },\n error: () => {\n this.classProgramMasters.set([]);\n this.classProgramMastersLoading.set(false);\n }\n });\n }\n\n onClassProgramChange(classProgramId: string | null | undefined): void {\n // Clear previous selections state\n this.selectedClassProgram.set(null);\n this.classProgramBranches.set([]);\n this.classProgramTerms.set([]);\n this.programTermSections.set([]);\n\n if (!classProgramId) {\n // Clear all dependent values if no class program selected\n const form = this.formGroup();\n if (form) {\n form.patchValue({\n [this.branchControlName()]: '',\n [this.termControlName()]: '',\n [this.sectionControlName()]: ''\n }, { emitEvent: false });\n }\n return;\n }\n\n // Find the selected program from the list\n const selectedProgram = this.classProgramMasters().find(cp => cp._id === classProgramId);\n if (!selectedProgram) {\n return;\n }\n\n this.selectedClassProgram.set(selectedProgram);\n\n const form = this.formGroup();\n if (!form) return;\n\n // Get current form values before loading options\n const currentBranchId = form.get(this.branchControlName())?.value;\n const currentTermId = form.get(this.termControlName())?.value;\n const currentSectionId = form.get(this.sectionControlName())?.value;\n\n // Load branches if branchType is true\n if (this.showBranchDropdown()) {\n this.loadClassProgramBranches(classProgramId);\n \n // After branches load, check if current branch value is valid\n const branchCheckInterval = setInterval(() => {\n if (!this.classProgramBranchesLoading()) {\n clearInterval(branchCheckInterval);\n \n // Check if current branch value exists in loaded branches\n const branchExists = currentBranchId && \n this.classProgramBranches().some(b => b.value === currentBranchId);\n \n if (!branchExists && currentBranchId) {\n // Current branch value is not in the list, clear it\n form.patchValue({\n [this.branchControlName()]: ''\n }, { emitEvent: false });\n }\n \n // Load terms with the branch (or without if branch was cleared)\n const branchIdToUse = branchExists ? currentBranchId : undefined;\n if (this.showTermDropdown()) {\n this.loadClassProgramTerms(classProgramId, branchIdToUse);\n \n // After terms load, check if current term value is valid\n const termCheckInterval = setInterval(() => {\n if (!this.classProgramTermsLoading()) {\n clearInterval(termCheckInterval);\n \n // Check if current term value exists in loaded terms\n const termExists = currentTermId && \n this.classProgramTerms().some(t => t.value === currentTermId);\n \n if (!termExists && currentTermId) {\n // Current term value is not in the list, clear it\n form.patchValue({\n [this.termControlName()]: ''\n }, { emitEvent: false });\n \n // Also clear section if term is cleared\n form.patchValue({\n [this.sectionControlName()]: ''\n }, { emitEvent: false });\n } else if (termExists && currentSectionId) {\n // Term is valid, load sections\n this.loadProgramTermSections(currentTermId);\n \n // After sections load, check if current section value is valid\n const sectionCheckInterval = setInterval(() => {\n if (!this.programTermSectionsLoading()) {\n clearInterval(sectionCheckInterval);\n \n // Check if current section value exists in loaded sections\n const sectionExists = this.programTermSections().some(s => s.value === currentSectionId);\n \n if (!sectionExists) {\n // Current section value is not in the list, clear it\n form.patchValue({\n [this.sectionControlName()]: ''\n }, { emitEvent: false });\n }\n }\n }, 100);\n setTimeout(() => clearInterval(sectionCheckInterval), 5000);\n }\n }\n }, 100);\n setTimeout(() => clearInterval(termCheckInterval), 5000);\n }\n }\n }, 100);\n setTimeout(() => clearInterval(branchCheckInterval), 5000);\n } else {\n // If no branch dropdown but term dropdown should be shown, load terms directly\n if (this.showTermDropdown()) {\n this.loadClassProgramTerms(classProgramId, undefined);\n \n // After terms load, check if current term value is valid\n const termCheckInterval = setInterval(() => {\n if (!this.classProgramTermsLoading()) {\n clearInterval(termCheckInterval);\n \n // Check if current term value exists in loaded terms\n const termExists = currentTermId && \n this.classProgramTerms().some(t => t.value === currentTermId);\n \n if (!termExists && currentTermId) {\n // Current term value is not in the list, clear it\n form.patchValue({\n [this.termControlName()]: ''\n }, { emitEvent: false });\n \n // Also clear section if term is cleared\n form.patchValue({\n [this.sectionControlName()]: ''\n }, { emitEvent: false });\n } else if (termExists && currentSectionId) {\n // Term is valid, load sections\n this.loadProgramTermSections(currentTermId);\n \n // After sections load, check if current section value is valid\n const sectionCheckInterval = setInterval(() => {\n if (!this.programTermSectionsLoading()) {\n clearInterval(sectionCheckInterval);\n \n // Check if current section value exists in loaded sections\n const sectionExists = this.programTermSections().some(s => s.value === currentSectionId);\n \n if (!sectionExists) {\n // Current section value is not in the list, clear it\n form.patchValue({\n [this.sectionControlName()]: ''\n }, { emitEvent: false });\n }\n }\n }, 100);\n setTimeout(() => clearInterval(sectionCheckInterval), 5000);\n }\n }\n }, 100);\n setTimeout(() => clearInterval(termCheckInterval), 5000);\n }\n }\n }\n\n private loadClassProgramBranches(classProgramId: string): void {\n this.classProgramBranchesLoading.set(true);\n \n const payload = new AcaClassPrgBranchListPayload({\n acabrn_class_program_id_acacpm: classProgramId,\n pagination: false\n });\n\n const query = generateStringFromObject(payload);\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n academicsRoutesUrl.module,\n academicsRoutesUrl.classProgramBranch,\n query\n ]);\n\n this.http.get<classPrgBranchControllerResponse>(url).subscribe({\n next: (response) => {\n if (response?.success && response?.data) {\n const branches: AcaClassPrgBranchResponse[] = Array.isArray(response.data) ? response.data : [];\n this.classProgramBranches.set(branches.map((branch: AcaClassPrgBranchResponse) => ({\n value: branch._id || '',\n label: branch.acabrn_name || branch.acabrn_code || ''\n })));\n } else {\n this.classProgramBranches.set([]);\n }\n this.classProgramBranchesLoading.set(false);\n },\n error: (response: { error: controllerResponse }) => {\n console.error('Error loading branches:', response);\n const errorMessage = response?.error?.message;\n if (errorMessage) {\n this.notificationService.error(errorMessage);\n }\n this.classProgramBranches.set([]);\n this.classProgramBranchesLoading.set(false);\n }\n });\n }\n\n onBranchChange(branchId: string | null | undefined): void {\n this.classProgramTerms.set([]);\n this.programTermSections.set([]);\n \n const form = this.formGroup();\n if (form) {\n form.patchValue({\n [this.termControlName()]: '',\n [this.sectionControlName()]: ''\n }, { emitEvent: false });\n }\n\n const classProgramId = form?.get(this.classProgramControlName())?.value;\n if (classProgramId && this.showTermDropdown()) {\n this.loadClassProgramTerms(classProgramId, branchId || undefined);\n }\n }\n\n private loadClassProgramTerms(classProgramId: string, branchId?: string): void {\n this.classProgramTermsLoading.set(true);\n \n const payload: Partial<MClassProgramTerm> = {\n acapt_class_program_id_acacpm: classProgramId,\n acapt_class_prg_branch_acabrn: branchId || undefined,\n pagination: false\n } as Partial<MClassProgramTerm>;\n\n const query = generateStringFromObject(payload);\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n academicsRoutesUrl.module,\n academicsRoutesUrl.classProgramTerm,\n query\n ]);\n\n this.http.get<classProgramTermControllerResponse>(url)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response?.data) {\n const terms: AcaClassProgramTermReponse[] = Array.isArray(response.data) ? response.data : [];\n // Transform to SelectOption format with parent field for tree view\n const options = terms.map((term: AcaClassProgramTermReponse) => {\n // Normalize parent field for tree view compatibility\n let parentId = '';\n if (term.acapt_parent_class_prog_term_acapt) {\n if (typeof term.acapt_parent_class_prog_term_acapt === 'object') {\n parentId = term.acapt_parent_class_prog_term_acapt._id || '';\n } else if (typeof term.acapt_parent_class_prog_term_acapt === 'string') {\n parentId = term.acapt_parent_class_prog_term_acapt || '';\n }\n }\n \n return {\n value: term._id || '',\n label: term.acapt_name || term.acapt_code || '',\n _id: term._id || '',\n acapt_parent_class_prog_term_acapt: parentId\n };\n });\n \n this.classProgramTerms.set(options);\n } else {\n this.classProgramTerms.set([]);\n }\n this.classProgramTermsLoading.set(false);\n },\n error: (response: { error: controllerResponse }) => {\n console.error('Error loading program terms:', response);\n const errorMessage = response?.error?.message;\n if (errorMessage) {\n this.notificationService.error(errorMessage);\n }\n this.classProgramTerms.set([]);\n this.classProgramTermsLoading.set(false);\n }\n });\n }\n\n onTermChange(termId: string | null | undefined): void {\n this.programTermSections.set([]);\n \n const form = this.formGroup();\n if (form) {\n form.patchValue({\n [this.sectionControlName()]: ''\n }, { emitEvent: false });\n }\n\n if (termId) {\n this.loadProgramTermSections(termId);\n } else {\n this.hasSections.set(false);\n const sectionControl = form?.get(this.sectionControlName());\n if (sectionControl) {\n sectionControl.clearValidators();\n sectionControl.updateValueAndValidity();\n }\n }\n }\n\n private loadProgramTermSections(termId: string): void {\n this.programTermSectionsLoading.set(true);\n \n const payload = new MPrgTrmSection({\n acapts_parent_class_prog_term_acapt: termId,\n pagination: false,\n pageIndex: 0,\n pageSize: 1000,\n query: \"\",\n sort: {\n key: 'acapts_name',\n order: 'asc'\n }\n } as Partial<MPrgTrmSection>);\n\n this.sectionService.getProgramTermSectionList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: prgTrmSectionControllerResponse) => {\n if (response?.success && response?.data) {\n const sections: AcaPrgTrmSectionResponse[] = Array.isArray(response.data) ? response.data : [];\n const hasSections = sections.length > 0;\n this.hasSections.set(hasSections);\n \n if (hasSections) {\n this.programTermSections.set(\n sections.map(section => ({\n value: section._id || '',\n label: section.acapts_name || section.acapts_code || ''\n }))\n );\n \n const form = this.formGroup();\n const sectionControl = form?.get(this.sectionControlName());\n if (sectionControl) {\n sectionControl.setValidators([Validators.required]);\n sectionControl.updateValueAndValidity();\n }\n } else {\n this.programTermSections.set([]);\n const form = this.formGroup();\n const sectionControl = form?.get(this.sectionControlName());\n if (sectionControl) {\n sectionControl.clearValidators();\n sectionControl.updateValueAndValidity();\n }\n }\n } else {\n this.hasSections.set(false);\n this.programTermSections.set([]);\n const form = this.formGroup();\n const sectionControl = form?.get(this.sectionControlName());\n if (sectionControl) {\n sectionControl.clearValidators();\n sectionControl.updateValueAndValidity();\n }\n }\n this.programTermSectionsLoading.set(false);\n },\n error: (response: { error: controllerResponse }) => {\n console.error('Error loading sections:', response);\n const errorMessage = response?.error?.message;\n if (errorMessage) {\n this.notificationService.error(errorMessage);\n }\n this.hasSections.set(false);\n this.programTermSections.set([]);\n const form = this.formGroup();\n const sectionControl = form?.get(this.sectionControlName());\n if (sectionControl) {\n sectionControl.clearValidators();\n sectionControl.updateValueAndValidity();\n }\n this.programTermSectionsLoading.set(false);\n }\n });\n }\n}\n\n","<div class=\"program-section-selector\" [ngClass]=\"gridCols()\">\n <!-- Class/Program Dropdown -->\n <cide-ele-select \n [label]=\"showLabels() ? 'Program/Class' : ''\" \n [formControl]=\"getClassProgramControl()\"\n [options]=\"classProgramOptions()\"\n [loading]=\"classProgramMastersLoading()\"\n [searchable]=\"true\"\n (searchChange)=\"onClassProgramSearch($event)\"\n placeholder=\"Search and select class/program\"\n [disabled]=\"disabled()\"\n size=\"sm\">\n </cide-ele-select>\n\n <!-- Branch/Specialization Dropdown (conditional) -->\n @if (showBranchDropdown()) {\n <cide-ele-select \n [label]=\"showLabels() ? 'Branch (Specialization)' : ''\" \n [formControl]=\"getBranchControl()\"\n [options]=\"classProgramBranches()\"\n [loading]=\"classProgramBranchesLoading()\"\n placeholder=\"Select branch\"\n [disabled]=\"disabled() || !formGroup().get(classProgramControlName())?.value\"\n size=\"sm\">\n </cide-ele-select>\n }\n\n <!-- Program Term Dropdown (conditional) -->\n @if (showTermDropdown()) {\n <cide-ele-select \n [label]=\"showLabels() ? 'Program Term' : ''\" \n [formControl]=\"getTermControl()\"\n [options]=\"classProgramTerms()\"\n [loading]=\"classProgramTermsLoading()\"\n placeholder=\"Select term/semester\"\n [disabled]=\"disabled() || !formGroup().get(classProgramControlName())?.value\"\n size=\"sm\"\n valueKey=\"_id\"\n labelKey=\"label\"\n [treeView]=\"{ enabled: true, primaryKey: '_id', foreignKey: 'acapt_parent_class_prog_term_acapt' }\">\n </cide-ele-select>\n }\n\n <!-- Section Dropdown (conditional) -->\n @if (hasSections()) {\n <cide-ele-select \n [label]=\"showLabels() ? 'Section' : ''\" \n [formControl]=\"getSectionControl()\"\n [options]=\"programTermSections()\"\n [loading]=\"programTermSectionsLoading()\"\n placeholder=\"Select section\"\n [disabled]=\"disabled() || !formGroup().get(termControlName())?.value\"\n size=\"sm\">\n </cide-ele-select>\n }\n</div>\n\n","/*\n * Public API Surface of cloud-ide-academics\n */\nexport * from './lib/cloud-ide-academics.routes';\nexport * from './lib/collection/academic-year-management';\nexport * from './lib/collection/class-program-branch-management';\nexport * from './lib/collection/program-term-section-management';\nexport * from './lib/shared/components/program-section-selector';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","filter","i2"],"mappings":"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"}
|