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
@@ -1,404 +0,0 @@
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 { Router, ActivatedRoute } from '@angular/router';
6
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
7
- import { NotificationService, ConfirmationService, CideEleDataGridComponent, CideIconComponent, CideEleButtonComponent, CideEleDropdownComponent } from 'cloud-ide-element';
8
- import { AppStateHelperService } from 'cloud-ide-layout';
9
- import { generateObjectFromString } from 'cloud-ide-lms-model';
10
- import { C as CideLytClassProgramTermService } from './cloud-ide-academics-class-program-term.service-BW4PJQEM.mjs';
11
-
12
- class ClassProgramTermListComponent {
13
- // Dependency injection
14
- destroyRef = inject(DestroyRef);
15
- router = inject(Router);
16
- route = inject(ActivatedRoute);
17
- appState = inject(AppStateHelperService);
18
- notificationService = inject(NotificationService);
19
- confirmationService = inject(ConfirmationService);
20
- classProgramTermService = inject(CideLytClassProgramTermService);
21
- // Modern ViewChild signals for template renderers (Angular 20 approach)
22
- classProgramTermDetailsRendererTemplate = viewChild.required('classProgramTermDetailsRendererTemplate');
23
- classProgramTermStatusRendererTemplate = viewChild.required('classProgramTermStatusRendererTemplate');
24
- actionsDropdownRendererTemplate = viewChild.required('actionsDropdownRendererTemplate');
25
- // Computed template renderers for grid
26
- templateRenderers = computed(() => ({
27
- classProgramTermDetailsRenderer: this.classProgramTermDetailsRendererTemplate(),
28
- classProgramTermStatusRenderer: this.classProgramTermStatusRendererTemplate(),
29
- actionsDropdownRenderer: this.actionsDropdownRendererTemplate()
30
- }), ...(ngDevMode ? [{ debugName: "templateRenderers" }] : []));
31
- // Make Math available in template
32
- Math = Math;
33
- // Signals for reactive state management
34
- classProgramTerms = signal([], ...(ngDevMode ? [{ debugName: "classProgramTerms" }] : []));
35
- loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
36
- error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : []));
37
- selectedItems = signal([], ...(ngDevMode ? [{ debugName: "selectedItems" }] : []));
38
- searchTerm = signal('', ...(ngDevMode ? [{ debugName: "searchTerm" }] : []));
39
- acabrnId = signal(null, ...(ngDevMode ? [{ debugName: "acabrnId" }] : []));
40
- acacpmId = signal(null, ...(ngDevMode ? [{ debugName: "acacpmId" }] : []));
41
- // Derived list filtered by searchTerm
42
- filteredClassProgramTerms = computed(() => {
43
- const q = (this.searchTerm() || '').toLowerCase().trim();
44
- const items = this.classProgramTerms() || [];
45
- if (!q)
46
- return items;
47
- return items.filter(cpt => {
48
- const name = (cpt.acapt_name || '').toLowerCase();
49
- const code = (cpt.acapt_code || '').toLowerCase();
50
- const description = (cpt.acapt_description || '').toLowerCase();
51
- return name.includes(q) || code.includes(q) || description.includes(q);
52
- });
53
- }, ...(ngDevMode ? [{ debugName: "filteredClassProgramTerms" }] : []));
54
- // Grid configuration signal
55
- gridConfig = signal({
56
- id: 'class-program-term-list-grid',
57
- columns: [
58
- {
59
- key: 'details',
60
- header: 'Term Details',
61
- type: 'custom',
62
- width: 'auto',
63
- truncate: true,
64
- align: 'left',
65
- renderer: 'classProgramTermDetailsRenderer'
66
- },
67
- {
68
- key: 'acapt_code',
69
- header: 'Code',
70
- type: 'text',
71
- width: '120px',
72
- truncate: true,
73
- align: 'left'
74
- },
75
- {
76
- key: 'acapt_class_program_id_acacpm',
77
- header: 'Program Class',
78
- type: 'custom',
79
- width: '200px',
80
- truncate: true,
81
- align: 'left',
82
- renderer: 'programClassRenderer'
83
- },
84
- {
85
- key: 'acapt_parent_class_prog_term_acapt',
86
- header: 'Parent Term',
87
- type: 'custom',
88
- width: '180px',
89
- truncate: true,
90
- align: 'left',
91
- renderer: 'parentTermRenderer'
92
- },
93
- {
94
- key: 'acapt_isactive',
95
- header: 'Status',
96
- type: 'custom',
97
- width: '120px',
98
- truncate: false,
99
- align: 'center',
100
- renderer: 'classProgramTermStatusRenderer'
101
- },
102
- {
103
- key: 'actions',
104
- header: '',
105
- type: 'custom',
106
- width: '150px',
107
- truncate: false,
108
- align: 'center',
109
- renderer: 'actionsDropdownRenderer'
110
- }
111
- ],
112
- data: [],
113
- trackBy: '_id',
114
- pagination: {
115
- enabled: true,
116
- pageSize: 10,
117
- pageSizeOptions: [10, 25, 50, 100],
118
- showQuickJump: true,
119
- showPageInfo: true,
120
- showRefresh: true
121
- },
122
- search: {
123
- enabled: true,
124
- placeholder: 'Search class program terms...',
125
- searchableColumns: ['acapt_name', 'acapt_code', 'acapt_description'],
126
- debounceMs: 300
127
- },
128
- loading: {
129
- useDefer: true,
130
- skeletonRows: 5,
131
- showOverlay: false
132
- },
133
- scroll: {
134
- enabled: true,
135
- maxHeight: '',
136
- minHeight: '',
137
- stickyHeader: true,
138
- virtualScroll: false,
139
- rowHeight: 50
140
- },
141
- responsive: true,
142
- striped: false,
143
- bordered: true,
144
- compact: false,
145
- tableClass: 'tw-table-fixed tw-w-full tw-rounded-none'
146
- }, ...(ngDevMode ? [{ debugName: "gridConfig" }] : []));
147
- /**
148
- * Get action dropdown items
149
- */
150
- getActionDropdownItems(classProgramTerm) {
151
- const items = [
152
- {
153
- id: 'view',
154
- label: 'View Details',
155
- icon: 'visibility',
156
- iconColor: 'tw-text-gray-400',
157
- textColor: 'tw-text-gray-700'
158
- },
159
- {
160
- id: 'edit',
161
- label: 'Edit Term',
162
- icon: 'edit',
163
- iconColor: 'tw-text-blue-400',
164
- textColor: 'tw-text-blue-700'
165
- },
166
- {
167
- id: 'toggleStatus',
168
- label: classProgramTerm.acapt_isactive ? 'Deactivate' : 'Activate',
169
- icon: classProgramTerm.acapt_isactive ? 'toggle_off' : 'toggle_on',
170
- iconColor: classProgramTerm.acapt_isactive ? 'tw-text-orange-400' : 'tw-text-green-400',
171
- textColor: classProgramTerm.acapt_isactive ? 'tw-text-orange-700' : 'tw-text-green-700'
172
- },
173
- {
174
- id: 'delete',
175
- label: 'Delete',
176
- icon: 'delete',
177
- iconColor: 'tw-text-red-400',
178
- textColor: 'tw-text-red-700'
179
- }
180
- ];
181
- return items;
182
- }
183
- /**
184
- * Handle dropdown item click
185
- */
186
- onDropdownItemClick(item, classProgramTerm) {
187
- switch (item.id) {
188
- case 'view':
189
- this.viewClassProgramTerm(classProgramTerm);
190
- break;
191
- case 'edit':
192
- this.editClassProgramTerm(classProgramTerm);
193
- break;
194
- case 'toggleStatus':
195
- this.toggleClassProgramTermStatus(classProgramTerm);
196
- break;
197
- case 'delete':
198
- this.deleteClassProgramTerm(classProgramTerm);
199
- break;
200
- }
201
- }
202
- ngOnInit() {
203
- this.checkRouteParams();
204
- this.loadClassProgramTerms();
205
- }
206
- /**
207
- * Check route parameters for acabrn_id and acacpm_id
208
- */
209
- checkRouteParams() {
210
- this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {
211
- const queryParams = params['query'];
212
- console.log('🏢 Route params:', params, 'queryParams:', queryParams);
213
- if (queryParams) {
214
- // Query parameters passed (following page-controls pattern)
215
- const queryData = generateObjectFromString(queryParams);
216
- console.log('🏢 Class Program Term params from route:', queryData);
217
- if (queryData?.acabrn_id) {
218
- this.acabrnId.set(queryData.acabrn_id);
219
- console.log('🏢 Branch ID from route:', queryData.acabrn_id);
220
- }
221
- if (queryData?.acacpm_id) {
222
- this.acacpmId.set(queryData.acacpm_id);
223
- console.log('🏢 Class Program ID from route:', queryData.acacpm_id);
224
- }
225
- }
226
- });
227
- }
228
- /**
229
- * Load class program terms data
230
- */
231
- loadClassProgramTerms() {
232
- this.loading.set(true);
233
- this.error.set(null);
234
- // Add filter parameters if available
235
- const acabrnId = this.acabrnId();
236
- const acacpmId = this.acacpmId();
237
- const payload = {
238
- pageIndex: 0,
239
- pageSize: 100,
240
- query: this.searchTerm() || "",
241
- sort: {
242
- key: 'acapt_name',
243
- order: 'asc'
244
- },
245
- acapt_class_prg_branch_acabrn: acabrnId,
246
- };
247
- this.classProgramTermService.getClassProgramTermList(payload)
248
- .pipe(takeUntilDestroyed(this.destroyRef))
249
- .subscribe({
250
- next: (response) => {
251
- if (response?.success && response.data) {
252
- console.log('📚 Class program terms loaded:', response.data);
253
- this.classProgramTerms.set(response.data);
254
- this.updateGridData();
255
- this.notificationService.success(`Loaded ${response.data.length} class program term(s) successfully.`);
256
- }
257
- else {
258
- console.warn('⚠️ No class program term data received');
259
- this.classProgramTerms.set([]);
260
- this.updateGridData();
261
- this.notificationService.warning('No class program terms found.');
262
- }
263
- this.loading.set(false);
264
- },
265
- error: (error) => {
266
- console.error('❌ Error loading class program terms:', error);
267
- this.error.set('Failed to load class program terms');
268
- this.loading.set(false);
269
- this.notificationService.error('Failed to load class program terms');
270
- }
271
- });
272
- }
273
- /**
274
- * Update grid data
275
- */
276
- updateGridData() {
277
- this.gridConfig.update(config => ({
278
- ...config,
279
- data: this.filteredClassProgramTerms()
280
- }));
281
- }
282
- /**
283
- * Handle grid events
284
- */
285
- onGridEvent(event) {
286
- switch (event.type) {
287
- case 'pageChange':
288
- if (event.data && typeof event.data === 'object' && 'pageIndex' in event.data && 'pageSize' in event.data) {
289
- this.loadClassProgramTerms();
290
- }
291
- break;
292
- case 'search':
293
- this.searchTerm.set(event.data);
294
- this.updateGridData();
295
- break;
296
- case 'refresh':
297
- this.loadClassProgramTerms();
298
- break;
299
- }
300
- }
301
- /**
302
- * Create new class program term
303
- */
304
- createClassProgramTerm() {
305
- this.router.navigate(['/control-panel/program-term-management/create']);
306
- }
307
- /**
308
- * View class program term details
309
- */
310
- viewClassProgramTerm(classProgramTerm) {
311
- this.router.navigate(['/control-panel/class-program-term/view', classProgramTerm._id]);
312
- }
313
- /**
314
- * Edit class program term
315
- */
316
- editClassProgramTerm(classProgramTerm) {
317
- this.router.navigate(['/control-panel/class-program-term/edit', classProgramTerm._id]);
318
- }
319
- /**
320
- * Delete class program term
321
- */
322
- deleteClassProgramTerm(classProgramTerm) {
323
- this.confirmationService.confirmDelete(classProgramTerm.acapt_name).then((confirmed) => {
324
- if (confirmed) {
325
- this.loading.set(true);
326
- const payload = {
327
- acapt_id: classProgramTerm._id
328
- };
329
- this.classProgramTermService.deleteClassProgramTerm(payload)
330
- .pipe(takeUntilDestroyed(this.destroyRef))
331
- .subscribe({
332
- next: (response) => {
333
- if (response?.success) {
334
- this.classProgramTerms.update(terms => terms.filter(cpt => cpt._id !== classProgramTerm._id));
335
- this.updateGridData();
336
- this.notificationService.success('Class program term deleted successfully.');
337
- }
338
- else {
339
- this.notificationService.error('Failed to delete class program term.');
340
- }
341
- this.loading.set(false);
342
- },
343
- error: (error) => {
344
- console.error('❌ Error deleting class program term:', error);
345
- this.notificationService.error('Failed to delete class program term.');
346
- this.loading.set(false);
347
- }
348
- });
349
- }
350
- });
351
- }
352
- /**
353
- * Toggle class program term status
354
- */
355
- toggleClassProgramTermStatus(classProgramTerm) {
356
- this.loading.set(true);
357
- const payload = {
358
- acapt_id: classProgramTerm._id
359
- };
360
- this.classProgramTermService.toggleClassProgramTermStatus(payload)
361
- .pipe(takeUntilDestroyed(this.destroyRef))
362
- .subscribe({
363
- next: (response) => {
364
- if (response?.success) {
365
- this.classProgramTerms.update(terms => terms.map(cpt => cpt._id === classProgramTerm._id
366
- ? { ...cpt, acapt_isactive: !cpt.acapt_isactive }
367
- : cpt));
368
- this.updateGridData();
369
- this.notificationService.success(`Class program term ${classProgramTerm.acapt_isactive ? 'deactivated' : 'activated'} successfully.`);
370
- }
371
- else {
372
- this.notificationService.error('Failed to toggle class program term status.');
373
- }
374
- this.loading.set(false);
375
- },
376
- error: (error) => {
377
- console.error('❌ Error toggling class program term status:', error);
378
- this.notificationService.error('Failed to toggle class program term status.');
379
- this.loading.set(false);
380
- }
381
- });
382
- }
383
- /**
384
- * Refresh data
385
- */
386
- refreshData() {
387
- this.loadClassProgramTerms();
388
- }
389
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ClassProgramTermListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
390
- 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-table tw-w-full tw-h-full\">\r\n\r\n <!-- Header Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell 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 </div>\r\n\r\n <!-- Data Grid Section -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell 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</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: "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"] }] });
391
- }
392
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ClassProgramTermListComponent, decorators: [{
393
- type: Component,
394
- args: [{ selector: 'cide-academics-class-program-term-list', standalone: true, imports: [
395
- CommonModule,
396
- CideEleDataGridComponent,
397
- CideIconComponent,
398
- CideEleButtonComponent,
399
- CideEleDropdownComponent
400
- ], template: "<!-- Class Program Term Management Container -->\r\n<div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Header Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell 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 </div>\r\n\r\n <!-- Data Grid Section -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell 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</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" }]
401
- }] });
402
-
403
- export { ClassProgramTermListComponent };
404
- //# sourceMappingURL=cloud-ide-academics-class-program-term-list.component-CaWAHMHN.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cloud-ide-academics-class-program-term-list.component-CaWAHMHN.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/class-program-term-management/components/class-program-term-list/class-program-term-list.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/class-program-term-management/components/class-program-term-list/class-program-term-list.component.html"],"sourcesContent":["import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Router, ActivatedRoute } from '@angular/router';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { CideEleDataGridComponent, CideIconComponent, CideEleButtonComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, NotificationService, ConfirmationService } from 'cloud-ide-element';\r\nimport { TemplateContext } from 'cloud-ide-element';\r\nimport { AppStateHelperService } from 'cloud-ide-layout';\r\nimport { \r\n type MClassProgramTerm,\r\n type MClassProgramTermDeletePayload,\r\n type MClassProgramTermToggleStatusPayload,\r\n generateObjectFromString\r\n} from 'cloud-ide-lms-model';\r\nimport { CideLytClassProgramTermService } from '../../services/class-program-term.service';\r\n\r\n// Interfaces based on the model files\r\ninterface ClassProgramTerm {\r\n _id?: string;\r\n acapt_code?: string;\r\n acapt_name?: string;\r\n acapt_description?: string;\r\n acapt_class_program_id_acacpm?: {\r\n _id?: string;\r\n acacpm_name?: string;\r\n };\r\n acapt_parent_class_prog_term_acapt?: {\r\n _id?: string;\r\n acapt_name?: string;\r\n };\r\n acapt_isactive?: boolean;\r\n acapt_iscurrent?: boolean;\r\n acapt_islocked?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'cide-academics-class-program-term-list',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n CideEleDataGridComponent,\r\n CideIconComponent,\r\n CideEleButtonComponent,\r\n CideEleDropdownComponent\r\n ],\r\n templateUrl: './class-program-term-list.component.html'\r\n})\r\nexport class ClassProgramTermListComponent implements OnInit {\r\n // Dependency injection\r\n private destroyRef = inject(DestroyRef);\r\n private router = inject(Router);\r\n private route = inject(ActivatedRoute);\r\n private appState = inject(AppStateHelperService);\r\n private notificationService = inject(NotificationService);\r\n private confirmationService = inject(ConfirmationService);\r\n private classProgramTermService = inject(CideLytClassProgramTermService);\r\n\r\n // Modern ViewChild signals for template renderers (Angular 20 approach)\r\n classProgramTermDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('classProgramTermDetailsRendererTemplate');\r\n classProgramTermStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('classProgramTermStatusRendererTemplate');\r\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\r\n\r\n // Computed template renderers for grid\r\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\r\n classProgramTermDetailsRenderer: this.classProgramTermDetailsRendererTemplate(),\r\n classProgramTermStatusRenderer: this.classProgramTermStatusRendererTemplate(),\r\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\r\n }));\r\n\r\n // Make Math available in template\r\n Math = Math;\r\n\r\n // Signals for reactive state management\r\n classProgramTerms = signal<ClassProgramTerm[]>([]);\r\n loading = signal(false);\r\n error = signal<string | null>(null);\r\n selectedItems = signal<string[]>([]);\r\n searchTerm = signal('');\r\n acabrnId = signal<string | null>(null);\r\n acacpmId = signal<string | null>(null);\r\n\r\n // Derived list filtered by searchTerm\r\n filteredClassProgramTerms = computed(() => {\r\n const q = (this.searchTerm() || '').toLowerCase().trim();\r\n const items = this.classProgramTerms() || [];\r\n if (!q) return items;\r\n return items.filter(cpt => {\r\n const name = (cpt.acapt_name || '').toLowerCase();\r\n const code = (cpt.acapt_code || '').toLowerCase();\r\n const description = (cpt.acapt_description || '').toLowerCase();\r\n return name.includes(q) || code.includes(q) || description.includes(q);\r\n });\r\n });\r\n\r\n // Grid configuration signal\r\n gridConfig = signal<GridConfiguration<ClassProgramTerm>>({\r\n id: 'class-program-term-list-grid',\r\n columns: [\r\n {\r\n key: 'details',\r\n header: 'Term Details',\r\n type: 'custom',\r\n width: 'auto',\r\n truncate: true,\r\n align: 'left',\r\n renderer: 'classProgramTermDetailsRenderer'\r\n },\r\n {\r\n key: 'acapt_code',\r\n header: 'Code',\r\n type: 'text',\r\n width: '120px',\r\n truncate: true,\r\n align: 'left'\r\n },\r\n {\r\n key: 'acapt_class_program_id_acacpm',\r\n header: 'Program Class',\r\n type: 'custom',\r\n width: '200px',\r\n truncate: true,\r\n align: 'left',\r\n renderer: 'programClassRenderer'\r\n },\r\n {\r\n key: 'acapt_parent_class_prog_term_acapt',\r\n header: 'Parent Term',\r\n type: 'custom',\r\n width: '180px',\r\n truncate: true,\r\n align: 'left',\r\n renderer: 'parentTermRenderer'\r\n },\r\n {\r\n key: 'acapt_isactive',\r\n header: 'Status',\r\n type: 'custom',\r\n width: '120px',\r\n truncate: false,\r\n align: 'center',\r\n renderer: 'classProgramTermStatusRenderer'\r\n },\r\n {\r\n key: 'actions',\r\n header: '',\r\n type: 'custom',\r\n width: '150px',\r\n truncate: false,\r\n align: 'center',\r\n renderer: 'actionsDropdownRenderer'\r\n }\r\n ],\r\n data: [],\r\n trackBy: '_id',\r\n pagination: {\r\n enabled: true,\r\n pageSize: 10,\r\n pageSizeOptions: [10, 25, 50, 100],\r\n showQuickJump: true,\r\n showPageInfo: true,\r\n showRefresh: true\r\n },\r\n search: {\r\n enabled: true,\r\n placeholder: 'Search class program terms...',\r\n searchableColumns: ['acapt_name', 'acapt_code', 'acapt_description'],\r\n debounceMs: 300\r\n },\r\n loading: {\r\n useDefer: true,\r\n skeletonRows: 5,\r\n showOverlay: false\r\n },\r\n scroll: {\r\n enabled: true,\r\n maxHeight: '',\r\n minHeight: '',\r\n stickyHeader: true,\r\n virtualScroll: false,\r\n rowHeight: 50\r\n },\r\n responsive: true,\r\n striped: false,\r\n bordered: true,\r\n compact: false,\r\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none'\r\n });\r\n\r\n /**\r\n * Get action dropdown items\r\n */\r\n getActionDropdownItems(classProgramTerm: ClassProgramTerm): DropdownItem[] {\r\n const items: DropdownItem[] = [\r\n {\r\n id: 'view',\r\n label: 'View Details',\r\n icon: 'visibility',\r\n iconColor: 'tw-text-gray-400',\r\n textColor: 'tw-text-gray-700'\r\n },\r\n {\r\n id: 'edit',\r\n label: 'Edit Term',\r\n icon: 'edit',\r\n iconColor: 'tw-text-blue-400',\r\n textColor: 'tw-text-blue-700'\r\n },\r\n {\r\n id: 'toggleStatus',\r\n label: classProgramTerm.acapt_isactive ? 'Deactivate' : 'Activate',\r\n icon: classProgramTerm.acapt_isactive ? 'toggle_off' : 'toggle_on',\r\n iconColor: classProgramTerm.acapt_isactive ? 'tw-text-orange-400' : 'tw-text-green-400',\r\n textColor: classProgramTerm.acapt_isactive ? 'tw-text-orange-700' : 'tw-text-green-700'\r\n },\r\n {\r\n id: 'delete',\r\n label: 'Delete',\r\n icon: 'delete',\r\n iconColor: 'tw-text-red-400',\r\n textColor: 'tw-text-red-700'\r\n }\r\n ];\r\n\r\n return items;\r\n }\r\n\r\n /**\r\n * Handle dropdown item click\r\n */\r\n onDropdownItemClick(item: DropdownItem, classProgramTerm: ClassProgramTerm): void {\r\n switch (item.id) {\r\n case 'view':\r\n this.viewClassProgramTerm(classProgramTerm);\r\n break;\r\n case 'edit':\r\n this.editClassProgramTerm(classProgramTerm);\r\n break;\r\n case 'toggleStatus':\r\n this.toggleClassProgramTermStatus(classProgramTerm);\r\n break;\r\n case 'delete':\r\n this.deleteClassProgramTerm(classProgramTerm);\r\n break;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.checkRouteParams();\r\n this.loadClassProgramTerms();\r\n }\r\n\r\n /**\r\n * Check route parameters for acabrn_id and acacpm_id\r\n */\r\n private checkRouteParams(): void {\r\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\r\n const queryParams = params['query'];\r\n console.log('🏢 Route params:', params, 'queryParams:', queryParams);\r\n\r\n if (queryParams) {\r\n // Query parameters passed (following page-controls pattern)\r\n const queryData = generateObjectFromString(queryParams);\r\n console.log('🏢 Class Program Term params from route:', queryData);\r\n \r\n if (queryData?.acabrn_id) {\r\n this.acabrnId.set(queryData.acabrn_id as string);\r\n console.log('🏢 Branch ID from route:', queryData.acabrn_id);\r\n }\r\n \r\n if (queryData?.acacpm_id) {\r\n this.acacpmId.set(queryData.acacpm_id as string);\r\n console.log('🏢 Class Program ID from route:', queryData.acacpm_id);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Load class program terms data\r\n */\r\n private loadClassProgramTerms(): void {\r\n this.loading.set(true);\r\n this.error.set(null);\r\n // Add filter parameters if available\r\n const acabrnId = this.acabrnId();\r\n const acacpmId = this.acacpmId();\r\n const payload: MClassProgramTerm = {\r\n pageIndex: 0,\r\n pageSize: 100,\r\n query: this.searchTerm() || \"\",\r\n sort: {\r\n key: 'acapt_name',\r\n order: 'asc'\r\n },\r\n acapt_class_prg_branch_acabrn: acabrnId as string,\r\n };\r\n\r\n this.classProgramTermService.getClassProgramTermList(payload)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response?.success && response.data) {\r\n console.log('📚 Class program terms loaded:', response.data);\r\n this.classProgramTerms.set(response.data);\r\n this.updateGridData();\r\n this.notificationService.success(`Loaded ${response.data.length} class program term(s) successfully.`);\r\n } else {\r\n console.warn('⚠️ No class program term data received');\r\n this.classProgramTerms.set([]);\r\n this.updateGridData();\r\n this.notificationService.warning('No class program terms found.');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error) => {\r\n console.error('❌ Error loading class program terms:', error);\r\n this.error.set('Failed to load class program terms');\r\n this.loading.set(false);\r\n this.notificationService.error('Failed to load class program terms');\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Update grid data\r\n */\r\n private updateGridData(): void {\r\n this.gridConfig.update(config => ({\r\n ...config,\r\n data: this.filteredClassProgramTerms()\r\n }));\r\n }\r\n\r\n /**\r\n * Handle grid events\r\n */\r\n onGridEvent(event: GridEvent<ClassProgramTerm>): void {\r\n switch (event.type) {\r\n case 'pageChange':\r\n if (event.data && typeof event.data === 'object' && 'pageIndex' in event.data && 'pageSize' in event.data) {\r\n this.loadClassProgramTerms();\r\n }\r\n break;\r\n case 'search':\r\n this.searchTerm.set(event.data as string);\r\n this.updateGridData();\r\n break;\r\n case 'refresh':\r\n this.loadClassProgramTerms();\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Create new class program term\r\n */\r\n createClassProgramTerm(): void {\r\n this.router.navigate(['/control-panel/program-term-management/create']);\r\n }\r\n\r\n /**\r\n * View class program term details\r\n */\r\n viewClassProgramTerm(classProgramTerm: ClassProgramTerm): void {\r\n this.router.navigate(['/control-panel/class-program-term/view', classProgramTerm._id]);\r\n }\r\n\r\n /**\r\n * Edit class program term\r\n */\r\n editClassProgramTerm(classProgramTerm: ClassProgramTerm): void {\r\n this.router.navigate(['/control-panel/class-program-term/edit', classProgramTerm._id]);\r\n }\r\n\r\n /**\r\n * Delete class program term\r\n */\r\n deleteClassProgramTerm(classProgramTerm: ClassProgramTerm): void {\r\n this.confirmationService.confirmDelete(classProgramTerm.acapt_name).then((confirmed: boolean) => {\r\n if (confirmed) {\r\n this.loading.set(true);\r\n const payload: MClassProgramTermDeletePayload = {\r\n acapt_id: classProgramTerm._id!\r\n };\r\n\r\n this.classProgramTermService.deleteClassProgramTerm(payload)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response?.success) {\r\n this.classProgramTerms.update(terms => \r\n terms.filter(cpt => cpt._id !== classProgramTerm._id)\r\n );\r\n this.updateGridData();\r\n this.notificationService.success('Class program term deleted successfully.');\r\n } else {\r\n this.notificationService.error('Failed to delete class program term.');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error) => {\r\n console.error('❌ Error deleting class program term:', error);\r\n this.notificationService.error('Failed to delete class program term.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Toggle class program term status\r\n */\r\n toggleClassProgramTermStatus(classProgramTerm: ClassProgramTerm): void {\r\n this.loading.set(true);\r\n const payload: MClassProgramTermToggleStatusPayload = {\r\n acapt_id: classProgramTerm._id!\r\n };\r\n\r\n this.classProgramTermService.toggleClassProgramTermStatus(payload)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response?.success) {\r\n this.classProgramTerms.update(terms => \r\n terms.map(cpt => \r\n cpt._id === classProgramTerm._id \r\n ? { ...cpt, acapt_isactive: !cpt.acapt_isactive }\r\n : cpt\r\n )\r\n );\r\n this.updateGridData();\r\n this.notificationService.success(`Class program term ${classProgramTerm.acapt_isactive ? 'deactivated' : 'activated'} successfully.`);\r\n } else {\r\n this.notificationService.error('Failed to toggle class program term status.');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error) => {\r\n console.error('❌ Error toggling class program term status:', error);\r\n this.notificationService.error('Failed to toggle class program term status.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Refresh data\r\n */\r\n refreshData(): void {\r\n this.loadClassProgramTerms();\r\n }\r\n}\r\n","<!-- Class Program Term Management Container -->\r\n<div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Header Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell 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 </div>\r\n\r\n <!-- Data Grid Section -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell 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</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"],"names":[],"mappings":"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"}