cloud-ide-academics 0.0.28 → 0.0.30

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 (26) hide show
  1. package/fesm2022/cloud-ide-academics-class-program-term-create.component-B-7JRpVE.mjs +1196 -0
  2. package/fesm2022/cloud-ide-academics-class-program-term-create.component-B-7JRpVE.mjs.map +1 -0
  3. package/fesm2022/{cloud-ide-academics-class-program-term-list.component-CP2vlRBP.mjs → cloud-ide-academics-class-program-term-list.component-DObKkh-y.mjs} +186 -48
  4. package/fesm2022/cloud-ide-academics-class-program-term-list.component-DObKkh-y.mjs.map +1 -0
  5. package/fesm2022/cloud-ide-academics-cloud-ide-academics-FwQEJSnJ.mjs +6127 -0
  6. package/fesm2022/cloud-ide-academics-cloud-ide-academics-FwQEJSnJ.mjs.map +1 -0
  7. package/fesm2022/{cloud-ide-academics-program-class-create.component-KijRP6Nl.mjs → cloud-ide-academics-program-class-create.component-x0rh1ESo.mjs} +45 -23
  8. package/fesm2022/cloud-ide-academics-program-class-create.component-x0rh1ESo.mjs.map +1 -0
  9. package/fesm2022/{cloud-ide-academics-program-class-list.component-B5cy2Gpk.mjs → cloud-ide-academics-program-class-list.component-CkzH8u8u.mjs} +10 -9
  10. package/fesm2022/cloud-ide-academics-program-class-list.component-CkzH8u8u.mjs.map +1 -0
  11. package/fesm2022/cloud-ide-academics.mjs +1 -1
  12. package/index.d.ts +500 -18
  13. package/package.json +1 -1
  14. package/fesm2022/cloud-ide-academics-class-program-term-create.component-BRbHViJN.mjs +0 -659
  15. package/fesm2022/cloud-ide-academics-class-program-term-create.component-BRbHViJN.mjs.map +0 -1
  16. package/fesm2022/cloud-ide-academics-class-program-term-list.component-CP2vlRBP.mjs.map +0 -1
  17. package/fesm2022/cloud-ide-academics-class-program-term.service-BW4PJQEM.mjs +0 -111
  18. package/fesm2022/cloud-ide-academics-class-program-term.service-BW4PJQEM.mjs.map +0 -1
  19. package/fesm2022/cloud-ide-academics-cloud-ide-academics-g9qZGJtG.mjs +0 -3102
  20. package/fesm2022/cloud-ide-academics-cloud-ide-academics-g9qZGJtG.mjs.map +0 -1
  21. package/fesm2022/cloud-ide-academics-program-class-create.component-KijRP6Nl.mjs.map +0 -1
  22. package/fesm2022/cloud-ide-academics-program-class-list.component-B5cy2Gpk.mjs.map +0 -1
  23. package/fesm2022/cloud-ide-academics-program-term-section-create.component-DHrTb-XI.mjs +0 -248
  24. package/fesm2022/cloud-ide-academics-program-term-section-create.component-DHrTb-XI.mjs.map +0 -1
  25. package/fesm2022/cloud-ide-academics-program-term-section-list.component-ktIAxvxR.mjs +0 -495
  26. package/fesm2022/cloud-ide-academics-program-term-section-list.component-ktIAxvxR.mjs.map +0 -1
