cloud-ide-academics 0.0.10 → 0.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{cloud-ide-academics-class-program-term-create.component-BwiUbPa2.mjs → cloud-ide-academics-class-program-term-create.component-DiWhmhG_.mjs} +2 -2
- package/fesm2022/{cloud-ide-academics-class-program-term-create.component-BwiUbPa2.mjs.map → cloud-ide-academics-class-program-term-create.component-DiWhmhG_.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-academics-cloud-ide-academics-dePLGTa3.mjs → cloud-ide-academics-cloud-ide-academics-SBTPvNBh.mjs} +243 -126
- package/fesm2022/cloud-ide-academics-cloud-ide-academics-SBTPvNBh.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-program-class-create.component-D0FzkdlS.mjs → cloud-ide-academics-program-class-create.component-C1FnWsj4.mjs} +2 -2
- package/fesm2022/{cloud-ide-academics-program-class-create.component-D0FzkdlS.mjs.map → cloud-ide-academics-program-class-create.component-C1FnWsj4.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-academics-program-class-list.component-gBXC0GN7.mjs → cloud-ide-academics-program-class-list.component-Cbt7ptxQ.mjs} +2 -2
- package/fesm2022/{cloud-ide-academics-program-class-list.component-gBXC0GN7.mjs.map → cloud-ide-academics-program-class-list.component-Cbt7ptxQ.mjs.map} +1 -1
- package/fesm2022/cloud-ide-academics.mjs +1 -1
- package/index.d.ts +25 -1
- package/package.json +1 -1
- package/fesm2022/cloud-ide-academics-cloud-ide-academics-dePLGTa3.mjs.map +0 -1
|
@@ -11,7 +11,7 @@ import { of, forkJoin } from 'rxjs';
|
|
|
11
11
|
import { switchMap, catchError, map } from 'rxjs/operators';
|
|
12
12
|
import { CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideEleTabComponent, CideIconComponent, CideSelectComponent, CideFormFieldErrorComponent, ConfirmationService, NotificationService, CideEleDataGridComponent, CideEleDropdownComponent } from 'cloud-ide-element';
|
|
13
13
|
import { HttpClient } from '@angular/common/http';
|
|
14
|
-
import { generateStringFromObject, cidePath, hostManagerRoutesUrl, academicsRoutesUrl, generateObjectFromString } from 'cloud-ide-lms-model';
|
|
14
|
+
import { generateStringFromObject, cidePath, hostManagerRoutesUrl, academicsRoutesUrl, generateObjectFromString, AcaClassPrgBranchListPayload } from 'cloud-ide-lms-model';
|
|
15
15
|
import { ENTITY_SERVICE_TOKEN, CideCoreGeneralMasterService } from 'cloud-ide-shared';
|
|
16
16
|
import { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';
|
|
17
17
|
|
|
@@ -59,7 +59,7 @@ const academicsRoutes = [
|
|
|
59
59
|
},
|
|
60
60
|
{
|
|
61
61
|
path: 'program-class-management',
|
|
62
|
-
loadComponent: () => import('./cloud-ide-academics-program-class-list.component-
|
|
62
|
+
loadComponent: () => import('./cloud-ide-academics-program-class-list.component-Cbt7ptxQ.mjs').then(c => c.ProgramClassListComponent),
|
|
63
63
|
title: 'Program Class Management',
|
|
64
64
|
canActivate: [authGuard],
|
|
65
65
|
data: {
|
|
@@ -69,7 +69,7 @@ const academicsRoutes = [
|
|
|
69
69
|
},
|
|
70
70
|
{
|
|
71
71
|
path: 'program-class-management/create',
|
|
72
|
-
loadComponent: () => import('./cloud-ide-academics-program-class-create.component-
|
|
72
|
+
loadComponent: () => import('./cloud-ide-academics-program-class-create.component-C1FnWsj4.mjs').then(c => c.ProgramClassCreateComponent),
|
|
73
73
|
title: 'Create Program Class',
|
|
74
74
|
canActivate: [authGuard],
|
|
75
75
|
data: {
|
|
@@ -79,7 +79,7 @@ const academicsRoutes = [
|
|
|
79
79
|
},
|
|
80
80
|
{
|
|
81
81
|
path: 'program-class-management/edit/:query',
|
|
82
|
-
loadComponent: () => import('./cloud-ide-academics-program-class-create.component-
|
|
82
|
+
loadComponent: () => import('./cloud-ide-academics-program-class-create.component-C1FnWsj4.mjs').then(c => c.ProgramClassCreateComponent),
|
|
83
83
|
title: 'Edit Program Class',
|
|
84
84
|
canActivate: [authGuard],
|
|
85
85
|
data: {
|
|
@@ -89,7 +89,7 @@ const academicsRoutes = [
|
|
|
89
89
|
},
|
|
90
90
|
{
|
|
91
91
|
path: 'program-class-management/view/:query',
|
|
92
|
-
loadComponent: () => import('./cloud-ide-academics-program-class-create.component-
|
|
92
|
+
loadComponent: () => import('./cloud-ide-academics-program-class-create.component-C1FnWsj4.mjs').then(c => c.ProgramClassCreateComponent),
|
|
93
93
|
title: 'View Program Class',
|
|
94
94
|
canActivate: [authGuard],
|
|
95
95
|
data: {
|
|
@@ -99,7 +99,7 @@ const academicsRoutes = [
|
|
|
99
99
|
},
|
|
100
100
|
{
|
|
101
101
|
path: 'program-term-management/create',
|
|
102
|
-
loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-
|
|
102
|
+
loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-DiWhmhG_.mjs').then(c => c.ClassProgramTermCreateComponent),
|
|
103
103
|
title: 'Create Class Program Term',
|
|
104
104
|
canActivate: [authGuard],
|
|
105
105
|
data: {
|
|
@@ -109,7 +109,7 @@ const academicsRoutes = [
|
|
|
109
109
|
},
|
|
110
110
|
{
|
|
111
111
|
path: 'program-term-management/edit/:query',
|
|
112
|
-
loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-
|
|
112
|
+
loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-DiWhmhG_.mjs').then(c => c.ClassProgramTermCreateComponent),
|
|
113
113
|
title: 'Edit Class Program Term',
|
|
114
114
|
canActivate: [authGuard],
|
|
115
115
|
data: {
|
|
@@ -119,7 +119,7 @@ const academicsRoutes = [
|
|
|
119
119
|
},
|
|
120
120
|
{
|
|
121
121
|
path: 'program-term-management/view/:query',
|
|
122
|
-
loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-
|
|
122
|
+
loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-DiWhmhG_.mjs').then(c => c.ClassProgramTermCreateComponent),
|
|
123
123
|
title: 'View Class Program Term',
|
|
124
124
|
canActivate: [authGuard],
|
|
125
125
|
data: {
|
|
@@ -1786,6 +1786,94 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
1786
1786
|
}]
|
|
1787
1787
|
}] });
|
|
1788
1788
|
|
|
1789
|
+
class CideLytProgramClassService {
|
|
1790
|
+
http = inject(HttpClient);
|
|
1791
|
+
/**
|
|
1792
|
+
* Get list of program classes
|
|
1793
|
+
* @param payload - Query parameters for filtering/pagination
|
|
1794
|
+
* @returns Observable of program class list response
|
|
1795
|
+
*/
|
|
1796
|
+
getProgramClassList(payload) {
|
|
1797
|
+
console.log("Program Class List Payload:", payload);
|
|
1798
|
+
const query = generateStringFromObject(payload);
|
|
1799
|
+
const url = cidePath.join([
|
|
1800
|
+
hostManagerRoutesUrl.cideSuiteHost,
|
|
1801
|
+
academicsRoutesUrl.module,
|
|
1802
|
+
academicsRoutesUrl.classProgramMaster,
|
|
1803
|
+
query
|
|
1804
|
+
]);
|
|
1805
|
+
return this.http.get(url);
|
|
1806
|
+
}
|
|
1807
|
+
/**
|
|
1808
|
+
* Get program class by ID
|
|
1809
|
+
* @param payload - Program class ID payload
|
|
1810
|
+
* @returns Observable of program class data
|
|
1811
|
+
*/
|
|
1812
|
+
getProgramClassById(payload) {
|
|
1813
|
+
const query = generateStringFromObject(payload);
|
|
1814
|
+
const url = cidePath.join([
|
|
1815
|
+
hostManagerRoutesUrl.cideSuiteHost,
|
|
1816
|
+
academicsRoutesUrl.module,
|
|
1817
|
+
academicsRoutesUrl.classProgramMaster,
|
|
1818
|
+
'byId',
|
|
1819
|
+
query
|
|
1820
|
+
]);
|
|
1821
|
+
return this.http.get(url);
|
|
1822
|
+
}
|
|
1823
|
+
/**
|
|
1824
|
+
* Create or update program class
|
|
1825
|
+
* @param data - Program class data to save
|
|
1826
|
+
* @returns Observable of the save response
|
|
1827
|
+
*/
|
|
1828
|
+
saveProgramClass(data) {
|
|
1829
|
+
const url = cidePath.join([
|
|
1830
|
+
hostManagerRoutesUrl.cideSuiteHost,
|
|
1831
|
+
academicsRoutesUrl.module,
|
|
1832
|
+
academicsRoutesUrl.classProgramMaster
|
|
1833
|
+
]);
|
|
1834
|
+
return this.http.post(url, data);
|
|
1835
|
+
}
|
|
1836
|
+
/**
|
|
1837
|
+
* Delete program class
|
|
1838
|
+
* @param payload - Program class delete payload
|
|
1839
|
+
* @returns Observable of the delete response
|
|
1840
|
+
*/
|
|
1841
|
+
deleteProgramClass(payload) {
|
|
1842
|
+
const query = generateStringFromObject(payload);
|
|
1843
|
+
const url = cidePath.join([
|
|
1844
|
+
hostManagerRoutesUrl.cideSuiteHost,
|
|
1845
|
+
academicsRoutesUrl.module,
|
|
1846
|
+
academicsRoutesUrl.classProgramMaster,
|
|
1847
|
+
query
|
|
1848
|
+
]);
|
|
1849
|
+
return this.http.delete(url);
|
|
1850
|
+
}
|
|
1851
|
+
/**
|
|
1852
|
+
* Toggle program class status (active/inactive)
|
|
1853
|
+
* @param payload - Program class toggle status payload
|
|
1854
|
+
* @returns Observable of the toggle status response
|
|
1855
|
+
*/
|
|
1856
|
+
toggleProgramClassStatus(payload) {
|
|
1857
|
+
const query = generateStringFromObject(payload);
|
|
1858
|
+
const url = cidePath.join([
|
|
1859
|
+
hostManagerRoutesUrl.cideSuiteHost,
|
|
1860
|
+
academicsRoutesUrl.module,
|
|
1861
|
+
academicsRoutesUrl.classProgramMaster,
|
|
1862
|
+
'toggleStatus',
|
|
1863
|
+
query
|
|
1864
|
+
]);
|
|
1865
|
+
return this.http.put(url, {});
|
|
1866
|
+
}
|
|
1867
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytProgramClassService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1868
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytProgramClassService, providedIn: 'root' });
|
|
1869
|
+
}
|
|
1870
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytProgramClassService, decorators: [{
|
|
1871
|
+
type: Injectable,
|
|
1872
|
+
args: [{
|
|
1873
|
+
providedIn: 'root'
|
|
1874
|
+
}]
|
|
1875
|
+
}] });
|
|
1876
|
+
|
|
1789
1877
|
class CideLytClassProgramBranchListComponent {
|
|
1790
1878
|
// Dependency injection
|
|
1791
1879
|
destroyRef = inject(DestroyRef);
|
|
@@ -1795,12 +1883,15 @@ class CideLytClassProgramBranchListComponent {
|
|
|
1795
1883
|
notificationService = inject(NotificationService);
|
|
1796
1884
|
confirmationService = inject(ConfirmationService);
|
|
1797
1885
|
classProgramBranchService = inject(CideLytClassProgramBranchService);
|
|
1886
|
+
programClassService = inject(CideLytProgramClassService);
|
|
1798
1887
|
// State management
|
|
1799
1888
|
loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
|
|
1800
1889
|
error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
1801
1890
|
branches = signal([], ...(ngDevMode ? [{ debugName: "branches" }] : []));
|
|
1802
1891
|
totalCount = signal(0, ...(ngDevMode ? [{ debugName: "totalCount" }] : []));
|
|
1803
1892
|
programId = signal(null, ...(ngDevMode ? [{ debugName: "programId" }] : []));
|
|
1893
|
+
programClasses = signal([], ...(ngDevMode ? [{ debugName: "programClasses" }] : []));
|
|
1894
|
+
selectedProgramClassId = signal(null, ...(ngDevMode ? [{ debugName: "selectedProgramClassId" }] : []));
|
|
1804
1895
|
// Signal for breadcrumb data that will be passed to shared wrapper
|
|
1805
1896
|
breadcrumbData = signal([], ...(ngDevMode ? [{ debugName: "breadcrumbData" }] : []));
|
|
1806
1897
|
// Template renderers
|
|
@@ -1920,7 +2011,7 @@ class CideLytClassProgramBranchListComponent {
|
|
|
1920
2011
|
striped: true,
|
|
1921
2012
|
bordered: true,
|
|
1922
2013
|
compact: false,
|
|
1923
|
-
tableClass: 'tw-table-fixed tw-w-full
|
|
2014
|
+
tableClass: 'tw-table-fixed tw-w-full',
|
|
1924
2015
|
dragDrop: {
|
|
1925
2016
|
enabled: true
|
|
1926
2017
|
},
|
|
@@ -1946,6 +2037,7 @@ class CideLytClassProgramBranchListComponent {
|
|
|
1946
2037
|
ngOnInit() {
|
|
1947
2038
|
console.log('🏢 Class Program Branch List Component initialized');
|
|
1948
2039
|
this.initializeBreadcrumbData();
|
|
2040
|
+
this.loadProgramClasses();
|
|
1949
2041
|
this.checkRouteParams();
|
|
1950
2042
|
// Load branches will be called when programId is set in checkRouteParams
|
|
1951
2043
|
}
|
|
@@ -1966,6 +2058,48 @@ class CideLytClassProgramBranchListComponent {
|
|
|
1966
2058
|
}
|
|
1967
2059
|
]);
|
|
1968
2060
|
}
|
|
2061
|
+
/**
|
|
2062
|
+
* Load program classes for dropdown
|
|
2063
|
+
*/
|
|
2064
|
+
loadProgramClasses() {
|
|
2065
|
+
const payload = {
|
|
2066
|
+
pagination: false,
|
|
2067
|
+
acacpm_isactive: true
|
|
2068
|
+
};
|
|
2069
|
+
this.programClassService.getProgramClassList(payload)
|
|
2070
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
2071
|
+
.subscribe({
|
|
2072
|
+
next: (response) => {
|
|
2073
|
+
console.log('✅ Program classes loaded:', response);
|
|
2074
|
+
if (response?.success && response.data) {
|
|
2075
|
+
this.programClasses.set(response.data);
|
|
2076
|
+
}
|
|
2077
|
+
else {
|
|
2078
|
+
console.warn('⚠️ No program class data received');
|
|
2079
|
+
this.programClasses.set([]);
|
|
2080
|
+
}
|
|
2081
|
+
},
|
|
2082
|
+
error: (error) => {
|
|
2083
|
+
console.error('❌ Error loading program classes:', error);
|
|
2084
|
+
this.programClasses.set([]);
|
|
2085
|
+
}
|
|
2086
|
+
});
|
|
2087
|
+
}
|
|
2088
|
+
/**
|
|
2089
|
+
* Handle Program Class selection change
|
|
2090
|
+
*/
|
|
2091
|
+
onProgramClassChange(programClassId) {
|
|
2092
|
+
const programId = typeof programClassId === 'string' ? programClassId : (programClassId ? String(programClassId) : null);
|
|
2093
|
+
console.log('🔄 Program Class changed:', programId);
|
|
2094
|
+
if (!programId) {
|
|
2095
|
+
// Class program is required, show error if cleared
|
|
2096
|
+
this.notificationService.warning('Class Program is required to view branches');
|
|
2097
|
+
return;
|
|
2098
|
+
}
|
|
2099
|
+
this.selectedProgramClassId.set(programId);
|
|
2100
|
+
this.programId.set(programId);
|
|
2101
|
+
this.loadBranches();
|
|
2102
|
+
}
|
|
1969
2103
|
/**
|
|
1970
2104
|
* Check route parameters for program ID
|
|
1971
2105
|
*/
|
|
@@ -1981,6 +2115,7 @@ class CideLytClassProgramBranchListComponent {
|
|
|
1981
2115
|
const programId = queryData?.programId;
|
|
1982
2116
|
if (programId) {
|
|
1983
2117
|
this.programId.set(programId);
|
|
2118
|
+
this.selectedProgramClassId.set(programId);
|
|
1984
2119
|
console.log('🏢 Program Class ID extracted from route:', programId);
|
|
1985
2120
|
console.log('🏢 Will filter branches by acabrn_class_program_id_acacpm:', programId);
|
|
1986
2121
|
this.loadBranches();
|
|
@@ -2004,15 +2139,19 @@ class CideLytClassProgramBranchListComponent {
|
|
|
2004
2139
|
const programId = queryParams['programId'];
|
|
2005
2140
|
if (programId) {
|
|
2006
2141
|
this.programId.set(programId);
|
|
2142
|
+
this.selectedProgramClassId.set(programId);
|
|
2007
2143
|
console.log('🏢 Program Class ID from query params:', programId);
|
|
2008
2144
|
console.log('🏢 Will filter branches by acabrn_class_program_id_acacpm:', programId);
|
|
2009
2145
|
this.loadBranches();
|
|
2010
2146
|
}
|
|
2011
2147
|
else {
|
|
2012
|
-
//
|
|
2013
|
-
console.log('🏢 No program class ID provided
|
|
2014
|
-
this.programId.set(null);
|
|
2015
|
-
this.
|
|
2148
|
+
// No program ID provided - class program is required
|
|
2149
|
+
console.log('🏢 No program class ID provided - class program is required');
|
|
2150
|
+
this.programId.set(null);
|
|
2151
|
+
this.selectedProgramClassId.set(null);
|
|
2152
|
+
// Don't load branches if no program ID - wait for user selection
|
|
2153
|
+
this.branches.set([]);
|
|
2154
|
+
this.updateGridData();
|
|
2016
2155
|
}
|
|
2017
2156
|
}
|
|
2018
2157
|
/**
|
|
@@ -2021,13 +2160,22 @@ class CideLytClassProgramBranchListComponent {
|
|
|
2021
2160
|
loadBranches() {
|
|
2022
2161
|
this.loading.set(true);
|
|
2023
2162
|
this.error.set(null);
|
|
2024
|
-
// Build payload with program ID
|
|
2025
|
-
const
|
|
2163
|
+
// Build payload with program ID - required field
|
|
2164
|
+
const currentProgramId = this.programId();
|
|
2165
|
+
// Class program is required, so we must have a program ID
|
|
2166
|
+
if (!currentProgramId) {
|
|
2167
|
+
this.loading.set(false);
|
|
2168
|
+
this.error.set('Class Program is required');
|
|
2169
|
+
this.branches.set([]);
|
|
2170
|
+
this.updateGridData();
|
|
2171
|
+
return;
|
|
2172
|
+
}
|
|
2173
|
+
const payload = new AcaClassPrgBranchListPayload({
|
|
2174
|
+
acabrn_class_program_id_acacpm: currentProgramId,
|
|
2026
2175
|
pagination: true,
|
|
2027
2176
|
pageIndex: 0,
|
|
2028
|
-
pageSize: 10
|
|
2029
|
-
|
|
2030
|
-
};
|
|
2177
|
+
pageSize: 10
|
|
2178
|
+
});
|
|
2031
2179
|
console.log('🏢 API Payload:', payload);
|
|
2032
2180
|
this.classProgramBranchService.getClassProgramBranchList(payload)
|
|
2033
2181
|
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
@@ -2132,17 +2280,24 @@ class CideLytClassProgramBranchListComponent {
|
|
|
2132
2280
|
/**
|
|
2133
2281
|
* Navigate to create branch
|
|
2134
2282
|
*/
|
|
2135
|
-
onCreateBranch() {
|
|
2283
|
+
onCreateBranch(event) {
|
|
2284
|
+
console.log('🏢 Create Branch button clicked', event);
|
|
2136
2285
|
const currentProgramId = this.programId();
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
|
|
2140
|
-
this.
|
|
2141
|
-
|
|
2142
|
-
else {
|
|
2143
|
-
// No program ID, navigate to create without parameters
|
|
2144
|
-
this.router.navigate(['/control-panel/program_specialization/create']);
|
|
2286
|
+
console.log('🏢 Current Program ID:', currentProgramId);
|
|
2287
|
+
if (!currentProgramId) {
|
|
2288
|
+
// Class program is required
|
|
2289
|
+
this.notificationService.warning('Please select a Class Program first before creating a branch');
|
|
2290
|
+
return;
|
|
2145
2291
|
}
|
|
2292
|
+
// Use generateStringFromObject to pass programId as route parameter
|
|
2293
|
+
const queryParams = generateStringFromObject({ programId: currentProgramId });
|
|
2294
|
+
console.log('🏢 Navigating to create with programId:', queryParams);
|
|
2295
|
+
this.router.navigate(['/control-panel/program_specialization/create', queryParams]).then((success) => {
|
|
2296
|
+
console.log('✅ Navigation successful:', success);
|
|
2297
|
+
}, (error) => {
|
|
2298
|
+
console.error('❌ Navigation failed:', error);
|
|
2299
|
+
this.notificationService.error('Failed to navigate to create branch page');
|
|
2300
|
+
});
|
|
2146
2301
|
}
|
|
2147
2302
|
/**
|
|
2148
2303
|
* Navigate to view branch
|
|
@@ -2359,18 +2514,20 @@ class CideLytClassProgramBranchListComponent {
|
|
|
2359
2514
|
});
|
|
2360
2515
|
}
|
|
2361
2516
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytClassProgramBranchListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2362
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.1.7", type: CideLytClassProgramBranchListComponent, isStandalone: true, selector: "cide-academics-class-program-branch-list", viewQueries: [{ propertyName: "dragHandleRendererTemplate", first: true, predicate: ["dragHandleRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "classProgramRendererTemplate", first: true, predicate: ["classProgramRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Class Program Branch List Component -->\
|
|
2517
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.1.7", type: CideLytClassProgramBranchListComponent, isStandalone: true, selector: "cide-academics-class-program-branch-list", viewQueries: [{ propertyName: "dragHandleRendererTemplate", first: true, predicate: ["dragHandleRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "classProgramRendererTemplate", first: true, predicate: ["classProgramRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Class Program Branch List Component -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_branch' }\"\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)=\"onCreateBranch($event)\">\n Create Branch\n </button>\n </div>\n\n <!-- Main Content -->\n <div class=\"tw-table tw-w-full tw-h-full\">\n <!-- Filter Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-items-center tw-gap-4\">\n <div class=\"tw-w-64\">\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Class Program *</label>\n <cide-ele-select\n [options]=\"programClasses()\"\n [ngModel]=\"selectedProgramClassId() || ''\"\n (ngModelChange)=\"onProgramClassChange($event)\"\n placeholder=\"Select Class Program\"\n valueKey=\"_id\"\n labelKey=\"acacpm_alise_title\"\n [required]=\"true\">\n </cide-ele-select>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Data Grid Section -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell 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 </div>\n</cide-lyt-shared-wrapper>\n\n<!-- Template Renderers -->\n<ng-template #dragHandleRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-justify-center tw-cursor-move drag-handle\" title=\"Drag to reorder\">\n <cide-ele-icon name=\"drag_indicator\" class=\"tw-w-4 tw-h-4 tw-text-gray-400 hover:tw-text-gray-600\"></cide-ele-icon>\n </div>\n</ng-template>\n\n\n<ng-template #classProgramRendererTemplate let-row=\"row\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n {{ row.acabrn_class_program_id_acacpm?.acacpm_alise_title || 'N/A' }}\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\n <div class=\"tw-relative tw-inline-block\">\n <cide-ele-dropdown \n [items]=\"getBranchActionDropdownItems(row)\" \n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n </div>\n</ng-template>\n\n", styles: [".drag-handle{cursor:move}.drag-handle:hover{background-color:#0000000d;border-radius:4px}.tw-table tbody tr{cursor:pointer}.tw-table tbody tr:hover{background-color:#00000005}.tw-table tbody tr.selected{background-color:#3b82f61a}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton], cide-ele-button", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "component", type: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey"], outputs: ["ngModelChange", "change", "searchChange"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
|
|
2363
2518
|
}
|
|
2364
2519
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytClassProgramBranchListComponent, decorators: [{
|
|
2365
2520
|
type: Component,
|
|
2366
2521
|
args: [{ selector: 'cide-academics-class-program-branch-list', standalone: true, imports: [
|
|
2367
2522
|
CommonModule,
|
|
2523
|
+
FormsModule,
|
|
2368
2524
|
CideEleDataGridComponent,
|
|
2369
2525
|
CideIconComponent,
|
|
2370
2526
|
CideEleButtonComponent,
|
|
2371
2527
|
CideEleDropdownComponent,
|
|
2528
|
+
CideSelectComponent,
|
|
2372
2529
|
CideLytSharedWrapperComponent
|
|
2373
|
-
], template: "<!-- Class Program Branch List Component -->\
|
|
2530
|
+
], template: "<!-- Class Program Branch List Component -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_branch' }\"\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)=\"onCreateBranch($event)\">\n Create Branch\n </button>\n </div>\n\n <!-- Main Content -->\n <div class=\"tw-table tw-w-full tw-h-full\">\n <!-- Filter Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-items-center tw-gap-4\">\n <div class=\"tw-w-64\">\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Class Program *</label>\n <cide-ele-select\n [options]=\"programClasses()\"\n [ngModel]=\"selectedProgramClassId() || ''\"\n (ngModelChange)=\"onProgramClassChange($event)\"\n placeholder=\"Select Class Program\"\n valueKey=\"_id\"\n labelKey=\"acacpm_alise_title\"\n [required]=\"true\">\n </cide-ele-select>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Data Grid Section -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell 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 </div>\n</cide-lyt-shared-wrapper>\n\n<!-- Template Renderers -->\n<ng-template #dragHandleRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-justify-center tw-cursor-move drag-handle\" title=\"Drag to reorder\">\n <cide-ele-icon name=\"drag_indicator\" class=\"tw-w-4 tw-h-4 tw-text-gray-400 hover:tw-text-gray-600\"></cide-ele-icon>\n </div>\n</ng-template>\n\n\n<ng-template #classProgramRendererTemplate let-row=\"row\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n {{ row.acabrn_class_program_id_acacpm?.acacpm_alise_title || 'N/A' }}\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\n <div class=\"tw-relative tw-inline-block\">\n <cide-ele-dropdown \n [items]=\"getBranchActionDropdownItems(row)\" \n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n </div>\n</ng-template>\n\n", styles: [".drag-handle{cursor:move}.drag-handle:hover{background-color:#0000000d;border-radius:4px}.tw-table tbody tr{cursor:pointer}.tw-table tbody tr:hover{background-color:#00000005}.tw-table tbody tr.selected{background-color:#3b82f61a}\n"] }]
|
|
2374
2531
|
}] });
|
|
2375
2532
|
|
|
2376
2533
|
var classProgramBranchList_component = /*#__PURE__*/Object.freeze({
|
|
@@ -2378,94 +2535,6 @@ var classProgramBranchList_component = /*#__PURE__*/Object.freeze({
|
|
|
2378
2535
|
CideLytClassProgramBranchListComponent: CideLytClassProgramBranchListComponent
|
|
2379
2536
|
});
|
|
2380
2537
|
|
|
2381
|
-
class CideLytProgramClassService {
|
|
2382
|
-
http = inject(HttpClient);
|
|
2383
|
-
/**
|
|
2384
|
-
* Get list of program classes
|
|
2385
|
-
* @param payload - Query parameters for filtering/pagination
|
|
2386
|
-
* @returns Observable of program class list response
|
|
2387
|
-
*/
|
|
2388
|
-
getProgramClassList(payload) {
|
|
2389
|
-
console.log("Program Class List Payload:", payload);
|
|
2390
|
-
const query = generateStringFromObject(payload);
|
|
2391
|
-
const url = cidePath.join([
|
|
2392
|
-
hostManagerRoutesUrl.cideSuiteHost,
|
|
2393
|
-
academicsRoutesUrl.module,
|
|
2394
|
-
academicsRoutesUrl.classProgramMaster,
|
|
2395
|
-
query
|
|
2396
|
-
]);
|
|
2397
|
-
return this.http.get(url);
|
|
2398
|
-
}
|
|
2399
|
-
/**
|
|
2400
|
-
* Get program class by ID
|
|
2401
|
-
* @param payload - Program class ID payload
|
|
2402
|
-
* @returns Observable of program class data
|
|
2403
|
-
*/
|
|
2404
|
-
getProgramClassById(payload) {
|
|
2405
|
-
const query = generateStringFromObject(payload);
|
|
2406
|
-
const url = cidePath.join([
|
|
2407
|
-
hostManagerRoutesUrl.cideSuiteHost,
|
|
2408
|
-
academicsRoutesUrl.module,
|
|
2409
|
-
academicsRoutesUrl.classProgramMaster,
|
|
2410
|
-
'byId',
|
|
2411
|
-
query
|
|
2412
|
-
]);
|
|
2413
|
-
return this.http.get(url);
|
|
2414
|
-
}
|
|
2415
|
-
/**
|
|
2416
|
-
* Create or update program class
|
|
2417
|
-
* @param data - Program class data to save
|
|
2418
|
-
* @returns Observable of the save response
|
|
2419
|
-
*/
|
|
2420
|
-
saveProgramClass(data) {
|
|
2421
|
-
const url = cidePath.join([
|
|
2422
|
-
hostManagerRoutesUrl.cideSuiteHost,
|
|
2423
|
-
academicsRoutesUrl.module,
|
|
2424
|
-
academicsRoutesUrl.classProgramMaster
|
|
2425
|
-
]);
|
|
2426
|
-
return this.http.post(url, data);
|
|
2427
|
-
}
|
|
2428
|
-
/**
|
|
2429
|
-
* Delete program class
|
|
2430
|
-
* @param payload - Program class delete payload
|
|
2431
|
-
* @returns Observable of the delete response
|
|
2432
|
-
*/
|
|
2433
|
-
deleteProgramClass(payload) {
|
|
2434
|
-
const query = generateStringFromObject(payload);
|
|
2435
|
-
const url = cidePath.join([
|
|
2436
|
-
hostManagerRoutesUrl.cideSuiteHost,
|
|
2437
|
-
academicsRoutesUrl.module,
|
|
2438
|
-
academicsRoutesUrl.classProgramMaster,
|
|
2439
|
-
query
|
|
2440
|
-
]);
|
|
2441
|
-
return this.http.delete(url);
|
|
2442
|
-
}
|
|
2443
|
-
/**
|
|
2444
|
-
* Toggle program class status (active/inactive)
|
|
2445
|
-
* @param payload - Program class toggle status payload
|
|
2446
|
-
* @returns Observable of the toggle status response
|
|
2447
|
-
*/
|
|
2448
|
-
toggleProgramClassStatus(payload) {
|
|
2449
|
-
const query = generateStringFromObject(payload);
|
|
2450
|
-
const url = cidePath.join([
|
|
2451
|
-
hostManagerRoutesUrl.cideSuiteHost,
|
|
2452
|
-
academicsRoutesUrl.module,
|
|
2453
|
-
academicsRoutesUrl.classProgramMaster,
|
|
2454
|
-
'toggleStatus',
|
|
2455
|
-
query
|
|
2456
|
-
]);
|
|
2457
|
-
return this.http.put(url, {});
|
|
2458
|
-
}
|
|
2459
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytProgramClassService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2460
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytProgramClassService, providedIn: 'root' });
|
|
2461
|
-
}
|
|
2462
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytProgramClassService, decorators: [{
|
|
2463
|
-
type: Injectable,
|
|
2464
|
-
args: [{
|
|
2465
|
-
providedIn: 'root'
|
|
2466
|
-
}]
|
|
2467
|
-
}] });
|
|
2468
|
-
|
|
2469
2538
|
class CideLytClassProgramBranchFormComponent {
|
|
2470
2539
|
// Dependency injection
|
|
2471
2540
|
destroyRef = inject(DestroyRef);
|
|
@@ -2491,6 +2560,8 @@ class CideLytClassProgramBranchFormComponent {
|
|
|
2491
2560
|
branchMasters = signal([], ...(ngDevMode ? [{ debugName: "branchMasters" }] : []));
|
|
2492
2561
|
// Signal for breadcrumb data that will be passed to shared wrapper
|
|
2493
2562
|
breadcrumbData = signal([], ...(ngDevMode ? [{ debugName: "breadcrumbData" }] : []));
|
|
2563
|
+
// Signal to control Program Class dropdown visibility
|
|
2564
|
+
showProgramClassDropdown = signal(true, ...(ngDevMode ? [{ debugName: "showProgramClassDropdown" }] : []));
|
|
2494
2565
|
// Flag to prevent auto-populate during data load
|
|
2495
2566
|
isLoadingData = false;
|
|
2496
2567
|
constructor() {
|
|
@@ -2522,6 +2593,27 @@ class CideLytClassProgramBranchFormComponent {
|
|
|
2522
2593
|
this.onBranchMasterChange(sygmsId);
|
|
2523
2594
|
}
|
|
2524
2595
|
});
|
|
2596
|
+
// Listen to Program Class field changes
|
|
2597
|
+
this.branchForm.get('acabrn_class_program_id_acacpm')?.valueChanges
|
|
2598
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
2599
|
+
.subscribe((programClassId) => {
|
|
2600
|
+
// Only trigger if not loading existing data and dropdown is visible
|
|
2601
|
+
if (programClassId && !this.isLoadingData && this.showProgramClassDropdown()) {
|
|
2602
|
+
this.onProgramClassChange(programClassId);
|
|
2603
|
+
}
|
|
2604
|
+
});
|
|
2605
|
+
}
|
|
2606
|
+
/**
|
|
2607
|
+
* Handle Program Class selection change
|
|
2608
|
+
* This can be used to filter or update dependent lists
|
|
2609
|
+
*/
|
|
2610
|
+
onProgramClassChange(programClassId) {
|
|
2611
|
+
if (!programClassId) {
|
|
2612
|
+
return;
|
|
2613
|
+
}
|
|
2614
|
+
console.log('🔄 Program Class changed:', programClassId);
|
|
2615
|
+
// Add any logic here to update dependent lists based on Program Class selection
|
|
2616
|
+
// For example, you could filter branch masters or load additional data
|
|
2525
2617
|
}
|
|
2526
2618
|
ngOnDestroy() {
|
|
2527
2619
|
console.log('🏢 Class Program Branch Form Component destroyed');
|
|
@@ -2541,19 +2633,29 @@ class CideLytClassProgramBranchFormComponent {
|
|
|
2541
2633
|
const queryParams = this.route.snapshot.queryParams;
|
|
2542
2634
|
const routeParams = this.route.snapshot.params;
|
|
2543
2635
|
// Check for program ID from route parameters or query parameters
|
|
2544
|
-
|
|
2545
|
-
|
|
2636
|
+
let programId = null;
|
|
2637
|
+
// Check route parameters for programId or acacpm_id (for create operations)
|
|
2546
2638
|
if (routeParams['query']) {
|
|
2547
2639
|
const params = generateObjectFromString(routeParams['query']);
|
|
2548
2640
|
console.log('🏢 Params:generateObjectFromString', params);
|
|
2549
|
-
programId = params?.programId;
|
|
2641
|
+
programId = params?.programId || params?.acacpm_id || null;
|
|
2642
|
+
}
|
|
2643
|
+
// Also check queryParams for programId or acacpm_id
|
|
2644
|
+
if (!programId) {
|
|
2645
|
+
programId = queryParams['programId'] || queryParams['acacpm_id'] || null;
|
|
2550
2646
|
}
|
|
2551
2647
|
if (programId) {
|
|
2552
|
-
console.log('🏢 Program ID from
|
|
2553
|
-
//
|
|
2648
|
+
console.log('🏢 Program Class Management ID from URL:', programId);
|
|
2649
|
+
// Hide the dropdown and set the value
|
|
2650
|
+
this.showProgramClassDropdown.set(false);
|
|
2554
2651
|
this.branchForm.patchValue({
|
|
2555
2652
|
acabrn_class_program_id_acacpm: programId
|
|
2556
2653
|
});
|
|
2654
|
+
// Keep the field enabled so it's included in form.value, but it will be hidden
|
|
2655
|
+
}
|
|
2656
|
+
else {
|
|
2657
|
+
// Show the dropdown if no ID from URL
|
|
2658
|
+
this.showProgramClassDropdown.set(true);
|
|
2557
2659
|
}
|
|
2558
2660
|
if (url.includes('/view/')) {
|
|
2559
2661
|
this.isViewMode.set(true);
|
|
@@ -2724,12 +2826,27 @@ class CideLytClassProgramBranchFormComponent {
|
|
|
2724
2826
|
next: (response) => {
|
|
2725
2827
|
if (response?.success && response.data) {
|
|
2726
2828
|
const branchData = response.data;
|
|
2829
|
+
// Check if program class ID is in URL - if so, hide dropdown
|
|
2830
|
+
const routeParams = this.route.snapshot.params;
|
|
2831
|
+
const queryParams = this.route.snapshot.queryParams;
|
|
2832
|
+
let programIdFromUrl = null;
|
|
2833
|
+
if (routeParams['query']) {
|
|
2834
|
+
const params = generateObjectFromString(routeParams['query']);
|
|
2835
|
+
programIdFromUrl = params?.programId || params?.acacpm_id || null;
|
|
2836
|
+
}
|
|
2837
|
+
if (!programIdFromUrl) {
|
|
2838
|
+
programIdFromUrl = queryParams['programId'] || queryParams['acacpm_id'] || null;
|
|
2839
|
+
}
|
|
2840
|
+
if (programIdFromUrl) {
|
|
2841
|
+
this.showProgramClassDropdown.set(false);
|
|
2842
|
+
// Keep the field enabled so it's included in form.value
|
|
2843
|
+
}
|
|
2727
2844
|
// Populate form with branch data
|
|
2728
2845
|
this.branchForm.patchValue({
|
|
2729
2846
|
acabrn_name: branchData.acabrn_name,
|
|
2730
2847
|
acabrn_code: branchData.acabrn_code,
|
|
2731
2848
|
acabrn_sequence: branchData.acabrn_sequence,
|
|
2732
|
-
acabrn_class_program_id_acacpm: branchData.acabrn_class_program_id_acacpm?._id,
|
|
2849
|
+
acabrn_class_program_id_acacpm: branchData.acabrn_class_program_id_acacpm?._id || branchData.acabrn_class_program_id_acacpm,
|
|
2733
2850
|
acabrn_branch_id_sygms: branchData.acabrn_branch_id_sygms?._id || branchData.acabrn_branch_id_sygms || '',
|
|
2734
2851
|
acabrn_isactive: (branchData).acabrn_isactive,
|
|
2735
2852
|
acabrn_islocked: branchData.acabrn_islocked
|
|
@@ -2930,7 +3047,7 @@ class CideLytClassProgramBranchFormComponent {
|
|
|
2930
3047
|
this.breadcrumbData.set(additionalItems);
|
|
2931
3048
|
}
|
|
2932
3049
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytClassProgramBranchFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2933
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideLytClassProgramBranchFormComponent, isStandalone: true, selector: "cide-academics-class-program-branch-form", ngImport: i0, template: "<!-- \
|
|
3050
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideLytClassProgramBranchFormComponent, isStandalone: true, selector: "cide-academics-class-program-branch-form", ngImport: i0, template: "<!-- \n CLASS PROGRAM BRANCH FORM COMPONENT\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_branch' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n <div class=\"tw-w-full tw-h-full\">\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"branchForm\"\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Form Content -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mb-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\"\n class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n\n <!-- Basic Branch Information -->\n <div class=\"tw-space-y-6\">\n <!-- Class Program Selection -->\n @if (showProgramClassDropdown()) {\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-1 tw-gap-6\">\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Class Program *</label>\n <cide-ele-select formControlName=\"acabrn_class_program_id_acacpm\" placeholder=\"Select class program\"\n [disabled]=\"isViewMode()\" valueKey=\"_id\" labelKey=\"acacpm_alise_title\" [options]=\"programClasses()\">\n </cide-ele-select>\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-mr-1\"></cide-ele-icon>\n Sequence will be automatically assigned based on the order in the listing\n </p>\n </div>\n </div>\n }\n\n <!-- Standard Branch Name (SYGMS) -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-1 tw-gap-6\">\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Standard Branch Name</label>\n <cide-ele-select formControlName=\"acabrn_branch_id_sygms\" placeholder=\"Select standard branch name\"\n [disabled]=\"isViewMode()\" valueKey=\"_id\" labelKey=\"sygms_title\" [options]=\"branchMasters()\">\n </cide-ele-select>\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-mr-1\"></cide-ele-icon>\n Selecting a standard branch will auto-populate the branch name and code\n </p>\n </div>\n </div>\n\n <!-- Branch Name and Code -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div>\n <cide-ele-input label=\"Branch Name *\" formControlName=\"acabrn_name\"\n placeholder=\"e.g., Computer Science Branch\" size=\"md\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-input label=\"Branch Code *\" formControlName=\"acabrn_code\" placeholder=\"e.g., CS\" size=\"md\"\n leadingIcon=\"code\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Status and Lock Options -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n [class.tw-cursor-not-allowed]=\"isViewMode()\" [class.tw-opacity-60]=\"isViewMode()\"\n (click)=\"onActiveCardClick()\">\n <cide-ele-input formControlName=\"acabrn_isactive\" type=\"checkbox\" size=\"md\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this branch</span>\n </div>\n </div>\n\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n [class.tw-cursor-not-allowed]=\"isViewMode()\" [class.tw-opacity-60]=\"isViewMode()\"\n (click)=\"onLockedCardClick()\">\n <cide-ele-input formControlName=\"acabrn_islocked\" type=\"checkbox\" size=\"md\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"onCancel()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n {{ isViewMode() ? 'Close' : 'Cancel' }}\n </button>\n\n @if (!isViewMode()) {\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || branchForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ submitButtonText }}\n </button>\n }\n </div>\n </div>\n </div>\n </form>\n </div>\n</cide-lyt-shared-wrapper>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CideInputComponent, selector: "cide-ele-input", inputs: ["fill", "label", "labelHide", "disabled", "clearInput", "labelPlacement", "labelDir", "placeholder", "leadingIcon", "trailingIcon", "helperText", "helperTextCollapse", "hideHelperAndErrorText", "errorText", "maxlength", "minlength", "required", "autocapitalize", "autocomplete", "type", "width", "id", "ngModel", "option", "min", "max", "size"], outputs: ["ngModelChange"] }, { kind: "component", type: 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: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey"], outputs: ["ngModelChange", "change", "searchChange"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
|
|
2934
3051
|
}
|
|
2935
3052
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytClassProgramBranchFormComponent, decorators: [{
|
|
2936
3053
|
type: Component,
|
|
@@ -2942,7 +3059,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
2942
3059
|
CideIconComponent,
|
|
2943
3060
|
CideSelectComponent,
|
|
2944
3061
|
CideLytSharedWrapperComponent,
|
|
2945
|
-
], template: "<!-- \
|
|
3062
|
+
], template: "<!-- \n CLASS PROGRAM BRANCH FORM COMPONENT\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_branch' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n <div class=\"tw-w-full tw-h-full\">\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"branchForm\"\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Form Content -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mb-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\"\n class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n\n <!-- Basic Branch Information -->\n <div class=\"tw-space-y-6\">\n <!-- Class Program Selection -->\n @if (showProgramClassDropdown()) {\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-1 tw-gap-6\">\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Class Program *</label>\n <cide-ele-select formControlName=\"acabrn_class_program_id_acacpm\" placeholder=\"Select class program\"\n [disabled]=\"isViewMode()\" valueKey=\"_id\" labelKey=\"acacpm_alise_title\" [options]=\"programClasses()\">\n </cide-ele-select>\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-mr-1\"></cide-ele-icon>\n Sequence will be automatically assigned based on the order in the listing\n </p>\n </div>\n </div>\n }\n\n <!-- Standard Branch Name (SYGMS) -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-1 tw-gap-6\">\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Standard Branch Name</label>\n <cide-ele-select formControlName=\"acabrn_branch_id_sygms\" placeholder=\"Select standard branch name\"\n [disabled]=\"isViewMode()\" valueKey=\"_id\" labelKey=\"sygms_title\" [options]=\"branchMasters()\">\n </cide-ele-select>\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-mr-1\"></cide-ele-icon>\n Selecting a standard branch will auto-populate the branch name and code\n </p>\n </div>\n </div>\n\n <!-- Branch Name and Code -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div>\n <cide-ele-input label=\"Branch Name *\" formControlName=\"acabrn_name\"\n placeholder=\"e.g., Computer Science Branch\" size=\"md\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-input label=\"Branch Code *\" formControlName=\"acabrn_code\" placeholder=\"e.g., CS\" size=\"md\"\n leadingIcon=\"code\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Status and Lock Options -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n [class.tw-cursor-not-allowed]=\"isViewMode()\" [class.tw-opacity-60]=\"isViewMode()\"\n (click)=\"onActiveCardClick()\">\n <cide-ele-input formControlName=\"acabrn_isactive\" type=\"checkbox\" size=\"md\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this branch</span>\n </div>\n </div>\n\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n [class.tw-cursor-not-allowed]=\"isViewMode()\" [class.tw-opacity-60]=\"isViewMode()\"\n (click)=\"onLockedCardClick()\">\n <cide-ele-input formControlName=\"acabrn_islocked\" type=\"checkbox\" size=\"md\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"onCancel()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n {{ isViewMode() ? 'Close' : 'Cancel' }}\n </button>\n\n @if (!isViewMode()) {\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || branchForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ submitButtonText }}\n </button>\n }\n </div>\n </div>\n </div>\n </form>\n </div>\n</cide-lyt-shared-wrapper>" }]
|
|
2946
3063
|
}], ctorParameters: () => [] });
|
|
2947
3064
|
|
|
2948
3065
|
var classProgramBranchForm_component = /*#__PURE__*/Object.freeze({
|
|
@@ -2963,4 +3080,4 @@ var classProgramBranchForm_component = /*#__PURE__*/Object.freeze({
|
|
|
2963
3080
|
*/
|
|
2964
3081
|
|
|
2965
3082
|
export { AcademicYearCreateComponent as A, CideLytProgramClassService as C, CideLytAcademicYearService as a, CideLytClassProgramBranchService as b, academicsRoutes as c, AcademicYearListComponent as d, CideLytAcademicYearMappingService as e, CideLytClassProgramBranchListComponent as f, CideLytClassProgramBranchFormComponent as g };
|
|
2966
|
-
//# sourceMappingURL=cloud-ide-academics-cloud-ide-academics-
|
|
3083
|
+
//# sourceMappingURL=cloud-ide-academics-cloud-ide-academics-SBTPvNBh.mjs.map
|