cloud-ide-academics 0.0.55 → 0.0.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{cloud-ide-academics-bonafide-request-detail.component-BRG6AkHZ.mjs → cloud-ide-academics-bonafide-request-detail.component-Mh9qdY6v.mjs} +6 -6
- package/fesm2022/cloud-ide-academics-bonafide-request-detail.component-Mh9qdY6v.mjs.map +1 -0
- package/fesm2022/cloud-ide-academics-bonafide-request-form.component-CM35A1Ex.mjs +317 -0
- package/fesm2022/cloud-ide-academics-bonafide-request-form.component-CM35A1Ex.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-bonafide-request-list.component-DKYKgplL.mjs → cloud-ide-academics-bonafide-request-list.component-CldJcpVL.mjs} +7 -7
- package/fesm2022/cloud-ide-academics-bonafide-request-list.component-CldJcpVL.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-bonafide.service-DB6ySuGe.mjs → cloud-ide-academics-bonafide.service-CHPe3MPl.mjs} +4 -4
- package/fesm2022/{cloud-ide-academics-bonafide.service-DB6ySuGe.mjs.map → cloud-ide-academics-bonafide.service-CHPe3MPl.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-academics-class-program-term-create.component-1IuTrJUo.mjs → cloud-ide-academics-class-program-term-create.component-Bw-I_FfZ.mjs} +9 -6
- package/fesm2022/cloud-ide-academics-class-program-term-create.component-Bw-I_FfZ.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-class-program-term-list.component-C1JWoKus.mjs → cloud-ide-academics-class-program-term-list.component-DMUqLvyZ.mjs} +9 -8
- package/fesm2022/cloud-ide-academics-class-program-term-list.component-DMUqLvyZ.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-cloud-ide-academics-Dd-B1hBe.mjs → cloud-ide-academics-cloud-ide-academics-C1qeVY8_.mjs} +407 -119
- package/fesm2022/cloud-ide-academics-cloud-ide-academics-C1qeVY8_.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-program-class-create.component-DT_-sBiQ.mjs → cloud-ide-academics-program-class-create.component-C2VZz6x-.mjs} +53 -26
- package/fesm2022/cloud-ide-academics-program-class-create.component-C2VZz6x-.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-program-class-list.component-CaVWRJfR.mjs → cloud-ide-academics-program-class-list.component-C333Jax-.mjs} +188 -28
- package/fesm2022/cloud-ide-academics-program-class-list.component-C333Jax-.mjs.map +1 -0
- package/fesm2022/cloud-ide-academics.mjs +1 -1
- package/index.d.ts +40 -0
- package/package.json +1 -1
- package/fesm2022/cloud-ide-academics-bonafide-request-detail.component-BRG6AkHZ.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-bonafide-request-form.component-CM3ISuhU.mjs +0 -317
- package/fesm2022/cloud-ide-academics-bonafide-request-form.component-CM3ISuhU.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-bonafide-request-list.component-DKYKgplL.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-class-program-term-create.component-1IuTrJUo.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-class-program-term-list.component-C1JWoKus.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-cloud-ide-academics-Dd-B1hBe.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-program-class-create.component-DT_-sBiQ.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-program-class-list.component-CaVWRJfR.mjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, DestroyRef, signal, Component } from '@angular/core';
|
|
2
|
+
import { inject, DestroyRef, ChangeDetectorRef, signal, computed, Component } from '@angular/core';
|
|
3
3
|
import { Location, CommonModule } from '@angular/common';
|
|
4
4
|
import * as i1 from '@angular/forms';
|
|
5
5
|
import { FormBuilder, Validators, ReactiveFormsModule } from '@angular/forms';
|
|
@@ -8,7 +8,7 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
|
8
8
|
import { NotificationService, ConfirmationService, CideInputComponent, CideEleButtonComponent, CideIconComponent, CideSelectComponent, CideFormFieldErrorComponent } from 'cloud-ide-element';
|
|
9
9
|
import { AppStateHelperService, ComponentContextService, RightsService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';
|
|
10
10
|
import { CideCoreGeneralMasterService } from 'cloud-ide-core';
|
|
11
|
-
import { a as CideLytAcademicYearService, C as CideLytProgramClassService } from './cloud-ide-academics-cloud-ide-academics-
|
|
11
|
+
import { a as CideLytAcademicYearService, C as CideLytProgramClassService } from './cloud-ide-academics-cloud-ide-academics-C1qeVY8_.mjs';
|
|
12
12
|
import { generateObjectFromString } from 'cloud-ide-lms-model';
|
|
13
13
|
|
|
14
14
|
class ProgramClassCreateComponent {
|
|
@@ -26,6 +26,7 @@ class ProgramClassCreateComponent {
|
|
|
26
26
|
confirmationService = inject(ConfirmationService);
|
|
27
27
|
componentContextService = inject(ComponentContextService);
|
|
28
28
|
rightsService = inject(RightsService);
|
|
29
|
+
cdr = inject(ChangeDetectorRef);
|
|
29
30
|
programClassForm;
|
|
30
31
|
loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
|
|
31
32
|
error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
@@ -46,11 +47,14 @@ class ProgramClassCreateComponent {
|
|
|
46
47
|
// Basic Program Class Information
|
|
47
48
|
acacpm_class_program_id_sygms: ['', [Validators.required]],
|
|
48
49
|
acacpm_alise_title: ['', [Validators.required, Validators.minLength(2)]],
|
|
49
|
-
acacpm_academic_year_id_acayr: ['', [Validators.required]],
|
|
50
|
+
acacpm_academic_year_id_acayr: [{ value: '', disabled: true }, [Validators.required]],
|
|
50
51
|
acacpm_entity_id_syen: [''], // Set automatically from app state
|
|
51
52
|
acacpm_isactive: [true]
|
|
52
53
|
});
|
|
53
54
|
}
|
|
55
|
+
// Rights computed signals
|
|
56
|
+
canCreate = computed(() => this.rightsService.hasRight('CREATE'), ...(ngDevMode ? [{ debugName: "canCreate" }] : []));
|
|
57
|
+
canEdit = computed(() => this.rightsService.hasRight('EDIT'), ...(ngDevMode ? [{ debugName: "canEdit" }] : []));
|
|
54
58
|
ngOnInit() {
|
|
55
59
|
// Initialize rights for program class management
|
|
56
60
|
this.rightsService.initializeRights('program_class');
|
|
@@ -158,25 +162,38 @@ class ProgramClassCreateComponent {
|
|
|
158
162
|
}
|
|
159
163
|
}
|
|
160
164
|
/**
|
|
161
|
-
* Set default academic year
|
|
165
|
+
* Set default academic year from AppStateService
|
|
166
|
+
* Simply read from AppStateService - no extra logic needed
|
|
167
|
+
* Academic year is always disabled in all modes (create, edit, view)
|
|
162
168
|
*/
|
|
163
169
|
setDefaultAcademicYear(academicYears) {
|
|
164
|
-
//
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
170
|
+
// Get active academic year from AppStateService
|
|
171
|
+
const activeAcademicYear = this.appState.getActiveAcademicYear();
|
|
172
|
+
if (activeAcademicYear) {
|
|
173
|
+
// Verify the academic year exists in the available options
|
|
174
|
+
const yearExists = academicYears.find(year => year._id === activeAcademicYear._id);
|
|
175
|
+
if (yearExists) {
|
|
176
|
+
// Set the value first
|
|
177
|
+
this.programClassForm.patchValue({
|
|
178
|
+
acacpm_academic_year_id_acayr: activeAcademicYear._id
|
|
179
|
+
}, { emitEvent: false });
|
|
180
|
+
// Always disable academic year dropdown in all modes
|
|
181
|
+
setTimeout(() => {
|
|
182
|
+
const academicYearControl = this.programClassForm.get('acacpm_academic_year_id_acayr');
|
|
183
|
+
if (academicYearControl) {
|
|
184
|
+
academicYearControl.disable({ emitEvent: false });
|
|
185
|
+
// Trigger change detection to update the UI
|
|
186
|
+
this.cdr.detectChanges();
|
|
187
|
+
}
|
|
188
|
+
console.log('✅ Academic year set from AppStateService (always disabled):', activeAcademicYear.acayr_name, activeAcademicYear._id, 'Value:', academicYearControl?.value);
|
|
189
|
+
}, 100);
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
console.warn('⚠️ Active academic year from AppStateService not found in available options:', activeAcademicYear._id);
|
|
193
|
+
}
|
|
177
194
|
}
|
|
178
195
|
else {
|
|
179
|
-
console.warn('⚠️ No
|
|
196
|
+
console.warn('⚠️ No active academic year found in AppStateService');
|
|
180
197
|
}
|
|
181
198
|
}
|
|
182
199
|
/**
|
|
@@ -255,9 +272,19 @@ class ProgramClassCreateComponent {
|
|
|
255
272
|
acacpm_entity_id_syen: data.acacpm_entity_id_syen?._id || data.acacpm_entity_id_syen,
|
|
256
273
|
acacpm_isactive: data.acacpm_isactive
|
|
257
274
|
});
|
|
258
|
-
//
|
|
259
|
-
|
|
260
|
-
|
|
275
|
+
// Academic year is always disabled in all modes (create, edit, view)
|
|
276
|
+
// Ensure it remains disabled after populating form data
|
|
277
|
+
const academicYearControl = this.programClassForm.get('acacpm_academic_year_id_acayr');
|
|
278
|
+
if (academicYearControl && !academicYearControl.disabled) {
|
|
279
|
+
academicYearControl.disable({ emitEvent: false });
|
|
280
|
+
}
|
|
281
|
+
// Class program is disabled in edit and view modes only
|
|
282
|
+
// In edit/view mode, disable it after populating form data
|
|
283
|
+
if (this.isEditMode() || this.isViewMode()) {
|
|
284
|
+
const classProgramControl = this.programClassForm.get('acacpm_class_program_id_sygms');
|
|
285
|
+
if (classProgramControl && !classProgramControl.disabled) {
|
|
286
|
+
classProgramControl.disable({ emitEvent: false });
|
|
287
|
+
}
|
|
261
288
|
}
|
|
262
289
|
}
|
|
263
290
|
/**
|
|
@@ -438,10 +465,10 @@ class ProgramClassCreateComponent {
|
|
|
438
465
|
this.resetForm();
|
|
439
466
|
console.log('🧹 ProgramClassCreateComponent: Component state cleaned up');
|
|
440
467
|
}
|
|
441
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
442
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.
|
|
468
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ProgramClassCreateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
469
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: ProgramClassCreateComponent, isStandalone: true, selector: "cide-academics-program-class-create", ngImport: i0, template: "<!-- \n PROGRAM CLASS MASTER FORM\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'program_class' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"programClassForm\"\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Form Content -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n <!-- Basic Program Class Information -->\n <div class=\"tw-space-y-6\">\n <!-- Class Program and Academic Year at the top -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Academic Year</label>\n <cide-ele-select formControlName=\"acacpm_academic_year_id_acayr\" placeholder=\"Select academic year\"\n [disabled]=\"true\" valueKey=\"_id\" labelKey=\"acayr_name\"\n [options]=\"academicYearOptions()\">\n </cide-ele-select>\n </div>\n\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Class Program</label>\n <cide-ele-select formControlName=\"acacpm_class_program_id_sygms\" placeholder=\"Select class program\"\n [disabled]=\"isEditMode() || isViewMode()\" valueKey=\"_id\" labelKey=\"sygms_title\" [options]=\"classProgramOptions()\"\n [treeView]=\"{ enabled: true, primaryKey: '_id', foreignKey: 'sygms_id_sygms' }\" [searchable]=\"true\">\n </cide-ele-select>\n </div>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"Program Class Title\" formControlName=\"acacpm_alise_title\"\n placeholder=\"e.g., Program Class 2024-2025\" size=\"md\" leadingIcon=\"school\">\n </cide-ele-input>\n\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n (click)=\"toggleActiveStatus()\">\n <cide-ele-input formControlName=\"acacpm_isactive\" type=\"checkbox\" size=\"md\"\n (click)=\"$event.stopPropagation()\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this program class</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Error Display -->\n @if (error()) {\n <div class=\"tw-mt-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-lg\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon variant=\"red\" size=\"sm\">error</cide-ele-icon>\n <span class=\"tw-text-sm tw-font-medium tw-text-red-800\">{{ error() }}</span>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-flex-col tw-gap-3\">\n <!-- Form Validation Errors -->\n <div class=\"tw-w-full\">\n <cide-form-field-error [formGroup]=\"programClassForm\"></cide-form-field-error>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n @if (!isEditMode()) {\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n }\n\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"cancelForm()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n\n @if ((isEditMode() && canEdit()) || (!isEditMode() && canCreate())) {\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || programClassForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ isEditMode() ? 'Update Program Class' : 'Create Program Class' }}\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n </form>\n</cide-lyt-shared-wrapper>", 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", "step", "size"], 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", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }, { kind: "component", type: CideFormFieldErrorComponent, selector: "cide-form-field-error", inputs: ["control", "formGroup", "fieldName", "customMessages"] }] });
|
|
443
470
|
}
|
|
444
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
471
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ProgramClassCreateComponent, decorators: [{
|
|
445
472
|
type: Component,
|
|
446
473
|
args: [{ selector: 'cide-academics-program-class-create', standalone: true, imports: [
|
|
447
474
|
CommonModule,
|
|
@@ -452,8 +479,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
452
479
|
CideSelectComponent,
|
|
453
480
|
CideLytSharedWrapperComponent,
|
|
454
481
|
CideFormFieldErrorComponent
|
|
455
|
-
], template: "<!-- \n PROGRAM CLASS MASTER FORM\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'program_class' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"programClassForm\"\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Form Content -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n <!-- Basic Program Class Information -->\n <div class=\"tw-space-y-6\">\n <!-- Class Program and Academic Year at the top -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Academic Year</label>\n <cide-ele-select formControlName=\"acacpm_academic_year_id_acayr\" placeholder=\"Select academic year\"\n [disabled]=\"
|
|
482
|
+
], template: "<!-- \n PROGRAM CLASS MASTER FORM\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'program_class' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"programClassForm\"\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Form Content -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n <!-- Basic Program Class Information -->\n <div class=\"tw-space-y-6\">\n <!-- Class Program and Academic Year at the top -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Academic Year</label>\n <cide-ele-select formControlName=\"acacpm_academic_year_id_acayr\" placeholder=\"Select academic year\"\n [disabled]=\"true\" valueKey=\"_id\" labelKey=\"acayr_name\"\n [options]=\"academicYearOptions()\">\n </cide-ele-select>\n </div>\n\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Class Program</label>\n <cide-ele-select formControlName=\"acacpm_class_program_id_sygms\" placeholder=\"Select class program\"\n [disabled]=\"isEditMode() || isViewMode()\" valueKey=\"_id\" labelKey=\"sygms_title\" [options]=\"classProgramOptions()\"\n [treeView]=\"{ enabled: true, primaryKey: '_id', foreignKey: 'sygms_id_sygms' }\" [searchable]=\"true\">\n </cide-ele-select>\n </div>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"Program Class Title\" formControlName=\"acacpm_alise_title\"\n placeholder=\"e.g., Program Class 2024-2025\" size=\"md\" leadingIcon=\"school\">\n </cide-ele-input>\n\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n (click)=\"toggleActiveStatus()\">\n <cide-ele-input formControlName=\"acacpm_isactive\" type=\"checkbox\" size=\"md\"\n (click)=\"$event.stopPropagation()\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this program class</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Error Display -->\n @if (error()) {\n <div class=\"tw-mt-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-lg\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon variant=\"red\" size=\"sm\">error</cide-ele-icon>\n <span class=\"tw-text-sm tw-font-medium tw-text-red-800\">{{ error() }}</span>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-flex-col tw-gap-3\">\n <!-- Form Validation Errors -->\n <div class=\"tw-w-full\">\n <cide-form-field-error [formGroup]=\"programClassForm\"></cide-form-field-error>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n @if (!isEditMode()) {\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n }\n\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"cancelForm()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n\n @if ((isEditMode() && canEdit()) || (!isEditMode() && canCreate())) {\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || programClassForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ isEditMode() ? 'Update Program Class' : 'Create Program Class' }}\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n </form>\n</cide-lyt-shared-wrapper>" }]
|
|
456
483
|
}], ctorParameters: () => [] });
|
|
457
484
|
|
|
458
485
|
export { ProgramClassCreateComponent };
|
|
459
|
-
//# sourceMappingURL=cloud-ide-academics-program-class-create.component-
|
|
486
|
+
//# sourceMappingURL=cloud-ide-academics-program-class-create.component-C2VZz6x-.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-ide-academics-program-class-create.component-C2VZz6x-.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/program-class-management/components/program-class-create/program-class-create.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/program-class-management/components/program-class-create/program-class-create.component.html"],"sourcesContent":["import { Component, inject, signal, computed, OnInit, DestroyRef, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, FormArray, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Location } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideIconComponent, CideSelectComponent, NotificationService, ConfirmationService, CideFormFieldErrorComponent } from 'cloud-ide-element';\nimport { AppStateHelperService, CideLytSharedWrapperComponent, ComponentContextService, RightsService } from 'cloud-ide-layout';\nimport { CideCoreGeneralMasterService } from 'cloud-ide-core';\nimport { CideLytAcademicYearService } from '../../../academic-year-management';\nimport { CideLytProgramClassService } from '../../services/program-class.service';\nimport { AcaAcademicYear, ICoreSygms, generateObjectFromString } from 'cloud-ide-lms-model';\n\n// Interfaces based on the model files\ninterface ProgramClass {\n _id?: string;\n acacpm_class_program_id_sygms?: string;\n acacpm_alise_title?: string;\n acacpm_academic_year_id_acayr?: string;\n acacpm_entity_id_syen?: string;\n acacpm_isactive?: boolean;\n}\n\n\ninterface AcademicYear {\n _id?: string;\n acayr_name?: string;\n acayr_code?: string;\n}\n\ninterface ClassProgram {\n _id?: string;\n sygmt_name?: string;\n sygmt_code?: string;\n}\n\n@Component({\n selector: 'cide-academics-program-class-create',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideInputComponent,\n CideEleButtonComponent,\n CideIconComponent,\n CideSelectComponent,\n CideLytSharedWrapperComponent,\n CideFormFieldErrorComponent\n ],\n templateUrl: './program-class-create.component.html'\n})\nexport class ProgramClassCreateComponent implements OnInit, OnDestroy {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private fb = inject(FormBuilder);\n private generalMasterService = inject(CideCoreGeneralMasterService);\n private academicYearService = inject(CideLytAcademicYearService);\n private programClassService = inject(CideLytProgramClassService);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private location = inject(Location);\n private appState = inject(AppStateHelperService);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\n private componentContextService = inject(ComponentContextService);\n private rightsService = inject(RightsService);\n private cdr = inject(ChangeDetectorRef);\n\n programClassForm: FormGroup;\n loading = signal(false);\n error = signal<string | null>(null);\n\n // Program class information from route\n programClassId = signal<string>('');\n isEditMode = signal(false);\n isViewMode = signal(false);\n\n // Data signals\n academicYears = signal<AcademicYear[]>([]);\n classPrograms = signal<ClassProgram[]>([]);\n\n // Options for dropdowns\n academicYearOptions = signal<AcaAcademicYear[]>([]);\n classProgramOptions = signal<ICoreSygms[]>([]);\n\n // Signal for breadcrumb data that will be passed to shared wrapper\n breadcrumbData = signal<{ id: string; label: string; icon?: string; url?: string }[]>([]);\n\n constructor() {\n this.programClassForm = this.fb.group({\n // Basic Program Class Information\n acacpm_class_program_id_sygms: ['', [Validators.required]],\n acacpm_alise_title: ['', [Validators.required, Validators.minLength(2)]],\n acacpm_academic_year_id_acayr: [{ value: '', disabled: true }, [Validators.required]],\n acacpm_entity_id_syen: [''], // Set automatically from app state\n acacpm_isactive: [true]\n });\n }\n\n // Rights computed signals\n canCreate = computed(() => this.rightsService.hasRight('CREATE'));\n canEdit = computed(() => this.rightsService.hasRight('EDIT'));\n\n ngOnInit(): void {\n // Initialize rights for program class management\n this.rightsService.initializeRights('program_class');\n this.initializeComponent();\n this.setupFormSubscriptions();\n }\n\n /**\n * Update breadcrumb data based on mode\n */\n private updateBreadcrumbData(): void {\n const additionalItems: { id: string; label: string; icon?: string; url?: string }[] = [];\n \n if (this.isViewMode()) {\n additionalItems.push({\n id: 'view',\n label: 'View',\n icon: 'visibility',\n url: undefined\n });\n } else if (this.isEditMode()) {\n additionalItems.push({\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n url: undefined\n });\n } else {\n additionalItems.push({\n id: 'create',\n label: 'Create',\n icon: 'add',\n url: undefined\n });\n }\n \n this.breadcrumbData.set(additionalItems);\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n // Set entity ID from app state\n this.setEntityFromAppState();\n\n // Get program class information from route (for edit/view mode)\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\n const queryParams = params['query'];\n console.log('🔍 Route params:', queryParams);\n\n if (queryParams) {\n // Query parameters passed (following page-controls pattern)\n const queryData = generateObjectFromString(queryParams);\n if (queryData?.acacpm_id) {\n this.programClassId.set(queryData.acacpm_id as string);\n this.isEditMode.set(true);\n this.loadProgramClassData(queryData.acacpm_id as string);\n }\n } else {\n // Check URL path for edit/view mode\n const url = this.router.url;\n if (url.includes('/view/')) {\n this.isViewMode.set(true);\n // Extract ID from URL path\n const pathSegments = url.split('/');\n const id = pathSegments[pathSegments.length - 1];\n if (id) {\n this.programClassId.set(id);\n this.loadProgramClassData(id);\n }\n } else if (url.includes('/edit/')) {\n this.isEditMode.set(true);\n // Extract ID from URL path\n const pathSegments = url.split('/');\n const id = pathSegments[pathSegments.length - 1];\n if (id) {\n this.programClassId.set(id);\n this.loadProgramClassData(id);\n }\n } else {\n // Create mode\n this.isEditMode.set(false);\n this.isViewMode.set(false);\n }\n }\n\n // Always load dropdown options\n this.loadDropdownOptions();\n });\n }\n\n\n /**\n * Set entity ID from app state\n */\n private setEntityFromAppState(): void {\n const activeEntity = this.appState.activeEntity();\n // Always set entity ID, even if null (for create mode)\n const entityId = activeEntity?._id || null;\n this.programClassForm.patchValue({\n acacpm_entity_id_syen: entityId\n });\n if (entityId) {\n console.log('✅ Entity ID set from app state:', entityId);\n } else {\n console.warn('⚠️ No active entity found in app state, setting to null');\n }\n }\n\n /**\n * Set default academic year from AppStateService\n * Simply read from AppStateService - no extra logic needed\n * Academic year is always disabled in all modes (create, edit, view)\n */\n private setDefaultAcademicYear(academicYears: AcaAcademicYear[]): void {\n // Get active academic year from AppStateService\n const activeAcademicYear = this.appState.getActiveAcademicYear();\n \n if (activeAcademicYear) {\n // Verify the academic year exists in the available options\n const yearExists = academicYears.find(year => year._id === activeAcademicYear._id);\n if (yearExists) {\n // Set the value first\n this.programClassForm.patchValue({\n acacpm_academic_year_id_acayr: activeAcademicYear._id\n }, { emitEvent: false });\n \n // Always disable academic year dropdown in all modes\n setTimeout(() => {\n const academicYearControl = this.programClassForm.get('acacpm_academic_year_id_acayr');\n if (academicYearControl) {\n academicYearControl.disable({ emitEvent: false });\n // Trigger change detection to update the UI\n this.cdr.detectChanges();\n }\n console.log('✅ Academic year set from AppStateService (always disabled):', activeAcademicYear.acayr_name, activeAcademicYear._id, 'Value:', academicYearControl?.value);\n }, 100);\n } else {\n console.warn('⚠️ Active academic year from AppStateService not found in available options:', activeAcademicYear._id);\n }\n } else {\n console.warn('⚠️ No active academic year found in AppStateService');\n }\n }\n\n /**\n * Setup form subscriptions for auto-population\n */\n private setupFormSubscriptions(): void {\n // Listen for class program selection changes\n this.programClassForm.get('acacpm_class_program_id_sygms')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((selectedClassProgramId) => {\n if (selectedClassProgramId) {\n this.updateProgramClassName(selectedClassProgramId);\n }\n });\n }\n\n /**\n * Update program class name based on selected class program\n */\n private updateProgramClassName(selectedClassProgramId: string): void {\n const selectedClassProgram = this.classProgramOptions().find(option => option._id === selectedClassProgramId);\n \n if (selectedClassProgram && selectedClassProgram.sygms_title) {\n // Only update if the title field is empty or if user hasn't manually changed it\n const currentTitle = this.programClassForm.get('acacpm_alise_title')?.value;\n if (!currentTitle || currentTitle.trim() === '') {\n this.programClassForm.patchValue({\n acacpm_alise_title: selectedClassProgram.sygms_title\n });\n console.log('✅ Program class title auto-populated:', selectedClassProgram.sygms_title);\n }\n }\n }\n\n /**\n * Load program class data for edit/view mode\n */\n private loadProgramClassData(programClassId: string): void {\n this.loading.set(true);\n this.error.set(null);\n\n // Create payload for getting program class by ID\n const payload = {\n acacpm_id: programClassId\n };\n\n // Load program class data\n this.programClassService.getProgramClassById(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n console.log('📚 Program class data loaded:', response.data);\n this.populateFormWithProgramClassData(response.data);\n \n // Disable form if in view mode\n if (this.isViewMode()) {\n this.programClassForm.disable();\n }\n } else {\n console.error('❌ Failed to load program class data');\n this.error.set('Failed to load program class data');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error loading program class data:', error);\n this.error.set('Error loading program class data');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Populate form with program class data\n */\n private populateFormWithProgramClassData(data: any): void {\n this.programClassForm.patchValue({\n acacpm_class_program_id_sygms: data.acacpm_class_program_id_sygms?._id || data.acacpm_class_program_id_sygms,\n acacpm_alise_title: data.acacpm_alise_title,\n acacpm_academic_year_id_acayr: data.acacpm_academic_year_id_acayr?._id || data.acacpm_academic_year_id_acayr,\n acacpm_entity_id_syen: data.acacpm_entity_id_syen?._id || data.acacpm_entity_id_syen,\n acacpm_isactive: data.acacpm_isactive\n });\n \n // Academic year is always disabled in all modes (create, edit, view)\n // Ensure it remains disabled after populating form data\n const academicYearControl = this.programClassForm.get('acacpm_academic_year_id_acayr');\n if (academicYearControl && !academicYearControl.disabled) {\n academicYearControl.disable({ emitEvent: false });\n }\n \n // Class program is disabled in edit and view modes only\n // In edit/view mode, disable it after populating form data\n if (this.isEditMode() || this.isViewMode()) {\n const classProgramControl = this.programClassForm.get('acacpm_class_program_id_sygms');\n if (classProgramControl && !classProgramControl.disabled) {\n classProgramControl.disable({ emitEvent: false });\n }\n }\n }\n\n /**\n * Load dropdown options\n */\n private loadDropdownOptions(): void {\n // Load academic year options from academic year service\n this.academicYearService.getAcademicYearList({})\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('🔍 Academic Year API Response:', response);\n if (response?.success && response.data) {\n console.log('📚 Academic years loaded from service:', response.data);\n this.academicYearOptions.set(response.data);\n console.log('✅ academicYearOptions signal updated:', this.academicYearOptions());\n \n // Set default academic year to the current one\n this.setDefaultAcademicYear(response.data);\n } else {\n console.warn('⚠️ No academic year data received from service');\n this.academicYearOptions.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading academic years from service:', error);\n this.academicYearOptions.set([]);\n }\n });\n\n // Load class program options from general master service\n this.generalMasterService.getMasterList({ sygmt_code: 'class_program_type' })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('🔍 General Master API Response:', response);\n if (response?.success && response.data) {\n console.log('📚 Class program types loaded from general master:', response.data);\n // Use the response data directly without transformation\n this.classProgramOptions.set(response.data);\n console.log('✅ classProgramOptions signal updated:', this.classProgramOptions());\n } else {\n console.warn('⚠️ No class program type data received from general master');\n this.classProgramOptions.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading class program types from general master:', error);\n this.classProgramOptions.set([]);\n }\n });\n }\n\n\n onSubmit() {\n if (this.isViewMode()) {\n this.location.back();\n return;\n }\n\n if (this.programClassForm.invalid) {\n this.notificationService.error('Please fill in all required fields correctly.');\n this.markFormGroupTouched();\n return;\n }\n\n this.loading.set(true);\n this.error.set(null);\n\n // Get form data and include disabled fields\n const formData = { ...this.programClassForm.getRawValue() };\n console.log('Program Class Form Data:', formData);\n\n // Ensure entity ID is set from app state if not already set\n if (!formData.acacpm_entity_id_syen) {\n const activeEntity = this.appState.activeEntity();\n formData.acacpm_entity_id_syen = activeEntity?._id || null;\n }\n\n // Add ID for edit mode\n if (this.isEditMode()) {\n formData._id = this.programClassId();\n }\n\n // Make API call to save program class\n this.programClassService.saveProgramClass(formData)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n const action = this.isEditMode() ? 'updated' : 'created';\n this.notificationService.success(`Program class has been ${action} successfully.`);\n \n // Navigate to program class list on successful create, go back on edit\n if (this.isEditMode()) {\n this.location.back();\n } else {\n // Navigate to program class list for create operation (closes current tab)\n this.router.navigate(['/control-panel/program-class-management']);\n }\n } else {\n this.notificationService.error(response?.message || 'Failed to save program class.');\n }\n this.loading.set(false);\n },\n error: (error: unknown) => {\n console.error('Error saving program class:', error);\n this.loading.set(false);\n \n // Extract error message from API response\n const errorMessage = error && typeof error === 'object' && 'error' in error \n ? (error.error && typeof error.error === 'object' && 'message' in error.error \n ? String(error.error.message) \n : 'message' in error ? String(error.message) : 'An error occurred while saving the program class.')\n : error && typeof error === 'object' && 'message' in error\n ? String(error.message)\n : 'An error occurred while saving the program class.';\n \n this.error.set(errorMessage);\n this.notificationService.error(errorMessage);\n }\n });\n }\n\n /**\n * Mark all form controls as touched to trigger validation display\n */\n private markFormGroupTouched(): void {\n Object.keys(this.programClassForm.controls).forEach(key => {\n const control = this.programClassForm.get(key);\n control?.markAsTouched();\n });\n }\n\n resetForm() {\n if (this.isEditMode() && this.programClassId()) {\n // Reload data in edit mode\n this.loadProgramClassData(this.programClassId());\n } else {\n // Reset to defaults in create mode\n this.programClassForm.reset({\n acacpm_isactive: true\n });\n }\n }\n\n /**\n * Toggle active status when card is clicked\n */\n toggleActiveStatus(): void {\n const currentValue = this.programClassForm.get('acacpm_isactive')?.value;\n this.programClassForm.patchValue({\n acacpm_isactive: !currentValue\n });\n }\n\n /**\n * Go back to previous page using browser history\n */\n goBackToProgramClassList(): void {\n this.componentContextService.close(['/control-panel/program-class-management']);\n }\n\n /**\n * Cancel form and navigate to listing page\n */\n cancelForm(): void {\n this.componentContextService.close(['/control-panel/program-class-management']);\n }\n\n /**\n * Get page title based on mode\n */\n getPageTitle(): string {\n if (this.isViewMode()) return 'View Program Class';\n return this.isEditMode() ? 'Edit Program Class' : 'Create New Program Class';\n }\n\n /**\n * Cleanup when component is destroyed\n */\n ngOnDestroy(): void {\n console.log('🧹 ProgramClassCreateComponent: Cleaning up component state');\n\n // Reset all signals to their initial state\n this.loading.set(false);\n this.error.set(null);\n this.programClassId.set('');\n this.isEditMode.set(false);\n this.academicYearOptions.set([]);\n this.classProgramOptions.set([]);\n\n // Reset form to initial state\n this.resetForm();\n\n console.log('🧹 ProgramClassCreateComponent: Component state cleaned up');\n }\n}\n","<!-- \n PROGRAM CLASS MASTER FORM\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'program_class' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"programClassForm\"\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Form Content -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n <!-- Basic Program Class Information -->\n <div class=\"tw-space-y-6\">\n <!-- Class Program and Academic Year at the top -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Academic Year</label>\n <cide-ele-select formControlName=\"acacpm_academic_year_id_acayr\" placeholder=\"Select academic year\"\n [disabled]=\"true\" valueKey=\"_id\" labelKey=\"acayr_name\"\n [options]=\"academicYearOptions()\">\n </cide-ele-select>\n </div>\n\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Class Program</label>\n <cide-ele-select formControlName=\"acacpm_class_program_id_sygms\" placeholder=\"Select class program\"\n [disabled]=\"isEditMode() || isViewMode()\" valueKey=\"_id\" labelKey=\"sygms_title\" [options]=\"classProgramOptions()\"\n [treeView]=\"{ enabled: true, primaryKey: '_id', foreignKey: 'sygms_id_sygms' }\" [searchable]=\"true\">\n </cide-ele-select>\n </div>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"Program Class Title\" formControlName=\"acacpm_alise_title\"\n placeholder=\"e.g., Program Class 2024-2025\" size=\"md\" leadingIcon=\"school\">\n </cide-ele-input>\n\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n (click)=\"toggleActiveStatus()\">\n <cide-ele-input formControlName=\"acacpm_isactive\" type=\"checkbox\" size=\"md\"\n (click)=\"$event.stopPropagation()\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this program class</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Error Display -->\n @if (error()) {\n <div class=\"tw-mt-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-lg\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon variant=\"red\" size=\"sm\">error</cide-ele-icon>\n <span class=\"tw-text-sm tw-font-medium tw-text-red-800\">{{ error() }}</span>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-flex-col tw-gap-3\">\n <!-- Form Validation Errors -->\n <div class=\"tw-w-full\">\n <cide-form-field-error [formGroup]=\"programClassForm\"></cide-form-field-error>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n @if (!isEditMode()) {\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n }\n\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"cancelForm()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n\n @if ((isEditMode() && canEdit()) || (!isEditMode() && canCreate())) {\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || programClassForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ isEditMode() ? 'Update Program Class' : 'Create Program Class' }}\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n </form>\n</cide-lyt-shared-wrapper>"],"names":[],"mappings":"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"}
|