cloud-ide-academics 0.0.30 → 0.0.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (13) hide show
  1. package/fesm2022/{cloud-ide-academics-class-program-term-create.component-B-7JRpVE.mjs → cloud-ide-academics-class-program-term-create.component-DdH7lNem.mjs} +2 -2
  2. package/fesm2022/{cloud-ide-academics-class-program-term-create.component-B-7JRpVE.mjs.map → cloud-ide-academics-class-program-term-create.component-DdH7lNem.mjs.map} +1 -1
  3. package/fesm2022/{cloud-ide-academics-class-program-term-list.component-DObKkh-y.mjs → cloud-ide-academics-class-program-term-list.component-DpFd2YcR.mjs} +2 -2
  4. package/fesm2022/{cloud-ide-academics-class-program-term-list.component-DObKkh-y.mjs.map → cloud-ide-academics-class-program-term-list.component-DpFd2YcR.mjs.map} +1 -1
  5. package/fesm2022/{cloud-ide-academics-cloud-ide-academics-FwQEJSnJ.mjs → cloud-ide-academics-cloud-ide-academics-BAV1CsCe.mjs} +19 -19
  6. package/fesm2022/{cloud-ide-academics-cloud-ide-academics-FwQEJSnJ.mjs.map → cloud-ide-academics-cloud-ide-academics-BAV1CsCe.mjs.map} +1 -1
  7. package/fesm2022/{cloud-ide-academics-program-class-create.component-x0rh1ESo.mjs → cloud-ide-academics-program-class-create.component-CR-ylJpI.mjs} +2 -2
  8. package/fesm2022/{cloud-ide-academics-program-class-create.component-x0rh1ESo.mjs.map → cloud-ide-academics-program-class-create.component-CR-ylJpI.mjs.map} +1 -1
  9. package/fesm2022/{cloud-ide-academics-program-class-list.component-CkzH8u8u.mjs → cloud-ide-academics-program-class-list.component-hK0kmMRc.mjs} +2 -2
  10. package/fesm2022/{cloud-ide-academics-program-class-list.component-CkzH8u8u.mjs.map → cloud-ide-academics-program-class-list.component-hK0kmMRc.mjs.map} +1 -1
  11. package/fesm2022/cloud-ide-academics.mjs +1 -1
  12. package/index.d.ts +4 -4
  13. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"cloud-ide-academics-class-program-term-list.component-DObKkh-y.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/class-program-term-management/components/class-program-term-list/class-program-term-list.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/class-program-term-management/components/class-program-term-list/class-program-term-list.component.html"],"sourcesContent":["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 { filter } from 'rxjs/operators';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\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 MClassProgramTerm,\n type MClassProgramTermDeletePayload,\n type MClassProgramTermToggleStatusPayload,\n generateObjectFromString,\n generateStringFromObject,\n type MClassProgramMaster,\n type classProgramMasterControllerResponse,\n AcaClassPrgBranchListPayload,\n type classPrgBranchControllerResponse\n} from 'cloud-ide-lms-model';\nimport { CideLytClassProgramTermService } from '../../services/class-program-term.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';\n\n// Interfaces based on the model files\ninterface ClassProgramTerm {\n _id?: string;\n acapt_code?: string;\n acapt_name?: string;\n acapt_description?: string;\n acapt_class_program_id_acacpm?: string | {\n _id?: string;\n acacpm_name?: string;\n };\n acapt_class_program_branch_id_acabrn?: string | {\n _id?: string;\n acabrn_name?: string;\n };\n acapt_class_prg_branch_acabrn?: string | {\n _id?: string;\n acabrn_name?: string;\n };\n acapt_parent_class_prog_term_acapt?: string | {\n _id?: string;\n acapt_name?: string;\n };\n acapt_isactive?: boolean;\n acapt_iscurrent?: boolean;\n acapt_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?: any;\n}\n\ninterface ClassProgramBranch {\n _id?: string;\n acabrn_name?: string;\n acabrn_code?: string;\n}\n\n@Component({\n selector: 'cide-academics-class-program-term-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-term-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 ClassProgramTermListComponent 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 classProgramTermService = inject(CideLytClassProgramTermService);\n private classProgramMasterService = inject(CLASS_PROGRAM_MASTER_SERVICE_TOKEN) as IClassProgramMasterService;\n private classProgramBranchService = inject(CideLytClassProgramBranchService);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n classProgramTermDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('classProgramTermDetailsRendererTemplate');\n classProgramTermStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('classProgramTermStatusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n programClassRendererTemplate = viewChild<TemplateRef<TemplateContext>>('programClassRendererTemplate');\n specializationRendererTemplate = viewChild<TemplateRef<TemplateContext>>('specializationRendererTemplate');\n parentTermRendererTemplate = viewChild<TemplateRef<TemplateContext>>('parentTermRendererTemplate');\n\n // Computed template renderers for grid\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => {\n const renderers: Record<string, TemplateRef<TemplateContext>> = {\n classProgramTermDetailsRenderer: this.classProgramTermDetailsRendererTemplate(),\n classProgramTermStatusRenderer: this.classProgramTermStatusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n };\n \n if (this.programClassRendererTemplate()) {\n renderers['programClassRenderer'] = this.programClassRendererTemplate()!;\n }\n \n if (this.specializationRendererTemplate()) {\n renderers['specializationRenderer'] = this.specializationRendererTemplate()!;\n }\n \n if (this.parentTermRendererTemplate()) {\n renderers['parentTermRenderer'] = this.parentTermRendererTemplate()!;\n }\n \n return renderers;\n });\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n classProgramTerms = signal<ClassProgramTerm[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n acabrnId = signal<string | null>(null);\n acacpmId = signal<string | null>(null);\n \n // Class program and branch 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 \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 classProgramMastersOptions = computed(() => this.classProgramMasters());\n \n // Computed signal to check if branch dropdown should be shown\n showBranchDropdown = computed(() => {\n const selectedProgram = this.selectedClassProgram();\n if (!selectedProgram) return false;\n \n const generalMaster = selectedProgram.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 // Derived list filtered by searchTerm\n filteredClassProgramTerms = computed(() => {\n const q = (this.searchTerm() || '').toLowerCase().trim();\n const items = this.classProgramTerms() || [];\n if (!q) return items;\n return items.filter(cpt => {\n const name = (cpt.acapt_name || '').toLowerCase();\n const code = (cpt.acapt_code || '').toLowerCase();\n const description = (cpt.acapt_description || '').toLowerCase();\n return name.includes(q) || code.includes(q) || description.includes(q);\n });\n });\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ClassProgramTerm>>({\n id: 'class-program-term-list-grid',\n columns: [\n {\n key: 'details',\n header: 'Term Details',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'classProgramTermDetailsRenderer'\n },\n {\n key: 'acapt_code',\n header: 'Code',\n type: 'text',\n width: '120px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'acapt_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: 'acapt_class_program_id_acacpm.acacpm_alise_title',\n dataValueGetter: 'acapt_class_program_id_acacpm.acacpm_alise_title'\n },\n {\n key: 'acapt_class_prg_branch_acabrn',\n header: 'Specialization',\n type: 'custom',\n width: '180px',\n truncate: true,\n align: 'left',\n renderer: 'specializationRenderer',\n groupable: true,\n valueGetter: 'acapt_class_prg_branch_acabrn.acabrn_name',\n dataValueGetter: 'acapt_class_prg_branch_acabrn.acabrn_name'\n },\n {\n key: 'acapt_parent_class_prog_term_acapt',\n header: 'Parent Term',\n type: 'custom',\n width: '180px',\n truncate: true,\n align: 'left',\n renderer: 'parentTermRenderer'\n },\n {\n key: 'acapt_isactive',\n header: 'Status',\n type: 'custom',\n width: '120px',\n truncate: false,\n align: 'center',\n renderer: 'classProgramTermStatusRenderer'\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 class program terms...',\n searchableColumns: ['acapt_name', 'acapt_code', 'acapt_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 tree: {\n enabled: true,\n primaryKey: '_id',\n foreignKey: 'acapt_parent_class_prog_term_acapt._id',\n childrenKey: 'children',\n levelKey: 'level',\n expandedKey: 'isExpanded',\n hasChildrenKey: 'hasChildren'\n }\n });\n\n /**\n * Get action dropdown items\n */\n getActionDropdownItems(classProgramTerm: ClassProgramTerm): 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 Term',\n icon: 'edit',\n iconColor: 'tw-text-blue-400',\n textColor: 'tw-text-blue-700'\n }\n ];\n\n // Only show \"Add Term\" if this term doesn't have a parent (is at level 1)\n // Check if parent term is null/undefined or empty string\n const parentTerm = classProgramTerm.acapt_parent_class_prog_term_acapt;\n const hasParent = parentTerm && \n (typeof parentTerm === 'string' ? \n (parentTerm.trim() !== '') : \n (parentTerm && typeof parentTerm === 'object' && parentTerm._id));\n \n if (!hasParent) {\n items.push({\n id: 'addTerm',\n label: 'Add Term',\n icon: 'add',\n iconColor: 'tw-text-green-400',\n textColor: 'tw-text-green-700'\n });\n }\n\n items.push(\n {\n id: 'toggleStatus',\n label: classProgramTerm.acapt_isactive ? 'Deactivate' : 'Activate',\n icon: classProgramTerm.acapt_isactive ? 'toggle_off' : 'toggle_on',\n iconColor: classProgramTerm.acapt_isactive ? 'tw-text-orange-400' : 'tw-text-green-400',\n textColor: classProgramTerm.acapt_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, classProgramTerm: ClassProgramTerm): void {\n switch (item.id) {\n case 'view':\n this.viewClassProgramTerm(classProgramTerm);\n break;\n case 'edit':\n this.editClassProgramTerm(classProgramTerm);\n break;\n case 'addTerm':\n this.addChildTerm(classProgramTerm);\n break;\n case 'toggleStatus':\n this.toggleClassProgramTermStatus(classProgramTerm);\n break;\n case 'delete':\n this.deleteClassProgramTerm(classProgramTerm);\n break;\n }\n }\n\n ngOnInit(): void {\n this.initializeBreadcrumbData();\n this.checkRouteParams();\n this.loadClassProgramMasters();\n // Load all terms on initialization (grouping will be handled by grid)\n this.loadClassProgramTerms();\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.loadClassProgramTerms();\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 class program masters for dropdown\n */\n loadClassProgramMasters(): void {\n this.classProgramMastersLoading.set(true);\n const payload: MClassProgramMaster = {\n pagination: false,\n acacpm_isactive: true\n };\n \n this.classProgramMasterService.getClassProgramMasterList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: classProgramMasterControllerResponse) => {\n if (response?.success && response.data) {\n this.classProgramMasters.set(response.data as ProgramClass[]);\n } else {\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 }\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 this.acacpmId.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 // Don't load terms yet - wait for branch selection\n } else {\n this.classProgramBranches.set([]);\n this.selectedBranchId.set(null);\n this.acabrnId.set(null);\n // Load all terms (will be filtered by selected program if any)\n this.loadClassProgramTerms();\n }\n } else {\n this.selectedClassProgram.set(null);\n this.classProgramBranches.set([]);\n this.selectedBranchId.set(null);\n this.acabrnId.set(null);\n // Load all terms when no filter is selected\n this.loadClassProgramTerms();\n }\n }\n \n /**\n * Load class program branches\n */\n 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 // Load program terms for dropdown when branches are loaded\n if (this.selectedProgramClassId()) {\n // Will be triggered when user selects a branch\n }\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('🔄 Branch changed:', branch);\n \n this.selectedBranchId.set(branch);\n this.acabrnId.set(branch);\n \n // Load all terms (will be filtered by selected branch if any)\n this.loadClassProgramTerms();\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 /**\n * Check route parameters for acabrn_id and acacpm_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('🏢 Class Program Term params from route:', queryData);\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?.acacpm_id) {\n this.acacpmId.set(queryData.acacpm_id as string);\n console.log('🏢 Class Program ID from route:', queryData.acacpm_id);\n }\n }\n });\n }\n\n /**\n * Load class program terms data\n */\n private loadClassProgramTerms(): void {\n this.loading.set(true);\n this.error.set(null);\n \n // Build payload - only include filters if they are selected\n const acabrnId = this.acabrnId();\n const acacpmId = this.acacpmId();\n \n const payload: MClassProgramTerm = new MClassProgramTerm({\n pageIndex: 0,\n pageSize: 1000, // Load more records for grouping\n pagination: false, // Disable pagination to get all records\n query: this.searchTerm() || \"\",\n sort: {\n key: 'acapt_name',\n order: 'asc'\n },\n acapt_class_prg_branch_acabrn: acabrnId || \"\", // Only include if selected\n acapt_class_program_id_acacpm: acacpmId || \"\" // Only include if selected\n });\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('📚 Class program terms loaded:', response.data);\n console.log('📊 Sample term structure for grouping:', response.data[0] ? {\n _id: response.data[0]._id,\n acapt_name: response.data[0].acapt_name,\n programClass: response.data[0].acapt_class_program_id_acacpm,\n specialization: (response.data[0] as any).acapt_class_prg_branch_acabrn || (response.data[0] as any).acapt_class_program_branch_id_acabrn,\n programClassType: typeof response.data[0].acapt_class_program_id_acacpm,\n specializationType: typeof ((response.data[0] as any).acapt_class_prg_branch_acabrn || (response.data[0] as any).acapt_class_program_branch_id_acabrn)\n } : 'No data');\n this.classProgramTerms.set(response.data);\n this.updateGridData();\n this.notificationService.success(`Loaded ${response.data.length} class program term(s) successfully.`);\n } else {\n console.warn('⚠️ No class program term data received');\n this.classProgramTerms.set([]);\n this.updateGridData();\n this.notificationService.warning('No class program terms found.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error loading class program terms:', error);\n this.error.set('Failed to load class program terms');\n this.loading.set(false);\n this.notificationService.error('Failed to load class program terms');\n }\n });\n }\n\n /**\n * Normalize parent field - preserve nested objects for both tree view and grouping\n * The data grid component now handles nested foreign key objects generically\n */\n private normalizeParentField(terms: ClassProgramTerm[]): ClassProgramTerm[] {\n return terms.map(term => {\n const normalizedTerm = { ...term };\n \n // Keep the original object structure - tree view will extract _id generically\n // No need to convert to string ID - the grid component handles nested objects\n // This preserves the full object for display and grouping purposes\n \n // Ensure program class object structure is preserved for grouping\n if (normalizedTerm.acapt_class_program_id_acacpm) {\n if (typeof normalizedTerm.acapt_class_program_id_acacpm === 'object') {\n // Ensure acacpm_alise_title exists, fallback to acacpm_name\n const programClass = normalizedTerm.acapt_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 normalizedTerm.acapt_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('⚠️ Program class is a string ID, not an object. Grouping may not work correctly.');\n }\n }\n \n // Ensure specialization object structure is preserved for grouping\n // Handle optional specialization - some terms may not have specialization\n if (normalizedTerm.acapt_class_prg_branch_acabrn) {\n if (typeof normalizedTerm.acapt_class_prg_branch_acabrn === 'object') {\n // Ensure acabrn_name exists for grouping\n const specialization = normalizedTerm.acapt_class_prg_branch_acabrn as any;\n if (!specialization.acabrn_name) {\n specialization.acabrn_name = 'N/A';\n }\n } else if (typeof normalizedTerm.acapt_class_prg_branch_acabrn === '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('⚠️ Specialization is a string ID, not an object. Grouping may not work correctly.');\n }\n } else {\n // No specialization - create a placeholder object for consistent grouping\n // This ensures terms without specialization are grouped together\n // The valueGetter will extract 'No Specialization' from acabrn_name for grouping\n (normalizedTerm as any).acapt_class_prg_branch_acabrn = {\n _id: null,\n acabrn_name: 'No Specialization'\n };\n }\n \n return normalizedTerm;\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(): void {\n const filteredTerms = this.filteredClassProgramTerms();\n const normalizedTerms = this.normalizeParentField(filteredTerms);\n \n this.gridConfig.update(config => ({\n ...config,\n data: normalizedTerms\n }));\n }\n\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ClassProgramTerm>): 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.loadClassProgramTerms();\n }\n break;\n case 'search':\n this.searchTerm.set(event.data as string);\n this.updateGridData();\n break;\n case 'refresh':\n this.loadClassProgramTerms();\n break;\n }\n }\n\n /**\n * Create new class program term\n */\n createClassProgramTerm(): void {\n // Build query params with selected program class and branch 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 // If we have any query params, include them in the route\n if (Object.keys(queryParams).length > 0) {\n const queryString = generateStringFromObject(queryParams);\n this.router.navigate(['/control-panel/program-term-management/create', queryString]);\n } else {\n // No filters selected, navigate without query params\n this.router.navigate(['/control-panel/program-term-management/create']);\n }\n }\n\n /**\n * Add child term under a parent term\n */\n addChildTerm(parentTerm: ClassProgramTerm): void {\n if (!parentTerm._id) {\n this.notificationService.error('Invalid term selected');\n return;\n }\n\n console.log('🔍 Add Child Term - Parent Term:', parentTerm);\n\n // Get the class program ID from the parent term\n const classProgramId = typeof parentTerm.acapt_class_program_id_acacpm === 'string' \n ? parentTerm.acapt_class_program_id_acacpm \n : parentTerm.acapt_class_program_id_acacpm?._id;\n \n // Get branch ID from parent term - check both property names\n let branchId: string | undefined;\n const branchValue = (parentTerm as any).acapt_class_prg_branch_acabrn || parentTerm.acapt_class_program_branch_id_acabrn;\n \n if (branchValue) {\n if (typeof branchValue === 'string') {\n branchId = branchValue;\n } else if (typeof branchValue === 'object' && branchValue !== null) {\n branchId = branchValue._id;\n }\n }\n\n console.log('🔍 Branch ID from parent term:', branchId);\n\n // If branch ID is not in parent term, use the selected branch from filter\n if (!branchId) {\n const selectedBranch = this.selectedBranchId();\n if (selectedBranch) {\n branchId = selectedBranch;\n console.log('🔍 Branch ID from filter:', branchId);\n }\n }\n\n // If still no branch ID, use the acabrnId signal\n if (!branchId) {\n const acabrnSignalValue = this.acabrnId();\n if (acabrnSignalValue) {\n branchId = acabrnSignalValue;\n console.log('🔍 Branch ID from acabrnId signal:', branchId);\n }\n }\n\n // Build query params with parent term ID, class program ID, and branch ID\n const queryParams: any = {\n acapt_id: parentTerm._id,\n acapt_parent_id: parentTerm._id\n };\n\n if (classProgramId) {\n queryParams.acacpm_id = classProgramId;\n }\n\n if (branchId) {\n queryParams.acabrn_id = branchId;\n }\n\n console.log('🔍 Final query params for child term:', queryParams);\n\n const queryString = generateStringFromObject(queryParams);\n console.log('🔍 Query string:', queryString);\n this.router.navigate(['/control-panel/program-term-management/create', queryString]);\n }\n\n /**\n * View class program term details\n */\n viewClassProgramTerm(classProgramTerm: ClassProgramTerm): void {\n this.router.navigate(['/control-panel/class-program-term/view', classProgramTerm._id]);\n }\n\n /**\n * Edit class program term\n */\n editClassProgramTerm(classProgramTerm: ClassProgramTerm): void {\n if (!classProgramTerm._id) {\n this.notificationService.error('Invalid term selected');\n return;\n }\n \n // Encode ID as query object following the pattern used by other entities\n const queryParams = generateStringFromObject({ acapt_id: classProgramTerm._id });\n this.router.navigate(['/control-panel/program-term-management/edit', queryParams]);\n }\n\n /**\n * Delete class program term\n */\n deleteClassProgramTerm(classProgramTerm: ClassProgramTerm): void {\n this.confirmationService.confirmDelete(classProgramTerm.acapt_name).then((confirmed: boolean) => {\n if (confirmed) {\n this.loading.set(true);\n const payload: MClassProgramTermDeletePayload = {\n acapt_id: classProgramTerm._id!\n };\n\n this.classProgramTermService.deleteClassProgramTerm(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.classProgramTerms.update(terms => \n terms.filter(cpt => cpt._id !== classProgramTerm._id)\n );\n this.updateGridData();\n this.notificationService.success('Class program term deleted successfully.');\n } else {\n this.notificationService.error('Failed to delete class program term.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error deleting class program term:', error);\n this.notificationService.error('Failed to delete class program term.');\n this.loading.set(false);\n }\n });\n }\n });\n }\n\n /**\n * Toggle class program term status\n */\n toggleClassProgramTermStatus(classProgramTerm: ClassProgramTerm): void {\n this.loading.set(true);\n const payload: MClassProgramTermToggleStatusPayload = {\n acapt_id: classProgramTerm._id!\n };\n\n this.classProgramTermService.toggleClassProgramTermStatus(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.classProgramTerms.update(terms => \n terms.map(cpt => \n cpt._id === classProgramTerm._id \n ? { ...cpt, acapt_isactive: !cpt.acapt_isactive }\n : cpt\n )\n );\n this.updateGridData();\n this.notificationService.success(`Class program term ${classProgramTerm.acapt_isactive ? 'deactivated' : 'activated'} successfully.`);\n } else {\n this.notificationService.error('Failed to toggle class program term status.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error toggling class program term status:', error);\n this.notificationService.error('Failed to toggle class program term status.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Refresh data\n */\n refreshData(): void {\n this.loadClassProgramTerms();\n }\n}\n","<!-- Class Program Term Management Container -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_term' }\"\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)=\"createClassProgramTerm()\">\n Create Class Program Term\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]=\"classProgramMastersOptions()\"\n [ngModel]=\"selectedProgramClassId() || ''\"\n (ngModelChange)=\"onClassProgramChange($event)\"\n placeholder=\"Select Class Program\"\n valueKey=\"_id\"\n labelKey=\"acacpm_alise_title\"\n [loading]=\"classProgramMastersLoading()\"\n [searchable]=\"true\"\n (searchChange)=\"onClassProgramMasterSearch($event)\">\n </cide-ele-select>\n </div>\n \n @if (showBranchDropdown()) {\n <div class=\"tw-w-64\">\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]=\"classProgramBranches()\"\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 </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 #classProgramTermDetailsRendererTemplate 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-orange-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-text-orange-600 tw-w-5 tw-h-5\">schedule</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?.acapt_name || 'N/A' }}\n </h6>\n <p class=\"tw-text-xs tw-text-gray-500 tw-truncate tw-m-0\">\n {{ row?.acapt_description || '' }}\n </p>\n </div>\n </div>\n</ng-template>\n\n<ng-template #classProgramTermStatusRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n @if (row?.acapt_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?.acapt_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?.acapt_isactive,\n 'tw-bg-red-100 tw-text-red-800': !row?.acapt_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?.acapt_isactive,\n 'tw-text-red-600': !row?.acapt_isactive\n }\" class=\"tw-w-3 tw-h-3 tw-mr-1\">\n {{ row?.acapt_isactive ? 'check_circle' : 'cancel' }}\n </cide-ele-icon>\n {{ row?.acapt_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 [config]=\"{\n triggerIcon: 'more_vert',\n triggerSize: 'sm',\n usePortal: true\n }\"\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-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">school</cide-ele-icon>\n <span class=\"tw-text-sm tw-text-gray-900 tw-truncate\">\n {{ row?.acapt_class_program_id_acacpm?.acacpm_alise_title || row?.acapt_class_program_id_acacpm?.acacpm_name || 'N/A' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #specializationRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-purple-600 tw-w-4 tw-h-4\">category</cide-ele-icon>\n <span class=\"tw-text-sm tw-text-gray-900 tw-truncate\">\n {{ row?.acapt_class_prg_branch_acabrn?.acabrn_name || 'N/A' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #parentTermRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n {{ row?.acapt_parent_class_prog_term_acapt?.acapt_name || 'N/A' }}\n </div>\n</ng-template>\n"],"names":["i2"],"mappings":"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"}
