cloud-ide-core 2.0.74 → 2.0.78
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-DbJcPXgS.mjs +238 -0
- package/fesm2022/cloud-ide-core-page-form.component-DbJcPXgS.mjs.map +1 -0
- package/fesm2022/cloud-ide-core.mjs +609 -263
- package/fesm2022/cloud-ide-core.mjs.map +1 -1
- package/index.d.ts +53 -4
- package/package.json +1 -1
- package/fesm2022/cloud-ide-core-page-form.component-BNWWV012.mjs +0 -213
- package/fesm2022/cloud-ide-core-page-form.component-BNWWV012.mjs.map +0 -1
package/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Route, Router } from '@angular/router';
|
|
2
2
|
import * as _angular_core from '@angular/core';
|
|
3
|
-
import {
|
|
3
|
+
import { OnInit, TemplateRef, 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';
|
|
@@ -23,14 +23,16 @@ declare class CloudIdeCoreComponent {
|
|
|
23
23
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CloudIdeCoreComponent, "cide-core", never, {}, {}, never, never, true, never>;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
declare class MenuListComponent {
|
|
26
|
+
declare class MenuListComponent implements OnInit {
|
|
27
27
|
private destroyRef;
|
|
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;
|
|
35
|
+
private rightsService;
|
|
34
36
|
menuDetailsRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<ICoreSyme>>>;
|
|
35
37
|
menuTypeRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<ICoreSyme>>>;
|
|
36
38
|
permissionsRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<ICoreSyme>>>;
|
|
@@ -41,6 +43,8 @@ declare class MenuListComponent {
|
|
|
41
43
|
error: _angular_core.WritableSignal<string | null>;
|
|
42
44
|
selectedItems: _angular_core.WritableSignal<string[]>;
|
|
43
45
|
permissions: _angular_core.WritableSignal<ICoreSygms[]>;
|
|
46
|
+
pages: _angular_core.WritableSignal<ICoreSypg[]>;
|
|
47
|
+
pagesLoading: _angular_core.WritableSignal<boolean>;
|
|
44
48
|
userRightsTypeId: _angular_core.WritableSignal<string | null>;
|
|
45
49
|
searchTerm: _angular_core.WritableSignal<string>;
|
|
46
50
|
selectedParentItem: _angular_core.WritableSignal<ICoreSyme | null>;
|
|
@@ -62,6 +66,7 @@ declare class MenuListComponent {
|
|
|
62
66
|
syme_isactive: _angular_forms.FormControl<boolean>;
|
|
63
67
|
syme_order_by: _angular_forms.FormControl<number>;
|
|
64
68
|
syme_permissions_id_sygms: _angular_forms.FormControl<string[]>;
|
|
69
|
+
syme_pages_id_sypg: _angular_forms.FormControl<string[]>;
|
|
65
70
|
}>;
|
|
66
71
|
menuTypeOptions: _angular_core.Signal<{
|
|
67
72
|
value: string;
|
|
@@ -71,6 +76,10 @@ declare class MenuListComponent {
|
|
|
71
76
|
value: string;
|
|
72
77
|
label: string;
|
|
73
78
|
}[]>;
|
|
79
|
+
pageOptions: _angular_core.Signal<{
|
|
80
|
+
value: string;
|
|
81
|
+
label: string;
|
|
82
|
+
}[]>;
|
|
74
83
|
gridConfig: _angular_core.WritableSignal<GridConfiguration<ICoreSyme>>;
|
|
75
84
|
templateRenderers: _angular_core.Signal<Record<string, TemplateRef<TemplateContext<ICoreSyme>>>>;
|
|
76
85
|
/**
|
|
@@ -101,6 +110,7 @@ declare class MenuListComponent {
|
|
|
101
110
|
hasNextPage: _angular_core.Signal<boolean>;
|
|
102
111
|
hasPreviousPage: _angular_core.Signal<boolean>;
|
|
103
112
|
constructor();
|
|
113
|
+
ngOnInit(): void;
|
|
104
114
|
/**
|
|
105
115
|
* Initialize component with modern patterns
|
|
106
116
|
*/
|
|
@@ -125,6 +135,10 @@ declare class MenuListComponent {
|
|
|
125
135
|
* Load menu items from service
|
|
126
136
|
*/
|
|
127
137
|
loadMenuItems(): void;
|
|
138
|
+
/**
|
|
139
|
+
* Load pages from service
|
|
140
|
+
*/
|
|
141
|
+
loadPages(): void;
|
|
128
142
|
/**
|
|
129
143
|
* Handle click outside dropdown
|
|
130
144
|
*/
|
|
@@ -1265,11 +1279,12 @@ declare class CideCoreGradeLevelManagementService {
|
|
|
1265
1279
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<CideCoreGradeLevelManagementService>;
|
|
1266
1280
|
}
|
|
1267
1281
|
|
|
1268
|
-
declare class CideCorePageListComponent {
|
|
1282
|
+
declare class CideCorePageListComponent implements OnInit {
|
|
1269
1283
|
private destroyRef;
|
|
1270
1284
|
private pageService;
|
|
1271
1285
|
private appState;
|
|
1272
1286
|
private router;
|
|
1287
|
+
private rightsService;
|
|
1273
1288
|
pageDetailsRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<Record<string, unknown>>>>;
|
|
1274
1289
|
pageStatusRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<Record<string, unknown>>>>;
|
|
1275
1290
|
actionsDropdownRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<Record<string, unknown>>>>;
|
|
@@ -1279,6 +1294,12 @@ declare class CideCorePageListComponent {
|
|
|
1279
1294
|
error: _angular_core.WritableSignal<string | null>;
|
|
1280
1295
|
selectedItems: _angular_core.WritableSignal<string[]>;
|
|
1281
1296
|
searchTerm: _angular_core.WritableSignal<string>;
|
|
1297
|
+
canCreate: _angular_core.Signal<boolean>;
|
|
1298
|
+
canEdit: _angular_core.Signal<boolean>;
|
|
1299
|
+
canDelete: _angular_core.Signal<boolean>;
|
|
1300
|
+
canView: _angular_core.Signal<boolean>;
|
|
1301
|
+
canManageThemes: _angular_core.Signal<boolean>;
|
|
1302
|
+
canManageControls: _angular_core.Signal<boolean>;
|
|
1282
1303
|
currentPage: _angular_core.WritableSignal<number>;
|
|
1283
1304
|
pageSize: _angular_core.WritableSignal<number>;
|
|
1284
1305
|
totalItems: _angular_core.WritableSignal<number>;
|
|
@@ -1291,6 +1312,7 @@ declare class CideCorePageListComponent {
|
|
|
1291
1312
|
onManageControls: (item: ICoreSypg) => void;
|
|
1292
1313
|
};
|
|
1293
1314
|
constructor();
|
|
1315
|
+
ngOnInit(): void;
|
|
1294
1316
|
/**
|
|
1295
1317
|
* Initialize component
|
|
1296
1318
|
*/
|
|
@@ -1819,12 +1841,15 @@ declare class CideCoreUserCreateComponent {
|
|
|
1819
1841
|
private sharedObjectIdService;
|
|
1820
1842
|
private entityRightsService;
|
|
1821
1843
|
private notificationService;
|
|
1844
|
+
private rightsService;
|
|
1822
1845
|
userMasterForm: FormGroup;
|
|
1823
1846
|
activeTab: _angular_core.WritableSignal<string>;
|
|
1824
1847
|
loading: _angular_core.WritableSignal<boolean>;
|
|
1825
1848
|
userId: _angular_core.WritableSignal<string>;
|
|
1826
1849
|
isEditMode: _angular_core.WritableSignal<boolean>;
|
|
1827
1850
|
showPasswordFields: _angular_core.WritableSignal<boolean>;
|
|
1851
|
+
userType: _angular_core.WritableSignal<string | null>;
|
|
1852
|
+
typeSpecificId: _angular_core.WritableSignal<string | null>;
|
|
1828
1853
|
profilePhotoPreview: _angular_core.WritableSignal<string | null>;
|
|
1829
1854
|
contactAddresses: _angular_core.WritableSignal<AuthUserCoreUserContactAddresses[]>;
|
|
1830
1855
|
documents: _angular_core.WritableSignal<AuthUserCoreUserDocuments[]>;
|
|
@@ -2437,6 +2462,10 @@ declare class CideCoreUserCreateComponent {
|
|
|
2437
2462
|
* @returns Promise<string> - The generated ObjectId
|
|
2438
2463
|
*/
|
|
2439
2464
|
generateEntityObjectId(): Promise<string>;
|
|
2465
|
+
/**
|
|
2466
|
+
* Get user type label for display (TEACHER -> Teacher, STUDENT -> Student, etc.)
|
|
2467
|
+
*/
|
|
2468
|
+
private getUserTypeLabel;
|
|
2440
2469
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CideCoreUserCreateComponent, never>;
|
|
2441
2470
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CideCoreUserCreateComponent, "cide-core-user-create", never, {}, {}, never, never, true, never>;
|
|
2442
2471
|
}
|
|
@@ -2527,6 +2556,7 @@ declare class CideCoreUserListComponent implements OnInit, AfterViewInit {
|
|
|
2527
2556
|
router: Router;
|
|
2528
2557
|
userMasterService: CideCoreUserMasterService;
|
|
2529
2558
|
appState: AppStateHelperService;
|
|
2559
|
+
private rightsService;
|
|
2530
2560
|
gridComponent: CideEleDataGridComponent<any>;
|
|
2531
2561
|
actionsTemplate: TemplateRef<any>;
|
|
2532
2562
|
userDetailsTemplate: TemplateRef<any>;
|
|
@@ -2544,6 +2574,10 @@ declare class CideCoreUserListComponent implements OnInit, AfterViewInit {
|
|
|
2544
2574
|
searchQuery: _angular_core.WritableSignal<string>;
|
|
2545
2575
|
sortColumn: _angular_core.WritableSignal<string>;
|
|
2546
2576
|
sortDirection: _angular_core.WritableSignal<"asc" | "desc">;
|
|
2577
|
+
canCreate: _angular_core.Signal<boolean>;
|
|
2578
|
+
canEdit: _angular_core.Signal<boolean>;
|
|
2579
|
+
canDelete: _angular_core.Signal<boolean>;
|
|
2580
|
+
canView: _angular_core.Signal<boolean>;
|
|
2547
2581
|
gridConfig: _angular_core.WritableSignal<GridConfiguration<any>>;
|
|
2548
2582
|
templateRenderers: Record<string, TemplateRef<any>>;
|
|
2549
2583
|
ngOnInit(): void;
|
|
@@ -2809,6 +2843,7 @@ declare class CideCoreUserRoleListComponent implements OnInit, OnDestroy {
|
|
|
2809
2843
|
private readonly appState;
|
|
2810
2844
|
private readonly notificationService;
|
|
2811
2845
|
private readonly confirmationService;
|
|
2846
|
+
private readonly rightsService;
|
|
2812
2847
|
userRoleDetailsRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<Record<string, unknown>>>>;
|
|
2813
2848
|
entityRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<Record<string, unknown>>>>;
|
|
2814
2849
|
statusRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<Record<string, unknown>>>>;
|
|
@@ -2831,6 +2866,11 @@ declare class CideCoreUserRoleListComponent implements OnInit, OnDestroy {
|
|
|
2831
2866
|
label: string;
|
|
2832
2867
|
}[]>;
|
|
2833
2868
|
gridConfig: _angular_core.WritableSignal<GridConfiguration<UserRole>>;
|
|
2869
|
+
canCreate: _angular_core.Signal<boolean>;
|
|
2870
|
+
canEdit: _angular_core.Signal<boolean>;
|
|
2871
|
+
canDelete: _angular_core.Signal<boolean>;
|
|
2872
|
+
canView: _angular_core.Signal<boolean>;
|
|
2873
|
+
canToggleStatus: _angular_core.Signal<boolean>;
|
|
2834
2874
|
ngOnInit(): void;
|
|
2835
2875
|
ngOnDestroy(): void;
|
|
2836
2876
|
/**
|
|
@@ -2887,6 +2927,7 @@ declare class CideCoreUserRoleFormComponent implements OnInit, OnDestroy {
|
|
|
2887
2927
|
private readonly confirmationService;
|
|
2888
2928
|
private readonly fb;
|
|
2889
2929
|
private readonly cdr;
|
|
2930
|
+
private readonly rightsService;
|
|
2890
2931
|
private destroy$;
|
|
2891
2932
|
userRoleForm: FormGroup;
|
|
2892
2933
|
roleRightsForm: FormGroup;
|
|
@@ -3141,6 +3182,7 @@ declare class CideCoreEntityCreateComponent implements OnInit, OnDestroy {
|
|
|
3141
3182
|
private router;
|
|
3142
3183
|
private fileManagerService;
|
|
3143
3184
|
private sharedObjectIdService;
|
|
3185
|
+
private rightsService;
|
|
3144
3186
|
private destroy$;
|
|
3145
3187
|
private globalErrorHandler?;
|
|
3146
3188
|
private globalRejectionHandler?;
|
|
@@ -3221,6 +3263,7 @@ declare class CideCoreEntityCreateComponent implements OnInit, OnDestroy {
|
|
|
3221
3263
|
declare class CideCoreEntityListComponent implements OnInit {
|
|
3222
3264
|
router: Router;
|
|
3223
3265
|
private entityService;
|
|
3266
|
+
private rightsService;
|
|
3224
3267
|
gridComponent: _angular_core.Signal<CideEleDataGridComponent<CoreSystemEntityListResponse> | undefined>;
|
|
3225
3268
|
entityDetailsRenderer: _angular_core.Signal<TemplateRef<TemplateContext<CoreSystemEntityListResponse>>>;
|
|
3226
3269
|
entityTypeRenderer: _angular_core.Signal<TemplateRef<TemplateContext<CoreSystemEntityListResponse>>>;
|
|
@@ -3244,6 +3287,10 @@ declare class CideCoreEntityListComponent implements OnInit {
|
|
|
3244
3287
|
value: string;
|
|
3245
3288
|
label: string;
|
|
3246
3289
|
}[]>;
|
|
3290
|
+
canCreate: _angular_core.Signal<boolean>;
|
|
3291
|
+
canEdit: _angular_core.Signal<boolean>;
|
|
3292
|
+
canDelete: _angular_core.Signal<boolean>;
|
|
3293
|
+
canView: _angular_core.Signal<boolean>;
|
|
3247
3294
|
gridConfig: _angular_core.WritableSignal<GridConfiguration<CoreSystemEntityListResponse>>;
|
|
3248
3295
|
templateRenderers: _angular_core.Signal<Record<string, TemplateRef<TemplateContext<CoreSystemEntityListResponse>>>>;
|
|
3249
3296
|
getEntityTypeName(row: CoreSystemEntityListResponse): string;
|
|
@@ -3393,6 +3440,7 @@ declare class CideCoreGeneralMasterTypeComponent implements OnInit {
|
|
|
3393
3440
|
private router;
|
|
3394
3441
|
private confirmationService;
|
|
3395
3442
|
private notificationService;
|
|
3443
|
+
private rightsService;
|
|
3396
3444
|
typeDetailsRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<Record<string, unknown>>>>;
|
|
3397
3445
|
typeStatusRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<Record<string, unknown>>>>;
|
|
3398
3446
|
actionsDropdownRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<Record<string, unknown>>>>;
|
|
@@ -3539,6 +3587,7 @@ declare class CideCoreGeneralMasterComponent implements OnInit {
|
|
|
3539
3587
|
private router;
|
|
3540
3588
|
private route;
|
|
3541
3589
|
private appState;
|
|
3590
|
+
private rightsService;
|
|
3542
3591
|
masterDetailsRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<Record<string, unknown>>>>;
|
|
3543
3592
|
masterStatusRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<Record<string, unknown>>>>;
|
|
3544
3593
|
actionsDropdownRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<Record<string, unknown>>>>;
|
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.3.15", ngImport: i0, type: CideCorePageFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
196
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CideCorePageFormComponent, isStandalone: true, selector: "cide-core-page-form", ngImport: i0, template: "<div class=\"page-form-fullscreen tw-bg-white dark:tw-bg-gray-900 tw-min-h-screen\">\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}::ng-deep .dark .form-header{color:var(--cide-ele-text-primary, #f3f4f6)}.form-header .form-title{font-size:1.5rem;font-weight:700;margin:0 0 .25rem;color:#1f2937}::ng-deep .dark .form-header .form-title{color:var(--cide-ele-text-primary, #f3f4f6)}.form-header .form-subtitle{font-size:.95rem;opacity:.7;margin:0;font-weight:400;color:#6b7280}::ng-deep .dark .form-header .form-subtitle{color:var(--cide-ele-text-secondary, #9ca3af);opacity:.8}.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}::ng-deep .dark .checkbox-label .checkbox-text{color:var(--cide-ele-text-primary, #f3f4f6)}.checkbox-label .checkbox-description{font-size:.75rem;color:#6b7280;margin-top:.125rem}::ng-deep .dark .checkbox-label .checkbox-description{color:var(--cide-ele-text-secondary, #9ca3af)}.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}::ng-deep .dark .alert.alert-success{background:#14532d4d;border-left-color:#22c55e;color:#86efac}.alert.alert-error{background:#fef2f24d;border-left-color:#ef4444;color:#dc2626}::ng-deep .dark .alert.alert-error{background:#7f1d1d4d;border-left-color:#ef4444;color:#fca5a5}.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}:host-context(.dark) .form-actions,:host-context([data-theme=dark]) .form-actions{background:var(--cide-ele-bg-primary, #1f2937);border-top-color:var(--cide-ele-border-color, #374151)}@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", "step", "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.3.15", 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 tw-bg-white dark:tw-bg-gray-900 tw-min-h-screen\">\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}::ng-deep .dark .form-header{color:var(--cide-ele-text-primary, #f3f4f6)}.form-header .form-title{font-size:1.5rem;font-weight:700;margin:0 0 .25rem;color:#1f2937}::ng-deep .dark .form-header .form-title{color:var(--cide-ele-text-primary, #f3f4f6)}.form-header .form-subtitle{font-size:.95rem;opacity:.7;margin:0;font-weight:400;color:#6b7280}::ng-deep .dark .form-header .form-subtitle{color:var(--cide-ele-text-secondary, #9ca3af);opacity:.8}.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}::ng-deep .dark .checkbox-label .checkbox-text{color:var(--cide-ele-text-primary, #f3f4f6)}.checkbox-label .checkbox-description{font-size:.75rem;color:#6b7280;margin-top:.125rem}::ng-deep .dark .checkbox-label .checkbox-description{color:var(--cide-ele-text-secondary, #9ca3af)}.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}::ng-deep .dark .alert.alert-success{background:#14532d4d;border-left-color:#22c55e;color:#86efac}.alert.alert-error{background:#fef2f24d;border-left-color:#ef4444;color:#dc2626}::ng-deep .dark .alert.alert-error{background:#7f1d1d4d;border-left-color:#ef4444;color:#fca5a5}.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}:host-context(.dark) .form-actions,:host-context([data-theme=dark]) .form-actions{background:var(--cide-ele-bg-primary, #1f2937);border-top-color:var(--cide-ele-border-color, #374151)}@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-BNWWV012.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-ide-core-page-form.component-BNWWV012.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 tw-bg-white dark:tw-bg-gray-900 tw-min-h-screen\">\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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"}
|