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.
- package/fesm2022/{cloud-ide-academics-class-program-term-create.component-C5FnRTND.mjs → cloud-ide-academics-class-program-term-create.component-CM7vxAXT.mjs} +45 -14
- package/fesm2022/cloud-ide-academics-class-program-term-create.component-CM7vxAXT.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-class-program-term-list.component-BaFtTKcS.mjs → cloud-ide-academics-class-program-term-list.component-BQ1Etnft.mjs} +47 -12
- package/fesm2022/cloud-ide-academics-class-program-term-list.component-BQ1Etnft.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-cloud-ide-academics-DxRzuyxa.mjs → cloud-ide-academics-cloud-ide-academics-CFEjm3Iz.mjs} +20 -20
- package/fesm2022/cloud-ide-academics-cloud-ide-academics-CFEjm3Iz.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-program-class-create.component-Co60CYKC.mjs → cloud-ide-academics-program-class-create.component-DG6m0cmY.mjs} +4 -5
- package/fesm2022/cloud-ide-academics-program-class-create.component-DG6m0cmY.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-program-class-list.component-jPpK9V-X.mjs → cloud-ide-academics-program-class-list.component-DizuYHy3.mjs} +4 -4
- package/fesm2022/cloud-ide-academics-program-class-list.component-DizuYHy3.mjs.map +1 -0
- package/fesm2022/cloud-ide-academics-program-term-section-create.component-DHrTb-XI.mjs +248 -0
- package/fesm2022/cloud-ide-academics-program-term-section-create.component-DHrTb-XI.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-program-term-section-list.component-Dshnvq8K.mjs → cloud-ide-academics-program-term-section-list.component-ktIAxvxR.mjs} +3 -3
- package/fesm2022/cloud-ide-academics-program-term-section-list.component-ktIAxvxR.mjs.map +1 -0
- package/fesm2022/cloud-ide-academics.mjs +1 -1
- package/package.json +1 -1
- package/fesm2022/cloud-ide-academics-class-program-term-create.component-C5FnRTND.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-class-program-term-list.component-BaFtTKcS.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-cloud-ide-academics-DxRzuyxa.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-program-class-create.component-Co60CYKC.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-program-class-list.component-jPpK9V-X.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-program-term-section-create.component-Dx9JQOwW.mjs +0 -214
- package/fesm2022/cloud-ide-academics-program-term-section-create.component-Dx9JQOwW.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-program-term-section-list.component-Dshnvq8K.mjs.map +0 -1
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, DestroyRef, signal, Component } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import * as i1 from '@angular/forms';
|
|
5
|
+
import { FormBuilder, Validators, ReactiveFormsModule } from '@angular/forms';
|
|
6
|
+
import { Router, ActivatedRoute } from '@angular/router';
|
|
7
|
+
import { NotificationService, ConfirmationService, CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideEleTabComponent, CideIconComponent, CideSelectComponent } from 'cloud-ide-element';
|
|
8
|
+
import { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';
|
|
9
|
+
|
|
10
|
+
class ProgramTermSectionCreateComponent {
|
|
11
|
+
// Dependency injection
|
|
12
|
+
destroyRef = inject(DestroyRef);
|
|
13
|
+
fb = inject(FormBuilder);
|
|
14
|
+
router = inject(Router);
|
|
15
|
+
route = inject(ActivatedRoute);
|
|
16
|
+
appState = inject(AppStateHelperService);
|
|
17
|
+
notificationService = inject(NotificationService);
|
|
18
|
+
confirmationService = inject(ConfirmationService);
|
|
19
|
+
programTermSectionForm;
|
|
20
|
+
activeTab = signal('basic', ...(ngDevMode ? [{ debugName: "activeTab" }] : []));
|
|
21
|
+
loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
|
|
22
|
+
error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
23
|
+
// Program term section information from route
|
|
24
|
+
programTermSectionId = signal('', ...(ngDevMode ? [{ debugName: "programTermSectionId" }] : []));
|
|
25
|
+
isEditMode = signal(false, ...(ngDevMode ? [{ debugName: "isEditMode" }] : []));
|
|
26
|
+
isViewMode = signal(false, ...(ngDevMode ? [{ debugName: "isViewMode" }] : []));
|
|
27
|
+
// Data signals
|
|
28
|
+
programClasses = signal([], ...(ngDevMode ? [{ debugName: "programClasses" }] : []));
|
|
29
|
+
classProgramTerms = signal([], ...(ngDevMode ? [{ debugName: "classProgramTerms" }] : []));
|
|
30
|
+
// Options for dropdowns
|
|
31
|
+
programClassOptions = signal([], ...(ngDevMode ? [{ debugName: "programClassOptions" }] : []));
|
|
32
|
+
classProgramTermOptions = signal([], ...(ngDevMode ? [{ debugName: "classProgramTermOptions" }] : []));
|
|
33
|
+
// Signal for breadcrumb data that will be passed to shared wrapper
|
|
34
|
+
breadcrumbData = signal([], ...(ngDevMode ? [{ debugName: "breadcrumbData" }] : []));
|
|
35
|
+
constructor() {
|
|
36
|
+
this.programTermSectionForm = this.fb.group({
|
|
37
|
+
// Basic Program Term Section Information
|
|
38
|
+
acapts_code: ['', [Validators.required]],
|
|
39
|
+
acapts_name: ['', [Validators.required]],
|
|
40
|
+
acapts_description: [''],
|
|
41
|
+
acapts_class_program_id_acacpm: ['', [Validators.required]],
|
|
42
|
+
acapts_parent_class_prog_term_acapt: ['', [Validators.required]],
|
|
43
|
+
acapts_isactive: [true],
|
|
44
|
+
acapts_iscurrent: [false],
|
|
45
|
+
acapts_islocked: [false]
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
ngOnInit() {
|
|
49
|
+
this.initializeComponent();
|
|
50
|
+
this.updateBreadcrumbData();
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Update breadcrumb data based on mode
|
|
54
|
+
*/
|
|
55
|
+
updateBreadcrumbData() {
|
|
56
|
+
const additionalItems = [];
|
|
57
|
+
if (this.isViewMode()) {
|
|
58
|
+
additionalItems.push({
|
|
59
|
+
id: 'view',
|
|
60
|
+
label: 'View',
|
|
61
|
+
icon: 'visibility',
|
|
62
|
+
url: undefined
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
else if (this.isEditMode()) {
|
|
66
|
+
additionalItems.push({
|
|
67
|
+
id: 'edit',
|
|
68
|
+
label: 'Edit',
|
|
69
|
+
icon: 'edit',
|
|
70
|
+
url: undefined
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
additionalItems.push({
|
|
75
|
+
id: 'create',
|
|
76
|
+
label: 'Create',
|
|
77
|
+
icon: 'add',
|
|
78
|
+
url: undefined
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
this.breadcrumbData.set(additionalItems);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Initialize component
|
|
85
|
+
*/
|
|
86
|
+
initializeComponent() {
|
|
87
|
+
// Check route parameters to determine mode
|
|
88
|
+
const url = this.router.url;
|
|
89
|
+
const queryParams = this.route.snapshot.queryParams;
|
|
90
|
+
if (url.includes('/view/')) {
|
|
91
|
+
this.isViewMode.set(true);
|
|
92
|
+
this.loadProgramTermSectionForView(queryParams);
|
|
93
|
+
}
|
|
94
|
+
else if (url.includes('/edit/')) {
|
|
95
|
+
this.isEditMode.set(true);
|
|
96
|
+
this.loadProgramTermSectionForEdit(queryParams);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
// Create mode
|
|
100
|
+
this.isEditMode.set(false);
|
|
101
|
+
this.isViewMode.set(false);
|
|
102
|
+
}
|
|
103
|
+
// Update breadcrumb after mode is determined
|
|
104
|
+
this.updateBreadcrumbData();
|
|
105
|
+
// Load dropdown options
|
|
106
|
+
this.loadDropdownOptions();
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Load program term section for viewing
|
|
110
|
+
*/
|
|
111
|
+
loadProgramTermSectionForView(queryParams) {
|
|
112
|
+
// Implementation for view mode
|
|
113
|
+
this.programTermSectionForm.disable();
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Load program term section for editing
|
|
117
|
+
*/
|
|
118
|
+
loadProgramTermSectionForEdit(queryParams) {
|
|
119
|
+
// Implementation for edit mode
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Load dropdown options
|
|
123
|
+
*/
|
|
124
|
+
loadDropdownOptions() {
|
|
125
|
+
// Load program class options (mock data for now)
|
|
126
|
+
this.programClassOptions.set([
|
|
127
|
+
{ _id: '1', acacpm_name: 'Program Class 2024-25', acacpm_code: 'PC2024-25' },
|
|
128
|
+
{ _id: '2', acacpm_name: 'Program Class 2023-24', acacpm_code: 'PC2023-24' }
|
|
129
|
+
]);
|
|
130
|
+
// Load class program term options (mock data for now)
|
|
131
|
+
this.classProgramTermOptions.set([
|
|
132
|
+
{ _id: '1', acapt_name: 'First Term', acapt_code: 'T1' },
|
|
133
|
+
{ _id: '2', acapt_name: 'Second Term', acapt_code: 'T2' },
|
|
134
|
+
{ _id: '3', acapt_name: 'Third Term', acapt_code: 'T3' }
|
|
135
|
+
]);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Tab configuration
|
|
139
|
+
*/
|
|
140
|
+
programTermSectionTabs() {
|
|
141
|
+
return [
|
|
142
|
+
{ id: 'basic', label: 'Section Details', icon: 'group' },
|
|
143
|
+
{ id: 'configuration', label: 'Configuration', icon: 'tune' }
|
|
144
|
+
];
|
|
145
|
+
}
|
|
146
|
+
onTabChange(tab) {
|
|
147
|
+
this.activeTab.set(tab.id);
|
|
148
|
+
}
|
|
149
|
+
onSubmit() {
|
|
150
|
+
if (this.isViewMode()) {
|
|
151
|
+
this.router.navigate(['/control-panel/program-term-section']);
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
if (this.programTermSectionForm.invalid) {
|
|
155
|
+
this.notificationService.error('Please fill in all required fields correctly.');
|
|
156
|
+
this.markFormGroupTouched();
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
this.loading.set(true);
|
|
160
|
+
this.error.set(null);
|
|
161
|
+
const formData = this.programTermSectionForm.value;
|
|
162
|
+
console.log('Program Term Section Form Data:', formData);
|
|
163
|
+
// Mock save operation
|
|
164
|
+
setTimeout(() => {
|
|
165
|
+
const action = this.isEditMode() ? 'updated' : 'created';
|
|
166
|
+
this.notificationService.success(`Program term section has been ${action} successfully.`);
|
|
167
|
+
this.router.navigate(['/control-panel/program-term-section']);
|
|
168
|
+
this.loading.set(false);
|
|
169
|
+
}, 1000);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Mark all form controls as touched to trigger validation display
|
|
173
|
+
*/
|
|
174
|
+
markFormGroupTouched() {
|
|
175
|
+
Object.keys(this.programTermSectionForm.controls).forEach(key => {
|
|
176
|
+
const control = this.programTermSectionForm.get(key);
|
|
177
|
+
control?.markAsTouched();
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
resetForm() {
|
|
181
|
+
this.programTermSectionForm.reset({
|
|
182
|
+
acapts_isactive: true,
|
|
183
|
+
acapts_iscurrent: false,
|
|
184
|
+
acapts_islocked: false
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Go back to program term section list
|
|
189
|
+
*/
|
|
190
|
+
goBackToProgramTermSectionList() {
|
|
191
|
+
this.router.navigate(['/control-panel/program-term-section']);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Cancel form and optionally navigate back
|
|
195
|
+
*/
|
|
196
|
+
cancelForm() {
|
|
197
|
+
if (this.isEditMode()) {
|
|
198
|
+
this.goBackToProgramTermSectionList();
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
this.resetForm();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Get page title based on mode
|
|
206
|
+
*/
|
|
207
|
+
getPageTitle() {
|
|
208
|
+
if (this.isViewMode())
|
|
209
|
+
return 'View Program Term Section';
|
|
210
|
+
return this.isEditMode() ? 'Edit Program Term Section' : 'Create New Program Term Section';
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Cleanup when component is destroyed
|
|
214
|
+
*/
|
|
215
|
+
ngOnDestroy() {
|
|
216
|
+
console.log('🧹 ProgramTermSectionCreateComponent: Cleaning up component state');
|
|
217
|
+
// Reset all signals to their initial state
|
|
218
|
+
this.activeTab.set('basic');
|
|
219
|
+
this.loading.set(false);
|
|
220
|
+
this.error.set(null);
|
|
221
|
+
this.programTermSectionId.set('');
|
|
222
|
+
this.isEditMode.set(false);
|
|
223
|
+
this.programClassOptions.set([]);
|
|
224
|
+
this.classProgramTermOptions.set([]);
|
|
225
|
+
// Reset form to initial state
|
|
226
|
+
this.resetForm();
|
|
227
|
+
console.log('🧹 ProgramTermSectionCreateComponent: Component state cleaned up');
|
|
228
|
+
}
|
|
229
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ProgramTermSectionCreateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
230
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: ProgramTermSectionCreateComponent, isStandalone: true, selector: "cide-academics-program-term-section-create", ngImport: i0, template: "<!-- \n PROGRAM TERM SECTION 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_term_section_list' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"programTermSectionForm\"\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Tab Navigation -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-2 tw-py-0\">\n <cide-ele-tab [tabs]=\"programTermSectionTabs()\" [activeTabId]=\"activeTab()\" size=\"md\" variant=\"default\"\n (tabChange)=\"onTabChange($event)\">\n </cide-ele-tab>\n </div>\n </div>\n\n <!-- Tab 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 @switch (activeTab()) {\n\n @case ('basic') {\n <!-- Basic Program Term Section Information -->\n <div class=\"tw-space-y-6\">\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"Section Code *\" formControlName=\"acapts_code\" placeholder=\"e.g., SEC-A, SEC-B\"\n size=\"md\" leadingIcon=\"code\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Section Name *\" formControlName=\"acapts_name\"\n placeholder=\"e.g., Section A, Section B\" size=\"md\" leadingIcon=\"group\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-textarea label=\"Description\" formControlName=\"acapts_description\"\n placeholder=\"Enter detailed description of the section...\" 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 <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 formControlName=\"acapts_class_program_id_acacpm\" placeholder=\"Select program class\"\n [disabled]=\"isViewMode()\">\n <option value=\"\">Select Program Class</option>\n @for (program of programClassOptions(); track program._id) {\n <option [value]=\"program._id\">{{ program.acacpm_name }}</option>\n }\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 Term *</label>\n <cide-ele-select formControlName=\"acapts_parent_class_prog_term_acapt\" placeholder=\"Select class program term\"\n [disabled]=\"isViewMode()\">\n <option value=\"\">Select Class Program Term</option>\n @for (term of classProgramTermOptions(); track term._id) {\n <option [value]=\"term._id\">{{ term.acapt_name }}</option>\n }\n </cide-ele-select>\n </div>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 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\">\n <cide-ele-input formControlName=\"acapts_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 section</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\">\n <cide-ele-input formControlName=\"acapts_iscurrent\" 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\">Current</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Mark as current section</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\">\n <cide-ele-input formControlName=\"acapts_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 }\n\n @case ('configuration') {\n <!-- Section Configuration -->\n <div\n class=\"tw-bg-gradient-to-r tw-from-teal-50 tw-to-cyan-50 tw-border tw-border-teal-200 tw-rounded-xl tw-p-6\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-6\">\n <div class=\"tw-flex tw-items-center tw-gap-3\">\n <div class=\"tw-bg-teal-100 tw-p-2 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-6 tw-h-6\">tune</cide-ele-icon>\n </div>\n <div>\n <h6 class=\"tw-text-lg tw-font-semibold tw-text-teal-900 tw-m-0\">Section Configuration</h6>\n <p class=\"tw-text-sm tw-text-teal-600 tw-m-0\">Configure section-specific settings and parameters</p>\n </div>\n </div>\n </div>\n\n <div class=\"tw-space-y-4\">\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-p-4\">\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-mb-3\">Section Settings</h6>\n <div class=\"tw-space-y-3\">\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">people</cide-ele-icon>\n <div>\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Student Capacity</p>\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Configure maximum number of students for this section</p>\n </div>\n </div>\n \n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">schedule</cide-ele-icon>\n <div>\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Schedule Settings</p>\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Configure class timings and schedule preferences</p>\n </div>\n </div>\n\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">room</cide-ele-icon>\n <div>\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Room Assignment</p>\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Assign specific rooms or classroom preferences</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n }\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() || programTermSectionForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ isEditMode() ? 'Update Program Term Section' : 'Create Program Term Section' }}\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.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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: CideEleTabComponent, selector: "cide-ele-tab", inputs: ["tabs", "activeTabId", "size", "variant", "fullWidth", "disabled"], outputs: ["tabChange"] }, { 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"] }] });
|
|
231
|
+
}
|
|
232
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ProgramTermSectionCreateComponent, decorators: [{
|
|
233
|
+
type: Component,
|
|
234
|
+
args: [{ selector: 'cide-academics-program-term-section-create', standalone: true, imports: [
|
|
235
|
+
CommonModule,
|
|
236
|
+
ReactiveFormsModule,
|
|
237
|
+
CideInputComponent,
|
|
238
|
+
CideTextareaComponent,
|
|
239
|
+
CideEleButtonComponent,
|
|
240
|
+
CideEleTabComponent,
|
|
241
|
+
CideIconComponent,
|
|
242
|
+
CideSelectComponent,
|
|
243
|
+
CideLytSharedWrapperComponent
|
|
244
|
+
], template: "<!-- \n PROGRAM TERM SECTION 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_term_section_list' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"programTermSectionForm\"\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Tab Navigation -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-2 tw-py-0\">\n <cide-ele-tab [tabs]=\"programTermSectionTabs()\" [activeTabId]=\"activeTab()\" size=\"md\" variant=\"default\"\n (tabChange)=\"onTabChange($event)\">\n </cide-ele-tab>\n </div>\n </div>\n\n <!-- Tab 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 @switch (activeTab()) {\n\n @case ('basic') {\n <!-- Basic Program Term Section Information -->\n <div class=\"tw-space-y-6\">\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"Section Code *\" formControlName=\"acapts_code\" placeholder=\"e.g., SEC-A, SEC-B\"\n size=\"md\" leadingIcon=\"code\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Section Name *\" formControlName=\"acapts_name\"\n placeholder=\"e.g., Section A, Section B\" size=\"md\" leadingIcon=\"group\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-textarea label=\"Description\" formControlName=\"acapts_description\"\n placeholder=\"Enter detailed description of the section...\" 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 <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 formControlName=\"acapts_class_program_id_acacpm\" placeholder=\"Select program class\"\n [disabled]=\"isViewMode()\">\n <option value=\"\">Select Program Class</option>\n @for (program of programClassOptions(); track program._id) {\n <option [value]=\"program._id\">{{ program.acacpm_name }}</option>\n }\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 Term *</label>\n <cide-ele-select formControlName=\"acapts_parent_class_prog_term_acapt\" placeholder=\"Select class program term\"\n [disabled]=\"isViewMode()\">\n <option value=\"\">Select Class Program Term</option>\n @for (term of classProgramTermOptions(); track term._id) {\n <option [value]=\"term._id\">{{ term.acapt_name }}</option>\n }\n </cide-ele-select>\n </div>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 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\">\n <cide-ele-input formControlName=\"acapts_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 section</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\">\n <cide-ele-input formControlName=\"acapts_iscurrent\" 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\">Current</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Mark as current section</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\">\n <cide-ele-input formControlName=\"acapts_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 }\n\n @case ('configuration') {\n <!-- Section Configuration -->\n <div\n class=\"tw-bg-gradient-to-r tw-from-teal-50 tw-to-cyan-50 tw-border tw-border-teal-200 tw-rounded-xl tw-p-6\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-6\">\n <div class=\"tw-flex tw-items-center tw-gap-3\">\n <div class=\"tw-bg-teal-100 tw-p-2 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-6 tw-h-6\">tune</cide-ele-icon>\n </div>\n <div>\n <h6 class=\"tw-text-lg tw-font-semibold tw-text-teal-900 tw-m-0\">Section Configuration</h6>\n <p class=\"tw-text-sm tw-text-teal-600 tw-m-0\">Configure section-specific settings and parameters</p>\n </div>\n </div>\n </div>\n\n <div class=\"tw-space-y-4\">\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-p-4\">\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-mb-3\">Section Settings</h6>\n <div class=\"tw-space-y-3\">\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">people</cide-ele-icon>\n <div>\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Student Capacity</p>\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Configure maximum number of students for this section</p>\n </div>\n </div>\n \n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">schedule</cide-ele-icon>\n <div>\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Schedule Settings</p>\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Configure class timings and schedule preferences</p>\n </div>\n </div>\n\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">room</cide-ele-icon>\n <div>\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Room Assignment</p>\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Assign specific rooms or classroom preferences</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n }\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() || programTermSectionForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ isEditMode() ? 'Update Program Term Section' : 'Create Program Term Section' }}\n </button>\n </div>\n </div>\n </div>\n </form>\n</cide-lyt-shared-wrapper>\n\n" }]
|
|
245
|
+
}], ctorParameters: () => [] });
|
|
246
|
+
|
|
247
|
+
export { ProgramTermSectionCreateComponent };
|
|
248
|
+
//# sourceMappingURL=cloud-ide-academics-program-term-section-create.component-DHrTb-XI.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-ide-academics-program-term-section-create.component-DHrTb-XI.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/program-term-section-management/components/program-term-section-create/program-term-section-create.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/program-term-section-management/components/program-term-section-create/program-term-section-create.component.html"],"sourcesContent":["import { Component, inject, signal, OnInit, DestroyRef, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideEleTabComponent, TabItem, CideIconComponent, CideSelectComponent, NotificationService, ConfirmationService } from 'cloud-ide-element';\nimport { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\n\ninterface ProgramClass {\n _id?: string;\n acacpm_name?: string;\n acacpm_code?: string;\n}\n\ninterface ClassProgramTerm {\n _id?: string;\n acapt_name?: string;\n acapt_code?: string;\n}\n\n@Component({\n selector: 'cide-academics-program-term-section-create',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideInputComponent,\n CideTextareaComponent,\n CideEleButtonComponent,\n CideEleTabComponent,\n CideIconComponent,\n CideSelectComponent,\n CideLytSharedWrapperComponent\n ],\n templateUrl: './program-term-section-create.component.html'\n})\nexport class ProgramTermSectionCreateComponent implements OnInit, OnDestroy {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private fb = inject(FormBuilder);\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\n programTermSectionForm: FormGroup;\n activeTab = signal('basic');\n loading = signal(false);\n error = signal<string | null>(null);\n\n // Program term section information from route\n programTermSectionId = signal<string>('');\n isEditMode = signal(false);\n isViewMode = signal(false);\n\n // Data signals\n programClasses = signal<ProgramClass[]>([]);\n classProgramTerms = signal<ClassProgramTerm[]>([]);\n\n // Options for dropdowns\n programClassOptions = signal<any[]>([]);\n classProgramTermOptions = signal<any[]>([]);\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.programTermSectionForm = this.fb.group({\n // Basic Program Term Section Information\n acapts_code: ['', [Validators.required]],\n acapts_name: ['', [Validators.required]],\n acapts_description: [''],\n acapts_class_program_id_acacpm: ['', [Validators.required]],\n acapts_parent_class_prog_term_acapt: ['', [Validators.required]],\n acapts_isactive: [true],\n acapts_iscurrent: [false],\n acapts_islocked: [false]\n });\n }\n\n ngOnInit(): void {\n this.initializeComponent();\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 * Initialize component\n */\n private initializeComponent(): void {\n // Check route parameters to determine mode\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.loadProgramTermSectionForView(queryParams);\n } else if (url.includes('/edit/')) {\n this.isEditMode.set(true);\n this.loadProgramTermSectionForEdit(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 * Load program term section for viewing\n */\n private loadProgramTermSectionForView(queryParams: any): void {\n // Implementation for view mode\n this.programTermSectionForm.disable();\n }\n\n /**\n * Load program term section for editing\n */\n private loadProgramTermSectionForEdit(queryParams: any): void {\n // Implementation for edit mode\n }\n\n /**\n * Load dropdown options\n */\n private loadDropdownOptions(): void {\n // Load program class options (mock data for now)\n this.programClassOptions.set([\n { _id: '1', acacpm_name: 'Program Class 2024-25', acacpm_code: 'PC2024-25' },\n { _id: '2', acacpm_name: 'Program Class 2023-24', acacpm_code: 'PC2023-24' }\n ]);\n\n // Load class program term options (mock data for now)\n this.classProgramTermOptions.set([\n { _id: '1', acapt_name: 'First Term', acapt_code: 'T1' },\n { _id: '2', acapt_name: 'Second Term', acapt_code: 'T2' },\n { _id: '3', acapt_name: 'Third Term', acapt_code: 'T3' }\n ]);\n }\n\n /**\n * Tab configuration\n */\n programTermSectionTabs() {\n return [\n { id: 'basic', label: 'Section Details', icon: 'group' },\n { id: 'configuration', label: 'Configuration', icon: 'tune' }\n ];\n }\n\n onTabChange(tab: TabItem) {\n this.activeTab.set(tab.id);\n }\n\n onSubmit() {\n if (this.isViewMode()) {\n this.router.navigate(['/control-panel/program-term-section']);\n return;\n }\n\n if (this.programTermSectionForm.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.programTermSectionForm.value;\n console.log('Program Term Section Form Data:', formData);\n\n // Mock save operation\n setTimeout(() => {\n const action = this.isEditMode() ? 'updated' : 'created';\n this.notificationService.success(`Program term section has been ${action} successfully.`);\n this.router.navigate(['/control-panel/program-term-section']);\n this.loading.set(false);\n }, 1000);\n }\n\n /**\n * Mark all form controls as touched to trigger validation display\n */\n private markFormGroupTouched(): void {\n Object.keys(this.programTermSectionForm.controls).forEach(key => {\n const control = this.programTermSectionForm.get(key);\n control?.markAsTouched();\n });\n }\n\n resetForm() {\n this.programTermSectionForm.reset({\n acapts_isactive: true,\n acapts_iscurrent: false,\n acapts_islocked: false\n });\n }\n\n /**\n * Go back to program term section list\n */\n goBackToProgramTermSectionList(): void {\n this.router.navigate(['/control-panel/program-term-section']);\n }\n\n /**\n * Cancel form and optionally navigate back\n */\n cancelForm(): void {\n if (this.isEditMode()) {\n this.goBackToProgramTermSectionList();\n } else {\n this.resetForm();\n }\n }\n\n /**\n * Get page title based on mode\n */\n getPageTitle(): string {\n if (this.isViewMode()) return 'View Program Term Section';\n return this.isEditMode() ? 'Edit Program Term Section' : 'Create New Program Term Section';\n }\n\n /**\n * Cleanup when component is destroyed\n */\n ngOnDestroy(): void {\n console.log('🧹 ProgramTermSectionCreateComponent: Cleaning up component state');\n\n // Reset all signals to their initial state\n this.activeTab.set('basic');\n this.loading.set(false);\n this.error.set(null);\n this.programTermSectionId.set('');\n this.isEditMode.set(false);\n this.programClassOptions.set([]);\n this.classProgramTermOptions.set([]);\n\n // Reset form to initial state\n this.resetForm();\n\n console.log('🧹 ProgramTermSectionCreateComponent: Component state cleaned up');\n }\n}\n","<!-- \n PROGRAM TERM SECTION 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_term_section_list' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"programTermSectionForm\"\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Tab Navigation -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-2 tw-py-0\">\n <cide-ele-tab [tabs]=\"programTermSectionTabs()\" [activeTabId]=\"activeTab()\" size=\"md\" variant=\"default\"\n (tabChange)=\"onTabChange($event)\">\n </cide-ele-tab>\n </div>\n </div>\n\n <!-- Tab 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 @switch (activeTab()) {\n\n @case ('basic') {\n <!-- Basic Program Term Section Information -->\n <div class=\"tw-space-y-6\">\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"Section Code *\" formControlName=\"acapts_code\" placeholder=\"e.g., SEC-A, SEC-B\"\n size=\"md\" leadingIcon=\"code\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Section Name *\" formControlName=\"acapts_name\"\n placeholder=\"e.g., Section A, Section B\" size=\"md\" leadingIcon=\"group\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-textarea label=\"Description\" formControlName=\"acapts_description\"\n placeholder=\"Enter detailed description of the section...\" 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 <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 formControlName=\"acapts_class_program_id_acacpm\" placeholder=\"Select program class\"\n [disabled]=\"isViewMode()\">\n <option value=\"\">Select Program Class</option>\n @for (program of programClassOptions(); track program._id) {\n <option [value]=\"program._id\">{{ program.acacpm_name }}</option>\n }\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 Term *</label>\n <cide-ele-select formControlName=\"acapts_parent_class_prog_term_acapt\" placeholder=\"Select class program term\"\n [disabled]=\"isViewMode()\">\n <option value=\"\">Select Class Program Term</option>\n @for (term of classProgramTermOptions(); track term._id) {\n <option [value]=\"term._id\">{{ term.acapt_name }}</option>\n }\n </cide-ele-select>\n </div>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 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\">\n <cide-ele-input formControlName=\"acapts_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 section</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\">\n <cide-ele-input formControlName=\"acapts_iscurrent\" 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\">Current</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Mark as current section</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\">\n <cide-ele-input formControlName=\"acapts_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 }\n\n @case ('configuration') {\n <!-- Section Configuration -->\n <div\n class=\"tw-bg-gradient-to-r tw-from-teal-50 tw-to-cyan-50 tw-border tw-border-teal-200 tw-rounded-xl tw-p-6\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-6\">\n <div class=\"tw-flex tw-items-center tw-gap-3\">\n <div class=\"tw-bg-teal-100 tw-p-2 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-6 tw-h-6\">tune</cide-ele-icon>\n </div>\n <div>\n <h6 class=\"tw-text-lg tw-font-semibold tw-text-teal-900 tw-m-0\">Section Configuration</h6>\n <p class=\"tw-text-sm tw-text-teal-600 tw-m-0\">Configure section-specific settings and parameters</p>\n </div>\n </div>\n </div>\n\n <div class=\"tw-space-y-4\">\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-p-4\">\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-mb-3\">Section Settings</h6>\n <div class=\"tw-space-y-3\">\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">people</cide-ele-icon>\n <div>\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Student Capacity</p>\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Configure maximum number of students for this section</p>\n </div>\n </div>\n \n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">schedule</cide-ele-icon>\n <div>\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Schedule Settings</p>\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Configure class timings and schedule preferences</p>\n </div>\n </div>\n\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">room</cide-ele-icon>\n <div>\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Room Assignment</p>\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Assign specific rooms or classroom preferences</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n }\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() || programTermSectionForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ isEditMode() ? 'Update Program Term Section' : 'Create Program Term Section' }}\n </button>\n </div>\n </div>\n </div>\n </form>\n</cide-lyt-shared-wrapper>\n\n"],"names":[],"mappings":"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"}
|
|
@@ -477,7 +477,7 @@ class ProgramTermSectionListComponent {
|
|
|
477
477
|
this.loadProgramTermSections();
|
|
478
478
|
}
|
|
479
479
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ProgramTermSectionListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
480
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: ProgramTermSectionListComponent, isStandalone: true, selector: "cide-academics-program-term-section-list", viewQueries: [{ propertyName: "programTermSectionDetailsRendererTemplate", first: true, predicate: ["programTermSectionDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "programTermSectionStatusRendererTemplate", first: true, predicate: ["programTermSectionStatusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Program Term Section Management Container -->\
|
|
480
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: ProgramTermSectionListComponent, isStandalone: true, selector: "cide-academics-program-term-section-list", viewQueries: [{ propertyName: "programTermSectionDetailsRendererTemplate", first: true, predicate: ["programTermSectionDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "programTermSectionStatusRendererTemplate", first: true, predicate: ["programTermSectionStatusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Program Term Section Management Container -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'program_term_section_list' }\"\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)=\"createProgramTermSection()\">\n Create Program Term Section\n </button>\n </div>\n\n <!-- Main Content -->\n <div class=\"tw-flex tw-flex-col tw-w-full tw-h-full\">\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 #programTermSectionDetailsRendererTemplate let-value=\"value\" let-item=\"item\" 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-teal-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">group</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 {{ item?.acapts_name }}\n </h6>\n <p class=\"tw-text-xs tw-text-gray-500 tw-truncate tw-m-0\">\n {{ item?.acapts_description }}\n </p>\n </div>\n </div>\n</ng-template>\n\n<ng-template #programTermSectionStatusRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n @if (item?.acapts_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 (item?.acapts_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': item?.acapts_isactive,\n 'tw-bg-red-100 tw-text-red-800': !item?.acapts_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': item?.acapts_isactive,\n 'tw-text-red-600': !item?.acapts_isactive\n }\" class=\"tw-w-3 tw-h-3 tw-mr-1\">\n {{ item?.acapts_isactive ? 'check_circle' : 'cancel' }}\n </cide-ele-icon>\n {{ item?.acapts_isactive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(item)\"\n (itemClick)=\"onDropdownItemClick($event, item)\"\n size=\"sm\"\n variant=\"ghost\"\n icon=\"more_vert\">\n </cide-ele-dropdown>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
|
|
481
481
|
}
|
|
482
482
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ProgramTermSectionListComponent, decorators: [{
|
|
483
483
|
type: Component,
|
|
@@ -488,8 +488,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
488
488
|
CideEleButtonComponent,
|
|
489
489
|
CideEleDropdownComponent,
|
|
490
490
|
CideLytSharedWrapperComponent
|
|
491
|
-
], template: "<!-- Program Term Section Management Container -->\
|
|
491
|
+
], template: "<!-- Program Term Section Management Container -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'program_term_section_list' }\"\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)=\"createProgramTermSection()\">\n Create Program Term Section\n </button>\n </div>\n\n <!-- Main Content -->\n <div class=\"tw-flex tw-flex-col tw-w-full tw-h-full\">\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 #programTermSectionDetailsRendererTemplate let-value=\"value\" let-item=\"item\" 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-teal-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">group</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 {{ item?.acapts_name }}\n </h6>\n <p class=\"tw-text-xs tw-text-gray-500 tw-truncate tw-m-0\">\n {{ item?.acapts_description }}\n </p>\n </div>\n </div>\n</ng-template>\n\n<ng-template #programTermSectionStatusRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n @if (item?.acapts_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 (item?.acapts_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': item?.acapts_isactive,\n 'tw-bg-red-100 tw-text-red-800': !item?.acapts_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': item?.acapts_isactive,\n 'tw-text-red-600': !item?.acapts_isactive\n }\" class=\"tw-w-3 tw-h-3 tw-mr-1\">\n {{ item?.acapts_isactive ? 'check_circle' : 'cancel' }}\n </cide-ele-icon>\n {{ item?.acapts_isactive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(item)\"\n (itemClick)=\"onDropdownItemClick($event, item)\"\n size=\"sm\"\n variant=\"ghost\"\n icon=\"more_vert\">\n </cide-ele-dropdown>\n</ng-template>\n" }]
|
|
492
492
|
}] });
|
|
493
493
|
|
|
494
494
|
export { ProgramTermSectionListComponent };
|
|
495
|
-
//# sourceMappingURL=cloud-ide-academics-program-term-section-list.component-
|
|
495
|
+
//# sourceMappingURL=cloud-ide-academics-program-term-section-list.component-ktIAxvxR.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-ide-academics-program-term-section-list.component-ktIAxvxR.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/program-term-section-management/services/program-term-section.service.ts","../../../projects/cloud-ide-academics/src/lib/collection/program-term-section-management/components/program-term-section-list/program-term-section-list.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/program-term-section-management/components/program-term-section-list/program-term-section-list.component.html"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n cidePath,\r\n academicsRoutesUrl,\r\n hostManagerRoutesUrl,\r\n generateStringFromObject,\r\n type prgTrmSectionControllerResponse,\r\n type MPrgTrmSection,\r\n type prgTrmSectionByIdControllerResponse,\r\n type MPrgTrmSectionGetByIdPayload,\r\n type prgTrmSectionInsertUpdateControllerResponse,\r\n type MPrgTrmSectionInsertUpdatePayload,\r\n type prgTrmSectionDeleteControllerResponse,\r\n type MPrgTrmSectionDeletePayload,\r\n type prgTrmSectionToggleStatusControllerResponse,\r\n type MPrgTrmSectionToggleStatusPayload,\r\n type prgTrmSectionToggleLockControllerResponse,\r\n type MPrgTrmSectionToggleLockPayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideLytProgramTermSectionService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get list of program term sections\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of program term section list response\r\n */\r\n getProgramTermSectionList(payload: MPrgTrmSection): Observable<prgTrmSectionControllerResponse> {\r\n console.log(\"Program Term Section List Payload:\", payload);\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.programTermSection,\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get program term section by ID\r\n * @param payload - Program term section ID payload\r\n * @returns Observable of program term section data\r\n */\r\n getProgramTermSectionById(payload: MPrgTrmSectionGetByIdPayload): Observable<prgTrmSectionByIdControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.programTermSection,\r\n 'byId',\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Create or update program term section\r\n * @param data - Program term section data to save\r\n * @returns Observable of the save response\r\n */\r\n saveProgramTermSection(data: MPrgTrmSectionInsertUpdatePayload): Observable<prgTrmSectionInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.programTermSection\r\n ]);\r\n\r\n return this.http.post(url, data);\r\n }\r\n\r\n /**\r\n * Delete program term section\r\n * @param payload - Program term section delete payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteProgramTermSection(payload: MPrgTrmSectionDeletePayload): Observable<prgTrmSectionDeleteControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.programTermSection,\r\n query\r\n ]);\r\n\r\n return this.http.delete(url);\r\n }\r\n\r\n /**\r\n * Toggle program term section status (active/inactive)\r\n * @param payload - Program term section toggle status payload\r\n * @returns Observable of the toggle status response\r\n */\r\n toggleProgramTermSectionStatus(payload: MPrgTrmSectionToggleStatusPayload): Observable<prgTrmSectionToggleStatusControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.programTermSection,\r\n 'toggleStatus',\r\n query\r\n ]);\r\n\r\n return this.http.put(url, {});\r\n }\r\n\r\n /**\r\n * Toggle program term section lock status\r\n * @param payload - Program term section toggle lock payload\r\n * @returns Observable of the toggle lock response\r\n */\r\n toggleProgramTermSectionLock(payload: MPrgTrmSectionToggleLockPayload): Observable<prgTrmSectionToggleLockControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.programTermSection,\r\n 'toggleLock',\r\n query\r\n ]);\r\n\r\n return this.http.put(url, {});\r\n }\r\n}\r\n","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideEleDataGridComponent, CideIconComponent, CideEleButtonComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, NotificationService, ConfirmationService } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { \n type MPrgTrmSection,\n type MPrgTrmSectionDeletePayload,\n type MPrgTrmSectionToggleStatusPayload\n} from 'cloud-ide-lms-model';\nimport { CideLytProgramTermSectionService } from '../../services/program-term-section.service';\n\n// Interfaces based on the model files\ninterface ProgramTermSection {\n _id?: string;\n acapts_code?: string;\n acapts_name?: string;\n acapts_description?: string;\n acapts_class_program_id_acacpm?: {\n _id?: string;\n acacpm_name?: string;\n };\n acapts_parent_class_prog_term_acapt?: {\n _id?: string;\n acapt_name?: string;\n };\n acapts_isactive?: boolean;\n acapts_iscurrent?: boolean;\n acapts_islocked?: boolean;\n}\n\n@Component({\n selector: 'cide-academics-program-term-section-list',\n standalone: true,\n imports: [\n CommonModule,\n CideEleDataGridComponent,\n CideIconComponent,\n CideEleButtonComponent,\n CideEleDropdownComponent,\n CideLytSharedWrapperComponent\n ],\n templateUrl: './program-term-section-list.component.html'\n})\nexport class ProgramTermSectionListComponent implements OnInit {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private router = inject(Router);\n private appState = inject(AppStateHelperService);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\n private programTermSectionService = inject(CideLytProgramTermSectionService);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n programTermSectionDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('programTermSectionDetailsRendererTemplate');\n programTermSectionStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('programTermSectionStatusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n\n // Computed template renderers for grid\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n programTermSectionDetailsRenderer: this.programTermSectionDetailsRendererTemplate(),\n programTermSectionStatusRenderer: this.programTermSectionStatusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n programTermSections = signal<ProgramTermSection[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\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 // Derived list filtered by searchTerm\n filteredProgramTermSections = computed(() => {\n const q = (this.searchTerm() || '').toLowerCase().trim();\n const items = this.programTermSections() || [];\n if (!q) return items;\n return items.filter(pts => {\n const name = (pts.acapts_name || '').toLowerCase();\n const code = (pts.acapts_code || '').toLowerCase();\n const description = (pts.acapts_description || '').toLowerCase();\n return name.includes(q) || code.includes(q) || description.includes(q);\n });\n });\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ProgramTermSection>>({\n id: 'program-term-section-list-grid',\n columns: [\n {\n key: 'details',\n header: 'Section Details',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'programTermSectionDetailsRenderer'\n },\n {\n key: 'acapts_code',\n header: 'Code',\n type: 'text',\n width: '120px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'acapts_class_program_id_acacpm',\n header: 'Program Class',\n type: 'custom',\n width: '200px',\n truncate: true,\n align: 'left',\n renderer: 'programClassRenderer'\n },\n {\n key: 'acapts_parent_class_prog_term_acapt',\n header: 'Class Program Term',\n type: 'custom',\n width: '200px',\n truncate: true,\n align: 'left',\n renderer: 'classProgramTermRenderer'\n },\n {\n key: 'acapts_isactive',\n header: 'Status',\n type: 'custom',\n width: '120px',\n truncate: false,\n align: 'center',\n renderer: 'programTermSectionStatusRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '150px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search program term sections...',\n searchableColumns: ['acapts_name', 'acapts_code', 'acapts_description'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none'\n });\n\n /**\n * Get action dropdown items\n */\n getActionDropdownItems(programTermSection: ProgramTermSection): DropdownItem[] {\n const items: DropdownItem[] = [\n {\n id: 'view',\n label: 'View Details',\n icon: 'visibility',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700'\n },\n {\n id: 'edit',\n label: 'Edit Section',\n icon: 'edit',\n iconColor: 'tw-text-blue-400',\n textColor: 'tw-text-blue-700'\n },\n {\n id: 'toggleStatus',\n label: programTermSection?.acapts_isactive ? 'Deactivate' : 'Activate',\n icon: programTermSection?.acapts_isactive ? 'toggle_off' : 'toggle_on',\n iconColor: programTermSection?.acapts_isactive ? 'tw-text-orange-400' : 'tw-text-green-400',\n textColor: programTermSection?.acapts_isactive ? 'tw-text-orange-700' : 'tw-text-green-700'\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n iconColor: 'tw-text-red-400',\n textColor: 'tw-text-red-700'\n }\n ];\n\n return items;\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, programTermSection: ProgramTermSection): void {\n switch (item.id) {\n case 'view':\n this.viewProgramTermSection(programTermSection);\n break;\n case 'edit':\n this.editProgramTermSection(programTermSection);\n break;\n case 'toggleStatus':\n this.toggleProgramTermSectionStatus(programTermSection);\n break;\n case 'delete':\n this.deleteProgramTermSection(programTermSection);\n break;\n }\n }\n\n ngOnInit(): void {\n this.initializeBreadcrumbData();\n this.loadProgramTermSections();\n }\n\n /**\n * Initialize breadcrumb data for list view\n */\n private initializeBreadcrumbData(): void {\n this.breadcrumbData.set([\n {\n id: 'list',\n label: 'List',\n icon: 'list',\n url: undefined\n }\n ]);\n }\n\n /**\n * Load program term sections data\n */\n private loadProgramTermSections(): void {\n this.loading.set(true);\n this.error.set(null);\n\n const payload: MPrgTrmSection = {\n pageIndex: 0,\n pageSize: 100,\n query: this.searchTerm() || \"\",\n sort: {\n key: 'acapts_name',\n order: 'asc'\n }\n };\n\n this.programTermSectionService.getProgramTermSectionList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n console.log('📚 Program term sections loaded:', response.data);\n this.programTermSections.set(response.data);\n this.updateGridData();\n this.notificationService.success(`Loaded ${response.data.length} program term section(s) successfully.`);\n } else {\n console.warn('⚠️ No program term section data received');\n this.programTermSections.set([]);\n this.updateGridData();\n this.notificationService.warning('No program term sections found.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error loading program term sections:', error);\n this.error.set('Failed to load program term sections');\n this.loading.set(false);\n this.notificationService.error('Failed to load program term sections');\n }\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(): void {\n this.gridConfig.update(config => ({\n ...config,\n data: this.filteredProgramTermSections()\n }));\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ProgramTermSection>): void {\n switch (event.type) {\n case 'pageChange':\n if (event.data && typeof event.data === 'object' && 'pageIndex' in event.data && 'pageSize' in event.data) {\n this.loadProgramTermSections();\n }\n break;\n case 'search':\n this.searchTerm.set(event.data as string);\n this.updateGridData();\n break;\n case 'refresh':\n this.loadProgramTermSections();\n break;\n }\n }\n\n /**\n * Create new program term section\n */\n createProgramTermSection(): void {\n this.router.navigate(['/control-panel/program-term-section/create']);\n }\n\n /**\n * View program term section details\n */\n viewProgramTermSection(programTermSection: ProgramTermSection): void {\n this.router.navigate(['/control-panel/program-term-section/view', programTermSection._id]);\n }\n\n /**\n * Edit program term section\n */\n editProgramTermSection(programTermSection: ProgramTermSection): void {\n this.router.navigate(['/control-panel/program-term-section/edit', programTermSection._id]);\n }\n\n /**\n * Delete program term section\n */\n deleteProgramTermSection(programTermSection: ProgramTermSection): void {\n this.confirmationService.confirmDelete(programTermSection?.acapts_name).then((confirmed: boolean) => {\n if (confirmed) {\n this.loading.set(true);\n const payload: MPrgTrmSectionDeletePayload = {\n acapts_id: programTermSection._id!\n };\n\n this.programTermSectionService.deleteProgramTermSection(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.programTermSections.update(sections => \n sections.filter(pts => pts._id !== programTermSection._id)\n );\n this.updateGridData();\n this.notificationService.success('Program term section deleted successfully.');\n } else {\n this.notificationService.error('Failed to delete program term section.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error deleting program term section:', error);\n this.notificationService.error('Failed to delete program term section.');\n this.loading.set(false);\n }\n });\n }\n });\n }\n\n /**\n * Toggle program term section status\n */\n toggleProgramTermSectionStatus(programTermSection: ProgramTermSection): void {\n this.loading.set(true);\n const payload: MPrgTrmSectionToggleStatusPayload = {\n acapts_id: programTermSection._id!\n };\n\n this.programTermSectionService.toggleProgramTermSectionStatus(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.programTermSections.update(sections => \n sections.map(pts => \n pts._id === programTermSection._id \n ? { ...pts, acapts_isactive: !pts.acapts_isactive }\n : pts\n )\n );\n this.updateGridData();\n this.notificationService.success(`Program term section ${programTermSection?.acapts_isactive ? 'deactivated' : 'activated'} successfully.`);\n } else {\n this.notificationService.error('Failed to toggle program term section status.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error toggling program term section status:', error);\n this.notificationService.error('Failed to toggle program term section status.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Refresh data\n */\n refreshData(): void {\n this.loadProgramTermSections();\n }\n}\n","<!-- Program Term Section Management Container -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'program_term_section_list' }\"\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)=\"createProgramTermSection()\">\n Create Program Term Section\n </button>\n </div>\n\n <!-- Main Content -->\n <div class=\"tw-flex tw-flex-col tw-w-full tw-h-full\">\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 #programTermSectionDetailsRendererTemplate let-value=\"value\" let-item=\"item\" 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-teal-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">group</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 {{ item?.acapts_name }}\n </h6>\n <p class=\"tw-text-xs tw-text-gray-500 tw-truncate tw-m-0\">\n {{ item?.acapts_description }}\n </p>\n </div>\n </div>\n</ng-template>\n\n<ng-template #programTermSectionStatusRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n @if (item?.acapts_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 (item?.acapts_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': item?.acapts_isactive,\n 'tw-bg-red-100 tw-text-red-800': !item?.acapts_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': item?.acapts_isactive,\n 'tw-text-red-600': !item?.acapts_isactive\n }\" class=\"tw-w-3 tw-h-3 tw-mr-1\">\n {{ item?.acapts_isactive ? 'check_circle' : 'cancel' }}\n </cide-ele-icon>\n {{ item?.acapts_isactive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(item)\"\n (itemClick)=\"onDropdownItemClick($event, item)\"\n size=\"sm\"\n variant=\"ghost\"\n icon=\"more_vert\">\n </cide-ele-dropdown>\n</ng-template>\n"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { A as AcademicYearCreateComponent, d as AcademicYearListComponent, e as CideLytAcademicYearMappingService, a as CideLytAcademicYearService, g as CideLytClassProgramBranchFormComponent, f as CideLytClassProgramBranchListComponent, b as CideLytClassProgramBranchService, c as academicsRoutes } from './cloud-ide-academics-cloud-ide-academics-
|
|
1
|
+
export { A as AcademicYearCreateComponent, d as AcademicYearListComponent, e as CideLytAcademicYearMappingService, a as CideLytAcademicYearService, g as CideLytClassProgramBranchFormComponent, f as CideLytClassProgramBranchListComponent, b as CideLytClassProgramBranchService, c as academicsRoutes } from './cloud-ide-academics-cloud-ide-academics-CFEjm3Iz.mjs';
|
|
2
2
|
//# sourceMappingURL=cloud-ide-academics.mjs.map
|