1
+ {"version":3,"file":"cloud-ide-academics-class-program-term-list.component-DpFd2YcR.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/class-program-term-management/components/class-program-term-list/class-program-term-list.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/class-program-term-management/components/class-program-term-list/class-program-term-list.component.html"],"sourcesContent":["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 { filter } from 'rxjs/operators';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\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 MClassProgramTerm,\n type MClassProgramTermDeletePayload,\n type MClassProgramTermToggleStatusPayload,\n generateObjectFromString,\n generateStringFromObject,\n type MClassProgramMaster,\n type classProgramMasterControllerResponse,\n AcaClassPrgBranchListPayload,\n type classPrgBranchControllerResponse\n} from 'cloud-ide-lms-model';\nimport { CideLytClassProgramTermService } from '../../services/class-program-term.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';\n\n// Interfaces based on the model files\ninterface ClassProgramTerm {\n _id?: string;\n acapt_code?: string;\n acapt_name?: string;\n acapt_description?: string;\n acapt_class_program_id_acacpm?: string | {\n _id?: string;\n acacpm_name?: string;\n };\n acapt_class_program_branch_id_acabrn?: string | {\n _id?: string;\n acabrn_name?: string;\n };\n acapt_class_prg_branch_acabrn?: string | {\n _id?: string;\n acabrn_name?: string;\n };\n acapt_parent_class_prog_term_acapt?: string | {\n _id?: string;\n acapt_name?: string;\n };\n acapt_isactive?: boolean;\n acapt_iscurrent?: boolean;\n acapt_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?: any;\n}\n\ninterface ClassProgramBranch {\n _id?: string;\n acabrn_name?: string;\n acabrn_code?: string;\n}\n\n@Component({\n selector: 'cide-academics-class-program-term-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-term-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 ClassProgramTermListComponent 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 classProgramTermService = inject(CideLytClassProgramTermService);\n private classProgramMasterService = inject(CLASS_PROGRAM_MASTER_SERVICE_TOKEN) as IClassProgramMasterService;\n private classProgramBranchService = inject(CideLytClassProgramBranchService);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n classProgramTermDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('classProgramTermDetailsRendererTemplate');\n classProgramTermStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('classProgramTermStatusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n programClassRendererTemplate = viewChild<TemplateRef<TemplateContext>>('programClassRendererTemplate');\n specializationRendererTemplate = viewChild<TemplateRef<TemplateContext>>('specializationRendererTemplate');\n parentTermRendererTemplate = viewChild<TemplateRef<TemplateContext>>('parentTermRendererTemplate');\n\n // Computed template renderers for grid\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => {\n const renderers: Record<string, TemplateRef<TemplateContext>> = {\n classProgramTermDetailsRenderer: this.classProgramTermDetailsRendererTemplate(),\n classProgramTermStatusRenderer: this.classProgramTermStatusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n };\n \n if (this.programClassRendererTemplate()) {\n renderers['programClassRenderer'] = this.programClassRendererTemplate()!;\n }\n \n if (this.specializationRendererTemplate()) {\n renderers['specializationRenderer'] = this.specializationRendererTemplate()!;\n }\n \n if (this.parentTermRendererTemplate()) {\n renderers['parentTermRenderer'] = this.parentTermRendererTemplate()!;\n }\n \n return renderers;\n });\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n classProgramTerms = signal<ClassProgramTerm[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n acabrnId = signal<string | null>(null);\n acacpmId = signal<string | null>(null);\n \n // Class program and branch 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 \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 classProgramMastersOptions = computed(() => this.classProgramMasters());\n \n // Computed signal to check if branch dropdown should be shown\n showBranchDropdown = computed(() => {\n const selectedProgram = this.selectedClassProgram();\n if (!selectedProgram) return false;\n \n const generalMaster = selectedProgram.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 // Derived list filtered by searchTerm\n filteredClassProgramTerms = computed(() => {\n const q = (this.searchTerm() || '').toLowerCase().trim();\n const items = this.classProgramTerms() || [];\n if (!q) return items;\n return items.filter(cpt => {\n const name = (cpt.acapt_name || '').toLowerCase();\n const code = (cpt.acapt_code || '').toLowerCase();\n const description = (cpt.acapt_description || '').toLowerCase();\n return name.includes(q) || code.includes(q) || description.includes(q);\n });\n });\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ClassProgramTerm>>({\n id: 'class-program-term-list-grid',\n columns: [\n {\n key: 'details',\n header: 'Term Details',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'classProgramTermDetailsRenderer'\n },\n {\n key: 'acapt_code',\n header: 'Code',\n type: 'text',\n width: '120px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'acapt_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: 'acapt_class_program_id_acacpm.acacpm_alise_title',\n dataValueGetter: 'acapt_class_program_id_acacpm.acacpm_alise_title'\n },\n {\n key: 'acapt_class_prg_branch_acabrn',\n header: 'Specialization',\n type: 'custom',\n width: '180px',\n truncate: true,\n align: 'left',\n renderer: 'specializationRenderer',\n groupable: true,\n valueGetter: 'acapt_class_prg_branch_acabrn.acabrn_name',\n dataValueGetter: 'acapt_class_prg_branch_acabrn.acabrn_name'\n },\n {\n key: 'acapt_parent_class_prog_term_acapt',\n header: 'Parent Term',\n type: 'custom',\n width: '180px',\n truncate: true,\n align: 'left',\n renderer: 'parentTermRenderer'\n },\n {\n key: 'acapt_isactive',\n header: 'Status',\n type: 'custom',\n width: '120px',\n truncate: false,\n align: 'center',\n renderer: 'classProgramTermStatusRenderer'\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 class program terms...',\n searchableColumns: ['acapt_name', 'acapt_code', 'acapt_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 tree: {\n enabled: true,\n primaryKey: '_id',\n foreignKey: 'acapt_parent_class_prog_term_acapt._id',\n childrenKey: 'children',\n levelKey: 'level',\n expandedKey: 'isExpanded',\n hasChildrenKey: 'hasChildren'\n }\n });\n\n /**\n * Get action dropdown items\n */\n getActionDropdownItems(classProgramTerm: ClassProgramTerm): 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 Term',\n icon: 'edit',\n iconColor: 'tw-text-blue-400',\n textColor: 'tw-text-blue-700'\n }\n ];\n\n // Only show \"Add Term\" if this term doesn't have a parent (is at level 1)\n // Check if parent term is null/undefined or empty string\n const parentTerm = classProgramTerm.acapt_parent_class_prog_term_acapt;\n const hasParent = parentTerm && \n (typeof parentTerm === 'string' ? \n (parentTerm.trim() !== '') : \n (parentTerm && typeof parentTerm === 'object' && parentTerm._id));\n \n if (!hasParent) {\n items.push({\n id: 'addTerm',\n label: 'Add Term',\n icon: 'add',\n iconColor: 'tw-text-green-400',\n textColor: 'tw-text-green-700'\n });\n }\n\n items.push(\n {\n id: 'toggleStatus',\n label: classProgramTerm.acapt_isactive ? 'Deactivate' : 'Activate',\n icon: classProgramTerm.acapt_isactive ? 'toggle_off' : 'toggle_on',\n iconColor: classProgramTerm.acapt_isactive ? 'tw-text-orange-400' : 'tw-text-green-400',\n textColor: classProgramTerm.acapt_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, classProgramTerm: ClassProgramTerm): void {\n switch (item.id) {\n case 'view':\n this.viewClassProgramTerm(classProgramTerm);\n break;\n case 'edit':\n this.editClassProgramTerm(classProgramTerm);\n break;\n case 'addTerm':\n this.addChildTerm(classProgramTerm);\n break;\n case 'toggleStatus':\n this.toggleClassProgramTermStatus(classProgramTerm);\n break;\n case 'delete':\n this.deleteClassProgramTerm(classProgramTerm);\n break;\n }\n }\n\n ngOnInit(): void {\n this.initializeBreadcrumbData();\n this.checkRouteParams();\n this.loadClassProgramMasters();\n // Load all terms on initialization (grouping will be handled by grid)\n this.loadClassProgramTerms();\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.loadClassProgramTerms();\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 class program masters for dropdown\n */\n loadClassProgramMasters(): void {\n this.classProgramMastersLoading.set(true);\n const payload: MClassProgramMaster = {\n pagination: false,\n acacpm_isactive: true\n };\n \n this.classProgramMasterService.getClassProgramMasterList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: classProgramMasterControllerResponse) => {\n if (response?.success && response.data) {\n this.classProgramMasters.set(response.data as ProgramClass[]);\n } else {\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 }\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 this.acacpmId.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 // Don't load terms yet - wait for branch selection\n } else {\n this.classProgramBranches.set([]);\n this.selectedBranchId.set(null);\n this.acabrnId.set(null);\n // Load all terms (will be filtered by selected program if any)\n this.loadClassProgramTerms();\n }\n } else {\n this.selectedClassProgram.set(null);\n this.classProgramBranches.set([]);\n this.selectedBranchId.set(null);\n this.acabrnId.set(null);\n // Load all terms when no filter is selected\n this.loadClassProgramTerms();\n }\n }\n \n /**\n * Load class program branches\n */\n 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 // Load program terms for dropdown when branches are loaded\n if (this.selectedProgramClassId()) {\n // Will be triggered when user selects a branch\n }\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('🔄 Branch changed:', branch);\n \n this.selectedBranchId.set(branch);\n this.acabrnId.set(branch);\n \n // Load all terms (will be filtered by selected branch if any)\n this.loadClassProgramTerms();\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 /**\n * Check route parameters for acabrn_id and acacpm_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('🏢 Class Program Term params from route:', queryData);\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?.acacpm_id) {\n this.acacpmId.set(queryData.acacpm_id as string);\n console.log('🏢 Class Program ID from route:', queryData.acacpm_id);\n }\n }\n });\n }\n\n /**\n * Load class program terms data\n */\n private loadClassProgramTerms(): void {\n this.loading.set(true);\n this.error.set(null);\n \n // Build payload - only include filters if they are selected\n const acabrnId = this.acabrnId();\n const acacpmId = this.acacpmId();\n \n const payload: MClassProgramTerm = new MClassProgramTerm({\n pageIndex: 0,\n pageSize: 1000, // Load more records for grouping\n pagination: false, // Disable pagination to get all records\n query: this.searchTerm() || \"\",\n sort: {\n key: 'acapt_name',\n order: 'asc'\n },\n acapt_class_prg_branch_acabrn: acabrnId || \"\", // Only include if selected\n acapt_class_program_id_acacpm: acacpmId || \"\" // Only include if selected\n });\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('📚 Class program terms loaded:', response.data);\n console.log('📊 Sample term structure for grouping:', response.data[0] ? {\n _id: response.data[0]._id,\n acapt_name: response.data[0].acapt_name,\n programClass: response.data[0].acapt_class_program_id_acacpm,\n specialization: (response.data[0] as any).acapt_class_prg_branch_acabrn || (response.data[0] as any).acapt_class_program_branch_id_acabrn,\n programClassType: typeof response.data[0].acapt_class_program_id_acacpm,\n specializationType: typeof ((response.data[0] as any).acapt_class_prg_branch_acabrn || (response.data[0] as any).acapt_class_program_branch_id_acabrn)\n } : 'No data');\n this.classProgramTerms.set(response.data);\n this.updateGridData();\n this.notificationService.success(`Loaded ${response.data.length} class program term(s) successfully.`);\n } else {\n console.warn('⚠️ No class program term data received');\n this.classProgramTerms.set([]);\n this.updateGridData();\n this.notificationService.warning('No class program terms found.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error loading class program terms:', error);\n this.error.set('Failed to load class program terms');\n this.loading.set(false);\n this.notificationService.error('Failed to load class program terms');\n }\n });\n }\n\n /**\n * Normalize parent field - preserve nested objects for both tree view and grouping\n * The data grid component now handles nested foreign key objects generically\n */\n private normalizeParentField(terms: ClassProgramTerm[]): ClassProgramTerm[] {\n return terms.map(term => {\n const normalizedTerm = { ...term };\n \n // Keep the original object structure - tree view will extract _id generically\n // No need to convert to string ID - the grid component handles nested objects\n // This preserves the full object for display and grouping purposes\n \n // Ensure program class object structure is preserved for grouping\n if (normalizedTerm.acapt_class_program_id_acacpm) {\n if (typeof normalizedTerm.acapt_class_program_id_acacpm === 'object') {\n // Ensure acacpm_alise_title exists, fallback to acacpm_name\n const programClass = normalizedTerm.acapt_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 normalizedTerm.acapt_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('⚠️ Program class is a string ID, not an object. Grouping may not work correctly.');\n }\n }\n \n // Ensure specialization object structure is preserved for grouping\n // Handle optional specialization - some terms may not have specialization\n if (normalizedTerm.acapt_class_prg_branch_acabrn) {\n if (typeof normalizedTerm.acapt_class_prg_branch_acabrn === 'object') {\n // Ensure acabrn_name exists for grouping\n const specialization = normalizedTerm.acapt_class_prg_branch_acabrn as any;\n if (!specialization.acabrn_name) {\n specialization.acabrn_name = 'N/A';\n }\n } else if (typeof normalizedTerm.acapt_class_prg_branch_acabrn === '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('⚠️ Specialization is a string ID, not an object. Grouping may not work correctly.');\n }\n } else {\n // No specialization - create a placeholder object for consistent grouping\n // This ensures terms without specialization are grouped together\n // The valueGetter will extract 'No Specialization' from acabrn_name for grouping\n (normalizedTerm as any).acapt_class_prg_branch_acabrn = {\n _id: null,\n acabrn_name: 'No Specialization'\n };\n }\n \n return normalizedTerm;\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(): void {\n const filteredTerms = this.filteredClassProgramTerms();\n const normalizedTerms = this.normalizeParentField(filteredTerms);\n \n this.gridConfig.update(config => ({\n ...config,\n data: normalizedTerms\n }));\n }\n\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ClassProgramTerm>): 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.loadClassProgramTerms();\n }\n break;\n case 'search':\n this.searchTerm.set(event.data as string);\n this.updateGridData();\n break;\n case 'refresh':\n this.loadClassProgramTerms();\n break;\n }\n }\n\n /**\n * Create new class program term\n */\n createClassProgramTerm(): void {\n // Build query params with selected program class and branch 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 // If we have any query params, include them in the route\n if (Object.keys(queryParams).length > 0) {\n const queryString = generateStringFromObject(queryParams);\n this.router.navigate(['/control-panel/program-term-management/create', queryString]);\n } else {\n // No filters selected, navigate without query params\n this.router.navigate(['/control-panel/program-term-management/create']);\n }\n }\n\n /**\n * Add child term under a parent term\n */\n addChildTerm(parentTerm: ClassProgramTerm): void {\n if (!parentTerm._id) {\n this.notificationService.error('Invalid term selected');\n return;\n }\n\n console.log('🔍 Add Child Term - Parent Term:', parentTerm);\n\n // Get the class program ID from the parent term\n const classProgramId = typeof parentTerm.acapt_class_program_id_acacpm === 'string' \n ? parentTerm.acapt_class_program_id_acacpm \n : parentTerm.acapt_class_program_id_acacpm?._id;\n \n // Get branch ID from parent term - check both property names\n let branchId: string | undefined;\n const branchValue = (parentTerm as any).acapt_class_prg_branch_acabrn || parentTerm.acapt_class_program_branch_id_acabrn;\n \n if (branchValue) {\n if (typeof branchValue === 'string') {\n branchId = branchValue;\n } else if (typeof branchValue === 'object' && branchValue !== null) {\n branchId = branchValue._id;\n }\n }\n\n console.log('🔍 Branch ID from parent term:', branchId);\n\n // If branch ID is not in parent term, use the selected branch from filter\n if (!branchId) {\n const selectedBranch = this.selectedBranchId();\n if (selectedBranch) {\n branchId = selectedBranch;\n console.log('🔍 Branch ID from filter:', branchId);\n }\n }\n\n // If still no branch ID, use the acabrnId signal\n if (!branchId) {\n const acabrnSignalValue = this.acabrnId();\n if (acabrnSignalValue) {\n branchId = acabrnSignalValue;\n console.log('🔍 Branch ID from acabrnId signal:', branchId);\n }\n }\n\n // Build query params with parent term ID, class program ID, and branch ID\n const queryParams: any = {\n acapt_id: parentTerm._id,\n acapt_parent_id: parentTerm._id\n };\n\n if (classProgramId) {\n queryParams.acacpm_id = classProgramId;\n }\n\n if (branchId) {\n queryParams.acabrn_id = branchId;\n }\n\n console.log('🔍 Final query params for child term:', queryParams);\n\n const queryString = generateStringFromObject(queryParams);\n console.log('🔍 Query string:', queryString);\n this.router.navigate(['/control-panel/program-term-management/create', queryString]);\n }\n\n /**\n * View class program term details\n */\n viewClassProgramTerm(classProgramTerm: ClassProgramTerm): void {\n this.router.navigate(['/control-panel/class-program-term/view', classProgramTerm._id]);\n }\n\n /**\n * Edit class program term\n */\n editClassProgramTerm(classProgramTerm: ClassProgramTerm): void {\n if (!classProgramTerm._id) {\n this.notificationService.error('Invalid term selected');\n return;\n }\n \n // Encode ID as query object following the pattern used by other entities\n const queryParams = generateStringFromObject({ acapt_id: classProgramTerm._id });\n this.router.navigate(['/control-panel/program-term-management/edit', queryParams]);\n }\n\n /**\n * Delete class program term\n */\n deleteClassProgramTerm(classProgramTerm: ClassProgramTerm): void {\n this.confirmationService.confirmDelete(classProgramTerm.acapt_name).then((confirmed: boolean) => {\n if (confirmed) {\n this.loading.set(true);\n const payload: MClassProgramTermDeletePayload = {\n acapt_id: classProgramTerm._id!\n };\n\n this.classProgramTermService.deleteClassProgramTerm(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.classProgramTerms.update(terms => \n terms.filter(cpt => cpt._id !== classProgramTerm._id)\n );\n this.updateGridData();\n this.notificationService.success('Class program term deleted successfully.');\n } else {\n this.notificationService.error('Failed to delete class program term.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error deleting class program term:', error);\n this.notificationService.error('Failed to delete class program term.');\n this.loading.set(false);\n }\n });\n }\n });\n }\n\n /**\n * Toggle class program term status\n */\n toggleClassProgramTermStatus(classProgramTerm: ClassProgramTerm): void {\n this.loading.set(true);\n const payload: MClassProgramTermToggleStatusPayload = {\n acapt_id: classProgramTerm._id!\n };\n\n this.classProgramTermService.toggleClassProgramTermStatus(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.classProgramTerms.update(terms => \n terms.map(cpt => \n cpt._id === classProgramTerm._id \n ? { ...cpt, acapt_isactive: !cpt.acapt_isactive }\n : cpt\n )\n );\n this.updateGridData();\n this.notificationService.success(`Class program term ${classProgramTerm.acapt_isactive ? 'deactivated' : 'activated'} successfully.`);\n } else {\n this.notificationService.error('Failed to toggle class program term status.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error toggling class program term status:', error);\n this.notificationService.error('Failed to toggle class program term status.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Refresh data\n */\n refreshData(): void {\n this.loadClassProgramTerms();\n }\n}\n","<!-- Class Program Term Management Container -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_term' }\"\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)=\"createClassProgramTerm()\">\n Create Class Program Term\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]=\"classProgramMastersOptions()\"\n [ngModel]=\"selectedProgramClassId() || ''\"\n (ngModelChange)=\"onClassProgramChange($event)\"\n placeholder=\"Select Class Program\"\n valueKey=\"_id\"\n labelKey=\"acacpm_alise_title\"\n [loading]=\"classProgramMastersLoading()\"\n [searchable]=\"true\"\n (searchChange)=\"onClassProgramMasterSearch($event)\">\n </cide-ele-select>\n </div>\n \n @if (showBranchDropdown()) {\n <div class=\"tw-w-64\">\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]=\"classProgramBranches()\"\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 </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 #classProgramTermDetailsRendererTemplate 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-orange-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-text-orange-600 tw-w-5 tw-h-5\">schedule</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?.acapt_name || 'N/A' }}\n </h6>\n <p class=\"tw-text-xs tw-text-gray-500 tw-truncate tw-m-0\">\n {{ row?.acapt_description || '' }}\n </p>\n </div>\n </div>\n</ng-template>\n\n<ng-template #classProgramTermStatusRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n @if (row?.acapt_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?.acapt_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?.acapt_isactive,\n 'tw-bg-red-100 tw-text-red-800': !row?.acapt_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?.acapt_isactive,\n 'tw-text-red-600': !row?.acapt_isactive\n }\" class=\"tw-w-3 tw-h-3 tw-mr-1\">\n {{ row?.acapt_isactive ? 'check_circle' : 'cancel' }}\n </cide-ele-icon>\n {{ row?.acapt_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 [config]=\"{\n triggerIcon: 'more_vert',\n triggerSize: 'sm',\n usePortal: true\n }\"\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-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">school</cide-ele-icon>\n <span class=\"tw-text-sm tw-text-gray-900 tw-truncate\">\n {{ row?.acapt_class_program_id_acacpm?.acacpm_alise_title || row?.acapt_class_program_id_acacpm?.acacpm_name || 'N/A' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #specializationRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-purple-600 tw-w-4 tw-h-4\">category</cide-ele-icon>\n <span class=\"tw-text-sm tw-text-gray-900 tw-truncate\">\n {{ row?.acapt_class_prg_branch_acabrn?.acabrn_name || 'N/A' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #parentTermRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n {{ row?.acapt_parent_class_prog_term_acapt?.acapt_name || 'N/A' }}\n </div>\n</ng-template>\n"],"names":["i2"],"mappings":"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"}
@@ -12,7 +12,7 @@ import { switchMap, catchError, map, filter } from 'rxjs/operators';
12
12
  import { CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideEleTabComponent, CideIconComponent, CideSelectComponent, CideFormFieldErrorComponent, ConfirmationService, NotificationService, CideEleDataGridComponent, CideEleDropdownComponent } from 'cloud-ide-element';
