cloud-ide-academics 0.0.24 → 0.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/fesm2022/{cloud-ide-academics-class-program-term-create.component-C5FnRTND.mjs → cloud-ide-academics-class-program-term-create.component-CM7vxAXT.mjs} +45 -14
  2. package/fesm2022/cloud-ide-academics-class-program-term-create.component-CM7vxAXT.mjs.map +1 -0
  3. package/fesm2022/{cloud-ide-academics-class-program-term-list.component-BaFtTKcS.mjs → cloud-ide-academics-class-program-term-list.component-BQ1Etnft.mjs} +47 -12
  4. package/fesm2022/cloud-ide-academics-class-program-term-list.component-BQ1Etnft.mjs.map +1 -0
  5. package/fesm2022/{cloud-ide-academics-cloud-ide-academics-DxRzuyxa.mjs → cloud-ide-academics-cloud-ide-academics-CFEjm3Iz.mjs} +20 -20
  6. package/fesm2022/cloud-ide-academics-cloud-ide-academics-CFEjm3Iz.mjs.map +1 -0
  7. package/fesm2022/{cloud-ide-academics-program-class-create.component-Co60CYKC.mjs → cloud-ide-academics-program-class-create.component-DG6m0cmY.mjs} +4 -5
  8. package/fesm2022/cloud-ide-academics-program-class-create.component-DG6m0cmY.mjs.map +1 -0
  9. package/fesm2022/{cloud-ide-academics-program-class-list.component-jPpK9V-X.mjs → cloud-ide-academics-program-class-list.component-DizuYHy3.mjs} +4 -4
  10. package/fesm2022/cloud-ide-academics-program-class-list.component-DizuYHy3.mjs.map +1 -0
  11. package/fesm2022/cloud-ide-academics-program-term-section-create.component-DHrTb-XI.mjs +248 -0
  12. package/fesm2022/cloud-ide-academics-program-term-section-create.component-DHrTb-XI.mjs.map +1 -0
  13. package/fesm2022/{cloud-ide-academics-program-term-section-list.component-Dshnvq8K.mjs → cloud-ide-academics-program-term-section-list.component-ktIAxvxR.mjs} +3 -3
  14. package/fesm2022/cloud-ide-academics-program-term-section-list.component-ktIAxvxR.mjs.map +1 -0
  15. package/fesm2022/cloud-ide-academics.mjs +1 -1
  16. package/package.json +1 -1
  17. package/fesm2022/cloud-ide-academics-class-program-term-create.component-C5FnRTND.mjs.map +0 -1
  18. package/fesm2022/cloud-ide-academics-class-program-term-list.component-BaFtTKcS.mjs.map +0 -1
  19. package/fesm2022/cloud-ide-academics-cloud-ide-academics-DxRzuyxa.mjs.map +0 -1
  20. package/fesm2022/cloud-ide-academics-program-class-create.component-Co60CYKC.mjs.map +0 -1
  21. package/fesm2022/cloud-ide-academics-program-class-list.component-jPpK9V-X.mjs.map +0 -1
  22. package/fesm2022/cloud-ide-academics-program-term-section-create.component-Dx9JQOwW.mjs +0 -214
  23. package/fesm2022/cloud-ide-academics-program-term-section-create.component-Dx9JQOwW.mjs.map +0 -1
  24. package/fesm2022/cloud-ide-academics-program-term-section-list.component-Dshnvq8K.mjs.map +0 -1
@@ -8,7 +8,7 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
8
8
  import { NotificationService, ConfirmationService, CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideIconComponent, CideSelectComponent } from 'cloud-ide-element';
