cloud-ide-academics 0.0.20 → 0.0.23
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-DiWhmhG_.mjs → cloud-ide-academics-class-program-term-create.component-CD-JRaOo.mjs} +2 -2
- package/fesm2022/{cloud-ide-academics-class-program-term-create.component-DiWhmhG_.mjs.map → cloud-ide-academics-class-program-term-create.component-CD-JRaOo.mjs.map} +1 -1
- package/fesm2022/cloud-ide-academics-class-program-term-list.component-Bp-jTkgq.mjs +551 -0
- package/fesm2022/cloud-ide-academics-class-program-term-list.component-Bp-jTkgq.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-cloud-ide-academics-SBTPvNBh.mjs → cloud-ide-academics-cloud-ide-academics-DfUIvaVH.mjs} +26 -17
- package/fesm2022/cloud-ide-academics-cloud-ide-academics-DfUIvaVH.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-program-class-create.component-C1FnWsj4.mjs → cloud-ide-academics-program-class-create.component-BPgeglM_.mjs} +2 -2
- package/fesm2022/{cloud-ide-academics-program-class-create.component-C1FnWsj4.mjs.map → cloud-ide-academics-program-class-create.component-BPgeglM_.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-academics-program-class-list.component-Cbt7ptxQ.mjs → cloud-ide-academics-program-class-list.component-x8jYxy7J.mjs} +2 -2
- package/fesm2022/{cloud-ide-academics-program-class-list.component-Cbt7ptxQ.mjs.map → cloud-ide-academics-program-class-list.component-x8jYxy7J.mjs.map} +1 -1
- package/fesm2022/cloud-ide-academics.mjs +1 -1
- package/package.json +1 -1
- package/fesm2022/cloud-ide-academics-class-program-term-list.component-CaWAHMHN.mjs +0 -404
- package/fesm2022/cloud-ide-academics-class-program-term-list.component-CaWAHMHN.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-cloud-ide-academics-SBTPvNBh.mjs.map +0 -1
|
@@ -0,0 +1,551 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, DestroyRef, viewChild, computed, signal, Component } from '@angular/core';
|
|
3
|
+
import * as i1 from '@angular/common';
|
|
4
|
+
import { CommonModule } from '@angular/common';
|
|
5
|
+
import * as i1$1 from '@angular/forms';
|
|
6
|
+
import { FormsModule } from '@angular/forms';
|
|
7
|
+
import { Router, ActivatedRoute } from '@angular/router';
|
|
8
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
9
|
+
import { NotificationService, ConfirmationService, CideEleDataGridComponent, CideIconComponent, CideEleButtonComponent, CideEleDropdownComponent, CideSelectComponent } from 'cloud-ide-element';
|
|
10
|
+
import { AppStateHelperService } from 'cloud-ide-layout';
|
|
11
|
+
import { AcaClassPrgBranchListPayload, generateObjectFromString, MClassProgramTerm } from 'cloud-ide-lms-model';
|
|
12
|
+
import { C as CideLytClassProgramTermService } from './cloud-ide-academics-class-program-term.service-BW4PJQEM.mjs';
|
|
13
|
+
import { CLASS_PROGRAM_MASTER_SERVICE_TOKEN } from 'cloud-ide-shared';
|
|
14
|
+
import { b as CideLytClassProgramBranchService } from './cloud-ide-academics-cloud-ide-academics-DfUIvaVH.mjs';
|
|
15
|
+
|
|
16
|
+
class ClassProgramTermListComponent {
|
|
17
|
+
// Dependency injection
|
|
18
|
+
destroyRef = inject(DestroyRef);
|
|
19
|
+
router = inject(Router);
|
|
20
|
+
route = inject(ActivatedRoute);
|
|
21
|
+
appState = inject(AppStateHelperService);
|
|
22
|
+
notificationService = inject(NotificationService);
|
|
23
|
+
confirmationService = inject(ConfirmationService);
|
|
24
|
+
classProgramTermService = inject(CideLytClassProgramTermService);
|
|
25
|
+
classProgramMasterService = inject(CLASS_PROGRAM_MASTER_SERVICE_TOKEN);
|
|
26
|
+
classProgramBranchService = inject(CideLytClassProgramBranchService);
|
|
27
|
+
// Modern ViewChild signals for template renderers (Angular 20 approach)
|
|
28
|
+
classProgramTermDetailsRendererTemplate = viewChild.required('classProgramTermDetailsRendererTemplate');
|
|
29
|
+
classProgramTermStatusRendererTemplate = viewChild.required('classProgramTermStatusRendererTemplate');
|
|
30
|
+
actionsDropdownRendererTemplate = viewChild.required('actionsDropdownRendererTemplate');
|
|
31
|
+
// Computed template renderers for grid
|
|
32
|
+
templateRenderers = computed(() => ({
|
|
33
|
+
classProgramTermDetailsRenderer: this.classProgramTermDetailsRendererTemplate(),
|
|
34
|
+
classProgramTermStatusRenderer: this.classProgramTermStatusRendererTemplate(),
|
|
35
|
+
actionsDropdownRenderer: this.actionsDropdownRendererTemplate()
|
|
36
|
+
}), ...(ngDevMode ? [{ debugName: "templateRenderers" }] : []));
|
|
37
|
+
// Make Math available in template
|
|
38
|
+
Math = Math;
|
|
39
|
+
// Signals for reactive state management
|
|
40
|
+
classProgramTerms = signal([], ...(ngDevMode ? [{ debugName: "classProgramTerms" }] : []));
|
|
41
|
+
loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
|
|
42
|
+
error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
43
|
+
selectedItems = signal([], ...(ngDevMode ? [{ debugName: "selectedItems" }] : []));
|
|
44
|
+
searchTerm = signal('', ...(ngDevMode ? [{ debugName: "searchTerm" }] : []));
|
|
45
|
+
acabrnId = signal(null, ...(ngDevMode ? [{ debugName: "acabrnId" }] : []));
|
|
46
|
+
acacpmId = signal(null, ...(ngDevMode ? [{ debugName: "acacpmId" }] : []));
|
|
47
|
+
// Class program and branch dropdown signals
|
|
48
|
+
classProgramMasters = signal([], ...(ngDevMode ? [{ debugName: "classProgramMasters" }] : []));
|
|
49
|
+
classProgramMastersLoading = signal(false, ...(ngDevMode ? [{ debugName: "classProgramMastersLoading" }] : []));
|
|
50
|
+
selectedClassProgram = signal(null, ...(ngDevMode ? [{ debugName: "selectedClassProgram" }] : []));
|
|
51
|
+
classProgramBranches = signal([], ...(ngDevMode ? [{ debugName: "classProgramBranches" }] : []));
|
|
52
|
+
classProgramBranchesLoading = signal(false, ...(ngDevMode ? [{ debugName: "classProgramBranchesLoading" }] : []));
|
|
53
|
+
selectedProgramClassId = signal(null, ...(ngDevMode ? [{ debugName: "selectedProgramClassId" }] : []));
|
|
54
|
+
selectedBranchId = signal(null, ...(ngDevMode ? [{ debugName: "selectedBranchId" }] : []));
|
|
55
|
+
// Computed signals for dropdown options
|
|
56
|
+
classProgramMastersOptions = computed(() => this.classProgramMasters(), ...(ngDevMode ? [{ debugName: "classProgramMastersOptions" }] : []));
|
|
57
|
+
// Computed signal to check if branch dropdown should be shown
|
|
58
|
+
showBranchDropdown = computed(() => {
|
|
59
|
+
const selectedProgram = this.selectedClassProgram();
|
|
60
|
+
if (!selectedProgram)
|
|
61
|
+
return false;
|
|
62
|
+
const generalMaster = selectedProgram.acacpm_class_program_id_sygms;
|
|
63
|
+
if (!generalMaster || typeof generalMaster !== 'object')
|
|
64
|
+
return false;
|
|
65
|
+
let config;
|
|
66
|
+
if ('sygms_configuration' in generalMaster) {
|
|
67
|
+
const configValue = generalMaster.sygms_configuration;
|
|
68
|
+
if (typeof configValue === 'string') {
|
|
69
|
+
try {
|
|
70
|
+
config = JSON.parse(configValue);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else if (typeof configValue === 'object' && configValue !== null) {
|
|
77
|
+
config = configValue;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return config?.branchType === true;
|
|
81
|
+
}, ...(ngDevMode ? [{ debugName: "showBranchDropdown" }] : []));
|
|
82
|
+
// Derived list filtered by searchTerm
|
|
83
|
+
filteredClassProgramTerms = computed(() => {
|
|
84
|
+
const q = (this.searchTerm() || '').toLowerCase().trim();
|
|
85
|
+
const items = this.classProgramTerms() || [];
|
|
86
|
+
if (!q)
|
|
87
|
+
return items;
|
|
88
|
+
return items.filter(cpt => {
|
|
89
|
+
const name = (cpt.acapt_name || '').toLowerCase();
|
|
90
|
+
const code = (cpt.acapt_code || '').toLowerCase();
|
|
91
|
+
const description = (cpt.acapt_description || '').toLowerCase();
|
|
92
|
+
return name.includes(q) || code.includes(q) || description.includes(q);
|
|
93
|
+
});
|
|
94
|
+
}, ...(ngDevMode ? [{ debugName: "filteredClassProgramTerms" }] : []));
|
|
95
|
+
// Grid configuration signal
|
|
96
|
+
gridConfig = signal({
|
|
97
|
+
id: 'class-program-term-list-grid',
|
|
98
|
+
columns: [
|
|
99
|
+
{
|
|
100
|
+
key: 'details',
|
|
101
|
+
header: 'Term Details',
|
|
102
|
+
type: 'custom',
|
|
103
|
+
width: 'auto',
|
|
104
|
+
truncate: true,
|
|
105
|
+
align: 'left',
|
|
106
|
+
renderer: 'classProgramTermDetailsRenderer'
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
key: 'acapt_code',
|
|
110
|
+
header: 'Code',
|
|
111
|
+
type: 'text',
|
|
112
|
+
width: '120px',
|
|
113
|
+
truncate: true,
|
|
114
|
+
align: 'left'
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
key: 'acapt_class_program_id_acacpm',
|
|
118
|
+
header: 'Program Class',
|
|
119
|
+
type: 'custom',
|
|
120
|
+
width: '200px',
|
|
121
|
+
truncate: true,
|
|
122
|
+
align: 'left',
|
|
123
|
+
renderer: 'programClassRenderer'
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
key: 'acapt_parent_class_prog_term_acapt',
|
|
127
|
+
header: 'Parent Term',
|
|
128
|
+
type: 'custom',
|
|
129
|
+
width: '180px',
|
|
130
|
+
truncate: true,
|
|
131
|
+
align: 'left',
|
|
132
|
+
renderer: 'parentTermRenderer'
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
key: 'acapt_isactive',
|
|
136
|
+
header: 'Status',
|
|
137
|
+
type: 'custom',
|
|
138
|
+
width: '120px',
|
|
139
|
+
truncate: false,
|
|
140
|
+
align: 'center',
|
|
141
|
+
renderer: 'classProgramTermStatusRenderer'
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
key: 'actions',
|
|
145
|
+
header: '',
|
|
146
|
+
type: 'custom',
|
|
147
|
+
width: '150px',
|
|
148
|
+
truncate: false,
|
|
149
|
+
align: 'center',
|
|
150
|
+
renderer: 'actionsDropdownRenderer'
|
|
151
|
+
}
|
|
152
|
+
],
|
|
153
|
+
data: [],
|
|
154
|
+
trackBy: '_id',
|
|
155
|
+
pagination: {
|
|
156
|
+
enabled: true,
|
|
157
|
+
pageSize: 10,
|
|
158
|
+
pageSizeOptions: [10, 25, 50, 100],
|
|
159
|
+
showQuickJump: true,
|
|
160
|
+
showPageInfo: true,
|
|
161
|
+
showRefresh: true
|
|
162
|
+
},
|
|
163
|
+
search: {
|
|
164
|
+
enabled: true,
|
|
165
|
+
placeholder: 'Search class program terms...',
|
|
166
|
+
searchableColumns: ['acapt_name', 'acapt_code', 'acapt_description'],
|
|
167
|
+
debounceMs: 300
|
|
168
|
+
},
|
|
169
|
+
loading: {
|
|
170
|
+
useDefer: true,
|
|
171
|
+
skeletonRows: 5,
|
|
172
|
+
showOverlay: false
|
|
173
|
+
},
|
|
174
|
+
scroll: {
|
|
175
|
+
enabled: true,
|
|
176
|
+
stickyHeader: true,
|
|
177
|
+
virtualScroll: false,
|
|
178
|
+
rowHeight: 50
|
|
179
|
+
},
|
|
180
|
+
fullHeight: true,
|
|
181
|
+
responsive: true,
|
|
182
|
+
striped: false,
|
|
183
|
+
bordered: true,
|
|
184
|
+
compact: false,
|
|
185
|
+
tableClass: 'tw-table-fixed tw-w-full tw-rounded-none'
|
|
186
|
+
}, ...(ngDevMode ? [{ debugName: "gridConfig" }] : []));
|
|
187
|
+
/**
|
|
188
|
+
* Get action dropdown items
|
|
189
|
+
*/
|
|
190
|
+
getActionDropdownItems(classProgramTerm) {
|
|
191
|
+
const items = [
|
|
192
|
+
{
|
|
193
|
+
id: 'view',
|
|
194
|
+
label: 'View Details',
|
|
195
|
+
icon: 'visibility',
|
|
196
|
+
iconColor: 'tw-text-gray-400',
|
|
197
|
+
textColor: 'tw-text-gray-700'
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
id: 'edit',
|
|
201
|
+
label: 'Edit Term',
|
|
202
|
+
icon: 'edit',
|
|
203
|
+
iconColor: 'tw-text-blue-400',
|
|
204
|
+
textColor: 'tw-text-blue-700'
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
id: 'toggleStatus',
|
|
208
|
+
label: classProgramTerm.acapt_isactive ? 'Deactivate' : 'Activate',
|
|
209
|
+
icon: classProgramTerm.acapt_isactive ? 'toggle_off' : 'toggle_on',
|
|
210
|
+
iconColor: classProgramTerm.acapt_isactive ? 'tw-text-orange-400' : 'tw-text-green-400',
|
|
211
|
+
textColor: classProgramTerm.acapt_isactive ? 'tw-text-orange-700' : 'tw-text-green-700'
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
id: 'delete',
|
|
215
|
+
label: 'Delete',
|
|
216
|
+
icon: 'delete',
|
|
217
|
+
iconColor: 'tw-text-red-400',
|
|
218
|
+
textColor: 'tw-text-red-700'
|
|
219
|
+
}
|
|
220
|
+
];
|
|
221
|
+
return items;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Handle dropdown item click
|
|
225
|
+
*/
|
|
226
|
+
onDropdownItemClick(item, classProgramTerm) {
|
|
227
|
+
switch (item.id) {
|
|
228
|
+
case 'view':
|
|
229
|
+
this.viewClassProgramTerm(classProgramTerm);
|
|
230
|
+
break;
|
|
231
|
+
case 'edit':
|
|
232
|
+
this.editClassProgramTerm(classProgramTerm);
|
|
233
|
+
break;
|
|
234
|
+
case 'toggleStatus':
|
|
235
|
+
this.toggleClassProgramTermStatus(classProgramTerm);
|
|
236
|
+
break;
|
|
237
|
+
case 'delete':
|
|
238
|
+
this.deleteClassProgramTerm(classProgramTerm);
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
ngOnInit() {
|
|
243
|
+
this.checkRouteParams();
|
|
244
|
+
this.loadClassProgramMasters();
|
|
245
|
+
this.loadClassProgramTerms();
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Load class program masters for dropdown
|
|
249
|
+
*/
|
|
250
|
+
loadClassProgramMasters() {
|
|
251
|
+
this.classProgramMastersLoading.set(true);
|
|
252
|
+
const payload = {
|
|
253
|
+
pagination: false,
|
|
254
|
+
acacpm_isactive: true
|
|
255
|
+
};
|
|
256
|
+
this.classProgramMasterService.getClassProgramMasterList(payload)
|
|
257
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
258
|
+
.subscribe({
|
|
259
|
+
next: (response) => {
|
|
260
|
+
if (response?.success && response.data) {
|
|
261
|
+
this.classProgramMasters.set(response.data);
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
this.classProgramMasters.set([]);
|
|
265
|
+
}
|
|
266
|
+
this.classProgramMastersLoading.set(false);
|
|
267
|
+
},
|
|
268
|
+
error: (error) => {
|
|
269
|
+
console.error('❌ Error loading class program masters:', error);
|
|
270
|
+
this.classProgramMasters.set([]);
|
|
271
|
+
this.classProgramMastersLoading.set(false);
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Handle class program selection change
|
|
277
|
+
*/
|
|
278
|
+
onClassProgramChange(programClassId) {
|
|
279
|
+
const programId = typeof programClassId === 'string' ? programClassId : (programClassId ? String(programClassId) : null);
|
|
280
|
+
console.log('🔄 Class Program changed:', programId);
|
|
281
|
+
this.selectedProgramClassId.set(programId);
|
|
282
|
+
this.acacpmId.set(programId);
|
|
283
|
+
if (programId) {
|
|
284
|
+
const selectedProgram = this.classProgramMasters().find(p => p._id === programId);
|
|
285
|
+
this.selectedClassProgram.set(selectedProgram || null);
|
|
286
|
+
// Load branches if branchType is configured
|
|
287
|
+
if (this.showBranchDropdown()) {
|
|
288
|
+
this.loadClassProgramBranches(programId);
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
this.classProgramBranches.set([]);
|
|
292
|
+
this.selectedBranchId.set(null);
|
|
293
|
+
this.acabrnId.set(null);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
this.selectedClassProgram.set(null);
|
|
298
|
+
this.classProgramBranches.set([]);
|
|
299
|
+
this.selectedBranchId.set(null);
|
|
300
|
+
this.acabrnId.set(null);
|
|
301
|
+
}
|
|
302
|
+
this.loadClassProgramTerms();
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Load class program branches
|
|
306
|
+
*/
|
|
307
|
+
loadClassProgramBranches(classProgramId) {
|
|
308
|
+
this.classProgramBranchesLoading.set(true);
|
|
309
|
+
const payload = new AcaClassPrgBranchListPayload({
|
|
310
|
+
acabrn_class_program_id_acacpm: classProgramId,
|
|
311
|
+
pagination: false
|
|
312
|
+
});
|
|
313
|
+
this.classProgramBranchService.getClassProgramBranchList(payload)
|
|
314
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
315
|
+
.subscribe({
|
|
316
|
+
next: (response) => {
|
|
317
|
+
if (response?.success && response.data) {
|
|
318
|
+
this.classProgramBranches.set(response.data);
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
this.classProgramBranches.set([]);
|
|
322
|
+
}
|
|
323
|
+
this.classProgramBranchesLoading.set(false);
|
|
324
|
+
},
|
|
325
|
+
error: (error) => {
|
|
326
|
+
console.error('❌ Error loading class program branches:', error);
|
|
327
|
+
this.classProgramBranches.set([]);
|
|
328
|
+
this.classProgramBranchesLoading.set(false);
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Handle branch selection change
|
|
334
|
+
*/
|
|
335
|
+
onBranchChange(branchId) {
|
|
336
|
+
const branch = typeof branchId === 'string' ? branchId : (branchId ? String(branchId) : null);
|
|
337
|
+
console.log('🔄 Branch changed:', branch);
|
|
338
|
+
this.selectedBranchId.set(branch);
|
|
339
|
+
this.acabrnId.set(branch);
|
|
340
|
+
this.loadClassProgramTerms();
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Handle class program master search
|
|
344
|
+
*/
|
|
345
|
+
onClassProgramMasterSearch(event) {
|
|
346
|
+
// Trigger loading if needed
|
|
347
|
+
if (event && event.query) {
|
|
348
|
+
// Could implement search functionality here if needed
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Check route parameters for acabrn_id and acacpm_id
|
|
353
|
+
*/
|
|
354
|
+
checkRouteParams() {
|
|
355
|
+
this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {
|
|
356
|
+
const queryParams = params['query'];
|
|
357
|
+
console.log('🏢 Route params:', params, 'queryParams:', queryParams);
|
|
358
|
+
if (queryParams) {
|
|
359
|
+
// Query parameters passed (following page-controls pattern)
|
|
360
|
+
const queryData = generateObjectFromString(queryParams);
|
|
361
|
+
console.log('🏢 Class Program Term params from route:', queryData);
|
|
362
|
+
if (queryData?.acabrn_id) {
|
|
363
|
+
this.acabrnId.set(queryData.acabrn_id);
|
|
364
|
+
console.log('🏢 Branch ID from route:', queryData.acabrn_id);
|
|
365
|
+
}
|
|
366
|
+
if (queryData?.acacpm_id) {
|
|
367
|
+
this.acacpmId.set(queryData.acacpm_id);
|
|
368
|
+
console.log('🏢 Class Program ID from route:', queryData.acacpm_id);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Load class program terms data
|
|
375
|
+
*/
|
|
376
|
+
loadClassProgramTerms() {
|
|
377
|
+
this.loading.set(true);
|
|
378
|
+
this.error.set(null);
|
|
379
|
+
// Add filter parameters if available
|
|
380
|
+
const acabrnId = this.acabrnId();
|
|
381
|
+
const acacpmId = this.acacpmId();
|
|
382
|
+
const payload = new MClassProgramTerm({
|
|
383
|
+
pageIndex: 0,
|
|
384
|
+
pageSize: 100,
|
|
385
|
+
query: this.searchTerm() || "",
|
|
386
|
+
sort: {
|
|
387
|
+
key: 'acapt_name',
|
|
388
|
+
order: 'asc'
|
|
389
|
+
},
|
|
390
|
+
acapt_class_prg_branch_acabrn: acabrnId || "",
|
|
391
|
+
});
|
|
392
|
+
this.classProgramTermService.getClassProgramTermList(payload)
|
|
393
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
394
|
+
.subscribe({
|
|
395
|
+
next: (response) => {
|
|
396
|
+
if (response?.success && response.data) {
|
|
397
|
+
console.log('📚 Class program terms loaded:', response.data);
|
|
398
|
+
this.classProgramTerms.set(response.data);
|
|
399
|
+
this.updateGridData();
|
|
400
|
+
this.notificationService.success(`Loaded ${response.data.length} class program term(s) successfully.`);
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
console.warn('⚠️ No class program term data received');
|
|
404
|
+
this.classProgramTerms.set([]);
|
|
405
|
+
this.updateGridData();
|
|
406
|
+
this.notificationService.warning('No class program terms found.');
|
|
407
|
+
}
|
|
408
|
+
this.loading.set(false);
|
|
409
|
+
},
|
|
410
|
+
error: (error) => {
|
|
411
|
+
console.error('❌ Error loading class program terms:', error);
|
|
412
|
+
this.error.set('Failed to load class program terms');
|
|
413
|
+
this.loading.set(false);
|
|
414
|
+
this.notificationService.error('Failed to load class program terms');
|
|
415
|
+
}
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Update grid data
|
|
420
|
+
*/
|
|
421
|
+
updateGridData() {
|
|
422
|
+
this.gridConfig.update(config => ({
|
|
423
|
+
...config,
|
|
424
|
+
data: this.filteredClassProgramTerms()
|
|
425
|
+
}));
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Handle grid events
|
|
429
|
+
*/
|
|
430
|
+
onGridEvent(event) {
|
|
431
|
+
switch (event.type) {
|
|
432
|
+
case 'pageChange':
|
|
433
|
+
if (event.data && typeof event.data === 'object' && 'pageIndex' in event.data && 'pageSize' in event.data) {
|
|
434
|
+
this.loadClassProgramTerms();
|
|
435
|
+
}
|
|
436
|
+
break;
|
|
437
|
+
case 'search':
|
|
438
|
+
this.searchTerm.set(event.data);
|
|
439
|
+
this.updateGridData();
|
|
440
|
+
break;
|
|
441
|
+
case 'refresh':
|
|
442
|
+
this.loadClassProgramTerms();
|
|
443
|
+
break;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* Create new class program term
|
|
448
|
+
*/
|
|
449
|
+
createClassProgramTerm() {
|
|
450
|
+
this.router.navigate(['/control-panel/program-term-management/create']);
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* View class program term details
|
|
454
|
+
*/
|
|
455
|
+
viewClassProgramTerm(classProgramTerm) {
|
|
456
|
+
this.router.navigate(['/control-panel/class-program-term/view', classProgramTerm._id]);
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* Edit class program term
|
|
460
|
+
*/
|
|
461
|
+
editClassProgramTerm(classProgramTerm) {
|
|
462
|
+
this.router.navigate(['/control-panel/class-program-term/edit', classProgramTerm._id]);
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Delete class program term
|
|
466
|
+
*/
|
|
467
|
+
deleteClassProgramTerm(classProgramTerm) {
|
|
468
|
+
this.confirmationService.confirmDelete(classProgramTerm.acapt_name).then((confirmed) => {
|
|
469
|
+
if (confirmed) {
|
|
470
|
+
this.loading.set(true);
|
|
471
|
+
const payload = {
|
|
472
|
+
acapt_id: classProgramTerm._id
|
|
473
|
+
};
|
|
474
|
+
this.classProgramTermService.deleteClassProgramTerm(payload)
|
|
475
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
476
|
+
.subscribe({
|
|
477
|
+
next: (response) => {
|
|
478
|
+
if (response?.success) {
|
|
479
|
+
this.classProgramTerms.update(terms => terms.filter(cpt => cpt._id !== classProgramTerm._id));
|
|
480
|
+
this.updateGridData();
|
|
481
|
+
this.notificationService.success('Class program term deleted successfully.');
|
|
482
|
+
}
|
|
483
|
+
else {
|
|
484
|
+
this.notificationService.error('Failed to delete class program term.');
|
|
485
|
+
}
|
|
486
|
+
this.loading.set(false);
|
|
487
|
+
},
|
|
488
|
+
error: (error) => {
|
|
489
|
+
console.error('❌ Error deleting class program term:', error);
|
|
490
|
+
this.notificationService.error('Failed to delete class program term.');
|
|
491
|
+
this.loading.set(false);
|
|
492
|
+
}
|
|
493
|
+
});
|
|
494
|
+
}
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* Toggle class program term status
|
|
499
|
+
*/
|
|
500
|
+
toggleClassProgramTermStatus(classProgramTerm) {
|
|
501
|
+
this.loading.set(true);
|
|
502
|
+
const payload = {
|
|
503
|
+
acapt_id: classProgramTerm._id
|
|
504
|
+
};
|
|
505
|
+
this.classProgramTermService.toggleClassProgramTermStatus(payload)
|
|
506
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
507
|
+
.subscribe({
|
|
508
|
+
next: (response) => {
|
|
509
|
+
if (response?.success) {
|
|
510
|
+
this.classProgramTerms.update(terms => terms.map(cpt => cpt._id === classProgramTerm._id
|
|
511
|
+
? { ...cpt, acapt_isactive: !cpt.acapt_isactive }
|
|
512
|
+
: cpt));
|
|
513
|
+
this.updateGridData();
|
|
514
|
+
this.notificationService.success(`Class program term ${classProgramTerm.acapt_isactive ? 'deactivated' : 'activated'} successfully.`);
|
|
515
|
+
}
|
|
516
|
+
else {
|
|
517
|
+
this.notificationService.error('Failed to toggle class program term status.');
|
|
518
|
+
}
|
|
519
|
+
this.loading.set(false);
|
|
520
|
+
},
|
|
521
|
+
error: (error) => {
|
|
522
|
+
console.error('❌ Error toggling class program term status:', error);
|
|
523
|
+
this.notificationService.error('Failed to toggle class program term status.');
|
|
524
|
+
this.loading.set(false);
|
|
525
|
+
}
|
|
526
|
+
});
|
|
527
|
+
}
|
|
528
|
+
/**
|
|
529
|
+
* Refresh data
|
|
530
|
+
*/
|
|
531
|
+
refreshData() {
|
|
532
|
+
this.loadClassProgramTerms();
|
|
533
|
+
}
|
|
534
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ClassProgramTermListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
535
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: ClassProgramTermListComponent, isStandalone: true, selector: "cide-academics-class-program-term-list", viewQueries: [{ propertyName: "classProgramTermDetailsRendererTemplate", first: true, predicate: ["classProgramTermDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "classProgramTermStatusRendererTemplate", first: true, predicate: ["classProgramTermStatusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Class Program Term Management Container -->\r\n<div class=\"tw-flex tw-flex-col tw-w-full tw-h-full\">\r\n <!-- Header Section -->\r\n <div class=\"tw-flex-shrink-0 tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-orange-600 tw-w-5 tw-h-5\">schedule</cide-ele-icon>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Class Program Term Management</h5>\r\n </div>\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <button cideEleButton variant=\"primary\" size=\"sm\" leftIcon=\"add\" (click)=\"createClassProgramTerm()\">\r\n Create Class Program Term\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Filter Section -->\r\n <div class=\"tw-flex-shrink-0 tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-items-center tw-gap-4\">\r\n <div class=\"tw-w-64\">\r\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Class Program</label>\r\n <cide-ele-select\r\n [options]=\"classProgramMastersOptions()\"\r\n [ngModel]=\"selectedProgramClassId() || ''\"\r\n (ngModelChange)=\"onClassProgramChange($event)\"\r\n placeholder=\"Select Class Program\"\r\n valueKey=\"_id\"\r\n labelKey=\"acacpm_alise_title\"\r\n [loading]=\"classProgramMastersLoading()\"\r\n [searchable]=\"true\"\r\n (searchChange)=\"onClassProgramMasterSearch($event)\">\r\n </cide-ele-select>\r\n </div>\r\n \r\n @if (showBranchDropdown()) {\r\n <div class=\"tw-w-64\">\r\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Specialization</label>\r\n <cide-ele-select\r\n [options]=\"classProgramBranches()\"\r\n [ngModel]=\"selectedBranchId() || ''\"\r\n (ngModelChange)=\"onBranchChange($event)\"\r\n placeholder=\"Select Specialization\"\r\n valueKey=\"_id\"\r\n labelKey=\"acabrn_name\"\r\n [loading]=\"classProgramBranchesLoading()\">\r\n </cide-ele-select>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Data Grid Section -->\r\n <div class=\"tw-flex-1 tw-min-h-0 tw-p-0\">\r\n <cide-ele-data-grid\r\n [config]=\"gridConfig()\"\r\n [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n</div>\r\n\r\n<!-- Template Renderers -->\r\n<ng-template #classProgramTermDetailsRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <div class=\"tw-flex-shrink-0\">\r\n <div class=\"tw-w-10 tw-h-10 tw-bg-orange-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\r\n <cide-ele-icon class=\"tw-text-orange-600 tw-w-5 tw-h-5\">schedule</cide-ele-icon>\r\n </div>\r\n </div>\r\n <div class=\"tw-min-w-0 tw-flex-1\">\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-truncate tw-m-0\">\r\n {{ item.acapt_name }}\r\n </h6>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-truncate tw-m-0\">\r\n {{ item.acapt_description }}\r\n </p>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #classProgramTermStatusRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n @if (item.acapt_iscurrent) {\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800\">\r\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">star</cide-ele-icon>\r\n Current\r\n </span>\r\n }\r\n @if (item.acapt_islocked) {\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-yellow-100 tw-text-yellow-800\">\r\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">lock</cide-ele-icon>\r\n Locked\r\n </span>\r\n }\r\n <span [ngClass]=\"{\r\n 'tw-bg-green-100 tw-text-green-800': item.acapt_isactive,\r\n 'tw-bg-red-100 tw-text-red-800': !item.acapt_isactive\r\n }\" class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium\">\r\n <cide-ele-icon [ngClass]=\"{\r\n 'tw-text-green-600': item.acapt_isactive,\r\n 'tw-text-red-600': !item.acapt_isactive\r\n }\" class=\"tw-w-3 tw-h-3 tw-mr-1\">\r\n {{ item.acapt_isactive ? 'check_circle' : 'cancel' }}\r\n </cide-ele-icon>\r\n {{ item.acapt_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #actionsDropdownRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\r\n <cide-ele-dropdown\r\n [items]=\"getActionDropdownItems(item)\"\r\n (itemClick)=\"onDropdownItemClick($event, item)\"\r\n [config]=\"{\r\n triggerIcon: 'more_vert',\r\n triggerSize: 'sm',\r\n usePortal: true\r\n }\"\r\n size=\"sm\"\r\n variant=\"ghost\"\r\n icon=\"more_vert\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton], cide-ele-button", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "component", type: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey"], outputs: ["ngModelChange", "change", "searchChange"] }] });
|
|
536
|
+
}
|
|
537
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ClassProgramTermListComponent, decorators: [{
|
|
538
|
+
type: Component,
|
|
539
|
+
args: [{ selector: 'cide-academics-class-program-term-list', standalone: true, imports: [
|
|
540
|
+
CommonModule,
|
|
541
|
+
FormsModule,
|
|
542
|
+
CideEleDataGridComponent,
|
|
543
|
+
CideIconComponent,
|
|
544
|
+
CideEleButtonComponent,
|
|
545
|
+
CideEleDropdownComponent,
|
|
546
|
+
CideSelectComponent
|
|
547
|
+
], template: "<!-- Class Program Term Management Container -->\r\n<div class=\"tw-flex tw-flex-col tw-w-full tw-h-full\">\r\n <!-- Header Section -->\r\n <div class=\"tw-flex-shrink-0 tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-orange-600 tw-w-5 tw-h-5\">schedule</cide-ele-icon>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Class Program Term Management</h5>\r\n </div>\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <button cideEleButton variant=\"primary\" size=\"sm\" leftIcon=\"add\" (click)=\"createClassProgramTerm()\">\r\n Create Class Program Term\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Filter Section -->\r\n <div class=\"tw-flex-shrink-0 tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-items-center tw-gap-4\">\r\n <div class=\"tw-w-64\">\r\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Class Program</label>\r\n <cide-ele-select\r\n [options]=\"classProgramMastersOptions()\"\r\n [ngModel]=\"selectedProgramClassId() || ''\"\r\n (ngModelChange)=\"onClassProgramChange($event)\"\r\n placeholder=\"Select Class Program\"\r\n valueKey=\"_id\"\r\n labelKey=\"acacpm_alise_title\"\r\n [loading]=\"classProgramMastersLoading()\"\r\n [searchable]=\"true\"\r\n (searchChange)=\"onClassProgramMasterSearch($event)\">\r\n </cide-ele-select>\r\n </div>\r\n \r\n @if (showBranchDropdown()) {\r\n <div class=\"tw-w-64\">\r\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Specialization</label>\r\n <cide-ele-select\r\n [options]=\"classProgramBranches()\"\r\n [ngModel]=\"selectedBranchId() || ''\"\r\n (ngModelChange)=\"onBranchChange($event)\"\r\n placeholder=\"Select Specialization\"\r\n valueKey=\"_id\"\r\n labelKey=\"acabrn_name\"\r\n [loading]=\"classProgramBranchesLoading()\">\r\n </cide-ele-select>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Data Grid Section -->\r\n <div class=\"tw-flex-1 tw-min-h-0 tw-p-0\">\r\n <cide-ele-data-grid\r\n [config]=\"gridConfig()\"\r\n [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n</div>\r\n\r\n<!-- Template Renderers -->\r\n<ng-template #classProgramTermDetailsRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <div class=\"tw-flex-shrink-0\">\r\n <div class=\"tw-w-10 tw-h-10 tw-bg-orange-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\r\n <cide-ele-icon class=\"tw-text-orange-600 tw-w-5 tw-h-5\">schedule</cide-ele-icon>\r\n </div>\r\n </div>\r\n <div class=\"tw-min-w-0 tw-flex-1\">\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-truncate tw-m-0\">\r\n {{ item.acapt_name }}\r\n </h6>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-truncate tw-m-0\">\r\n {{ item.acapt_description }}\r\n </p>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #classProgramTermStatusRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n @if (item.acapt_iscurrent) {\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800\">\r\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">star</cide-ele-icon>\r\n Current\r\n </span>\r\n }\r\n @if (item.acapt_islocked) {\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-yellow-100 tw-text-yellow-800\">\r\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">lock</cide-ele-icon>\r\n Locked\r\n </span>\r\n }\r\n <span [ngClass]=\"{\r\n 'tw-bg-green-100 tw-text-green-800': item.acapt_isactive,\r\n 'tw-bg-red-100 tw-text-red-800': !item.acapt_isactive\r\n }\" class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium\">\r\n <cide-ele-icon [ngClass]=\"{\r\n 'tw-text-green-600': item.acapt_isactive,\r\n 'tw-text-red-600': !item.acapt_isactive\r\n }\" class=\"tw-w-3 tw-h-3 tw-mr-1\">\r\n {{ item.acapt_isactive ? 'check_circle' : 'cancel' }}\r\n </cide-ele-icon>\r\n {{ item.acapt_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #actionsDropdownRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\r\n <cide-ele-dropdown\r\n [items]=\"getActionDropdownItems(item)\"\r\n (itemClick)=\"onDropdownItemClick($event, item)\"\r\n [config]=\"{\r\n triggerIcon: 'more_vert',\r\n triggerSize: 'sm',\r\n usePortal: true\r\n }\"\r\n size=\"sm\"\r\n variant=\"ghost\"\r\n icon=\"more_vert\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n" }]
|
|
548
|
+
}] });
|
|
549
|
+
|
|
550
|
+
export { ClassProgramTermListComponent };
|
|
551
|
+
//# sourceMappingURL=cloud-ide-academics-class-program-term-list.component-Bp-jTkgq.mjs.map
|