13
13
  import { HttpClient } from '@angular/common/http';
14
14
  import { generateStringFromObject, cidePath, hostManagerRoutesUrl, academicsRoutesUrl, generateObjectFromString, AcaClassPrgBranchListPayload, MClassProgramTerm, MPrgTrmSectionInsertUpdatePayload, MPrgTrmSection } from 'cloud-ide-lms-model';
15
- import { ENTITY_SERVICE_TOKEN, CideCoreGeneralMasterService, CLASS_PROGRAM_MASTER_SERVICE_TOKEN } from 'cloud-ide-shared';
15
+ import { ENTITY_SERVICE_TOKEN, CideCoreGeneralMasterService, CLASS_PROGRAM_MASTER_SERVICE_TOKEN, PROGRAM_TERM_SECTION_SERVICE_TOKEN } from 'cloud-ide-shared';
16
16
  import { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';
17
17
 
18
18
  const academicsRoutes = [
@@ -59,7 +59,7 @@ const academicsRoutes = [
59
59
  },
60
60
  {
61
61
  path: 'program-class-management',
62
- loadComponent: () => import('./cloud-ide-academics-program-class-list.component-CkzH8u8u.mjs').then(c => c.ProgramClassListComponent),
62
+ loadComponent: () => import('./cloud-ide-academics-program-class-list.component-hK0kmMRc.mjs').then(c => c.ProgramClassListComponent),
63
63
  title: 'Program Class Management',
64
64
  canActivate: [authGuard],
65
65
  data: {
@@ -69,7 +69,7 @@ const academicsRoutes = [
69
69
  },
70
70
  {
71
71
  path: 'program-class-management/create',
72
- loadComponent: () => import('./cloud-ide-academics-program-class-create.component-x0rh1ESo.mjs').then(c => c.ProgramClassCreateComponent),
72
+ loadComponent: () => import('./cloud-ide-academics-program-class-create.component-CR-ylJpI.mjs').then(c => c.ProgramClassCreateComponent),
73
73
  title: 'Create Program Class',
74
74
  canActivate: [authGuard],
75
75
  data: {
@@ -79,7 +79,7 @@ const academicsRoutes = [
79
79
  },
80
80
  {
81
81
  path: 'program-class-management/edit/:query',
82
- loadComponent: () => import('./cloud-ide-academics-program-class-create.component-x0rh1ESo.mjs').then(c => c.ProgramClassCreateComponent),
82
+ loadComponent: () => import('./cloud-ide-academics-program-class-create.component-CR-ylJpI.mjs').then(c => c.ProgramClassCreateComponent),
83
83
  title: 'Edit Program Class',
84
84
  canActivate: [authGuard],
85
85
  data: {
@@ -89,7 +89,7 @@ const academicsRoutes = [
89
89
  },
90
90
  {
91
91
  path: 'program-class-management/view/:query',
92
- loadComponent: () => import('./cloud-ide-academics-program-class-create.component-x0rh1ESo.mjs').then(c => c.ProgramClassCreateComponent),
92
+ loadComponent: () => import('./cloud-ide-academics-program-class-create.component-CR-ylJpI.mjs').then(c => c.ProgramClassCreateComponent),
93
93
  title: 'View Program Class',
94
94
  canActivate: [authGuard],
95
95
  data: {
@@ -99,7 +99,7 @@ const academicsRoutes = [
99
99
  },
100
100
  {
101
101
  path: 'program-term-management/create',
102
- loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-B-7JRpVE.mjs').then(c => c.ClassProgramTermCreateComponent),
102
+ loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-DdH7lNem.mjs').then(c => c.ClassProgramTermCreateComponent),
103
103
  title: 'Create Class Program Term',
104
104
  canActivate: [authGuard],
105
105
  data: {
@@ -109,7 +109,7 @@ const academicsRoutes = [
109
109
  },
110
110
  {
111
111
  path: 'program-term-management/create/:query',
112
- loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-B-7JRpVE.mjs').then(c => c.ClassProgramTermCreateComponent),
112
+ loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-DdH7lNem.mjs').then(c => c.ClassProgramTermCreateComponent),
113
113
  title: 'Create Class Program Term',
114
114
  canActivate: [authGuard],
115
115
  data: {
@@ -119,7 +119,7 @@ const academicsRoutes = [
119
119
  },
120
120
  {
121
121
  path: 'program-term-management/edit/:query',
122
- loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-B-7JRpVE.mjs').then(c => c.ClassProgramTermCreateComponent),
122
+ loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-DdH7lNem.mjs').then(c => c.ClassProgramTermCreateComponent),
123
123
  title: 'Edit Class Program Term',
124
124
  canActivate: [authGuard],
125
125
  data: {
@@ -129,7 +129,7 @@ const academicsRoutes = [
129
129
  },
130
130
  {
131
131
  path: 'program-term-management/view/:query',
132
- loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-B-7JRpVE.mjs').then(c => c.ClassProgramTermCreateComponent),
132
+ loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-DdH7lNem.mjs').then(c => c.ClassProgramTermCreateComponent),
133
133
  title: 'View Class Program Term',
134
134
  canActivate: [authGuard],
135
135
  data: {
@@ -139,7 +139,7 @@ const academicsRoutes = [
139
139
  },
140
140
  {
141
141
  path: 'program-term-management',
142
- loadComponent: () => import('./cloud-ide-academics-class-program-term-list.component-DObKkh-y.mjs').then(c => c.ClassProgramTermListComponent),
142
+ loadComponent: () => import('./cloud-ide-academics-class-program-term-list.component-DpFd2YcR.mjs').then(c => c.ClassProgramTermListComponent),
143
143
  title: 'Class Program Term Management',
144
144
  canActivate: [authGuard],
145
145
  data: {
@@ -149,7 +149,7 @@ const academicsRoutes = [
149
149
  },
150
150
  {
151
151
  path: 'program-term-management/:query',
152
- loadComponent: () => import('./cloud-ide-academics-class-program-term-list.component-DObKkh-y.mjs').then(c => c.ClassProgramTermListComponent),
152
+ loadComponent: () => import('./cloud-ide-academics-class-program-term-list.component-DpFd2YcR.mjs').then(c => c.ClassProgramTermListComponent),
153
153
  title: 'Class Program Term Management',
154
154
  canActivate: [authGuard],
155
155
  data: {
@@ -5362,7 +5362,7 @@ var programTermSectionList_component = /*#__PURE__*/Object.freeze({
5362
5362
  ProgramTermSectionListComponent: ProgramTermSectionListComponent
5363
5363
  });
5364
5364
 
5365
- class ProgramSectionSelectorComponent {
5365
+ class CideLytProgramSectionSelectorComponent {
5366
5366
  // Inputs
5367
5367
  formGroup = input.required(...(ngDevMode ? [{ debugName: "formGroup" }] : []));
5368
5368
  classProgramControlName = input('class_program_id', ...(ngDevMode ? [{ debugName: "classProgramControlName" }] : []));
@@ -5383,7 +5383,7 @@ class ProgramSectionSelectorComponent {
5383
5383
  http = inject(HttpClient);
5384
5384
  classProgramService = inject(CLASS_PROGRAM_MASTER_SERVICE_TOKEN);
5385
5385
  branchService = inject(CideLytClassProgramBranchService);
5386
- sectionService = inject(CideLytProgramTermSectionService);
5386
+ sectionService = inject(PROGRAM_TERM_SECTION_SERVICE_TOKEN);
5387
5387
  notificationService = inject(NotificationService);
5388
5388
  // State
5389
5389
  classProgramMasters = signal([], ...(ngDevMode ? [{ debugName: "classProgramMasters" }] : []));
@@ -6102,12 +6102,12 @@ class ProgramSectionSelectorComponent {
6102
6102
  }
6103
6103
  });
6104
6104
  }
6105
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ProgramSectionSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6106
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: ProgramSectionSelectorComponent, isStandalone: true, selector: "cide-academics-program-section-selector", inputs: { formGroup: { classPropertyName: "formGroup", publicName: "formGroup", isSignal: true, isRequired: true, transformFunction: null }, classProgramControlName: { classPropertyName: "classProgramControlName", publicName: "classProgramControlName", isSignal: true, isRequired: false, transformFunction: null }, branchControlName: { classPropertyName: "branchControlName", publicName: "branchControlName", isSignal: true, isRequired: false, transformFunction: null }, termControlName: { classPropertyName: "termControlName", publicName: "termControlName", isSignal: true, isRequired: false, transformFunction: null }, sectionControlName: { classPropertyName: "sectionControlName", publicName: "sectionControlName", isSignal: true, isRequired: false, transformFunction: null }, academicYearId: { classPropertyName: "academicYearId", publicName: "academicYearId", isSignal: true, isRequired: false, transformFunction: null }, entityId: { classPropertyName: "entityId", publicName: "entityId", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, showLabels: { classPropertyName: "showLabels", publicName: "showLabels", isSignal: true, isRequired: false, transformFunction: null }, gridCols: { classPropertyName: "gridCols", publicName: "gridCols", isSignal: true, isRequired: false, transformFunction: null }, showAllPrograms: { classPropertyName: "showAllPrograms", publicName: "showAllPrograms", isSignal: true, isRequired: false, transformFunction: null }, includeInactive: { classPropertyName: "includeInactive", publicName: "includeInactive", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valuesChange: "valuesChange" }, ngImport: i0, template: "<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", styles: [".program-section-selector{display:grid;gap:1rem;width:100%;border:none;padding:0;margin:0;background:transparent}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }] });
6105
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytProgramSectionSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6106
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideLytProgramSectionSelectorComponent, isStandalone: true, selector: "cide-lyt-program-section-selector", inputs: { formGroup: { classPropertyName: "formGroup", publicName: "formGroup", isSignal: true, isRequired: true, transformFunction: null }, classProgramControlName: { classPropertyName: "classProgramControlName", publicName: "classProgramControlName", isSignal: true, isRequired: false, transformFunction: null }, branchControlName: { classPropertyName: "branchControlName", publicName: "branchControlName", isSignal: true, isRequired: false, transformFunction: null }, termControlName: { classPropertyName: "termControlName", publicName: "termControlName", isSignal: true, isRequired: false, transformFunction: null }, sectionControlName: { classPropertyName: "sectionControlName", publicName: "sectionControlName", isSignal: true, isRequired: false, transformFunction: null }, academicYearId: { classPropertyName: "academicYearId", publicName: "academicYearId", isSignal: true, isRequired: false, transformFunction: null }, entityId: { classPropertyName: "entityId", publicName: "entityId", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, showLabels: { classPropertyName: "showLabels", publicName: "showLabels", isSignal: true, isRequired: false, transformFunction: null }, gridCols: { classPropertyName: "gridCols", publicName: "gridCols", isSignal: true, isRequired: false, transformFunction: null }, showAllPrograms: { classPropertyName: "showAllPrograms", publicName: "showAllPrograms", isSignal: true, isRequired: false, transformFunction: null }, includeInactive: { classPropertyName: "includeInactive", publicName: "includeInactive", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valuesChange: "valuesChange" }, ngImport: i0, template: "<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", styles: [".program-section-selector{display:grid;gap:1rem;width:100%;border:none;padding:0;margin:0;background:transparent}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }] });
6107
6107
  }
6108
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ProgramSectionSelectorComponent, decorators: [{
6108
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytProgramSectionSelectorComponent, decorators: [{
6109
6109
  type: Component,
6110
- args: [{ selector: 'cide-academics-program-section-selector', standalone: true, imports: [
6110
+ args: [{ selector: 'cide-lyt-program-section-selector', standalone: true, imports: [
6111
6111
  CommonModule,
6112
6112
  ReactiveFormsModule,
6113
6113
  CideSelectComponent,
@@ -6123,5 +6123,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
6123
6123
  * Generated bundle index. Do not edit.
6124
6124
  */
6125
6125
 
6126
- export { AcademicYearCreateComponent as A, CideLytProgramClassService as C, ProgramTermSectionCreateComponent as P, CideLytAcademicYearService as a, CideLytClassProgramBranchService as b, CideLytClassProgramTermService as c, academicsRoutes as d, AcademicYearListComponent as e, CideLytAcademicYearMappingService as f, CideLytClassProgramBranchListComponent as g, CideLytClassProgramBranchFormComponent as h, ProgramTermSectionListComponent as i, CideLytProgramTermSectionService as j, ProgramSectionSelectorComponent as k };
6127
- //# sourceMappingURL=cloud-ide-academics-cloud-ide-academics-FwQEJSnJ.mjs.map
6126
+ export { AcademicYearCreateComponent as A, CideLytProgramClassService as C, ProgramTermSectionCreateComponent as P, CideLytAcademicYearService as a, CideLytClassProgramBranchService as b, CideLytClassProgramTermService as c, academicsRoutes as d, AcademicYearListComponent as e, CideLytAcademicYearMappingService as f, CideLytClassProgramBranchListComponent as g, CideLytClassProgramBranchFormComponent as h, ProgramTermSectionListComponent as i, CideLytProgramTermSectionService as j, CideLytProgramSectionSelectorComponent as k };
6127
+ //# sourceMappingURL=cloud-ide-academics-cloud-ide-academics-BAV1CsCe.mjs.map