cloud-ide-academics 0.0.9 → 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.
@@ -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-B4-1_XST.mjs').then(c => c.ProgramClassListComponent),
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-B97IgzP1.mjs').then(c => c.ProgramClassCreateComponent),
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-B97IgzP1.mjs').then(c => c.ProgramClassCreateComponent),
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-B97IgzP1.mjs').then(c => c.ProgramClassCreateComponent),
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-DKn6Q38-.mjs').then(c => c.ClassProgramTermCreateComponent),
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-DKn6Q38-.mjs').then(c => c.ClassProgramTermCreateComponent),
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-DKn6Q38-.mjs').then(c => c.ClassProgramTermCreateComponent),
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 tw-rounded-lg',
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
  }
@@ -1953,6 +2045,10 @@ class CideLytClassProgramBranchListComponent {
1953
2045
  * Initialize breadcrumb data for list view
1954
2046
  */
1955
2047
  initializeBreadcrumbData() {
2048
+ // The shared wrapper will automatically add:
2049
+ // 1. Module (Academics) from app state
2050
+ // 2. Current page (Class Program Branch Management) from page config
2051
+ // We can add additional items here if needed
1956
2052
  this.breadcrumbData.set([
1957
2053
  {
1958
2054
  id: 'list',
@@ -1962,6 +2058,48 @@ class CideLytClassProgramBranchListComponent {
1962
2058
  }
1963
2059
  ]);
1964
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
+ }
1965
2103
  /**
1966
2104
  * Check route parameters for program ID
1967
2105
  */
@@ -1974,11 +2112,10 @@ class CideLytClassProgramBranchListComponent {
1974
2112
  const queryData = generateObjectFromString(queryParams);
1975
2113
  console.log('🏢 Query data from route:', queryData);
1976
2114
  // Check for programId in various possible formats
1977
- const programId = queryData?.programId ||
1978
- queryData?.acacpm_id ||
1979
- queryData?.acabrn_class_program_id_acacpm;
2115
+ const programId = queryData?.programId;
1980
2116
  if (programId) {
1981
2117
  this.programId.set(programId);
2118
+ this.selectedProgramClassId.set(programId);
1982
2119
  console.log('🏢 Program Class ID extracted from route:', programId);
1983
2120
  console.log('🏢 Will filter branches by acabrn_class_program_id_acacpm:', programId);
1984
2121
  this.loadBranches();
@@ -1999,20 +2136,22 @@ class CideLytClassProgramBranchListComponent {
1999
2136
  */
2000
2137
  checkQueryParams() {
2001
2138
  const queryParams = this.route.snapshot.queryParams;
2002
- const programId = queryParams['programId'] ||
2003
- queryParams['acacpm_id'] ||
2004
- queryParams['acabrn_class_program_id_acacpm'];
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
- // Load all branches if no program ID is provided
2013
- console.log('🏢 No program class ID provided, loading all branches');
2014
- this.programId.set(null); // Clear any previous program ID
2015
- this.loadBranches();
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 filter if available
2025
- const payload = {
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
- acabrn_class_program_id_acacpm: this.programId()
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
- if (currentProgramId) {
2138
- // Use generateStringFromObject to pass programId as route parameter
2139
- const queryParams = generateStringFromObject({ programId: currentProgramId });
2140
- this.router.navigate(['/control-panel/program_specialization/create', queryParams]);
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 -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_branch' }\"\r\n [breadcrumb_data]=\"breadcrumbData()\">\r\n <div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Header Section with Actions -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">account_tree</cide-ele-icon>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Class Program Branch Management</h5>\r\n </div>\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <button cideEleButton variant=\"primary\" size=\"sm\" leftIcon=\"add\" (click)=\"onCreateBranch()\">\r\n Create Branch\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Data Grid Section -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-p-0\">\r\n <cide-ele-data-grid\r\n [config]=\"gridConfig()\"\r\n [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n</cide-lyt-shared-wrapper>\r\n\r\n<!-- Template Renderers -->\r\n<ng-template #dragHandleRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-justify-center tw-cursor-move drag-handle\" title=\"Drag to reorder\">\r\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>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<ng-template #classProgramRendererTemplate let-row=\"row\">\r\n <div class=\"tw-text-sm tw-text-gray-900\">\r\n {{ row.acabrn_class_program_id_acacpm?.acacpm_alise_title || 'N/A' }}\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\r\n <div class=\"tw-relative tw-inline-block\">\r\n <cide-ele-dropdown \r\n [items]=\"getBranchActionDropdownItems(row)\" \r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n </div>\r\n</ng-template>\r\n\r\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: "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"] }] });
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 -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_branch' }\"\r\n [breadcrumb_data]=\"breadcrumbData()\">\r\n <div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Header Section with Actions -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">account_tree</cide-ele-icon>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Class Program Branch Management</h5>\r\n </div>\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <button cideEleButton variant=\"primary\" size=\"sm\" leftIcon=\"add\" (click)=\"onCreateBranch()\">\r\n Create Branch\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Data Grid Section -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-p-0\">\r\n <cide-ele-data-grid\r\n [config]=\"gridConfig()\"\r\n [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n</cide-lyt-shared-wrapper>\r\n\r\n<!-- Template Renderers -->\r\n<ng-template #dragHandleRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-justify-center tw-cursor-move drag-handle\" title=\"Drag to reorder\">\r\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>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<ng-template #classProgramRendererTemplate let-row=\"row\">\r\n <div class=\"tw-text-sm tw-text-gray-900\">\r\n {{ row.acabrn_class_program_id_acacpm?.acacpm_alise_title || 'N/A' }}\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\r\n <div class=\"tw-relative tw-inline-block\">\r\n <cide-ele-dropdown \r\n [items]=\"getBranchActionDropdownItems(row)\" \r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n </div>\r\n</ng-template>\r\n\r\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"] }]
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
- // Also check route parameters for programId (for create operations)
2545
- let programId = {};
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 route:', programId);
2553
- // Pre-select the program in the form
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: "<!-- \r\n CLASS PROGRAM BRANCH FORM COMPONENT\r\n \r\n Enterprise-Level Styling with Tailwind CSS\r\n Features: Responsive grids, proper typography, enhanced user experience\r\n-->\r\n\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_branch' }\"\r\n [breadcrumb_data]=\"breadcrumbData()\">\r\n <div class=\"tw-w-full tw-h-full\">\r\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"branchForm\"\r\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\r\n\r\n <!-- Form Content -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\r\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mb-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\"\r\n class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Basic Branch Information -->\r\n <div class=\"tw-space-y-6\">\r\n <!-- Class Program Selection -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-1 tw-gap-6\">\r\n <div class=\"tw-space-y-2\">\r\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Class Program *</label>\r\n <cide-ele-select formControlName=\"acabrn_class_program_id_acacpm\" placeholder=\"Select class program\"\r\n [disabled]=\"isViewMode()\" valueKey=\"_id\" labelKey=\"acacpm_alise_title\" [options]=\"programClasses()\">\r\n </cide-ele-select>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">\r\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-mr-1\"></cide-ele-icon>\r\n Sequence will be automatically assigned based on the order in the listing\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <!-- Standard Branch Name (SYGMS) -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-1 tw-gap-6\">\r\n <div class=\"tw-space-y-2\">\r\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Standard Branch Name</label>\r\n <cide-ele-select formControlName=\"acabrn_branch_id_sygms\" placeholder=\"Select standard branch name\"\r\n [disabled]=\"isViewMode()\" valueKey=\"_id\" labelKey=\"sygms_title\" [options]=\"branchMasters()\">\r\n </cide-ele-select>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">\r\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-mr-1\"></cide-ele-icon>\r\n Selecting a standard branch will auto-populate the branch name and code\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <!-- Branch Name and Code -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\r\n <div>\r\n <cide-ele-input label=\"Branch Name *\" formControlName=\"acabrn_name\"\r\n placeholder=\"e.g., Computer Science Branch\" size=\"md\" [disabled]=\"isViewMode()\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <div>\r\n <cide-ele-input label=\"Branch Code *\" formControlName=\"acabrn_code\" placeholder=\"e.g., CS\" size=\"md\"\r\n leadingIcon=\"code\" [disabled]=\"isViewMode()\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Status and Lock Options -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\r\n <div\r\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\"\r\n [class.tw-cursor-not-allowed]=\"isViewMode()\" [class.tw-opacity-60]=\"isViewMode()\"\r\n (click)=\"onActiveCardClick()\">\r\n <cide-ele-input formControlName=\"acabrn_isactive\" type=\"checkbox\" size=\"md\" [disabled]=\"isViewMode()\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this branch</span>\r\n </div>\r\n </div>\r\n\r\n <div\r\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\"\r\n [class.tw-cursor-not-allowed]=\"isViewMode()\" [class.tw-opacity-60]=\"isViewMode()\"\r\n (click)=\"onLockedCardClick()\">\r\n <cide-ele-input formControlName=\"acabrn_islocked\" type=\"checkbox\" size=\"md\" [disabled]=\"isViewMode()\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-table-row tw-h-0\">\r\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\">\r\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\r\n [disabled]=\"loading()\">\r\n Reset Form\r\n </button>\r\n\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"onCancel()\" leftIcon=\"close\"\r\n [disabled]=\"loading()\">\r\n {{ isViewMode() ? 'Close' : 'Cancel' }}\r\n </button>\r\n\r\n @if (!isViewMode()) {\r\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || branchForm.invalid\"\r\n [loading]=\"loading()\" leftIcon=\"save\">\r\n {{ submitButtonText }}\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\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"] }] });
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: "<!-- \r\n CLASS PROGRAM BRANCH FORM COMPONENT\r\n \r\n Enterprise-Level Styling with Tailwind CSS\r\n Features: Responsive grids, proper typography, enhanced user experience\r\n-->\r\n\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_branch' }\"\r\n [breadcrumb_data]=\"breadcrumbData()\">\r\n <div class=\"tw-w-full tw-h-full\">\r\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"branchForm\"\r\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\r\n\r\n <!-- Form Content -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\r\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mb-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\"\r\n class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Basic Branch Information -->\r\n <div class=\"tw-space-y-6\">\r\n <!-- Class Program Selection -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-1 tw-gap-6\">\r\n <div class=\"tw-space-y-2\">\r\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Class Program *</label>\r\n <cide-ele-select formControlName=\"acabrn_class_program_id_acacpm\" placeholder=\"Select class program\"\r\n [disabled]=\"isViewMode()\" valueKey=\"_id\" labelKey=\"acacpm_alise_title\" [options]=\"programClasses()\">\r\n </cide-ele-select>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">\r\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-mr-1\"></cide-ele-icon>\r\n Sequence will be automatically assigned based on the order in the listing\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <!-- Standard Branch Name (SYGMS) -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-1 tw-gap-6\">\r\n <div class=\"tw-space-y-2\">\r\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Standard Branch Name</label>\r\n <cide-ele-select formControlName=\"acabrn_branch_id_sygms\" placeholder=\"Select standard branch name\"\r\n [disabled]=\"isViewMode()\" valueKey=\"_id\" labelKey=\"sygms_title\" [options]=\"branchMasters()\">\r\n </cide-ele-select>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">\r\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-mr-1\"></cide-ele-icon>\r\n Selecting a standard branch will auto-populate the branch name and code\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <!-- Branch Name and Code -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\r\n <div>\r\n <cide-ele-input label=\"Branch Name *\" formControlName=\"acabrn_name\"\r\n placeholder=\"e.g., Computer Science Branch\" size=\"md\" [disabled]=\"isViewMode()\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <div>\r\n <cide-ele-input label=\"Branch Code *\" formControlName=\"acabrn_code\" placeholder=\"e.g., CS\" size=\"md\"\r\n leadingIcon=\"code\" [disabled]=\"isViewMode()\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Status and Lock Options -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\r\n <div\r\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\"\r\n [class.tw-cursor-not-allowed]=\"isViewMode()\" [class.tw-opacity-60]=\"isViewMode()\"\r\n (click)=\"onActiveCardClick()\">\r\n <cide-ele-input formControlName=\"acabrn_isactive\" type=\"checkbox\" size=\"md\" [disabled]=\"isViewMode()\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this branch</span>\r\n </div>\r\n </div>\r\n\r\n <div\r\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\"\r\n [class.tw-cursor-not-allowed]=\"isViewMode()\" [class.tw-opacity-60]=\"isViewMode()\"\r\n (click)=\"onLockedCardClick()\">\r\n <cide-ele-input formControlName=\"acabrn_islocked\" type=\"checkbox\" size=\"md\" [disabled]=\"isViewMode()\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-table-row tw-h-0\">\r\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\">\r\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\r\n [disabled]=\"loading()\">\r\n Reset Form\r\n </button>\r\n\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"onCancel()\" leftIcon=\"close\"\r\n [disabled]=\"loading()\">\r\n {{ isViewMode() ? 'Close' : 'Cancel' }}\r\n </button>\r\n\r\n @if (!isViewMode()) {\r\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || branchForm.invalid\"\r\n [loading]=\"loading()\" leftIcon=\"save\">\r\n {{ submitButtonText }}\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n</cide-lyt-shared-wrapper>" }]
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-Cw2APcQg.mjs.map
3083
+ //# sourceMappingURL=cloud-ide-academics-cloud-ide-academics-SBTPvNBh.mjs.map