@@ -1,495 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { inject, Injectable, DestroyRef, viewChild, computed, signal, Component } from '@angular/core';
3
- import * as i1 from '@angular/common';
4
- import { CommonModule } from '@angular/common';
5
- import { Router } 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, CideLytSharedWrapperComponent } from 'cloud-ide-layout';
9
- import { HttpClient } from '@angular/common/http';
10
- import { generateStringFromObject, cidePath, hostManagerRoutesUrl, academicsRoutesUrl } from 'cloud-ide-lms-model';
11
-
12
- class CideLytProgramTermSectionService {
13
- http = inject(HttpClient);
14
- /**
15
- * Get list of program term sections
16
- * @param payload - Query parameters for filtering/pagination
17
- * @returns Observable of program term section list response
18
- */
19
- getProgramTermSectionList(payload) {
20
- console.log("Program Term Section List Payload:", payload);
21
- const query = generateStringFromObject(payload);
22
- const url = cidePath.join([
23
- hostManagerRoutesUrl.cideSuiteHost,
24
- academicsRoutesUrl.module,
25
- academicsRoutesUrl.programTermSection,
26
- query
27
- ]);
28
- return this.http.get(url);
29
- }
30
- /**
31
- * Get program term section by ID
32
- * @param payload - Program term section ID payload
33
- * @returns Observable of program term section data
34
- */
35
- getProgramTermSectionById(payload) {
36
- const query = generateStringFromObject(payload);
37
- const url = cidePath.join([
38
- hostManagerRoutesUrl.cideSuiteHost,
39
- academicsRoutesUrl.module,
40
- academicsRoutesUrl.programTermSection,
41
- 'byId',
42
- query
43
- ]);
44
- return this.http.get(url);
45
- }
46
- /**
47
- * Create or update program term section
48
- * @param data - Program term section data to save
49
- * @returns Observable of the save response
50
- */
51
- saveProgramTermSection(data) {
52
- const url = cidePath.join([
53
- hostManagerRoutesUrl.cideSuiteHost,
54
- academicsRoutesUrl.module,
55
- academicsRoutesUrl.programTermSection
56
- ]);
57
- return this.http.post(url, data);
58
- }
59
- /**
60
- * Delete program term section
61
- * @param payload - Program term section delete payload
62
- * @returns Observable of the delete response
63
- */
64
- deleteProgramTermSection(payload) {
65
- const query = generateStringFromObject(payload);
66
- const url = cidePath.join([
67
- hostManagerRoutesUrl.cideSuiteHost,
68
- academicsRoutesUrl.module,
69
- academicsRoutesUrl.programTermSection,
70
- query
71
- ]);
72
- return this.http.delete(url);
73
- }
74
- /**
75
- * Toggle program term section status (active/inactive)
76
- * @param payload - Program term section toggle status payload
77
- * @returns Observable of the toggle status response
78
- */
79
- toggleProgramTermSectionStatus(payload) {
80
- const query = generateStringFromObject(payload);
81
- const url = cidePath.join([
82
- hostManagerRoutesUrl.cideSuiteHost,
83
- academicsRoutesUrl.module,
84
- academicsRoutesUrl.programTermSection,
85
- 'toggleStatus',
86
- query
87
- ]);
88
- return this.http.put(url, {});
89
- }
90
- /**
91
- * Toggle program term section lock status
92
- * @param payload - Program term section toggle lock payload
93
- * @returns Observable of the toggle lock response
94
- */
95
- toggleProgramTermSectionLock(payload) {
96
- const query = generateStringFromObject(payload);
97
- const url = cidePath.join([
98
- hostManagerRoutesUrl.cideSuiteHost,
99
- academicsRoutesUrl.module,
100
- academicsRoutesUrl.programTermSection,
101
- 'toggleLock',
102
- query
103
- ]);
104
- return this.http.put(url, {});
105
- }
106
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytProgramTermSectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
107
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytProgramTermSectionService, providedIn: 'root' });
108
- }
109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytProgramTermSectionService, decorators: [{
110
- type: Injectable,
111
- args: [{
112
- providedIn: 'root'
113
- }]
114
- }] });
115
-
116
- class ProgramTermSectionListComponent {
117
- // Dependency injection
118
- destroyRef = inject(DestroyRef);
119
- router = inject(Router);
120
- appState = inject(AppStateHelperService);
121
- notificationService = inject(NotificationService);
122
- confirmationService = inject(ConfirmationService);
123
- programTermSectionService = inject(CideLytProgramTermSectionService);
124
- // Modern ViewChild signals for template renderers (Angular 20 approach)
125
- programTermSectionDetailsRendererTemplate = viewChild.required('programTermSectionDetailsRendererTemplate');
126
- programTermSectionStatusRendererTemplate = viewChild.required('programTermSectionStatusRendererTemplate');
127
- actionsDropdownRendererTemplate = viewChild.required('actionsDropdownRendererTemplate');
128
- // Computed template renderers for grid
129
- templateRenderers = computed(() => ({
130
- programTermSectionDetailsRenderer: this.programTermSectionDetailsRendererTemplate(),
131
- programTermSectionStatusRenderer: this.programTermSectionStatusRendererTemplate(),
132
- actionsDropdownRenderer: this.actionsDropdownRendererTemplate()
133
- }), ...(ngDevMode ? [{ debugName: "templateRenderers" }] : []));
134
- // Make Math available in template
135
- Math = Math;
136
- // Signals for reactive state management
137
- programTermSections = signal([], ...(ngDevMode ? [{ debugName: "programTermSections" }] : []));
138
- loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
139
- error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : []));
140
- selectedItems = signal([], ...(ngDevMode ? [{ debugName: "selectedItems" }] : []));
141
- searchTerm = signal('', ...(ngDevMode ? [{ debugName: "searchTerm" }] : []));
142
- // Signal for breadcrumb data that will be passed to shared wrapper
143
- breadcrumbData = signal([], ...(ngDevMode ? [{ debugName: "breadcrumbData" }] : []));
144
- // Derived list filtered by searchTerm
145
- filteredProgramTermSections = computed(() => {
146
- const q = (this.searchTerm() || '').toLowerCase().trim();
147
- const items = this.programTermSections() || [];
148
- if (!q)
149
- return items;
150
- return items.filter(pts => {
151
- const name = (pts.acapts_name || '').toLowerCase();
152
- const code = (pts.acapts_code || '').toLowerCase();
153
- const description = (pts.acapts_description || '').toLowerCase();
154
- return name.includes(q) || code.includes(q) || description.includes(q);
155
- });
156
- }, ...(ngDevMode ? [{ debugName: "filteredProgramTermSections" }] : []));
157
- // Grid configuration signal
158
- gridConfig = signal({
159
- id: 'program-term-section-list-grid',
160
- columns: [
161
- {
162
- key: 'details',
163
- header: 'Section Details',
164
- type: 'custom',
165
- width: 'auto',
166
- truncate: true,
167
- align: 'left',
168
- renderer: 'programTermSectionDetailsRenderer'
169
- },
170
- {
171
- key: 'acapts_code',
172
- header: 'Code',
173
- type: 'text',
174
- width: '120px',
175
- truncate: true,
176
- align: 'left'
177
- },
178
- {
179
- key: 'acapts_class_program_id_acacpm',
180
- header: 'Program Class',
181
- type: 'custom',
182
- width: '200px',
183
- truncate: true,
184
- align: 'left',
185
- renderer: 'programClassRenderer'
186
- },
187
- {
188
- key: 'acapts_parent_class_prog_term_acapt',
189
- header: 'Class Program Term',
190
- type: 'custom',
191
- width: '200px',
192
- truncate: true,
193
- align: 'left',
194
- renderer: 'classProgramTermRenderer'
195
- },
196
- {
197
- key: 'acapts_isactive',
198
- header: 'Status',
199
- type: 'custom',
200
- width: '120px',
201
- truncate: false,
202
- align: 'center',
203
- renderer: 'programTermSectionStatusRenderer'
204
- },
205
- {
206
- key: 'actions',
207
- header: '',
208
- type: 'custom',
209
- width: '150px',
210
- truncate: false,
211
- align: 'center',
212
- renderer: 'actionsDropdownRenderer'
213
- }
214
- ],
215
- data: [],
216
- trackBy: '_id',
217
- pagination: {
218
- enabled: true,
219
- pageSize: 10,
220
- pageSizeOptions: [10, 25, 50, 100],
221
- showQuickJump: true,
222
- showPageInfo: true,
223
- showRefresh: true
224
- },
225
- search: {
226
- enabled: true,
227
- placeholder: 'Search program term sections...',
228
- searchableColumns: ['acapts_name', 'acapts_code', 'acapts_description'],
229
- debounceMs: 300
230
- },
231
- loading: {
232
- useDefer: true,
233
- skeletonRows: 5,
234
- showOverlay: false
235
- },
236
- scroll: {
237
- enabled: true,
238
- maxHeight: '',
239
- minHeight: '',
240
- stickyHeader: true,
241
- virtualScroll: false,
242
- rowHeight: 50
243
- },
244
- responsive: true,
245
- striped: false,
246
- bordered: true,
247
- compact: false,
248
- tableClass: 'tw-table-fixed tw-w-full tw-rounded-none'
249
- }, ...(ngDevMode ? [{ debugName: "gridConfig" }] : []));
250
- /**
251
- * Get action dropdown items
252
- */
253
- getActionDropdownItems(programTermSection) {
254
- const items = [
255
- {
256
- id: 'view',
257
- label: 'View Details',
258
- icon: 'visibility',
259
- iconColor: 'tw-text-gray-400',
260
- textColor: 'tw-text-gray-700'
261
- },
262
- {
263
- id: 'edit',
264
- label: 'Edit Section',
265
- icon: 'edit',
266
- iconColor: 'tw-text-blue-400',
267
- textColor: 'tw-text-blue-700'
268
- },
269
- {
270
- id: 'toggleStatus',
271
- label: programTermSection?.acapts_isactive ? 'Deactivate' : 'Activate',
272
- icon: programTermSection?.acapts_isactive ? 'toggle_off' : 'toggle_on',
273
- iconColor: programTermSection?.acapts_isactive ? 'tw-text-orange-400' : 'tw-text-green-400',
274
- textColor: programTermSection?.acapts_isactive ? 'tw-text-orange-700' : 'tw-text-green-700'
275
- },
276
- {
277
- id: 'delete',
278
- label: 'Delete',
279
- icon: 'delete',
280
- iconColor: 'tw-text-red-400',
281
- textColor: 'tw-text-red-700'
282
- }
283
- ];
284
- return items;
285
- }
286
- /**
287
- * Handle dropdown item click
288
- */
289
- onDropdownItemClick(item, programTermSection) {
290
- switch (item.id) {
291
- case 'view':
292
- this.viewProgramTermSection(programTermSection);
293
- break;
294
- case 'edit':
295
- this.editProgramTermSection(programTermSection);
296
- break;
297
- case 'toggleStatus':
298
- this.toggleProgramTermSectionStatus(programTermSection);
299
- break;
300
- case 'delete':
301
- this.deleteProgramTermSection(programTermSection);
302
- break;
303
- }
304
- }
305
- ngOnInit() {
306
- this.initializeBreadcrumbData();
307
- this.loadProgramTermSections();
308
- }
309
- /**
310
- * Initialize breadcrumb data for list view
311
- */
312
- initializeBreadcrumbData() {
313
- this.breadcrumbData.set([
314
- {
315
- id: 'list',
316
- label: 'List',
317
- icon: 'list',
318
- url: undefined
319
- }
320
- ]);
321
- }
322
- /**
323
- * Load program term sections data
324
- */
325
- loadProgramTermSections() {
326
- this.loading.set(true);
327
- this.error.set(null);
328
- const payload = {
329
- pageIndex: 0,
330
- pageSize: 100,
331
- query: this.searchTerm() || "",
332
- sort: {
333
- key: 'acapts_name',
334
- order: 'asc'
335
- }
336
- };
337
- this.programTermSectionService.getProgramTermSectionList(payload)
338
- .pipe(takeUntilDestroyed(this.destroyRef))
339
- .subscribe({
340
- next: (response) => {
341
- if (response?.success && response.data) {
342
- console.log('📚 Program term sections loaded:', response.data);
343
- this.programTermSections.set(response.data);
344
- this.updateGridData();
345
- this.notificationService.success(`Loaded ${response.data.length} program term section(s) successfully.`);
346
- }
347
- else {
348
- console.warn('⚠️ No program term section data received');
349
- this.programTermSections.set([]);
350
- this.updateGridData();
351
- this.notificationService.warning('No program term sections found.');
352
- }
353
- this.loading.set(false);
354
- },
355
- error: (error) => {
356
- console.error('❌ Error loading program term sections:', error);
357
- this.error.set('Failed to load program term sections');
358
- this.loading.set(false);
359
- this.notificationService.error('Failed to load program term sections');
360
- }
361
- });
362
- }
363
- /**
364
- * Update grid data
365
- */
366
- updateGridData() {
367
- this.gridConfig.update(config => ({
368
- ...config,
369
- data: this.filteredProgramTermSections()
370
- }));
371
- }
372
- /**
373
- * Handle grid events
374
- */
375
- onGridEvent(event) {
376
- switch (event.type) {
377
- case 'pageChange':
378
- if (event.data && typeof event.data === 'object' && 'pageIndex' in event.data && 'pageSize' in event.data) {
379
- this.loadProgramTermSections();
380
- }
381
- break;
382
- case 'search':
383
- this.searchTerm.set(event.data);
384
- this.updateGridData();
385
- break;
386
- case 'refresh':
387
- this.loadProgramTermSections();
388
- break;
389
- }
390
- }
391
- /**
392
- * Create new program term section
393
- */
394
- createProgramTermSection() {
395
- this.router.navigate(['/control-panel/program-term-section/create']);
396
- }
397
- /**
398
- * View program term section details
399
- */
400
- viewProgramTermSection(programTermSection) {
401
- this.router.navigate(['/control-panel/program-term-section/view', programTermSection._id]);
402
- }
403
- /**
404
- * Edit program term section
405
- */
406
- editProgramTermSection(programTermSection) {
407
- this.router.navigate(['/control-panel/program-term-section/edit', programTermSection._id]);
408
- }
409
- /**
410
- * Delete program term section
411
- */
412
- deleteProgramTermSection(programTermSection) {
413
- this.confirmationService.confirmDelete(programTermSection?.acapts_name).then((confirmed) => {
414
- if (confirmed) {
415
- this.loading.set(true);
416
- const payload = {
417
- acapts_id: programTermSection._id
418
- };
419
- this.programTermSectionService.deleteProgramTermSection(payload)
420
- .pipe(takeUntilDestroyed(this.destroyRef))
421
- .subscribe({
422
- next: (response) => {
423
- if (response?.success) {
424
- this.programTermSections.update(sections => sections.filter(pts => pts._id !== programTermSection._id));
425
- this.updateGridData();
426
- this.notificationService.success('Program term section deleted successfully.');
427
- }
428
- else {
429
- this.notificationService.error('Failed to delete program term section.');
430
- }
431
- this.loading.set(false);
432
- },
433
- error: (error) => {
434
- console.error('❌ Error deleting program term section:', error);
435
- this.notificationService.error('Failed to delete program term section.');
436
- this.loading.set(false);
437
- }
438
- });
439
- }
440
- });
441
- }
442
- /**
443
- * Toggle program term section status
444
- */
445
- toggleProgramTermSectionStatus(programTermSection) {
446
- this.loading.set(true);
447
- const payload = {
448
- acapts_id: programTermSection._id
449
- };
450
- this.programTermSectionService.toggleProgramTermSectionStatus(payload)
451
- .pipe(takeUntilDestroyed(this.destroyRef))
452
- .subscribe({
453
- next: (response) => {
454
- if (response?.success) {
455
- this.programTermSections.update(sections => sections.map(pts => pts._id === programTermSection._id
456
- ? { ...pts, acapts_isactive: !pts.acapts_isactive }
457
- : pts));
458
- this.updateGridData();
459
- this.notificationService.success(`Program term section ${programTermSection?.acapts_isactive ? 'deactivated' : 'activated'} successfully.`);
460
- }
461
- else {
462
- this.notificationService.error('Failed to toggle program term section status.');
463
- }
464
- this.loading.set(false);
465
- },
466
- error: (error) => {
467
- console.error('❌ Error toggling program term section status:', error);
468
- this.notificationService.error('Failed to toggle program term section status.');
469
- this.loading.set(false);
470
- }
471
- });
472
- }
473
- /**
474
- * Refresh data
475
- */
476
- refreshData() {
477
- this.loadProgramTermSections();
478
- }
479
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ProgramTermSectionListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
480
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: ProgramTermSectionListComponent, isStandalone: true, selector: "cide-academics-program-term-section-list", viewQueries: [{ propertyName: "programTermSectionDetailsRendererTemplate", first: true, predicate: ["programTermSectionDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "programTermSectionStatusRendererTemplate", first: true, predicate: ["programTermSectionStatusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Program Term Section Management Container -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'program_term_section_list' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <!-- Action Buttons in Breadcrumb Area -->\n <div breadcrumb-actions>\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"sm\" leftIcon=\"add\" (btnClick)=\"createProgramTermSection()\">\n Create Program Term Section\n </button>\n </div>\n\n <!-- Main Content -->\n <div class=\"tw-flex tw-flex-col tw-w-full tw-h-full\">\n <!-- Data Grid Section -->\n <div class=\"tw-flex-1 tw-min-h-0 tw-p-0\">\n <cide-ele-data-grid\n [config]=\"gridConfig()\"\n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n </div>\n</cide-lyt-shared-wrapper>\n\n<!-- Template Renderers -->\n<ng-template #programTermSectionDetailsRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <div class=\"tw-flex-shrink-0\">\n <div class=\"tw-w-10 tw-h-10 tw-bg-teal-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">group</cide-ele-icon>\n </div>\n </div>\n <div class=\"tw-min-w-0 tw-flex-1\">\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-truncate tw-m-0\">\n {{ item?.acapts_name }}\n </h6>\n <p class=\"tw-text-xs tw-text-gray-500 tw-truncate tw-m-0\">\n {{ item?.acapts_description }}\n </p>\n </div>\n </div>\n</ng-template>\n\n<ng-template #programTermSectionStatusRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n @if (item?.acapts_iscurrent) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800\">\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">star</cide-ele-icon>\n Current\n </span>\n }\n @if (item?.acapts_islocked) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-yellow-100 tw-text-yellow-800\">\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">lock</cide-ele-icon>\n Locked\n </span>\n }\n <span [ngClass]=\"{\n 'tw-bg-green-100 tw-text-green-800': item?.acapts_isactive,\n 'tw-bg-red-100 tw-text-red-800': !item?.acapts_isactive\n }\" class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium\">\n <cide-ele-icon [ngClass]=\"{\n 'tw-text-green-600': item?.acapts_isactive,\n 'tw-text-red-600': !item?.acapts_isactive\n }\" class=\"tw-w-3 tw-h-3 tw-mr-1\">\n {{ item?.acapts_isactive ? 'check_circle' : 'cancel' }}\n </cide-ele-icon>\n {{ item?.acapts_isactive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(item)\"\n (itemClick)=\"onDropdownItemClick($event, item)\"\n size=\"sm\"\n variant=\"ghost\"\n icon=\"more_vert\">\n </cide-ele-dropdown>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton], cide-ele-button", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
481
- }
482
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ProgramTermSectionListComponent, decorators: [{
483
- type: Component,
484
- args: [{ selector: 'cide-academics-program-term-section-list', standalone: true, imports: [
485
- CommonModule,
486
- CideEleDataGridComponent,
487
- CideIconComponent,
488
- CideEleButtonComponent,
489
- CideEleDropdownComponent,
490
- CideLytSharedWrapperComponent
491
- ], template: "<!-- Program Term Section Management Container -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'program_term_section_list' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <!-- Action Buttons in Breadcrumb Area -->\n <div breadcrumb-actions>\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"sm\" leftIcon=\"add\" (btnClick)=\"createProgramTermSection()\">\n Create Program Term Section\n </button>\n </div>\n\n <!-- Main Content -->\n <div class=\"tw-flex tw-flex-col tw-w-full tw-h-full\">\n <!-- Data Grid Section -->\n <div class=\"tw-flex-1 tw-min-h-0 tw-p-0\">\n <cide-ele-data-grid\n [config]=\"gridConfig()\"\n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n </div>\n</cide-lyt-shared-wrapper>\n\n<!-- Template Renderers -->\n<ng-template #programTermSectionDetailsRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <div class=\"tw-flex-shrink-0\">\n <div class=\"tw-w-10 tw-h-10 tw-bg-teal-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">group</cide-ele-icon>\n </div>\n </div>\n <div class=\"tw-min-w-0 tw-flex-1\">\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-truncate tw-m-0\">\n {{ item?.acapts_name }}\n </h6>\n <p class=\"tw-text-xs tw-text-gray-500 tw-truncate tw-m-0\">\n {{ item?.acapts_description }}\n </p>\n </div>\n </div>\n</ng-template>\n\n<ng-template #programTermSectionStatusRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n @if (item?.acapts_iscurrent) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800\">\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">star</cide-ele-icon>\n Current\n </span>\n }\n @if (item?.acapts_islocked) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-yellow-100 tw-text-yellow-800\">\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">lock</cide-ele-icon>\n Locked\n </span>\n }\n <span [ngClass]=\"{\n 'tw-bg-green-100 tw-text-green-800': item?.acapts_isactive,\n 'tw-bg-red-100 tw-text-red-800': !item?.acapts_isactive\n }\" class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium\">\n <cide-ele-icon [ngClass]=\"{\n 'tw-text-green-600': item?.acapts_isactive,\n 'tw-text-red-600': !item?.acapts_isactive\n }\" class=\"tw-w-3 tw-h-3 tw-mr-1\">\n {{ item?.acapts_isactive ? 'check_circle' : 'cancel' }}\n </cide-ele-icon>\n {{ item?.acapts_isactive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(item)\"\n (itemClick)=\"onDropdownItemClick($event, item)\"\n size=\"sm\"\n variant=\"ghost\"\n icon=\"more_vert\">\n </cide-ele-dropdown>\n</ng-template>\n" }]
492
- }] });
493
-
494
- export { ProgramTermSectionListComponent };
495
- //# sourceMappingURL=cloud-ide-academics-program-term-section-list.component-ktIAxvxR.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cloud-ide-academics-program-term-section-list.component-ktIAxvxR.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/program-term-section-management/services/program-term-section.service.ts","../../../projects/cloud-ide-academics/src/lib/collection/program-term-section-management/components/program-term-section-list/program-term-section-list.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/program-term-section-management/components/program-term-section-list/program-term-section-list.component.html"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n cidePath,\r\n academicsRoutesUrl,\r\n hostManagerRoutesUrl,\r\n generateStringFromObject,\r\n type prgTrmSectionControllerResponse,\r\n type MPrgTrmSection,\r\n type prgTrmSectionByIdControllerResponse,\r\n type MPrgTrmSectionGetByIdPayload,\r\n type prgTrmSectionInsertUpdateControllerResponse,\r\n type MPrgTrmSectionInsertUpdatePayload,\r\n type prgTrmSectionDeleteControllerResponse,\r\n type MPrgTrmSectionDeletePayload,\r\n type prgTrmSectionToggleStatusControllerResponse,\r\n type MPrgTrmSectionToggleStatusPayload,\r\n type prgTrmSectionToggleLockControllerResponse,\r\n type MPrgTrmSectionToggleLockPayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideLytProgramTermSectionService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get list of program term sections\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of program term section list response\r\n */\r\n getProgramTermSectionList(payload: MPrgTrmSection): Observable<prgTrmSectionControllerResponse> {\r\n console.log(\"Program Term Section List Payload:\", payload);\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.programTermSection,\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get program term section by ID\r\n * @param payload - Program term section ID payload\r\n * @returns Observable of program term section data\r\n */\r\n getProgramTermSectionById(payload: MPrgTrmSectionGetByIdPayload): Observable<prgTrmSectionByIdControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.programTermSection,\r\n 'byId',\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Create or update program term section\r\n * @param data - Program term section data to save\r\n * @returns Observable of the save response\r\n */\r\n saveProgramTermSection(data: MPrgTrmSectionInsertUpdatePayload): Observable<prgTrmSectionInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.programTermSection\r\n ]);\r\n\r\n return this.http.post(url, data);\r\n }\r\n\r\n /**\r\n * Delete program term section\r\n * @param payload - Program term section delete payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteProgramTermSection(payload: MPrgTrmSectionDeletePayload): Observable<prgTrmSectionDeleteControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.programTermSection,\r\n query\r\n ]);\r\n\r\n return this.http.delete(url);\r\n }\r\n\r\n /**\r\n * Toggle program term section status (active/inactive)\r\n * @param payload - Program term section toggle status payload\r\n * @returns Observable of the toggle status response\r\n */\r\n toggleProgramTermSectionStatus(payload: MPrgTrmSectionToggleStatusPayload): Observable<prgTrmSectionToggleStatusControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.programTermSection,\r\n 'toggleStatus',\r\n query\r\n ]);\r\n\r\n return this.http.put(url, {});\r\n }\r\n\r\n /**\r\n * Toggle program term section lock status\r\n * @param payload - Program term section toggle lock payload\r\n * @returns Observable of the toggle lock response\r\n */\r\n toggleProgramTermSectionLock(payload: MPrgTrmSectionToggleLockPayload): Observable<prgTrmSectionToggleLockControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.programTermSection,\r\n 'toggleLock',\r\n query\r\n ]);\r\n\r\n return this.http.put(url, {});\r\n }\r\n}\r\n","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideEleDataGridComponent, CideIconComponent, CideEleButtonComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, NotificationService, ConfirmationService } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { \n type MPrgTrmSection,\n type MPrgTrmSectionDeletePayload,\n type MPrgTrmSectionToggleStatusPayload\n} from 'cloud-ide-lms-model';\nimport { CideLytProgramTermSectionService } from '../../services/program-term-section.service';\n\n// Interfaces based on the model files\ninterface ProgramTermSection {\n _id?: string;\n acapts_code?: string;\n acapts_name?: string;\n acapts_description?: string;\n acapts_class_program_id_acacpm?: {\n _id?: string;\n acacpm_name?: string;\n };\n acapts_parent_class_prog_term_acapt?: {\n _id?: string;\n acapt_name?: string;\n };\n acapts_isactive?: boolean;\n acapts_iscurrent?: boolean;\n acapts_islocked?: boolean;\n}\n\n@Component({\n selector: 'cide-academics-program-term-section-list',\n standalone: true,\n imports: [\n CommonModule,\n CideEleDataGridComponent,\n CideIconComponent,\n CideEleButtonComponent,\n CideEleDropdownComponent,\n CideLytSharedWrapperComponent\n ],\n templateUrl: './program-term-section-list.component.html'\n})\nexport class ProgramTermSectionListComponent implements OnInit {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private router = inject(Router);\n private appState = inject(AppStateHelperService);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\n private programTermSectionService = inject(CideLytProgramTermSectionService);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n programTermSectionDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('programTermSectionDetailsRendererTemplate');\n programTermSectionStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('programTermSectionStatusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n\n // Computed template renderers for grid\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n programTermSectionDetailsRenderer: this.programTermSectionDetailsRendererTemplate(),\n programTermSectionStatusRenderer: this.programTermSectionStatusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n programTermSections = signal<ProgramTermSection[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Signal for breadcrumb data that will be passed to shared wrapper\n breadcrumbData = signal<{ id: string; label: string; icon?: string; url?: string }[]>([]);\n\n // Derived list filtered by searchTerm\n filteredProgramTermSections = computed(() => {\n const q = (this.searchTerm() || '').toLowerCase().trim();\n const items = this.programTermSections() || [];\n if (!q) return items;\n return items.filter(pts => {\n const name = (pts.acapts_name || '').toLowerCase();\n const code = (pts.acapts_code || '').toLowerCase();\n const description = (pts.acapts_description || '').toLowerCase();\n return name.includes(q) || code.includes(q) || description.includes(q);\n });\n });\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ProgramTermSection>>({\n id: 'program-term-section-list-grid',\n columns: [\n {\n key: 'details',\n header: 'Section Details',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'programTermSectionDetailsRenderer'\n },\n {\n key: 'acapts_code',\n header: 'Code',\n type: 'text',\n width: '120px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'acapts_class_program_id_acacpm',\n header: 'Program Class',\n type: 'custom',\n width: '200px',\n truncate: true,\n align: 'left',\n renderer: 'programClassRenderer'\n },\n {\n key: 'acapts_parent_class_prog_term_acapt',\n header: 'Class Program Term',\n type: 'custom',\n width: '200px',\n truncate: true,\n align: 'left',\n renderer: 'classProgramTermRenderer'\n },\n {\n key: 'acapts_isactive',\n header: 'Status',\n type: 'custom',\n width: '120px',\n truncate: false,\n align: 'center',\n renderer: 'programTermSectionStatusRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '150px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search program term sections...',\n searchableColumns: ['acapts_name', 'acapts_code', 'acapts_description'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none'\n });\n\n /**\n * Get action dropdown items\n */\n getActionDropdownItems(programTermSection: ProgramTermSection): DropdownItem[] {\n const items: DropdownItem[] = [\n {\n id: 'view',\n label: 'View Details',\n icon: 'visibility',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700'\n },\n {\n id: 'edit',\n label: 'Edit Section',\n icon: 'edit',\n iconColor: 'tw-text-blue-400',\n textColor: 'tw-text-blue-700'\n },\n {\n id: 'toggleStatus',\n label: programTermSection?.acapts_isactive ? 'Deactivate' : 'Activate',\n icon: programTermSection?.acapts_isactive ? 'toggle_off' : 'toggle_on',\n iconColor: programTermSection?.acapts_isactive ? 'tw-text-orange-400' : 'tw-text-green-400',\n textColor: programTermSection?.acapts_isactive ? 'tw-text-orange-700' : 'tw-text-green-700'\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n iconColor: 'tw-text-red-400',\n textColor: 'tw-text-red-700'\n }\n ];\n\n return items;\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, programTermSection: ProgramTermSection): void {\n switch (item.id) {\n case 'view':\n this.viewProgramTermSection(programTermSection);\n break;\n case 'edit':\n this.editProgramTermSection(programTermSection);\n break;\n case 'toggleStatus':\n this.toggleProgramTermSectionStatus(programTermSection);\n break;\n case 'delete':\n this.deleteProgramTermSection(programTermSection);\n break;\n }\n }\n\n ngOnInit(): void {\n this.initializeBreadcrumbData();\n this.loadProgramTermSections();\n }\n\n /**\n * Initialize breadcrumb data for list view\n */\n private initializeBreadcrumbData(): void {\n this.breadcrumbData.set([\n {\n id: 'list',\n label: 'List',\n icon: 'list',\n url: undefined\n }\n ]);\n }\n\n /**\n * Load program term sections data\n */\n private loadProgramTermSections(): void {\n this.loading.set(true);\n this.error.set(null);\n\n const payload: MPrgTrmSection = {\n pageIndex: 0,\n pageSize: 100,\n query: this.searchTerm() || \"\",\n sort: {\n key: 'acapts_name',\n order: 'asc'\n }\n };\n\n this.programTermSectionService.getProgramTermSectionList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n console.log('📚 Program term sections loaded:', response.data);\n this.programTermSections.set(response.data);\n this.updateGridData();\n this.notificationService.success(`Loaded ${response.data.length} program term section(s) successfully.`);\n } else {\n console.warn('⚠️ No program term section data received');\n this.programTermSections.set([]);\n this.updateGridData();\n this.notificationService.warning('No program term sections found.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error loading program term sections:', error);\n this.error.set('Failed to load program term sections');\n this.loading.set(false);\n this.notificationService.error('Failed to load program term sections');\n }\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(): void {\n this.gridConfig.update(config => ({\n ...config,\n data: this.filteredProgramTermSections()\n }));\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ProgramTermSection>): void {\n switch (event.type) {\n case 'pageChange':\n if (event.data && typeof event.data === 'object' && 'pageIndex' in event.data && 'pageSize' in event.data) {\n this.loadProgramTermSections();\n }\n break;\n case 'search':\n this.searchTerm.set(event.data as string);\n this.updateGridData();\n break;\n case 'refresh':\n this.loadProgramTermSections();\n break;\n }\n }\n\n /**\n * Create new program term section\n */\n createProgramTermSection(): void {\n this.router.navigate(['/control-panel/program-term-section/create']);\n }\n\n /**\n * View program term section details\n */\n viewProgramTermSection(programTermSection: ProgramTermSection): void {\n this.router.navigate(['/control-panel/program-term-section/view', programTermSection._id]);\n }\n\n /**\n * Edit program term section\n */\n editProgramTermSection(programTermSection: ProgramTermSection): void {\n this.router.navigate(['/control-panel/program-term-section/edit', programTermSection._id]);\n }\n\n /**\n * Delete program term section\n */\n deleteProgramTermSection(programTermSection: ProgramTermSection): void {\n this.confirmationService.confirmDelete(programTermSection?.acapts_name).then((confirmed: boolean) => {\n if (confirmed) {\n this.loading.set(true);\n const payload: MPrgTrmSectionDeletePayload = {\n acapts_id: programTermSection._id!\n };\n\n this.programTermSectionService.deleteProgramTermSection(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.programTermSections.update(sections => \n sections.filter(pts => pts._id !== programTermSection._id)\n );\n this.updateGridData();\n this.notificationService.success('Program term section deleted successfully.');\n } else {\n this.notificationService.error('Failed to delete program term section.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error deleting program term section:', error);\n this.notificationService.error('Failed to delete program term section.');\n this.loading.set(false);\n }\n });\n }\n });\n }\n\n /**\n * Toggle program term section status\n */\n toggleProgramTermSectionStatus(programTermSection: ProgramTermSection): void {\n this.loading.set(true);\n const payload: MPrgTrmSectionToggleStatusPayload = {\n acapts_id: programTermSection._id!\n };\n\n this.programTermSectionService.toggleProgramTermSectionStatus(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.programTermSections.update(sections => \n sections.map(pts => \n pts._id === programTermSection._id \n ? { ...pts, acapts_isactive: !pts.acapts_isactive }\n : pts\n )\n );\n this.updateGridData();\n this.notificationService.success(`Program term section ${programTermSection?.acapts_isactive ? 'deactivated' : 'activated'} successfully.`);\n } else {\n this.notificationService.error('Failed to toggle program term section status.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error toggling program term section status:', error);\n this.notificationService.error('Failed to toggle program term section status.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Refresh data\n */\n refreshData(): void {\n this.loadProgramTermSections();\n }\n}\n","<!-- Program Term Section Management Container -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'program_term_section_list' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <!-- Action Buttons in Breadcrumb Area -->\n <div breadcrumb-actions>\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"sm\" leftIcon=\"add\" (btnClick)=\"createProgramTermSection()\">\n Create Program Term Section\n </button>\n </div>\n\n <!-- Main Content -->\n <div class=\"tw-flex tw-flex-col tw-w-full tw-h-full\">\n <!-- Data Grid Section -->\n <div class=\"tw-flex-1 tw-min-h-0 tw-p-0\">\n <cide-ele-data-grid\n [config]=\"gridConfig()\"\n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n </div>\n</cide-lyt-shared-wrapper>\n\n<!-- Template Renderers -->\n<ng-template #programTermSectionDetailsRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <div class=\"tw-flex-shrink-0\">\n <div class=\"tw-w-10 tw-h-10 tw-bg-teal-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">group</cide-ele-icon>\n </div>\n </div>\n <div class=\"tw-min-w-0 tw-flex-1\">\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-truncate tw-m-0\">\n {{ item?.acapts_name }}\n </h6>\n <p class=\"tw-text-xs tw-text-gray-500 tw-truncate tw-m-0\">\n {{ item?.acapts_description }}\n </p>\n </div>\n </div>\n</ng-template>\n\n<ng-template #programTermSectionStatusRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n @if (item?.acapts_iscurrent) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800\">\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">star</cide-ele-icon>\n Current\n </span>\n }\n @if (item?.acapts_islocked) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-yellow-100 tw-text-yellow-800\">\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">lock</cide-ele-icon>\n Locked\n </span>\n }\n <span [ngClass]=\"{\n 'tw-bg-green-100 tw-text-green-800': item?.acapts_isactive,\n 'tw-bg-red-100 tw-text-red-800': !item?.acapts_isactive\n }\" class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium\">\n <cide-ele-icon [ngClass]=\"{\n 'tw-text-green-600': item?.acapts_isactive,\n 'tw-text-red-600': !item?.acapts_isactive\n }\" class=\"tw-w-3 tw-h-3 tw-mr-1\">\n {{ item?.acapts_isactive ? 'check_circle' : 'cancel' }}\n </cide-ele-icon>\n {{ item?.acapts_isactive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-value=\"value\" let-item=\"item\" let-column=\"column\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(item)\"\n (itemClick)=\"onDropdownItemClick($event, item)\"\n size=\"sm\"\n variant=\"ghost\"\n icon=\"more_vert\">\n </cide-ele-dropdown>\n</ng-template>\n"],"names":[],"mappings":"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"}