9
9
  import { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';
10
10
  import { ENTITY_SERVICE_TOKEN } from 'cloud-ide-shared';
11
- import { b as CideLytClassProgramBranchService, C as CideLytProgramClassService } from './cloud-ide-academics-cloud-ide-academics-DxRzuyxa.mjs';
11
+ import { b as CideLytClassProgramBranchService, C as CideLytProgramClassService } from './cloud-ide-academics-cloud-ide-academics-CFEjm3Iz.mjs';
12
12
  import { C as CideLytClassProgramTermService } from './cloud-ide-academics-class-program-term.service-BW4PJQEM.mjs';
13
13
  import { generateObjectFromString } from 'cloud-ide-lms-model';
14
14
 
@@ -453,7 +453,7 @@ class ClassProgramTermCreateComponent {
453
453
  }
454
454
  onSubmit() {
455
455
  if (this.isViewMode()) {
456
- this.router.navigate(['/control-panel/program-term-section-management']);
456
+ this.router.navigate(['/control-panel/class-program-term']);
457
457
  return;
458
458
  }
459
459
  if (this.classProgramTermForm.invalid) {
@@ -491,7 +491,14 @@ class ClassProgramTermCreateComponent {
491
491
  if (response?.success) {
492
492
  const action = this.isEditMode() ? 'updated' : 'created';
493
493
  this.notificationService.success(`Class program term has been ${action} successfully.`);
494
- this.router.navigate(['/control-panel/program-term-section-management']);
494
+ if (this.isEditMode()) {
495
+ // Navigate back to list on edit mode
496
+ this.router.navigate(['/control-panel/class-program-term']);
497
+ }
498
+ else {
499
+ // In create mode, reset only Term Code, Term Name, and Description
500
+ this.resetFormFields();
501
+ }
495
502
  }
496
503
  else {
497
504
  this.error.set(response?.message || 'Failed to save class program term');
@@ -528,22 +535,46 @@ class ClassProgramTermCreateComponent {
528
535
  this.clearDateConstraints();
529
536
  this.endDateMinDate.set('');
530
537
  }
538
+ /**
539
+ * Reset only Term Code, Term Name, and Description fields after successful save
540
+ */
541
+ resetFormFields() {
542
+ // Get current values to preserve
543
+ const currentProgramClass = this.classProgramTermForm.get('acapt_class_program_id_acacpm')?.value;
544
+ const currentBranch = this.classProgramTermForm.get('acapt_class_program_branch_id_acabrn')?.value;
545
+ const currentStartDate = this.classProgramTermForm.get('acapt_start_date')?.value;
546
+ const currentEndDate = this.classProgramTermForm.get('acapt_end_date')?.value;
547
+ const currentIsActive = this.classProgramTermForm.get('acapt_isactive')?.value;
548
+ const currentIsLocked = this.classProgramTermForm.get('acapt_islocked')?.value;
549
+ // Reset only the specified fields
550
+ this.classProgramTermForm.patchValue({
551
+ acapt_code: '',
552
+ acapt_name: '',
553
+ acapt_description: '',
554
+ // Preserve other fields
555
+ acapt_class_program_id_acacpm: currentProgramClass,
556
+ acapt_class_program_branch_id_acabrn: currentBranch,
557
+ acapt_start_date: currentStartDate,
558
+ acapt_end_date: currentEndDate,
559
+ acapt_isactive: currentIsActive,
560
+ acapt_islocked: currentIsLocked
561
+ });
562
+ // Clear validation errors for reset fields
563
+ this.classProgramTermForm.get('acapt_code')?.setErrors(null);
564
+ this.classProgramTermForm.get('acapt_name')?.setErrors(null);
565
+ this.classProgramTermForm.get('acapt_description')?.setErrors(null);
566
+ }
531
567
  /**
532
568
  * Go back to class program term list
533
569
  */
534
570
  goBackToClassProgramTermList() {
535
- this.router.navigate(['/control-panel/program-term-section-management']);
571
+ this.router.navigate(['/control-panel/class-program-term']);
536
572
  }
537
573
  /**
538
- * Cancel form and optionally navigate back
574
+ * Cancel form and navigate back to listing page
539
575
  */
540
576
  cancelForm() {
541
- if (this.isEditMode()) {
542
- this.goBackToClassProgramTermList();
543
- }
544
- else {
545
- this.resetForm();
546
- }
577
+ this.goBackToClassProgramTermList();
547
578
  }
548
579
  /**
549
580
  * Get page title based on mode
@@ -595,7 +626,7 @@ class ClassProgramTermCreateComponent {
595
626
  console.log('🧹 ClassProgramTermCreateComponent: Component state cleaned up');
596
627
  }
597
628
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ClassProgramTermCreateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
598
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: ClassProgramTermCreateComponent, isStandalone: true, selector: "cide-academics-class-program-term-create", ngImport: i0, template: "<!-- \r\n CLASS PROGRAM TERM MASTER FORM\r\n \r\n Enterprise-Level Styling with Tailwind CSS\r\n Features: Responsive grids, proper typography, enhanced user experience\r\n-->\r\n\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_term' }\"\r\n [breadcrumb_data]=\"breadcrumbData()\">\r\n \r\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"classProgramTermForm\"\r\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\r\n\r\n <!-- Form Content -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\r\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\r\n <!-- Class Program Term Information -->\r\n <div class=\"tw-space-y-6\">\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\r\n <cide-ele-input label=\"Term Code *\" formControlName=\"acapt_code\" placeholder=\"e.g., T1, T2, T3\"\r\n size=\"md\" leadingIcon=\"code\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Term Name *\" formControlName=\"acapt_name\"\r\n placeholder=\"e.g., First Term, Second Term\" size=\"md\" leadingIcon=\"schedule\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <div>\r\n <cide-ele-textarea label=\"Description\" formControlName=\"acapt_description\"\r\n placeholder=\"Enter detailed description of the term...\" rows=\"3\" size=\"md\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\r\n <cide-ele-input id=\"acapt_start_date\" label=\"Start Date\" formControlName=\"acapt_start_date\" type=\"date\"\r\n size=\"md\" leadingIcon=\"event\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"acapt_end_date\" label=\"End Date\" formControlName=\"acapt_end_date\" type=\"date\"\r\n [min]=\"endDateMinDate()\" size=\"md\" leadingIcon=\"event\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <div class=\"tw-p-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-lg\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-text-blue-500\"></cide-ele-icon>\r\n <span class=\"tw-text-sm tw-text-blue-700\">\r\n Sequence will be automatically managed through drag-and-drop on the listing page\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\r\n <div class=\"tw-space-y-2\">\r\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Program Class *</label>\r\n <cide-ele-select \r\n formControlName=\"acapt_class_program_id_acacpm\" \r\n placeholder=\"Select program class\"\r\n [disabled]=\"isViewMode()\" \r\n valueKey=\"_id\" \r\n labelKey=\"acacpm_alise_title\" \r\n [options]=\"programClassOptions()\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <div class=\"tw-space-y-2\">\r\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Class Program Branch *</label>\r\n <cide-ele-select \r\n formControlName=\"acapt_class_program_branch_id_acabrn\" \r\n placeholder=\"Select branch\"\r\n [disabled]=\"isViewMode()\" \r\n valueKey=\"_id\" \r\n labelKey=\"acabrn_name\" \r\n [options]=\"branchOptions()\">\r\n </cide-ele-select>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\r\n <div\r\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\"\r\n [class.tw-cursor-not-allowed]=\"isViewMode()\"\r\n [class.tw-opacity-60]=\"isViewMode()\"\r\n (click)=\"onActiveCardClick()\">\r\n <cide-ele-input formControlName=\"acapt_isactive\" type=\"checkbox\" size=\"md\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this term</span>\r\n </div>\r\n </div>\r\n\r\n <div\r\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\"\r\n [class.tw-cursor-not-allowed]=\"isViewMode()\"\r\n [class.tw-opacity-60]=\"isViewMode()\"\r\n (click)=\"onLockedCardClick()\">\r\n <cide-ele-input formControlName=\"acapt_islocked\" type=\"checkbox\" size=\"md\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Display -->\r\n @if (error()) {\r\n <div class=\"tw-mt-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-lg\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon variant=\"red\" size=\"sm\">error</cide-ele-icon>\r\n <span class=\"tw-text-sm tw-font-medium tw-text-red-800\">{{ error() }}</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-table-row tw-h-0\">\r\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\">\r\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\r\n [disabled]=\"loading()\">\r\n Reset Form\r\n </button>\r\n\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"cancelForm()\" leftIcon=\"close\"\r\n [disabled]=\"loading()\">\r\n Cancel\r\n </button>\r\n\r\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || classProgramTermForm.invalid\"\r\n [loading]=\"loading()\" leftIcon=\"save\">\r\n {{ isEditMode() ? 'Update Class Program Term' : 'Create Class Program Term' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n</cide-lyt-shared-wrapper>\r\n\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CideInputComponent, selector: "cide-ele-input", inputs: ["fill", "label", "labelHide", "disabled", "clearInput", "labelPlacement", "labelDir", "placeholder", "leadingIcon", "trailingIcon", "helperText", "helperTextCollapse", "hideHelperAndErrorText", "errorText", "maxlength", "minlength", "required", "autocapitalize", "autocomplete", "type", "width", "id", "ngModel", "option", "min", "max", "size"], outputs: ["ngModelChange"] }, { kind: "component", type: CideTextareaComponent, selector: "cide-ele-textarea", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "minlength", "maxlength", "rows", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput"], outputs: ["ngModelChange"] }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton], cide-ele-button", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey"], outputs: ["ngModelChange", "change", "searchChange"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
629
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: ClassProgramTermCreateComponent, isStandalone: true, selector: "cide-academics-class-program-term-create", ngImport: i0, template: "<!-- \n CLASS PROGRAM TERM MASTER FORM\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_term' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"classProgramTermForm\"\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Form Content -->\n <div class=\"tw-table-row\">\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 <!-- Class Program Term Information -->\n <div class=\"tw-space-y-6\">\n <!-- Program Class and Branch 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\">Program Class *</label>\n <cide-ele-select \n formControlName=\"acapt_class_program_id_acacpm\" \n placeholder=\"Select program class\"\n [disabled]=\"isViewMode()\" \n valueKey=\"_id\" \n labelKey=\"acacpm_alise_title\" \n [options]=\"programClassOptions()\">\n </cide-ele-select>\n </div>\n\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Class Program Branch *</label>\n <cide-ele-select \n formControlName=\"acapt_class_program_branch_id_acabrn\" \n placeholder=\"Select branch\"\n [disabled]=\"isViewMode()\" \n valueKey=\"_id\" \n labelKey=\"acabrn_name\" \n [options]=\"branchOptions()\">\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=\"Term Code *\" formControlName=\"acapt_code\" placeholder=\"e.g., T1, T2, T3\"\n size=\"md\" leadingIcon=\"code\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Term Name *\" formControlName=\"acapt_name\"\n placeholder=\"e.g., First Term, Second Term\" size=\"md\" leadingIcon=\"schedule\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-textarea label=\"Description\" formControlName=\"acapt_description\"\n placeholder=\"Enter detailed description of the term...\" rows=\"3\" size=\"md\">\n </cide-ele-textarea>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input id=\"acapt_start_date\" label=\"Start Date\" formControlName=\"acapt_start_date\" type=\"date\"\n size=\"md\" leadingIcon=\"event\">\n </cide-ele-input>\n\n <cide-ele-input id=\"acapt_end_date\" label=\"End Date\" formControlName=\"acapt_end_date\" type=\"date\"\n [min]=\"endDateMinDate()\" size=\"md\" leadingIcon=\"event\">\n </cide-ele-input>\n </div>\n\n <div class=\"tw-p-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-lg\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-text-blue-500\"></cide-ele-icon>\n <span class=\"tw-text-sm tw-text-blue-700\">\n Sequence will be automatically managed through drag-and-drop on the listing page\n </span>\n </div>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n [class.tw-cursor-not-allowed]=\"isViewMode()\"\n [class.tw-opacity-60]=\"isViewMode()\"\n (click)=\"onActiveCardClick()\">\n <cide-ele-input formControlName=\"acapt_isactive\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this term</span>\n </div>\n </div>\n\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n [class.tw-cursor-not-allowed]=\"isViewMode()\"\n [class.tw-opacity-60]=\"isViewMode()\"\n (click)=\"onLockedCardClick()\">\n <cide-ele-input formControlName=\"acapt_islocked\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Error Display -->\n @if (error()) {\n <div class=\"tw-mt-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-lg\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon variant=\"red\" size=\"sm\">error</cide-ele-icon>\n <span class=\"tw-text-sm tw-font-medium tw-text-red-800\">{{ error() }}</span>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"cancelForm()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || classProgramTermForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ isEditMode() ? 'Update Class Program Term' : 'Create Class Program Term' }}\n </button>\n </div>\n </div>\n </div>\n </form>\n</cide-lyt-shared-wrapper>\n\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CideInputComponent, selector: "cide-ele-input", inputs: ["fill", "label", "labelHide", "disabled", "clearInput", "labelPlacement", "labelDir", "placeholder", "leadingIcon", "trailingIcon", "helperText", "helperTextCollapse", "hideHelperAndErrorText", "errorText", "maxlength", "minlength", "required", "autocapitalize", "autocomplete", "type", "width", "id", "ngModel", "option", "min", "max", "size"], outputs: ["ngModelChange"] }, { kind: "component", type: CideTextareaComponent, selector: "cide-ele-textarea", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "minlength", "maxlength", "rows", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput"], outputs: ["ngModelChange"] }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton], cide-ele-button", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey"], outputs: ["ngModelChange", "change", "searchChange"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
599
630
  }
600
631
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ClassProgramTermCreateComponent, decorators: [{
601
632
  type: Component,
@@ -608,8 +639,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
608
639
  CideIconComponent,
609
640
  CideSelectComponent,
610
641
  CideLytSharedWrapperComponent
611
- ], template: "<!-- \r\n CLASS PROGRAM TERM MASTER FORM\r\n \r\n Enterprise-Level Styling with Tailwind CSS\r\n Features: Responsive grids, proper typography, enhanced user experience\r\n-->\r\n\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_term' }\"\r\n [breadcrumb_data]=\"breadcrumbData()\">\r\n \r\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"classProgramTermForm\"\r\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\r\n\r\n <!-- Form Content -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\r\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\r\n <!-- Class Program Term Information -->\r\n <div class=\"tw-space-y-6\">\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\r\n <cide-ele-input label=\"Term Code *\" formControlName=\"acapt_code\" placeholder=\"e.g., T1, T2, T3\"\r\n size=\"md\" leadingIcon=\"code\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Term Name *\" formControlName=\"acapt_name\"\r\n placeholder=\"e.g., First Term, Second Term\" size=\"md\" leadingIcon=\"schedule\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <div>\r\n <cide-ele-textarea label=\"Description\" formControlName=\"acapt_description\"\r\n placeholder=\"Enter detailed description of the term...\" rows=\"3\" size=\"md\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\r\n <cide-ele-input id=\"acapt_start_date\" label=\"Start Date\" formControlName=\"acapt_start_date\" type=\"date\"\r\n size=\"md\" leadingIcon=\"event\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"acapt_end_date\" label=\"End Date\" formControlName=\"acapt_end_date\" type=\"date\"\r\n [min]=\"endDateMinDate()\" size=\"md\" leadingIcon=\"event\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <div class=\"tw-p-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-lg\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-text-blue-500\"></cide-ele-icon>\r\n <span class=\"tw-text-sm tw-text-blue-700\">\r\n Sequence will be automatically managed through drag-and-drop on the listing page\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\r\n <div class=\"tw-space-y-2\">\r\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Program Class *</label>\r\n <cide-ele-select \r\n formControlName=\"acapt_class_program_id_acacpm\" \r\n placeholder=\"Select program class\"\r\n [disabled]=\"isViewMode()\" \r\n valueKey=\"_id\" \r\n labelKey=\"acacpm_alise_title\" \r\n [options]=\"programClassOptions()\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <div class=\"tw-space-y-2\">\r\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Class Program Branch *</label>\r\n <cide-ele-select \r\n formControlName=\"acapt_class_program_branch_id_acabrn\" \r\n placeholder=\"Select branch\"\r\n [disabled]=\"isViewMode()\" \r\n valueKey=\"_id\" \r\n labelKey=\"acabrn_name\" \r\n [options]=\"branchOptions()\">\r\n </cide-ele-select>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\r\n <div\r\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\"\r\n [class.tw-cursor-not-allowed]=\"isViewMode()\"\r\n [class.tw-opacity-60]=\"isViewMode()\"\r\n (click)=\"onActiveCardClick()\">\r\n <cide-ele-input formControlName=\"acapt_isactive\" type=\"checkbox\" size=\"md\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this term</span>\r\n </div>\r\n </div>\r\n\r\n <div\r\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\"\r\n [class.tw-cursor-not-allowed]=\"isViewMode()\"\r\n [class.tw-opacity-60]=\"isViewMode()\"\r\n (click)=\"onLockedCardClick()\">\r\n <cide-ele-input formControlName=\"acapt_islocked\" type=\"checkbox\" size=\"md\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Display -->\r\n @if (error()) {\r\n <div class=\"tw-mt-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-lg\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon variant=\"red\" size=\"sm\">error</cide-ele-icon>\r\n <span class=\"tw-text-sm tw-font-medium tw-text-red-800\">{{ error() }}</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-table-row tw-h-0\">\r\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\">\r\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\r\n [disabled]=\"loading()\">\r\n Reset Form\r\n </button>\r\n\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"cancelForm()\" leftIcon=\"close\"\r\n [disabled]=\"loading()\">\r\n Cancel\r\n </button>\r\n\r\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || classProgramTermForm.invalid\"\r\n [loading]=\"loading()\" leftIcon=\"save\">\r\n {{ isEditMode() ? 'Update Class Program Term' : 'Create Class Program Term' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n</cide-lyt-shared-wrapper>\r\n\r\n" }]
642
+ ], template: "<!-- \n CLASS PROGRAM TERM MASTER FORM\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_term' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"classProgramTermForm\"\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Form Content -->\n <div class=\"tw-table-row\">\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 <!-- Class Program Term Information -->\n <div class=\"tw-space-y-6\">\n <!-- Program Class and Branch 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\">Program Class *</label>\n <cide-ele-select \n formControlName=\"acapt_class_program_id_acacpm\" \n placeholder=\"Select program class\"\n [disabled]=\"isViewMode()\" \n valueKey=\"_id\" \n labelKey=\"acacpm_alise_title\" \n [options]=\"programClassOptions()\">\n </cide-ele-select>\n </div>\n\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Class Program Branch *</label>\n <cide-ele-select \n formControlName=\"acapt_class_program_branch_id_acabrn\" \n placeholder=\"Select branch\"\n [disabled]=\"isViewMode()\" \n valueKey=\"_id\" \n labelKey=\"acabrn_name\" \n [options]=\"branchOptions()\">\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=\"Term Code *\" formControlName=\"acapt_code\" placeholder=\"e.g., T1, T2, T3\"\n size=\"md\" leadingIcon=\"code\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Term Name *\" formControlName=\"acapt_name\"\n placeholder=\"e.g., First Term, Second Term\" size=\"md\" leadingIcon=\"schedule\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-textarea label=\"Description\" formControlName=\"acapt_description\"\n placeholder=\"Enter detailed description of the term...\" rows=\"3\" size=\"md\">\n </cide-ele-textarea>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input id=\"acapt_start_date\" label=\"Start Date\" formControlName=\"acapt_start_date\" type=\"date\"\n size=\"md\" leadingIcon=\"event\">\n </cide-ele-input>\n\n <cide-ele-input id=\"acapt_end_date\" label=\"End Date\" formControlName=\"acapt_end_date\" type=\"date\"\n [min]=\"endDateMinDate()\" size=\"md\" leadingIcon=\"event\">\n </cide-ele-input>\n </div>\n\n <div class=\"tw-p-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-lg\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-text-blue-500\"></cide-ele-icon>\n <span class=\"tw-text-sm tw-text-blue-700\">\n Sequence will be automatically managed through drag-and-drop on the listing page\n </span>\n </div>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n [class.tw-cursor-not-allowed]=\"isViewMode()\"\n [class.tw-opacity-60]=\"isViewMode()\"\n (click)=\"onActiveCardClick()\">\n <cide-ele-input formControlName=\"acapt_isactive\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this term</span>\n </div>\n </div>\n\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n [class.tw-cursor-not-allowed]=\"isViewMode()\"\n [class.tw-opacity-60]=\"isViewMode()\"\n (click)=\"onLockedCardClick()\">\n <cide-ele-input formControlName=\"acapt_islocked\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Error Display -->\n @if (error()) {\n <div class=\"tw-mt-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-lg\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon variant=\"red\" size=\"sm\">error</cide-ele-icon>\n <span class=\"tw-text-sm tw-font-medium tw-text-red-800\">{{ error() }}</span>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"cancelForm()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || classProgramTermForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ isEditMode() ? 'Update Class Program Term' : 'Create Class Program Term' }}\n </button>\n </div>\n </div>\n </div>\n </form>\n</cide-lyt-shared-wrapper>\n\n" }]
612
643
  }], ctorParameters: () => [] });
613
644
 
614
645
  export { ClassProgramTermCreateComponent };
615
- //# sourceMappingURL=cloud-ide-academics-class-program-term-create.component-C5FnRTND.mjs.map
646
+ //# sourceMappingURL=cloud-ide-academics-class-program-term-create.component-CM7vxAXT.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-ide-academics-class-program-term-create.component-CM7vxAXT.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/class-program-term-management/components/class-program-term-create/class-program-term-create.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/class-program-term-management/components/class-program-term-create/class-program-term-create.component.html"],"sourcesContent":["import { Component, inject, signal, 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 { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideIconComponent, CideSelectComponent, NotificationService, ConfirmationService } from 'cloud-ide-element';\nimport { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { ENTITY_SERVICE_TOKEN, type IEntityService } from 'cloud-ide-shared';\nimport { CideLytClassProgramBranchService } from '../../../class-program-branch-management/services/class-program-branch.service';\nimport { CideLytProgramClassService } from '../../../program-class-management/services/program-class.service';\nimport { CideLytClassProgramTermService } from '../../services/class-program-term.service';\nimport { Observable, forkJoin, of } from 'rxjs';\nimport { map, catchError, switchMap } from 'rxjs/operators';\nimport { \n type AcaClassPrgBranchListPayload,\n type AcaClassPrgBranchResponse,\n type MClassProgramTermInsertUpdatePayload,\n generateObjectFromString\n} from 'cloud-ide-lms-model';\n\n// Interfaces based on the model files\ninterface ClassProgramTerm {\n _id?: string;\n acapt_code?: string;\n acapt_name?: string;\n acapt_description?: string;\n acapt_class_program_id_acacpm?: string;\n acapt_class_program_branch_id_acabrn?: string;\n acapt_parent_class_prog_term_acapt?: string;\n acapt_sequence?: number;\n acapt_start_date?: string;\n acapt_end_date?: string;\n acapt_isactive?: boolean;\n acapt_islocked?: boolean;\n}\n\ninterface ProgramClass {\n _id?: string;\n acacpm_name?: string;\n acacpm_code?: string;\n acacpm_alise_title?: string;\n}\n\ninterface ClassProgramBranch {\n _id?: string;\n acabrn_name?: string;\n acabrn_code?: string;\n acabrn_class_program_id_acacpm?: any;\n}\n\n\n@Component({\n selector: 'cide-academics-class-program-term-create',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideInputComponent,\n CideTextareaComponent,\n CideEleButtonComponent,\n CideIconComponent,\n CideSelectComponent,\n CideLytSharedWrapperComponent\n ],\n templateUrl: './class-program-term-create.component.html'\n})\nexport class ClassProgramTermCreateComponent implements OnInit, OnDestroy {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private fb = inject(FormBuilder);\n private entityService = inject<IEntityService>(ENTITY_SERVICE_TOKEN);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private appState = inject(AppStateHelperService);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\n private classProgramBranchService = inject(CideLytClassProgramBranchService);\n private programClassService = inject(CideLytProgramClassService);\n private classProgramTermService = inject(CideLytClassProgramTermService);\n\n classProgramTermForm: FormGroup;\n loading = signal(false);\n error = signal<string | null>(null);\n\n // Class program term information from route\n classProgramTermId = signal<string>('');\n isEditMode = signal(false);\n isViewMode = signal(false);\n\n // Data signals\n programClasses = signal<ProgramClass[]>([]);\n classProgramBranches = signal<ClassProgramBranch[]>([]);\n\n // Options for dropdowns\n programClassOptions = signal<ProgramClass[]>([]);\n branchOptions = signal<ClassProgramBranch[]>([]);\n parentTermOptions = signal<ClassProgramTerm[]>([]);\n\n // Route parameters\n acabrnId = signal<string | null>(null);\n acacpmId = signal<string | null>(null);\n\n // Signal for breadcrumb data that will be passed to shared wrapper\n breadcrumbData = signal<{ id: string; label: string; icon?: string; url?: string }[]>([]);\n\n // Date constraints\n endDateMinDate = signal<string>('');\n\n constructor() {\n this.classProgramTermForm = this.fb.group({\n // Basic Class Program Term Information\n acapt_code: ['', [Validators.required]],\n acapt_name: ['', [Validators.required]],\n acapt_description: [''],\n acapt_class_program_id_acacpm: ['', [Validators.required]],\n acapt_class_program_branch_id_acabrn: ['', [Validators.required]],\n acapt_parent_class_prog_term_acapt: [''],\n acapt_start_date: [''],\n acapt_end_date: [''],\n acapt_isactive: [true],\n acapt_islocked: [false]\n });\n }\n\n ngOnInit(): void {\n this.initializeComponent();\n this.setupFormSubscriptions();\n this.updateBreadcrumbData();\n }\n\n /**\n * Update breadcrumb data based on mode\n */\n private updateBreadcrumbData(): void {\n const additionalItems: { id: string; label: string; icon?: string; url?: string }[] = [];\n \n if (this.isViewMode()) {\n additionalItems.push({\n id: 'view',\n label: 'View',\n icon: 'visibility',\n url: undefined\n });\n } else if (this.isEditMode()) {\n additionalItems.push({\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n url: undefined\n });\n } else {\n additionalItems.push({\n id: 'create',\n label: 'Create',\n icon: 'add',\n url: undefined\n });\n }\n \n this.breadcrumbData.set(additionalItems);\n }\n\n /**\n * Setup form subscriptions for dependent dropdowns\n */\n private setupFormSubscriptions(): void {\n // Watch for program class changes to filter branches\n this.classProgramTermForm.get('acapt_class_program_id_acacpm')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(programClassId => {\n if (programClassId) {\n this.loadBranchesForProgramClass(programClassId);\n // Clear branch selection when program class changes\n this.classProgramTermForm.patchValue({\n acapt_class_program_branch_id_acabrn: ''\n });\n } else {\n this.branchOptions.set([]);\n }\n });\n\n // Watch for branch changes to determine parent term\n this.classProgramTermForm.get('acapt_class_program_branch_id_acabrn')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(branchId => {\n if (branchId) {\n this.determineParentTerm(branchId);\n } else {\n // Clear parent term when branch is cleared\n this.classProgramTermForm.patchValue({\n acapt_parent_class_prog_term_acapt: ''\n });\n }\n });\n\n // Watch for parent term changes to set date constraints\n this.classProgramTermForm.get('acapt_parent_class_prog_term_acapt')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(parentTermId => {\n this.loadParentTermDetails(parentTermId);\n });\n\n // Watch for start date changes to set minimum date for end date\n this.classProgramTermForm.get('acapt_start_date')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(startDate => {\n this.updateEndDateMinDate(startDate);\n });\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n // Check route parameters to determine mode\n this.checkRouteParams();\n \n const url = this.router.url;\n const queryParams = this.route.snapshot.queryParams;\n \n if (url.includes('/view/')) {\n this.isViewMode.set(true);\n this.loadClassProgramTermForView(queryParams);\n } else if (url.includes('/edit/')) {\n this.isEditMode.set(true);\n this.loadClassProgramTermForEdit(queryParams);\n } else {\n // Create mode\n this.isEditMode.set(false);\n this.isViewMode.set(false);\n }\n\n // Update breadcrumb after mode is determined\n this.updateBreadcrumbData();\n\n // Load dropdown options\n this.loadDropdownOptions();\n }\n\n /**\n * Check route parameters for acabrn_id and acacpm_id\n */\n private checkRouteParams(): void {\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\n const queryParams = params['query'];\n console.log('🏢 Route params:', params, 'queryParams:', queryParams);\n\n if (queryParams) {\n // Query parameters passed (following page-controls pattern)\n const queryData = generateObjectFromString(queryParams);\n console.log('🏢 Class Program Term Create params from route:', queryData);\n \n if (queryData?.acabrn_id) {\n this.acabrnId.set(queryData.acabrn_id as string);\n console.log('🏢 Branch ID from route:', queryData.acabrn_id);\n }\n \n if (queryData?.acacpm_id) {\n this.acacpmId.set(queryData.acacpm_id as string);\n console.log('🏢 Class Program ID from route:', queryData.acacpm_id);\n }\n }\n });\n }\n\n /**\n * Load class program term for viewing\n */\n private loadClassProgramTermForView(queryParams: any): void {\n // Implementation for view mode\n this.classProgramTermForm.disable();\n }\n\n /**\n * Load class program term for editing\n */\n private loadClassProgramTermForEdit(queryParams: any): void {\n // Implementation for edit mode\n }\n\n /**\n * Load dropdown options\n */\n private loadDropdownOptions(): void {\n // Load program classes\n this.loadProgramClasses();\n \n // Load branches\n this.loadClassProgramBranches();\n }\n\n /**\n * Load program classes\n */\n private loadProgramClasses(): void {\n this.programClassService.getProgramClassList({ pagination: false })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('✅ Program classes loaded:', response);\n if (response?.success && response.data) {\n this.programClassOptions.set(response.data as ProgramClass[]);\n \n // Pre-select program class if provided in route\n const acacpmId = this.acacpmId();\n if (acacpmId) {\n this.classProgramTermForm.patchValue({\n acapt_class_program_id_acacpm: acacpmId\n });\n }\n } else {\n console.warn('⚠️ No program class data received');\n this.programClassOptions.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading program classes:', error);\n this.programClassOptions.set([]);\n }\n });\n }\n\n /**\n * Load class program branches\n */\n private loadClassProgramBranches(): void {\n const acacpmId = this.acacpmId();\n if (acacpmId) {\n this.loadBranchesForProgramClass(acacpmId);\n }\n }\n\n /**\n * Load branches for a specific program class\n */\n private loadBranchesForProgramClass(programClassId: string): void {\n const payload: AcaClassPrgBranchListPayload = {\n pagination: false,\n pageIndex: 0,\n pageSize: 100,\n acabrn_class_program_id_acacpm: programClassId\n };\n\n this.classProgramBranchService.getClassProgramBranchList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: any) => {\n console.log('✅ Class program branches loaded for program class:', programClassId, response);\n if (response?.success && response.data) {\n this.branchOptions.set(response.data as ClassProgramBranch[]);\n \n // Pre-select branch if provided in route and not already set\n const acabrnId = this.acabrnId();\n const currentBranchId = this.classProgramTermForm.get('acapt_class_program_branch_id_acabrn')?.value;\n if (acabrnId && !currentBranchId) {\n this.classProgramTermForm.patchValue({\n acapt_class_program_branch_id_acabrn: acabrnId\n });\n }\n } else {\n console.warn('⚠️ No branch data received');\n this.branchOptions.set([]);\n }\n },\n error: (error: any) => {\n console.error('❌ Error loading branches:', error);\n this.branchOptions.set([]);\n }\n });\n }\n\n /**\n * Determine parent term based on selected branch\n * This method will be called internally when branch is selected\n */\n private determineParentTerm(branchId: string): void {\n // Find the selected branch from the options\n const selectedBranch = this.branchOptions().find(branch => branch._id === branchId);\n \n if (selectedBranch) {\n console.log('🏢 Determining parent term for branch:', selectedBranch.acabrn_name);\n \n // Load existing terms for this branch to find potential parent terms\n this.loadParentTermsForBranch(branchId);\n }\n }\n\n /**\n * Load parent terms for a specific branch\n */\n private loadParentTermsForBranch(branchId: string): void {\n // TODO: Implement API call to get existing terms for the branch\n // This will help determine which terms can be parent terms\n console.log('🏢 Loading parent terms for branch:', branchId);\n \n // Example implementation - replace with actual API call\n // const payload = {\n // acabrn_id: branchId,\n // pagination: false\n // };\n \n // this.classProgramTermService.getClassProgramTermList(payload)\n // .pipe(takeUntilDestroyed(this.destroyRef))\n // .subscribe({\n // next: (response) => {\n // if (response?.success && response.data) {\n // // Filter terms that can be parent terms (e.g., terms without parent)\n // const parentTerms = response.data.filter(term => !term.acapt_parent_class_prog_term_acapt);\n // this.parentTermOptions.set(parentTerms);\n // }\n // },\n // error: (error) => {\n // console.error('❌ Error loading parent terms:', error);\n // this.parentTermOptions.set([]);\n // }\n // });\n \n // For now, set empty array\n this.parentTermOptions.set([]);\n }\n\n /**\n * Load parent term details for date validation\n * This method will be called when a parent term is selected\n */\n private loadParentTermDetails(parentTermId: string): void {\n if (!parentTermId) {\n // Clear date constraints when no parent is selected\n this.clearDateConstraints();\n return;\n }\n\n // TODO: Implement API call to get parent term details\n // For now, we'll use mock data or implement based on your API\n console.log('🏢 Loading parent term details for ID:', parentTermId);\n \n // Example implementation - replace with actual API call\n // this.classProgramTermService.getClassProgramTermById({ _id: parentTermId })\n // .pipe(takeUntilDestroyed(this.destroyRef))\n // .subscribe({\n // next: (response) => {\n // if (response?.success && response.data) {\n // const parentTerm = response.data;\n // this.setDateConstraints(parentTerm.acapt_start_date, parentTerm.acapt_end_date);\n // }\n // },\n // error: (error) => {\n // console.error('❌ Error loading parent term details:', error);\n // }\n // });\n }\n\n /**\n * Set date constraints based on parent term dates\n */\n private setDateConstraints(parentStartDate: string, parentEndDate: string): void {\n console.log('🏢 Setting date constraints:', { parentStartDate, parentEndDate });\n \n // Update form validation to ensure child dates are within parent range\n const startDateControl = this.classProgramTermForm.get('acapt_start_date');\n const endDateControl = this.classProgramTermForm.get('acapt_end_date');\n \n if (startDateControl && endDateControl) {\n // Add custom validators for date range\n startDateControl.setValidators([\n this.dateRangeValidator(parentStartDate, parentEndDate, 'start')\n ]);\n endDateControl.setValidators([\n this.dateRangeValidator(parentStartDate, parentEndDate, 'end')\n ]);\n \n // Update validation\n startDateControl.updateValueAndValidity();\n endDateControl.updateValueAndValidity();\n }\n }\n\n /**\n * Clear date constraints when no parent is selected\n */\n private clearDateConstraints(): void {\n const startDateControl = this.classProgramTermForm.get('acapt_start_date');\n const endDateControl = this.classProgramTermForm.get('acapt_end_date');\n \n if (startDateControl && endDateControl) {\n // Remove custom validators\n startDateControl.clearValidators();\n endDateControl.clearValidators();\n \n // Update validation\n startDateControl.updateValueAndValidity();\n endDateControl.updateValueAndValidity();\n }\n }\n\n /**\n * Custom validator for date range constraints\n */\n private dateRangeValidator(parentStartDate: string, parentEndDate: string, dateType: 'start' | 'end') {\n return (control: any) => {\n if (!control.value || !parentStartDate || !parentEndDate) {\n return null; // No validation if no date or parent dates\n }\n\n const selectedDate = new Date(control.value);\n const parentStart = new Date(parentStartDate);\n const parentEnd = new Date(parentEndDate);\n\n if (dateType === 'start') {\n // Start date should be >= parent start date and < parent end date\n if (selectedDate < parentStart || selectedDate >= parentEnd) {\n return { \n dateRangeError: { \n message: `Start date must be between ${parentStartDate} and ${parentEndDate}` \n } \n };\n }\n } else if (dateType === 'end') {\n // End date should be > parent start date and <= parent end date\n if (selectedDate <= parentStart || selectedDate > parentEnd) {\n return { \n dateRangeError: { \n message: `End date must be between ${parentStartDate} and ${parentEndDate}` \n } \n };\n }\n }\n\n return null; // Valid\n };\n }\n\n /**\n * Update minimum date for end date based on start date\n */\n private updateEndDateMinDate(startDate: string): void {\n if (startDate) {\n // Set the minimum date for end date to be the start date\n this.endDateMinDate.set(startDate);\n \n // If end date is already set and is before the new start date, clear it\n const endDate = this.classProgramTermForm.get('acapt_end_date')?.value;\n if (endDate && endDate < startDate) {\n this.classProgramTermForm.patchValue({\n acapt_end_date: ''\n });\n }\n \n console.log('🏢 Updated end date minimum date to:', startDate);\n } else {\n // Clear minimum date constraint if no start date\n this.endDateMinDate.set('');\n }\n }\n\n\n onSubmit() {\n if (this.isViewMode()) {\n this.router.navigate(['/control-panel/class-program-term']);\n return;\n }\n\n if (this.classProgramTermForm.invalid) {\n this.notificationService.error('Please fill in all required fields correctly.');\n this.markFormGroupTouched();\n return;\n }\n\n this.loading.set(true);\n this.error.set(null);\n\n const formData = this.classProgramTermForm.value;\n console.log('Class Program Term Form Data:', formData);\n\n // Prepare payload for API call\n const payload: MClassProgramTermInsertUpdatePayload = {\n acapt_code: formData.acapt_code,\n acapt_name: formData.acapt_name,\n acapt_class_program_id_acacpm: formData.acapt_class_program_id_acacpm,\n acapt_class_prg_branch_acabrn: formData.acapt_class_program_branch_id_acabrn,\n acapt_parent_class_prog_term_acapt: formData.acapt_parent_class_prog_term_acapt || null,\n acapt_start_date: formData.acapt_start_date,\n acapt_end_date: formData.acapt_end_date,\n acapt_isactive: formData.acapt_isactive,\n acapt_islocked: formData.acapt_islocked\n };\n\n // Add _id for edit mode\n if (this.isEditMode() && this.classProgramTermId()) {\n payload._id = this.classProgramTermId();\n }\n\n console.log('API Payload:', payload);\n\n // Make API call\n this.classProgramTermService.saveClassProgramTerm(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: any) => {\n console.log('✅ Class program term saved successfully:', response);\n \n if (response?.success) {\n const action = this.isEditMode() ? 'updated' : 'created';\n this.notificationService.success(`Class program term has been ${action} successfully.`);\n \n if (this.isEditMode()) {\n // Navigate back to list on edit mode\n this.router.navigate(['/control-panel/class-program-term']);\n } else {\n // In create mode, reset only Term Code, Term Name, and Description\n this.resetFormFields();\n }\n } else {\n this.error.set(response?.message || 'Failed to save class program term');\n this.notificationService.error(response?.message || 'Failed to save class program term');\n }\n this.loading.set(false);\n },\n error: (error: any) => {\n console.error('❌ Error saving class program term:', error);\n this.error.set('Failed to save class program term');\n this.notificationService.error('Failed to save class program term. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Mark all form controls as touched to trigger validation display\n */\n private markFormGroupTouched(): void {\n Object.keys(this.classProgramTermForm.controls).forEach(key => {\n const control = this.classProgramTermForm.get(key);\n control?.markAsTouched();\n });\n }\n\n resetForm() {\n this.classProgramTermForm.reset({\n acapt_isactive: true,\n acapt_islocked: false\n });\n \n // Clear options when form is reset\n this.branchOptions.set([]);\n this.parentTermOptions.set([]);\n \n // Clear date constraints\n this.clearDateConstraints();\n this.endDateMinDate.set('');\n }\n\n /**\n * Reset only Term Code, Term Name, and Description fields after successful save\n */\n private resetFormFields(): void {\n // Get current values to preserve\n const currentProgramClass = this.classProgramTermForm.get('acapt_class_program_id_acacpm')?.value;\n const currentBranch = this.classProgramTermForm.get('acapt_class_program_branch_id_acabrn')?.value;\n const currentStartDate = this.classProgramTermForm.get('acapt_start_date')?.value;\n const currentEndDate = this.classProgramTermForm.get('acapt_end_date')?.value;\n const currentIsActive = this.classProgramTermForm.get('acapt_isactive')?.value;\n const currentIsLocked = this.classProgramTermForm.get('acapt_islocked')?.value;\n \n // Reset only the specified fields\n this.classProgramTermForm.patchValue({\n acapt_code: '',\n acapt_name: '',\n acapt_description: '',\n // Preserve other fields\n acapt_class_program_id_acacpm: currentProgramClass,\n acapt_class_program_branch_id_acabrn: currentBranch,\n acapt_start_date: currentStartDate,\n acapt_end_date: currentEndDate,\n acapt_isactive: currentIsActive,\n acapt_islocked: currentIsLocked\n });\n \n // Clear validation errors for reset fields\n this.classProgramTermForm.get('acapt_code')?.setErrors(null);\n this.classProgramTermForm.get('acapt_name')?.setErrors(null);\n this.classProgramTermForm.get('acapt_description')?.setErrors(null);\n }\n\n /**\n * Go back to class program term list\n */\n goBackToClassProgramTermList(): void {\n this.router.navigate(['/control-panel/class-program-term']);\n }\n\n /**\n * Cancel form and navigate back to listing page\n */\n cancelForm(): void {\n this.goBackToClassProgramTermList();\n }\n\n /**\n * Get page title based on mode\n */\n getPageTitle(): string {\n if (this.isViewMode()) return 'View Class Program Term';\n return this.isEditMode() ? 'Edit Class Program Term' : 'Create New Class Program Term';\n }\n\n /**\n * Handle Active card click to toggle checkbox\n */\n onActiveCardClick(): void {\n if (this.isViewMode()) {\n return; // Don't allow changes in view mode\n }\n \n const currentValue = this.classProgramTermForm.get('acapt_isactive')?.value;\n this.classProgramTermForm.patchValue({\n acapt_isactive: !currentValue\n });\n }\n\n /**\n * Handle Locked card click to toggle checkbox\n */\n onLockedCardClick(): void {\n if (this.isViewMode()) {\n return; // Don't allow changes in view mode\n }\n \n const currentValue = this.classProgramTermForm.get('acapt_islocked')?.value;\n this.classProgramTermForm.patchValue({\n acapt_islocked: !currentValue\n });\n }\n\n /**\n * Cleanup when component is destroyed\n */\n ngOnDestroy(): void {\n console.log('🧹 ClassProgramTermCreateComponent: Cleaning up component state');\n\n // Reset all signals to their initial state\n this.loading.set(false);\n this.error.set(null);\n this.classProgramTermId.set('');\n this.isEditMode.set(false);\n this.programClassOptions.set([]);\n this.branchOptions.set([]);\n this.parentTermOptions.set([]);\n\n // Reset form to initial state\n this.resetForm();\n\n console.log('🧹 ClassProgramTermCreateComponent: Component state cleaned up');\n }\n}\n","<!-- \n CLASS PROGRAM TERM MASTER FORM\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_term' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"classProgramTermForm\"\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Form Content -->\n <div class=\"tw-table-row\">\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 <!-- Class Program Term Information -->\n <div class=\"tw-space-y-6\">\n <!-- Program Class and Branch 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\">Program Class *</label>\n <cide-ele-select \n formControlName=\"acapt_class_program_id_acacpm\" \n placeholder=\"Select program class\"\n [disabled]=\"isViewMode()\" \n valueKey=\"_id\" \n labelKey=\"acacpm_alise_title\" \n [options]=\"programClassOptions()\">\n </cide-ele-select>\n </div>\n\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Class Program Branch *</label>\n <cide-ele-select \n formControlName=\"acapt_class_program_branch_id_acabrn\" \n placeholder=\"Select branch\"\n [disabled]=\"isViewMode()\" \n valueKey=\"_id\" \n labelKey=\"acabrn_name\" \n [options]=\"branchOptions()\">\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=\"Term Code *\" formControlName=\"acapt_code\" placeholder=\"e.g., T1, T2, T3\"\n size=\"md\" leadingIcon=\"code\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Term Name *\" formControlName=\"acapt_name\"\n placeholder=\"e.g., First Term, Second Term\" size=\"md\" leadingIcon=\"schedule\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-textarea label=\"Description\" formControlName=\"acapt_description\"\n placeholder=\"Enter detailed description of the term...\" rows=\"3\" size=\"md\">\n </cide-ele-textarea>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input id=\"acapt_start_date\" label=\"Start Date\" formControlName=\"acapt_start_date\" type=\"date\"\n size=\"md\" leadingIcon=\"event\">\n </cide-ele-input>\n\n <cide-ele-input id=\"acapt_end_date\" label=\"End Date\" formControlName=\"acapt_end_date\" type=\"date\"\n [min]=\"endDateMinDate()\" size=\"md\" leadingIcon=\"event\">\n </cide-ele-input>\n </div>\n\n <div class=\"tw-p-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-lg\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-text-blue-500\"></cide-ele-icon>\n <span class=\"tw-text-sm tw-text-blue-700\">\n Sequence will be automatically managed through drag-and-drop on the listing page\n </span>\n </div>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n [class.tw-cursor-not-allowed]=\"isViewMode()\"\n [class.tw-opacity-60]=\"isViewMode()\"\n (click)=\"onActiveCardClick()\">\n <cide-ele-input formControlName=\"acapt_isactive\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this term</span>\n </div>\n </div>\n\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n [class.tw-cursor-not-allowed]=\"isViewMode()\"\n [class.tw-opacity-60]=\"isViewMode()\"\n (click)=\"onLockedCardClick()\">\n <cide-ele-input formControlName=\"acapt_islocked\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Error Display -->\n @if (error()) {\n <div class=\"tw-mt-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-lg\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon variant=\"red\" size=\"sm\">error</cide-ele-icon>\n <span class=\"tw-text-sm tw-font-medium tw-text-red-800\">{{ error() }}</span>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"cancelForm()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || classProgramTermForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ isEditMode() ? 'Update Class Program Term' : 'Create Class Program Term' }}\n </button>\n </div>\n </div>\n </div>\n </form>\n</cide-lyt-shared-wrapper>\n\n"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ import { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-
11
11
  import { AcaClassPrgBranchListPayload, MClassProgramTerm, generateObjectFromString } from 'cloud-ide-lms-model';
12
12
  import { C as CideLytClassProgramTermService } from './cloud-ide-academics-class-program-term.service-BW4PJQEM.mjs';
13
13
  import { CLASS_PROGRAM_MASTER_SERVICE_TOKEN } from 'cloud-ide-shared';
14
- import { b as CideLytClassProgramBranchService } from './cloud-ide-academics-cloud-ide-academics-DxRzuyxa.mjs';
14
+ import { b as CideLytClassProgramBranchService } from './cloud-ide-academics-cloud-ide-academics-CFEjm3Iz.mjs';
15
15
 
16
16
  class ClassProgramTermListComponent {
17
17
  // Dependency injection
@@ -28,12 +28,23 @@ class ClassProgramTermListComponent {
28
28
  classProgramTermDetailsRendererTemplate = viewChild.required('classProgramTermDetailsRendererTemplate');
29
29
  classProgramTermStatusRendererTemplate = viewChild.required('classProgramTermStatusRendererTemplate');
30
30
  actionsDropdownRendererTemplate = viewChild.required('actionsDropdownRendererTemplate');
31
+ programClassRendererTemplate = viewChild('programClassRendererTemplate', ...(ngDevMode ? [{ debugName: "programClassRendererTemplate" }] : []));
32
+ parentTermRendererTemplate = viewChild('parentTermRendererTemplate', ...(ngDevMode ? [{ debugName: "parentTermRendererTemplate" }] : []));
31
33
  // Computed template renderers for grid
32
- templateRenderers = computed(() => ({
33
- classProgramTermDetailsRenderer: this.classProgramTermDetailsRendererTemplate(),
34
- classProgramTermStatusRenderer: this.classProgramTermStatusRendererTemplate(),
35
- actionsDropdownRenderer: this.actionsDropdownRendererTemplate()
36
- }), ...(ngDevMode ? [{ debugName: "templateRenderers" }] : []));
34
+ templateRenderers = computed(() => {
35
+ const renderers = {
36
+ classProgramTermDetailsRenderer: this.classProgramTermDetailsRendererTemplate(),
37
+ classProgramTermStatusRenderer: this.classProgramTermStatusRendererTemplate(),
38
+ actionsDropdownRenderer: this.actionsDropdownRendererTemplate()
39
+ };
40
+ if (this.programClassRendererTemplate()) {
41
+ renderers['programClassRenderer'] = this.programClassRendererTemplate();
42
+ }
43
+ if (this.parentTermRendererTemplate()) {
44
+ renderers['parentTermRenderer'] = this.parentTermRendererTemplate();
45
+ }
46
+ return renderers;
47
+ }, ...(ngDevMode ? [{ debugName: "templateRenderers" }] : []));
37
48
  // Make Math available in template
38
49
  Math = Math;
39
50
  // Signals for reactive state management
@@ -250,7 +261,8 @@ class ClassProgramTermListComponent {
250
261
  this.initializeBreadcrumbData();
251
262
  this.checkRouteParams();
252
263
  this.loadClassProgramMasters();
253
- this.loadClassProgramTerms();
264
+ // Don't load terms until class program is selected
265
+ // this.loadClassProgramTerms();
254
266
  }
255
267
  /**
256
268
  * Initialize breadcrumb data for list view
@@ -307,6 +319,7 @@ class ClassProgramTermListComponent {
307
319
  // Load branches if branchType is configured
308
320
  if (this.showBranchDropdown()) {
309
321
  this.loadClassProgramBranches(programId);
322
+ // Don't load terms yet - wait for branch selection
310
323
  }
311
324
  else {
312
325
  this.classProgramBranches.set([]);
@@ -314,6 +327,8 @@ class ClassProgramTermListComponent {
314
327
  this.acabrnId.set(null);
315
328
  // Load program terms directly if no branch dropdown
316
329
  this.loadClassProgramTermsForDropdown(programId);
330
+ // Load terms for grid only when class program is selected (no branch required)
331
+ this.loadClassProgramTerms();
317
332
  }
318
333
  }
319
334
  else {
@@ -323,8 +338,10 @@ class ClassProgramTermListComponent {
323
338
  this.acabrnId.set(null);
324
339
  this.classProgramTermsForDropdown.set([]);
325
340
  this.selectedTermId.set(null);
341
+ // Clear grid data when no class program is selected
342
+ this.classProgramTerms.set([]);
343
+ this.updateGridData();
326
344
  }
327
- this.loadClassProgramTerms();
328
345
  }
329
346
  /**
330
347
  * Load class program branches
@@ -369,12 +386,16 @@ class ClassProgramTermListComponent {
369
386
  // Load program terms for dropdown when branch changes
370
387
  if (branch && this.selectedProgramClassId()) {
371
388
  this.loadClassProgramTermsForDropdown(this.selectedProgramClassId(), branch);
389
+ // Load terms for grid only when both class program and branch are selected
390
+ this.loadClassProgramTerms();
372
391
  }
373
392
  else {
374
393
  this.classProgramTermsForDropdown.set([]);
375
394
  this.selectedTermId.set(null);
395
+ // Clear grid data when branch is cleared
396
+ this.classProgramTerms.set([]);
397
+ this.updateGridData();
376
398
  }
377
- this.loadClassProgramTerms();
378
399
  }
379
400
  /**
380
401
  * Load class program terms for dropdown (filtered by class program and branch)
@@ -461,6 +482,20 @@ class ClassProgramTermListComponent {
461
482
  * Load class program terms data
462
483
  */
463
484
  loadClassProgramTerms() {
485
+ // Don't load if no class program is selected
486
+ if (!this.selectedProgramClassId()) {
487
+ this.classProgramTerms.set([]);
488
+ this.loading.set(false);
489
+ this.updateGridData();
490
+ return;
491
+ }
492
+ // If branch dropdown is shown, require branch selection
493
+ if (this.showBranchDropdown() && !this.selectedBranchId()) {
494
+ this.classProgramTerms.set([]);
495
+ this.loading.set(false);
496
+ this.updateGridData();
497
+ return;
498
+ }
464
499
  this.loading.set(true);
465
500
  this.error.set(null);
466
501
  // Add filter parameters if available
@@ -619,7 +654,7 @@ class ClassProgramTermListComponent {
619
654
  this.loadClassProgramTerms();
620
655
  }
621
656
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ClassProgramTermListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
622
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: ClassProgramTermListComponent, isStandalone: true, selector: "cide-academics-class-program-term-list", viewQueries: [{ propertyName: "classProgramTermDetailsRendererTemplate", first: true, predicate: ["classProgramTermDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "classProgramTermStatusRendererTemplate", first: true, predicate: ["classProgramTermStatusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Class Program Term Management Container -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_term' }\"\r\n [breadcrumb_data]=\"breadcrumbData()\">\r\n \r\n <!-- Action Buttons in Breadcrumb Area -->\r\n <div breadcrumb-actions>\r\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"sm\" leftIcon=\"add\" (btnClick)=\"createClassProgramTerm()\">\r\n Create Class Program Term\r\n </button>\r\n </div>\r\n\r\n <div class=\"tw-flex tw-flex-col tw-w-full tw-h-full\">\r\n\r\n <!-- Filter Section -->\r\n <div class=\"tw-flex-shrink-0 tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-items-center tw-gap-4\">\r\n <div class=\"tw-w-64\">\r\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Class Program</label>\r\n <cide-ele-select\r\n [options]=\"classProgramMastersOptions()\"\r\n [ngModel]=\"selectedProgramClassId() || ''\"\r\n (ngModelChange)=\"onClassProgramChange($event)\"\r\n placeholder=\"Select Class Program\"\r\n valueKey=\"_id\"\r\n labelKey=\"acacpm_alise_title\"\r\n [loading]=\"classProgramMastersLoading()\"\r\n [searchable]=\"true\"\r\n (searchChange)=\"onClassProgramMasterSearch($event)\">\r\n </cide-ele-select>\r\n </div>\r\n \r\n @if (showBranchDropdown()) {\r\n <div class=\"tw-w-64\">\r\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Specialization</label>\r\n <cide-ele-select\r\n [options]=\"classProgramBranches()\"\r\n [ngModel]=\"selectedBranchId() || ''\"\r\n (ngModelChange)=\"onBranchChange($event)\"\r\n placeholder=\"Select Specialization\"\r\n valueKey=\"_id\"\r\n labelKey=\"acabrn_name\"\r\n [loading]=\"classProgramBranchesLoading()\">\r\n </cide-ele-select>\r\n </div>\r\n }\r\n \r\n @if (selectedProgramClassId() && (!showBranchDropdown() || selectedBranchId())) {\r\n <div class=\"tw-w-64\">\r\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Program Term</label>\r\n <cide-ele-select\r\n [options]=\"classProgramTermsOptions()\"\r\n [ngModel]=\"selectedTermId() || ''\"\r\n (ngModelChange)=\"onTermChange($event)\"\r\n placeholder=\"Select Program Term\"\r\n valueKey=\"_id\"\r\n labelKey=\"acapt_name\"\r\n [loading]=\"classProgramTermsLoadingForDropdown()\">\r\n </cide-ele-select>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Data Grid Section -->\r\n <div class=\"tw-flex-1 tw-min-h-0 tw-p-0\">\r\n <cide-ele-data-grid\r\n [config]=\"gridConfig()\"\r\n [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n</div>\r\n</cide-lyt-shared-wrapper>\r\n\r\n<!-- Template Renderers -->\r\n<ng-template #classProgramTermDetailsRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <div class=\"tw-flex-shrink-0\">\r\n <div class=\"tw-w-10 tw-h-10 tw-bg-orange-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\r\n <cide-ele-icon class=\"tw-text-orange-600 tw-w-5 tw-h-5\">schedule</cide-ele-icon>\r\n </div>\r\n </div>\r\n <div class=\"tw-min-w-0 tw-flex-1\">\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-truncate tw-m-0\">\r\n {{ item.acapt_name }}\r\n </h6>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-truncate tw-m-0\">\r\n {{ item.acapt_description }}\r\n </p>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #classProgramTermStatusRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n @if (item.acapt_iscurrent) {\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800\">\r\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">star</cide-ele-icon>\r\n Current\r\n </span>\r\n }\r\n @if (item.acapt_islocked) {\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-yellow-100 tw-text-yellow-800\">\r\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">lock</cide-ele-icon>\r\n Locked\r\n </span>\r\n }\r\n <span [ngClass]=\"{\r\n 'tw-bg-green-100 tw-text-green-800': item.acapt_isactive,\r\n 'tw-bg-red-100 tw-text-red-800': !item.acapt_isactive\r\n }\" class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium\">\r\n <cide-ele-icon [ngClass]=\"{\r\n 'tw-text-green-600': item.acapt_isactive,\r\n 'tw-text-red-600': !item.acapt_isactive\r\n }\" class=\"tw-w-3 tw-h-3 tw-mr-1\">\r\n {{ item.acapt_isactive ? 'check_circle' : 'cancel' }}\r\n </cide-ele-icon>\r\n {{ item.acapt_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #actionsDropdownRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\r\n <cide-ele-dropdown\r\n [items]=\"getActionDropdownItems(item)\"\r\n (itemClick)=\"onDropdownItemClick($event, item)\"\r\n [config]=\"{\r\n triggerIcon: 'more_vert',\r\n triggerSize: 'sm',\r\n usePortal: true\r\n }\"\r\n size=\"sm\"\r\n variant=\"ghost\"\r\n icon=\"more_vert\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton], cide-ele-button", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "component", type: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey"], outputs: ["ngModelChange", "change", "searchChange"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
657
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: ClassProgramTermListComponent, isStandalone: true, selector: "cide-academics-class-program-term-list", viewQueries: [{ propertyName: "classProgramTermDetailsRendererTemplate", first: true, predicate: ["classProgramTermDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "classProgramTermStatusRendererTemplate", first: true, predicate: ["classProgramTermStatusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "programClassRendererTemplate", first: true, predicate: ["programClassRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "parentTermRendererTemplate", first: true, predicate: ["parentTermRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Class Program Term Management Container -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_term' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <!-- Action Buttons in Breadcrumb Area -->\n <div breadcrumb-actions>\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"sm\" leftIcon=\"add\" (btnClick)=\"createClassProgramTerm()\">\n Create Class Program Term\n </button>\n </div>\n\n <div class=\"tw-flex tw-flex-col tw-w-full tw-h-full\">\n\n <!-- Filter Section -->\n <div class=\"tw-flex-shrink-0 tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-items-center tw-gap-4\">\n <div class=\"tw-w-64\">\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Class Program</label>\n <cide-ele-select\n [options]=\"classProgramMastersOptions()\"\n [ngModel]=\"selectedProgramClassId() || ''\"\n (ngModelChange)=\"onClassProgramChange($event)\"\n placeholder=\"Select Class Program\"\n valueKey=\"_id\"\n labelKey=\"acacpm_alise_title\"\n [loading]=\"classProgramMastersLoading()\"\n [searchable]=\"true\"\n (searchChange)=\"onClassProgramMasterSearch($event)\">\n </cide-ele-select>\n </div>\n \n @if (showBranchDropdown()) {\n <div class=\"tw-w-64\">\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Specialization</label>\n <cide-ele-select\n [options]=\"classProgramBranches()\"\n [ngModel]=\"selectedBranchId() || ''\"\n (ngModelChange)=\"onBranchChange($event)\"\n placeholder=\"Select Specialization\"\n valueKey=\"_id\"\n labelKey=\"acabrn_name\"\n [loading]=\"classProgramBranchesLoading()\">\n </cide-ele-select>\n </div>\n }\n \n @if (selectedProgramClassId() && (!showBranchDropdown() || selectedBranchId())) {\n <div class=\"tw-w-64\">\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Program Term</label>\n <cide-ele-select\n [options]=\"classProgramTermsOptions()\"\n [ngModel]=\"selectedTermId() || ''\"\n (ngModelChange)=\"onTermChange($event)\"\n placeholder=\"Select Program Term\"\n valueKey=\"_id\"\n labelKey=\"acapt_name\"\n [loading]=\"classProgramTermsLoadingForDropdown()\">\n </cide-ele-select>\n </div>\n }\n </div>\n </div>\n\n <!-- Data Grid Section -->\n <div class=\"tw-flex-1 tw-min-h-0 tw-p-0\">\n <cide-ele-data-grid\n [config]=\"gridConfig()\"\n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n</div>\n</cide-lyt-shared-wrapper>\n\n<!-- Template Renderers -->\n<ng-template #classProgramTermDetailsRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <div class=\"tw-flex-shrink-0\">\n <div class=\"tw-w-10 tw-h-10 tw-bg-orange-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-text-orange-600 tw-w-5 tw-h-5\">schedule</cide-ele-icon>\n </div>\n </div>\n <div class=\"tw-min-w-0 tw-flex-1\">\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-truncate tw-m-0\">\n {{ row?.acapt_name || 'N/A' }}\n </h6>\n <p class=\"tw-text-xs tw-text-gray-500 tw-truncate tw-m-0\">\n {{ row?.acapt_description || '' }}\n </p>\n </div>\n </div>\n</ng-template>\n\n<ng-template #classProgramTermStatusRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n @if (row?.acapt_iscurrent) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800\">\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">star</cide-ele-icon>\n Current\n </span>\n }\n @if (row?.acapt_islocked) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-yellow-100 tw-text-yellow-800\">\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">lock</cide-ele-icon>\n Locked\n </span>\n }\n <span [ngClass]=\"{\n 'tw-bg-green-100 tw-text-green-800': row?.acapt_isactive,\n 'tw-bg-red-100 tw-text-red-800': !row?.acapt_isactive\n }\" class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium\">\n <cide-ele-icon [ngClass]=\"{\n 'tw-text-green-600': row?.acapt_isactive,\n 'tw-text-red-600': !row?.acapt_isactive\n }\" class=\"tw-w-3 tw-h-3 tw-mr-1\">\n {{ row?.acapt_isactive ? 'check_circle' : 'cancel' }}\n </cide-ele-icon>\n {{ row?.acapt_isactive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(row)\"\n (itemClick)=\"onDropdownItemClick($event, row)\"\n [config]=\"{\n triggerIcon: 'more_vert',\n triggerSize: 'sm',\n usePortal: true\n }\"\n size=\"sm\"\n variant=\"ghost\"\n icon=\"more_vert\">\n </cide-ele-dropdown>\n</ng-template>\n\n<ng-template #programClassRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">school</cide-ele-icon>\n <span class=\"tw-text-sm tw-text-gray-900 tw-truncate\">\n {{ row?.acapt_class_program_id_acacpm?.acacpm_alise_title || 'N/A' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #parentTermRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n {{ row?.acapt_parent_class_prog_term_acapt?.acapt_name || 'N/A' }}\n </div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton], cide-ele-button", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "component", type: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey"], outputs: ["ngModelChange", "change", "searchChange"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
623
658
  }
624
659
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ClassProgramTermListComponent, decorators: [{
625
660
  type: Component,
@@ -632,8 +667,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
632
667
  CideEleDropdownComponent,
633
668
  CideSelectComponent,
634
669
  CideLytSharedWrapperComponent
635
- ], template: "<!-- Class Program Term Management Container -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_term' }\"\r\n [breadcrumb_data]=\"breadcrumbData()\">\r\n \r\n <!-- Action Buttons in Breadcrumb Area -->\r\n <div breadcrumb-actions>\r\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"sm\" leftIcon=\"add\" (btnClick)=\"createClassProgramTerm()\">\r\n Create Class Program Term\r\n </button>\r\n </div>\r\n\r\n <div class=\"tw-flex tw-flex-col tw-w-full tw-h-full\">\r\n\r\n <!-- Filter Section -->\r\n <div class=\"tw-flex-shrink-0 tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-items-center tw-gap-4\">\r\n <div class=\"tw-w-64\">\r\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Class Program</label>\r\n <cide-ele-select\r\n [options]=\"classProgramMastersOptions()\"\r\n [ngModel]=\"selectedProgramClassId() || ''\"\r\n (ngModelChange)=\"onClassProgramChange($event)\"\r\n placeholder=\"Select Class Program\"\r\n valueKey=\"_id\"\r\n labelKey=\"acacpm_alise_title\"\r\n [loading]=\"classProgramMastersLoading()\"\r\n [searchable]=\"true\"\r\n (searchChange)=\"onClassProgramMasterSearch($event)\">\r\n </cide-ele-select>\r\n </div>\r\n \r\n @if (showBranchDropdown()) {\r\n <div class=\"tw-w-64\">\r\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Specialization</label>\r\n <cide-ele-select\r\n [options]=\"classProgramBranches()\"\r\n [ngModel]=\"selectedBranchId() || ''\"\r\n (ngModelChange)=\"onBranchChange($event)\"\r\n placeholder=\"Select Specialization\"\r\n valueKey=\"_id\"\r\n labelKey=\"acabrn_name\"\r\n [loading]=\"classProgramBranchesLoading()\">\r\n </cide-ele-select>\r\n </div>\r\n }\r\n \r\n @if (selectedProgramClassId() && (!showBranchDropdown() || selectedBranchId())) {\r\n <div class=\"tw-w-64\">\r\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Program Term</label>\r\n <cide-ele-select\r\n [options]=\"classProgramTermsOptions()\"\r\n [ngModel]=\"selectedTermId() || ''\"\r\n (ngModelChange)=\"onTermChange($event)\"\r\n placeholder=\"Select Program Term\"\r\n valueKey=\"_id\"\r\n labelKey=\"acapt_name\"\r\n [loading]=\"classProgramTermsLoadingForDropdown()\">\r\n </cide-ele-select>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Data Grid Section -->\r\n <div class=\"tw-flex-1 tw-min-h-0 tw-p-0\">\r\n <cide-ele-data-grid\r\n [config]=\"gridConfig()\"\r\n [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n</div>\r\n</cide-lyt-shared-wrapper>\r\n\r\n<!-- Template Renderers -->\r\n<ng-template #classProgramTermDetailsRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <div class=\"tw-flex-shrink-0\">\r\n <div class=\"tw-w-10 tw-h-10 tw-bg-orange-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\r\n <cide-ele-icon class=\"tw-text-orange-600 tw-w-5 tw-h-5\">schedule</cide-ele-icon>\r\n </div>\r\n </div>\r\n <div class=\"tw-min-w-0 tw-flex-1\">\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-truncate tw-m-0\">\r\n {{ item.acapt_name }}\r\n </h6>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-truncate tw-m-0\">\r\n {{ item.acapt_description }}\r\n </p>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #classProgramTermStatusRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n @if (item.acapt_iscurrent) {\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800\">\r\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">star</cide-ele-icon>\r\n Current\r\n </span>\r\n }\r\n @if (item.acapt_islocked) {\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-yellow-100 tw-text-yellow-800\">\r\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">lock</cide-ele-icon>\r\n Locked\r\n </span>\r\n }\r\n <span [ngClass]=\"{\r\n 'tw-bg-green-100 tw-text-green-800': item.acapt_isactive,\r\n 'tw-bg-red-100 tw-text-red-800': !item.acapt_isactive\r\n }\" class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium\">\r\n <cide-ele-icon [ngClass]=\"{\r\n 'tw-text-green-600': item.acapt_isactive,\r\n 'tw-text-red-600': !item.acapt_isactive\r\n }\" class=\"tw-w-3 tw-h-3 tw-mr-1\">\r\n {{ item.acapt_isactive ? 'check_circle' : 'cancel' }}\r\n </cide-ele-icon>\r\n {{ item.acapt_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #actionsDropdownRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\r\n <cide-ele-dropdown\r\n [items]=\"getActionDropdownItems(item)\"\r\n (itemClick)=\"onDropdownItemClick($event, item)\"\r\n [config]=\"{\r\n triggerIcon: 'more_vert',\r\n triggerSize: 'sm',\r\n usePortal: true\r\n }\"\r\n size=\"sm\"\r\n variant=\"ghost\"\r\n icon=\"more_vert\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n" }]
670
+ ], template: "<!-- Class Program Term Management Container -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_term' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <!-- Action Buttons in Breadcrumb Area -->\n <div breadcrumb-actions>\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"sm\" leftIcon=\"add\" (btnClick)=\"createClassProgramTerm()\">\n Create Class Program Term\n </button>\n </div>\n\n <div class=\"tw-flex tw-flex-col tw-w-full tw-h-full\">\n\n <!-- Filter Section -->\n <div class=\"tw-flex-shrink-0 tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-items-center tw-gap-4\">\n <div class=\"tw-w-64\">\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Class Program</label>\n <cide-ele-select\n [options]=\"classProgramMastersOptions()\"\n [ngModel]=\"selectedProgramClassId() || ''\"\n (ngModelChange)=\"onClassProgramChange($event)\"\n placeholder=\"Select Class Program\"\n valueKey=\"_id\"\n labelKey=\"acacpm_alise_title\"\n [loading]=\"classProgramMastersLoading()\"\n [searchable]=\"true\"\n (searchChange)=\"onClassProgramMasterSearch($event)\">\n </cide-ele-select>\n </div>\n \n @if (showBranchDropdown()) {\n <div class=\"tw-w-64\">\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Specialization</label>\n <cide-ele-select\n [options]=\"classProgramBranches()\"\n [ngModel]=\"selectedBranchId() || ''\"\n (ngModelChange)=\"onBranchChange($event)\"\n placeholder=\"Select Specialization\"\n valueKey=\"_id\"\n labelKey=\"acabrn_name\"\n [loading]=\"classProgramBranchesLoading()\">\n </cide-ele-select>\n </div>\n }\n \n @if (selectedProgramClassId() && (!showBranchDropdown() || selectedBranchId())) {\n <div class=\"tw-w-64\">\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Program Term</label>\n <cide-ele-select\n [options]=\"classProgramTermsOptions()\"\n [ngModel]=\"selectedTermId() || ''\"\n (ngModelChange)=\"onTermChange($event)\"\n placeholder=\"Select Program Term\"\n valueKey=\"_id\"\n labelKey=\"acapt_name\"\n [loading]=\"classProgramTermsLoadingForDropdown()\">\n </cide-ele-select>\n </div>\n }\n </div>\n </div>\n\n <!-- Data Grid Section -->\n <div class=\"tw-flex-1 tw-min-h-0 tw-p-0\">\n <cide-ele-data-grid\n [config]=\"gridConfig()\"\n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n</div>\n</cide-lyt-shared-wrapper>\n\n<!-- Template Renderers -->\n<ng-template #classProgramTermDetailsRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <div class=\"tw-flex-shrink-0\">\n <div class=\"tw-w-10 tw-h-10 tw-bg-orange-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-text-orange-600 tw-w-5 tw-h-5\">schedule</cide-ele-icon>\n </div>\n </div>\n <div class=\"tw-min-w-0 tw-flex-1\">\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-truncate tw-m-0\">\n {{ row?.acapt_name || 'N/A' }}\n </h6>\n <p class=\"tw-text-xs tw-text-gray-500 tw-truncate tw-m-0\">\n {{ row?.acapt_description || '' }}\n </p>\n </div>\n </div>\n</ng-template>\n\n<ng-template #classProgramTermStatusRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n @if (row?.acapt_iscurrent) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800\">\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">star</cide-ele-icon>\n Current\n </span>\n }\n @if (row?.acapt_islocked) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-yellow-100 tw-text-yellow-800\">\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">lock</cide-ele-icon>\n Locked\n </span>\n }\n <span [ngClass]=\"{\n 'tw-bg-green-100 tw-text-green-800': row?.acapt_isactive,\n 'tw-bg-red-100 tw-text-red-800': !row?.acapt_isactive\n }\" class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium\">\n <cide-ele-icon [ngClass]=\"{\n 'tw-text-green-600': row?.acapt_isactive,\n 'tw-text-red-600': !row?.acapt_isactive\n }\" class=\"tw-w-3 tw-h-3 tw-mr-1\">\n {{ row?.acapt_isactive ? 'check_circle' : 'cancel' }}\n </cide-ele-icon>\n {{ row?.acapt_isactive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(row)\"\n (itemClick)=\"onDropdownItemClick($event, row)\"\n [config]=\"{\n triggerIcon: 'more_vert',\n triggerSize: 'sm',\n usePortal: true\n }\"\n size=\"sm\"\n variant=\"ghost\"\n icon=\"more_vert\">\n </cide-ele-dropdown>\n</ng-template>\n\n<ng-template #programClassRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">school</cide-ele-icon>\n <span class=\"tw-text-sm tw-text-gray-900 tw-truncate\">\n {{ row?.acapt_class_program_id_acacpm?.acacpm_alise_title || 'N/A' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #parentTermRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n {{ row?.acapt_parent_class_prog_term_acapt?.acapt_name || 'N/A' }}\n </div>\n</ng-template>\n" }]
636
671
  }] });
637
672
 
638
673
  export { ClassProgramTermListComponent };
639
- //# sourceMappingURL=cloud-ide-academics-class-program-term-list.component-BaFtTKcS.mjs.map
674
+ //# sourceMappingURL=cloud-ide-academics-class-program-term-list.component-BQ1Etnft.mjs.map