cloud-ide-core 2.0.73 → 2.0.75

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/index.d.ts CHANGED
@@ -3,12 +3,12 @@ import * as _angular_core from '@angular/core';
3
3
  import { TemplateRef, OnInit, AfterViewInit, OnDestroy } from '@angular/core';
4
4
  import * as _angular_forms from '@angular/forms';
5
5
  import { FormGroup, FormArray } from '@angular/forms';
6
- import { ICoreSyme, ICoreSygms, MMenuListPayload, menuListControllerResponse, menuByIdControllerResponse, menuDeleteControllerResponse, MMenuChangeSequencePayload, menuChangeSequenceControllerResponse, ICoreSydept, MDepartment, departmentControllerResponse, departmentByIdControllerResponse, departmentDeleteControllerResponse, MDepartmentToggleStatusPayload, departmentToggleStatusControllerResponse, ICoreSydsg, ICoreSydsgl, MDesignation, designationControllerResponse, designationInsertUpdateControllerResponse, designationByIdControllerResponse, designationDeleteControllerResponse, designationToggleStatusControllerResponse, MGradeLevel, gradeLevelControllerResponse, MGradeLevelGetByIdPayload, gradeLevelByIdControllerResponse, gradeLevelDeleteControllerResponse, gradeLevelToggleStatusControllerResponse, MGradeLevelChangeSequencePayload, gradeLevelChangeSequenceControllerResponse, ICoreSypg, ICoreSytm, ICoreSythDrawer, ICoreSype, MSystemPages, systemPagesControllerResponse, MSystemPagesInsertUpdatePayload, systemPagesInsertUpdateControllerResponse, systemPagesByIdControllerResponse, systemPagesDeleteControllerResponse, MSystemPagesToggleStatusPayload, systemPagesToggleStatusControllerResponse, MSystemPagesCheckCodeExistsPayload, systemPagesCheckCodeExistsControllerResponse, MSystemPagesTheme, systemPagesThemeControllerResponse, MSystemPagesThemeInsertUpdatePayload, systemPagesThemeInsertUpdateControllerResponse, systemPagesThemeByIdControllerResponse, systemPagesThemeByPageIdControllerResponse, systemPagesThemeDeleteControllerResponse, MSystemPagesThemeToggleStatusPayload, systemPagesThemeToggleStatusControllerResponse, MPageElements, pageElementsControllerResponse, MPageElementsInsertUpdatePayload, pageElementsInsertUpdateControllerResponse, pageElementsByIdControllerResponse, pageElementsByPageIdControllerResponse, pageElementsMappingByPageIdControllerResponse, MPageElementsMappingInsertUpdatePayload, pageElementsMappingInsertUpdateControllerResponse, pageElementsMappingDeleteControllerResponse, pageElementsDeleteControllerResponse, MPageElementsToggleStatusPayload, pageElementsToggleStatusControllerResponse, AuthUserCoreUserContactAddresses, AuthUserCoreUserDocuments, AuthUserCoreUserFamilyDetails, AuthUserCoreEntityMapping, CoreUserRoleExceptions, AuthUserMst, selectSearchType, CoreSystemEntityListResponse, CoreUserRoleResponse, pinCodeSelectResponseData, ICoreSyctr, inputType, AuthUserMstListPayload, authUserMstListControllerResponse, MUserRole, userRoleControllerResponse, MUserRoleGetByIdPayload, userRoleByIdControllerResponse, MUserRoleWithRightsPayload, userRoleInsertUpdateControllerResponse, MUserRoleDeletePayload, userRoleDeleteControllerResponse, MUserRoleToggleStatusPayload, userRoleToggleStatusControllerResponse, CoreSystemEntitySaveUpdatePayload, entityControllerResponse, entityByIdControllerResponse, MEntity, ICoreSygmt, MGeneralMasterType, generalMasterTypeListControllerResponse, generalMasterTypeInsertUpdateControllerResponse, generalMasterTypeByIdControllerResponse, generalMasterTypeDeleteControllerResponse, MGeneralMasterTypeToggleStatusPayload, generalMasterTypeToggleStatusControllerResponse, IGeneralMasterListRequest, generalMasterListControllerResponse, generalMasterInsertUpdateControllerResponse, generalMasterByIdControllerResponse, generalMasterDeleteControllerResponse, generalMasterToggleStatusControllerResponse, MPinCodeSelect, pinCodeSelectControllerResponse, MSyctrList, countryListControllerResponse, CoreNationalityListPayload, nationalityListControllerResponse, MClassProgramMaster, classProgramMasterControllerResponse } from 'cloud-ide-lms-model';
6
+ import { ICoreSyme, ICoreSygms, ICoreSypg, MMenuListPayload, menuListControllerResponse, menuByIdControllerResponse, menuDeleteControllerResponse, MMenuChangeSequencePayload, menuChangeSequenceControllerResponse, ICoreSydept, MDepartment, departmentControllerResponse, departmentByIdControllerResponse, departmentDeleteControllerResponse, MDepartmentToggleStatusPayload, departmentToggleStatusControllerResponse, ICoreSydsg, ICoreSydsgl, MDesignation, designationControllerResponse, designationInsertUpdateControllerResponse, designationByIdControllerResponse, designationDeleteControllerResponse, designationToggleStatusControllerResponse, MGradeLevel, gradeLevelControllerResponse, MGradeLevelGetByIdPayload, gradeLevelByIdControllerResponse, gradeLevelDeleteControllerResponse, gradeLevelToggleStatusControllerResponse, MGradeLevelChangeSequencePayload, gradeLevelChangeSequenceControllerResponse, ICoreSytm, ICoreSythDrawer, ICoreSype, MSystemPages, systemPagesControllerResponse, MSystemPagesInsertUpdatePayload, systemPagesInsertUpdateControllerResponse, systemPagesByIdControllerResponse, systemPagesDeleteControllerResponse, MSystemPagesToggleStatusPayload, systemPagesToggleStatusControllerResponse, MSystemPagesCheckCodeExistsPayload, systemPagesCheckCodeExistsControllerResponse, MSystemPagesTheme, systemPagesThemeControllerResponse, MSystemPagesThemeInsertUpdatePayload, systemPagesThemeInsertUpdateControllerResponse, systemPagesThemeByIdControllerResponse, systemPagesThemeByPageIdControllerResponse, systemPagesThemeDeleteControllerResponse, MSystemPagesThemeToggleStatusPayload, systemPagesThemeToggleStatusControllerResponse, MPageElements, pageElementsControllerResponse, MPageElementsInsertUpdatePayload, pageElementsInsertUpdateControllerResponse, pageElementsByIdControllerResponse, pageElementsByPageIdControllerResponse, pageElementsMappingByPageIdControllerResponse, MPageElementsMappingInsertUpdatePayload, pageElementsMappingInsertUpdateControllerResponse, pageElementsMappingDeleteControllerResponse, pageElementsDeleteControllerResponse, MPageElementsToggleStatusPayload, pageElementsToggleStatusControllerResponse, AuthUserCoreUserContactAddresses, AuthUserCoreUserDocuments, AuthUserCoreUserFamilyDetails, AuthUserCoreEntityMapping, CoreUserRoleExceptions, AuthUserMst, selectSearchType, CoreSystemEntityListResponse, CoreUserRoleResponse, pinCodeSelectResponseData, ICoreSyctr, inputType, AuthUserMstListPayload, authUserMstListControllerResponse, MUserRole, userRoleControllerResponse, MUserRoleGetByIdPayload, userRoleByIdControllerResponse, MUserRoleWithRightsPayload, userRoleInsertUpdateControllerResponse, MUserRoleDeletePayload, userRoleDeleteControllerResponse, MUserRoleToggleStatusPayload, userRoleToggleStatusControllerResponse, CoreSystemEntitySaveUpdatePayload, entityControllerResponse, entityByIdControllerResponse, MEntity, ICoreSygmt, MGeneralMasterType, generalMasterTypeListControllerResponse, generalMasterTypeInsertUpdateControllerResponse, generalMasterTypeByIdControllerResponse, generalMasterTypeDeleteControllerResponse, MGeneralMasterTypeToggleStatusPayload, generalMasterTypeToggleStatusControllerResponse, IGeneralMasterListRequest, generalMasterListControllerResponse, generalMasterInsertUpdateControllerResponse, generalMasterByIdControllerResponse, generalMasterDeleteControllerResponse, generalMasterToggleStatusControllerResponse, MPinCodeSelect, pinCodeSelectControllerResponse, MSyctrList, countryListControllerResponse, CoreNationalityListPayload, nationalityListControllerResponse, MClassProgramMaster, classProgramMasterControllerResponse, MSycrList, currencyListControllerResponse } from 'cloud-ide-lms-model';
7
7
  import { TemplateContext, GridConfiguration, GridEvent, DropdownItem, FileUploadData, TabItem, mongooseObjectIdCreateControllerResponse, CideEleDataGridComponent, DropdownConfig } from 'cloud-ide-element';
