cloud-ide-core 2.0.71 → 2.0.74

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, 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, 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
 
@@ -2544,13 +2544,6 @@ declare class CideCoreUserListComponent implements OnInit, AfterViewInit {
2544
2544
  searchQuery: _angular_core.WritableSignal<string>;
2545
2545
  sortColumn: _angular_core.WritableSignal<string>;
2546
2546
  sortDirection: _angular_core.WritableSignal<"asc" | "desc">;
2547
- selectedStatusFilter: _angular_core.WritableSignal<string>;
2548
- get selectedStatusFilterValue(): string;
2549
- set selectedStatusFilterValue(value: string);
2550
- statusFilterOptions: _angular_core.WritableSignal<{
2551
- value: string;
2552
- label: string;
2553
- }[]>;
2554
2547
  gridConfig: _angular_core.WritableSignal<GridConfiguration<any>>;
2555
2548
  templateRenderers: Record<string, TemplateRef<any>>;
2556
2549
  ngOnInit(): void;
@@ -2577,7 +2570,6 @@ declare class CideCoreUserListComponent implements OnInit, AfterViewInit {
2577
2570
  onToggleUserStatus(user: any): void;
2578
2571
  onDeleteUser(user: any): void;
2579
2572
  onAddUser(): void;
2580
- onFilterChange(): void;
2581
2573
  formatDate(dateString: string | undefined): string;
2582
2574
  isDateExpired(dateString: string | undefined): boolean;
2583
2575
  getValidityEndText(dateString: string | undefined): string;
@@ -3276,6 +3268,10 @@ declare class CideCoreEntityListComponent implements OnInit {
3276
3268
  private updatePaginationState;
3277
3269
  onSearch(): void;
3278
3270
  onFilterChange(): void;
3271
+ /**
3272
+ * Handle entity type selection change
3273
+ */
3274
+ onEntityTypeChange(value: string | number | string[]): void;
3279
3275
  onPageChange(page: number | string): void;
3280
3276
  onPageSizeChange(): void;
3281
3277
  onRefresh(): void;
@@ -3395,6 +3391,8 @@ declare class CideCoreGeneralMasterTypeComponent implements OnInit {
3395
3391
  private typeService;
3396
3392
  private fb;
3397
3393
  private router;
3394
+ private confirmationService;
3395
+ private notificationService;
3398
3396
  typeDetailsRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<Record<string, unknown>>>>;
3399
3397
  typeStatusRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<Record<string, unknown>>>>;
3400
3398
  actionsDropdownRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<Record<string, unknown>>>>;
@@ -3605,6 +3603,10 @@ declare class CideCoreGeneralMasterComponent implements OnInit {
3605
3603
  * Setup form subscriptions
3606
3604
  */
3607
3605
  private setupFormSubscriptions;
3606
+ /**
3607
+ * Normalize parent field to string ID for tree view
3608
+ */
3609
+ private normalizeParentField;
3608
3610
  /**
3609
3611
  * Update grid data
3610
3612
  */
@@ -3626,6 +3628,10 @@ declare class CideCoreGeneralMasterComponent implements OnInit {
3626
3628
  * Edit master
3627
3629
  */
3628
3630
  editMaster(master: ICoreSygms): void;
3631
+ /**
3632
+ * Copy master - opens form with same data for creating a new record
3633
+ */
3634
+ copyMaster(master: ICoreSygms): void;
3629
3635
  /**
3630
3636
  * Delete master
3631
3637
  */
@@ -3949,5 +3955,21 @@ declare class CideCoreClassProgramMasterService implements IClassProgramMasterSe
3949
3955
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<CideCoreClassProgramMasterService>;
3950
3956
  }
3951
3957
 
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 };
3958
+ /**
3959
+ * @description Data service for currency-related operations
3960
+ * Handles API calls for retrieving currency data
3961
+ */
3962
+ declare class CideCoreCurrencyService implements ICurrencyService {
3963
+ private http;
3964
+ /**
3965
+ * Get all currencies from API
3966
+ * @param body - MSycrList payload for filtering
3967
+ * @returns Observable of currency list response
3968
+ */
3969
+ getAllCurrencies(body: Partial<MSycrList>): Observable<currencyListControllerResponse>;
3970
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CideCoreCurrencyService, never>;
3971
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<CideCoreCurrencyService>;
3972
+ }
3973
+
3974
+ 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
3975
  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.71",
3
+ "version": "2.0.74",
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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"}