cloud-ide-academics 0.0.21 → 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.
Files changed (15) hide show
  1. package/fesm2022/{cloud-ide-academics-class-program-term-create.component--_32xUHz.mjs → cloud-ide-academics-class-program-term-create.component-CD-JRaOo.mjs} +2 -2
  2. package/fesm2022/{cloud-ide-academics-class-program-term-create.component--_32xUHz.mjs.map → cloud-ide-academics-class-program-term-create.component-CD-JRaOo.mjs.map} +1 -1
  3. package/fesm2022/cloud-ide-academics-class-program-term-list.component-Bp-jTkgq.mjs +551 -0
  4. package/fesm2022/cloud-ide-academics-class-program-term-list.component-Bp-jTkgq.mjs.map +1 -0
  5. package/fesm2022/{cloud-ide-academics-cloud-ide-academics-COFzfbQg.mjs → cloud-ide-academics-cloud-ide-academics-DfUIvaVH.mjs} +15 -15
  6. package/fesm2022/cloud-ide-academics-cloud-ide-academics-DfUIvaVH.mjs.map +1 -0
  7. package/fesm2022/{cloud-ide-academics-program-class-create.component-DZGdqzE7.mjs → cloud-ide-academics-program-class-create.component-BPgeglM_.mjs} +2 -2
  8. package/fesm2022/{cloud-ide-academics-program-class-create.component-DZGdqzE7.mjs.map → cloud-ide-academics-program-class-create.component-BPgeglM_.mjs.map} +1 -1
  9. package/fesm2022/{cloud-ide-academics-program-class-list.component-DPUjW-UV.mjs → cloud-ide-academics-program-class-list.component-x8jYxy7J.mjs} +2 -2
  10. package/fesm2022/{cloud-ide-academics-program-class-list.component-DPUjW-UV.mjs.map → cloud-ide-academics-program-class-list.component-x8jYxy7J.mjs.map} +1 -1
  11. package/fesm2022/cloud-ide-academics.mjs +1 -1
  12. package/package.json +1 -1
  13. package/fesm2022/cloud-ide-academics-class-program-term-list.component-CaWAHMHN.mjs +0 -404
  14. package/fesm2022/cloud-ide-academics-class-program-term-list.component-CaWAHMHN.mjs.map +0 -1
  15. package/fesm2022/cloud-ide-academics-cloud-ide-academics-COFzfbQg.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