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/fesm2022/cloud-ide-core-page-form.component-DMiL9oSs.mjs +213 -0
- package/fesm2022/cloud-ide-core-page-form.component-DMiL9oSs.mjs.map +1 -0
- package/fesm2022/cloud-ide-core.mjs +275 -166
- package/fesm2022/cloud-ide-core.mjs.map +1 -1
- package/index.d.ts +37 -3
- package/package.json +1 -1
- package/fesm2022/cloud-ide-core-page-form.component-Bebmm1_Z.mjs +0 -213
- package/fesm2022/cloud-ide-core-page-form.component-Bebmm1_Z.mjs.map +0 -1
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,
|
|
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
|
-
|
|
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,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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"}
|