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/fesm2022/cloud-ide-core-page-form.component-BNWWV012.mjs +213 -0
- package/fesm2022/cloud-ide-core-page-form.component-BNWWV012.mjs.map +1 -0
- package/fesm2022/cloud-ide-core.mjs +283 -216
- package/fesm2022/cloud-ide-core.mjs.map +1 -1
- package/index.d.ts +33 -11
- 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, 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
|
-
|
|
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,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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"}
|