8
8
  import { HttpClient } from '@angular/common/http';
9
9
  import { Observable } from 'rxjs';
10
10
  import { AppStateHelperService } from 'cloud-ide-layout';
11
- import { IClassProgramMasterService } from 'cloud-ide-shared';
11
+ import { IClassProgramMasterService, ICurrencyService } from 'cloud-ide-shared';
12
12
 
13
13
  declare const coreRoutes: Route[];
14
14
 
@@ -28,6 +28,7 @@ declare class MenuListComponent {
28
28
  private menuService;
29
29
  private generalMasterService;
30
30
  private generalMasterTypeService;
31
+ private pageService;
31
32
  private notificationService;
32
33
  private fb;
33
34
  private router;
@@ -41,6 +42,8 @@ declare class MenuListComponent {
41
42
  error: _angular_core.WritableSignal<string | null>;
42
43
  selectedItems: _angular_core.WritableSignal<string[]>;
43
44
  permissions: _angular_core.WritableSignal<ICoreSygms[]>;
45
+ pages: _angular_core.WritableSignal<ICoreSypg[]>;
46
+ pagesLoading: _angular_core.WritableSignal<boolean>;
44
47
  userRightsTypeId: _angular_core.WritableSignal<string | null>;
45
48
  searchTerm: _angular_core.WritableSignal<string>;
46
49
  selectedParentItem: _angular_core.WritableSignal<ICoreSyme | null>;
@@ -62,6 +65,7 @@ declare class MenuListComponent {
62
65
  syme_isactive: _angular_forms.FormControl<boolean>;
63
66
  syme_order_by: _angular_forms.FormControl<number>;
64
67
  syme_permissions_id_sygms: _angular_forms.FormControl<string[]>;
68
+ syme_pages_id_sypg: _angular_forms.FormControl<string[]>;
65
69
  }>;
66
70
  menuTypeOptions: _angular_core.Signal<{
67
71
  value: string;
@@ -71,6 +75,10 @@ declare class MenuListComponent {
71
75
  value: string;
72
76
  label: string;
73
77
  }[]>;
78
+ pageOptions: _angular_core.Signal<{
79
+ value: string;
80
+ label: string;
81
+ }[]>;
74
82
  gridConfig: _angular_core.WritableSignal<GridConfiguration<ICoreSyme>>;
75
83
  templateRenderers: _angular_core.Signal<Record<string, TemplateRef<TemplateContext<ICoreSyme>>>>;
76
84
  /**
@@ -125,6 +133,10 @@ declare class MenuListComponent {
125
133
  * Load menu items from service
126
134
  */
127
135
  loadMenuItems(): void;
136
+ /**
137
+ * Load pages from service
138
+ */
139
+ loadPages(): void;
128
140
  /**
129
141
  * Handle click outside dropdown
130
142
  */
@@ -3391,6 +3403,8 @@ declare class CideCoreGeneralMasterTypeComponent implements OnInit {
3391
3403
  private typeService;
3392
3404
  private fb;
3393
3405
  private router;
3406
+ private confirmationService;
3407
+ private notificationService;
3394
3408
  typeDetailsRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<Record<string, unknown>>>>;
3395
3409
  typeStatusRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<Record<string, unknown>>>>;
3396
3410
  actionsDropdownRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<Record<string, unknown>>>>;
@@ -3626,6 +3640,10 @@ declare class CideCoreGeneralMasterComponent implements OnInit {
3626
3640
  * Edit master
3627
3641
  */
3628
3642
  editMaster(master: ICoreSygms): void;
3643
+ /**
3644
+ * Copy master - opens form with same data for creating a new record
3645
+ */
3646
+ copyMaster(master: ICoreSygms): void;
3629
3647
  /**
3630
3648
  * Delete master
3631
3649
  */
@@ -3949,5 +3967,21 @@ declare class CideCoreClassProgramMasterService implements IClassProgramMasterSe
3949
3967
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<CideCoreClassProgramMasterService>;
3950
3968
  }
3951
3969
 
3952
- export { CideCoreClassProgramMasterService, CideCoreCountryService, CideCoreDepartmentListComponent, CideCoreDepartmentManagementService, CideCoreDesignationListComponent, CideCoreDesignationManagementService, CideCoreEntityCreateComponent, CideCoreEntityListComponent, CideCoreEntityManagementService, CideCoreGeneralMasterComponent, CideCoreGeneralMasterService, CideCoreGeneralMasterTypeComponent, CideCoreGeneralMasterTypeService, CideCoreGradeLevelListComponent, CideCoreGradeLevelManagementService, CideCoreNationalityService, CideCoreOrgStructureComponent, CideCorePageControlsComponent, CideCorePageControlsService, CideCorePageListComponent, CideCorePageManagementService, CideCorePageThemeComponent, CideCorePageThemeService, CideCorePinCodeService, CideCoreRoleSelectService, CideCoreUserAttributesComponent, CideCoreUserContactAddressesComponent, CideCoreUserCreateComponent, CideCoreUserDocumentsComponent, CideCoreUserEntityAccessComponent, CideCoreUserFamilyDetailsComponent, CideCoreUserListComponent, CideCoreUserMasterService, CideCoreUserRoleFormComponent, CideCoreUserRoleListComponent, CideCoreUserRoleService, CloudIdeCoreComponent, CloudIdeCoreService, MenuListComponent, MenuManagementService, coreRoutes };
3970
+ /**
3971
+ * @description Data service for currency-related operations
3972
+ * Handles API calls for retrieving currency data
3973
+ */
3974
+ declare class CideCoreCurrencyService implements ICurrencyService {
3975
+ private http;
3976
+ /**
3977
+ * Get all currencies from API
3978
+ * @param body - MSycrList payload for filtering
3979
+ * @returns Observable of currency list response
3980
+ */
3981
+ getAllCurrencies(body: Partial<MSycrList>): Observable<currencyListControllerResponse>;
3982
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CideCoreCurrencyService, never>;
3983
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<CideCoreCurrencyService>;
3984
+ }
3985
+
3986
+ export { CideCoreClassProgramMasterService, CideCoreCountryService, CideCoreCurrencyService, CideCoreDepartmentListComponent, CideCoreDepartmentManagementService, CideCoreDesignationListComponent, CideCoreDesignationManagementService, CideCoreEntityCreateComponent, CideCoreEntityListComponent, CideCoreEntityManagementService, CideCoreGeneralMasterComponent, CideCoreGeneralMasterService, CideCoreGeneralMasterTypeComponent, CideCoreGeneralMasterTypeService, CideCoreGradeLevelListComponent, CideCoreGradeLevelManagementService, CideCoreNationalityService, CideCoreOrgStructureComponent, CideCorePageControlsComponent, CideCorePageControlsService, CideCorePageListComponent, CideCorePageManagementService, CideCorePageThemeComponent, CideCorePageThemeService, CideCorePinCodeService, CideCoreRoleSelectService, CideCoreUserAttributesComponent, CideCoreUserContactAddressesComponent, CideCoreUserCreateComponent, CideCoreUserDocumentsComponent, CideCoreUserEntityAccessComponent, CideCoreUserFamilyDetailsComponent, CideCoreUserListComponent, CideCoreUserMasterService, CideCoreUserRoleFormComponent, CideCoreUserRoleListComponent, CideCoreUserRoleService, CloudIdeCoreComponent, CloudIdeCoreService, MenuListComponent, MenuManagementService, coreRoutes };
3953
3987
  export type { ApiResponse, Entity, Menu, Permission, UserRole, UserRoleListResponse, UserRoleRight, UserRoleWithRights, UserRoleWithRightsResponse };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cloud-ide-core",
3
- "version": "2.0.73",
3
+ "version": "2.0.75",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.1.0",
6
6
  "@angular/core": "^20.1.0"
@@ -1,213 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { inject, DestroyRef, signal, computed, Component } from '@angular/core';
3
- import { CommonModule } from '@angular/common';
4
- import * as i1 from '@angular/forms';
5
- import { NonNullableFormBuilder, Validators, ReactiveFormsModule, FormsModule } from '@angular/forms';
6
- import { Router, ActivatedRoute } from '@angular/router';
7
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
8
- import { CideCorePageManagementService } from './cloud-ide-core.mjs';
9
- import { AppStateHelperService } from 'cloud-ide-layout';
10
- import { CideEleButtonComponent, CideInputComponent, CideTextareaComponent, CideEleJsonEditorComponent, CideFormFieldErrorComponent } from 'cloud-ide-element';
11
- import { generateObjectFromString } from 'cloud-ide-lms-model';
12
-
13
- class CideCorePageFormComponent {
14
- destroyRef = inject(DestroyRef);
15
- pageService = inject(CideCorePageManagementService);
16
- appState = inject(AppStateHelperService);
17
- fb = inject(NonNullableFormBuilder);
18
- router = inject(Router);
19
- route = inject(ActivatedRoute);
20
- loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
21
- error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : []));
22
- success = signal(null, ...(ngDevMode ? [{ debugName: "success" }] : []));
23
- // Page information
24
- pageId = signal(null, ...(ngDevMode ? [{ debugName: "pageId" }] : []));
25
- isEditMode = signal(false, ...(ngDevMode ? [{ debugName: "isEditMode" }] : []));
26
- pageForm = this.fb.group({
27
- sypg_title: ['', [Validators.required, Validators.maxLength(100)]],
28
- sypg_desc: ['', [Validators.maxLength(255)]],
29
- sypg_page_code: ['', [Validators.required, Validators.maxLength(40), Validators.pattern(/^[a-zA-Z0-9_]+$/)]],
30
- sypg_configuration: ['{}', [Validators.required]],
31
- sypg_isactive: [true]
32
- });
33
- constructor() {
34
- this.setupFormSubscriptions();
35
- }
36
- ngOnInit() {
37
- // Check for page ID in query parameters
38
- this.checkForPageId();
39
- }
40
- // Check for page ID in query parameters
41
- checkForPageId() {
42
- console.log('🔍 Checking for page ID in query parameters', this.route.params);
43
- this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {
44
- console.log('🔍 Query params:', params);
45
- // Check for pageId, id, or page parameter
46
- const queryParams = params['query'];
47
- const queryData = generateObjectFromString(queryParams);
48
- // If pageId is an object string (from generateStringFromObject), try to parse it
49
- const pageId = queryData.sypg_id;
50
- if (pageId) {
51
- console.log('🔍 Page ID found in query params:', pageId);
52
- this.pageId.set(pageId);
53
- this.isEditMode.set(true);
54
- this.loadPageData(pageId);
55
- }
56
- else {
57
- console.log('🆕 No page ID found - creating new page');
58
- this.isEditMode.set(false);
59
- this.pageId.set(null);
60
- }
61
- });
62
- }
63
- // Load page data for editing
64
- loadPageData(pageId) {
65
- this.loading.set(true);
66
- this.error.set(null);
67
- console.log('📥 Loading page data for ID:', pageId);
68
- this.pageService.getPageById(pageId).pipe(takeUntilDestroyed(this.destroyRef)).subscribe({
69
- next: (response) => {
70
- console.log('✅ Page data loaded:', response);
71
- if (response?.success && response?.data) {
72
- const pageData = response.data;
73
- if (pageData) {
74
- this.populateFormWithPageData(pageData);
75
- this.success.set('Page data loaded successfully');
76
- }
77
- else {
78
- this.error.set('Page data not found');
79
- console.error('❌ Page data not found in response:', response);
80
- }
81
- }
82
- else {
83
- this.error.set('Failed to load page data');
84
- console.error('❌ Page data response invalid:', response);
85
- }
86
- this.loading.set(false);
87
- },
88
- error: (err) => {
89
- console.error('❌ Failed to load page data:', err);
90
- let errorMessage = 'Failed to load page data.';
91
- if (err?.error?.message) {
92
- errorMessage = err.error.message;
93
- }
94
- else if (err?.message) {
95
- errorMessage = err.message;
96
- }
97
- else if (err?.status === 404) {
98
- errorMessage = 'Page not found.';
99
- }
100
- else if (err?.status === 500) {
101
- errorMessage = 'Server error. Please try again later.';
102
- }
103
- this.error.set(errorMessage);
104
- this.loading.set(false);
105
- }
106
- });
107
- }
108
- // Populate form with page data
109
- populateFormWithPageData(pageData) {
110
- try {
111
- console.log('📝 Populating form with page data:', pageData);
112
- const formData = {
113
- sypg_title: pageData.sypg_title || '',
114
- sypg_desc: pageData.sypg_desc || '',
115
- sypg_page_code: pageData.sypg_page_code || '',
116
- sypg_configuration: pageData.sypg_configuration ? JSON.stringify(pageData.sypg_configuration) : '{}',
117
- sypg_isactive: pageData.sypg_isactive !== undefined ? pageData.sypg_isactive : true
118
- };
119
- // Patch the form with the page data
120
- this.pageForm.patchValue(formData, { emitEvent: false });
121
- console.log('✅ Form populated successfully');
122
- }
123
- catch (error) {
124
- console.error('💥 Error populating form with page data:', error);
125
- this.error.set('Error loading page data into form');
126
- }
127
- }
128
- setupFormSubscriptions() {
129
- // Watch for form changes to enable/disable save button
130
- this.pageForm.valueChanges
131
- .pipe(takeUntilDestroyed(this.destroyRef))
132
- .subscribe(() => {
133
- // Form validation is handled by computed signals
134
- });
135
- }
136
- // Computed values
137
- isFormDirty = computed(() => this.pageForm.dirty, ...(ngDevMode ? [{ debugName: "isFormDirty" }] : []));
138
- // Form submission
139
- savePage() {
140
- if (!this.pageForm.valid) {
141
- this.markFormAsTouched();
142
- return;
143
- }
144
- const formValue = this.pageForm.getRawValue();
145
- const pageData = {
146
- _id: this.pageId() || '',
147
- sypg_title: formValue.sypg_title,
148
- sypg_desc: formValue.sypg_desc,
149
- sypg_page_code: formValue.sypg_page_code,
150
- sypg_configuration: formValue.sypg_configuration,
151
- sypg_isactive: formValue.sypg_isactive
152
- };
153
- this.loading.set(true);
154
- this.error.set(null);
155
- this.pageService.createOrUpdatePage(pageData)
156
- .pipe(takeUntilDestroyed(this.destroyRef))
157
- .subscribe({
158
- next: (response) => {
159
- if (response.success) {
160
- this.success.set(this.isEditMode() ? 'Page updated successfully' : 'Page created successfully');
161
- console.log('✅ Page saved successfully');
162
- // Navigate back to page list after a short delay
163
- setTimeout(() => {
164
- this.router.navigate(['/control-panel/page']);
165
- }, 1500);
166
- }
167
- else {
168
- this.error.set(response.message || 'Failed to save page');
169
- console.error('❌ Failed to save page:', response.message);
170
- }
171
- this.loading.set(false);
172
- },
173
- error: (error) => {
174
- console.error('❌ Error saving page:', error);
175
- this.error.set('Failed to save page. Please try again.');
176
- this.loading.set(false);
177
- }
178
- });
179
- }
180
- // Cancel form
181
- cancelForm() {
182
- this.router.navigate(['/control-panel/page']);
183
- }
184
- // Go back to page list
185
- goBack() {
186
- this.router.navigate(['/control-panel/page']);
187
- }
188
- // Mark form as touched to trigger validation display
189
- markFormAsTouched() {
190
- Object.keys(this.pageForm.controls).forEach(key => {
191
- const control = this.pageForm.get(key);
192
- control?.markAsTouched();
193
- });
194
- }
195
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideCorePageFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
196
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideCorePageFormComponent, isStandalone: true, selector: "cide-core-page-form", ngImport: i0, template: "<div class=\"page-form-fullscreen\">\r\n <div class=\"page-form-container\">\r\n <form class=\"page-form\" [formGroup]=\"pageForm\" [class.loading]=\"loading()\" (ngSubmit)=\"savePage()\">\r\n \r\n <!-- Header Section -->\r\n <div class=\"form-header\">\r\n <h2 class=\"form-title\">{{ isEditMode() ? 'Edit Page' : 'Create Page' }}</h2>\r\n <p class=\"form-subtitle\">\r\n {{ isEditMode() ? 'Update page information and configuration' : 'Create a new page with configuration' }}\r\n </p>\r\n </div>\r\n\r\n <!-- Success and Error Messages -->\r\n @if (success()) {\r\n <div class=\"alert alert-success\">\r\n <svg class=\"alert-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 13l4 4L19 7\"></path>\r\n </svg>\r\n {{ success() }}\r\n </div>\r\n }\r\n @if (error()) {\r\n <div class=\"alert alert-error\">\r\n <svg class=\"alert-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"></path>\r\n </svg>\r\n {{ error() }}\r\n </div>\r\n }\r\n\r\n <!-- Form Content -->\r\n <div class=\"form-section\">\r\n <div class=\"grid grid-2 gap-md lg-grid-2 md-grid-1\">\r\n <cide-ele-input \r\n id=\"sypg_title\"\r\n label=\"Page Title *\" \r\n formControlName=\"sypg_title\"\r\n placeholder=\"Enter page title\"\r\n size=\"md\">\r\n </cide-ele-input>\r\n \r\n <cide-ele-input \r\n id=\"sypg_page_code\"\r\n label=\"Page Code *\" \r\n formControlName=\"sypg_page_code\"\r\n placeholder=\"Enter page code (alphanumeric and underscore only)\"\r\n size=\"md\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <div class=\"grid grid-1 gap-md\">\r\n <cide-ele-textarea \r\n id=\"sypg_desc\"\r\n label=\"Page Description\" \r\n formControlName=\"sypg_desc\"\r\n placeholder=\"Enter page description\"\r\n [rows]=\"3\"\r\n size=\"md\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <div class=\"grid grid-1 gap-md\">\r\n <cide-ele-json-editor\r\n id=\"sypg_configuration\"\r\n label=\"Configuration JSON *\"\r\n formControlName=\"sypg_configuration\"\r\n placeholder='{\"key\": \"value\"}'>\r\n </cide-ele-json-editor>\r\n </div>\r\n\r\n <div class=\"grid grid-1 gap-sm\">\r\n <cide-ele-input\r\n id=\"sypg_isactive\"\r\n type=\"checkbox\"\r\n formControlName=\"sypg_isactive\"\r\n label=\"Active Status\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"form-actions\">\r\n <div class=\"flex justify-between items-center gap-4\">\r\n <!-- Error Message (Left Side) -->\r\n <cide-form-field-error [formGroup]=\"pageForm\"></cide-form-field-error>\r\n \r\n <!-- Action Buttons (Right Side) -->\r\n <div class=\"flex gap-3\">\r\n <button cideEleButton\r\n type=\"button\" \r\n variant=\"secondary\" \r\n (click)=\"cancelForm()\" \r\n leftIcon=\"close\"\r\n [disabled]=\"loading()\">\r\n Cancel\r\n </button>\r\n \r\n <button cideEleButton\r\n type=\"submit\" \r\n variant=\"primary\" \r\n [disabled]=\"loading() || !pageForm.valid\"\r\n [loading]=\"loading()\"\r\n leftIcon=\"save\">\r\n {{ isEditMode() ? 'Update Page' : 'Create Page' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n</div>\r\n", styles: [".page-form-container{background:transparent;padding:1rem;width:100%;box-sizing:border-box}.page-form{max-width:1200px;margin:0 auto;background:transparent;border:none;box-shadow:none;width:100%}.page-form.loading{opacity:.6;pointer-events:none}.form-header{background:transparent;color:#1f2937;padding:1.25rem 0;text-align:left}.form-header .form-title{font-size:1.5rem;font-weight:700;margin:0 0 .25rem;color:#1f2937}.form-header .form-subtitle{font-size:.95rem;opacity:.7;margin:0;font-weight:400;color:#6b7280}.form-section{padding:1.25rem 0;border-bottom:none;margin-bottom:1.5rem}.form-section:last-of-type{margin-bottom:0}.grid{display:grid;gap:1rem;margin-bottom:.75rem;transition:all .3s ease}.grid:last-child{margin-bottom:0}.grid.grid-1{grid-template-columns:1fr}.grid.grid-2{grid-template-columns:repeat(2,1fr)}.grid.grid-3{grid-template-columns:repeat(3,1fr)}.grid.grid-4{grid-template-columns:repeat(4,1fr)}.grid.gap-sm{gap:.5rem}.grid.gap-md{gap:1rem}.grid.gap-lg{gap:1.5rem}.grid.gap-xl{gap:2rem}@media (max-width: 1199px) and (min-width: 992px){.grid.lg-grid-1{grid-template-columns:1fr}.grid.lg-grid-2{grid-template-columns:repeat(2,1fr)}.grid.lg-grid-3{grid-template-columns:repeat(3,1fr)}}@media (max-width: 991px) and (min-width: 768px){.grid.md-grid-1{grid-template-columns:1fr}.grid.md-grid-2{grid-template-columns:repeat(2,1fr)}.grid.md-grid-3{grid-template-columns:repeat(3,1fr)}}@media (max-width: 1024px){.grid.grid-4:not([class*=lg-grid]):not([class*=md-grid]){grid-template-columns:repeat(2,1fr)}}@media (max-width: 768px){.grid{gap:.75rem}.grid.grid-2:not([class*=sm-grid]):not([class*=xs-grid]),.grid.grid-3:not([class*=sm-grid]):not([class*=xs-grid]),.grid.grid-4:not([class*=sm-grid]):not([class*=xs-grid]){grid-template-columns:1fr}.grid.gap-lg{gap:1rem}.grid.gap-xl{gap:1.25rem}}@media (max-width: 480px){.grid{gap:.5rem}.grid:not([class*=xs-grid]){grid-template-columns:1fr!important}.grid.gap-md{gap:.75rem}.grid.gap-lg,.grid.gap-xl{gap:1rem}}.checkbox-field{margin:.25rem 0}.checkbox-label{display:flex;flex-direction:column;gap:.25rem;cursor:pointer;padding:.75rem 0;background:transparent;border:none;border-radius:0;transition:all .2s ease}.checkbox-label:hover{background:#667eea05}.checkbox-label .checkbox-input{width:1rem;height:1rem;accent-color:#667eea;border-radius:3px;margin-bottom:.125rem}.checkbox-label .checkbox-text{font-weight:600;color:#374151;font-size:.875rem}.checkbox-label .checkbox-description{font-size:.75rem;color:#6b7280;margin-top:.125rem}.alert{display:flex;align-items:center;gap:.5rem;padding:.75rem 0;margin:1rem 0;border-radius:0;font-weight:500;font-size:.875rem;border-left:3px solid}.alert .alert-icon{width:1rem;height:1rem;flex-shrink:0}.alert.alert-success{background:#dcfce74d;border-left-color:#22c55e;color:#166534}.alert.alert-error{background:#fef2f24d;border-left-color:#ef4444;color:#dc2626}.form-actions{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 0;background:#fff;border-top:1px solid #e5e7eb;margin-top:2rem;position:sticky;bottom:0}@media (max-width: 640px){.form-actions{flex-direction:column-reverse}}cide-ele-input,cide-ele-select,cide-ele-textarea,cide-ele-json-editor{transition:all .2s ease}@media (max-width: 768px){.page-form-container{padding:.75rem}.form-header{padding:1rem 0}.form-header .form-title{font-size:1.25rem}.form-header .form-subtitle{font-size:.875rem}.form-section{padding:1rem 0}.form-actions{padding:1rem 0;margin-top:1.5rem}}@media (max-width: 480px){.page-form-container{padding:.25rem}.form-header,.form-section{padding:.75rem 0}.form-actions{padding:.75rem 0;margin-top:1rem}}\n"], 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: "ngmodule", type: FormsModule }, { 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: 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: CideTextareaComponent, selector: "cide-ele-textarea", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "minlength", "maxlength", "rows", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput"], outputs: ["ngModelChange"] }, { kind: "component", type: CideEleJsonEditorComponent, selector: "cide-ele-json-editor", inputs: ["label", "helperText", "required", "disabled", "showCharacterCount", "config"], outputs: ["valueChange", "objectChange", "errorsChange", "validChange"] }, { kind: "component", type: CideFormFieldErrorComponent, selector: "cide-form-field-error", inputs: ["control", "formGroup", "fieldName", "customMessages"] }] });
197
- }
198
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideCorePageFormComponent, decorators: [{
199
- type: Component,
200
- args: [{ selector: 'cide-core-page-form', standalone: true, imports: [
201
- CommonModule,
202
- ReactiveFormsModule,
203
- FormsModule,
204
- CideEleButtonComponent,
205
- CideInputComponent,
206
- CideTextareaComponent,
207
- CideEleJsonEditorComponent,
208
- CideFormFieldErrorComponent
209
- ], template: "<div class=\"page-form-fullscreen\">\r\n <div class=\"page-form-container\">\r\n <form class=\"page-form\" [formGroup]=\"pageForm\" [class.loading]=\"loading()\" (ngSubmit)=\"savePage()\">\r\n \r\n <!-- Header Section -->\r\n <div class=\"form-header\">\r\n <h2 class=\"form-title\">{{ isEditMode() ? 'Edit Page' : 'Create Page' }}</h2>\r\n <p class=\"form-subtitle\">\r\n {{ isEditMode() ? 'Update page information and configuration' : 'Create a new page with configuration' }}\r\n </p>\r\n </div>\r\n\r\n <!-- Success and Error Messages -->\r\n @if (success()) {\r\n <div class=\"alert alert-success\">\r\n <svg class=\"alert-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 13l4 4L19 7\"></path>\r\n </svg>\r\n {{ success() }}\r\n </div>\r\n }\r\n @if (error()) {\r\n <div class=\"alert alert-error\">\r\n <svg class=\"alert-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"></path>\r\n </svg>\r\n {{ error() }}\r\n </div>\r\n }\r\n\r\n <!-- Form Content -->\r\n <div class=\"form-section\">\r\n <div class=\"grid grid-2 gap-md lg-grid-2 md-grid-1\">\r\n <cide-ele-input \r\n id=\"sypg_title\"\r\n label=\"Page Title *\" \r\n formControlName=\"sypg_title\"\r\n placeholder=\"Enter page title\"\r\n size=\"md\">\r\n </cide-ele-input>\r\n \r\n <cide-ele-input \r\n id=\"sypg_page_code\"\r\n label=\"Page Code *\" \r\n formControlName=\"sypg_page_code\"\r\n placeholder=\"Enter page code (alphanumeric and underscore only)\"\r\n size=\"md\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <div class=\"grid grid-1 gap-md\">\r\n <cide-ele-textarea \r\n id=\"sypg_desc\"\r\n label=\"Page Description\" \r\n formControlName=\"sypg_desc\"\r\n placeholder=\"Enter page description\"\r\n [rows]=\"3\"\r\n size=\"md\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <div class=\"grid grid-1 gap-md\">\r\n <cide-ele-json-editor\r\n id=\"sypg_configuration\"\r\n label=\"Configuration JSON *\"\r\n formControlName=\"sypg_configuration\"\r\n placeholder='{\"key\": \"value\"}'>\r\n </cide-ele-json-editor>\r\n </div>\r\n\r\n <div class=\"grid grid-1 gap-sm\">\r\n <cide-ele-input\r\n id=\"sypg_isactive\"\r\n type=\"checkbox\"\r\n formControlName=\"sypg_isactive\"\r\n label=\"Active Status\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"form-actions\">\r\n <div class=\"flex justify-between items-center gap-4\">\r\n <!-- Error Message (Left Side) -->\r\n <cide-form-field-error [formGroup]=\"pageForm\"></cide-form-field-error>\r\n \r\n <!-- Action Buttons (Right Side) -->\r\n <div class=\"flex gap-3\">\r\n <button cideEleButton\r\n type=\"button\" \r\n variant=\"secondary\" \r\n (click)=\"cancelForm()\" \r\n leftIcon=\"close\"\r\n [disabled]=\"loading()\">\r\n Cancel\r\n </button>\r\n \r\n <button cideEleButton\r\n type=\"submit\" \r\n variant=\"primary\" \r\n [disabled]=\"loading() || !pageForm.valid\"\r\n [loading]=\"loading()\"\r\n leftIcon=\"save\">\r\n {{ isEditMode() ? 'Update Page' : 'Create Page' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n</div>\r\n", styles: [".page-form-container{background:transparent;padding:1rem;width:100%;box-sizing:border-box}.page-form{max-width:1200px;margin:0 auto;background:transparent;border:none;box-shadow:none;width:100%}.page-form.loading{opacity:.6;pointer-events:none}.form-header{background:transparent;color:#1f2937;padding:1.25rem 0;text-align:left}.form-header .form-title{font-size:1.5rem;font-weight:700;margin:0 0 .25rem;color:#1f2937}.form-header .form-subtitle{font-size:.95rem;opacity:.7;margin:0;font-weight:400;color:#6b7280}.form-section{padding:1.25rem 0;border-bottom:none;margin-bottom:1.5rem}.form-section:last-of-type{margin-bottom:0}.grid{display:grid;gap:1rem;margin-bottom:.75rem;transition:all .3s ease}.grid:last-child{margin-bottom:0}.grid.grid-1{grid-template-columns:1fr}.grid.grid-2{grid-template-columns:repeat(2,1fr)}.grid.grid-3{grid-template-columns:repeat(3,1fr)}.grid.grid-4{grid-template-columns:repeat(4,1fr)}.grid.gap-sm{gap:.5rem}.grid.gap-md{gap:1rem}.grid.gap-lg{gap:1.5rem}.grid.gap-xl{gap:2rem}@media (max-width: 1199px) and (min-width: 992px){.grid.lg-grid-1{grid-template-columns:1fr}.grid.lg-grid-2{grid-template-columns:repeat(2,1fr)}.grid.lg-grid-3{grid-template-columns:repeat(3,1fr)}}@media (max-width: 991px) and (min-width: 768px){.grid.md-grid-1{grid-template-columns:1fr}.grid.md-grid-2{grid-template-columns:repeat(2,1fr)}.grid.md-grid-3{grid-template-columns:repeat(3,1fr)}}@media (max-width: 1024px){.grid.grid-4:not([class*=lg-grid]):not([class*=md-grid]){grid-template-columns:repeat(2,1fr)}}@media (max-width: 768px){.grid{gap:.75rem}.grid.grid-2:not([class*=sm-grid]):not([class*=xs-grid]),.grid.grid-3:not([class*=sm-grid]):not([class*=xs-grid]),.grid.grid-4:not([class*=sm-grid]):not([class*=xs-grid]){grid-template-columns:1fr}.grid.gap-lg{gap:1rem}.grid.gap-xl{gap:1.25rem}}@media (max-width: 480px){.grid{gap:.5rem}.grid:not([class*=xs-grid]){grid-template-columns:1fr!important}.grid.gap-md{gap:.75rem}.grid.gap-lg,.grid.gap-xl{gap:1rem}}.checkbox-field{margin:.25rem 0}.checkbox-label{display:flex;flex-direction:column;gap:.25rem;cursor:pointer;padding:.75rem 0;background:transparent;border:none;border-radius:0;transition:all .2s ease}.checkbox-label:hover{background:#667eea05}.checkbox-label .checkbox-input{width:1rem;height:1rem;accent-color:#667eea;border-radius:3px;margin-bottom:.125rem}.checkbox-label .checkbox-text{font-weight:600;color:#374151;font-size:.875rem}.checkbox-label .checkbox-description{font-size:.75rem;color:#6b7280;margin-top:.125rem}.alert{display:flex;align-items:center;gap:.5rem;padding:.75rem 0;margin:1rem 0;border-radius:0;font-weight:500;font-size:.875rem;border-left:3px solid}.alert .alert-icon{width:1rem;height:1rem;flex-shrink:0}.alert.alert-success{background:#dcfce74d;border-left-color:#22c55e;color:#166534}.alert.alert-error{background:#fef2f24d;border-left-color:#ef4444;color:#dc2626}.form-actions{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 0;background:#fff;border-top:1px solid #e5e7eb;margin-top:2rem;position:sticky;bottom:0}@media (max-width: 640px){.form-actions{flex-direction:column-reverse}}cide-ele-input,cide-ele-select,cide-ele-textarea,cide-ele-json-editor{transition:all .2s ease}@media (max-width: 768px){.page-form-container{padding:.75rem}.form-header{padding:1rem 0}.form-header .form-title{font-size:1.25rem}.form-header .form-subtitle{font-size:.875rem}.form-section{padding:1rem 0}.form-actions{padding:1rem 0;margin-top:1.5rem}}@media (max-width: 480px){.page-form-container{padding:.25rem}.form-header,.form-section{padding:.75rem 0}.form-actions{padding:.75rem 0;margin-top:1rem}}\n"] }]
210
- }], ctorParameters: () => [] });
211
-
212
- export { CideCorePageFormComponent };
213
- //# sourceMappingURL=cloud-ide-core-page-form.component-Bebmm1_Z.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cloud-ide-core-page-form.component-Bebmm1_Z.mjs","sources":["../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-form/page-form.component.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-form/page-form.component.html"],"sourcesContent":["import { Component, signal, computed, inject, OnInit, DestroyRef } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Validators, ReactiveFormsModule, NonNullableFormBuilder, FormsModule } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\nimport { CideCorePageManagementService } from '../../services/page-management.service';\r\nimport { AppStateHelperService } from 'cloud-ide-layout';\r\nimport { CideEleButtonComponent, CideInputComponent, CideSelectComponent, CideTextareaComponent, CideIconComponent, CideEleFileInputComponent, CideEleJsonEditorComponent, CideFormFieldErrorComponent } from 'cloud-ide-element';\r\nimport { ICoreSypg, MSystemPagesInsertUpdatePayload, generateObjectFromString, systemPagesByIdControllerResponse, systemPagesInsertUpdateControllerResponse } from 'cloud-ide-lms-model';\r\n\r\n@Component({\r\n selector: 'cide-core-page-form',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n CideEleButtonComponent,\r\n CideInputComponent,\r\n CideTextareaComponent,\r\n CideEleJsonEditorComponent,\r\n CideFormFieldErrorComponent\r\n ],\r\n templateUrl: './page-form.component.html',\r\n styleUrls: ['./page-form.component.scss']\r\n})\r\nexport class CideCorePageFormComponent implements OnInit {\r\n private destroyRef = inject(DestroyRef);\r\n private pageService = inject(CideCorePageManagementService);\r\n private appState = inject(AppStateHelperService);\r\n private fb = inject(NonNullableFormBuilder);\r\n private router = inject(Router);\r\n private route = inject(ActivatedRoute);\r\n\r\n loading = signal(false);\r\n error = signal<string | null>(null);\r\n success = signal<string | null>(null);\r\n\r\n // Page information\r\n pageId = signal<string | null>(null);\r\n isEditMode = signal(false);\r\n\r\n pageForm = this.fb.group({\r\n sypg_title: ['', [Validators.required, Validators.maxLength(100)]],\r\n sypg_desc: ['', [Validators.maxLength(255)]],\r\n sypg_page_code: ['', [Validators.required, Validators.maxLength(40), Validators.pattern(/^[a-zA-Z0-9_]+$/)]],\r\n sypg_configuration: ['{}', [Validators.required]],\r\n sypg_isactive: [true]\r\n });\r\n\r\n constructor() {\r\n this.setupFormSubscriptions();\r\n }\r\n\r\n ngOnInit(): void {\r\n // Check for page ID in query parameters\r\n this.checkForPageId();\r\n }\r\n\r\n\r\n\r\n // Check for page ID in query parameters\r\n private checkForPageId() {\r\n console.log('🔍 Checking for page ID in query parameters', this.route.params);\r\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\r\n console.log('🔍 Query params:', params);\r\n // Check for pageId, id, or page parameter\r\n const queryParams = params['query'];\r\n const queryData = generateObjectFromString(queryParams);\r\n\r\n // If pageId is an object string (from generateStringFromObject), try to parse it\r\n const pageId = queryData.sypg_id;\r\n if (pageId) {\r\n console.log('🔍 Page ID found in query params:', pageId);\r\n this.pageId.set(pageId);\r\n this.isEditMode.set(true);\r\n this.loadPageData(pageId);\r\n } else {\r\n console.log('🆕 No page ID found - creating new page');\r\n this.isEditMode.set(false);\r\n this.pageId.set(null);\r\n }\r\n });\r\n }\r\n\r\n // Load page data for editing\r\n private loadPageData(pageId: string) {\r\n this.loading.set(true);\r\n this.error.set(null);\r\n\r\n console.log('📥 Loading page data for ID:', pageId);\r\n\r\n this.pageService.getPageById(pageId).pipe(\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe({\r\n next: (response: systemPagesByIdControllerResponse) => {\r\n console.log('✅ Page data loaded:', response);\r\n \r\n if (response?.success && response?.data) {\r\n const pageData = response.data;\r\n if (pageData) {\r\n this.populateFormWithPageData(pageData);\r\n this.success.set('Page data loaded successfully');\r\n } else {\r\n this.error.set('Page data not found');\r\n console.error('❌ Page data not found in response:', response);\r\n }\r\n } else {\r\n this.error.set('Failed to load page data');\r\n console.error('❌ Page data response invalid:', response);\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (err) => {\r\n console.error('❌ Failed to load page data:', err);\r\n \r\n let errorMessage = 'Failed to load page data.';\r\n \r\n if (err?.error?.message) {\r\n errorMessage = err.error.message;\r\n } else if (err?.message) {\r\n errorMessage = err.message;\r\n } else if (err?.status === 404) {\r\n errorMessage = 'Page not found.';\r\n } else if (err?.status === 500) {\r\n errorMessage = 'Server error. Please try again later.';\r\n }\r\n \r\n this.error.set(errorMessage);\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n // Populate form with page data\r\n private populateFormWithPageData(pageData: ICoreSypg) {\r\n try {\r\n console.log('📝 Populating form with page data:', pageData);\r\n\r\n const formData = {\r\n sypg_title: pageData.sypg_title || '',\r\n sypg_desc: pageData.sypg_desc || '',\r\n sypg_page_code: pageData.sypg_page_code || '',\r\n sypg_configuration: pageData.sypg_configuration ? JSON.stringify(pageData.sypg_configuration) : '{}',\r\n sypg_isactive: pageData.sypg_isactive !== undefined ? pageData.sypg_isactive : true\r\n };\r\n\r\n // Patch the form with the page data\r\n this.pageForm.patchValue(formData, { emitEvent: false });\r\n\r\n console.log('✅ Form populated successfully');\r\n } catch (error) {\r\n console.error('💥 Error populating form with page data:', error);\r\n this.error.set('Error loading page data into form');\r\n }\r\n }\r\n\r\n private setupFormSubscriptions(): void {\r\n // Watch for form changes to enable/disable save button\r\n this.pageForm.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => {\r\n // Form validation is handled by computed signals\r\n });\r\n }\r\n\r\n // Computed values\r\n\r\n isFormDirty = computed(() => this.pageForm.dirty);\r\n\r\n // Form submission\r\n savePage(): void {\r\n if (!this.pageForm.valid) {\r\n this.markFormAsTouched();\r\n return;\r\n }\r\n\r\n const formValue = this.pageForm.getRawValue();\r\n \r\n const pageData: MSystemPagesInsertUpdatePayload = {\r\n _id: this.pageId() || '',\r\n sypg_title: formValue.sypg_title,\r\n sypg_desc: formValue.sypg_desc,\r\n sypg_page_code: formValue.sypg_page_code,\r\n sypg_configuration: formValue.sypg_configuration,\r\n sypg_isactive: formValue.sypg_isactive\r\n };\r\n\r\n this.loading.set(true);\r\n this.error.set(null);\r\n\r\n this.pageService.createOrUpdatePage(pageData)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response: systemPagesInsertUpdateControllerResponse) => {\r\n if (response.success) {\r\n this.success.set(this.isEditMode() ? 'Page updated successfully' : 'Page created successfully');\r\n console.log('✅ Page saved successfully');\r\n // Navigate back to page list after a short delay\r\n setTimeout(() => {\r\n this.router.navigate(['/control-panel/page']);\r\n }, 1500);\r\n } else {\r\n this.error.set(response.message || 'Failed to save page');\r\n console.error('❌ Failed to save page:', response.message);\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error) => {\r\n console.error('❌ Error saving page:', error);\r\n this.error.set('Failed to save page. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n // Cancel form\r\n cancelForm(): void {\r\n this.router.navigate(['/control-panel/page']);\r\n }\r\n\r\n // Go back to page list\r\n goBack(): void {\r\n this.router.navigate(['/control-panel/page']);\r\n }\r\n\r\n // Mark form as touched to trigger validation display\r\n private markFormAsTouched(): void {\r\n Object.keys(this.pageForm.controls).forEach(key => {\r\n const control = this.pageForm.get(key);\r\n control?.markAsTouched();\r\n });\r\n }\r\n}\r\n","<div class=\"page-form-fullscreen\">\r\n <div class=\"page-form-container\">\r\n <form class=\"page-form\" [formGroup]=\"pageForm\" [class.loading]=\"loading()\" (ngSubmit)=\"savePage()\">\r\n \r\n <!-- Header Section -->\r\n <div class=\"form-header\">\r\n <h2 class=\"form-title\">{{ isEditMode() ? 'Edit Page' : 'Create Page' }}</h2>\r\n <p class=\"form-subtitle\">\r\n {{ isEditMode() ? 'Update page information and configuration' : 'Create a new page with configuration' }}\r\n </p>\r\n </div>\r\n\r\n <!-- Success and Error Messages -->\r\n @if (success()) {\r\n <div class=\"alert alert-success\">\r\n <svg class=\"alert-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 13l4 4L19 7\"></path>\r\n </svg>\r\n {{ success() }}\r\n </div>\r\n }\r\n @if (error()) {\r\n <div class=\"alert alert-error\">\r\n <svg class=\"alert-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"></path>\r\n </svg>\r\n {{ error() }}\r\n </div>\r\n }\r\n\r\n <!-- Form Content -->\r\n <div class=\"form-section\">\r\n <div class=\"grid grid-2 gap-md lg-grid-2 md-grid-1\">\r\n <cide-ele-input \r\n id=\"sypg_title\"\r\n label=\"Page Title *\" \r\n formControlName=\"sypg_title\"\r\n placeholder=\"Enter page title\"\r\n size=\"md\">\r\n </cide-ele-input>\r\n \r\n <cide-ele-input \r\n id=\"sypg_page_code\"\r\n label=\"Page Code *\" \r\n formControlName=\"sypg_page_code\"\r\n placeholder=\"Enter page code (alphanumeric and underscore only)\"\r\n size=\"md\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <div class=\"grid grid-1 gap-md\">\r\n <cide-ele-textarea \r\n id=\"sypg_desc\"\r\n label=\"Page Description\" \r\n formControlName=\"sypg_desc\"\r\n placeholder=\"Enter page description\"\r\n [rows]=\"3\"\r\n size=\"md\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <div class=\"grid grid-1 gap-md\">\r\n <cide-ele-json-editor\r\n id=\"sypg_configuration\"\r\n label=\"Configuration JSON *\"\r\n formControlName=\"sypg_configuration\"\r\n placeholder='{\"key\": \"value\"}'>\r\n </cide-ele-json-editor>\r\n </div>\r\n\r\n <div class=\"grid grid-1 gap-sm\">\r\n <cide-ele-input\r\n id=\"sypg_isactive\"\r\n type=\"checkbox\"\r\n formControlName=\"sypg_isactive\"\r\n label=\"Active Status\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"form-actions\">\r\n <div class=\"flex justify-between items-center gap-4\">\r\n <!-- Error Message (Left Side) -->\r\n <cide-form-field-error [formGroup]=\"pageForm\"></cide-form-field-error>\r\n \r\n <!-- Action Buttons (Right Side) -->\r\n <div class=\"flex gap-3\">\r\n <button cideEleButton\r\n type=\"button\" \r\n variant=\"secondary\" \r\n (click)=\"cancelForm()\" \r\n leftIcon=\"close\"\r\n [disabled]=\"loading()\">\r\n Cancel\r\n </button>\r\n \r\n <button cideEleButton\r\n type=\"submit\" \r\n variant=\"primary\" \r\n [disabled]=\"loading() || !pageForm.valid\"\r\n [loading]=\"loading()\"\r\n leftIcon=\"save\">\r\n {{ isEditMode() ? 'Update Page' : 'Create Page' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n</div>\r\n"],"names":[],"mappings":"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"}