cloud-ide-academics 0.0.28 → 0.0.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/cloud-ide-academics-class-program-term-create.component-B-7JRpVE.mjs +1196 -0
- package/fesm2022/cloud-ide-academics-class-program-term-create.component-B-7JRpVE.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-class-program-term-list.component-CP2vlRBP.mjs → cloud-ide-academics-class-program-term-list.component-DObKkh-y.mjs} +186 -48
- package/fesm2022/cloud-ide-academics-class-program-term-list.component-DObKkh-y.mjs.map +1 -0
- package/fesm2022/cloud-ide-academics-cloud-ide-academics-FwQEJSnJ.mjs +6127 -0
- package/fesm2022/cloud-ide-academics-cloud-ide-academics-FwQEJSnJ.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-program-class-create.component-KijRP6Nl.mjs → cloud-ide-academics-program-class-create.component-x0rh1ESo.mjs} +45 -23
- package/fesm2022/cloud-ide-academics-program-class-create.component-x0rh1ESo.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-program-class-list.component-B5cy2Gpk.mjs → cloud-ide-academics-program-class-list.component-CkzH8u8u.mjs} +10 -9
- package/fesm2022/cloud-ide-academics-program-class-list.component-CkzH8u8u.mjs.map +1 -0
- package/fesm2022/cloud-ide-academics.mjs +1 -1
- package/index.d.ts +500 -18
- package/package.json +1 -1
- package/fesm2022/cloud-ide-academics-class-program-term-create.component-BRbHViJN.mjs +0 -659
- package/fesm2022/cloud-ide-academics-class-program-term-create.component-BRbHViJN.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-class-program-term-list.component-CP2vlRBP.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-class-program-term.service-BW4PJQEM.mjs +0 -111
- package/fesm2022/cloud-ide-academics-class-program-term.service-BW4PJQEM.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-cloud-ide-academics-g9qZGJtG.mjs +0 -3102
- package/fesm2022/cloud-ide-academics-cloud-ide-academics-g9qZGJtG.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-program-class-create.component-KijRP6Nl.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-program-class-list.component-B5cy2Gpk.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-program-term-section-create.component-DHrTb-XI.mjs +0 -248
- package/fesm2022/cloud-ide-academics-program-term-section-create.component-DHrTb-XI.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-program-term-section-list.component-ktIAxvxR.mjs +0 -495
- package/fesm2022/cloud-ide-academics-program-term-section-list.component-ktIAxvxR.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-ide-academics-class-program-term-create.component-B-7JRpVE.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/class-program-term-management/components/class-program-term-create/class-program-term-create.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/class-program-term-management/components/class-program-term-create/class-program-term-create.component.html"],"sourcesContent":["import { Component, inject, signal, computed, OnInit, DestroyRef, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, FormArray, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideIconComponent, CideSelectComponent, NotificationService, ConfirmationService } from 'cloud-ide-element';\nimport { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { ENTITY_SERVICE_TOKEN, type IEntityService } from 'cloud-ide-shared';\nimport { CideLytClassProgramBranchService } from '../../../class-program-branch-management/services/class-program-branch.service';\nimport { CideLytProgramClassService } from '../../../program-class-management/services/program-class.service';\nimport { CideLytClassProgramTermService } from '../../services/class-program-term.service';\nimport { Observable, forkJoin, of } from 'rxjs';\nimport { map, catchError, switchMap } from 'rxjs/operators';\nimport { \n type AcaClassPrgBranchListPayload,\n type AcaClassPrgBranchResponse,\n type MClassProgramTermInsertUpdatePayload,\n type MClassProgramTermGetByIdPayload,\n MClassProgramTerm,\n generateObjectFromString\n} from 'cloud-ide-lms-model';\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 acapt_class_program_branch_id_acabrn?: string;\n acapt_parent_class_prog_term_acapt?: string;\n acapt_sequence?: number;\n acapt_start_date?: string;\n acapt_end_date?: string;\n acapt_isactive?: boolean;\n acapt_islocked?: boolean;\n}\n\ninterface ProgramClass {\n _id?: string;\n acacpm_name?: string;\n acacpm_code?: string;\n acacpm_alise_title?: string;\n acacpm_class_program_id_sygms?: {\n _id?: string;\n sygms_title?: string;\n sygms_code?: string;\n sygms_configuration?: {\n branchType?: boolean;\n semesterType?: boolean;\n termType?: boolean;\n termLevelUpTo?: number;\n termProgramLevelOneConnected?: boolean;\n } | string;\n } | string;\n}\n\ninterface ClassProgramBranch {\n _id?: string;\n acabrn_name?: string;\n acabrn_code?: string;\n acabrn_class_program_id_acacpm?: any;\n}\n\n\n@Component({\n selector: 'cide-academics-class-program-term-create',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideInputComponent,\n CideTextareaComponent,\n CideEleButtonComponent,\n CideIconComponent,\n CideSelectComponent,\n CideLytSharedWrapperComponent\n ],\n templateUrl: './class-program-term-create.component.html'\n})\nexport class ClassProgramTermCreateComponent implements OnInit, OnDestroy {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private fb = inject(FormBuilder);\n private entityService = inject<IEntityService>(ENTITY_SERVICE_TOKEN);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private appState = inject(AppStateHelperService);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\n private classProgramBranchService = inject(CideLytClassProgramBranchService);\n private programClassService = inject(CideLytProgramClassService);\n private classProgramTermService = inject(CideLytClassProgramTermService);\n private cdr = inject(ChangeDetectorRef);\n\n classProgramTermForm: FormGroup;\n loading = signal(false);\n error = signal<string | null>(null);\n\n // Class program term information from route\n classProgramTermId = signal<string>('');\n isEditMode = signal(false);\n isViewMode = signal(false);\n\n // Data signals\n programClasses = signal<ProgramClass[]>([]);\n classProgramBranches = signal<ClassProgramBranch[]>([]);\n\n // Options for dropdowns\n programClassOptions = signal<ProgramClass[]>([]);\n branchOptions = signal<ClassProgramBranch[]>([]);\n parentTermOptions = signal<ClassProgramTerm[]>([]);\n\n // Selected program class for branchType check\n selectedProgramClass = signal<ProgramClass | null>(null);\n\n // Computed signal to check if branch dropdown should be shown\n showBranchDropdown = computed(() => {\n const selectedProgram = this.selectedProgramClass();\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: { branchType?: boolean } | 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 { branchType?: boolean };\n } catch {\n return false;\n }\n } else if (typeof configValue === 'object') {\n config = configValue as { branchType?: boolean };\n }\n }\n \n return config?.branchType === true;\n });\n\n // Computed signal to check if term dropdown should be shown\n // Hide term dropdown if termType=true, termProgramLevelOneConnected=true, and termLevelUpTo <= 1\n showTermDropdown = computed(() => {\n const selectedProgram = this.selectedProgramClass();\n if (!selectedProgram) return true; // Show by default if no program selected\n \n const generalMaster = selectedProgram.acacpm_class_program_id_sygms;\n if (!generalMaster || typeof generalMaster !== 'object') return true;\n \n let config: { \n termType?: boolean; \n termLevelUpTo?: number; \n termProgramLevelOneConnected?: boolean;\n } | undefined;\n \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 { \n termType?: boolean; \n termLevelUpTo?: number; \n termProgramLevelOneConnected?: boolean;\n };\n } catch {\n return true;\n }\n } else if (typeof configValue === 'object') {\n config = configValue as { \n termType?: boolean; \n termLevelUpTo?: number; \n termProgramLevelOneConnected?: boolean;\n };\n }\n }\n \n // If termType=true AND termProgramLevelOneConnected=true AND termLevelUpTo <= 1, hide dropdown\n if (config?.termType === true && \n config?.termProgramLevelOneConnected === true && \n config?.termLevelUpTo !== undefined && \n config.termLevelUpTo <= 1) {\n return false;\n }\n \n return true; // Show dropdown by default\n });\n\n // Get the auto-selected term ID when termLevelUpTo <= 1\n autoSelectedTermId = computed(() => {\n if (!this.showTermDropdown()) {\n // When dropdown is hidden, we need to find the term for this program\n // This will be handled in the program class change handler\n return null;\n }\n return null;\n });\n\n // Route parameters\n acabrnId = signal<string | null>(null);\n acacpmId = signal<string | null>(null);\n parentTermId = 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 // Date constraints\n endDateMinDate = signal<string>('');\n\n constructor() {\n this.classProgramTermForm = this.fb.group({\n // Basic Class Program Term Information\n acapt_code: ['', [Validators.required]],\n acapt_name: ['', [Validators.required]],\n acapt_description: [''],\n acapt_class_program_id_acacpm: ['', [Validators.required]],\n acapt_class_program_branch_id_acabrn: [''], // Will be conditionally required based on branchType\n acapt_parent_class_prog_term_acapt: [''],\n acapt_start_date: [''],\n acapt_end_date: [''],\n acapt_isactive: [true],\n acapt_islocked: [false]\n });\n }\n\n ngOnInit(): void {\n this.initializeComponent();\n this.setupFormSubscriptions();\n this.updateBreadcrumbData();\n }\n\n /**\n * Update breadcrumb data based on mode\n */\n private updateBreadcrumbData(): void {\n const additionalItems: { id: string; label: string; icon?: string; url?: string }[] = [];\n \n if (this.isViewMode()) {\n additionalItems.push({\n id: 'view',\n label: 'View',\n icon: 'visibility',\n url: undefined\n });\n } else if (this.isEditMode()) {\n additionalItems.push({\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n url: undefined\n });\n } else {\n additionalItems.push({\n id: 'create',\n label: 'Create',\n icon: 'add',\n url: undefined\n });\n }\n \n this.breadcrumbData.set(additionalItems);\n }\n\n /**\n * Setup form subscriptions for dependent dropdowns\n */\n private setupFormSubscriptions(): void {\n // Watch for program class changes to filter branches\n this.classProgramTermForm.get('acapt_class_program_id_acacpm')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(programClassId => {\n console.log('🔔 Program class changed to:', programClassId);\n if (programClassId) {\n // Update selected program class\n const selectedProgram = this.programClassOptions().find(p => p._id === programClassId);\n this.selectedProgramClass.set(selectedProgram || null);\n \n // Load branches only if branchType is true\n if (this.showBranchDropdown()) {\n this.loadBranchesForProgramClass(programClassId);\n // Set branch as required when branchType is true\n this.classProgramTermForm.get('acapt_class_program_branch_id_acabrn')?.setValidators([Validators.required]);\n } else {\n // Clear branches and remove required validator when branchType is false\n this.branchOptions.set([]);\n this.classProgramTermForm.get('acapt_class_program_branch_id_acabrn')?.clearValidators();\n this.classProgramTermForm.get('acapt_class_program_branch_id_acabrn')?.setValue('');\n }\n \n // Handle term dropdown visibility and auto-selection\n if (!this.showTermDropdown()) {\n // If term dropdown should be hidden, auto-select the term for this program\n this.autoSelectTermForProgram(programClassId);\n } else {\n // If term dropdown should be shown, load parent terms as usual\n // Clear parent term selection when program class changes (only if not setting from route)\n const acabrnId = this.acabrnId();\n if (!acabrnId) {\n console.log('🧹 Clearing branch and parent term (program class changed)');\n if (!this.showBranchDropdown()) {\n this.classProgramTermForm.patchValue({\n acapt_class_program_branch_id_acabrn: ''\n });\n }\n this.parentTermOptions.set([]);\n }\n }\n } else {\n // Clear all dependent dropdowns when program class is cleared\n console.log('🧹 Clearing all dependent dropdowns (no program class)');\n this.selectedProgramClass.set(null);\n this.branchOptions.set([]);\n this.parentTermOptions.set([]);\n this.classProgramTermForm.get('acapt_class_program_branch_id_acabrn')?.clearValidators();\n this.classProgramTermForm.patchValue({\n acapt_class_program_branch_id_acabrn: '',\n acapt_parent_class_prog_term_acapt: ''\n });\n }\n this.classProgramTermForm.get('acapt_class_program_branch_id_acabrn')?.updateValueAndValidity();\n });\n\n // Watch for branch changes to determine parent term\n this.classProgramTermForm.get('acapt_class_program_branch_id_acabrn')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(branchId => {\n console.log('🔔🔔🔔 Branch valueChanges triggered! Branch ID:', branchId);\n if (branchId) {\n // Load parent terms for the selected branch\n console.log('🔄 Calling determineParentTerm for branch:', branchId);\n this.determineParentTerm(branchId);\n } else {\n // Clear parent term options and value when branch is cleared\n console.log('🧹 Clearing parent term options (no branch selected)');\n this.parentTermOptions.set([]);\n this.classProgramTermForm.patchValue({\n acapt_parent_class_prog_term_acapt: ''\n });\n }\n });\n\n // Watch for parent term changes to set date constraints\n this.classProgramTermForm.get('acapt_parent_class_prog_term_acapt')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(parentTermId => {\n this.loadParentTermDetails(parentTermId);\n });\n\n // Watch for start date changes to set minimum date for end date\n this.classProgramTermForm.get('acapt_start_date')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(startDate => {\n this.updateEndDateMinDate(startDate);\n });\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n // Check route parameters to determine mode\n const routeParams = this.route.snapshot.params;\n const queryParams = routeParams['query'];\n \n // Check if we have query params (for edit/view mode)\n if (queryParams) {\n const queryData = generateObjectFromString(queryParams);\n \n // Check for edit mode (acapt_id in query)\n if (queryData?.acapt_id && !queryData?.acapt_parent_id) {\n // This is edit mode (acapt_id without acapt_parent_id means editing the term itself)\n this.isEditMode.set(true);\n this.classProgramTermId.set(queryData.acapt_id as string);\n this.loadClassProgramTermForEdit(queryData);\n this.checkRouteParams(); // Still check for pre-selection of other fields\n } else if (this.router.url.includes('/view/')) {\n // View mode\n this.isViewMode.set(true);\n this.loadClassProgramTermForView(queryData);\n } else {\n // Create mode with pre-selection\n this.checkRouteParams();\n }\n } else {\n // No query params - check URL for edit/view mode\n const url = this.router.url;\n if (url.includes('/view/')) {\n this.isViewMode.set(true);\n this.loadClassProgramTermForView({});\n } else if (url.includes('/edit/')) {\n this.isEditMode.set(true);\n this.loadClassProgramTermForEdit({});\n } else {\n // Create mode\n this.isEditMode.set(false);\n this.isViewMode.set(false);\n this.checkRouteParams();\n }\n }\n\n // Update breadcrumb after mode is determined\n this.updateBreadcrumbData();\n\n // Load dropdown options\n this.loadDropdownOptions();\n\n // Set parent term if provided from route (for child term creation)\n // This will be called after branches are loaded if acabrnId is present\n // Otherwise, set it directly\n if (!this.acabrnId() && !this.isEditMode() && !this.isViewMode()) {\n this.setParentTermFromRoute();\n }\n }\n\n /**\n * Set parent term from route parameters\n */\n private setParentTermFromRoute(): void {\n const parentId = this.parentTermId();\n if (parentId && !this.isEditMode() && !this.isViewMode()) {\n this.classProgramTermForm.patchValue({\n acapt_parent_class_prog_term_acapt: parentId\n }, { emitEvent: true }); // Allow emitEvent to trigger parent term details loading\n }\n }\n\n /**\n * Check route parameters for acabrn_id and acacpm_id\n */\n private checkRouteParams(): void {\n // First check synchronously from snapshot\n const routeParams = this.route.snapshot.params;\n const queryParams = routeParams['query'];\n console.log('🏢 Route params (snapshot):', routeParams, 'queryParams:', queryParams);\n\n if (queryParams) {\n console.log('✅ Query parameters found in route, will pre-select fields');\n // Query parameters passed (following page-controls pattern)\n const queryData = generateObjectFromString(queryParams);\n console.log('🏢 Class Program Term Create params from route:', queryData);\n \n // Check for branch ID in multiple possible formats\n const branchId = queryData?.acabrn_id || queryData?.acabrnId || queryData?.branch_id || queryData?.branchId;\n if (branchId) {\n this.acabrnId.set(branchId as string);\n console.log('🏢 Branch ID from route:', branchId);\n }\n \n if (queryData?.acacpm_id) {\n const programId = queryData.acacpm_id as string;\n this.acacpmId.set(programId);\n console.log('🏢 ✅✅✅ Class Program ID SET from route:', programId);\n console.log('🏢 ✅✅✅ acacpmId signal value:', this.acacpmId());\n } else {\n console.log('🏢 ❌❌❌ NO acacpm_id in queryData:', queryData);\n }\n\n // Only set parent term ID if it's for creating a child term (acapt_parent_id)\n // If acapt_id is present without acapt_parent_id, it's edit mode, not parent selection\n if (queryData?.acapt_parent_id) {\n const parentId = queryData.acapt_parent_id as string;\n this.parentTermId.set(parentId);\n console.log('🏢 Parent Term ID from route (for child term):', parentId);\n }\n } else {\n console.log('ℹ️ No query parameters in route - creating new term without pre-selection');\n }\n\n // Also subscribe to route params for dynamic changes\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\n const dynamicQueryParams = params['query'];\n if (dynamicQueryParams && dynamicQueryParams !== queryParams) {\n const queryData = generateObjectFromString(dynamicQueryParams);\n console.log('🏢 Route params changed:', queryData);\n \n // Check for branch ID in multiple possible formats\n const branchId = queryData?.acabrn_id || queryData?.acabrnId || queryData?.branch_id || queryData?.branchId;\n if (branchId) {\n this.acabrnId.set(branchId as string);\n }\n if (queryData?.acacpm_id) {\n this.acacpmId.set(queryData.acacpm_id as string);\n }\n if (queryData?.acapt_parent_id) {\n const parentId = queryData.acapt_parent_id as string;\n this.parentTermId.set(parentId);\n }\n }\n });\n }\n\n /**\n * Load class program term for viewing\n */\n private loadClassProgramTermForView(queryParams: any): void {\n // Implementation for view mode\n this.classProgramTermForm.disable();\n }\n\n /**\n * Load class program term for editing\n */\n private loadClassProgramTermForEdit(queryData: any): void {\n const routeParams = this.route.snapshot.params;\n const queryParams = routeParams['query'];\n \n // Get term ID from query data or route params\n let termId: string | undefined;\n if (queryData?.acapt_id) {\n termId = queryData.acapt_id as string;\n } else if (queryParams) {\n const decoded = generateObjectFromString(queryParams);\n termId = decoded?.acapt_id as string;\n }\n \n if (!termId) {\n console.error('❌ No term ID found in route parameters for edit mode');\n this.error.set('Term ID not found in route parameters');\n return;\n }\n \n console.log('🏢 Loading term for edit, ID:', termId);\n this.classProgramTermId.set(termId);\n this.loading.set(true);\n this.error.set(null);\n \n // Load term data\n this.classProgramTermService.getClassProgramTermById({ acapt_id: termId })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('🏢 Term data loaded for edit:', response);\n this.loading.set(false);\n \n if (response?.success && response.data) {\n const term = response.data as any; // Type cast to handle property name differences\n \n // Set program class and branch IDs for loading dropdowns\n if (term.acapt_class_program_id_acacpm) {\n const programId = typeof term.acapt_class_program_id_acacpm === 'string' \n ? term.acapt_class_program_id_acacpm \n : term.acapt_class_program_id_acacpm?._id;\n if (programId) {\n this.acacpmId.set(programId);\n }\n }\n \n // Handle branch ID - check both property name variations\n const branchIdValue = term.acapt_class_program_branch_id_acabrn || term.acapt_class_prg_branch_acabrn;\n if (branchIdValue) {\n const branchId = typeof branchIdValue === 'string'\n ? branchIdValue\n : branchIdValue?._id;\n if (branchId) {\n this.acabrnId.set(branchId);\n }\n }\n \n // Load dropdowns first, then patch form\n this.loadDropdownOptions();\n \n // Wait a bit for dropdowns to load, then patch form\n setTimeout(() => {\n // Get branch ID for form patching\n const branchIdForForm = typeof branchIdValue === 'string'\n ? branchIdValue\n : branchIdValue?._id || '';\n \n const programClassId = typeof term.acapt_class_program_id_acacpm === 'string'\n ? term.acapt_class_program_id_acacpm\n : term.acapt_class_program_id_acacpm?._id || '';\n \n // Set selected program class to check branchType\n const selectedProgram = this.programClassOptions().find(p => p._id === programClassId);\n this.selectedProgramClass.set(selectedProgram || null);\n \n // Update branch validation based on branchType\n if (this.showBranchDropdown()) {\n this.classProgramTermForm.get('acapt_class_program_branch_id_acabrn')?.setValidators([Validators.required]);\n } else {\n this.classProgramTermForm.get('acapt_class_program_branch_id_acabrn')?.clearValidators();\n }\n \n this.classProgramTermForm.patchValue({\n acapt_code: term.acapt_code || '',\n acapt_name: term.acapt_name || '',\n acapt_description: term.acapt_description || term.acapt_desc || '',\n acapt_class_program_id_acacpm: programClassId,\n acapt_class_program_branch_id_acabrn: branchIdForForm,\n acapt_parent_class_prog_term_acapt: typeof term.acapt_parent_class_prog_term_acapt === 'string'\n ? term.acapt_parent_class_prog_term_acapt\n : term.acapt_parent_class_prog_term_acapt?._id || '',\n acapt_sequence: term.acapt_sequence || 0,\n acapt_start_date: term.acapt_start_date || '',\n acapt_end_date: term.acapt_end_date || '',\n acapt_isactive: term.acapt_isactive ?? true,\n acapt_islocked: term.acapt_islocked ?? false\n }, { emitEvent: true });\n \n // Load parent terms after form is patched\n if (this.showBranchDropdown() && branchIdForForm) {\n this.loadParentTermsForBranch(branchIdForForm);\n } else if (!this.showBranchDropdown() && programClassId) {\n this.loadParentTermsForProgramClass(programClassId);\n }\n \n this.classProgramTermForm.get('acapt_class_program_branch_id_acabrn')?.updateValueAndValidity();\n }, 300);\n } else {\n this.error.set('Term data not found');\n }\n },\n error: (err) => {\n console.error('❌ Error loading term for edit:', err);\n this.loading.set(false);\n this.error.set('Failed to load term data');\n this.notificationService.error('Failed to load term data for editing');\n }\n });\n }\n\n /**\n * Load dropdown options\n */\n private loadDropdownOptions(): void {\n // Load program classes\n this.loadProgramClasses();\n \n // Load branches\n this.loadClassProgramBranches();\n }\n\n /**\n * Load program classes\n */\n private loadProgramClasses(): void {\n console.log('🔍 loadProgramClasses() CALLED');\n console.log('🔍 Current acacpmId signal value:', this.acacpmId());\n \n this.programClassService.getProgramClassList({ pagination: false })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('✅ Program classes API response:', response);\n if (response?.success && response.data) {\n // Set options first\n this.programClassOptions.set(response.data as ProgramClass[]);\n console.log('✅ Program class options set:', response.data.length, 'items');\n \n // Pre-select program class if provided in route\n const acacpmId = this.acacpmId();\n console.log('🔍🔍🔍 CHECKING Program class ID from signal:', acacpmId);\n \n if (acacpmId) {\n // Verify the ID exists in the options\n const exists = (response.data as ProgramClass[]).find(p => p._id === acacpmId);\n console.log('🔍 Does acacpmId exist in options?', exists ? 'YES' : 'NO', exists);\n \n // Wait for Angular to update the DOM with options, then set the value\n setTimeout(() => {\n const programClassControl = this.classProgramTermForm.get('acapt_class_program_id_acacpm');\n console.log('📝📝📝 SETTING program class value to:', acacpmId);\n console.log('📝 Current form control value BEFORE:', programClassControl?.value);\n \n // Find and set selected program class\n const selectedProgram = (response.data as ProgramClass[]).find(p => p._id === acacpmId);\n this.selectedProgramClass.set(selectedProgram || null);\n \n programClassControl?.setValue(acacpmId);\n \n console.log('✅✅✅ Program class form control value AFTER:', programClassControl?.value);\n console.log('✅ Form object:', this.classProgramTermForm.value);\n console.log('✅ Form valid:', this.classProgramTermForm.valid);\n \n // Load branches only if branchType is true\n if (this.showBranchDropdown()) {\n this.loadBranchesForProgramClass(acacpmId);\n } else {\n // If no branchType, load parent terms directly using program class\n this.loadParentTermsForProgramClass(acacpmId);\n }\n }, 50);\n } else {\n console.log('⚠️⚠️⚠️ NO program class ID in acacpmId signal');\n }\n } else {\n console.warn('⚠️ No program class data received');\n this.programClassOptions.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading program classes:', error);\n this.programClassOptions.set([]);\n }\n });\n }\n\n /**\n * Load class program branches\n */\n private loadClassProgramBranches(): void {\n const acacpmId = this.acacpmId();\n if (acacpmId) {\n // Only load branches if branchType is true\n if (this.showBranchDropdown()) {\n this.loadBranchesForProgramClass(acacpmId);\n } else {\n // If no branchType, load parent terms directly\n this.loadParentTermsForProgramClass(acacpmId);\n }\n }\n }\n\n /**\n * Load branches for a specific program class\n */\n private loadBranchesForProgramClass(programClassId: string): void {\n const payload: AcaClassPrgBranchListPayload = {\n pagination: false,\n pageIndex: 0,\n pageSize: 100,\n acabrn_class_program_id_acacpm: programClassId\n };\n\n this.classProgramBranchService.getClassProgramBranchList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: any) => {\n console.log('✅ Class program branches loaded for program class:', programClassId, response);\n if (response?.success && response.data) {\n this.branchOptions.set(response.data as ClassProgramBranch[]);\n \n // Pre-select branch if provided in route and not already set\n const acabrnId = this.acabrnId();\n const currentBranchId = this.classProgramTermForm.get('acapt_class_program_branch_id_acabrn')?.value;\n console.log('🔍 Checking branch pre-selection - acabrnId:', acabrnId, 'currentBranchId:', currentBranchId);\n \n if (acabrnId && !currentBranchId) {\n console.log('✅ Pre-selecting branch:', acabrnId);\n // Use emitEvent: true to trigger valueChanges and load parent terms\n this.classProgramTermForm.patchValue({\n acapt_class_program_branch_id_acabrn: acabrnId\n }, { emitEvent: true });\n \n // Directly load parent terms after branch is set (in case valueChanges doesn't fire)\n setTimeout(() => {\n console.log('🔄 Directly loading parent terms for branch:', acabrnId);\n this.loadParentTermsForBranch(acabrnId);\n }, 150);\n } else if (acabrnId && currentBranchId !== acabrnId) {\n // Branch ID exists but form has different value, update it\n console.log('🔄 Updating branch selection from', currentBranchId, 'to', acabrnId);\n this.classProgramTermForm.patchValue({\n acapt_class_program_branch_id_acabrn: acabrnId\n }, { emitEvent: true });\n \n // Directly load parent terms after branch is updated\n setTimeout(() => {\n console.log('🔄 Directly loading parent terms for branch:', acabrnId);\n this.loadParentTermsForBranch(acabrnId);\n }, 150);\n } else if (!acabrnId) {\n console.log('⚠️ No branch ID found in route parameters');\n }\n } else {\n console.warn('⚠️ No branch data received');\n this.branchOptions.set([]);\n }\n },\n error: (error: any) => {\n console.error('❌ Error loading branches:', error);\n this.branchOptions.set([]);\n }\n });\n }\n\n /**\n * Determine parent term based on selected branch\n * This method will be called internally when branch is selected\n */\n private determineParentTerm(branchId: string): void {\n // Find the selected branch from the options\n const selectedBranch = this.branchOptions().find(branch => branch._id === branchId);\n \n if (selectedBranch) {\n console.log('🏢 Determining parent term for branch:', selectedBranch.acabrn_name);\n \n // Load existing terms for this branch to find potential parent terms\n // This will also set the parent term from route if available\n this.loadParentTermsForBranch(branchId);\n } else {\n // Clear parent term options if branch not found\n this.parentTermOptions.set([]);\n }\n }\n\n /**\n * Auto-select term for program when termType=true, termProgramLevelOneConnected=true, and termLevelUpTo <= 1\n */\n private autoSelectTermForProgram(programClassId: string): void {\n console.log('🔄 Auto-selecting term for program:', programClassId);\n \n // Build payload to get the term for this program\n const branchId = this.classProgramTermForm.get('acapt_class_program_branch_id_acabrn')?.value;\n const payload: MClassProgramTerm = new MClassProgramTerm({\n pageIndex: 0,\n pageSize: 1, // Only need one term\n query: \"\",\n sort: {\n key: 'acapt_sequence',\n order: 'asc'\n },\n acapt_class_program_id_acacpm: programClassId,\n acapt_class_prg_branch_acabrn: branchId || ''\n });\n \n this.classProgramTermService.getClassProgramTermList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: any) => {\n if (response?.success && response.data && response.data.length > 0) {\n const term = response.data[0];\n const termId = typeof term._id === 'string' ? term._id : term._id?._id || '';\n \n if (termId) {\n console.log('✅ Auto-selected term:', termId, term.acapt_name);\n // Auto-select the term in the parent term field\n this.classProgramTermForm.patchValue({\n acapt_parent_class_prog_term_acapt: termId\n }, { emitEvent: true });\n }\n } else {\n console.warn('⚠️ No term found for program:', programClassId);\n }\n },\n error: (error: any) => {\n console.error('❌ Error auto-selecting term:', error);\n }\n });\n }\n\n /**\n * Load parent terms for a specific program class (when branchType is false)\n */\n private loadParentTermsForProgramClass(programClassId: string): void {\n console.log('🏢🏢🏢 loadParentTermsForProgramClass CALLED with programClassId:', programClassId);\n \n if (!programClassId) {\n console.warn('⚠️ Missing programClassId');\n this.parentTermOptions.set([]);\n return;\n }\n\n console.log('🏢 Making API call for parent terms - program class:', programClassId);\n \n const payload: MClassProgramTerm = new MClassProgramTerm({\n pageIndex: 0,\n pageSize: 1000,\n query: \"\",\n sort: {\n key: 'acapt_name',\n order: 'asc'\n },\n acapt_class_program_id_acacpm: programClassId,\n acapt_class_prg_branch_acabrn: '' // Empty string when branchType is false\n });\n \n console.log('📤 API Payload for parent terms (no branch):', JSON.stringify(payload, null, 2));\n \n this.classProgramTermService.getClassProgramTermList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: any) => {\n console.log('✅ Parent terms loaded (no branch):', response);\n if (response?.success && response.data) {\n // All terms can be parent terms (for child term creation)\n const parentTerms = response.data as ClassProgramTerm[];\n \n // Normalize parent field to string ID for tree view compatibility\n const normalizedTerms = parentTerms.map(term => {\n const normalized = { ...term };\n \n // Normalize parent field - ensure it's always a string ID or empty string\n if (normalized.acapt_parent_class_prog_term_acapt) {\n if (typeof normalized.acapt_parent_class_prog_term_acapt === 'object') {\n normalized.acapt_parent_class_prog_term_acapt = (normalized.acapt_parent_class_prog_term_acapt as any)?._id || '';\n } else if (typeof normalized.acapt_parent_class_prog_term_acapt === 'string') {\n normalized.acapt_parent_class_prog_term_acapt = normalized.acapt_parent_class_prog_term_acapt.trim() || '';\n }\n } else {\n normalized.acapt_parent_class_prog_term_acapt = '';\n }\n \n return normalized;\n });\n \n // Set options directly - tree view will be handled by select component\n this.parentTermOptions.set(normalizedTerms);\n console.log('✅ Parent term options set (no branch):', normalizedTerms.length, 'options');\n \n // Set parent term from route after options are loaded\n const parentId = this.parentTermId();\n if (parentId && !this.isEditMode() && !this.isViewMode()) {\n setTimeout(() => {\n const parentTermControl = this.classProgramTermForm.get('acapt_parent_class_prog_term_acapt');\n if (parentTermControl) {\n parentTermControl.setValue(parentId, { emitEvent: true });\n this.cdr.detectChanges();\n }\n }, 200);\n }\n } else {\n console.warn('⚠️ No parent term data received');\n this.parentTermOptions.set([]);\n }\n },\n error: (error: any) => {\n console.error('❌ Error loading parent terms:', error);\n this.parentTermOptions.set([]);\n }\n });\n }\n\n /**\n * Load parent terms for a specific branch\n */\n private loadParentTermsForBranch(branchId: string): void {\n const programClassId = this.classProgramTermForm.get('acapt_class_program_id_acacpm')?.value;\n console.log('🏢🏢🏢 loadParentTermsForBranch CALLED with branchId:', branchId, 'programClassId:', programClassId);\n \n if (!programClassId || !branchId) {\n console.warn('⚠️ Missing required IDs - programClassId:', programClassId, 'branchId:', branchId);\n this.parentTermOptions.set([]);\n return;\n }\n\n console.log('🏢 Making API call for parent terms - branch:', branchId, 'program class:', programClassId);\n \n const payload: MClassProgramTerm = new MClassProgramTerm({\n pageIndex: 0,\n pageSize: 1000,\n query: \"\",\n sort: {\n key: 'acapt_name',\n order: 'asc'\n },\n acapt_class_program_id_acacpm: programClassId,\n acapt_class_prg_branch_acabrn: branchId\n });\n \n console.log('📤 API Payload for parent terms:', JSON.stringify(payload, null, 2));\n \n this.classProgramTermService.getClassProgramTermList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: any) => {\n console.log('✅ Parent terms loaded:', response);\n if (response?.success && response.data) {\n // All terms can be parent terms (for child term creation)\n const parentTerms = response.data as ClassProgramTerm[];\n \n // Normalize parent field to string ID for tree view compatibility\n const normalizedTerms = parentTerms.map(term => {\n const normalized = { ...term };\n \n // Normalize parent field - ensure it's always a string ID or empty string\n if (normalized.acapt_parent_class_prog_term_acapt) {\n if (typeof normalized.acapt_parent_class_prog_term_acapt === 'object') {\n // If it's an object, extract the _id\n normalized.acapt_parent_class_prog_term_acapt = (normalized.acapt_parent_class_prog_term_acapt as any)?._id || '';\n } else if (typeof normalized.acapt_parent_class_prog_term_acapt === 'string') {\n // Already a string, ensure it's not empty or null\n normalized.acapt_parent_class_prog_term_acapt = normalized.acapt_parent_class_prog_term_acapt.trim() || '';\n }\n } else {\n // No parent - set to empty string for tree view\n normalized.acapt_parent_class_prog_term_acapt = '';\n }\n \n return normalized;\n });\n \n // Set options directly - tree view will be handled by select component\n this.parentTermOptions.set(normalizedTerms);\n console.log('✅ Parent term options set:', normalizedTerms.length, 'options');\n console.log('🌳 Tree view enabled - options will be displayed in tree structure');\n console.log('🌳 Sample normalized term:', normalizedTerms[0] ? {\n _id: normalizedTerms[0]._id,\n name: normalizedTerms[0].acapt_name,\n parent: normalizedTerms[0].acapt_parent_class_prog_term_acapt\n } : 'No terms');\n \n // Set parent term from route after options are loaded\n const parentId = this.parentTermId();\n console.log('🔍 Checking parent term pre-selection - parentId:', parentId);\n if (parentId && !this.isEditMode() && !this.isViewMode()) {\n // Check if the parent ID exists in the options\n const parentExists = normalizedTerms.find(term => term._id === parentId);\n console.log('🔍 Parent term exists in options:', !!parentExists, parentExists?.acapt_name);\n \n if (parentExists) {\n // Use longer timeout to ensure DOM is fully rendered\n setTimeout(() => {\n console.log('✅ Setting parent term to:', parentId);\n const parentTermControl = this.classProgramTermForm.get('acapt_parent_class_prog_term_acapt');\n if (parentTermControl) {\n // Use setValue instead of patchValue for better control\n parentTermControl.setValue(parentId, { emitEvent: true });\n console.log('✅✅✅ Parent term form control value set to:', parentTermControl.value);\n \n // Force change detection to update the view\n this.cdr.detectChanges();\n \n // Additional timeout to ensure dropdown displays the selected value\n setTimeout(() => {\n this.cdr.detectChanges();\n console.log('✅✅✅ Change detection triggered again for parent term dropdown');\n }, 50);\n }\n }, 200); // Increased timeout to 200ms for DOM rendering\n } else {\n console.warn('⚠️ Parent term ID not found in options:', parentId);\n }\n } else {\n console.log('⚠️ Not pre-selecting parent term - parentId:', parentId, 'isEdit:', this.isEditMode(), 'isView:', this.isViewMode());\n }\n } else {\n console.warn('⚠️ No parent term data received');\n this.parentTermOptions.set([]);\n }\n },\n error: (error: any) => {\n console.error('❌ Error loading parent terms:', error);\n this.parentTermOptions.set([]);\n }\n });\n }\n\n\n /**\n * Load parent term details for date validation\n * This method will be called when a parent term is selected\n */\n private loadParentTermDetails(parentTermId: string): void {\n if (!parentTermId) {\n // Clear date constraints when no parent is selected\n this.clearDateConstraints();\n return;\n }\n\n // TODO: Implement API call to get parent term details\n // For now, we'll use mock data or implement based on your API\n console.log('🏢 Loading parent term details for ID:', parentTermId);\n \n // Example implementation - replace with actual API call\n // this.classProgramTermService.getClassProgramTermById({ _id: parentTermId })\n // .pipe(takeUntilDestroyed(this.destroyRef))\n // .subscribe({\n // next: (response) => {\n // if (response?.success && response.data) {\n // const parentTerm = response.data;\n // this.setDateConstraints(parentTerm.acapt_start_date, parentTerm.acapt_end_date);\n // }\n // },\n // error: (error) => {\n // console.error('❌ Error loading parent term details:', error);\n // }\n // });\n }\n\n /**\n * Set date constraints based on parent term dates\n */\n private setDateConstraints(parentStartDate: string, parentEndDate: string): void {\n console.log('🏢 Setting date constraints:', { parentStartDate, parentEndDate });\n \n // Update form validation to ensure child dates are within parent range\n const startDateControl = this.classProgramTermForm.get('acapt_start_date');\n const endDateControl = this.classProgramTermForm.get('acapt_end_date');\n \n if (startDateControl && endDateControl) {\n // Add custom validators for date range\n startDateControl.setValidators([\n this.dateRangeValidator(parentStartDate, parentEndDate, 'start')\n ]);\n endDateControl.setValidators([\n this.dateRangeValidator(parentStartDate, parentEndDate, 'end')\n ]);\n \n // Update validation\n startDateControl.updateValueAndValidity();\n endDateControl.updateValueAndValidity();\n }\n }\n\n /**\n * Clear date constraints when no parent is selected\n */\n private clearDateConstraints(): void {\n const startDateControl = this.classProgramTermForm.get('acapt_start_date');\n const endDateControl = this.classProgramTermForm.get('acapt_end_date');\n \n if (startDateControl && endDateControl) {\n // Remove custom validators\n startDateControl.clearValidators();\n endDateControl.clearValidators();\n \n // Update validation\n startDateControl.updateValueAndValidity();\n endDateControl.updateValueAndValidity();\n }\n }\n\n /**\n * Custom validator for date range constraints\n */\n private dateRangeValidator(parentStartDate: string, parentEndDate: string, dateType: 'start' | 'end') {\n return (control: any) => {\n if (!control.value || !parentStartDate || !parentEndDate) {\n return null; // No validation if no date or parent dates\n }\n\n const selectedDate = new Date(control.value);\n const parentStart = new Date(parentStartDate);\n const parentEnd = new Date(parentEndDate);\n\n if (dateType === 'start') {\n // Start date should be >= parent start date and < parent end date\n if (selectedDate < parentStart || selectedDate >= parentEnd) {\n return { \n dateRangeError: { \n message: `Start date must be between ${parentStartDate} and ${parentEndDate}` \n } \n };\n }\n } else if (dateType === 'end') {\n // End date should be > parent start date and <= parent end date\n if (selectedDate <= parentStart || selectedDate > parentEnd) {\n return { \n dateRangeError: { \n message: `End date must be between ${parentStartDate} and ${parentEndDate}` \n } \n };\n }\n }\n\n return null; // Valid\n };\n }\n\n /**\n * Update minimum date for end date based on start date\n */\n private updateEndDateMinDate(startDate: string): void {\n if (startDate) {\n // Set the minimum date for end date to be the start date\n this.endDateMinDate.set(startDate);\n \n // If end date is already set and is before the new start date, clear it\n const endDate = this.classProgramTermForm.get('acapt_end_date')?.value;\n if (endDate && endDate < startDate) {\n this.classProgramTermForm.patchValue({\n acapt_end_date: ''\n });\n }\n \n console.log('🏢 Updated end date minimum date to:', startDate);\n } else {\n // Clear minimum date constraint if no start date\n this.endDateMinDate.set('');\n }\n }\n\n\n onSubmit() {\n if (this.isViewMode()) {\n this.router.navigate(['/control-panel/program-term-management']);\n return;\n }\n\n if (this.classProgramTermForm.invalid) {\n this.notificationService.error('Please fill in all required fields correctly.');\n this.markFormGroupTouched();\n return;\n }\n\n this.loading.set(true);\n this.error.set(null);\n\n const formData = this.classProgramTermForm.value;\n console.log('Class Program Term Form Data:', formData);\n\n // Prepare payload for API call\n const payload: MClassProgramTermInsertUpdatePayload = {\n acapt_code: formData.acapt_code,\n acapt_name: formData.acapt_name,\n acapt_class_program_id_acacpm: formData.acapt_class_program_id_acacpm,\n acapt_class_prg_branch_acabrn: formData.acapt_class_program_branch_id_acabrn,\n acapt_parent_class_prog_term_acapt: formData.acapt_parent_class_prog_term_acapt || null,\n acapt_start_date: formData.acapt_start_date,\n acapt_end_date: formData.acapt_end_date,\n acapt_isactive: formData.acapt_isactive,\n acapt_islocked: formData.acapt_islocked\n };\n\n // Add _id for edit mode\n if (this.isEditMode() && this.classProgramTermId()) {\n payload._id = this.classProgramTermId();\n }\n\n console.log('API Payload:', payload);\n\n // Make API call\n this.classProgramTermService.saveClassProgramTerm(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: any) => {\n console.log('✅ Class program term saved successfully:', response);\n \n if (response?.success) {\n const action = this.isEditMode() ? 'updated' : 'created';\n this.notificationService.success(`Class program term has been ${action} successfully.`);\n \n // Navigate back to program term listing page (not section listing)\n // The listing page will auto-reload via router events subscription\n this.router.navigate(['/control-panel/program-term-management']);\n } else {\n this.error.set(response?.message || 'Failed to save class program term');\n this.notificationService.error(response?.message || 'Failed to save class program term');\n }\n this.loading.set(false);\n },\n error: (error: any) => {\n console.error('❌ Error saving class program term:', error);\n this.error.set('Failed to save class program term');\n this.notificationService.error('Failed to save class program term. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Mark all form controls as touched to trigger validation display\n */\n private markFormGroupTouched(): void {\n Object.keys(this.classProgramTermForm.controls).forEach(key => {\n const control = this.classProgramTermForm.get(key);\n control?.markAsTouched();\n });\n }\n\n resetForm() {\n this.classProgramTermForm.reset({\n acapt_isactive: true,\n acapt_islocked: false\n });\n \n // Clear options when form is reset\n this.branchOptions.set([]);\n this.parentTermOptions.set([]);\n \n // Clear date constraints\n this.clearDateConstraints();\n this.endDateMinDate.set('');\n }\n\n /**\n * Reset only Term Code, Term Name, and Description fields after successful save\n */\n private resetFormFields(): void {\n // Get current values to preserve\n const currentProgramClass = this.classProgramTermForm.get('acapt_class_program_id_acacpm')?.value;\n const currentBranch = this.classProgramTermForm.get('acapt_class_program_branch_id_acabrn')?.value;\n const currentStartDate = this.classProgramTermForm.get('acapt_start_date')?.value;\n const currentEndDate = this.classProgramTermForm.get('acapt_end_date')?.value;\n const currentIsActive = this.classProgramTermForm.get('acapt_isactive')?.value;\n const currentIsLocked = this.classProgramTermForm.get('acapt_islocked')?.value;\n \n // Reset only the specified fields\n this.classProgramTermForm.patchValue({\n acapt_code: '',\n acapt_name: '',\n acapt_description: '',\n // Preserve other fields\n acapt_class_program_id_acacpm: currentProgramClass,\n acapt_class_program_branch_id_acabrn: currentBranch,\n acapt_start_date: currentStartDate,\n acapt_end_date: currentEndDate,\n acapt_isactive: currentIsActive,\n acapt_islocked: currentIsLocked\n });\n \n // Clear validation errors for reset fields\n this.classProgramTermForm.get('acapt_code')?.setErrors(null);\n this.classProgramTermForm.get('acapt_name')?.setErrors(null);\n this.classProgramTermForm.get('acapt_description')?.setErrors(null);\n }\n\n /**\n * Go back to class program term list\n */\n goBackToClassProgramTermList(): void {\n this.router.navigate(['/control-panel/program-term-management']);\n }\n\n /**\n * Cancel form and navigate back to listing page\n */\n cancelForm(): void {\n this.goBackToClassProgramTermList();\n }\n\n /**\n * Get page title based on mode\n */\n getPageTitle(): string {\n if (this.isViewMode()) return 'View Class Program Term';\n return this.isEditMode() ? 'Edit Class Program Term' : 'Create New Class Program Term';\n }\n\n /**\n * Handle Active card click to toggle checkbox\n */\n onActiveCardClick(): void {\n if (this.isViewMode()) {\n return; // Don't allow changes in view mode\n }\n \n const currentValue = this.classProgramTermForm.get('acapt_isactive')?.value;\n this.classProgramTermForm.patchValue({\n acapt_isactive: !currentValue\n });\n }\n\n /**\n * Handle Locked card click to toggle checkbox\n */\n onLockedCardClick(): void {\n if (this.isViewMode()) {\n return; // Don't allow changes in view mode\n }\n \n const currentValue = this.classProgramTermForm.get('acapt_islocked')?.value;\n this.classProgramTermForm.patchValue({\n acapt_islocked: !currentValue\n });\n }\n\n /**\n * Cleanup when component is destroyed\n */\n ngOnDestroy(): void {\n console.log('🧹 ClassProgramTermCreateComponent: Cleaning up component state');\n\n // Reset all signals to their initial state\n this.loading.set(false);\n this.error.set(null);\n this.classProgramTermId.set('');\n this.isEditMode.set(false);\n this.programClassOptions.set([]);\n this.branchOptions.set([]);\n this.parentTermOptions.set([]);\n\n // Reset form to initial state\n this.resetForm();\n\n console.log('🧹 ClassProgramTermCreateComponent: Component state cleaned up');\n }\n}\n","<!-- \n CLASS PROGRAM TERM MASTER FORM\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_term' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"classProgramTermForm\"\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Form Content -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6 tw-overflow-y-auto tw-h-full\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n <!-- Class Program Term Information -->\n <div class=\"tw-space-y-6\">\n <!-- Program Class, Branch, and Parent Term at the top -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-6\"\n [class.md:tw-grid-cols-2]=\"!showBranchDropdown()\">\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Program Class *</label>\n <cide-ele-select \n formControlName=\"acapt_class_program_id_acacpm\" \n placeholder=\"Select program class\"\n [disabled]=\"isViewMode()\" \n valueKey=\"_id\" \n labelKey=\"acacpm_alise_title\" \n [options]=\"programClassOptions()\">\n </cide-ele-select>\n </div>\n\n @if (showBranchDropdown()) {\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Specialization *</label>\n <cide-ele-select \n formControlName=\"acapt_class_program_branch_id_acabrn\" \n placeholder=\"Select specialization\"\n [disabled]=\"isViewMode()\" \n valueKey=\"_id\" \n labelKey=\"acabrn_name\" \n [options]=\"branchOptions()\">\n </cide-ele-select>\n </div>\n }\n\n @if (showTermDropdown()) {\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Parent Term (Optional)</label>\n <cide-ele-select \n formControlName=\"acapt_parent_class_prog_term_acapt\" \n placeholder=\"Select parent term\"\n [disabled]=\"isViewMode()\" \n valueKey=\"_id\" \n labelKey=\"acapt_name\" \n [options]=\"parentTermOptions()\"\n [treeView]=\"{ enabled: true, primaryKey: '_id', foreignKey: 'acapt_parent_class_prog_term_acapt' }\">\n </cide-ele-select>\n </div>\n }\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"Term Code *\" formControlName=\"acapt_code\" placeholder=\"e.g., T1, T2, T3\"\n size=\"md\" leadingIcon=\"code\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Term Name *\" formControlName=\"acapt_name\"\n placeholder=\"e.g., First Term, Second Term\" size=\"md\" leadingIcon=\"schedule\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-textarea label=\"Description\" formControlName=\"acapt_description\"\n placeholder=\"Enter detailed description of the term...\" rows=\"3\" size=\"md\">\n </cide-ele-textarea>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input id=\"acapt_start_date\" label=\"Start Date\" formControlName=\"acapt_start_date\" type=\"date\"\n size=\"md\" leadingIcon=\"event\">\n </cide-ele-input>\n\n <cide-ele-input id=\"acapt_end_date\" label=\"End Date\" formControlName=\"acapt_end_date\" type=\"date\"\n [min]=\"endDateMinDate()\" size=\"md\" leadingIcon=\"event\">\n </cide-ele-input>\n </div>\n\n <div class=\"tw-p-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-lg\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-text-blue-500\"></cide-ele-icon>\n <span class=\"tw-text-sm tw-text-blue-700\">\n Sequence will be automatically managed through drag-and-drop on the listing page\n </span>\n </div>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n [class.tw-cursor-not-allowed]=\"isViewMode()\"\n [class.tw-opacity-60]=\"isViewMode()\"\n (click)=\"onActiveCardClick()\">\n <cide-ele-input formControlName=\"acapt_isactive\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this term</span>\n </div>\n </div>\n\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n [class.tw-cursor-not-allowed]=\"isViewMode()\"\n [class.tw-opacity-60]=\"isViewMode()\"\n (click)=\"onLockedCardClick()\">\n <cide-ele-input formControlName=\"acapt_islocked\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Error Display -->\n @if (error()) {\n <div class=\"tw-mt-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-lg\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon variant=\"red\" size=\"sm\">error</cide-ele-icon>\n <span class=\"tw-text-sm tw-font-medium tw-text-red-800\">{{ error() }}</span>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"cancelForm()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || classProgramTermForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ isEditMode() ? 'Update Class Program Term' : 'Create Class Program Term' }}\n </button>\n </div>\n </div>\n </div>\n </form>\n</cide-lyt-shared-wrapper>\n\n"],"names":[],"mappings":"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"}
|