cloud-ide-academics 0.0.44 → 0.0.47
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-bonafide.service-B_HDaTmS.mjs.map +1 -1
- package/fesm2022/{cloud-ide-academics-class-program-term-create.component-kSWzK2lk.mjs → cloud-ide-academics-class-program-term-create.component-DC8ufash.mjs} +4 -4
- package/fesm2022/{cloud-ide-academics-class-program-term-create.component-kSWzK2lk.mjs.map → cloud-ide-academics-class-program-term-create.component-DC8ufash.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-academics-class-program-term-list.component-z2Lz6cg9.mjs → cloud-ide-academics-class-program-term-list.component-DOSmWF8-.mjs} +2 -2
- package/fesm2022/{cloud-ide-academics-class-program-term-list.component-z2Lz6cg9.mjs.map → cloud-ide-academics-class-program-term-list.component-DOSmWF8-.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-academics-cloud-ide-academics-0drYFjQW.mjs → cloud-ide-academics-cloud-ide-academics-lJe7ng0S.mjs} +17 -17
- package/fesm2022/cloud-ide-academics-cloud-ide-academics-lJe7ng0S.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-program-class-create.component-DSPV-iAg.mjs → cloud-ide-academics-program-class-create.component-CvZ_LGT_.mjs} +2 -2
- package/fesm2022/{cloud-ide-academics-program-class-create.component-DSPV-iAg.mjs.map → cloud-ide-academics-program-class-create.component-CvZ_LGT_.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-academics-program-class-list.component-B97WqYt7.mjs → cloud-ide-academics-program-class-list.component-_P6B5SSA.mjs} +2 -2
- package/fesm2022/{cloud-ide-academics-program-class-list.component-B97WqYt7.mjs.map → cloud-ide-academics-program-class-list.component-_P6B5SSA.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-academics-student-list.component-Bjwr-QFa.mjs → cloud-ide-academics-student-list.component-Ctctm6yt.mjs} +4 -4
- package/fesm2022/{cloud-ide-academics-student-list.component-Bjwr-QFa.mjs.map → cloud-ide-academics-student-list.component-Ctctm6yt.mjs.map} +1 -1
- package/fesm2022/cloud-ide-academics.mjs +1 -1
- package/package.json +1 -1
- package/fesm2022/cloud-ide-academics-cloud-ide-academics-0drYFjQW.mjs.map +0 -1
|
@@ -8,7 +8,7 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
|
8
8
|
import { NotificationService, ConfirmationService, CideInputComponent, CideEleButtonComponent, CideIconComponent, CideSelectComponent, CideFormFieldErrorComponent } from 'cloud-ide-element';
|
|
9
9
|
import { AppStateHelperService, ComponentContextService, RightsService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';
|
|
10
10
|
import { CideCoreGeneralMasterService } from 'cloud-ide-core';
|
|
11
|
-
import { a as CideLytAcademicYearService, C as CideLytProgramClassService } from './cloud-ide-academics-cloud-ide-academics-
|
|
11
|
+
import { a as CideLytAcademicYearService, C as CideLytProgramClassService } from './cloud-ide-academics-cloud-ide-academics-lJe7ng0S.mjs';
|
|
12
12
|
import { generateObjectFromString } from 'cloud-ide-lms-model';
|
|
13
13
|
|
|
14
14
|
class ProgramClassCreateComponent {
|
|
@@ -456,4 +456,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
456
456
|
}], ctorParameters: () => [] });
|
|
457
457
|
|
|
458
458
|
export { ProgramClassCreateComponent };
|
|
459
|
-
//# sourceMappingURL=cloud-ide-academics-program-class-create.component-
|
|
459
|
+
//# sourceMappingURL=cloud-ide-academics-program-class-create.component-CvZ_LGT_.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-ide-academics-program-class-create.component-DSPV-iAg.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/program-class-management/components/program-class-create/program-class-create.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/program-class-management/components/program-class-create/program-class-create.component.html"],"sourcesContent":["import { Component, inject, signal, OnInit, DestroyRef, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, FormArray, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Location } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideIconComponent, CideSelectComponent, NotificationService, ConfirmationService, CideFormFieldErrorComponent } from 'cloud-ide-element';\nimport { AppStateHelperService, CideLytSharedWrapperComponent, ComponentContextService, RightsService } from 'cloud-ide-layout';\nimport { CideCoreGeneralMasterService } from 'cloud-ide-core';\nimport { CideLytAcademicYearService } from '../../../academic-year-management';\nimport { CideLytProgramClassService } from '../../services/program-class.service';\nimport { AcaAcademicYear, ICoreSygms, generateObjectFromString } from 'cloud-ide-lms-model';\n\n// Interfaces based on the model files\ninterface ProgramClass {\n _id?: string;\n acacpm_class_program_id_sygms?: string;\n acacpm_alise_title?: string;\n acacpm_academic_year_id_acayr?: string;\n acacpm_entity_id_syen?: string;\n acacpm_isactive?: boolean;\n}\n\n\ninterface AcademicYear {\n _id?: string;\n acayr_name?: string;\n acayr_code?: string;\n}\n\ninterface ClassProgram {\n _id?: string;\n sygmt_name?: string;\n sygmt_code?: string;\n}\n\n@Component({\n selector: 'cide-academics-program-class-create',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideInputComponent,\n CideEleButtonComponent,\n CideIconComponent,\n CideSelectComponent,\n CideLytSharedWrapperComponent,\n CideFormFieldErrorComponent\n ],\n templateUrl: './program-class-create.component.html'\n})\nexport class ProgramClassCreateComponent implements OnInit, OnDestroy {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private fb = inject(FormBuilder);\n private generalMasterService = inject(CideCoreGeneralMasterService);\n private academicYearService = inject(CideLytAcademicYearService);\n private programClassService = inject(CideLytProgramClassService);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private location = inject(Location);\n private appState = inject(AppStateHelperService);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\n private componentContextService = inject(ComponentContextService);\n private rightsService = inject(RightsService);\n\n programClassForm: FormGroup;\n loading = signal(false);\n error = signal<string | null>(null);\n\n // Program class information from route\n programClassId = signal<string>('');\n isEditMode = signal(false);\n isViewMode = signal(false);\n\n // Data signals\n academicYears = signal<AcademicYear[]>([]);\n classPrograms = signal<ClassProgram[]>([]);\n\n // Options for dropdowns\n academicYearOptions = signal<AcaAcademicYear[]>([]);\n classProgramOptions = signal<ICoreSygms[]>([]);\n\n // Signal for breadcrumb data that will be passed to shared wrapper\n breadcrumbData = signal<{ id: string; label: string; icon?: string; url?: string }[]>([]);\n\n constructor() {\n this.programClassForm = this.fb.group({\n // Basic Program Class Information\n acacpm_class_program_id_sygms: ['', [Validators.required]],\n acacpm_alise_title: ['', [Validators.required, Validators.minLength(2)]],\n acacpm_academic_year_id_acayr: ['', [Validators.required]],\n acacpm_entity_id_syen: [''], // Set automatically from app state\n acacpm_isactive: [true]\n });\n }\n\n ngOnInit(): void {\n // Initialize rights for program class management\n this.rightsService.initializeRights('program_class');\n this.initializeComponent();\n this.setupFormSubscriptions();\n }\n\n /**\n * Update breadcrumb data based on mode\n */\n private updateBreadcrumbData(): void {\n const additionalItems: { id: string; label: string; icon?: string; url?: string }[] = [];\n \n if (this.isViewMode()) {\n additionalItems.push({\n id: 'view',\n label: 'View',\n icon: 'visibility',\n url: undefined\n });\n } else if (this.isEditMode()) {\n additionalItems.push({\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n url: undefined\n });\n } else {\n additionalItems.push({\n id: 'create',\n label: 'Create',\n icon: 'add',\n url: undefined\n });\n }\n \n this.breadcrumbData.set(additionalItems);\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n // Set entity ID from app state\n this.setEntityFromAppState();\n\n // Get program class information from route (for edit/view mode)\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\n const queryParams = params['query'];\n console.log('🔍 Route params:', queryParams);\n\n if (queryParams) {\n // Query parameters passed (following page-controls pattern)\n const queryData = generateObjectFromString(queryParams);\n if (queryData?.acacpm_id) {\n this.programClassId.set(queryData.acacpm_id as string);\n this.isEditMode.set(true);\n this.loadProgramClassData(queryData.acacpm_id as string);\n }\n } else {\n // Check URL path for edit/view mode\n const url = this.router.url;\n if (url.includes('/view/')) {\n this.isViewMode.set(true);\n // Extract ID from URL path\n const pathSegments = url.split('/');\n const id = pathSegments[pathSegments.length - 1];\n if (id) {\n this.programClassId.set(id);\n this.loadProgramClassData(id);\n }\n } else if (url.includes('/edit/')) {\n this.isEditMode.set(true);\n // Extract ID from URL path\n const pathSegments = url.split('/');\n const id = pathSegments[pathSegments.length - 1];\n if (id) {\n this.programClassId.set(id);\n this.loadProgramClassData(id);\n }\n } else {\n // Create mode\n this.isEditMode.set(false);\n this.isViewMode.set(false);\n }\n }\n\n // Always load dropdown options\n this.loadDropdownOptions();\n });\n }\n\n\n /**\n * Set entity ID from app state\n */\n private setEntityFromAppState(): void {\n const activeEntity = this.appState.activeEntity();\n // Always set entity ID, even if null (for create mode)\n const entityId = activeEntity?._id || null;\n this.programClassForm.patchValue({\n acacpm_entity_id_syen: entityId\n });\n if (entityId) {\n console.log('✅ Entity ID set from app state:', entityId);\n } else {\n console.warn('⚠️ No active entity found in app state, setting to null');\n }\n }\n\n /**\n * Set default academic year to the current one and disable it\n */\n private setDefaultAcademicYear(academicYears: AcaAcademicYear[]): void {\n // Only set and disable in create mode\n if (this.isEditMode() || this.isViewMode()) {\n return;\n }\n \n // Find the academic year with acayr_iscurrent: true\n const currentAcademicYear = academicYears.find(year => year.acayr_iscurrent === true);\n \n if (currentAcademicYear) {\n this.programClassForm.patchValue({\n acacpm_academic_year_id_acayr: currentAcademicYear._id\n });\n // Disable academic year dropdown in create mode\n this.programClassForm.get('acacpm_academic_year_id_acayr')?.disable();\n console.log('✅ Default academic year set to current and disabled:', currentAcademicYear.acayr_name, currentAcademicYear._id);\n } else {\n console.warn('⚠️ No current academic year found (acayr_iscurrent: true)');\n }\n }\n\n /**\n * Setup form subscriptions for auto-population\n */\n private setupFormSubscriptions(): void {\n // Listen for class program selection changes\n this.programClassForm.get('acacpm_class_program_id_sygms')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((selectedClassProgramId) => {\n if (selectedClassProgramId) {\n this.updateProgramClassName(selectedClassProgramId);\n }\n });\n }\n\n /**\n * Update program class name based on selected class program\n */\n private updateProgramClassName(selectedClassProgramId: string): void {\n const selectedClassProgram = this.classProgramOptions().find(option => option._id === selectedClassProgramId);\n \n if (selectedClassProgram && selectedClassProgram.sygms_title) {\n // Only update if the title field is empty or if user hasn't manually changed it\n const currentTitle = this.programClassForm.get('acacpm_alise_title')?.value;\n if (!currentTitle || currentTitle.trim() === '') {\n this.programClassForm.patchValue({\n acacpm_alise_title: selectedClassProgram.sygms_title\n });\n console.log('✅ Program class title auto-populated:', selectedClassProgram.sygms_title);\n }\n }\n }\n\n /**\n * Load program class data for edit/view mode\n */\n private loadProgramClassData(programClassId: string): void {\n this.loading.set(true);\n this.error.set(null);\n\n // Create payload for getting program class by ID\n const payload = {\n acacpm_id: programClassId\n };\n\n // Load program class data\n this.programClassService.getProgramClassById(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n console.log('📚 Program class data loaded:', response.data);\n this.populateFormWithProgramClassData(response.data);\n \n // Disable form if in view mode\n if (this.isViewMode()) {\n this.programClassForm.disable();\n }\n } else {\n console.error('❌ Failed to load program class data');\n this.error.set('Failed to load program class data');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error loading program class data:', error);\n this.error.set('Error loading program class data');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Populate form with program class data\n */\n private populateFormWithProgramClassData(data: any): void {\n this.programClassForm.patchValue({\n acacpm_class_program_id_sygms: data.acacpm_class_program_id_sygms?._id || data.acacpm_class_program_id_sygms,\n acacpm_alise_title: data.acacpm_alise_title,\n acacpm_academic_year_id_acayr: data.acacpm_academic_year_id_acayr?._id || data.acacpm_academic_year_id_acayr,\n acacpm_entity_id_syen: data.acacpm_entity_id_syen?._id || data.acacpm_entity_id_syen,\n acacpm_isactive: data.acacpm_isactive\n });\n \n // In edit mode, enable academic year dropdown (it was disabled in create mode)\n if (this.isEditMode()) {\n this.programClassForm.get('acacpm_academic_year_id_acayr')?.enable();\n }\n }\n\n /**\n * Load dropdown options\n */\n private loadDropdownOptions(): void {\n // Load academic year options from academic year service\n this.academicYearService.getAcademicYearList({})\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('🔍 Academic Year API Response:', response);\n if (response?.success && response.data) {\n console.log('📚 Academic years loaded from service:', response.data);\n this.academicYearOptions.set(response.data);\n console.log('✅ academicYearOptions signal updated:', this.academicYearOptions());\n \n // Set default academic year to the current one\n this.setDefaultAcademicYear(response.data);\n } else {\n console.warn('⚠️ No academic year data received from service');\n this.academicYearOptions.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading academic years from service:', error);\n this.academicYearOptions.set([]);\n }\n });\n\n // Load class program options from general master service\n this.generalMasterService.getMasterList({ sygmt_code: 'class_program_type' })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('🔍 General Master API Response:', response);\n if (response?.success && response.data) {\n console.log('📚 Class program types loaded from general master:', response.data);\n // Use the response data directly without transformation\n this.classProgramOptions.set(response.data);\n console.log('✅ classProgramOptions signal updated:', this.classProgramOptions());\n } else {\n console.warn('⚠️ No class program type data received from general master');\n this.classProgramOptions.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading class program types from general master:', error);\n this.classProgramOptions.set([]);\n }\n });\n }\n\n\n onSubmit() {\n if (this.isViewMode()) {\n this.location.back();\n return;\n }\n\n if (this.programClassForm.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 // Get form data and include disabled fields\n const formData = { ...this.programClassForm.getRawValue() };\n console.log('Program Class Form Data:', formData);\n\n // Ensure entity ID is set from app state if not already set\n if (!formData.acacpm_entity_id_syen) {\n const activeEntity = this.appState.activeEntity();\n formData.acacpm_entity_id_syen = activeEntity?._id || null;\n }\n\n // Add ID for edit mode\n if (this.isEditMode()) {\n formData._id = this.programClassId();\n }\n\n // Make API call to save program class\n this.programClassService.saveProgramClass(formData)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n const action = this.isEditMode() ? 'updated' : 'created';\n this.notificationService.success(`Program class has been ${action} successfully.`);\n \n // Navigate to program class list on successful create, go back on edit\n if (this.isEditMode()) {\n this.location.back();\n } else {\n // Navigate to program class list for create operation (closes current tab)\n this.router.navigate(['/control-panel/program-class-management']);\n }\n } else {\n this.notificationService.error(response?.message || 'Failed to save program class.');\n }\n this.loading.set(false);\n },\n error: (error: unknown) => {\n console.error('Error saving program class:', error);\n this.loading.set(false);\n \n // Extract error message from API response\n const errorMessage = error && typeof error === 'object' && 'error' in error \n ? (error.error && typeof error.error === 'object' && 'message' in error.error \n ? String(error.error.message) \n : 'message' in error ? String(error.message) : 'An error occurred while saving the program class.')\n : error && typeof error === 'object' && 'message' in error\n ? String(error.message)\n : 'An error occurred while saving the program class.';\n \n this.error.set(errorMessage);\n this.notificationService.error(errorMessage);\n }\n });\n }\n\n /**\n * Mark all form controls as touched to trigger validation display\n */\n private markFormGroupTouched(): void {\n Object.keys(this.programClassForm.controls).forEach(key => {\n const control = this.programClassForm.get(key);\n control?.markAsTouched();\n });\n }\n\n resetForm() {\n if (this.isEditMode() && this.programClassId()) {\n // Reload data in edit mode\n this.loadProgramClassData(this.programClassId());\n } else {\n // Reset to defaults in create mode\n this.programClassForm.reset({\n acacpm_isactive: true\n });\n }\n }\n\n /**\n * Toggle active status when card is clicked\n */\n toggleActiveStatus(): void {\n const currentValue = this.programClassForm.get('acacpm_isactive')?.value;\n this.programClassForm.patchValue({\n acacpm_isactive: !currentValue\n });\n }\n\n /**\n * Go back to previous page using browser history\n */\n goBackToProgramClassList(): void {\n this.componentContextService.close(['/control-panel/program-class-management']);\n }\n\n /**\n * Cancel form and navigate to listing page\n */\n cancelForm(): void {\n this.componentContextService.close(['/control-panel/program-class-management']);\n }\n\n /**\n * Get page title based on mode\n */\n getPageTitle(): string {\n if (this.isViewMode()) return 'View Program Class';\n return this.isEditMode() ? 'Edit Program Class' : 'Create New Program Class';\n }\n\n /**\n * Cleanup when component is destroyed\n */\n ngOnDestroy(): void {\n console.log('🧹 ProgramClassCreateComponent: 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.programClassId.set('');\n this.isEditMode.set(false);\n this.academicYearOptions.set([]);\n this.classProgramOptions.set([]);\n\n // Reset form to initial state\n this.resetForm();\n\n console.log('🧹 ProgramClassCreateComponent: Component state cleaned up');\n }\n}\n","<!-- \n PROGRAM CLASS MASTER FORM\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'program_class' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"programClassForm\"\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Form Content -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n <!-- Basic Program Class Information -->\n <div class=\"tw-space-y-6\">\n <!-- Class Program and Academic Year at the top -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Academic Year</label>\n <cide-ele-select formControlName=\"acacpm_academic_year_id_acayr\" placeholder=\"Select academic year\"\n [disabled]=\"isViewMode() || (!isEditMode() && !isViewMode())\" valueKey=\"_id\" labelKey=\"acayr_name\"\n [options]=\"academicYearOptions()\">\n </cide-ele-select>\n </div>\n\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Class Program</label>\n <cide-ele-select formControlName=\"acacpm_class_program_id_sygms\" placeholder=\"Select class program\"\n [disabled]=\"isViewMode()\" valueKey=\"_id\" labelKey=\"sygms_title\" [options]=\"classProgramOptions()\"\n [treeView]=\"{ enabled: true, primaryKey: '_id', foreignKey: 'sygms_id_sygms' }\" [searchable]=\"true\">\n </cide-ele-select>\n </div>\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=\"Program Class Title\" formControlName=\"acacpm_alise_title\"\n placeholder=\"e.g., Program Class 2024-2025\" size=\"md\" leadingIcon=\"school\">\n </cide-ele-input>\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 (click)=\"toggleActiveStatus()\">\n <cide-ele-input formControlName=\"acacpm_isactive\" type=\"checkbox\" size=\"md\"\n (click)=\"$event.stopPropagation()\">\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 program class</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-flex-col tw-gap-3\">\n <!-- Form Validation Errors -->\n <div class=\"tw-w-full\">\n <cide-form-field-error [formGroup]=\"programClassForm\"></cide-form-field-error>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n @if (!isEditMode()) {\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n }\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() || programClassForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ isEditMode() ? 'Update Program Class' : 'Create Program Class' }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </form>\n</cide-lyt-shared-wrapper>"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cloud-ide-academics-program-class-create.component-CvZ_LGT_.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/program-class-management/components/program-class-create/program-class-create.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/program-class-management/components/program-class-create/program-class-create.component.html"],"sourcesContent":["import { Component, inject, signal, OnInit, DestroyRef, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, FormArray, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Location } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideIconComponent, CideSelectComponent, NotificationService, ConfirmationService, CideFormFieldErrorComponent } from 'cloud-ide-element';\nimport { AppStateHelperService, CideLytSharedWrapperComponent, ComponentContextService, RightsService } from 'cloud-ide-layout';\nimport { CideCoreGeneralMasterService } from 'cloud-ide-core';\nimport { CideLytAcademicYearService } from '../../../academic-year-management';\nimport { CideLytProgramClassService } from '../../services/program-class.service';\nimport { AcaAcademicYear, ICoreSygms, generateObjectFromString } from 'cloud-ide-lms-model';\n\n// Interfaces based on the model files\ninterface ProgramClass {\n _id?: string;\n acacpm_class_program_id_sygms?: string;\n acacpm_alise_title?: string;\n acacpm_academic_year_id_acayr?: string;\n acacpm_entity_id_syen?: string;\n acacpm_isactive?: boolean;\n}\n\n\ninterface AcademicYear {\n _id?: string;\n acayr_name?: string;\n acayr_code?: string;\n}\n\ninterface ClassProgram {\n _id?: string;\n sygmt_name?: string;\n sygmt_code?: string;\n}\n\n@Component({\n selector: 'cide-academics-program-class-create',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideInputComponent,\n CideEleButtonComponent,\n CideIconComponent,\n CideSelectComponent,\n CideLytSharedWrapperComponent,\n CideFormFieldErrorComponent\n ],\n templateUrl: './program-class-create.component.html'\n})\nexport class ProgramClassCreateComponent implements OnInit, OnDestroy {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private fb = inject(FormBuilder);\n private generalMasterService = inject(CideCoreGeneralMasterService);\n private academicYearService = inject(CideLytAcademicYearService);\n private programClassService = inject(CideLytProgramClassService);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private location = inject(Location);\n private appState = inject(AppStateHelperService);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\n private componentContextService = inject(ComponentContextService);\n private rightsService = inject(RightsService);\n\n programClassForm: FormGroup;\n loading = signal(false);\n error = signal<string | null>(null);\n\n // Program class information from route\n programClassId = signal<string>('');\n isEditMode = signal(false);\n isViewMode = signal(false);\n\n // Data signals\n academicYears = signal<AcademicYear[]>([]);\n classPrograms = signal<ClassProgram[]>([]);\n\n // Options for dropdowns\n academicYearOptions = signal<AcaAcademicYear[]>([]);\n classProgramOptions = signal<ICoreSygms[]>([]);\n\n // Signal for breadcrumb data that will be passed to shared wrapper\n breadcrumbData = signal<{ id: string; label: string; icon?: string; url?: string }[]>([]);\n\n constructor() {\n this.programClassForm = this.fb.group({\n // Basic Program Class Information\n acacpm_class_program_id_sygms: ['', [Validators.required]],\n acacpm_alise_title: ['', [Validators.required, Validators.minLength(2)]],\n acacpm_academic_year_id_acayr: ['', [Validators.required]],\n acacpm_entity_id_syen: [''], // Set automatically from app state\n acacpm_isactive: [true]\n });\n }\n\n ngOnInit(): void {\n // Initialize rights for program class management\n this.rightsService.initializeRights('program_class');\n this.initializeComponent();\n this.setupFormSubscriptions();\n }\n\n /**\n * Update breadcrumb data based on mode\n */\n private updateBreadcrumbData(): void {\n const additionalItems: { id: string; label: string; icon?: string; url?: string }[] = [];\n \n if (this.isViewMode()) {\n additionalItems.push({\n id: 'view',\n label: 'View',\n icon: 'visibility',\n url: undefined\n });\n } else if (this.isEditMode()) {\n additionalItems.push({\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n url: undefined\n });\n } else {\n additionalItems.push({\n id: 'create',\n label: 'Create',\n icon: 'add',\n url: undefined\n });\n }\n \n this.breadcrumbData.set(additionalItems);\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n // Set entity ID from app state\n this.setEntityFromAppState();\n\n // Get program class information from route (for edit/view mode)\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\n const queryParams = params['query'];\n console.log('🔍 Route params:', queryParams);\n\n if (queryParams) {\n // Query parameters passed (following page-controls pattern)\n const queryData = generateObjectFromString(queryParams);\n if (queryData?.acacpm_id) {\n this.programClassId.set(queryData.acacpm_id as string);\n this.isEditMode.set(true);\n this.loadProgramClassData(queryData.acacpm_id as string);\n }\n } else {\n // Check URL path for edit/view mode\n const url = this.router.url;\n if (url.includes('/view/')) {\n this.isViewMode.set(true);\n // Extract ID from URL path\n const pathSegments = url.split('/');\n const id = pathSegments[pathSegments.length - 1];\n if (id) {\n this.programClassId.set(id);\n this.loadProgramClassData(id);\n }\n } else if (url.includes('/edit/')) {\n this.isEditMode.set(true);\n // Extract ID from URL path\n const pathSegments = url.split('/');\n const id = pathSegments[pathSegments.length - 1];\n if (id) {\n this.programClassId.set(id);\n this.loadProgramClassData(id);\n }\n } else {\n // Create mode\n this.isEditMode.set(false);\n this.isViewMode.set(false);\n }\n }\n\n // Always load dropdown options\n this.loadDropdownOptions();\n });\n }\n\n\n /**\n * Set entity ID from app state\n */\n private setEntityFromAppState(): void {\n const activeEntity = this.appState.activeEntity();\n // Always set entity ID, even if null (for create mode)\n const entityId = activeEntity?._id || null;\n this.programClassForm.patchValue({\n acacpm_entity_id_syen: entityId\n });\n if (entityId) {\n console.log('✅ Entity ID set from app state:', entityId);\n } else {\n console.warn('⚠️ No active entity found in app state, setting to null');\n }\n }\n\n /**\n * Set default academic year to the current one and disable it\n */\n private setDefaultAcademicYear(academicYears: AcaAcademicYear[]): void {\n // Only set and disable in create mode\n if (this.isEditMode() || this.isViewMode()) {\n return;\n }\n \n // Find the academic year with acayr_iscurrent: true\n const currentAcademicYear = academicYears.find(year => year.acayr_iscurrent === true);\n \n if (currentAcademicYear) {\n this.programClassForm.patchValue({\n acacpm_academic_year_id_acayr: currentAcademicYear._id\n });\n // Disable academic year dropdown in create mode\n this.programClassForm.get('acacpm_academic_year_id_acayr')?.disable();\n console.log('✅ Default academic year set to current and disabled:', currentAcademicYear.acayr_name, currentAcademicYear._id);\n } else {\n console.warn('⚠️ No current academic year found (acayr_iscurrent: true)');\n }\n }\n\n /**\n * Setup form subscriptions for auto-population\n */\n private setupFormSubscriptions(): void {\n // Listen for class program selection changes\n this.programClassForm.get('acacpm_class_program_id_sygms')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((selectedClassProgramId) => {\n if (selectedClassProgramId) {\n this.updateProgramClassName(selectedClassProgramId);\n }\n });\n }\n\n /**\n * Update program class name based on selected class program\n */\n private updateProgramClassName(selectedClassProgramId: string): void {\n const selectedClassProgram = this.classProgramOptions().find(option => option._id === selectedClassProgramId);\n \n if (selectedClassProgram && selectedClassProgram.sygms_title) {\n // Only update if the title field is empty or if user hasn't manually changed it\n const currentTitle = this.programClassForm.get('acacpm_alise_title')?.value;\n if (!currentTitle || currentTitle.trim() === '') {\n this.programClassForm.patchValue({\n acacpm_alise_title: selectedClassProgram.sygms_title\n });\n console.log('✅ Program class title auto-populated:', selectedClassProgram.sygms_title);\n }\n }\n }\n\n /**\n * Load program class data for edit/view mode\n */\n private loadProgramClassData(programClassId: string): void {\n this.loading.set(true);\n this.error.set(null);\n\n // Create payload for getting program class by ID\n const payload = {\n acacpm_id: programClassId\n };\n\n // Load program class data\n this.programClassService.getProgramClassById(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n console.log('📚 Program class data loaded:', response.data);\n this.populateFormWithProgramClassData(response.data);\n \n // Disable form if in view mode\n if (this.isViewMode()) {\n this.programClassForm.disable();\n }\n } else {\n console.error('❌ Failed to load program class data');\n this.error.set('Failed to load program class data');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error loading program class data:', error);\n this.error.set('Error loading program class data');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Populate form with program class data\n */\n private populateFormWithProgramClassData(data: any): void {\n this.programClassForm.patchValue({\n acacpm_class_program_id_sygms: data.acacpm_class_program_id_sygms?._id || data.acacpm_class_program_id_sygms,\n acacpm_alise_title: data.acacpm_alise_title,\n acacpm_academic_year_id_acayr: data.acacpm_academic_year_id_acayr?._id || data.acacpm_academic_year_id_acayr,\n acacpm_entity_id_syen: data.acacpm_entity_id_syen?._id || data.acacpm_entity_id_syen,\n acacpm_isactive: data.acacpm_isactive\n });\n \n // In edit mode, enable academic year dropdown (it was disabled in create mode)\n if (this.isEditMode()) {\n this.programClassForm.get('acacpm_academic_year_id_acayr')?.enable();\n }\n }\n\n /**\n * Load dropdown options\n */\n private loadDropdownOptions(): void {\n // Load academic year options from academic year service\n this.academicYearService.getAcademicYearList({})\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('🔍 Academic Year API Response:', response);\n if (response?.success && response.data) {\n console.log('📚 Academic years loaded from service:', response.data);\n this.academicYearOptions.set(response.data);\n console.log('✅ academicYearOptions signal updated:', this.academicYearOptions());\n \n // Set default academic year to the current one\n this.setDefaultAcademicYear(response.data);\n } else {\n console.warn('⚠️ No academic year data received from service');\n this.academicYearOptions.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading academic years from service:', error);\n this.academicYearOptions.set([]);\n }\n });\n\n // Load class program options from general master service\n this.generalMasterService.getMasterList({ sygmt_code: 'class_program_type' })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('🔍 General Master API Response:', response);\n if (response?.success && response.data) {\n console.log('📚 Class program types loaded from general master:', response.data);\n // Use the response data directly without transformation\n this.classProgramOptions.set(response.data);\n console.log('✅ classProgramOptions signal updated:', this.classProgramOptions());\n } else {\n console.warn('⚠️ No class program type data received from general master');\n this.classProgramOptions.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading class program types from general master:', error);\n this.classProgramOptions.set([]);\n }\n });\n }\n\n\n onSubmit() {\n if (this.isViewMode()) {\n this.location.back();\n return;\n }\n\n if (this.programClassForm.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 // Get form data and include disabled fields\n const formData = { ...this.programClassForm.getRawValue() };\n console.log('Program Class Form Data:', formData);\n\n // Ensure entity ID is set from app state if not already set\n if (!formData.acacpm_entity_id_syen) {\n const activeEntity = this.appState.activeEntity();\n formData.acacpm_entity_id_syen = activeEntity?._id || null;\n }\n\n // Add ID for edit mode\n if (this.isEditMode()) {\n formData._id = this.programClassId();\n }\n\n // Make API call to save program class\n this.programClassService.saveProgramClass(formData)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n const action = this.isEditMode() ? 'updated' : 'created';\n this.notificationService.success(`Program class has been ${action} successfully.`);\n \n // Navigate to program class list on successful create, go back on edit\n if (this.isEditMode()) {\n this.location.back();\n } else {\n // Navigate to program class list for create operation (closes current tab)\n this.router.navigate(['/control-panel/program-class-management']);\n }\n } else {\n this.notificationService.error(response?.message || 'Failed to save program class.');\n }\n this.loading.set(false);\n },\n error: (error: unknown) => {\n console.error('Error saving program class:', error);\n this.loading.set(false);\n \n // Extract error message from API response\n const errorMessage = error && typeof error === 'object' && 'error' in error \n ? (error.error && typeof error.error === 'object' && 'message' in error.error \n ? String(error.error.message) \n : 'message' in error ? String(error.message) : 'An error occurred while saving the program class.')\n : error && typeof error === 'object' && 'message' in error\n ? String(error.message)\n : 'An error occurred while saving the program class.';\n \n this.error.set(errorMessage);\n this.notificationService.error(errorMessage);\n }\n });\n }\n\n /**\n * Mark all form controls as touched to trigger validation display\n */\n private markFormGroupTouched(): void {\n Object.keys(this.programClassForm.controls).forEach(key => {\n const control = this.programClassForm.get(key);\n control?.markAsTouched();\n });\n }\n\n resetForm() {\n if (this.isEditMode() && this.programClassId()) {\n // Reload data in edit mode\n this.loadProgramClassData(this.programClassId());\n } else {\n // Reset to defaults in create mode\n this.programClassForm.reset({\n acacpm_isactive: true\n });\n }\n }\n\n /**\n * Toggle active status when card is clicked\n */\n toggleActiveStatus(): void {\n const currentValue = this.programClassForm.get('acacpm_isactive')?.value;\n this.programClassForm.patchValue({\n acacpm_isactive: !currentValue\n });\n }\n\n /**\n * Go back to previous page using browser history\n */\n goBackToProgramClassList(): void {\n this.componentContextService.close(['/control-panel/program-class-management']);\n }\n\n /**\n * Cancel form and navigate to listing page\n */\n cancelForm(): void {\n this.componentContextService.close(['/control-panel/program-class-management']);\n }\n\n /**\n * Get page title based on mode\n */\n getPageTitle(): string {\n if (this.isViewMode()) return 'View Program Class';\n return this.isEditMode() ? 'Edit Program Class' : 'Create New Program Class';\n }\n\n /**\n * Cleanup when component is destroyed\n */\n ngOnDestroy(): void {\n console.log('🧹 ProgramClassCreateComponent: 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.programClassId.set('');\n this.isEditMode.set(false);\n this.academicYearOptions.set([]);\n this.classProgramOptions.set([]);\n\n // Reset form to initial state\n this.resetForm();\n\n console.log('🧹 ProgramClassCreateComponent: Component state cleaned up');\n }\n}\n","<!-- \n PROGRAM CLASS MASTER FORM\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'program_class' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"programClassForm\"\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Form Content -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n <!-- Basic Program Class Information -->\n <div class=\"tw-space-y-6\">\n <!-- Class Program and Academic Year at the top -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Academic Year</label>\n <cide-ele-select formControlName=\"acacpm_academic_year_id_acayr\" placeholder=\"Select academic year\"\n [disabled]=\"isViewMode() || (!isEditMode() && !isViewMode())\" valueKey=\"_id\" labelKey=\"acayr_name\"\n [options]=\"academicYearOptions()\">\n </cide-ele-select>\n </div>\n\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Class Program</label>\n <cide-ele-select formControlName=\"acacpm_class_program_id_sygms\" placeholder=\"Select class program\"\n [disabled]=\"isViewMode()\" valueKey=\"_id\" labelKey=\"sygms_title\" [options]=\"classProgramOptions()\"\n [treeView]=\"{ enabled: true, primaryKey: '_id', foreignKey: 'sygms_id_sygms' }\" [searchable]=\"true\">\n </cide-ele-select>\n </div>\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=\"Program Class Title\" formControlName=\"acacpm_alise_title\"\n placeholder=\"e.g., Program Class 2024-2025\" size=\"md\" leadingIcon=\"school\">\n </cide-ele-input>\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 (click)=\"toggleActiveStatus()\">\n <cide-ele-input formControlName=\"acacpm_isactive\" type=\"checkbox\" size=\"md\"\n (click)=\"$event.stopPropagation()\">\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 program class</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-flex-col tw-gap-3\">\n <!-- Form Validation Errors -->\n <div class=\"tw-w-full\">\n <cide-form-field-error [formGroup]=\"programClassForm\"></cide-form-field-error>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n @if (!isEditMode()) {\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n }\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() || programClassForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ isEditMode() ? 'Update Program Class' : 'Create Program Class' }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </form>\n</cide-lyt-shared-wrapper>"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
|
7
7
|
import { NotificationService, ConfirmationService, CideEleDataGridComponent, CideIconComponent, CideEleButtonComponent, CideEleDropdownComponent } from 'cloud-ide-element';
|
|
8
8
|
import { AppStateHelperService, RightsService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';
|
|
9
9
|
import { generateStringFromObject } from 'cloud-ide-lms-model';
|
|
10
|
-
import { C as CideLytProgramClassService } from './cloud-ide-academics-cloud-ide-academics-
|
|
10
|
+
import { C as CideLytProgramClassService } from './cloud-ide-academics-cloud-ide-academics-lJe7ng0S.mjs';
|
|
11
11
|
|
|
12
12
|
class ProgramClassListComponent {
|
|
13
13
|
// Dependency injection
|
|
@@ -453,4 +453,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
453
453
|
}] });
|
|
454
454
|
|
|
455
455
|
export { ProgramClassListComponent };
|
|
456
|
-
//# sourceMappingURL=cloud-ide-academics-program-class-list.component-
|
|
456
|
+
//# sourceMappingURL=cloud-ide-academics-program-class-list.component-_P6B5SSA.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-ide-academics-program-class-list.component-B97WqYt7.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/program-class-management/components/program-class-list/program-class-list.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/program-class-management/components/program-class-list/program-class-list.component.html"],"sourcesContent":["import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideEleDataGridComponent, CideIconComponent, CideEleButtonComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, NotificationService, ConfirmationService } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { AppStateHelperService, CideLytSharedWrapperComponent, RightsService } from 'cloud-ide-layout';\nimport { \n type MClassProgramMaster,\n type MClassProgramMasterDeletePayload,\n type MClassProgramMasterToggleStatusPayload,\n generateStringFromObject\n} from 'cloud-ide-lms-model';\nimport { CideLytProgramClassService } from '../../services/program-class.service';\n\n// Interfaces based on the actual API response\ninterface ProgramClass {\n _id?: string;\n acacpm_alise_title?: string;\n acacpm_class_program_id_sygms?: {\n _id?: string;\n sygms_id_sygmt?: string;\n sygms_code?: string;\n sygms_title?: string;\n sygms_desc?: string;\n sygms_entity_id_syen?: string;\n sygms_isactive?: boolean;\n __v?: number;\n };\n acacpm_academic_year_id_acayr?: {\n _id?: string;\n acayr_code?: string;\n acayr_name?: string;\n acayr_description?: string;\n acayr_from_date?: string;\n acayr_to_date?: string;\n acayr_isactive?: boolean;\n acayr_iscurrent?: boolean;\n acayr_islocked?: boolean;\n __v?: number;\n };\n acacpm_entity_id_syen?: {\n _id?: string;\n syen_name?: string;\n syen_entity_type_gmst?: string;\n syen_entity_code?: string;\n syen_corporate_address?: string;\n syen_corporate_pin_sypin?: string;\n syen_corporate_city_sypin?: string;\n syen_corporate_state_sypin?: string;\n syen_corporate_contact_person_user?: any;\n syen_corporate_phone?: string;\n syen_corporate_phone_alt?: string;\n syen_corporate_fax?: string;\n syen_corporate_email?: string;\n syen_corporate_email_alt?: string;\n syen_website?: string;\n syen_currency_sycr?: string;\n syen_registered_address?: string;\n syen_registered_pin_sypin?: string;\n syen_registered_city_sypin?: string;\n syen_registered_state_sypin?: string;\n syen_registered_contact_person_user?: any;\n syen_registered_phone?: string;\n syen_registered_fax?: string;\n syen_registered_email?: string;\n syen_udise_no?: string;\n syen_affiliation_no?: string;\n syen_isactive?: boolean;\n __v?: number;\n };\n acacpm_isactive?: boolean;\n __v?: number;\n}\n\n@Component({\n selector: 'cide-academics-program-class-list',\n standalone: true,\n imports: [\n CommonModule,\n CideEleDataGridComponent,\n CideIconComponent,\n CideEleButtonComponent,\n CideEleDropdownComponent,\n CideLytSharedWrapperComponent\n ],\n templateUrl: './program-class-list.component.html',\n styles: [``]\n})\nexport class ProgramClassListComponent implements OnInit {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private router = inject(Router);\n private appState = inject(AppStateHelperService);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\n private programClassService = inject(CideLytProgramClassService);\n private rightsService = inject(RightsService);\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 // Modern ViewChild signals for template renderers (Angular 20 approach)\n programClassDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('programClassDetailsRendererTemplate');\n programClassStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('programClassStatusRendererTemplate');\n classProgramRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('classProgramRendererTemplate');\n academicYearRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('academicYearRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n\n // Computed template renderers for grid\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n programClassDetailsRenderer: this.programClassDetailsRendererTemplate(),\n programClassStatusRenderer: this.programClassStatusRendererTemplate(),\n classProgramRenderer: this.classProgramRendererTemplate(),\n academicYearRenderer: this.academicYearRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n programClasses = signal<ProgramClass[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Derived list filtered by searchTerm\n filteredProgramClasses = computed(() => {\n const q = (this.searchTerm() || '').toLowerCase().trim();\n const items = this.programClasses() || [];\n if (!q) return items;\n return items.filter(pc => {\n const title = (pc.acacpm_alise_title || '').toLowerCase();\n const classProgramTitle = (pc.acacpm_class_program_id_sygms?.sygms_title || '').toLowerCase();\n const academicYearName = (pc.acacpm_academic_year_id_acayr?.acayr_name || '').toLowerCase();\n const entityName = (pc.acacpm_entity_id_syen?.syen_name || '').toLowerCase();\n return title.includes(q) || classProgramTitle.includes(q) || academicYearName.includes(q) || entityName.includes(q);\n });\n });\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ProgramClass>>({\n id: 'program-class-list-grid',\n columns: [\n {\n key: 'details',\n header: 'Program Class Details',\n type: 'custom',\n width: '250px',\n truncate: true,\n align: 'left',\n renderer: 'programClassDetailsRenderer'\n },\n {\n key: 'acacpm_class_program_id_sygms',\n header: 'Class Program',\n type: 'custom',\n width: '250px',\n truncate: true,\n align: 'left',\n renderer: 'classProgramRenderer'\n },\n {\n key: 'acacpm_academic_year_id_acayr',\n header: 'Academic Year',\n type: 'custom',\n width: '220px',\n truncate: true,\n align: 'left',\n renderer: 'academicYearRenderer'\n },\n {\n key: 'acacpm_isactive',\n header: 'Status',\n type: 'custom',\n width: '140px',\n truncate: false,\n align: 'center',\n renderer: 'programClassStatusRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '150px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search program classes...',\n searchableColumns: ['acacpm_alise_title'],\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 });\n\n /**\n * Get action dropdown items\n */\n getActionDropdownItems(programClass: ProgramClass): 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 Program Class',\n icon: 'edit',\n iconColor: 'tw-text-blue-400',\n textColor: 'tw-text-blue-700'\n },\n {\n id: 'branch',\n label: 'Manage Branches',\n icon: 'account_tree',\n iconColor: 'tw-text-purple-400',\n textColor: 'tw-text-purple-700'\n },\n {\n id: 'toggleStatus',\n label: programClass?.acacpm_isactive ? 'Deactivate' : 'Activate',\n icon: programClass?.acacpm_isactive ? 'toggle_off' : 'toggle_on',\n iconColor: programClass?.acacpm_isactive ? 'tw-text-orange-400' : 'tw-text-green-400',\n textColor: programClass?.acacpm_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, programClass: ProgramClass): void {\n console.log('🔍 onDropdownItemClick called with:', { item, programClass });\n \n if (!item || !item.id) {\n console.error('Dropdown item is undefined:', item);\n return;\n }\n \n if (!programClass) {\n console.error('Program class is undefined:', programClass);\n this.notificationService.error('Unable to perform action: Invalid data');\n return;\n }\n\n switch (item.id) {\n case 'view':\n this.viewProgramClass(programClass);\n break;\n case 'edit':\n this.editProgramClass(programClass);\n break;\n case 'branch':\n this.manageBranches(programClass);\n break;\n case 'toggleStatus':\n this.toggleProgramClassStatus(programClass);\n break;\n case 'delete':\n this.deleteProgramClass(programClass);\n break;\n default:\n console.warn('Unknown dropdown action:', item.id);\n }\n }\n\n ngOnInit(): void {\n // Initialize rights for program class management\n this.rightsService.initializeRights('program_class');\n this.loadProgramClasses();\n }\n\n // Rights computed signals\n canCreate = computed(() => this.rightsService.hasRight('CREATE'));\n canEdit = computed(() => this.rightsService.hasRight('EDIT'));\n canDelete = computed(() => this.rightsService.hasRight('DELETE'));\n canView = computed(() => this.rightsService.hasRight('VIEW'));\n\n /**\n * Load program classes data\n */\n private loadProgramClasses(): void {\n this.loading.set(true);\n this.error.set(null);\n\n const payload: MClassProgramMaster = {\n pageIndex: 0,\n pageSize: 100,\n query: this.searchTerm() || \"\",\n sort: {\n key: 'acacpm_alise_title',\n order: 'asc'\n }\n };\n\n this.programClassService.getProgramClassList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n console.log('📚 Program classes loaded:', response.data);\n this.programClasses.set(response.data);\n this.updateGridData();\n this.notificationService.success(`Loaded ${response.data.length} program class(es) successfully.`);\n } else {\n console.warn('⚠️ No program class data received');\n this.programClasses.set([]);\n this.updateGridData();\n this.notificationService.warning('No program classes found.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error loading program classes:', error);\n this.error.set('Failed to load program classes');\n this.loading.set(false);\n this.notificationService.error('Failed to load program classes');\n }\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(): void {\n this.gridConfig.update(config => ({\n ...config,\n data: this.filteredProgramClasses()\n }));\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ProgramClass>): 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.loadProgramClasses();\n }\n break;\n case 'search':\n this.searchTerm.set(event.data as string);\n this.updateGridData();\n break;\n case 'refresh':\n this.loadProgramClasses();\n break;\n }\n }\n\n /**\n * Create new program class\n */\n createProgramClass(): void {\n if (!this.rightsService.hasRight('CREATE')) {\n this.notificationService.error('You do not have permission to create program classes');\n return;\n }\n this.router.navigate(['/control-panel/program-class-management/create']);\n }\n\n /**\n * View program class details\n */\n viewProgramClass(programClass: ProgramClass): void {\n if (!programClass || !programClass._id) {\n console.error('Program class or ID is undefined:', programClass);\n this.notificationService.error('Unable to view program class: Invalid data');\n return;\n }\n console.log('👁️ Viewing program class:', programClass);\n this.notificationService.info(`Opening program class \"${programClass.acacpm_alise_title}\" for viewing.`);\n const queryParams = generateStringFromObject({ acacpm_id: programClass._id });\n this.router.navigate(['/control-panel/program-class-management/view', queryParams]);\n }\n\n /**\n * Edit program class\n */\n editProgramClass(programClass: ProgramClass): void {\n if (!this.rightsService.hasRight('EDIT')) {\n this.notificationService.error('You do not have permission to edit program classes');\n return;\n }\n if (!programClass || !programClass._id) {\n console.error('Program class or ID is undefined:', programClass);\n this.notificationService.error('Unable to edit program class: Invalid data');\n return;\n }\n console.log('✏️ Editing program class:', programClass);\n this.notificationService.info(`Opening program class \"${programClass.acacpm_alise_title}\" for editing.`);\n const queryParams = generateStringFromObject({ acacpm_id: programClass._id });\n this.router.navigate(['/control-panel/program-class-management/edit', queryParams]);\n }\n\n /**\n * Manage branches for program class\n */\n manageBranches(programClass: ProgramClass): void {\n if (!programClass || !programClass._id) {\n console.error('Program class or ID is undefined:', programClass);\n this.notificationService.error('Unable to manage branches: Invalid data');\n return;\n }\n console.log('🌿 Managing branches for program class:', programClass);\n this.notificationService.info(`Opening branch management for \"${programClass.acacpm_alise_title}\".`);\n const queryParams = generateStringFromObject({ programId: programClass._id });\n this.router.navigate(['/control-panel/program_specialization', queryParams]);\n }\n\n /**\n * Delete program class\n */\n deleteProgramClass(programClass: ProgramClass): void {\n if (!programClass || !programClass._id) {\n console.error('Program class or ID is undefined:', programClass);\n this.notificationService.error('Unable to delete program class: Invalid data');\n return;\n }\n this.confirmationService.confirmDelete(programClass.acacpm_alise_title).then((confirmed: boolean) => {\n if (confirmed) {\n this.loading.set(true);\n const payload: MClassProgramMasterDeletePayload = {\n acacpm_id: programClass._id!\n };\n\n this.programClassService.deleteProgramClass(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.programClasses.update(classes => \n classes.filter(pc => pc._id !== programClass._id)\n );\n this.updateGridData();\n this.notificationService.success('Program class deleted successfully.');\n } else {\n this.notificationService.error('Failed to delete program class.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error deleting program class:', error);\n this.notificationService.error('Failed to delete program class.');\n this.loading.set(false);\n }\n });\n }\n });\n }\n\n /**\n * Toggle program class status\n */\n toggleProgramClassStatus(programClass: ProgramClass): void {\n if (!this.rightsService.hasRight('EDIT')) {\n this.notificationService.error('You do not have permission to change program class status');\n return;\n }\n if (!programClass || !programClass._id) {\n console.error('Program class or ID is undefined:', programClass);\n this.notificationService.error('Unable to toggle program class status: Invalid data');\n return;\n }\n this.loading.set(true);\n const payload: MClassProgramMasterToggleStatusPayload = {\n acacpm_id: programClass._id!\n };\n\n this.programClassService.toggleProgramClassStatus(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.programClasses.update(classes => \n classes.map(pc => \n pc._id === programClass._id \n ? { ...pc, acacpm_isactive: !pc.acacpm_isactive }\n : pc\n )\n );\n this.updateGridData();\n this.notificationService.success(`Program class ${programClass.acacpm_isactive ? 'deactivated' : 'activated'} successfully.`);\n } else {\n this.notificationService.error('Failed to toggle program class status.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error toggling program class status:', error);\n this.notificationService.error('Failed to toggle program class status.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Refresh data\n */\n refreshData(): void {\n this.loadProgramClasses();\n }\n}\n","<!-- Program Class Management Container -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'program_class' }\"\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)=\"createProgramClass()\">\n Create Program Class\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 <!-- 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 #programClassDetailsRendererTemplate 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-purple-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-text-purple-600 tw-w-5 tw-h-5\">school</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?.acacpm_alise_title }}\n </h6>\n <p class=\"tw-text-xs tw-text-gray-500 tw-truncate tw-m-0\">\n {{ row?.acacpm_class_program_id_sygms?.sygms_title }}\n </p>\n </div>\n </div>\n</ng-template>\n\n<ng-template #programClassStatusRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <span [ngClass]=\"{\n 'tw-bg-green-100 tw-text-green-800': row?.acacpm_isactive,\n 'tw-bg-red-100 tw-text-red-800': !row?.acacpm_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?.acacpm_isactive,\n 'tw-text-red-600': !row?.acacpm_isactive\n }\" class=\"tw-w-3 tw-h-3 tw-mr-2\">\n {{ row?.acacpm_isactive ? 'check_circle' : 'cancel' }}\n </cide-ele-icon>\n {{ row?.acacpm_isactive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #classProgramRendererTemplate 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?.acacpm_class_program_id_sygms?.sygms_title || 'N/A' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #academicYearRendererTemplate 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-green-600 tw-w-4 tw-h-4\">calendar_today</cide-ele-icon>\n <span class=\"tw-text-sm tw-text-gray-900 tw-truncate\">\n {{ row?.acacpm_academic_year_id_acayr?.acayr_name || 'N/A' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\" let-column=\"column\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(row)\"\n (itemClick)=\"onDropdownItemClick($event, row)\"\n size=\"sm\"\n variant=\"ghost\"\n icon=\"more_vert\">\n </cide-ele-dropdown>\n</ng-template>\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cloud-ide-academics-program-class-list.component-_P6B5SSA.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/program-class-management/components/program-class-list/program-class-list.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/program-class-management/components/program-class-list/program-class-list.component.html"],"sourcesContent":["import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideEleDataGridComponent, CideIconComponent, CideEleButtonComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, NotificationService, ConfirmationService } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { AppStateHelperService, CideLytSharedWrapperComponent, RightsService } from 'cloud-ide-layout';\nimport { \n type MClassProgramMaster,\n type MClassProgramMasterDeletePayload,\n type MClassProgramMasterToggleStatusPayload,\n generateStringFromObject\n} from 'cloud-ide-lms-model';\nimport { CideLytProgramClassService } from '../../services/program-class.service';\n\n// Interfaces based on the actual API response\ninterface ProgramClass {\n _id?: string;\n acacpm_alise_title?: string;\n acacpm_class_program_id_sygms?: {\n _id?: string;\n sygms_id_sygmt?: string;\n sygms_code?: string;\n sygms_title?: string;\n sygms_desc?: string;\n sygms_entity_id_syen?: string;\n sygms_isactive?: boolean;\n __v?: number;\n };\n acacpm_academic_year_id_acayr?: {\n _id?: string;\n acayr_code?: string;\n acayr_name?: string;\n acayr_description?: string;\n acayr_from_date?: string;\n acayr_to_date?: string;\n acayr_isactive?: boolean;\n acayr_iscurrent?: boolean;\n acayr_islocked?: boolean;\n __v?: number;\n };\n acacpm_entity_id_syen?: {\n _id?: string;\n syen_name?: string;\n syen_entity_type_gmst?: string;\n syen_entity_code?: string;\n syen_corporate_address?: string;\n syen_corporate_pin_sypin?: string;\n syen_corporate_city_sypin?: string;\n syen_corporate_state_sypin?: string;\n syen_corporate_contact_person_user?: any;\n syen_corporate_phone?: string;\n syen_corporate_phone_alt?: string;\n syen_corporate_fax?: string;\n syen_corporate_email?: string;\n syen_corporate_email_alt?: string;\n syen_website?: string;\n syen_currency_sycr?: string;\n syen_registered_address?: string;\n syen_registered_pin_sypin?: string;\n syen_registered_city_sypin?: string;\n syen_registered_state_sypin?: string;\n syen_registered_contact_person_user?: any;\n syen_registered_phone?: string;\n syen_registered_fax?: string;\n syen_registered_email?: string;\n syen_udise_no?: string;\n syen_affiliation_no?: string;\n syen_isactive?: boolean;\n __v?: number;\n };\n acacpm_isactive?: boolean;\n __v?: number;\n}\n\n@Component({\n selector: 'cide-academics-program-class-list',\n standalone: true,\n imports: [\n CommonModule,\n CideEleDataGridComponent,\n CideIconComponent,\n CideEleButtonComponent,\n CideEleDropdownComponent,\n CideLytSharedWrapperComponent\n ],\n templateUrl: './program-class-list.component.html',\n styles: [``]\n})\nexport class ProgramClassListComponent implements OnInit {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private router = inject(Router);\n private appState = inject(AppStateHelperService);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\n private programClassService = inject(CideLytProgramClassService);\n private rightsService = inject(RightsService);\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 // Modern ViewChild signals for template renderers (Angular 20 approach)\n programClassDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('programClassDetailsRendererTemplate');\n programClassStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('programClassStatusRendererTemplate');\n classProgramRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('classProgramRendererTemplate');\n academicYearRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('academicYearRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n\n // Computed template renderers for grid\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n programClassDetailsRenderer: this.programClassDetailsRendererTemplate(),\n programClassStatusRenderer: this.programClassStatusRendererTemplate(),\n classProgramRenderer: this.classProgramRendererTemplate(),\n academicYearRenderer: this.academicYearRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n programClasses = signal<ProgramClass[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Derived list filtered by searchTerm\n filteredProgramClasses = computed(() => {\n const q = (this.searchTerm() || '').toLowerCase().trim();\n const items = this.programClasses() || [];\n if (!q) return items;\n return items.filter(pc => {\n const title = (pc.acacpm_alise_title || '').toLowerCase();\n const classProgramTitle = (pc.acacpm_class_program_id_sygms?.sygms_title || '').toLowerCase();\n const academicYearName = (pc.acacpm_academic_year_id_acayr?.acayr_name || '').toLowerCase();\n const entityName = (pc.acacpm_entity_id_syen?.syen_name || '').toLowerCase();\n return title.includes(q) || classProgramTitle.includes(q) || academicYearName.includes(q) || entityName.includes(q);\n });\n });\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ProgramClass>>({\n id: 'program-class-list-grid',\n columns: [\n {\n key: 'details',\n header: 'Program Class Details',\n type: 'custom',\n width: '250px',\n truncate: true,\n align: 'left',\n renderer: 'programClassDetailsRenderer'\n },\n {\n key: 'acacpm_class_program_id_sygms',\n header: 'Class Program',\n type: 'custom',\n width: '250px',\n truncate: true,\n align: 'left',\n renderer: 'classProgramRenderer'\n },\n {\n key: 'acacpm_academic_year_id_acayr',\n header: 'Academic Year',\n type: 'custom',\n width: '220px',\n truncate: true,\n align: 'left',\n renderer: 'academicYearRenderer'\n },\n {\n key: 'acacpm_isactive',\n header: 'Status',\n type: 'custom',\n width: '140px',\n truncate: false,\n align: 'center',\n renderer: 'programClassStatusRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '150px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search program classes...',\n searchableColumns: ['acacpm_alise_title'],\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 });\n\n /**\n * Get action dropdown items\n */\n getActionDropdownItems(programClass: ProgramClass): 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 Program Class',\n icon: 'edit',\n iconColor: 'tw-text-blue-400',\n textColor: 'tw-text-blue-700'\n },\n {\n id: 'branch',\n label: 'Manage Branches',\n icon: 'account_tree',\n iconColor: 'tw-text-purple-400',\n textColor: 'tw-text-purple-700'\n },\n {\n id: 'toggleStatus',\n label: programClass?.acacpm_isactive ? 'Deactivate' : 'Activate',\n icon: programClass?.acacpm_isactive ? 'toggle_off' : 'toggle_on',\n iconColor: programClass?.acacpm_isactive ? 'tw-text-orange-400' : 'tw-text-green-400',\n textColor: programClass?.acacpm_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, programClass: ProgramClass): void {\n console.log('🔍 onDropdownItemClick called with:', { item, programClass });\n \n if (!item || !item.id) {\n console.error('Dropdown item is undefined:', item);\n return;\n }\n \n if (!programClass) {\n console.error('Program class is undefined:', programClass);\n this.notificationService.error('Unable to perform action: Invalid data');\n return;\n }\n\n switch (item.id) {\n case 'view':\n this.viewProgramClass(programClass);\n break;\n case 'edit':\n this.editProgramClass(programClass);\n break;\n case 'branch':\n this.manageBranches(programClass);\n break;\n case 'toggleStatus':\n this.toggleProgramClassStatus(programClass);\n break;\n case 'delete':\n this.deleteProgramClass(programClass);\n break;\n default:\n console.warn('Unknown dropdown action:', item.id);\n }\n }\n\n ngOnInit(): void {\n // Initialize rights for program class management\n this.rightsService.initializeRights('program_class');\n this.loadProgramClasses();\n }\n\n // Rights computed signals\n canCreate = computed(() => this.rightsService.hasRight('CREATE'));\n canEdit = computed(() => this.rightsService.hasRight('EDIT'));\n canDelete = computed(() => this.rightsService.hasRight('DELETE'));\n canView = computed(() => this.rightsService.hasRight('VIEW'));\n\n /**\n * Load program classes data\n */\n private loadProgramClasses(): void {\n this.loading.set(true);\n this.error.set(null);\n\n const payload: MClassProgramMaster = {\n pageIndex: 0,\n pageSize: 100,\n query: this.searchTerm() || \"\",\n sort: {\n key: 'acacpm_alise_title',\n order: 'asc'\n }\n };\n\n this.programClassService.getProgramClassList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n console.log('📚 Program classes loaded:', response.data);\n this.programClasses.set(response.data);\n this.updateGridData();\n this.notificationService.success(`Loaded ${response.data.length} program class(es) successfully.`);\n } else {\n console.warn('⚠️ No program class data received');\n this.programClasses.set([]);\n this.updateGridData();\n this.notificationService.warning('No program classes found.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error loading program classes:', error);\n this.error.set('Failed to load program classes');\n this.loading.set(false);\n this.notificationService.error('Failed to load program classes');\n }\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(): void {\n this.gridConfig.update(config => ({\n ...config,\n data: this.filteredProgramClasses()\n }));\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ProgramClass>): 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.loadProgramClasses();\n }\n break;\n case 'search':\n this.searchTerm.set(event.data as string);\n this.updateGridData();\n break;\n case 'refresh':\n this.loadProgramClasses();\n break;\n }\n }\n\n /**\n * Create new program class\n */\n createProgramClass(): void {\n if (!this.rightsService.hasRight('CREATE')) {\n this.notificationService.error('You do not have permission to create program classes');\n return;\n }\n this.router.navigate(['/control-panel/program-class-management/create']);\n }\n\n /**\n * View program class details\n */\n viewProgramClass(programClass: ProgramClass): void {\n if (!programClass || !programClass._id) {\n console.error('Program class or ID is undefined:', programClass);\n this.notificationService.error('Unable to view program class: Invalid data');\n return;\n }\n console.log('👁️ Viewing program class:', programClass);\n this.notificationService.info(`Opening program class \"${programClass.acacpm_alise_title}\" for viewing.`);\n const queryParams = generateStringFromObject({ acacpm_id: programClass._id });\n this.router.navigate(['/control-panel/program-class-management/view', queryParams]);\n }\n\n /**\n * Edit program class\n */\n editProgramClass(programClass: ProgramClass): void {\n if (!this.rightsService.hasRight('EDIT')) {\n this.notificationService.error('You do not have permission to edit program classes');\n return;\n }\n if (!programClass || !programClass._id) {\n console.error('Program class or ID is undefined:', programClass);\n this.notificationService.error('Unable to edit program class: Invalid data');\n return;\n }\n console.log('✏️ Editing program class:', programClass);\n this.notificationService.info(`Opening program class \"${programClass.acacpm_alise_title}\" for editing.`);\n const queryParams = generateStringFromObject({ acacpm_id: programClass._id });\n this.router.navigate(['/control-panel/program-class-management/edit', queryParams]);\n }\n\n /**\n * Manage branches for program class\n */\n manageBranches(programClass: ProgramClass): void {\n if (!programClass || !programClass._id) {\n console.error('Program class or ID is undefined:', programClass);\n this.notificationService.error('Unable to manage branches: Invalid data');\n return;\n }\n console.log('🌿 Managing branches for program class:', programClass);\n this.notificationService.info(`Opening branch management for \"${programClass.acacpm_alise_title}\".`);\n const queryParams = generateStringFromObject({ programId: programClass._id });\n this.router.navigate(['/control-panel/program_specialization', queryParams]);\n }\n\n /**\n * Delete program class\n */\n deleteProgramClass(programClass: ProgramClass): void {\n if (!programClass || !programClass._id) {\n console.error('Program class or ID is undefined:', programClass);\n this.notificationService.error('Unable to delete program class: Invalid data');\n return;\n }\n this.confirmationService.confirmDelete(programClass.acacpm_alise_title).then((confirmed: boolean) => {\n if (confirmed) {\n this.loading.set(true);\n const payload: MClassProgramMasterDeletePayload = {\n acacpm_id: programClass._id!\n };\n\n this.programClassService.deleteProgramClass(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.programClasses.update(classes => \n classes.filter(pc => pc._id !== programClass._id)\n );\n this.updateGridData();\n this.notificationService.success('Program class deleted successfully.');\n } else {\n this.notificationService.error('Failed to delete program class.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error deleting program class:', error);\n this.notificationService.error('Failed to delete program class.');\n this.loading.set(false);\n }\n });\n }\n });\n }\n\n /**\n * Toggle program class status\n */\n toggleProgramClassStatus(programClass: ProgramClass): void {\n if (!this.rightsService.hasRight('EDIT')) {\n this.notificationService.error('You do not have permission to change program class status');\n return;\n }\n if (!programClass || !programClass._id) {\n console.error('Program class or ID is undefined:', programClass);\n this.notificationService.error('Unable to toggle program class status: Invalid data');\n return;\n }\n this.loading.set(true);\n const payload: MClassProgramMasterToggleStatusPayload = {\n acacpm_id: programClass._id!\n };\n\n this.programClassService.toggleProgramClassStatus(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.programClasses.update(classes => \n classes.map(pc => \n pc._id === programClass._id \n ? { ...pc, acacpm_isactive: !pc.acacpm_isactive }\n : pc\n )\n );\n this.updateGridData();\n this.notificationService.success(`Program class ${programClass.acacpm_isactive ? 'deactivated' : 'activated'} successfully.`);\n } else {\n this.notificationService.error('Failed to toggle program class status.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error toggling program class status:', error);\n this.notificationService.error('Failed to toggle program class status.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Refresh data\n */\n refreshData(): void {\n this.loadProgramClasses();\n }\n}\n","<!-- Program Class Management Container -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'program_class' }\"\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)=\"createProgramClass()\">\n Create Program Class\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 <!-- 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 #programClassDetailsRendererTemplate 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-purple-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-text-purple-600 tw-w-5 tw-h-5\">school</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?.acacpm_alise_title }}\n </h6>\n <p class=\"tw-text-xs tw-text-gray-500 tw-truncate tw-m-0\">\n {{ row?.acacpm_class_program_id_sygms?.sygms_title }}\n </p>\n </div>\n </div>\n</ng-template>\n\n<ng-template #programClassStatusRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <span [ngClass]=\"{\n 'tw-bg-green-100 tw-text-green-800': row?.acacpm_isactive,\n 'tw-bg-red-100 tw-text-red-800': !row?.acacpm_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?.acacpm_isactive,\n 'tw-text-red-600': !row?.acacpm_isactive\n }\" class=\"tw-w-3 tw-h-3 tw-mr-2\">\n {{ row?.acacpm_isactive ? 'check_circle' : 'cancel' }}\n </cide-ele-icon>\n {{ row?.acacpm_isactive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #classProgramRendererTemplate 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?.acacpm_class_program_id_sygms?.sygms_title || 'N/A' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #academicYearRendererTemplate 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-green-600 tw-w-4 tw-h-4\">calendar_today</cide-ele-icon>\n <span class=\"tw-text-sm tw-text-gray-900 tw-truncate\">\n {{ row?.acacpm_academic_year_id_acayr?.acayr_name || 'N/A' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\" let-column=\"column\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(row)\"\n (itemClick)=\"onDropdownItemClick($event, row)\"\n size=\"sm\"\n variant=\"ghost\"\n icon=\"more_vert\">\n </cide-ele-dropdown>\n</ng-template>\n"],"names":[],"mappings":";;;;;;;;;;;MAyFa,yBAAyB,CAAA;;AAE5B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACxC,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,mBAAmB,GAAG,MAAM,CAAC,0BAA0B,CAAC;AACxD,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;;AAG7C,IAAA,cAAc,GAAG,MAAM,CAA+D,EAAE,0DAAC;;AAGzF,IAAA,mCAAmC,GAAG,SAAS,CAAC,QAAQ,CAA+B,qCAAqC,CAAC;AAC7H,IAAA,kCAAkC,GAAG,SAAS,CAAC,QAAQ,CAA+B,oCAAoC,CAAC;AAC3H,IAAA,4BAA4B,GAAG,SAAS,CAAC,QAAQ,CAA+B,8BAA8B,CAAC;AAC/G,IAAA,4BAA4B,GAAG,SAAS,CAAC,QAAQ,CAA+B,8BAA8B,CAAC;AAC/G,IAAA,+BAA+B,GAAG,SAAS,CAAC,QAAQ,CAA+B,iCAAiC,CAAC;;AAGrH,IAAA,iBAAiB,GAAG,QAAQ,CAAC,OAAqD;AAChF,QAAA,2BAA2B,EAAE,IAAI,CAAC,mCAAmC,EAAE;AACvE,QAAA,0BAA0B,EAAE,IAAI,CAAC,kCAAkC,EAAE;AACrE,QAAA,oBAAoB,EAAE,IAAI,CAAC,4BAA4B,EAAE;AACzD,QAAA,oBAAoB,EAAE,IAAI,CAAC,4BAA4B,EAAE;AACzD,QAAA,uBAAuB,EAAE,IAAI,CAAC,+BAA+B;AAC9D,KAAA,CAAC,6DAAC;;IAGH,IAAI,GAAG,IAAI;;AAGX,IAAA,cAAc,GAAG,MAAM,CAAiB,EAAE,0DAAC;AAC3C,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;AACnC,IAAA,aAAa,GAAG,MAAM,CAAW,EAAE,yDAAC;AACpC,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC;;AAGvB,IAAA,sBAAsB,GAAG,QAAQ,CAAC,MAAK;AACrC,QAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,IAAI,EAAE;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE;AACzC,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,KAAK;AACpB,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,EAAE,IAAG;AACvB,YAAA,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC,kBAAkB,IAAI,EAAE,EAAE,WAAW,EAAE;AACzD,YAAA,MAAM,iBAAiB,GAAG,CAAC,EAAE,CAAC,6BAA6B,EAAE,WAAW,IAAI,EAAE,EAAE,WAAW,EAAE;AAC7F,YAAA,MAAM,gBAAgB,GAAG,CAAC,EAAE,CAAC,6BAA6B,EAAE,UAAU,IAAI,EAAE,EAAE,WAAW,EAAE;AAC3F,YAAA,MAAM,UAAU,GAAG,CAAC,EAAE,CAAC,qBAAqB,EAAE,SAAS,IAAI,EAAE,EAAE,WAAW,EAAE;YAC5E,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrH,SAAC,CAAC;AACJ,KAAC,kEAAC;;IAGF,UAAU,GAAG,MAAM,CAAkC;AACnD,QAAA,EAAE,EAAE,yBAAyB;AAC7B,QAAA,OAAO,EAAE;AACP,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,uBAAuB;AAC/B,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,+BAA+B;AACpC,gBAAA,MAAM,EAAE,eAAe;AACvB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,+BAA+B;AACpC,gBAAA,MAAM,EAAE,eAAe;AACvB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,iBAAiB;AACtB,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX;AACF,SAAA;AACD,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClC,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE,2BAA2B;YACxC,iBAAiB,EAAE,CAAC,oBAAoB,CAAC;AACzC,YAAA,UAAU,EAAE;AACb,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,SAAS;AACrB,SAAA;AACD,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE;AACb,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEF;;AAEG;AACH,IAAA,sBAAsB,CAAC,YAA0B,EAAA;AAC/C,QAAA,MAAM,KAAK,GAAmB;AAC5B,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,SAAS,EAAE;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,oBAAoB;AAC3B,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,SAAS,EAAE;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,iBAAiB;AACxB,gBAAA,IAAI,EAAE,cAAc;AACpB,gBAAA,SAAS,EAAE,oBAAoB;AAC/B,gBAAA,SAAS,EAAE;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,cAAc;gBAClB,KAAK,EAAE,YAAY,EAAE,eAAe,GAAG,YAAY,GAAG,UAAU;gBAChE,IAAI,EAAE,YAAY,EAAE,eAAe,GAAG,YAAY,GAAG,WAAW;gBAChE,SAAS,EAAE,YAAY,EAAE,eAAe,GAAG,oBAAoB,GAAG,mBAAmB;gBACrF,SAAS,EAAE,YAAY,EAAE,eAAe,GAAG,oBAAoB,GAAG;AACnE,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,SAAS,EAAE,iBAAiB;AAC5B,gBAAA,SAAS,EAAE;AACZ;SACF;AAED,QAAA,OAAO,KAAK;;AAGd;;AAEG;IACH,mBAAmB,CAAC,IAAkB,EAAE,YAA0B,EAAA;QAChE,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;QAE1E,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;AACrB,YAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,IAAI,CAAC;YAClD;;QAGF,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,YAAY,CAAC;AAC1D,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,wCAAwC,CAAC;YACxE;;AAGF,QAAA,QAAQ,IAAI,CAAC,EAAE;AACb,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;gBACnC;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;gBACnC;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;gBACjC;AACF,YAAA,KAAK,cAAc;AACjB,gBAAA,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC;gBAC3C;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;gBACrC;AACF,YAAA;gBACE,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,EAAE,CAAC;;;IAIvD,QAAQ,GAAA;;AAEN,QAAA,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,eAAe,CAAC;QACpD,IAAI,CAAC,kBAAkB,EAAE;;;AAI3B,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,qDAAC;AACjE,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,mDAAC;AAC7D,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,qDAAC;AACjE,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,mDAAC;AAE7D;;AAEG;IACK,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAEpB,QAAA,MAAM,OAAO,GAAwB;AACnC,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE;AAC9B,YAAA,IAAI,EAAE;AACJ,gBAAA,GAAG,EAAE,oBAAoB;AACzB,gBAAA,KAAK,EAAE;AACR;SACF;AAED,QAAA,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,OAAO;AACjD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACjB,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACtC,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,QAAQ,CAAC,IAAI,CAAC;oBACxD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACtC,IAAI,CAAC,cAAc,EAAE;AACrB,oBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,OAAA,EAAU,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAA,gCAAA,CAAkC,CAAC;;qBAC7F;AACL,oBAAA,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC;AACjD,oBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC3B,IAAI,CAAC,cAAc,EAAE;AACrB,oBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,2BAA2B,CAAC;;AAE/D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC;AACxD,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC;AAChD,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,gCAAgC,CAAC;;AAEnE,SAAA,CAAC;;AAGN;;AAEG;IACK,cAAc,GAAA;QACpB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK;AAChC,YAAA,GAAG,MAAM;AACT,YAAA,IAAI,EAAE,IAAI,CAAC,sBAAsB;AAClC,SAAA,CAAC,CAAC;;AAGL;;AAEG;AACH,IAAA,WAAW,CAAC,KAA8B,EAAA;AACxC,QAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,YAAA,KAAK,YAAY;gBACf,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,WAAW,IAAI,KAAK,CAAC,IAAI,IAAI,UAAU,IAAI,KAAK,CAAC,IAAI,EAAE;oBACzG,IAAI,CAAC,kBAAkB,EAAE;;gBAE3B;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAc,CAAC;gBACzC,IAAI,CAAC,cAAc,EAAE;gBACrB;AACF,YAAA,KAAK,SAAS;gBACZ,IAAI,CAAC,kBAAkB,EAAE;gBACzB;;;AAIN;;AAEG;IACH,kBAAkB,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,sDAAsD,CAAC;YACtF;;QAEF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,gDAAgD,CAAC,CAAC;;AAG1E;;AAEG;AACH,IAAA,gBAAgB,CAAC,YAA0B,EAAA;QACzC,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE;AACtC,YAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,YAAY,CAAC;AAChE,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,4CAA4C,CAAC;YAC5E;;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,YAAY,CAAC;QACvD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA,uBAAA,EAA0B,YAAY,CAAC,kBAAkB,CAAA,cAAA,CAAgB,CAAC;AACxG,QAAA,MAAM,WAAW,GAAG,wBAAwB,CAAC,EAAE,SAAS,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC;QAC7E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,8CAA8C,EAAE,WAAW,CAAC,CAAC;;AAGrF;;AAEG;AACH,IAAA,gBAAgB,CAAC,YAA0B,EAAA;QACzC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACxC,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,oDAAoD,CAAC;YACpF;;QAEF,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE;AACtC,YAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,YAAY,CAAC;AAChE,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,4CAA4C,CAAC;YAC5E;;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,YAAY,CAAC;QACtD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA,uBAAA,EAA0B,YAAY,CAAC,kBAAkB,CAAA,cAAA,CAAgB,CAAC;AACxG,QAAA,MAAM,WAAW,GAAG,wBAAwB,CAAC,EAAE,SAAS,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC;QAC7E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,8CAA8C,EAAE,WAAW,CAAC,CAAC;;AAGrF;;AAEG;AACH,IAAA,cAAc,CAAC,YAA0B,EAAA;QACvC,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE;AACtC,YAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,YAAY,CAAC;AAChE,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,yCAAyC,CAAC;YACzE;;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,YAAY,CAAC;QACpE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA,+BAAA,EAAkC,YAAY,CAAC,kBAAkB,CAAA,EAAA,CAAI,CAAC;AACpG,QAAA,MAAM,WAAW,GAAG,wBAAwB,CAAC,EAAE,SAAS,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC;QAC7E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,uCAAuC,EAAE,WAAW,CAAC,CAAC;;AAG9E;;AAEG;AACH,IAAA,kBAAkB,CAAC,YAA0B,EAAA;QAC3C,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE;AACtC,YAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,YAAY,CAAC;AAChE,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,8CAA8C,CAAC;YAC9E;;AAEF,QAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAkB,KAAI;YAClG,IAAI,SAAS,EAAE;AACb,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,gBAAA,MAAM,OAAO,GAAqC;oBAChD,SAAS,EAAE,YAAY,CAAC;iBACzB;AAED,gBAAA,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,OAAO;AAChD,qBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,qBAAA,SAAS,CAAC;AACT,oBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,wBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;4BACrB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,IAChC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,YAAY,CAAC,GAAG,CAAC,CAClD;4BACD,IAAI,CAAC,cAAc,EAAE;AACrB,4BAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,qCAAqC,CAAC;;6BAClE;AACL,4BAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,iCAAiC,CAAC;;AAEnE,wBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;qBACxB;AACD,oBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,wBAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC;AACvD,wBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,iCAAiC,CAAC;AACjE,wBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,iBAAA,CAAC;;AAER,SAAC,CAAC;;AAGJ;;AAEG;AACH,IAAA,wBAAwB,CAAC,YAA0B,EAAA;QACjD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACxC,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,2DAA2D,CAAC;YAC3F;;QAEF,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE;AACtC,YAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,YAAY,CAAC;AAChE,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,qDAAqD,CAAC;YACrF;;AAEF,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,MAAM,OAAO,GAA2C;YACtD,SAAS,EAAE,YAAY,CAAC;SACzB;AAED,QAAA,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,OAAO;AACtD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;oBACrB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,IAChC,OAAO,CAAC,GAAG,CAAC,EAAE,IACZ,EAAE,CAAC,GAAG,KAAK,YAAY,CAAC;0BACpB,EAAE,GAAG,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,eAAe;AAC/C,0BAAE,EAAE,CACP,CACF;oBACD,IAAI,CAAC,cAAc,EAAE;AACrB,oBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,cAAA,EAAiB,YAAY,CAAC,eAAe,GAAG,aAAa,GAAG,WAAW,CAAA,cAAA,CAAgB,CAAC;;qBACxH;AACL,oBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,wCAAwC,CAAC;;AAE1E,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC;AAC9D,gBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,wCAAwC,CAAC;AACxE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;IACH,WAAW,GAAA;QACT,IAAI,CAAC,kBAAkB,EAAE;;uGAzchB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,qCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,qCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,oCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,oCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,8BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,8BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzFtC,8mHAwFA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDTI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,wBAAwB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,sBAAsB,EAAA,QAAA,EAAA,0DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,wBAAwB,wKACxB,6BAA6B,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,4BAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKpB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAdrC,SAAS;+BACE,mCAAmC,EAAA,UAAA,EACjC,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,wBAAwB;wBACxB,iBAAiB;wBACjB,sBAAsB;wBACtB,wBAAwB;wBACxB;AACD,qBAAA,EAAA,QAAA,EAAA,8mHAAA,EAAA;;;;;"}
|
|
@@ -184,7 +184,7 @@ class StudentListComponent {
|
|
|
184
184
|
this.notificationService.error('You do not have permission to create students');
|
|
185
185
|
return;
|
|
186
186
|
}
|
|
187
|
-
this.router.navigate(['/control-panel/
|
|
187
|
+
this.router.navigate(['/control-panel/student/create']);
|
|
188
188
|
}
|
|
189
189
|
viewStudent(student) {
|
|
190
190
|
if (!this.rightsService.hasRight('VIEW')) {
|
|
@@ -192,7 +192,7 @@ class StudentListComponent {
|
|
|
192
192
|
return;
|
|
193
193
|
}
|
|
194
194
|
const query = generateStringFromObject({ user_id: student._id });
|
|
195
|
-
this.router.navigate(['/control-panel/
|
|
195
|
+
this.router.navigate(['/control-panel/student/view', query]);
|
|
196
196
|
}
|
|
197
197
|
editStudent(student) {
|
|
198
198
|
if (!this.rightsService.hasRight('EDIT')) {
|
|
@@ -200,7 +200,7 @@ class StudentListComponent {
|
|
|
200
200
|
return;
|
|
201
201
|
}
|
|
202
202
|
const query = generateStringFromObject({ user_id: student._id });
|
|
203
|
-
this.router.navigate(['/control-panel/
|
|
203
|
+
this.router.navigate(['/control-panel/student/edit', query]);
|
|
204
204
|
}
|
|
205
205
|
deleteStudent(student) {
|
|
206
206
|
this.confirmationService.confirmDelete(student.user_fullname || 'Unknown')
|
|
@@ -442,4 +442,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
442
442
|
}] });
|
|
443
443
|
|
|
444
444
|
export { StudentListComponent };
|
|
445
|
-
//# sourceMappingURL=cloud-ide-academics-student-list.component-
|
|
445
|
+
//# sourceMappingURL=cloud-ide-academics-student-list.component-Ctctm6yt.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-ide-academics-student-list.component-Bjwr-QFa.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/student-management/components/student-list/student-list.component.ts"],"sourcesContent":["import { Component, OnInit, OnDestroy, inject, signal, computed, viewChild, TemplateRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DestroyRef } from '@angular/core';\nimport {\n CideIconComponent,\n CideEleDropdownComponent,\n CideEleButtonComponent,\n CideEleDataGridComponent,\n CideSelectComponent,\n TemplateContext,\n DropdownItem,\n NotificationService,\n GridEvent,\n ConfirmationService\n} from 'cloud-ide-element';\nimport { CideLytSharedWrapperComponent, ComponentContextService, RightsService } from 'cloud-ide-layout';\nimport { USER_SERVICE_TOKEN, IUserMasterService } from 'cloud-ide-shared';\nimport {\n AuthUserMst,\n AuthUserMstListPayload,\n authUserMstListControllerResponse,\n generateStringFromObject,\n CoreUserTypeMapping\n} from 'cloud-ide-lms-model';\n\ninterface Student extends AuthUserMst, Record<string, unknown> {\n user_type_mapping?: CoreUserTypeMapping;\n student_id?: string;\n admission_data?: any;\n}\n\n@Component({\n selector: 'cide-academics-student-list',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n CideIconComponent,\n CideEleDropdownComponent,\n CideEleButtonComponent,\n CideEleDataGridComponent,\n CideLytSharedWrapperComponent\n ],\n template: `\n <cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"shared_wrapper_setup_param\">\n <div class=\"tw-w-full tw-h-full tw-flex tw-flex-col tw-overflow-hidden\">\n <!-- Header Section -->\n <div class=\"tw-flex-shrink-0 tw-w-full tw-px-4 sm:tw-px-6 tw-py-3 tw-bg-gray-50 tw-border-b tw-border-gray-200\">\n <div class=\"tw-flex tw-items-center tw-justify-between\">\n <div class=\"tw-flex tw-items-center tw-gap-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">school</cide-ele-icon>\n <div>\n <h5 class=\"tw-text-sm tw-font-semibold tw-text-gray-900\">Student Management</h5>\n <p class=\"tw-text-xs tw-text-gray-600\">Manage and view all student profiles</p>\n </div>\n </div>\n <button cideEleButton variant=\"primary\" size=\"sm\" (click)=\"createNewStudent()\" leftIcon=\"add\">\n Add Student\n </button>\n </div>\n </div>\n\n <!-- Data Grid Section -->\n <div class=\"tw-flex-1 tw-h-auto tw-w-full tw-min-h-0 tw-relative tw-z-0 tw-overflow-hidden\">\n <cide-ele-data-grid\n [config]=\"gridConfig()\"\n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n </div>\n\n <!-- Student Details Template -->\n <ng-template #studentDetailsRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-start tw-space-x-3 tw-py-3\">\n <div class=\"tw-flex-shrink-0 tw-mt-0.5\">\n <div class=\"tw-w-10 tw-h-10 tw-bg-blue-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">person</cide-ele-icon>\n </div>\n </div>\n <div class=\"tw-min-w-0 tw-flex-1 tw-space-y-1\">\n <div class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-leading-5\">\n {{ row?.user_fullname || getFullName(row) }}\n </div>\n @if (row?.user_type_mapping?.syutm_type_specific_id) {\n <div class=\"tw-text-xs tw-text-gray-600 tw-leading-4 tw-font-mono\">\n <span class=\"tw-font-medium\">Student ID:</span> {{ row.user_type_mapping.syutm_type_specific_id }}\n </div>\n }\n @if (row?.user_username) {\n <div class=\"tw-text-xs tw-text-gray-500 tw-leading-4\">\n Username: {{ row.user_username }}\n </div>\n }\n </div>\n </div>\n </ng-template>\n\n <!-- Contact Info Template -->\n <ng-template #contactInfoRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-py-3 tw-space-y-1\">\n @if (row?.user_emailid) {\n <div class=\"tw-text-xs tw-text-gray-900 tw-flex tw-items-center\">\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\">email</cide-ele-icon>\n <span class=\"tw-truncate\">{{ row.user_emailid }}</span>\n </div>\n }\n @if (row?.user_mobileno) {\n <div class=\"tw-text-xs tw-text-gray-600 tw-flex tw-items-center\">\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\">phone</cide-ele-icon>\n <span class=\"tw-truncate\">{{ row.user_mobileno }}</span>\n </div>\n }\n </div>\n </ng-template>\n\n <!-- Status Template -->\n <ng-template #statusRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-justify-center tw-py-3\">\n @if (row?.user_isactive) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\n Active\n </span>\n } @else {\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-red-100 tw-text-red-800\">\n Inactive\n </span>\n }\n </div>\n </ng-template>\n\n <!-- Actions Template -->\n <ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\" let-column=\"column\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(row)\"\n (itemClick)=\"onDropdownItemClick($event, row)\"\n size=\"sm\"\n variant=\"ghost\"\n icon=\"more_vert\">\n </cide-ele-dropdown>\n </ng-template>\n </cide-lyt-shared-wrapper>\n `,\n styles: [`\n :host {\n @apply tw-w-full tw-h-full tw-flex tw-flex-col;\n }\n `]\n})\nexport class StudentListComponent implements OnInit, OnDestroy {\n shared_wrapper_setup_param = { sypg_page_code: \"academics_student_list\" };\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly userMasterService = inject(USER_SERVICE_TOKEN) as IUserMasterService;\n private readonly router = inject(Router);\n private readonly route = inject(ActivatedRoute);\n private readonly notificationService = inject(NotificationService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly componentContextService = inject(ComponentContextService);\n private readonly rightsService = inject(RightsService);\n\n // ViewChild for templates\n studentDetailsRendererTemplate = viewChild<TemplateRef<TemplateContext>>('studentDetailsRendererTemplate');\n contactInfoRendererTemplate = viewChild<TemplateRef<TemplateContext>>('contactInfoRendererTemplate');\n statusRendererTemplate = viewChild<TemplateRef<TemplateContext>>('statusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n\n // State\n students = signal<Student[]>([]);\n loading = signal<boolean>(false);\n pageIndex = signal<number>(1);\n pageSize = signal<number>(10);\n total = signal<number>(0);\n searchQuery = signal<string>('');\n\n // Grid configuration\n gridConfig = computed(() => ({\n id: 'students-grid',\n responsive: true,\n data: this.students(),\n columns: [\n {\n key: 'student_details',\n header: 'Student Details',\n type: 'custom' as any,\n width: '300px',\n sortable: true,\n renderer: 'studentDetailsRendererTemplate'\n },\n {\n key: 'contact_info',\n header: 'Contact Information',\n type: 'custom' as any,\n width: '250px',\n sortable: false,\n renderer: 'contactInfoRendererTemplate'\n },\n {\n key: 'user_isactive',\n header: 'Status',\n type: 'custom' as any,\n width: '120px',\n sortable: true,\n renderer: 'statusRendererTemplate'\n },\n {\n key: 'actions',\n header: 'Actions',\n type: 'actions' as any,\n width: '100px',\n sortable: false,\n renderer: 'actionsDropdownRendererTemplate'\n }\n ],\n pagination: {\n enabled: true,\n pageSize: this.pageSize(),\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search students by name, ID, email...',\n searchableColumns: ['user_fullname', 'user_username', 'user_emailid'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n rowHeight: 70\n }));\n\n templateRenderers = computed(() => ({\n studentDetailsRendererTemplate: this.studentDetailsRendererTemplate(),\n contactInfoRendererTemplate: this.contactInfoRendererTemplate(),\n statusRendererTemplate: this.statusRendererTemplate(),\n actionsDropdownRendererTemplate: this.actionsDropdownRendererTemplate()\n }));\n\n // Rights computed signals\n canCreate = computed(() => this.rightsService.hasRight('CREATE'));\n canEdit = computed(() => this.rightsService.hasRight('EDIT'));\n canDelete = computed(() => this.rightsService.hasRight('DELETE'));\n canView = computed(() => this.rightsService.hasRight('VIEW'));\n\n ngOnInit(): void {\n // Initialize rights for student management\n this.rightsService.initializeRights('academics_student_list');\n this.loadStudents();\n }\n\n ngOnDestroy(): void {\n // Cleanup handled by takeUntilDestroyed\n }\n\n loadStudents(): void {\n this.loading.set(true);\n const payload: AuthUserMstListPayload = {\n pageIndex: this.pageIndex(),\n pageSize: this.pageSize(),\n query: this.searchQuery() || undefined,\n pagination: true\n };\n\n this.userMasterService.getUserList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: authUserMstListControllerResponse) => {\n if (response.success && response.data) {\n // Filter for students only based on user_type_mapping\n const students = (response.data as Student[]).filter(user => \n user.user_type_mapping?.syutm_user_type === 'STUDENT'\n );\n this.students.set(students);\n this.total.set(students.length);\n } else {\n this.students.set([]);\n this.total.set(0);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error loading students:', error);\n this.notificationService.error('Failed to load students. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n onGridEvent(event: GridEvent): void {\n if (event.type === 'pageChange') {\n if (event.data && typeof event.data === 'object' && 'pageIndex' in event.data) {\n this.pageIndex.set(event.data['pageIndex'] as number);\n this.loadStudents();\n }\n } else if (event.type === 'search') {\n if (event.data && typeof event.data === 'object' && 'query' in event.data) {\n this.searchQuery.set(event.data['query'] as string);\n this.pageIndex.set(1);\n this.loadStudents();\n }\n } else if (event.type === 'refresh') {\n this.loadStudents();\n }\n }\n\n getActionDropdownItems(row: Student): DropdownItem[] {\n return [\n { id: 'view', label: 'View Profile', icon: 'visibility' },\n { id: 'edit', label: 'Edit', icon: 'edit' },\n { id: 'delete', label: 'Delete', icon: 'delete' }\n ];\n }\n\n onDropdownItemClick(item: DropdownItem, row: Student): void {\n switch (item.id) {\n case 'view':\n this.viewStudent(row);\n break;\n case 'edit':\n this.editStudent(row);\n break;\n case 'delete':\n this.deleteStudent(row);\n break;\n }\n }\n\n createNewStudent(): void {\n if (!this.rightsService.hasRight('CREATE')) {\n this.notificationService.error('You do not have permission to create students');\n return;\n }\n this.router.navigate(['/control-panel/academics/student/create']);\n }\n\n viewStudent(student: Student): void {\n if (!this.rightsService.hasRight('VIEW')) {\n this.notificationService.error('You do not have permission to view students');\n return;\n }\n const query = generateStringFromObject({ user_id: student._id });\n this.router.navigate(['/control-panel/academics/student/view', query]);\n }\n\n editStudent(student: Student): void {\n if (!this.rightsService.hasRight('EDIT')) {\n this.notificationService.error('You do not have permission to edit students');\n return;\n }\n const query = generateStringFromObject({ user_id: student._id });\n this.router.navigate(['/control-panel/academics/student/edit', query]);\n }\n\n deleteStudent(student: Student): void {\n this.confirmationService.confirmDelete(student.user_fullname || 'Unknown')\n .then((confirmed) => {\n if (confirmed && student._id) {\n this.userMasterService.deleteUserMaster(student._id)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: () => {\n this.notificationService.success('Student deleted successfully');\n this.loadStudents();\n },\n error: () => {\n this.notificationService.error('Failed to delete student');\n }\n });\n }\n })\n .catch(() => {\n // User cancelled - no action needed\n });\n }\n\n getFullName(user: any): string {\n const parts = [user.user_firstname, user.user_middlename, user.user_lastname].filter(Boolean);\n return parts.length > 0 ? parts.join(' ') : 'Unknown';\n }\n}\n\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cloud-ide-academics-student-list.component-Ctctm6yt.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/student-management/components/student-list/student-list.component.ts"],"sourcesContent":["import { Component, OnInit, OnDestroy, inject, signal, computed, viewChild, TemplateRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DestroyRef } from '@angular/core';\nimport {\n CideIconComponent,\n CideEleDropdownComponent,\n CideEleButtonComponent,\n CideEleDataGridComponent,\n CideSelectComponent,\n TemplateContext,\n DropdownItem,\n NotificationService,\n GridEvent,\n ConfirmationService\n} from 'cloud-ide-element';\nimport { CideLytSharedWrapperComponent, ComponentContextService, RightsService } from 'cloud-ide-layout';\nimport { USER_SERVICE_TOKEN, IUserMasterService } from 'cloud-ide-shared';\nimport {\n AuthUserMst,\n AuthUserMstListPayload,\n authUserMstListControllerResponse,\n generateStringFromObject,\n CoreUserTypeMapping\n} from 'cloud-ide-lms-model';\n\ninterface Student extends AuthUserMst, Record<string, unknown> {\n user_type_mapping?: CoreUserTypeMapping;\n student_id?: string;\n admission_data?: any;\n}\n\n@Component({\n selector: 'cide-academics-student-list',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n CideIconComponent,\n CideEleDropdownComponent,\n CideEleButtonComponent,\n CideEleDataGridComponent,\n CideLytSharedWrapperComponent\n ],\n template: `\n <cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"shared_wrapper_setup_param\">\n <div class=\"tw-w-full tw-h-full tw-flex tw-flex-col tw-overflow-hidden\">\n <!-- Header Section -->\n <div class=\"tw-flex-shrink-0 tw-w-full tw-px-4 sm:tw-px-6 tw-py-3 tw-bg-gray-50 tw-border-b tw-border-gray-200\">\n <div class=\"tw-flex tw-items-center tw-justify-between\">\n <div class=\"tw-flex tw-items-center tw-gap-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">school</cide-ele-icon>\n <div>\n <h5 class=\"tw-text-sm tw-font-semibold tw-text-gray-900\">Student Management</h5>\n <p class=\"tw-text-xs tw-text-gray-600\">Manage and view all student profiles</p>\n </div>\n </div>\n <button cideEleButton variant=\"primary\" size=\"sm\" (click)=\"createNewStudent()\" leftIcon=\"add\">\n Add Student\n </button>\n </div>\n </div>\n\n <!-- Data Grid Section -->\n <div class=\"tw-flex-1 tw-h-auto tw-w-full tw-min-h-0 tw-relative tw-z-0 tw-overflow-hidden\">\n <cide-ele-data-grid\n [config]=\"gridConfig()\"\n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n </div>\n\n <!-- Student Details Template -->\n <ng-template #studentDetailsRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-start tw-space-x-3 tw-py-3\">\n <div class=\"tw-flex-shrink-0 tw-mt-0.5\">\n <div class=\"tw-w-10 tw-h-10 tw-bg-blue-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">person</cide-ele-icon>\n </div>\n </div>\n <div class=\"tw-min-w-0 tw-flex-1 tw-space-y-1\">\n <div class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-leading-5\">\n {{ row?.user_fullname || getFullName(row) }}\n </div>\n @if (row?.user_type_mapping?.syutm_type_specific_id) {\n <div class=\"tw-text-xs tw-text-gray-600 tw-leading-4 tw-font-mono\">\n <span class=\"tw-font-medium\">Student ID:</span> {{ row.user_type_mapping.syutm_type_specific_id }}\n </div>\n }\n @if (row?.user_username) {\n <div class=\"tw-text-xs tw-text-gray-500 tw-leading-4\">\n Username: {{ row.user_username }}\n </div>\n }\n </div>\n </div>\n </ng-template>\n\n <!-- Contact Info Template -->\n <ng-template #contactInfoRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-py-3 tw-space-y-1\">\n @if (row?.user_emailid) {\n <div class=\"tw-text-xs tw-text-gray-900 tw-flex tw-items-center\">\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\">email</cide-ele-icon>\n <span class=\"tw-truncate\">{{ row.user_emailid }}</span>\n </div>\n }\n @if (row?.user_mobileno) {\n <div class=\"tw-text-xs tw-text-gray-600 tw-flex tw-items-center\">\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\">phone</cide-ele-icon>\n <span class=\"tw-truncate\">{{ row.user_mobileno }}</span>\n </div>\n }\n </div>\n </ng-template>\n\n <!-- Status Template -->\n <ng-template #statusRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-justify-center tw-py-3\">\n @if (row?.user_isactive) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\n Active\n </span>\n } @else {\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-red-100 tw-text-red-800\">\n Inactive\n </span>\n }\n </div>\n </ng-template>\n\n <!-- Actions Template -->\n <ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\" let-column=\"column\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(row)\"\n (itemClick)=\"onDropdownItemClick($event, row)\"\n size=\"sm\"\n variant=\"ghost\"\n icon=\"more_vert\">\n </cide-ele-dropdown>\n </ng-template>\n </cide-lyt-shared-wrapper>\n `,\n styles: [`\n :host {\n @apply tw-w-full tw-h-full tw-flex tw-flex-col;\n }\n `]\n})\nexport class StudentListComponent implements OnInit, OnDestroy {\n shared_wrapper_setup_param = { sypg_page_code: \"academics_student_list\" };\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly userMasterService = inject(USER_SERVICE_TOKEN) as IUserMasterService;\n private readonly router = inject(Router);\n private readonly route = inject(ActivatedRoute);\n private readonly notificationService = inject(NotificationService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly componentContextService = inject(ComponentContextService);\n private readonly rightsService = inject(RightsService);\n\n // ViewChild for templates\n studentDetailsRendererTemplate = viewChild<TemplateRef<TemplateContext>>('studentDetailsRendererTemplate');\n contactInfoRendererTemplate = viewChild<TemplateRef<TemplateContext>>('contactInfoRendererTemplate');\n statusRendererTemplate = viewChild<TemplateRef<TemplateContext>>('statusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n\n // State\n students = signal<Student[]>([]);\n loading = signal<boolean>(false);\n pageIndex = signal<number>(1);\n pageSize = signal<number>(10);\n total = signal<number>(0);\n searchQuery = signal<string>('');\n\n // Grid configuration\n gridConfig = computed(() => ({\n id: 'students-grid',\n responsive: true,\n data: this.students(),\n columns: [\n {\n key: 'student_details',\n header: 'Student Details',\n type: 'custom' as any,\n width: '300px',\n sortable: true,\n renderer: 'studentDetailsRendererTemplate'\n },\n {\n key: 'contact_info',\n header: 'Contact Information',\n type: 'custom' as any,\n width: '250px',\n sortable: false,\n renderer: 'contactInfoRendererTemplate'\n },\n {\n key: 'user_isactive',\n header: 'Status',\n type: 'custom' as any,\n width: '120px',\n sortable: true,\n renderer: 'statusRendererTemplate'\n },\n {\n key: 'actions',\n header: 'Actions',\n type: 'actions' as any,\n width: '100px',\n sortable: false,\n renderer: 'actionsDropdownRendererTemplate'\n }\n ],\n pagination: {\n enabled: true,\n pageSize: this.pageSize(),\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search students by name, ID, email...',\n searchableColumns: ['user_fullname', 'user_username', 'user_emailid'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n rowHeight: 70\n }));\n\n templateRenderers = computed(() => ({\n studentDetailsRendererTemplate: this.studentDetailsRendererTemplate(),\n contactInfoRendererTemplate: this.contactInfoRendererTemplate(),\n statusRendererTemplate: this.statusRendererTemplate(),\n actionsDropdownRendererTemplate: this.actionsDropdownRendererTemplate()\n }));\n\n // Rights computed signals\n canCreate = computed(() => this.rightsService.hasRight('CREATE'));\n canEdit = computed(() => this.rightsService.hasRight('EDIT'));\n canDelete = computed(() => this.rightsService.hasRight('DELETE'));\n canView = computed(() => this.rightsService.hasRight('VIEW'));\n\n ngOnInit(): void {\n // Initialize rights for student management\n this.rightsService.initializeRights('academics_student_list');\n this.loadStudents();\n }\n\n ngOnDestroy(): void {\n // Cleanup handled by takeUntilDestroyed\n }\n\n loadStudents(): void {\n this.loading.set(true);\n const payload: AuthUserMstListPayload = {\n pageIndex: this.pageIndex(),\n pageSize: this.pageSize(),\n query: this.searchQuery() || undefined,\n pagination: true\n };\n\n this.userMasterService.getUserList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: authUserMstListControllerResponse) => {\n if (response.success && response.data) {\n // Filter for students only based on user_type_mapping\n const students = (response.data as Student[]).filter(user => \n user.user_type_mapping?.syutm_user_type === 'STUDENT'\n );\n this.students.set(students);\n this.total.set(students.length);\n } else {\n this.students.set([]);\n this.total.set(0);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error loading students:', error);\n this.notificationService.error('Failed to load students. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n onGridEvent(event: GridEvent): void {\n if (event.type === 'pageChange') {\n if (event.data && typeof event.data === 'object' && 'pageIndex' in event.data) {\n this.pageIndex.set(event.data['pageIndex'] as number);\n this.loadStudents();\n }\n } else if (event.type === 'search') {\n if (event.data && typeof event.data === 'object' && 'query' in event.data) {\n this.searchQuery.set(event.data['query'] as string);\n this.pageIndex.set(1);\n this.loadStudents();\n }\n } else if (event.type === 'refresh') {\n this.loadStudents();\n }\n }\n\n getActionDropdownItems(row: Student): DropdownItem[] {\n return [\n { id: 'view', label: 'View Profile', icon: 'visibility' },\n { id: 'edit', label: 'Edit', icon: 'edit' },\n { id: 'delete', label: 'Delete', icon: 'delete' }\n ];\n }\n\n onDropdownItemClick(item: DropdownItem, row: Student): void {\n switch (item.id) {\n case 'view':\n this.viewStudent(row);\n break;\n case 'edit':\n this.editStudent(row);\n break;\n case 'delete':\n this.deleteStudent(row);\n break;\n }\n }\n\n createNewStudent(): void {\n if (!this.rightsService.hasRight('CREATE')) {\n this.notificationService.error('You do not have permission to create students');\n return;\n }\n this.router.navigate(['/control-panel/student/create']);\n }\n\n viewStudent(student: Student): void {\n if (!this.rightsService.hasRight('VIEW')) {\n this.notificationService.error('You do not have permission to view students');\n return;\n }\n const query = generateStringFromObject({ user_id: student._id });\n this.router.navigate(['/control-panel/student/view', query]);\n }\n\n editStudent(student: Student): void {\n if (!this.rightsService.hasRight('EDIT')) {\n this.notificationService.error('You do not have permission to edit students');\n return;\n }\n const query = generateStringFromObject({ user_id: student._id });\n this.router.navigate(['/control-panel/student/edit', query]);\n }\n\n deleteStudent(student: Student): void {\n this.confirmationService.confirmDelete(student.user_fullname || 'Unknown')\n .then((confirmed) => {\n if (confirmed && student._id) {\n this.userMasterService.deleteUserMaster(student._id)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: () => {\n this.notificationService.success('Student deleted successfully');\n this.loadStudents();\n },\n error: () => {\n this.notificationService.error('Failed to delete student');\n }\n });\n }\n })\n .catch(() => {\n // User cancelled - no action needed\n });\n }\n\n getFullName(user: any): string {\n const parts = [user.user_firstname, user.user_middlename, user.user_lastname].filter(Boolean);\n return parts.length > 0 ? parts.join(' ') : 'Unknown';\n }\n}\n\n"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { A as AcademicYearCreateComponent, e as AcademicYearListComponent, f as CideLytAcademicYearMappingService, a as CideLytAcademicYearService, h as CideLytClassProgramBranchFormComponent, g as CideLytClassProgramBranchListComponent, b as CideLytClassProgramBranchService, k as CideLytProgramSectionSelectorComponent, j as CideLytProgramTermSectionService, P as ProgramTermSectionCreateComponent, i as ProgramTermSectionListComponent, d as academicsRoutes } from './cloud-ide-academics-cloud-ide-academics-
|
|
1
|
+
export { A as AcademicYearCreateComponent, e as AcademicYearListComponent, f as CideLytAcademicYearMappingService, a as CideLytAcademicYearService, h as CideLytClassProgramBranchFormComponent, g as CideLytClassProgramBranchListComponent, b as CideLytClassProgramBranchService, k as CideLytProgramSectionSelectorComponent, j as CideLytProgramTermSectionService, P as ProgramTermSectionCreateComponent, i as ProgramTermSectionListComponent, d as academicsRoutes } from './cloud-ide-academics-cloud-ide-academics-lJe7ng0S.mjs';
|
|
2
2
|
//# sourceMappingURL=cloud-ide-academics.mjs.map
|