cloud-ide-academics 0.0.74 → 0.0.76
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-request-form.component-DbJr3c-R.mjs → cloud-ide-academics-bonafide-request-form.component-C9S2Inno.mjs} +2 -2
- package/fesm2022/{cloud-ide-academics-bonafide-request-form.component-DbJr3c-R.mjs.map → cloud-ide-academics-bonafide-request-form.component-C9S2Inno.mjs.map} +1 -1
- package/fesm2022/cloud-ide-academics-bonafide-request-list.component-C4hyqxLP.mjs.map +1 -1
- package/fesm2022/{cloud-ide-academics-class-program-term-create.component-BNLzd4oP.mjs → cloud-ide-academics-class-program-term-create.component-DoGJXB-s.mjs} +2 -2
- package/fesm2022/{cloud-ide-academics-class-program-term-create.component-BNLzd4oP.mjs.map → cloud-ide-academics-class-program-term-create.component-DoGJXB-s.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-academics-class-program-term-list.component-DWWEvtIQ.mjs → cloud-ide-academics-class-program-term-list.component-CWcxd5L4.mjs} +2 -2
- package/fesm2022/{cloud-ide-academics-class-program-term-list.component-DWWEvtIQ.mjs.map → cloud-ide-academics-class-program-term-list.component-CWcxd5L4.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-academics-cloud-ide-academics-Ped9Y5wn.mjs → cloud-ide-academics-cloud-ide-academics-Cdj8wvGj.mjs} +28 -13
- package/fesm2022/{cloud-ide-academics-cloud-ide-academics-Ped9Y5wn.mjs.map → cloud-ide-academics-cloud-ide-academics-Cdj8wvGj.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-academics-program-class-create.component-CHv99GEC.mjs → cloud-ide-academics-program-class-create.component-CJGcv3Oc.mjs} +2 -2
- package/fesm2022/{cloud-ide-academics-program-class-create.component-CHv99GEC.mjs.map → cloud-ide-academics-program-class-create.component-CJGcv3Oc.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-academics-program-class-list.component-GF7Vy84r.mjs → cloud-ide-academics-program-class-list.component-DpaJiqLN.mjs} +2 -2
- package/fesm2022/{cloud-ide-academics-program-class-list.component-GF7Vy84r.mjs.map → cloud-ide-academics-program-class-list.component-DpaJiqLN.mjs.map} +1 -1
- package/fesm2022/cloud-ide-academics.mjs +1 -1
- package/package.json +1 -1
|
@@ -9,7 +9,7 @@ import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
|
9
9
|
import { NotificationService, CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideFormFieldErrorComponent, CideSelectComponent } from 'cloud-ide-element';
|
|
10
10
|
import { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';
|
|
11
11
|
import { C as CideAcademicsBonafideService } from './cloud-ide-academics-bonafide.service-BSelbA0D.mjs';
|
|
12
|
-
import { e as CideLytProgramSectionSelectorComponent } from './cloud-ide-academics-cloud-ide-academics-
|
|
12
|
+
import { e as CideLytProgramSectionSelectorComponent } from './cloud-ide-academics-cloud-ide-academics-Cdj8wvGj.mjs';
|
|
13
13
|
import { CideCoreUserMasterService } from 'cloud-ide-core';
|
|
14
14
|
import { AuthUserMstListPayload } from 'cloud-ide-lms-model';
|
|
15
15
|
|
|
@@ -325,4 +325,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
325
325
|
}] });
|
|
326
326
|
|
|
327
327
|
export { CideAcademicsBonafideRequestFormComponent };
|
|
328
|
-
//# sourceMappingURL=cloud-ide-academics-bonafide-request-form.component-
|
|
328
|
+
//# sourceMappingURL=cloud-ide-academics-bonafide-request-form.component-C9S2Inno.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-ide-academics-bonafide-request-form.component-DbJr3c-R.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/bonafide/components/bonafide-request-form/bonafide-request-form.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/bonafide/components/bonafide-request-form/bonafide-request-form.component.html"],"sourcesContent":["import { Component, signal, DestroyRef, inject, OnInit, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { HttpClient } from '@angular/common/http';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideFormFieldErrorComponent, CideSelectComponent } from 'cloud-ide-element';\nimport { NotificationService } from 'cloud-ide-element';\nimport { CideLytSharedWrapperComponent, AppStateHelperService } from 'cloud-ide-layout';\nimport { CideAcademicsBonafideService } from '../../services/bonafide.service';\nimport { cidePath, coreRoutesUrl, hostManagerRoutesUrl, generateStringFromObject, admissionRoutesUrl, MAdmissionApplicationMain } from 'cloud-ide-lms-model';\nimport { CideLytProgramSectionSelectorComponent } from '../../../../../public-api';\nimport { startWith } from 'rxjs/operators';\nimport { CideCoreUserMasterService } from 'cloud-ide-core';\nimport { AuthUserMstListPayload } from 'cloud-ide-lms-model';\n\n@Component({\n selector: 'cide-academics-bonafide-request-form',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideInputComponent,\n CideTextareaComponent,\n CideEleButtonComponent,\n CideFormFieldErrorComponent,\n CideLytSharedWrapperComponent,\n CideLytProgramSectionSelectorComponent,\n CideSelectComponent\n ],\n templateUrl: './bonafide-request-form.component.html',\n styles: [`\n :host {\n @apply tw-w-full tw-h-full tw-flex tw-flex-col;\n }\n `]\n})\nexport class CideAcademicsBonafideRequestFormComponent implements OnInit {\n private destroyRef = inject(DestroyRef);\n private bonafideService = inject(CideAcademicsBonafideService);\n private fb = inject(FormBuilder);\n private router = inject(Router);\n private notificationService = inject(NotificationService);\n private appStateHelper = inject(AppStateHelperService);\n private http = inject(HttpClient);\n\n form: FormGroup = this.fb.group({\n // Common fields\n abnr_purpose: ['', Validators.required],\n abnr_remarks: [''],\n // For non-student users: class/section/student selection\n class_program_id: [''],\n branch_id: [''],\n term_id: [''],\n section_id: [''],\n selected_student_id: ['']\n });\n\n loading = signal(false);\n initializing = signal(true);\n isStudentUser = signal<boolean>(false);\n\n // Store student and entity IDs\n private studentAuthId: string | null = null;\n private entityId: string | null = null;\n\n // For non-student users: class/section/student selection\n studentsList = signal<any[]>([]);\n studentsLoading = signal(false);\n selectedStudent = signal<any | null>(null);\n\n // Flag to prevent reactive clearing during auto-population\n private isProgrammaticUpdate = false;\n\n // Expose IDs for template binding\n readonly activeEntityId = computed(() => this.appStateHelper.activeEntity()?._id || '');\n readonly activeAcademicYearId = computed(() => this.appStateHelper.activeAcademicYear()?._id || '');\n\n // Reactive form values for computed signals\n private formValues = toSignal(this.form.valueChanges, { initialValue: this.form.value });\n\n // Visibility logic controlled by class program and term\n showClassSectionSelector = computed(() => {\n const vals = this.formValues();\n // return !vals?.class_program_id || !vals?.term_id;\n return true;\n });\n\n showStudentSelector = computed(() => {\n return this.isStudentUser() ? false : true;\n });\n\n ngOnInit(): void {\n // Watch for class/section changes to load students\n this.setupClassSectionWatchers();\n\n // Load student and entity data from admission\n this.loadStudentAndEntityData();\n }\n\n /**\n * Setup watchers for class/section changes to load students\n */\n private setupClassSectionWatchers(): void {\n // Watch for section_id changes to load students\n this.form.get('section_id')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.loadStudentsByClassSection();\n });\n\n // Watch for class_program_id changes (if section not available)\n this.form.get('class_program_id')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n // Reset section and student when class changes, but ONLY if not a programmatic update\n if (!this.isProgrammaticUpdate) {\n this.form.patchValue({ section_id: '', selected_student_id: '' }, { emitEvent: false });\n this.loadStudentsByClassSection();\n }\n });\n }\n\n /**\n * Update validators based on user type\n */\n private updateValidators(): void {\n const isStudent = this.isStudentUser();\n const studentControl = this.form.get('selected_student_id');\n\n if (!isStudent && studentControl) {\n // Non-student: make student selection required\n studentControl.setValidators([Validators.required]);\n } else if (isStudent && studentControl) {\n // Student: remove required validator\n studentControl.clearValidators();\n }\n studentControl?.updateValueAndValidity({ emitEvent: false });\n }\n\n private userMasterService = inject(CideCoreUserMasterService);\n\n // ... inside loadStudentsByClassSection ...\n\n /**\n * Load students based on selected class/section\n */\n private loadStudentsByClassSection(): void {\n const classProgramId = this.form.get('class_program_id')?.value;\n const sectionId = this.form.get('section_id')?.value;\n\n if (!classProgramId) {\n this.studentsList.set([]);\n this.form.patchValue({ selected_student_id: '' }, { emitEvent: false });\n return;\n }\n\n this.studentsLoading.set(true);\n\n // Build payload for User List API\n // We are filtering by User Type 'STUDENT' and current Entity\n // We also attempt to pass Class/Section filters if the API supports them dynamically\n const payload = new AuthUserMstListPayload({\n syutm_user_type: 'STUDENT',\n syenm_entity_id_syen: this.activeEntityId(),\n // Custom filters for class/section - utilizing any dynamic fields the API might accept\n // or assuming the backend can filter by these if passed\n admap_class_program_id_acacpm: classProgramId,\n admap_section_id_acapts: sectionId,\n admap_isactive: true,\n pagination: false // Get all matching students\n } as any);\n\n this.userMasterService.getUserList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response?.data) {\n const users = response.data;\n // Map to student options\n const students = users.map((user: any) => ({\n value: user._id,\n label: `${user.user_firstname || ''} ${user.user_lastname || ''}`.trim() || user.user_username,\n // Fallback: use username as student ID since we don't have admission object\n admission: {\n admap_student_id: user.user_username,\n // Keep other admission fields null or minimal as they aren't available from User API\n }\n }));\n this.studentsList.set(students);\n } else {\n this.studentsList.set([]);\n }\n this.studentsLoading.set(false);\n },\n error: (err) => {\n console.error('Error loading students via User API:', err);\n this.notificationService.error('Failed to load students. Please try again.');\n this.studentsList.set([]);\n this.studentsLoading.set(false);\n }\n });\n }\n\n /**\n * Load student ID and entity ID from admission data\n * Determines if user is a student or non-student\n */\n /**\n * Load student ID and entity ID from admission data\n * Determines if user is a student or non-student\n */\n private loadStudentAndEntityData(): void {\n this.initializing.set(true);\n\n // Get current user\n const currentUser = this.appStateHelper.getCurrentUser();\n if (!currentUser?._id) {\n this.notificationService.error('User not authenticated');\n this.initializing.set(false);\n return;\n }\n\n // Check if user is a student based on user type mapping\n const isStudent = (currentUser as any)?.user_type_mapping?.syutm_user_type === 'STUDENT';\n this.isStudentUser.set(isStudent);\n this.updateValidators();\n\n // If not a student, we are done with initialization (just need entity ID)\n if (!isStudent) {\n const activeEntity = this.appStateHelper.activeEntity();\n if (activeEntity?._id) {\n this.entityId = activeEntity._id;\n } else {\n this.notificationService.warning('Entity ID not found. Please contact administrator.');\n }\n this.initializing.set(false);\n return;\n }\n\n // If student, attempt to load admission data from AppState (populated during login)\n // This avoids redundant API calls as per user request\n const studentModel = this.appStateHelper.studentModel();\n\n if (studentModel) {\n console.log('Using cached student model:', studentModel);\n const admissionData = studentModel;\n\n // Student user: auto-populate student and entity IDs\n // We need the AUTH USER ID, not the readable student ID\n this.studentAuthId = currentUser._id;\n\n // Ensure entityId is just the string ID\n const entityData = admissionData?.admap_entity_id_syen;\n this.entityId = typeof entityData === 'object' ? entityData?._id : entityData || null;\n\n // Patch form with student's current enrollment info\n // This will automatically hide the class section selector via showClassSectionSelector signal\n this.isProgrammaticUpdate = true;\n this.form.patchValue({\n class_program_id: admissionData.admap_class_program_id_acacpm,\n branch_id: admissionData.admap_branch_id_acabrc,\n term_id: admissionData.admap_term_id_acatrm,\n section_id: admissionData.admap_section_id_acapts\n });\n this.isProgrammaticUpdate = false;\n\n // If entity ID not found in admission, try to get from active entity\n if (!this.entityId) {\n const activeEntity = this.appStateHelper.activeEntity();\n if (activeEntity?._id) {\n this.entityId = activeEntity._id;\n }\n }\n\n if (!this.entityId) {\n this.notificationService.warning('Entity ID not found. Please contact administrator.');\n }\n this.initializing.set(false);\n } else {\n // Student is logged in but no student model found in state\n console.warn('Student model not found in AppState');\n this.notificationService.warning('Student details not found. Please re-login.');\n\n const activeEntity = this.appStateHelper.activeEntity();\n if (activeEntity?._id) {\n this.entityId = activeEntity._id;\n }\n this.initializing.set(false);\n }\n }\n\n onSubmit(): void {\n if (this.form.valid) {\n // Determine student ID based on user type\n let finalStudentId: string | null = null;\n\n if (this.isStudentUser()) {\n // Student user: use auto-fetched student ID\n finalStudentId = this.studentAuthId;\n } else {\n // Non-student user: use selected student ID\n const studentOption = this.studentsList().find(s => s.value === this.form.get('selected_student_id')?.value);\n finalStudentId = studentOption?.value || null;\n }\n\n // Validate required data\n if (!finalStudentId) {\n if (this.isStudentUser()) {\n this.notificationService.error('Student ID is required. Please ensure your admission is confirmed.');\n } else {\n this.notificationService.error('Please select a student.');\n }\n return;\n }\n\n if (!this.entityId) {\n this.notificationService.error('Entity ID is required. Please contact administrator.');\n return;\n }\n\n const formValues = this.form.value;\n if (!formValues.class_program_id || !formValues.term_id || !formValues.section_id) {\n this.notificationService.error('Class, Term and Section details are required.');\n return;\n }\n\n this.loading.set(true);\n\n // Build payload with all required fields\n const payload = {\n abnr_student_id_auth: finalStudentId,\n abnr_entity_id_syen: this.entityId,\n abnr_academic_year_id_acayr: this.activeAcademicYearId(),\n abnr_class_program_id_acacpm: formValues.class_program_id,\n abnr_term_id_acatrm: formValues.term_id,\n abnr_section_id_acapts: formValues.section_id,\n abnr_purpose: formValues.abnr_purpose,\n abnr_remarks: formValues.abnr_remarks || '',\n abnr_requested_by_user: this.appStateHelper.getCurrentUser()?._id\n };\n\n this.bonafideService.createRequest(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.notificationService.success('Bonafide request created successfully');\n this.router.navigate(['/control-panel/bonafide']);\n } else {\n this.notificationService.error(response.message || 'Failed to create request');\n }\n this.loading.set(false);\n },\n error: (err) => {\n console.error('Error creating bonafide request:', err);\n this.notificationService.error(err.error?.message || 'Failed to create request');\n this.loading.set(false);\n }\n });\n }\n }\n\n cancel(): void {\n this.router.navigate(['/control-panel/bonafide']);\n }\n}\n\n","<!-- Bonafide Request Form with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'bonafide_request' }\">\n <div class=\"tw-w-full tw-h-full\">\n @if (initializing()) {\n <!-- Loading State -->\n <div class=\"tw-w-full tw-h-full tw-flex tw-items-center tw-justify-center\">\n <div class=\"tw-text-center\">\n <div class=\"tw-text-gray-600 tw-mb-2\">Loading student information...</div>\n <div class=\"tw-text-sm tw-text-gray-500\">Please wait</div>\n </div>\n </div>\n } @else {\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\" class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\"\n [class.tw-opacity-60]=\"loading()\">\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 <!-- Form Fields -->\n <div class=\"tw-space-y-6\">\n <!-- Class/Section Selector for Non-Student Users -->\n @if (showClassSectionSelector()) {\n <div class=\"tw-max-w-4xl\">\n <div class=\"tw-mb-4\">\n <h3 class=\"tw-text-sm tw-font-semibold tw-text-gray-700 tw-mb-2\">Select Class & Section</h3>\n <p class=\"tw-text-xs tw-text-gray-500\">Select the class and section to find the student</p>\n </div>\n <cide-lyt-program-section-selector [formGroup]=\"form\" [entityId]=\"activeEntityId()\"\n [academicYearId]=\"activeAcademicYearId()\" classProgramControlName=\"class_program_id\"\n branchControlName=\"branch_id\" termControlName=\"term_id\" sectionControlName=\"section_id\"\n [showLabels]=\"true\" [disabled]=\"loading()\">\n </cide-lyt-program-section-selector>\n </div>\n }\n <!-- Student Selection for Non-Student Users -->\n @if (showStudentSelector()) {\n <div class=\"tw-max-w-2xl\">\n <cide-ele-select label=\"Select Student\" formControlName=\"selected_student_id\" [options]=\"studentsList()\"\n [loading]=\"studentsLoading()\" placeholder=\"Select a student\" valueKey=\"value\" labelKey=\"label\"\n size=\"md\" [required]=\"true\" [disabled]=\"loading() || studentsLoading()\">\n </cide-ele-select>\n </div>\n }\n\n <!-- Purpose Field -->\n <div class=\"tw-max-w-2xl\">\n <cide-ele-input label=\"Purpose\" formControlName=\"abnr_purpose\" [required]=\"true\"\n placeholder=\"Enter purpose for bonafide certificate\" size=\"md\" [disabled]=\"loading()\">\n </cide-ele-input>\n </div>\n\n <!-- Remarks Field -->\n <div class=\"tw-max-w-2xl\">\n <cide-ele-textarea label=\"Remarks\" formControlName=\"abnr_remarks\"\n placeholder=\"Enter any additional remarks\" rows=\"4\" size=\"md\" [disabled]=\"loading()\">\n </cide-ele-textarea>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-flex-col tw-gap-3\">\n <!-- Error Message -->\n <div class=\"tw-w-full\">\n <cide-form-field-error [formGroup]=\"form\"></cide-form-field-error>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"cancel()\" [disabled]=\"loading()\">\n Cancel\n </button>\n\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"!form.valid || loading()\"\n [loading]=\"loading()\" leftIcon=\"save\">\n Submit Request\n </button>\n </div>\n </div>\n </div>\n </div>\n </form>\n }\n </div>\n</cide-lyt-shared-wrapper>"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cloud-ide-academics-bonafide-request-form.component-C9S2Inno.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/bonafide/components/bonafide-request-form/bonafide-request-form.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/bonafide/components/bonafide-request-form/bonafide-request-form.component.html"],"sourcesContent":["import { Component, signal, DestroyRef, inject, OnInit, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { HttpClient } from '@angular/common/http';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideFormFieldErrorComponent, CideSelectComponent } from 'cloud-ide-element';\nimport { NotificationService } from 'cloud-ide-element';\nimport { CideLytSharedWrapperComponent, AppStateHelperService } from 'cloud-ide-layout';\nimport { CideAcademicsBonafideService } from '../../services/bonafide.service';\nimport { cidePath, coreRoutesUrl, hostManagerRoutesUrl, generateStringFromObject, admissionRoutesUrl, MAdmissionApplicationMain } from 'cloud-ide-lms-model';\nimport { CideLytProgramSectionSelectorComponent } from '../../../../../public-api';\nimport { startWith } from 'rxjs/operators';\nimport { CideCoreUserMasterService } from 'cloud-ide-core';\nimport { AuthUserMstListPayload } from 'cloud-ide-lms-model';\n\n@Component({\n selector: 'cide-academics-bonafide-request-form',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideInputComponent,\n CideTextareaComponent,\n CideEleButtonComponent,\n CideFormFieldErrorComponent,\n CideLytSharedWrapperComponent,\n CideLytProgramSectionSelectorComponent,\n CideSelectComponent\n ],\n templateUrl: './bonafide-request-form.component.html',\n styles: [`\n :host {\n @apply tw-w-full tw-h-full tw-flex tw-flex-col;\n }\n `]\n})\nexport class CideAcademicsBonafideRequestFormComponent implements OnInit {\n private destroyRef = inject(DestroyRef);\n private bonafideService = inject(CideAcademicsBonafideService);\n private fb = inject(FormBuilder);\n private router = inject(Router);\n private notificationService = inject(NotificationService);\n private appStateHelper = inject(AppStateHelperService);\n private http = inject(HttpClient);\n\n form: FormGroup = this.fb.group({\n // Common fields\n abnr_purpose: ['', Validators.required],\n abnr_remarks: [''],\n // For non-student users: class/section/student selection\n class_program_id: [''],\n branch_id: [''],\n term_id: [''],\n section_id: [''],\n selected_student_id: ['']\n });\n\n loading = signal(false);\n initializing = signal(true);\n isStudentUser = signal<boolean>(false);\n\n // Store student and entity IDs\n private studentAuthId: string | null = null;\n private entityId: string | null = null;\n\n // For non-student users: class/section/student selection\n studentsList = signal<any[]>([]);\n studentsLoading = signal(false);\n selectedStudent = signal<any | null>(null);\n\n // Flag to prevent reactive clearing during auto-population\n private isProgrammaticUpdate = false;\n\n // Expose IDs for template binding\n readonly activeEntityId = computed(() => this.appStateHelper.activeEntity()?._id || '');\n readonly activeAcademicYearId = computed(() => this.appStateHelper.activeAcademicYear()?._id || '');\n\n // Reactive form values for computed signals\n private formValues = toSignal(this.form.valueChanges, { initialValue: this.form.value });\n\n // Visibility logic controlled by class program and term\n showClassSectionSelector = computed(() => {\n const vals = this.formValues();\n // return !vals?.class_program_id || !vals?.term_id;\n return true;\n });\n\n showStudentSelector = computed(() => {\n return this.isStudentUser() ? false : true;\n });\n\n ngOnInit(): void {\n // Watch for class/section changes to load students\n this.setupClassSectionWatchers();\n\n // Load student and entity data from admission\n this.loadStudentAndEntityData();\n }\n\n /**\n * Setup watchers for class/section changes to load students\n */\n private setupClassSectionWatchers(): void {\n // Watch for section_id changes to load students\n this.form.get('section_id')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.loadStudentsByClassSection();\n });\n\n // Watch for class_program_id changes (if section not available)\n this.form.get('class_program_id')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n // Reset section and student when class changes, but ONLY if not a programmatic update\n if (!this.isProgrammaticUpdate) {\n this.form.patchValue({ section_id: '', selected_student_id: '' }, { emitEvent: false });\n this.loadStudentsByClassSection();\n }\n });\n }\n\n /**\n * Update validators based on user type\n */\n private updateValidators(): void {\n const isStudent = this.isStudentUser();\n const studentControl = this.form.get('selected_student_id');\n\n if (!isStudent && studentControl) {\n // Non-student: make student selection required\n studentControl.setValidators([Validators.required]);\n } else if (isStudent && studentControl) {\n // Student: remove required validator\n studentControl.clearValidators();\n }\n studentControl?.updateValueAndValidity({ emitEvent: false });\n }\n\n private userMasterService = inject(CideCoreUserMasterService);\n\n // ... inside loadStudentsByClassSection ...\n\n /**\n * Load students based on selected class/section\n */\n private loadStudentsByClassSection(): void {\n const classProgramId = this.form.get('class_program_id')?.value;\n const sectionId = this.form.get('section_id')?.value;\n\n if (!classProgramId) {\n this.studentsList.set([]);\n this.form.patchValue({ selected_student_id: '' }, { emitEvent: false });\n return;\n }\n\n this.studentsLoading.set(true);\n\n // Build payload for User List API\n // We are filtering by User Type 'STUDENT' and current Entity\n // We also attempt to pass Class/Section filters if the API supports them dynamically\n const payload = new AuthUserMstListPayload({\n syutm_user_type: 'STUDENT',\n syenm_entity_id_syen: this.activeEntityId(),\n // Custom filters for class/section - utilizing any dynamic fields the API might accept\n // or assuming the backend can filter by these if passed\n admap_class_program_id_acacpm: classProgramId,\n admap_section_id_acapts: sectionId,\n admap_isactive: true,\n pagination: false // Get all matching students\n } as any);\n\n this.userMasterService.getUserList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response?.data) {\n const users = response.data;\n // Map to student options\n const students = users.map((user: any) => ({\n value: user._id,\n label: `${user.user_firstname || ''} ${user.user_lastname || ''}`.trim() || user.user_username,\n // Fallback: use username as student ID since we don't have admission object\n admission: {\n admap_student_id: user.user_username,\n // Keep other admission fields null or minimal as they aren't available from User API\n }\n }));\n this.studentsList.set(students);\n } else {\n this.studentsList.set([]);\n }\n this.studentsLoading.set(false);\n },\n error: (err) => {\n console.error('Error loading students via User API:', err);\n this.notificationService.error('Failed to load students. Please try again.');\n this.studentsList.set([]);\n this.studentsLoading.set(false);\n }\n });\n }\n\n /**\n * Load student ID and entity ID from admission data\n * Determines if user is a student or non-student\n */\n /**\n * Load student ID and entity ID from admission data\n * Determines if user is a student or non-student\n */\n private loadStudentAndEntityData(): void {\n this.initializing.set(true);\n\n // Get current user\n const currentUser = this.appStateHelper.getCurrentUser();\n if (!currentUser?._id) {\n this.notificationService.error('User not authenticated');\n this.initializing.set(false);\n return;\n }\n\n // Check if user is a student based on user type mapping\n const isStudent = (currentUser as any)?.user_type_mapping?.syutm_user_type === 'STUDENT';\n this.isStudentUser.set(isStudent);\n this.updateValidators();\n\n // If not a student, we are done with initialization (just need entity ID)\n if (!isStudent) {\n const activeEntity = this.appStateHelper.activeEntity();\n if (activeEntity?._id) {\n this.entityId = activeEntity._id;\n } else {\n this.notificationService.warning('Entity ID not found. Please contact administrator.');\n }\n this.initializing.set(false);\n return;\n }\n\n // If student, attempt to load admission data from AppState (populated during login)\n // This avoids redundant API calls as per user request\n const studentModel = this.appStateHelper.studentModel();\n\n if (studentModel) {\n console.log('Using cached student model:', studentModel);\n const admissionData = studentModel;\n\n // Student user: auto-populate student and entity IDs\n // We need the AUTH USER ID, not the readable student ID\n this.studentAuthId = currentUser._id;\n\n // Ensure entityId is just the string ID\n const entityData = admissionData?.admap_entity_id_syen;\n this.entityId = typeof entityData === 'object' ? entityData?._id : entityData || null;\n\n // Patch form with student's current enrollment info\n // This will automatically hide the class section selector via showClassSectionSelector signal\n this.isProgrammaticUpdate = true;\n this.form.patchValue({\n class_program_id: admissionData.admap_class_program_id_acacpm,\n branch_id: admissionData.admap_branch_id_acabrc,\n term_id: admissionData.admap_term_id_acatrm,\n section_id: admissionData.admap_section_id_acapts\n });\n this.isProgrammaticUpdate = false;\n\n // If entity ID not found in admission, try to get from active entity\n if (!this.entityId) {\n const activeEntity = this.appStateHelper.activeEntity();\n if (activeEntity?._id) {\n this.entityId = activeEntity._id;\n }\n }\n\n if (!this.entityId) {\n this.notificationService.warning('Entity ID not found. Please contact administrator.');\n }\n this.initializing.set(false);\n } else {\n // Student is logged in but no student model found in state\n console.warn('Student model not found in AppState');\n this.notificationService.warning('Student details not found. Please re-login.');\n\n const activeEntity = this.appStateHelper.activeEntity();\n if (activeEntity?._id) {\n this.entityId = activeEntity._id;\n }\n this.initializing.set(false);\n }\n }\n\n onSubmit(): void {\n if (this.form.valid) {\n // Determine student ID based on user type\n let finalStudentId: string | null = null;\n\n if (this.isStudentUser()) {\n // Student user: use auto-fetched student ID\n finalStudentId = this.studentAuthId;\n } else {\n // Non-student user: use selected student ID\n const studentOption = this.studentsList().find(s => s.value === this.form.get('selected_student_id')?.value);\n finalStudentId = studentOption?.value || null;\n }\n\n // Validate required data\n if (!finalStudentId) {\n if (this.isStudentUser()) {\n this.notificationService.error('Student ID is required. Please ensure your admission is confirmed.');\n } else {\n this.notificationService.error('Please select a student.');\n }\n return;\n }\n\n if (!this.entityId) {\n this.notificationService.error('Entity ID is required. Please contact administrator.');\n return;\n }\n\n const formValues = this.form.value;\n if (!formValues.class_program_id || !formValues.term_id || !formValues.section_id) {\n this.notificationService.error('Class, Term and Section details are required.');\n return;\n }\n\n this.loading.set(true);\n\n // Build payload with all required fields\n const payload = {\n abnr_student_id_auth: finalStudentId,\n abnr_entity_id_syen: this.entityId,\n abnr_academic_year_id_acayr: this.activeAcademicYearId(),\n abnr_class_program_id_acacpm: formValues.class_program_id,\n abnr_term_id_acatrm: formValues.term_id,\n abnr_section_id_acapts: formValues.section_id,\n abnr_purpose: formValues.abnr_purpose,\n abnr_remarks: formValues.abnr_remarks || '',\n abnr_requested_by_user: this.appStateHelper.getCurrentUser()?._id\n };\n\n this.bonafideService.createRequest(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.notificationService.success('Bonafide request created successfully');\n this.router.navigate(['/control-panel/bonafide']);\n } else {\n this.notificationService.error(response.message || 'Failed to create request');\n }\n this.loading.set(false);\n },\n error: (err) => {\n console.error('Error creating bonafide request:', err);\n this.notificationService.error(err.error?.message || 'Failed to create request');\n this.loading.set(false);\n }\n });\n }\n }\n\n cancel(): void {\n this.router.navigate(['/control-panel/bonafide']);\n }\n}\n\n","<!-- Bonafide Request Form with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'bonafide_request' }\">\n <div class=\"tw-w-full tw-h-full\">\n @if (initializing()) {\n <!-- Loading State -->\n <div class=\"tw-w-full tw-h-full tw-flex tw-items-center tw-justify-center\">\n <div class=\"tw-text-center\">\n <div class=\"tw-text-gray-600 tw-mb-2\">Loading student information...</div>\n <div class=\"tw-text-sm tw-text-gray-500\">Please wait</div>\n </div>\n </div>\n } @else {\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\" class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\"\n [class.tw-opacity-60]=\"loading()\">\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 <!-- Form Fields -->\n <div class=\"tw-space-y-6\">\n <!-- Class/Section Selector for Non-Student Users -->\n @if (showClassSectionSelector()) {\n <div class=\"tw-max-w-4xl\">\n <div class=\"tw-mb-4\">\n <h3 class=\"tw-text-sm tw-font-semibold tw-text-gray-700 tw-mb-2\">Select Class & Section</h3>\n <p class=\"tw-text-xs tw-text-gray-500\">Select the class and section to find the student</p>\n </div>\n <cide-lyt-program-section-selector [formGroup]=\"form\" [entityId]=\"activeEntityId()\"\n [academicYearId]=\"activeAcademicYearId()\" classProgramControlName=\"class_program_id\"\n branchControlName=\"branch_id\" termControlName=\"term_id\" sectionControlName=\"section_id\"\n [showLabels]=\"true\" [disabled]=\"loading()\">\n </cide-lyt-program-section-selector>\n </div>\n }\n <!-- Student Selection for Non-Student Users -->\n @if (showStudentSelector()) {\n <div class=\"tw-max-w-2xl\">\n <cide-ele-select label=\"Select Student\" formControlName=\"selected_student_id\" [options]=\"studentsList()\"\n [loading]=\"studentsLoading()\" placeholder=\"Select a student\" valueKey=\"value\" labelKey=\"label\"\n size=\"md\" [required]=\"true\" [disabled]=\"loading() || studentsLoading()\">\n </cide-ele-select>\n </div>\n }\n\n <!-- Purpose Field -->\n <div class=\"tw-max-w-2xl\">\n <cide-ele-input label=\"Purpose\" formControlName=\"abnr_purpose\" [required]=\"true\"\n placeholder=\"Enter purpose for bonafide certificate\" size=\"md\" [disabled]=\"loading()\">\n </cide-ele-input>\n </div>\n\n <!-- Remarks Field -->\n <div class=\"tw-max-w-2xl\">\n <cide-ele-textarea label=\"Remarks\" formControlName=\"abnr_remarks\"\n placeholder=\"Enter any additional remarks\" rows=\"4\" size=\"md\" [disabled]=\"loading()\">\n </cide-ele-textarea>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-flex-col tw-gap-3\">\n <!-- Error Message -->\n <div class=\"tw-w-full\">\n <cide-form-field-error [formGroup]=\"form\"></cide-form-field-error>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"cancel()\" [disabled]=\"loading()\">\n Cancel\n </button>\n\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"!form.valid || loading()\"\n [loading]=\"loading()\" leftIcon=\"save\">\n Submit Request\n </button>\n </div>\n </div>\n </div>\n </div>\n </form>\n }\n </div>\n</cide-lyt-shared-wrapper>"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-ide-academics-bonafide-request-list.component-C4hyqxLP.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/bonafide/components/bonafide-request-list/bonafide-request-list.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/bonafide/components/bonafide-request-list/bonafide-request-list.component.html"],"sourcesContent":["import { Component, signal, DestroyRef, inject, computed, OnInit, effect, TemplateRef, viewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideEleDataGridComponent, CideEleButtonComponent, CideIconComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, NotificationService, CideSelectComponent } from 'cloud-ide-element';\nimport { AppStateHelperService, RightsService, CideLytSharedService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { CideAcademicsBonafideService } from '../../services/bonafide.service';\nimport { generateStringFromObject } from 'cloud-ide-lms-model';\n\ntype TemplateContext = { value: any; row: any; column: any };\n\n@Component({\n selector: 'cide-academics-bonafide-request-list',\n standalone: true,\n imports: [\n CommonModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n // CideIconComponent,\n CideLytSharedWrapperComponent,\n CideEleDropdownComponent,\n CideSelectComponent\n ],\n templateUrl: './bonafide-request-list.component.html',\n styles: [`\n .bonafide-list-container {\n @apply tw-w-full tw-h-full;\n }\n \n :host {\n @apply tw-w-full tw-h-full tw-flex tw-flex-col;\n }\n `]\n})\nexport class CideAcademicsBonafideRequestListComponent implements OnInit {\n private destroyRef = inject(DestroyRef);\n private bonafideService = inject(CideAcademicsBonafideService);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private rightsService = inject(RightsService);\n private sharedService = inject(CideLytSharedService);\n private notificationService = inject(NotificationService);\n\n requests = signal<any[]>([]);\n total = signal<number>(0);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedStatus = signal<string>('ALL');\n\n // Page config (title/subtitle) from page API\n pageTitle = signal<string>('');\n pageSubtitle = signal<string>('');\n pageCode = signal<string>('bonafide_request');\n\n canCreate = computed(() => this.rightsService.hasRight('CREATE'));\n canView = computed(() => this.rightsService.hasRight('VIEW'));\n canDownload = computed(() => this.rightsService.hasRight('DOWNLOAD'));\n\n // Template references for custom renderers\n statusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('statusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n studentAcademicRendererTemplate = viewChild.required<TemplateRef<any>>('studentAcademicRendererTemplate');\n dateRendererTemplate = viewChild.required<TemplateRef<any>>('dateRendererTemplate');\n statusFilterTemplate = viewChild.required<TemplateRef<any>>('statusFilterTemplate');\n\n // Status filter options\n statusOptions = [\n { value: 'ALL', label: 'All Status' },\n { value: 'bonafide_status_pending', label: 'Pending' },\n { value: 'bonafide_status_in_progress', label: 'In Porgress' },\n { value: 'bonafide_status_approved', label: 'Approved' },\n { value: 'bonafide_status_completed', label: 'Completed' },\n { value: 'bonafide_status_rejected', label: 'Rejected' }\n ];\n\n // Constructor to set up reactive effect for page data\n constructor() {\n // Watch for page data changes in cache and update title/subtitle reactively\n effect(() => {\n const currentPageCode = this.pageCode();\n if (!currentPageCode) return;\n\n // Watch the page data cache signal from shared service\n const pageDataCache = this.sharedService.pageDataStore();\n const cachedData = pageDataCache[currentPageCode];\n const page = cachedData?.data?.page;\n\n if (page) {\n // Try to parse configuration for title/subtitle\n const cfgString = page?.sypg_configuration;\n if (cfgString) {\n try {\n const cfg = JSON.parse(cfgString);\n this.pageTitle.set(cfg.title || page?.sypg_title || '');\n this.pageSubtitle.set(cfg.subTitle || page?.sypg_desc || '');\n } catch (e) {\n console.warn('Invalid page config JSON', e);\n this.pageTitle.set(page?.sypg_title || '');\n this.pageSubtitle.set(page?.sypg_desc || '');\n }\n } else {\n this.pageTitle.set(page?.sypg_title || '');\n this.pageSubtitle.set(page?.sypg_desc || '');\n }\n }\n });\n }\n\n // Server-side pagination state\n currentPage = signal(1);\n pageSize = signal(10);\n\n // ViewChild reference to the grid component\n gridComponent = viewChild(CideEleDataGridComponent);\n\n gridConfig = computed<GridConfiguration<any>>(() => ({\n id: 'bonafide-request-grid',\n actionRenderer: 'statusFilter',\n columns: [\n { key: 'abnr_request_number', header: 'Request Number', type: 'text', width: 'md', align: 'left' },\n { key: 'student_info', header: 'Student & Academic Details', type: 'custom', width: 'lg', renderer: 'studentAcademicRenderer' },\n { key: 'abnr_purpose', header: 'Purpose', type: 'text', width: 'lg' },\n { key: 'abnr_request_date', header: 'Requested Date', type: 'custom', width: 'md', align: 'center', renderer: 'dateRenderer' },\n { key: 'abnr_status_id_sygms', header: 'Status', type: 'custom', width: 'sm', align: 'center', renderer: 'statusRenderer' },\n { key: 'actions', header: 'Actions', type: 'custom', width: 'sm', align: 'center', renderer: 'actionsDropdownRenderer' }\n ],\n data: this.requests(),\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: this.pageSize(),\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true,\n infiniteScroll: true\n },\n serverSidePagination: true,\n search: {\n enabled: true,\n placeholder: 'Search bonafide requests...',\n searchableColumns: ['abnr_purpose', 'abnr_request_number'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n fullHeight: true\n }));\n\n templateRenderers = computed(() => ({\n statusRenderer: this.statusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate(),\n studentAcademicRenderer: this.studentAcademicRendererTemplate(),\n dateRenderer: this.dateRendererTemplate(),\n statusFilter: this.statusFilterTemplate()\n }));\n\n ngOnInit(): void {\n // Initialize rights for this page\n this.rightsService.initializeRights('bonafide_request');\n\n // Initialize page code from route data\n this.route.data.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(data => {\n const codeFromRoute = data['page']?.sypg_page_code || data['sypg_page_code'];\n const codeFromQuery = this.route.snapshot.queryParamMap.get('sypg_page_code');\n const finalCode = (codeFromRoute || codeFromQuery || this.pageCode()).toString();\n this.pageCode.set(finalCode);\n\n // Page title/subtitle will be updated reactively by the effect when page data is loaded\n // Also check immediately if data is already available\n const cached = finalCode ? this.sharedService.getCachedPageData(finalCode) : null;\n const page = data['page'] || cached?.data?.page;\n if (page) {\n const cfgString = page?.sypg_configuration;\n if (cfgString) {\n try {\n const cfg = JSON.parse(cfgString);\n this.pageTitle.set(cfg.title || page?.sypg_title || '');\n this.pageSubtitle.set(cfg.subTitle || page?.sypg_desc || '');\n } catch (e) {\n console.warn('Invalid page config JSON', e);\n this.pageTitle.set(page?.sypg_title || '');\n this.pageSubtitle.set(page?.sypg_desc || '');\n }\n } else {\n this.pageTitle.set(page?.sypg_title || '');\n this.pageSubtitle.set(page?.sypg_desc || '');\n }\n }\n });\n\n this.loadRequests();\n }\n\n loadRequests(filters?: any, pageIndex: number = this.currentPage(), pageSize: number = this.pageSize()): void {\n this.loading.set(true);\n this.error.set(null);\n\n const queryParams: any = {\n pageIndex,\n pageSize,\n ...filters\n };\n\n this.bonafideService.getRequestList(queryParams)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n // Fix: Handle response structure correctly\n const data = response.data;\n this.requests.set(data?.requests || []);\n this.total.set(data?.total || 0);\n } else {\n this.error.set(response.message || 'Failed to load requests');\n this.requests.set([]);\n this.total.set(0);\n }\n this.loading.set(false);\n this.gridComponent()?.clearPageChangeLoading();\n },\n error: (err) => {\n console.error('Error loading requests:', err);\n this.error.set(err.message || 'Failed to load requests');\n this.requests.set([]);\n this.total.set(0);\n this.loading.set(false);\n this.gridComponent()?.clearPageChangeLoading();\n }\n });\n }\n\n onGridEvent(event: GridEvent): void {\n console.log('📡 GRID EVENT:', event.type, event.data);\n switch (event.type) {\n case 'pageChange': {\n if (event.data && typeof event.data === 'object') {\n const pageData = event.data as { pageIndex?: number; pageSize?: number };\n const pageIndex = pageData.pageIndex || 1;\n const pageSize = pageData.pageSize || this.pageSize();\n\n this.currentPage.set(pageIndex);\n this.pageSize.set(pageSize);\n this.loadRequests(this.getFilters(), pageIndex, pageSize);\n } else if (typeof event.data === 'number') {\n this.currentPage.set(event.data);\n this.loadRequests(this.getFilters(), event.data, this.pageSize());\n }\n break;\n }\n case 'refresh':\n this.loadRequests(this.getFilters());\n break;\n case 'search':\n this.currentPage.set(1);\n this.loadRequests(this.getFilters());\n break;\n }\n }\n\n onStatusFilterChange(status: string | number | string[]): void {\n // Convert to string - handle array case by taking first element\n const statusStr = Array.isArray(status) ? status[0] : String(status);\n this.selectedStatus.set(statusStr);\n this.loadRequests(this.getFilters());\n }\n\n getFilters(): any {\n const filters: any = {};\n if (this.selectedStatus() !== 'ALL') {\n // Note: In a real implementation, you'd need to get status ID from master data\n // For now, we'll filter on the frontend or pass the status code\n filters.statusCode = this.selectedStatus();\n }\n return filters;\n }\n\n getStatusText(row: any): string {\n const status = row.abnr_status_id_sygms;\n if (!status) return 'N/A';\n if (typeof status === 'string') return status;\n return status.sygms_title || status.sygms_code || 'N/A';\n }\n\n getStatusBadgeClass(row: any): string {\n const statusText = this.getStatusText(row).toUpperCase();\n if (statusText.includes('PENDING')) {\n return 'tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-yellow-100 tw-text-yellow-800 dark:tw-bg-yellow-900/30 dark:tw-text-yellow-300';\n } else if (statusText.includes('PROGRESS') || statusText.includes('REVIEW')) {\n return 'tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800 dark:tw-bg-blue-900/30 dark:tw-text-blue-300';\n } else if (statusText.includes('APPROVED')) {\n return '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 dark:tw-bg-green-900/30 dark:tw-text-green-300';\n } else if (statusText.includes('COMPLETED')) {\n return 'tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-emerald-100 tw-text-emerald-800 dark:tw-bg-emerald-900/30 dark:tw-text-emerald-300';\n } else if (statusText.includes('REJECTED')) {\n return '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 dark:tw-bg-red-900/30 dark:tw-text-red-300';\n }\n return 'tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-gray-100 tw-text-gray-800 dark:tw-bg-gray-700 dark:tw-text-gray-300';\n }\n\n getActionDropdownItems(row: any): DropdownItem[] {\n const items: DropdownItem[] = [];\n\n if (this.canView()) {\n items.push({\n id: `view-${row._id || 'unknown'}`,\n label: 'View Details',\n icon: 'visibility'\n });\n }\n\n if (this.canDownload()) {\n if (row.abnr_soft_copy_id_cyfm) {\n items.push({\n id: `download-soft-${row._id || 'unknown'}`,\n label: 'Download Soft Copy',\n icon: 'download'\n });\n }\n\n if (row.abnr_stamped_copy_id_cyfm) {\n items.push({\n id: `download-stamped-${row._id || 'unknown'}`,\n label: 'Download Stamped Copy',\n icon: 'download'\n });\n }\n }\n\n if (items.length === 0) {\n items.push({\n id: `no-action-${row._id || 'unknown'}`,\n label: 'No actions available',\n icon: 'info',\n disabled: true\n });\n }\n\n return items;\n }\n\n onActionItemClick(item: DropdownItem, row: any): void {\n if (item.disabled) {\n return;\n }\n\n const itemId = item.id;\n\n\n if (itemId.startsWith('view-')) {\n this.viewRequest(row);\n }\n // Note: Download options removed - certificates now generated on-demand in detail view\n }\n\n viewRequest(row: any): void {\n if (!row._id) {\n this.notificationService.error('Request ID not found');\n return;\n }\n const query = generateStringFromObject({ abnr_id: row._id });\n this.router.navigate(['/control-panel/bonafide/view', query]);\n }\n\n createNew(): void {\n this.router.navigate(['/control-panel/bonafide/create']);\n }\n}\n","<!-- Bonafide Request List with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'bonafide_request' }\">\n <!-- Breadcrumb Actions slot -->\n <div breadcrumb-actions>\n @if (canCreate()) {\n <button cideEleButton variant=\"primary\" size=\"xs\" (click)=\"createNew()\" [adaptive]=\"true\" leftIcon=\"add\"\n class=\"tw-whitespace-nowrap\">\n New Bonafide Request\n </button>\n\n }\n </div>\n\n <div class=\"bonafide-list-container tw-bg-white tw-shadow-lg tw-rounded-lg tw-table tw-h-full\">\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n <div class=\"tw-h-full tw-overflow-auto\">\n <!-- Data Grid Component -->\n <cide-ele-data-grid [config]=\"gridConfig()\" [totalServerItems]=\"total()\" [currentServerPage]=\"currentPage()\"\n [currentServerPageSize]=\"pageSize()\" [serverSidePagination]=\"true\" [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n </div>\n </div>\n\n </div>\n\n <!-- Status Badge 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 <span [class]=\"getStatusBadgeClass(row)\">\n {{ getStatusText(row) }}\n </span>\n </div>\n </ng-template>\n\n <!-- Actions Dropdown Template -->\n <ng-template #actionsDropdownRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <cide-ele-dropdown [items]=\"getActionDropdownItems(row)\" (itemClick)=\"onActionItemClick($event, row)\">\n </cide-ele-dropdown>\n </ng-template>\n\n <!-- Student & Academic Details Template -->\n <ng-template #studentAcademicRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-flex-col tw-gap-0.5\">\n <span class=\"tw-text-sm tw-font-bold tw-text-gray-900\">\n {{ row.abnr_student_id_auth?.user_fullname || 'N/A' }}\n </span>\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-text-[11px] tw-text-gray-500\">\n <span class=\"tw-font-medium\">{{ row.abnr_class_program_id_acacpm?.acacpm_alise_title || 'N/A' }}</span>\n <span class=\"tw-text-gray-300\">|</span>\n <span>{{ row.abnr_term_id_acatrm?.acapt_name || 'N/A' }}</span>\n <span class=\"tw-text-gray-300\">|</span>\n <span>{{ row.abnr_section_id_acapts?.acapts_name || 'N/A' }}</span>\n </div>\n </div>\n </ng-template>\n\n <!-- Date Renderer Template -->\n <ng-template #dateRendererTemplate let-value=\"value\">\n <div class=\"tw-text-center\">\n {{ value | date:'MMM dd, yyyy' }}\n </div>\n </ng-template>\n\n <!-- Status Filter Template (for Grid Action Bar) -->\n <ng-template #statusFilterTemplate>\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <span class=\"tw-text-sm tw-text-gray-500 tw-whitespace-nowrap\">Status:</span>\n <cide-ele-select [options]=\"statusOptions\" [ngModel]=\"selectedStatus()\"\n (ngModelChange)=\"onStatusFilterChange($event)\" placeholder=\"Filter by status\" class=\"tw-w-40\" size=\"sm\">\n </cide-ele-select>\n </div>\n </ng-template>\n</cide-lyt-shared-wrapper>"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cloud-ide-academics-bonafide-request-list.component-C4hyqxLP.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/bonafide/components/bonafide-request-list/bonafide-request-list.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/bonafide/components/bonafide-request-list/bonafide-request-list.component.html"],"sourcesContent":["import { Component, signal, DestroyRef, inject, computed, OnInit, effect, TemplateRef, viewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideEleDataGridComponent, CideEleButtonComponent, CideIconComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, NotificationService, CideSelectComponent } from 'cloud-ide-element';\nimport { AppStateHelperService, RightsService, CideLytSharedService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { CideAcademicsBonafideService } from '../../services/bonafide.service';\nimport { generateStringFromObject } from 'cloud-ide-lms-model';\n\ninterface BonafideRequest {\n _id: string;\n abnr_request_number: string;\n abnr_purpose: string;\n abnr_request_date: string | Date;\n abnr_status_id_sygms: { sygms_title?: string; sygms_code?: string } | string;\n abnr_soft_copy_id_cyfm?: string;\n abnr_stamped_copy_id_cyfm?: string;\n [key: string]: any;\n}\n\ntype TemplateContext = { value: any; row: BonafideRequest; column: any };\n\n@Component({\n selector: 'cide-academics-bonafide-request-list',\n standalone: true,\n imports: [\n CommonModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n // CideIconComponent,\n CideLytSharedWrapperComponent,\n CideEleDropdownComponent,\n CideSelectComponent\n ],\n templateUrl: './bonafide-request-list.component.html',\n styles: [`\n .bonafide-list-container {\n @apply tw-w-full tw-h-full;\n }\n \n :host {\n @apply tw-w-full tw-h-full tw-flex tw-flex-col;\n }\n `]\n})\nexport class CideAcademicsBonafideRequestListComponent implements OnInit {\n private destroyRef = inject(DestroyRef);\n private bonafideService = inject(CideAcademicsBonafideService);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private rightsService = inject(RightsService);\n private sharedService = inject(CideLytSharedService);\n private notificationService = inject(NotificationService);\n\n requests = signal<BonafideRequest[]>([]);\n total = signal<number>(0);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedStatus = signal<string>('ALL');\n\n // Page config (title/subtitle) from page API\n pageTitle = signal<string>('');\n pageSubtitle = signal<string>('');\n pageCode = signal<string>('bonafide_request');\n\n canCreate = computed(() => this.rightsService.hasRight('CREATE'));\n canView = computed(() => this.rightsService.hasRight('VIEW'));\n canDownload = computed(() => this.rightsService.hasRight('DOWNLOAD'));\n\n // Template references for custom renderers\n statusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('statusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n studentAcademicRendererTemplate = viewChild.required<TemplateRef<any>>('studentAcademicRendererTemplate');\n dateRendererTemplate = viewChild.required<TemplateRef<any>>('dateRendererTemplate');\n statusFilterTemplate = viewChild.required<TemplateRef<any>>('statusFilterTemplate');\n\n // Status filter options\n statusOptions = [\n { value: 'ALL', label: 'All Status' },\n { value: 'bonafide_status_pending', label: 'Pending' },\n { value: 'bonafide_status_in_progress', label: 'In Porgress' },\n { value: 'bonafide_status_approved', label: 'Approved' },\n { value: 'bonafide_status_completed', label: 'Completed' },\n { value: 'bonafide_status_rejected', label: 'Rejected' }\n ];\n\n // Constructor to set up reactive effect for page data\n constructor() {\n // Watch for page data changes in cache and update title/subtitle reactively\n effect(() => {\n const currentPageCode = this.pageCode();\n if (!currentPageCode) return;\n\n // Watch the page data cache signal from shared service\n const pageDataCache = this.sharedService.pageDataStore();\n const cachedData = pageDataCache[currentPageCode];\n const page = cachedData?.data?.page;\n\n if (page) {\n // Try to parse configuration for title/subtitle\n const cfgString = page?.sypg_configuration;\n if (cfgString) {\n try {\n const cfg = JSON.parse(cfgString);\n this.pageTitle.set(cfg.title || page?.sypg_title || '');\n this.pageSubtitle.set(cfg.subTitle || page?.sypg_desc || '');\n } catch (e) {\n console.warn('Invalid page config JSON', e);\n this.pageTitle.set(page?.sypg_title || '');\n this.pageSubtitle.set(page?.sypg_desc || '');\n }\n } else {\n this.pageTitle.set(page?.sypg_title || '');\n this.pageSubtitle.set(page?.sypg_desc || '');\n }\n }\n });\n }\n\n // Server-side pagination state\n currentPage = signal(1);\n pageSize = signal(10);\n\n // ViewChild reference to the grid component\n gridComponent = viewChild(CideEleDataGridComponent);\n\n gridConfig = computed<GridConfiguration<any>>(() => ({\n id: 'bonafide-request-grid',\n actionRenderer: 'statusFilter',\n columns: [\n { key: 'abnr_request_number', header: 'Request Number', type: 'text', width: 'md', align: 'left' },\n { key: 'student_info', header: 'Student & Academic Details', type: 'custom', width: 'lg', renderer: 'studentAcademicRenderer' },\n { key: 'abnr_purpose', header: 'Purpose', type: 'text', width: 'lg' },\n { key: 'abnr_request_date', header: 'Requested Date', type: 'custom', width: 'md', align: 'center', renderer: 'dateRenderer' },\n { key: 'abnr_status_id_sygms', header: 'Status', type: 'custom', width: 'sm', align: 'center', renderer: 'statusRenderer' },\n { key: 'actions', header: 'Actions', type: 'custom', width: 'sm', align: 'center', renderer: 'actionsDropdownRenderer' }\n ],\n data: this.requests(),\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: this.pageSize(),\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true,\n infiniteScroll: true\n },\n serverSidePagination: true,\n search: {\n enabled: true,\n placeholder: 'Search bonafide requests...',\n searchableColumns: ['abnr_purpose', 'abnr_request_number'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n fullHeight: true\n }));\n\n templateRenderers = computed(() => ({\n statusRenderer: this.statusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate(),\n studentAcademicRenderer: this.studentAcademicRendererTemplate(),\n dateRenderer: this.dateRendererTemplate(),\n statusFilter: this.statusFilterTemplate()\n }));\n\n ngOnInit(): void {\n // Initialize rights for this page\n this.rightsService.initializeRights('bonafide_request');\n\n // Initialize page code from route data\n this.route.data.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(data => {\n const codeFromRoute = data['page']?.sypg_page_code || data['sypg_page_code'];\n const codeFromQuery = this.route.snapshot.queryParamMap.get('sypg_page_code');\n const finalCode = (codeFromRoute || codeFromQuery || this.pageCode()).toString();\n this.pageCode.set(finalCode);\n\n // Page title/subtitle will be updated reactively by the effect when page data is loaded\n // Also check immediately if data is already available\n const cached = finalCode ? this.sharedService.getCachedPageData(finalCode) : null;\n const page = data['page'] || cached?.data?.page;\n if (page) {\n const cfgString = page?.sypg_configuration;\n if (cfgString) {\n try {\n const cfg = JSON.parse(cfgString);\n this.pageTitle.set(cfg.title || page?.sypg_title || '');\n this.pageSubtitle.set(cfg.subTitle || page?.sypg_desc || '');\n } catch (e) {\n console.warn('Invalid page config JSON', e);\n this.pageTitle.set(page?.sypg_title || '');\n this.pageSubtitle.set(page?.sypg_desc || '');\n }\n } else {\n this.pageTitle.set(page?.sypg_title || '');\n this.pageSubtitle.set(page?.sypg_desc || '');\n }\n }\n });\n\n this.loadRequests();\n }\n\n loadRequests(filters?: Record<string, any>, pageIndex: number = this.currentPage(), pageSize: number = this.pageSize()): void {\n this.loading.set(true);\n this.error.set(null);\n\n const queryParams: any = {\n pageIndex,\n pageSize,\n ...filters\n };\n\n this.bonafideService.getRequestList(queryParams)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n // Fix: Handle response structure correctly\n const data = response.data as { requests: BonafideRequest[], total: number };\n this.requests.set(data?.requests || []);\n this.total.set(data?.total || 0);\n } else {\n this.error.set(response.message || 'Failed to load requests');\n this.requests.set([]);\n this.total.set(0);\n }\n this.loading.set(false);\n this.gridComponent()?.clearPageChangeLoading();\n },\n error: (err) => {\n console.error('Error loading requests:', err);\n this.error.set(err.message || 'Failed to load requests');\n this.requests.set([]);\n this.total.set(0);\n this.loading.set(false);\n this.gridComponent()?.clearPageChangeLoading();\n }\n });\n }\n\n onGridEvent(event: GridEvent): void {\n console.log('📡 GRID EVENT:', event.type, event.data);\n switch (event.type) {\n case 'pageChange': {\n if (event.data && typeof event.data === 'object') {\n const pageData = event.data as { pageIndex?: number; pageSize?: number };\n const pageIndex = pageData.pageIndex || 1;\n const pageSize = pageData.pageSize || this.pageSize();\n\n this.currentPage.set(pageIndex);\n this.pageSize.set(pageSize);\n this.loadRequests(this.getFilters(), pageIndex, pageSize);\n } else if (typeof event.data === 'number') {\n this.currentPage.set(event.data);\n this.loadRequests(this.getFilters(), event.data, this.pageSize());\n }\n break;\n }\n case 'refresh':\n this.loadRequests(this.getFilters());\n break;\n case 'search':\n this.currentPage.set(1);\n this.loadRequests(this.getFilters());\n break;\n }\n }\n\n onStatusFilterChange(status: string | number | string[]): void {\n // Convert to string - handle array case by taking first element\n const statusStr = Array.isArray(status) ? status[0] : String(status);\n this.selectedStatus.set(statusStr);\n this.loadRequests(this.getFilters());\n }\n\n getFilters(): any {\n const filters: any = {};\n if (this.selectedStatus() !== 'ALL') {\n // Note: In a real implementation, you'd need to get status ID from master data\n // For now, we'll filter on the frontend or pass the status code\n filters.statusCode = this.selectedStatus();\n }\n return filters;\n }\n\n getStatusText(row: BonafideRequest): string {\n const status = row.abnr_status_id_sygms;\n if (!status) return 'N/A';\n if (typeof status === 'string') return status;\n return status.sygms_title || status.sygms_code || 'N/A';\n }\n\n getStatusBadgeClass(row: BonafideRequest): string {\n const statusText = this.getStatusText(row).toUpperCase();\n if (statusText.includes('PENDING')) {\n return 'tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-yellow-100 tw-text-yellow-800 dark:tw-bg-yellow-900/30 dark:tw-text-yellow-300';\n } else if (statusText.includes('PROGRESS') || statusText.includes('REVIEW')) {\n return 'tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800 dark:tw-bg-blue-900/30 dark:tw-text-blue-300';\n } else if (statusText.includes('APPROVED')) {\n return '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 dark:tw-bg-green-900/30 dark:tw-text-green-300';\n } else if (statusText.includes('COMPLETED')) {\n return 'tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-emerald-100 tw-text-emerald-800 dark:tw-bg-emerald-900/30 dark:tw-text-emerald-300';\n } else if (statusText.includes('REJECTED')) {\n return '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 dark:tw-bg-red-900/30 dark:tw-text-red-300';\n }\n return 'tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-gray-100 tw-text-gray-800 dark:tw-bg-gray-700 dark:tw-text-gray-300';\n }\n\n getActionDropdownItems(row: BonafideRequest): DropdownItem[] {\n const items: DropdownItem[] = [];\n\n if (this.canView()) {\n items.push({\n id: `view-${row._id || 'unknown'}`,\n label: 'View Details',\n icon: 'visibility'\n });\n }\n\n if (this.canDownload()) {\n if (row.abnr_soft_copy_id_cyfm) {\n items.push({\n id: `download-soft-${row._id || 'unknown'}`,\n label: 'Download Soft Copy',\n icon: 'download'\n });\n }\n\n if (row.abnr_stamped_copy_id_cyfm) {\n items.push({\n id: `download-stamped-${row._id || 'unknown'}`,\n label: 'Download Stamped Copy',\n icon: 'download'\n });\n }\n }\n\n if (items.length === 0) {\n items.push({\n id: `no-action-${row._id || 'unknown'}`,\n label: 'No actions available',\n icon: 'info',\n disabled: true\n });\n }\n\n return items;\n }\n\n onActionItemClick(item: DropdownItem, row: BonafideRequest): void {\n if (item.disabled) {\n return;\n }\n\n const itemId = item.id;\n\n\n if (itemId.startsWith('view-')) {\n this.viewRequest(row);\n }\n // Note: Download options removed - certificates now generated on-demand in detail view\n }\n\n viewRequest(row: BonafideRequest): void {\n if (!row._id) {\n this.notificationService.error('Request ID not found');\n return;\n }\n const query = generateStringFromObject({ abnr_id: row._id });\n this.router.navigate(['/control-panel/bonafide/view', query]);\n }\n\n createNew(): void {\n this.router.navigate(['/control-panel/bonafide/create']);\n }\n}\n","<!-- Bonafide Request List with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'bonafide_request' }\">\n <!-- Breadcrumb Actions slot -->\n <div breadcrumb-actions>\n @if (canCreate()) {\n <button cideEleButton variant=\"primary\" size=\"xs\" (click)=\"createNew()\" [adaptive]=\"true\" leftIcon=\"add\"\n class=\"tw-whitespace-nowrap\">\n New Bonafide Request\n </button>\n\n }\n </div>\n\n <div class=\"bonafide-list-container tw-bg-white tw-shadow-lg tw-rounded-lg tw-table tw-h-full\">\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n <div class=\"tw-h-full tw-overflow-auto\">\n <!-- Data Grid Component -->\n <cide-ele-data-grid [config]=\"gridConfig()\" [totalServerItems]=\"total()\" [currentServerPage]=\"currentPage()\"\n [currentServerPageSize]=\"pageSize()\" [serverSidePagination]=\"true\" [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n </div>\n </div>\n\n </div>\n\n <!-- Status Badge 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 <span [class]=\"getStatusBadgeClass(row)\">\n {{ getStatusText(row) }}\n </span>\n </div>\n </ng-template>\n\n <!-- Actions Dropdown Template -->\n <ng-template #actionsDropdownRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <cide-ele-dropdown [items]=\"getActionDropdownItems(row)\" (itemClick)=\"onActionItemClick($event, row)\">\n </cide-ele-dropdown>\n </ng-template>\n\n <!-- Student & Academic Details Template -->\n <ng-template #studentAcademicRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-flex-col tw-gap-0.5\">\n <span class=\"tw-text-sm tw-font-bold tw-text-gray-900\">\n {{ row.abnr_student_id_auth?.user_fullname || 'N/A' }}\n </span>\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-text-[11px] tw-text-gray-500\">\n <span class=\"tw-font-medium\">{{ row.abnr_class_program_id_acacpm?.acacpm_alise_title || 'N/A' }}</span>\n <span class=\"tw-text-gray-300\">|</span>\n <span>{{ row.abnr_term_id_acatrm?.acapt_name || 'N/A' }}</span>\n <span class=\"tw-text-gray-300\">|</span>\n <span>{{ row.abnr_section_id_acapts?.acapts_name || 'N/A' }}</span>\n </div>\n </div>\n </ng-template>\n\n <!-- Date Renderer Template -->\n <ng-template #dateRendererTemplate let-value=\"value\">\n <div class=\"tw-text-center\">\n {{ value | date:'MMM dd, yyyy' }}\n </div>\n </ng-template>\n\n <!-- Status Filter Template (for Grid Action Bar) -->\n <ng-template #statusFilterTemplate>\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <span class=\"tw-text-sm tw-text-gray-500 tw-whitespace-nowrap\">Status:</span>\n <cide-ele-select [options]=\"statusOptions\" [ngModel]=\"selectedStatus()\"\n (ngModelChange)=\"onStatusFilterChange($event)\" placeholder=\"Filter by status\" class=\"tw-w-40\" size=\"sm\">\n </cide-ele-select>\n </div>\n </ng-template>\n</cide-lyt-shared-wrapper>"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
|
8
8
|
import { NotificationService, ConfirmationService, CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideIconComponent, CideSelectComponent, CideFormFieldErrorComponent } from 'cloud-ide-element';
|
|
9
9
|
import { AppStateHelperService, ComponentContextService, RightsService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';
|
|
10
10
|
import { ENTITY_SERVICE_TOKEN } from 'cloud-ide-shared';
|
|
11
|
-
import { c as CideLytClassProgramBranchService, C as CideLytProgramClassService, d as CideLytClassProgramTermService } from './cloud-ide-academics-cloud-ide-academics-
|
|
11
|
+
import { c as CideLytClassProgramBranchService, C as CideLytProgramClassService, d as CideLytClassProgramTermService } from './cloud-ide-academics-cloud-ide-academics-Cdj8wvGj.mjs';
|
|
12
12
|
import { generateObjectFromString, MClassProgramTerm } from 'cloud-ide-lms-model';
|
|
13
13
|
|
|
14
14
|
class ClassProgramTermCreateComponent {
|
|
@@ -1217,4 +1217,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
1217
1217
|
}], ctorParameters: () => [] });
|
|
1218
1218
|
|
|
1219
1219
|
export { ClassProgramTermCreateComponent };
|
|
1220
|
-
//# sourceMappingURL=cloud-ide-academics-class-program-term-create.component-
|
|
1220
|
+
//# sourceMappingURL=cloud-ide-academics-class-program-term-create.component-DoGJXB-s.mjs.map
|