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
|
@@ -22,7 +22,6 @@ const coreRoutes = [
|
|
|
22
22
|
title: 'Menu Management',
|
|
23
23
|
canActivate: [authGuard],
|
|
24
24
|
data: {
|
|
25
|
-
reuseTab: true,
|
|
26
25
|
sypg_page_code: "core_menu_list"
|
|
27
26
|
}
|
|
28
27
|
},
|
|
@@ -32,7 +31,6 @@ const coreRoutes = [
|
|
|
32
31
|
title: 'Department Management',
|
|
33
32
|
canActivate: [authGuard],
|
|
34
33
|
data: {
|
|
35
|
-
reuseTab: true,
|
|
36
34
|
sypg_page_code: "core_department_list"
|
|
37
35
|
}
|
|
38
36
|
},
|
|
@@ -42,7 +40,6 @@ const coreRoutes = [
|
|
|
42
40
|
title: 'Designation Management',
|
|
43
41
|
canActivate: [authGuard],
|
|
44
42
|
data: {
|
|
45
|
-
reuseTab: true,
|
|
46
43
|
sypg_page_code: "core_designation_list"
|
|
47
44
|
}
|
|
48
45
|
},
|
|
@@ -52,7 +49,6 @@ const coreRoutes = [
|
|
|
52
49
|
title: 'Grade Level Management',
|
|
53
50
|
canActivate: [authGuard],
|
|
54
51
|
data: {
|
|
55
|
-
reuseTab: true,
|
|
56
52
|
sypg_page_code: "core_grade_level_list"
|
|
57
53
|
}
|
|
58
54
|
},
|
|
@@ -62,27 +58,24 @@ const coreRoutes = [
|
|
|
62
58
|
title: 'Page Management',
|
|
63
59
|
canActivate: [authGuard],
|
|
64
60
|
data: {
|
|
65
|
-
reuseTab: true,
|
|
66
61
|
sypg_page_code: "core_page_management"
|
|
67
62
|
}
|
|
68
63
|
},
|
|
69
64
|
{
|
|
70
65
|
path: 'page-form',
|
|
71
|
-
loadComponent: () => import('./cloud-ide-core-page-form.component-
|
|
66
|
+
loadComponent: () => import('./cloud-ide-core-page-form.component-BNWWV012.mjs').then(c => c.CideCorePageFormComponent),
|
|
72
67
|
title: 'Page Form',
|
|
73
68
|
canActivate: [authGuard],
|
|
74
69
|
data: {
|
|
75
|
-
reuseTab: true,
|
|
76
70
|
sypg_page_code: "core_page_management"
|
|
77
71
|
}
|
|
78
72
|
},
|
|
79
73
|
{
|
|
80
74
|
path: 'page-form/:query',
|
|
81
|
-
loadComponent: () => import('./cloud-ide-core-page-form.component-
|
|
75
|
+
loadComponent: () => import('./cloud-ide-core-page-form.component-BNWWV012.mjs').then(c => c.CideCorePageFormComponent),
|
|
82
76
|
title: 'Page Form',
|
|
83
77
|
canActivate: [authGuard],
|
|
84
78
|
data: {
|
|
85
|
-
reuseTab: true,
|
|
86
79
|
sypg_page_code: "core_page_management"
|
|
87
80
|
}
|
|
88
81
|
},
|
|
@@ -92,7 +85,6 @@ const coreRoutes = [
|
|
|
92
85
|
title: 'Page Theme Management',
|
|
93
86
|
canActivate: [authGuard],
|
|
94
87
|
data: {
|
|
95
|
-
reuseTab: true,
|
|
96
88
|
sypg_page_code: "core_page_theme"
|
|
97
89
|
}
|
|
98
90
|
},
|
|
@@ -102,7 +94,6 @@ const coreRoutes = [
|
|
|
102
94
|
title: 'Page Theme Management',
|
|
103
95
|
canActivate: [authGuard],
|
|
104
96
|
data: {
|
|
105
|
-
reuseTab: true,
|
|
106
97
|
sypg_page_code: "core_page_theme"
|
|
107
98
|
}
|
|
108
99
|
},
|
|
@@ -112,7 +103,6 @@ const coreRoutes = [
|
|
|
112
103
|
title: 'Page Controls Management',
|
|
113
104
|
canActivate: [authGuard],
|
|
114
105
|
data: {
|
|
115
|
-
reuseTab: true,
|
|
116
106
|
sypg_page_code: "core_page_controls"
|
|
117
107
|
}
|
|
118
108
|
},
|
|
@@ -122,7 +112,6 @@ const coreRoutes = [
|
|
|
122
112
|
title: 'Page Controls Management',
|
|
123
113
|
canActivate: [authGuard],
|
|
124
114
|
data: {
|
|
125
|
-
reuseTab: true,
|
|
126
115
|
sypg_page_code: "core_page_controls"
|
|
127
116
|
}
|
|
128
117
|
},
|
|
@@ -132,7 +121,6 @@ const coreRoutes = [
|
|
|
132
121
|
title: 'General Master Entry',
|
|
133
122
|
canActivate: [authGuard],
|
|
134
123
|
data: {
|
|
135
|
-
reuseTab: true,
|
|
136
124
|
sypg_page_code: "core_general_master"
|
|
137
125
|
}
|
|
138
126
|
},
|
|
@@ -142,7 +130,6 @@ const coreRoutes = [
|
|
|
142
130
|
title: 'General Master Entry',
|
|
143
131
|
canActivate: [authGuard],
|
|
144
132
|
data: {
|
|
145
|
-
reuseTab: true,
|
|
146
133
|
sypg_page_code: "core_general_master"
|
|
147
134
|
}
|
|
148
135
|
},
|
|
@@ -152,7 +139,6 @@ const coreRoutes = [
|
|
|
152
139
|
title: 'General Type Entry',
|
|
153
140
|
canActivate: [authGuard],
|
|
154
141
|
data: {
|
|
155
|
-
reuseTab: true,
|
|
156
142
|
sypg_page_code: "core_general_master_type"
|
|
157
143
|
}
|
|
158
144
|
},
|
|
@@ -162,7 +148,6 @@ const coreRoutes = [
|
|
|
162
148
|
title: 'General Type Entry',
|
|
163
149
|
canActivate: [authGuard],
|
|
164
150
|
data: {
|
|
165
|
-
reuseTab: true,
|
|
166
151
|
sypg_page_code: "core_general_master_type"
|
|
167
152
|
}
|
|
168
153
|
},
|
|
@@ -173,7 +158,6 @@ const coreRoutes = [
|
|
|
173
158
|
title: 'User Management',
|
|
174
159
|
canActivate: [authGuard],
|
|
175
160
|
data: {
|
|
176
|
-
reuseTab: true,
|
|
177
161
|
sypg_page_code: "auth_user_mst"
|
|
178
162
|
}
|
|
179
163
|
},
|
|
@@ -183,7 +167,6 @@ const coreRoutes = [
|
|
|
183
167
|
title: 'Create User',
|
|
184
168
|
canActivate: [authGuard],
|
|
185
169
|
data: {
|
|
186
|
-
reuseTab: true,
|
|
187
170
|
sypg_page_code: "core_user_management_create"
|
|
188
171
|
}
|
|
189
172
|
},
|
|
@@ -193,7 +176,6 @@ const coreRoutes = [
|
|
|
193
176
|
title: 'Edit User',
|
|
194
177
|
canActivate: [authGuard],
|
|
195
178
|
data: {
|
|
196
|
-
reuseTab: true,
|
|
197
179
|
sypg_page_code: "core_user_management_create"
|
|
198
180
|
}
|
|
199
181
|
},
|
|
@@ -203,7 +185,6 @@ const coreRoutes = [
|
|
|
203
185
|
title: 'View User',
|
|
204
186
|
canActivate: [authGuard],
|
|
205
187
|
data: {
|
|
206
|
-
reuseTab: true,
|
|
207
188
|
sypg_page_code: "core_user_management_create"
|
|
208
189
|
}
|
|
209
190
|
},
|
|
@@ -212,7 +193,6 @@ const coreRoutes = [
|
|
|
212
193
|
loadComponent: () => Promise.resolve().then(function () { return entityList_component; }).then(c => c.CideCoreEntityListComponent),
|
|
213
194
|
canActivate: [authGuard],
|
|
214
195
|
data: {
|
|
215
|
-
reuseTab: true,
|
|
216
196
|
sypg_page_code: "admin_entity_list"
|
|
217
197
|
}
|
|
218
198
|
},
|
|
@@ -221,7 +201,6 @@ const coreRoutes = [
|
|
|
221
201
|
loadComponent: () => Promise.resolve().then(function () { return entityCreate_component; }).then(c => c.CideCoreEntityCreateComponent),
|
|
222
202
|
canActivate: [authGuard],
|
|
223
203
|
data: {
|
|
224
|
-
reuseTab: true,
|
|
225
204
|
sypg_page_code: "core_entity_form"
|
|
226
205
|
}
|
|
227
206
|
},
|
|
@@ -230,7 +209,6 @@ const coreRoutes = [
|
|
|
230
209
|
loadComponent: () => Promise.resolve().then(function () { return entityCreate_component; }).then(c => c.CideCoreEntityCreateComponent),
|
|
231
210
|
canActivate: [authGuard],
|
|
232
211
|
data: {
|
|
233
|
-
reuseTab: true,
|
|
234
212
|
sypg_page_code: "core_entity_form"
|
|
235
213
|
}
|
|
236
214
|
},
|
|
@@ -240,7 +218,6 @@ const coreRoutes = [
|
|
|
240
218
|
title: 'Organization Structure',
|
|
241
219
|
canActivate: [authGuard],
|
|
242
220
|
data: {
|
|
243
|
-
reuseTab: true,
|
|
244
221
|
sypg_page_code: "core_org_structure"
|
|
245
222
|
}
|
|
246
223
|
},
|
|
@@ -251,7 +228,6 @@ const coreRoutes = [
|
|
|
251
228
|
title: 'User Role Management',
|
|
252
229
|
canActivate: [authGuard],
|
|
253
230
|
data: {
|
|
254
|
-
reuseTab: true,
|
|
255
231
|
sypg_page_code: "core_user_role"
|
|
256
232
|
}
|
|
257
233
|
},
|
|
@@ -261,7 +237,6 @@ const coreRoutes = [
|
|
|
261
237
|
title: 'Create User Role',
|
|
262
238
|
canActivate: [authGuard],
|
|
263
239
|
data: {
|
|
264
|
-
reuseTab: true,
|
|
265
240
|
sypg_page_code: "core_user_role"
|
|
266
241
|
}
|
|
267
242
|
},
|
|
@@ -271,7 +246,6 @@ const coreRoutes = [
|
|
|
271
246
|
title: 'Edit User Role',
|
|
272
247
|
canActivate: [authGuard],
|
|
273
248
|
data: {
|
|
274
|
-
reuseTab: true,
|
|
275
249
|
sypg_page_code: "core_user_role"
|
|
276
250
|
}
|
|
277
251
|
},
|
|
@@ -281,7 +255,6 @@ const coreRoutes = [
|
|
|
281
255
|
title: 'View User Role',
|
|
282
256
|
canActivate: [authGuard],
|
|
283
257
|
data: {
|
|
284
|
-
reuseTab: true,
|
|
285
258
|
sypg_page_code: "core_user_role_view"
|
|
286
259
|
}
|
|
287
260
|
}
|
|
@@ -289,10 +262,10 @@ const coreRoutes = [
|
|
|
289
262
|
|
|
290
263
|
class CloudIdeCoreService {
|
|
291
264
|
constructor() { }
|
|
292
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
293
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.
|
|
265
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CloudIdeCoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
266
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CloudIdeCoreService, providedIn: 'root' });
|
|
294
267
|
}
|
|
295
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
268
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CloudIdeCoreService, decorators: [{
|
|
296
269
|
type: Injectable,
|
|
297
270
|
args: [{
|
|
298
271
|
providedIn: 'root'
|
|
@@ -300,14 +273,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
300
273
|
}], ctorParameters: () => [] });
|
|
301
274
|
|
|
302
275
|
class CloudIdeCoreComponent {
|
|
303
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
304
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.
|
|
276
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CloudIdeCoreComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
277
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: CloudIdeCoreComponent, isStandalone: true, selector: "cide-core", ngImport: i0, template: `
|
|
305
278
|
<p>
|
|
306
279
|
cloud-ide-core works!
|
|
307
280
|
</p>
|
|
308
281
|
`, isInline: true, styles: [""] });
|
|
309
282
|
}
|
|
310
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
283
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CloudIdeCoreComponent, decorators: [{
|
|
311
284
|
type: Component,
|
|
312
285
|
args: [{ selector: 'cide-core', standalone: true, imports: [], template: `
|
|
313
286
|
<p>
|
|
@@ -525,10 +498,10 @@ class MenuManagementService {
|
|
|
525
498
|
console.error('Menu Management Service Error:', errorMessage);
|
|
526
499
|
return throwError(() => new Error(errorMessage));
|
|
527
500
|
}
|
|
528
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
529
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.
|
|
501
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MenuManagementService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
502
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MenuManagementService, providedIn: 'root' });
|
|
530
503
|
}
|
|
531
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
504
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MenuManagementService, decorators: [{
|
|
532
505
|
type: Injectable,
|
|
533
506
|
args: [{
|
|
534
507
|
providedIn: 'root'
|
|
@@ -685,10 +658,10 @@ class CideCoreGeneralMasterService {
|
|
|
685
658
|
console.error('General Master Service Error:', errorMessage);
|
|
686
659
|
return throwError(() => new Error(errorMessage));
|
|
687
660
|
}
|
|
688
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
689
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.
|
|
661
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreGeneralMasterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
662
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreGeneralMasterService, providedIn: 'root' });
|
|
690
663
|
}
|
|
691
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
664
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreGeneralMasterService, decorators: [{
|
|
692
665
|
type: Injectable,
|
|
693
666
|
args: [{
|
|
694
667
|
providedIn: 'root'
|
|
@@ -882,10 +855,10 @@ class CideCoreGeneralMasterTypeService {
|
|
|
882
855
|
console.error('General Master Type Service Error:', errorMessage);
|
|
883
856
|
return throwError(() => new Error(errorMessage));
|
|
884
857
|
}
|
|
885
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
886
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.
|
|
858
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreGeneralMasterTypeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
859
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreGeneralMasterTypeService, providedIn: 'root' });
|
|
887
860
|
}
|
|
888
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
861
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreGeneralMasterTypeService, decorators: [{
|
|
889
862
|
type: Injectable,
|
|
890
863
|
args: [{
|
|
891
864
|
providedIn: 'root'
|
|
@@ -2186,10 +2159,10 @@ class MenuListComponent {
|
|
|
2186
2159
|
break;
|
|
2187
2160
|
}
|
|
2188
2161
|
}
|
|
2189
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
2190
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: MenuListComponent, isStandalone: true, selector: "cide-core-app-menu-list", viewQueries: [{ propertyName: "menuDetailsRendererTemplate", first: true, predicate: ["menuDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "menuTypeRendererTemplate", first: true, predicate: ["menuTypeRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "permissionsRendererTemplate", first: true, predicate: ["permissionsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Menu List Container -->\r\n<div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Quick Add Form Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Menu Item' : 'Quick Add Menu Item' }}</h6>\r\n </div>\r\n @if (selectedParentItem()) {\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-2 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child under:' }}</span>\r\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ selectedParentItem()?.syme_title }}</span>\r\n </div>\r\n <button \r\n cideEleButton \r\n variant=\"ghost\" \r\n size=\"xs\" \r\n type=\"button\" \r\n (click)=\"clearSelectedParent()\" \r\n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\r\n <svg class=\"tw-w-4 tw-h-4\" 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\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n \r\n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddMenuItem()\">\r\n <!-- First Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\r\n <!-- Menu Title -->\r\n <div>\r\n <cide-ele-input \r\n id=\"syme_title\" \r\n label=\"Title\" \r\n formControlName=\"syme_title\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Menu Type -->\r\n <div>\r\n <cide-ele-select \r\n label=\"Type*\" \r\n [options]=\"menuTypeOptions()\" \r\n formControlName=\"syme_type\"\r\n placeholder=\"Select type\"\r\n size=\"sm\"\r\n (ngModelChange)=\"onMenuTypeChange()\">\r\n </cide-ele-select>\r\n </div>\r\n \r\n <!-- Path -->\r\n <div>\r\n <cide-ele-input \r\n id=\"quickPath\" \r\n type=\"text\"\r\n label=\"Path\" \r\n formControlName=\"syme_path\"\r\n placeholder=\"/path/to/route\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Icon -->\r\n <div>\r\n <cide-ele-input \r\n id=\"quickIcon\" \r\n type=\"text\"\r\n label=\"Icon\" \r\n formControlName=\"syme_icon\"\r\n placeholder=\"Icon name\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Empty div for spacing -->\r\n <div></div>\r\n </div>\r\n \r\n <!-- Second Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\r\n <!-- Description -->\r\n <div>\r\n <cide-ele-textarea \r\n id=\"syme_desc\" \r\n label=\"Description\" \r\n formControlName=\"syme_desc\"\r\n placeholder=\"Menu description\"\r\n rows=\"2\"\r\n size=\"sm\">\r\n </cide-ele-textarea>\r\n </div>\r\n \r\n <!-- Permissions (only show for menu and title types) -->\r\n @if (quickAddForm.get('syme_type')?.value === 'menu') {\r\n <div>\r\n <cide-ele-select \r\n label=\"Permissions\" \r\n [options]=\"permissionOptions()\" \r\n formControlName=\"syme_permissions_id_sygms\"\r\n placeholder=\"Select permissions for this menu\"\r\n [multiple]=\"true\"\r\n size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n }\r\n \r\n <!-- Link -->\r\n <div>\r\n <cide-ele-input \r\n id=\"quickLink\" \r\n type=\"text\"\r\n label=\"Link\" \r\n formControlName=\"syme_link\"\r\n placeholder=\"External link\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Active Status and Action Buttons -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <!-- Active Checkbox -->\r\n <cide-ele-input \r\n id=\"quickIsActive\"\r\n type=\"checkbox\"\r\n label=\"Active\"\r\n formControlName=\"syme_isactive\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n \r\n <!-- Action Buttons -->\r\n <button \r\n cideEleButton \r\n variant=\"primary\" \r\n size=\"sm\" \r\n type=\"submit\"\r\n [disabled]=\"quickAddForm.invalid\"\r\n class=\"tw-px-2 tw-py-1 tw-w-20\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update' : 'Add' }}\r\n </button>\r\n <button \r\n cideEleButton \r\n variant=\"outline\" \r\n size=\"sm\" \r\n type=\"button\"\r\n (click)=\"resetQuickAddForm()\"\r\n class=\"tw-px-2 tw-py-1 tw-w-16\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\r\n Reset\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative tw-p-0\">\r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-w-full tw-overflow-auto\">\r\n \r\n <cide-ele-data-grid \r\n [config]=\"gridConfig()\" \r\n [templateRenderers]=\"getTemplateRenderers()\"\r\n [actionHandlers]=\"actionHandlers\"\r\n [dragDropEnabled]=\"true\" \r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- \r\n Angular Template References for Grid Renderers (Best Practice)\r\n \r\n These ng-template elements represent the Angular best practice for custom rendering.\r\n They provide:\r\n - Type safety with template context\r\n - Component lifecycle integration\r\n - Change detection optimization\r\n - Proper event handling\r\n - Accessibility features\r\n \r\n Note: Current data grid uses string renderers for compatibility.\r\n Templates are maintained for future component enhancement.\r\n-->\r\n\r\n\r\n\r\n<!-- Menu Details Renderer Template -->\r\n<ng-template #menuDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Menu Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon \r\n class=\"tw-text-gray-400\" \r\n size=\"xs\">\r\n {{ row.syme_icon || 'folder_open' }}\r\n </cide-ele-icon>\r\n </div>\r\n \r\n <!-- Menu Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-text-xs tw-font-medium tw-text-gray-900 tw-truncate\" \r\n [title]=\"row.syme_title\">\r\n {{ row.syme_title || 'Untitled' }}\r\n </div>\r\n @if (row.syme_desc) {\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \r\n [title]=\"row.syme_desc\">\r\n {{ row.syme_desc }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Menu Type Renderer Template -->\r\n<ng-template #menuTypeRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\r\n [ngClass]=\"getMenuTypeClass(row.syme_type)\">\r\n {{ getMenuTypeLabel(row.syme_type) }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown Renderer Template -->\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown \r\n [items]=\"getDropdownItems(row)\"\r\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n\r\n<!-- Permissions Renderer Template -->\r\n<ng-template #permissionsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-flex-wrap tw-gap-1 tw-max-w-full tw-items-center\">\r\n @if (row.syme_type === 'menu') {\r\n @if (row.syme_permissions_id_sygms && row.syme_permissions_id_sygms.length > 0) {\r\n @for (permissionId of row.syme_permissions_id_sygms.slice(0, 3); track permissionId) {\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800 tw-whitespace-nowrap tw-h-5\">\r\n {{ getPermissionById(permissionId)?.sygms_title || getPermissionById(permissionId)?.sygms_code || 'Unknown' }}\r\n </span>\r\n }\r\n @if (row.syme_permissions_id_sygms.length > 3) {\r\n <span \r\n class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-gray-100 tw-text-gray-600 tw-whitespace-nowrap tw-cursor-help tw-h-5\"\r\n [title]=\"getAllPermissionNames(row.syme_permissions_id_sygms)\">\r\n +{{ row.syme_permissions_id_sygms.length - 3 }} more\r\n </span>\r\n }\r\n } @else {\r\n <span class=\"tw-text-xs tw-text-gray-500 tw-h-5 tw-flex tw-items-center\">No permissions</span>\r\n }\r\n } @else {\r\n <!-- Show N/A for module, section, and title types -->\r\n <span class=\"tw-text-xs tw-text-gray-400 tw-h-5 tw-flex tw-items-center\">N/A</span>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { 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: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey"], outputs: ["ngModelChange", "change", "searchChange"] }, { 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: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }] });
|
|
2162
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MenuListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2163
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: MenuListComponent, isStandalone: true, selector: "cide-core-app-menu-list", viewQueries: [{ propertyName: "menuDetailsRendererTemplate", first: true, predicate: ["menuDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "menuTypeRendererTemplate", first: true, predicate: ["menuTypeRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "permissionsRendererTemplate", first: true, predicate: ["permissionsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Menu List Container -->\r\n<div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Quick Add Form Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Menu Item' : 'Quick Add Menu Item' }}</h6>\r\n </div>\r\n @if (selectedParentItem()) {\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-2 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child under:' }}</span>\r\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ selectedParentItem()?.syme_title }}</span>\r\n </div>\r\n <button \r\n cideEleButton \r\n variant=\"ghost\" \r\n size=\"xs\" \r\n type=\"button\" \r\n (click)=\"clearSelectedParent()\" \r\n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\r\n <svg class=\"tw-w-4 tw-h-4\" 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\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n \r\n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddMenuItem()\">\r\n <!-- First Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\r\n <!-- Menu Title -->\r\n <div>\r\n <cide-ele-input \r\n id=\"syme_title\" \r\n label=\"Title\" \r\n formControlName=\"syme_title\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Menu Type -->\r\n <div>\r\n <cide-ele-select \r\n label=\"Type*\" \r\n [options]=\"menuTypeOptions()\" \r\n formControlName=\"syme_type\"\r\n placeholder=\"Select type\"\r\n size=\"sm\"\r\n (ngModelChange)=\"onMenuTypeChange()\">\r\n </cide-ele-select>\r\n </div>\r\n \r\n <!-- Path -->\r\n <div>\r\n <cide-ele-input \r\n id=\"quickPath\" \r\n type=\"text\"\r\n label=\"Path\" \r\n formControlName=\"syme_path\"\r\n placeholder=\"/path/to/route\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Icon -->\r\n <div>\r\n <cide-ele-input \r\n id=\"quickIcon\" \r\n type=\"text\"\r\n label=\"Icon\" \r\n formControlName=\"syme_icon\"\r\n placeholder=\"Icon name\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Empty div for spacing -->\r\n <div></div>\r\n </div>\r\n \r\n <!-- Second Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\r\n <!-- Description -->\r\n <div>\r\n <cide-ele-textarea \r\n id=\"syme_desc\" \r\n label=\"Description\" \r\n formControlName=\"syme_desc\"\r\n placeholder=\"Menu description\"\r\n rows=\"2\"\r\n size=\"sm\">\r\n </cide-ele-textarea>\r\n </div>\r\n \r\n <!-- Permissions (only show for menu and title types) -->\r\n @if (quickAddForm.get('syme_type')?.value === 'menu') {\r\n <div>\r\n <cide-ele-select \r\n label=\"Permissions\" \r\n [options]=\"permissionOptions()\" \r\n formControlName=\"syme_permissions_id_sygms\"\r\n placeholder=\"Select permissions for this menu\"\r\n [multiple]=\"true\"\r\n size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n }\r\n \r\n <!-- Link -->\r\n <div>\r\n <cide-ele-input \r\n id=\"quickLink\" \r\n type=\"text\"\r\n label=\"Link\" \r\n formControlName=\"syme_link\"\r\n placeholder=\"External link\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Active Status and Action Buttons -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <!-- Active Checkbox -->\r\n <cide-ele-input \r\n id=\"quickIsActive\"\r\n type=\"checkbox\"\r\n label=\"Active\"\r\n formControlName=\"syme_isactive\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n \r\n <!-- Action Buttons -->\r\n <button \r\n cideEleButton \r\n variant=\"primary\" \r\n size=\"sm\" \r\n type=\"submit\"\r\n [disabled]=\"quickAddForm.invalid\"\r\n class=\"tw-px-2 tw-py-1 tw-w-20\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update' : 'Add' }}\r\n </button>\r\n <button \r\n cideEleButton \r\n variant=\"outline\" \r\n size=\"sm\" \r\n type=\"button\"\r\n (click)=\"resetQuickAddForm()\"\r\n class=\"tw-px-2 tw-py-1 tw-w-16\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\r\n Reset\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative tw-p-0\">\r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-w-full tw-overflow-auto\">\r\n \r\n <cide-ele-data-grid \r\n [config]=\"gridConfig()\" \r\n [templateRenderers]=\"getTemplateRenderers()\"\r\n [actionHandlers]=\"actionHandlers\"\r\n [dragDropEnabled]=\"true\" \r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- \r\n Angular Template References for Grid Renderers (Best Practice)\r\n \r\n These ng-template elements represent the Angular best practice for custom rendering.\r\n They provide:\r\n - Type safety with template context\r\n - Component lifecycle integration\r\n - Change detection optimization\r\n - Proper event handling\r\n - Accessibility features\r\n \r\n Note: Current data grid uses string renderers for compatibility.\r\n Templates are maintained for future component enhancement.\r\n-->\r\n\r\n\r\n\r\n<!-- Menu Details Renderer Template -->\r\n<ng-template #menuDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Menu Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon \r\n class=\"tw-text-gray-400\" \r\n size=\"xs\">\r\n {{ row.syme_icon || 'folder_open' }}\r\n </cide-ele-icon>\r\n </div>\r\n \r\n <!-- Menu Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-text-xs tw-font-medium tw-text-gray-900 tw-truncate\" \r\n [title]=\"row.syme_title\">\r\n {{ row.syme_title || 'Untitled' }}\r\n </div>\r\n @if (row.syme_desc) {\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \r\n [title]=\"row.syme_desc\">\r\n {{ row.syme_desc }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Menu Type Renderer Template -->\r\n<ng-template #menuTypeRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\r\n [ngClass]=\"getMenuTypeClass(row.syme_type)\">\r\n {{ getMenuTypeLabel(row.syme_type) }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown Renderer Template -->\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown \r\n [items]=\"getDropdownItems(row)\"\r\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n\r\n<!-- Permissions Renderer Template -->\r\n<ng-template #permissionsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-flex-wrap tw-gap-1 tw-max-w-full tw-items-center\">\r\n @if (row.syme_type === 'menu') {\r\n @if (row.syme_permissions_id_sygms && row.syme_permissions_id_sygms.length > 0) {\r\n @for (permissionId of row.syme_permissions_id_sygms.slice(0, 3); track permissionId) {\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800 tw-whitespace-nowrap tw-h-5\">\r\n {{ getPermissionById(permissionId)?.sygms_title || getPermissionById(permissionId)?.sygms_code || 'Unknown' }}\r\n </span>\r\n }\r\n @if (row.syme_permissions_id_sygms.length > 3) {\r\n <span \r\n class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-gray-100 tw-text-gray-600 tw-whitespace-nowrap tw-cursor-help tw-h-5\"\r\n [title]=\"getAllPermissionNames(row.syme_permissions_id_sygms)\">\r\n +{{ row.syme_permissions_id_sygms.length - 3 }} more\r\n </span>\r\n }\r\n } @else {\r\n <span class=\"tw-text-xs tw-text-gray-500 tw-h-5 tw-flex tw-items-center\">No permissions</span>\r\n }\r\n } @else {\r\n <!-- Show N/A for module, section, and title types -->\r\n <span class=\"tw-text-xs tw-text-gray-400 tw-h-5 tw-flex tw-items-center\">N/A</span>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { 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: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }, { 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: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }] });
|
|
2191
2164
|
}
|
|
2192
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
2165
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MenuListComponent, decorators: [{
|
|
2193
2166
|
type: Component,
|
|
2194
2167
|
args: [{ selector: 'cide-core-app-menu-list', standalone: true, imports: [
|
|
2195
2168
|
CommonModule,
|
|
@@ -2203,7 +2176,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
2203
2176
|
CideIconComponent,
|
|
2204
2177
|
CideEleDropdownComponent
|
|
2205
2178
|
], template: "<!-- Menu List Container -->\r\n<div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Quick Add Form Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Menu Item' : 'Quick Add Menu Item' }}</h6>\r\n </div>\r\n @if (selectedParentItem()) {\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-2 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child under:' }}</span>\r\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ selectedParentItem()?.syme_title }}</span>\r\n </div>\r\n <button \r\n cideEleButton \r\n variant=\"ghost\" \r\n size=\"xs\" \r\n type=\"button\" \r\n (click)=\"clearSelectedParent()\" \r\n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\r\n <svg class=\"tw-w-4 tw-h-4\" 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\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n \r\n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddMenuItem()\">\r\n <!-- First Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\r\n <!-- Menu Title -->\r\n <div>\r\n <cide-ele-input \r\n id=\"syme_title\" \r\n label=\"Title\" \r\n formControlName=\"syme_title\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Menu Type -->\r\n <div>\r\n <cide-ele-select \r\n label=\"Type*\" \r\n [options]=\"menuTypeOptions()\" \r\n formControlName=\"syme_type\"\r\n placeholder=\"Select type\"\r\n size=\"sm\"\r\n (ngModelChange)=\"onMenuTypeChange()\">\r\n </cide-ele-select>\r\n </div>\r\n \r\n <!-- Path -->\r\n <div>\r\n <cide-ele-input \r\n id=\"quickPath\" \r\n type=\"text\"\r\n label=\"Path\" \r\n formControlName=\"syme_path\"\r\n placeholder=\"/path/to/route\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Icon -->\r\n <div>\r\n <cide-ele-input \r\n id=\"quickIcon\" \r\n type=\"text\"\r\n label=\"Icon\" \r\n formControlName=\"syme_icon\"\r\n placeholder=\"Icon name\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Empty div for spacing -->\r\n <div></div>\r\n </div>\r\n \r\n <!-- Second Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\r\n <!-- Description -->\r\n <div>\r\n <cide-ele-textarea \r\n id=\"syme_desc\" \r\n label=\"Description\" \r\n formControlName=\"syme_desc\"\r\n placeholder=\"Menu description\"\r\n rows=\"2\"\r\n size=\"sm\">\r\n </cide-ele-textarea>\r\n </div>\r\n \r\n <!-- Permissions (only show for menu and title types) -->\r\n @if (quickAddForm.get('syme_type')?.value === 'menu') {\r\n <div>\r\n <cide-ele-select \r\n label=\"Permissions\" \r\n [options]=\"permissionOptions()\" \r\n formControlName=\"syme_permissions_id_sygms\"\r\n placeholder=\"Select permissions for this menu\"\r\n [multiple]=\"true\"\r\n size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n }\r\n \r\n <!-- Link -->\r\n <div>\r\n <cide-ele-input \r\n id=\"quickLink\" \r\n type=\"text\"\r\n label=\"Link\" \r\n formControlName=\"syme_link\"\r\n placeholder=\"External link\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Active Status and Action Buttons -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <!-- Active Checkbox -->\r\n <cide-ele-input \r\n id=\"quickIsActive\"\r\n type=\"checkbox\"\r\n label=\"Active\"\r\n formControlName=\"syme_isactive\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n \r\n <!-- Action Buttons -->\r\n <button \r\n cideEleButton \r\n variant=\"primary\" \r\n size=\"sm\" \r\n type=\"submit\"\r\n [disabled]=\"quickAddForm.invalid\"\r\n class=\"tw-px-2 tw-py-1 tw-w-20\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update' : 'Add' }}\r\n </button>\r\n <button \r\n cideEleButton \r\n variant=\"outline\" \r\n size=\"sm\" \r\n type=\"button\"\r\n (click)=\"resetQuickAddForm()\"\r\n class=\"tw-px-2 tw-py-1 tw-w-16\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\r\n Reset\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative tw-p-0\">\r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-w-full tw-overflow-auto\">\r\n \r\n <cide-ele-data-grid \r\n [config]=\"gridConfig()\" \r\n [templateRenderers]=\"getTemplateRenderers()\"\r\n [actionHandlers]=\"actionHandlers\"\r\n [dragDropEnabled]=\"true\" \r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- \r\n Angular Template References for Grid Renderers (Best Practice)\r\n \r\n These ng-template elements represent the Angular best practice for custom rendering.\r\n They provide:\r\n - Type safety with template context\r\n - Component lifecycle integration\r\n - Change detection optimization\r\n - Proper event handling\r\n - Accessibility features\r\n \r\n Note: Current data grid uses string renderers for compatibility.\r\n Templates are maintained for future component enhancement.\r\n-->\r\n\r\n\r\n\r\n<!-- Menu Details Renderer Template -->\r\n<ng-template #menuDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Menu Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon \r\n class=\"tw-text-gray-400\" \r\n size=\"xs\">\r\n {{ row.syme_icon || 'folder_open' }}\r\n </cide-ele-icon>\r\n </div>\r\n \r\n <!-- Menu Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-text-xs tw-font-medium tw-text-gray-900 tw-truncate\" \r\n [title]=\"row.syme_title\">\r\n {{ row.syme_title || 'Untitled' }}\r\n </div>\r\n @if (row.syme_desc) {\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \r\n [title]=\"row.syme_desc\">\r\n {{ row.syme_desc }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Menu Type Renderer Template -->\r\n<ng-template #menuTypeRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\r\n [ngClass]=\"getMenuTypeClass(row.syme_type)\">\r\n {{ getMenuTypeLabel(row.syme_type) }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown Renderer Template -->\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown \r\n [items]=\"getDropdownItems(row)\"\r\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n\r\n<!-- Permissions Renderer Template -->\r\n<ng-template #permissionsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-flex-wrap tw-gap-1 tw-max-w-full tw-items-center\">\r\n @if (row.syme_type === 'menu') {\r\n @if (row.syme_permissions_id_sygms && row.syme_permissions_id_sygms.length > 0) {\r\n @for (permissionId of row.syme_permissions_id_sygms.slice(0, 3); track permissionId) {\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800 tw-whitespace-nowrap tw-h-5\">\r\n {{ getPermissionById(permissionId)?.sygms_title || getPermissionById(permissionId)?.sygms_code || 'Unknown' }}\r\n </span>\r\n }\r\n @if (row.syme_permissions_id_sygms.length > 3) {\r\n <span \r\n class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-gray-100 tw-text-gray-600 tw-whitespace-nowrap tw-cursor-help tw-h-5\"\r\n [title]=\"getAllPermissionNames(row.syme_permissions_id_sygms)\">\r\n +{{ row.syme_permissions_id_sygms.length - 3 }} more\r\n </span>\r\n }\r\n } @else {\r\n <span class=\"tw-text-xs tw-text-gray-500 tw-h-5 tw-flex tw-items-center\">No permissions</span>\r\n }\r\n } @else {\r\n <!-- Show N/A for module, section, and title types -->\r\n <span class=\"tw-text-xs tw-text-gray-400 tw-h-5 tw-flex tw-items-center\">N/A</span>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n" }]
|
|
2206
|
-
}], ctorParameters: () => [] });
|
|
2179
|
+
}], ctorParameters: () => [], propDecorators: { menuDetailsRendererTemplate: [{ type: i0.ViewChild, args: ['menuDetailsRendererTemplate', { isSignal: true }] }], menuTypeRendererTemplate: [{ type: i0.ViewChild, args: ['menuTypeRendererTemplate', { isSignal: true }] }], permissionsRendererTemplate: [{ type: i0.ViewChild, args: ['permissionsRendererTemplate', { isSignal: true }] }], actionsDropdownRendererTemplate: [{ type: i0.ViewChild, args: ['actionsDropdownRendererTemplate', { isSignal: true }] }] } });
|
|
2207
2180
|
|
|
2208
2181
|
var menuList_component = /*#__PURE__*/Object.freeze({
|
|
2209
2182
|
__proto__: null,
|
|
@@ -2387,10 +2360,10 @@ class CideCoreDepartmentManagementService {
|
|
|
2387
2360
|
console.error('Department Management Service Error:', errorMessage);
|
|
2388
2361
|
return throwError(() => new Error(errorMessage));
|
|
2389
2362
|
}
|
|
2390
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
2391
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.
|
|
2363
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreDepartmentManagementService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2364
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreDepartmentManagementService, providedIn: 'root' });
|
|
2392
2365
|
}
|
|
2393
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
2366
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreDepartmentManagementService, decorators: [{
|
|
2394
2367
|
type: Injectable,
|
|
2395
2368
|
args: [{
|
|
2396
2369
|
providedIn: 'root'
|
|
@@ -3135,10 +3108,10 @@ class CideCoreDepartmentListComponent {
|
|
|
3135
3108
|
trackByItemId(index, item) {
|
|
3136
3109
|
return item._id || '';
|
|
3137
3110
|
}
|
|
3138
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
3139
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideCoreDepartmentListComponent, isStandalone: true, selector: "cide-core-department-list", viewQueries: [{ propertyName: "departmentDetailsRendererTemplate", first: true, predicate: ["departmentDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "departmentStatusRendererTemplate", first: true, predicate: ["departmentStatusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Department List with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_department_list' }\">\r\n <div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n<!-- Global Notifications -->\r\n<cide-ele-global-notifications></cide-ele-global-notifications>\r\n\r\n <!-- Quick Add Form Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Department' : 'Quick Add Department' }}</h6>\r\n </div>\r\n @if (selectedParentDepartment()) {\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child under:' }}</span>\r\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ selectedParentDepartment()?.sydept_name }}</span>\r\n </div>\r\n <button \r\n cideEleButton \r\n variant=\"ghost\" \r\n size=\"xs\" \r\n type=\"button\" \r\n (click)=\"clearSelectedParent()\" \r\n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\r\n <svg class=\"tw-w-4 tw-h-4\" 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\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n \r\n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddDepartment()\">\r\n <!-- First Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\r\n <!-- Department Code -->\r\n <div>\r\n <cide-ele-input \r\n id=\"sydept_code\" \r\n label=\"Code*\" \r\n formControlName=\"sydept_code\"\r\n placeholder=\"DEPT001\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Department Name -->\r\n <div>\r\n <cide-ele-input \r\n id=\"sydept_name\" \r\n label=\"Name*\" \r\n formControlName=\"sydept_name\"\r\n placeholder=\"Department name\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n\r\n \r\n <!-- Active Status -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\r\n <cide-ele-input \r\n id=\"sydept_isactive\"\r\n type=\"checkbox\"\r\n label=\"Active\"\r\n formControlName=\"sydept_isactive\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Second Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\r\n <!-- Description -->\r\n <div>\r\n <cide-ele-textarea \r\n id=\"sydept_description\" \r\n label=\"Description\" \r\n formControlName=\"sydept_description\"\r\n placeholder=\"Department description\"\r\n rows=\"2\"\r\n size=\"sm\">\r\n </cide-ele-textarea>\r\n </div>\r\n \r\n\r\n \r\n <!-- Action Buttons -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\r\n <div class=\"tw-flex tw-space-x-2\">\r\n <button \r\n cideEleButton \r\n variant=\"primary\" \r\n size=\"sm\" \r\n type=\"submit\"\r\n [disabled]=\"quickAddForm.invalid\"\r\n class=\"tw-px-2 tw-py-1 tw-w-20\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update' : 'Add' }}\r\n </button>\r\n <button \r\n cideEleButton \r\n variant=\"outline\" \r\n size=\"sm\" \r\n type=\"button\"\r\n (click)=\"resetQuickAddForm()\"\r\n class=\"tw-px-2 tw-py-1 tw-w-16\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\r\n Reset\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n\r\n <!-- Actions -->\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <!-- Search functionality is handled by the data grid -->\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n \r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n \r\n <cide-ele-data-grid \r\n [config]=\"gridConfig()\" \r\n [templateRenderers]=\"getTemplateRenderers()\"\r\n [actionHandlers]=\"actionHandlers\"\r\n [serverSidePagination]=\"true\" \r\n [totalServerItems]=\"totalItems()\" \r\n [currentServerPage]=\"currentPage()\"\r\n [currentServerPageSize]=\"pageSize()\" \r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- Department Details Renderer Template -->\r\n<ng-template #departmentDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Department Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon \r\n class=\"tw-text-gray-400\" \r\n size=\"xs\">\r\n business\r\n </cide-ele-icon>\r\n </div>\r\n \r\n <!-- Department Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \r\n [title]=\"row.sydept_name\">\r\n {{ row.sydept_name || 'Untitled' }}\r\n </div>\r\n @if (row.sydept_description) {\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \r\n [title]=\"row.sydept_description\">\r\n {{ row.sydept_description }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Department Status Renderer Template -->\r\n<ng-template #departmentStatusRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\r\n [ngClass]=\"getStatusClass(row.sydept_isactive)\">\r\n {{ getStatusDisplay(row.sydept_isactive) }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown Renderer Template -->\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown \r\n [items]=\"getDropdownItems(row)\"\r\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n</cide-lyt-shared-wrapper> ", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { 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: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "component", type: CideEleGlobalNotificationsComponent, selector: "cide-ele-global-notifications" }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
|
|
3111
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreDepartmentListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3112
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CideCoreDepartmentListComponent, isStandalone: true, selector: "cide-core-department-list", viewQueries: [{ propertyName: "departmentDetailsRendererTemplate", first: true, predicate: ["departmentDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "departmentStatusRendererTemplate", first: true, predicate: ["departmentStatusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Department List with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_department_list' }\">\r\n <div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n<!-- Global Notifications -->\r\n<cide-ele-global-notifications></cide-ele-global-notifications>\r\n\r\n <!-- Quick Add Form Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Department' : 'Quick Add Department' }}</h6>\r\n </div>\r\n @if (selectedParentDepartment()) {\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child under:' }}</span>\r\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ selectedParentDepartment()?.sydept_name }}</span>\r\n </div>\r\n <button \r\n cideEleButton \r\n variant=\"ghost\" \r\n size=\"xs\" \r\n type=\"button\" \r\n (click)=\"clearSelectedParent()\" \r\n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\r\n <svg class=\"tw-w-4 tw-h-4\" 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\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n \r\n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddDepartment()\">\r\n <!-- First Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\r\n <!-- Department Code -->\r\n <div>\r\n <cide-ele-input \r\n id=\"sydept_code\" \r\n label=\"Code*\" \r\n formControlName=\"sydept_code\"\r\n placeholder=\"DEPT001\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Department Name -->\r\n <div>\r\n <cide-ele-input \r\n id=\"sydept_name\" \r\n label=\"Name*\" \r\n formControlName=\"sydept_name\"\r\n placeholder=\"Department name\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n\r\n \r\n <!-- Active Status -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\r\n <cide-ele-input \r\n id=\"sydept_isactive\"\r\n type=\"checkbox\"\r\n label=\"Active\"\r\n formControlName=\"sydept_isactive\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Second Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\r\n <!-- Description -->\r\n <div>\r\n <cide-ele-textarea \r\n id=\"sydept_description\" \r\n label=\"Description\" \r\n formControlName=\"sydept_description\"\r\n placeholder=\"Department description\"\r\n rows=\"2\"\r\n size=\"sm\">\r\n </cide-ele-textarea>\r\n </div>\r\n \r\n\r\n \r\n <!-- Action Buttons -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\r\n <div class=\"tw-flex tw-space-x-2\">\r\n <button \r\n cideEleButton \r\n variant=\"primary\" \r\n size=\"sm\" \r\n type=\"submit\"\r\n [disabled]=\"quickAddForm.invalid\"\r\n class=\"tw-px-2 tw-py-1 tw-w-20\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update' : 'Add' }}\r\n </button>\r\n <button \r\n cideEleButton \r\n variant=\"outline\" \r\n size=\"sm\" \r\n type=\"button\"\r\n (click)=\"resetQuickAddForm()\"\r\n class=\"tw-px-2 tw-py-1 tw-w-16\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\r\n Reset\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n\r\n <!-- Actions -->\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <!-- Search functionality is handled by the data grid -->\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n \r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n \r\n <cide-ele-data-grid \r\n [config]=\"gridConfig()\" \r\n [templateRenderers]=\"getTemplateRenderers()\"\r\n [actionHandlers]=\"actionHandlers\"\r\n [serverSidePagination]=\"true\" \r\n [totalServerItems]=\"totalItems()\" \r\n [currentServerPage]=\"currentPage()\"\r\n [currentServerPageSize]=\"pageSize()\" \r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- Department Details Renderer Template -->\r\n<ng-template #departmentDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Department Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon \r\n class=\"tw-text-gray-400\" \r\n size=\"xs\">\r\n business\r\n </cide-ele-icon>\r\n </div>\r\n \r\n <!-- Department Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \r\n [title]=\"row.sydept_name\">\r\n {{ row.sydept_name || 'Untitled' }}\r\n </div>\r\n @if (row.sydept_description) {\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \r\n [title]=\"row.sydept_description\">\r\n {{ row.sydept_description }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Department Status Renderer Template -->\r\n<ng-template #departmentStatusRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\r\n [ngClass]=\"getStatusClass(row.sydept_isactive)\">\r\n {{ getStatusDisplay(row.sydept_isactive) }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown Renderer Template -->\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown \r\n [items]=\"getDropdownItems(row)\"\r\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n</cide-lyt-shared-wrapper> ", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { 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: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "component", type: CideEleGlobalNotificationsComponent, selector: "cide-ele-global-notifications" }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
|
|
3140
3113
|
}
|
|
3141
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
3114
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreDepartmentListComponent, decorators: [{
|
|
3142
3115
|
type: Component,
|
|
3143
3116
|
args: [{ selector: 'cide-core-department-list', standalone: true, imports: [
|
|
3144
3117
|
CommonModule,
|
|
@@ -3153,7 +3126,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
3153
3126
|
CideEleGlobalNotificationsComponent,
|
|
3154
3127
|
CideLytSharedWrapperComponent
|
|
3155
3128
|
], template: "<!-- Department List with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_department_list' }\">\r\n <div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n<!-- Global Notifications -->\r\n<cide-ele-global-notifications></cide-ele-global-notifications>\r\n\r\n <!-- Quick Add Form Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Department' : 'Quick Add Department' }}</h6>\r\n </div>\r\n @if (selectedParentDepartment()) {\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child under:' }}</span>\r\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ selectedParentDepartment()?.sydept_name }}</span>\r\n </div>\r\n <button \r\n cideEleButton \r\n variant=\"ghost\" \r\n size=\"xs\" \r\n type=\"button\" \r\n (click)=\"clearSelectedParent()\" \r\n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\r\n <svg class=\"tw-w-4 tw-h-4\" 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\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n \r\n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddDepartment()\">\r\n <!-- First Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\r\n <!-- Department Code -->\r\n <div>\r\n <cide-ele-input \r\n id=\"sydept_code\" \r\n label=\"Code*\" \r\n formControlName=\"sydept_code\"\r\n placeholder=\"DEPT001\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Department Name -->\r\n <div>\r\n <cide-ele-input \r\n id=\"sydept_name\" \r\n label=\"Name*\" \r\n formControlName=\"sydept_name\"\r\n placeholder=\"Department name\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n\r\n \r\n <!-- Active Status -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\r\n <cide-ele-input \r\n id=\"sydept_isactive\"\r\n type=\"checkbox\"\r\n label=\"Active\"\r\n formControlName=\"sydept_isactive\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Second Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\r\n <!-- Description -->\r\n <div>\r\n <cide-ele-textarea \r\n id=\"sydept_description\" \r\n label=\"Description\" \r\n formControlName=\"sydept_description\"\r\n placeholder=\"Department description\"\r\n rows=\"2\"\r\n size=\"sm\">\r\n </cide-ele-textarea>\r\n </div>\r\n \r\n\r\n \r\n <!-- Action Buttons -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\r\n <div class=\"tw-flex tw-space-x-2\">\r\n <button \r\n cideEleButton \r\n variant=\"primary\" \r\n size=\"sm\" \r\n type=\"submit\"\r\n [disabled]=\"quickAddForm.invalid\"\r\n class=\"tw-px-2 tw-py-1 tw-w-20\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update' : 'Add' }}\r\n </button>\r\n <button \r\n cideEleButton \r\n variant=\"outline\" \r\n size=\"sm\" \r\n type=\"button\"\r\n (click)=\"resetQuickAddForm()\"\r\n class=\"tw-px-2 tw-py-1 tw-w-16\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\r\n Reset\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n\r\n <!-- Actions -->\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <!-- Search functionality is handled by the data grid -->\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n \r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n \r\n <cide-ele-data-grid \r\n [config]=\"gridConfig()\" \r\n [templateRenderers]=\"getTemplateRenderers()\"\r\n [actionHandlers]=\"actionHandlers\"\r\n [serverSidePagination]=\"true\" \r\n [totalServerItems]=\"totalItems()\" \r\n [currentServerPage]=\"currentPage()\"\r\n [currentServerPageSize]=\"pageSize()\" \r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- Department Details Renderer Template -->\r\n<ng-template #departmentDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Department Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon \r\n class=\"tw-text-gray-400\" \r\n size=\"xs\">\r\n business\r\n </cide-ele-icon>\r\n </div>\r\n \r\n <!-- Department Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \r\n [title]=\"row.sydept_name\">\r\n {{ row.sydept_name || 'Untitled' }}\r\n </div>\r\n @if (row.sydept_description) {\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \r\n [title]=\"row.sydept_description\">\r\n {{ row.sydept_description }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Department Status Renderer Template -->\r\n<ng-template #departmentStatusRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\r\n [ngClass]=\"getStatusClass(row.sydept_isactive)\">\r\n {{ getStatusDisplay(row.sydept_isactive) }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown Renderer Template -->\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown \r\n [items]=\"getDropdownItems(row)\"\r\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n</cide-lyt-shared-wrapper> " }]
|
|
3156
|
-
}], ctorParameters: () => [] });
|
|
3129
|
+
}], ctorParameters: () => [], propDecorators: { departmentDetailsRendererTemplate: [{ type: i0.ViewChild, args: ['departmentDetailsRendererTemplate', { isSignal: true }] }], departmentStatusRendererTemplate: [{ type: i0.ViewChild, args: ['departmentStatusRendererTemplate', { isSignal: true }] }], actionsDropdownRendererTemplate: [{ type: i0.ViewChild, args: ['actionsDropdownRendererTemplate', { isSignal: true }] }] } });
|
|
3157
3130
|
|
|
3158
3131
|
var departmentList_component = /*#__PURE__*/Object.freeze({
|
|
3159
3132
|
__proto__: null,
|
|
@@ -3341,10 +3314,10 @@ class CideCoreDesignationManagementService {
|
|
|
3341
3314
|
console.error('Designation Management Service Error:', errorMessage);
|
|
3342
3315
|
return throwError(() => new Error(errorMessage));
|
|
3343
3316
|
}
|
|
3344
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
3345
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.
|
|
3317
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreDesignationManagementService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
3318
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreDesignationManagementService, providedIn: 'root' });
|
|
3346
3319
|
}
|
|
3347
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
3320
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreDesignationManagementService, decorators: [{
|
|
3348
3321
|
type: Injectable,
|
|
3349
3322
|
args: [{
|
|
3350
3323
|
providedIn: 'root'
|
|
@@ -3520,10 +3493,10 @@ class CideCoreGradeLevelManagementService {
|
|
|
3520
3493
|
console.error('Grade Level Management Service Error:', errorMessage);
|
|
3521
3494
|
return throwError(() => new Error(errorMessage));
|
|
3522
3495
|
}
|
|
3523
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
3524
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.
|
|
3496
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreGradeLevelManagementService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
3497
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreGradeLevelManagementService, providedIn: 'root' });
|
|
3525
3498
|
}
|
|
3526
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
3499
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreGradeLevelManagementService, decorators: [{
|
|
3527
3500
|
type: Injectable,
|
|
3528
3501
|
args: [{
|
|
3529
3502
|
providedIn: 'root'
|
|
@@ -4898,10 +4871,10 @@ class CideCoreDesignationListComponent {
|
|
|
4898
4871
|
trackByItemId(index, item) {
|
|
4899
4872
|
return item._id || '';
|
|
4900
4873
|
}
|
|
4901
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
4902
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideCoreDesignationListComponent, isStandalone: true, selector: "cide-core-designation-list", viewQueries: [{ propertyName: "designationDetailsRendererTemplate", first: true, predicate: ["designationDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "designationStatusRendererTemplate", first: true, predicate: ["designationStatusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Designation List with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_designation_list' }\">\r\n <div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Quick Add Form Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Designation' : 'Quick Add Designation' }}</h6>\r\n </div>\r\n @if (selectedParentDesignation()) {\r\n <div\r\n class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child under:' }}</span>\r\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ selectedParentDesignation()?.sydsg_name\r\n }}</span>\r\n </div>\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" type=\"button\" (click)=\"clearSelectedParent()\"\r\n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\r\n <svg class=\"tw-w-4 tw-h-4\" 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\" />\r\n </svg>\r\n </button>\r\n </div>\r\n }\r\n @if (selectedParentDepartment()) {\r\n <div\r\n class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-green-50 tw-border tw-border-green-200 tw-px-4 tw-py-1 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-green-600 tw-w-4 tw-h-4\">business</cide-ele-icon>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <span class=\"tw-text-sm tw-text-green-600 tw-font-medium\">{{ isEditMode() ? 'Department:' : 'Department:'\r\n }}</span>\r\n <span class=\"tw-text-sm tw-text-green-800 tw-font-semibold\">{{ selectedParentDepartment()?.sydept_name\r\n }}</span>\r\n </div>\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" type=\"button\" (click)=\"clearSelectedParentDepartment()\"\r\n class=\"tw-text-green-400 hover:tw-text-green-600\">\r\n <svg class=\"tw-w-4 tw-h-4\" 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\" />\r\n </svg>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n\r\n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddDesignation()\">\r\n <!-- First Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-5 tw-gap-3 tw-mb-3\">\r\n <!-- Designation Name -->\r\n <div>\r\n <cide-ele-input id=\"sydsg_name\" label=\"Name*\" formControlName=\"sydsg_name\" placeholder=\"Designation name\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Designation Code -->\r\n <div>\r\n <cide-ele-input id=\"sydsg_code\" label=\"Code*\" formControlName=\"sydsg_code\" placeholder=\"DESG001\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Grade Level -->\r\n <div>\r\n <cide-ele-select id=\"sydsg_grade_level_id_sydsgl\" label=\"Grade Level*\" [options]=\"gradeLevelOptions()\"\r\n formControlName=\"sydsg_grade_level_id_sydsgl\" placeholder=\"Select grade level\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Department -->\r\n <div>\r\n <cide-ele-select id=\"sydsg_department_id_sydpt\" label=\"Department*\" [options]=\"departmentOptions()\"\r\n formControlName=\"sydsg_department_id_sydpt\" placeholder=\"Select department\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Active Status -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\r\n <cide-ele-input id=\"sydsg_isactive\" type=\"checkbox\" label=\"Active\" formControlName=\"sydsg_isactive\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Second Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\r\n <!-- Description -->\r\n <div>\r\n <cide-ele-textarea id=\"sydsg_description\" label=\"Description\" formControlName=\"sydsg_description\"\r\n placeholder=\"Designation description\" rows=\"2\" size=\"sm\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <!-- Entity ID (Hidden) -->\r\n <div class=\"tw-hidden\">\r\n <cide-ele-input id=\"desg_entity_id_syen\" label=\"Entity ID*\" formControlName=\"desg_entity_id_syen\"\r\n placeholder=\"Entity ID\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Action Buttons -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\r\n <div class=\"tw-flex tw-space-x-2\">\r\n <button cideEleButton variant=\"primary\" size=\"sm\" type=\"submit\" [disabled]=\"quickAddForm.invalid\"\r\n class=\"tw-px-2 tw-py-1 tw-w-20\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add'\r\n }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update' : 'Add' }}\r\n </button>\r\n <button cideEleButton variant=\"outline\" size=\"sm\" type=\"button\" (click)=\"resetQuickAddForm()\"\r\n class=\"tw-px-2 tw-py-1 tw-w-16\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\r\n Reset\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n\r\n <!-- Actions -->\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <!-- Search functionality is handled by the data grid -->\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\"\r\n class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n\r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n\r\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"getTemplateRenderers()\"\r\n [actionHandlers]=\"actionHandlers\" [serverSidePagination]=\"true\" [totalServerItems]=\"totalItems()\"\r\n [currentServerPage]=\"currentPage()\" [currentServerPageSize]=\"pageSize()\" (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Designation Details Renderer Template -->\r\n <ng-template #designationDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Dynamic Icon based on type -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon [class]=\"row.type === 'department' ? 'tw-text-green-500' : 'tw-text-blue-500'\" size=\"xs\">\r\n {{ row.type === 'department' ? 'business' : 'work' }}\r\n </cide-ele-icon>\r\n </div>\r\n\r\n <!-- Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"row.name\">\r\n {{ row.name || 'Untitled' }}\r\n </div>\r\n @if (row.type === 'department') {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\r\n Department\r\n </span>\r\n }\r\n </div>\r\n @if (row.description) {\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" [title]=\"row.description\">\r\n {{ row.description }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Designation Status Renderer Template -->\r\n <ng-template #designationStatusRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\r\n [ngClass]=\"getStatusClass(row.status)\">\r\n {{ getStatusDisplay(row.status) }}\r\n </span>\r\n </ng-template>\r\n\r\n <!-- Actions Dropdown Renderer Template -->\r\n <ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown [items]=\"getDropdownItems(row)\" [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n </ng-template>\r\n</cide-lyt-shared-wrapper>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { 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: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey"], outputs: ["ngModelChange", "change", "searchChange"] }, { 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: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
|
|
4874
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreDesignationListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4875
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CideCoreDesignationListComponent, isStandalone: true, selector: "cide-core-designation-list", viewQueries: [{ propertyName: "designationDetailsRendererTemplate", first: true, predicate: ["designationDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "designationStatusRendererTemplate", first: true, predicate: ["designationStatusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Designation List with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_designation_list' }\">\r\n <div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Quick Add Form Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Designation' : 'Quick Add Designation' }}</h6>\r\n </div>\r\n @if (selectedParentDesignation()) {\r\n <div\r\n class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child under:' }}</span>\r\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ selectedParentDesignation()?.sydsg_name\r\n }}</span>\r\n </div>\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" type=\"button\" (click)=\"clearSelectedParent()\"\r\n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\r\n <svg class=\"tw-w-4 tw-h-4\" 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\" />\r\n </svg>\r\n </button>\r\n </div>\r\n }\r\n @if (selectedParentDepartment()) {\r\n <div\r\n class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-green-50 tw-border tw-border-green-200 tw-px-4 tw-py-1 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-green-600 tw-w-4 tw-h-4\">business</cide-ele-icon>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <span class=\"tw-text-sm tw-text-green-600 tw-font-medium\">{{ isEditMode() ? 'Department:' : 'Department:'\r\n }}</span>\r\n <span class=\"tw-text-sm tw-text-green-800 tw-font-semibold\">{{ selectedParentDepartment()?.sydept_name\r\n }}</span>\r\n </div>\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" type=\"button\" (click)=\"clearSelectedParentDepartment()\"\r\n class=\"tw-text-green-400 hover:tw-text-green-600\">\r\n <svg class=\"tw-w-4 tw-h-4\" 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\" />\r\n </svg>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n\r\n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddDesignation()\">\r\n <!-- First Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-5 tw-gap-3 tw-mb-3\">\r\n <!-- Designation Name -->\r\n <div>\r\n <cide-ele-input id=\"sydsg_name\" label=\"Name*\" formControlName=\"sydsg_name\" placeholder=\"Designation name\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Designation Code -->\r\n <div>\r\n <cide-ele-input id=\"sydsg_code\" label=\"Code*\" formControlName=\"sydsg_code\" placeholder=\"DESG001\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Grade Level -->\r\n <div>\r\n <cide-ele-select id=\"sydsg_grade_level_id_sydsgl\" label=\"Grade Level*\" [options]=\"gradeLevelOptions()\"\r\n formControlName=\"sydsg_grade_level_id_sydsgl\" placeholder=\"Select grade level\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Department -->\r\n <div>\r\n <cide-ele-select id=\"sydsg_department_id_sydpt\" label=\"Department*\" [options]=\"departmentOptions()\"\r\n formControlName=\"sydsg_department_id_sydpt\" placeholder=\"Select department\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Active Status -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\r\n <cide-ele-input id=\"sydsg_isactive\" type=\"checkbox\" label=\"Active\" formControlName=\"sydsg_isactive\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Second Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\r\n <!-- Description -->\r\n <div>\r\n <cide-ele-textarea id=\"sydsg_description\" label=\"Description\" formControlName=\"sydsg_description\"\r\n placeholder=\"Designation description\" rows=\"2\" size=\"sm\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <!-- Entity ID (Hidden) -->\r\n <div class=\"tw-hidden\">\r\n <cide-ele-input id=\"desg_entity_id_syen\" label=\"Entity ID*\" formControlName=\"desg_entity_id_syen\"\r\n placeholder=\"Entity ID\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Action Buttons -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\r\n <div class=\"tw-flex tw-space-x-2\">\r\n <button cideEleButton variant=\"primary\" size=\"sm\" type=\"submit\" [disabled]=\"quickAddForm.invalid\"\r\n class=\"tw-px-2 tw-py-1 tw-w-20\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add'\r\n }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update' : 'Add' }}\r\n </button>\r\n <button cideEleButton variant=\"outline\" size=\"sm\" type=\"button\" (click)=\"resetQuickAddForm()\"\r\n class=\"tw-px-2 tw-py-1 tw-w-16\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\r\n Reset\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n\r\n <!-- Actions -->\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <!-- Search functionality is handled by the data grid -->\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\"\r\n class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n\r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n\r\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"getTemplateRenderers()\"\r\n [actionHandlers]=\"actionHandlers\" [serverSidePagination]=\"true\" [totalServerItems]=\"totalItems()\"\r\n [currentServerPage]=\"currentPage()\" [currentServerPageSize]=\"pageSize()\" (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Designation Details Renderer Template -->\r\n <ng-template #designationDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Dynamic Icon based on type -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon [class]=\"row.type === 'department' ? 'tw-text-green-500' : 'tw-text-blue-500'\" size=\"xs\">\r\n {{ row.type === 'department' ? 'business' : 'work' }}\r\n </cide-ele-icon>\r\n </div>\r\n\r\n <!-- Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"row.name\">\r\n {{ row.name || 'Untitled' }}\r\n </div>\r\n @if (row.type === 'department') {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\r\n Department\r\n </span>\r\n }\r\n </div>\r\n @if (row.description) {\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" [title]=\"row.description\">\r\n {{ row.description }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Designation Status Renderer Template -->\r\n <ng-template #designationStatusRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\r\n [ngClass]=\"getStatusClass(row.status)\">\r\n {{ getStatusDisplay(row.status) }}\r\n </span>\r\n </ng-template>\r\n\r\n <!-- Actions Dropdown Renderer Template -->\r\n <ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown [items]=\"getDropdownItems(row)\" [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n </ng-template>\r\n</cide-lyt-shared-wrapper>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { 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: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }, { 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: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
|
|
4903
4876
|
}
|
|
4904
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
4877
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreDesignationListComponent, decorators: [{
|
|
4905
4878
|
type: Component,
|
|
4906
4879
|
args: [{ selector: 'cide-core-designation-list', standalone: true, imports: [
|
|
4907
4880
|
CommonModule,
|
|
@@ -4916,7 +4889,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
4916
4889
|
CideEleDropdownComponent,
|
|
4917
4890
|
CideLytSharedWrapperComponent
|
|
4918
4891
|
], template: "<!-- Designation List with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_designation_list' }\">\r\n <div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Quick Add Form Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Designation' : 'Quick Add Designation' }}</h6>\r\n </div>\r\n @if (selectedParentDesignation()) {\r\n <div\r\n class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child under:' }}</span>\r\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ selectedParentDesignation()?.sydsg_name\r\n }}</span>\r\n </div>\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" type=\"button\" (click)=\"clearSelectedParent()\"\r\n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\r\n <svg class=\"tw-w-4 tw-h-4\" 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\" />\r\n </svg>\r\n </button>\r\n </div>\r\n }\r\n @if (selectedParentDepartment()) {\r\n <div\r\n class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-green-50 tw-border tw-border-green-200 tw-px-4 tw-py-1 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-green-600 tw-w-4 tw-h-4\">business</cide-ele-icon>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <span class=\"tw-text-sm tw-text-green-600 tw-font-medium\">{{ isEditMode() ? 'Department:' : 'Department:'\r\n }}</span>\r\n <span class=\"tw-text-sm tw-text-green-800 tw-font-semibold\">{{ selectedParentDepartment()?.sydept_name\r\n }}</span>\r\n </div>\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" type=\"button\" (click)=\"clearSelectedParentDepartment()\"\r\n class=\"tw-text-green-400 hover:tw-text-green-600\">\r\n <svg class=\"tw-w-4 tw-h-4\" 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\" />\r\n </svg>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n\r\n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddDesignation()\">\r\n <!-- First Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-5 tw-gap-3 tw-mb-3\">\r\n <!-- Designation Name -->\r\n <div>\r\n <cide-ele-input id=\"sydsg_name\" label=\"Name*\" formControlName=\"sydsg_name\" placeholder=\"Designation name\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Designation Code -->\r\n <div>\r\n <cide-ele-input id=\"sydsg_code\" label=\"Code*\" formControlName=\"sydsg_code\" placeholder=\"DESG001\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Grade Level -->\r\n <div>\r\n <cide-ele-select id=\"sydsg_grade_level_id_sydsgl\" label=\"Grade Level*\" [options]=\"gradeLevelOptions()\"\r\n formControlName=\"sydsg_grade_level_id_sydsgl\" placeholder=\"Select grade level\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Department -->\r\n <div>\r\n <cide-ele-select id=\"sydsg_department_id_sydpt\" label=\"Department*\" [options]=\"departmentOptions()\"\r\n formControlName=\"sydsg_department_id_sydpt\" placeholder=\"Select department\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Active Status -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\r\n <cide-ele-input id=\"sydsg_isactive\" type=\"checkbox\" label=\"Active\" formControlName=\"sydsg_isactive\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Second Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\r\n <!-- Description -->\r\n <div>\r\n <cide-ele-textarea id=\"sydsg_description\" label=\"Description\" formControlName=\"sydsg_description\"\r\n placeholder=\"Designation description\" rows=\"2\" size=\"sm\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <!-- Entity ID (Hidden) -->\r\n <div class=\"tw-hidden\">\r\n <cide-ele-input id=\"desg_entity_id_syen\" label=\"Entity ID*\" formControlName=\"desg_entity_id_syen\"\r\n placeholder=\"Entity ID\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Action Buttons -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\r\n <div class=\"tw-flex tw-space-x-2\">\r\n <button cideEleButton variant=\"primary\" size=\"sm\" type=\"submit\" [disabled]=\"quickAddForm.invalid\"\r\n class=\"tw-px-2 tw-py-1 tw-w-20\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add'\r\n }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update' : 'Add' }}\r\n </button>\r\n <button cideEleButton variant=\"outline\" size=\"sm\" type=\"button\" (click)=\"resetQuickAddForm()\"\r\n class=\"tw-px-2 tw-py-1 tw-w-16\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\r\n Reset\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n\r\n <!-- Actions -->\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <!-- Search functionality is handled by the data grid -->\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\"\r\n class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n\r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n\r\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"getTemplateRenderers()\"\r\n [actionHandlers]=\"actionHandlers\" [serverSidePagination]=\"true\" [totalServerItems]=\"totalItems()\"\r\n [currentServerPage]=\"currentPage()\" [currentServerPageSize]=\"pageSize()\" (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Designation Details Renderer Template -->\r\n <ng-template #designationDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Dynamic Icon based on type -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon [class]=\"row.type === 'department' ? 'tw-text-green-500' : 'tw-text-blue-500'\" size=\"xs\">\r\n {{ row.type === 'department' ? 'business' : 'work' }}\r\n </cide-ele-icon>\r\n </div>\r\n\r\n <!-- Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"row.name\">\r\n {{ row.name || 'Untitled' }}\r\n </div>\r\n @if (row.type === 'department') {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\r\n Department\r\n </span>\r\n }\r\n </div>\r\n @if (row.description) {\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" [title]=\"row.description\">\r\n {{ row.description }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Designation Status Renderer Template -->\r\n <ng-template #designationStatusRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\r\n [ngClass]=\"getStatusClass(row.status)\">\r\n {{ getStatusDisplay(row.status) }}\r\n </span>\r\n </ng-template>\r\n\r\n <!-- Actions Dropdown Renderer Template -->\r\n <ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown [items]=\"getDropdownItems(row)\" [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n </ng-template>\r\n</cide-lyt-shared-wrapper>" }]
|
|
4919
|
-
}], ctorParameters: () => [] });
|
|
4892
|
+
}], ctorParameters: () => [], propDecorators: { designationDetailsRendererTemplate: [{ type: i0.ViewChild, args: ['designationDetailsRendererTemplate', { isSignal: true }] }], designationStatusRendererTemplate: [{ type: i0.ViewChild, args: ['designationStatusRendererTemplate', { isSignal: true }] }], actionsDropdownRendererTemplate: [{ type: i0.ViewChild, args: ['actionsDropdownRendererTemplate', { isSignal: true }] }] } });
|
|
4920
4893
|
|
|
4921
4894
|
var designationList_component = /*#__PURE__*/Object.freeze({
|
|
4922
4895
|
__proto__: null,
|
|
@@ -5757,10 +5730,10 @@ class CideCoreGradeLevelListComponent {
|
|
|
5757
5730
|
trackByItemId(index, item) {
|
|
5758
5731
|
return item._id || '';
|
|
5759
5732
|
}
|
|
5760
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
5761
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideCoreGradeLevelListComponent, isStandalone: true, selector: "cide-core-grade-level-list", viewQueries: [{ propertyName: "dragHandleRendererTemplate", first: true, predicate: ["dragHandleRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "gradeLevelDetailsRendererTemplate", first: true, predicate: ["gradeLevelDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "gradeLevelStatusRendererTemplate", first: true, predicate: ["gradeLevelStatusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Grade Level List with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_grade_level_list' }\">\r\n<div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Quick Add Form Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Grade Level' : 'Quick Add Grade Level' }}</h6>\r\n </div>\r\n </div>\r\n \r\n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddGradeLevel()\">\r\n <!-- First Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\r\n <!-- Grade Level Name -->\r\n <div>\r\n <cide-ele-input \r\n id=\"sydsgl_name\" \r\n label=\"Name*\" \r\n formControlName=\"sydsgl_name\"\r\n placeholder=\"Grade level name\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Active Status -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\r\n <cide-ele-input \r\n id=\"sydsgl_isactive\"\r\n type=\"checkbox\"\r\n label=\"Active\"\r\n formControlName=\"sydsgl_isactive\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Second Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\r\n <!-- Description -->\r\n <div>\r\n <cide-ele-textarea \r\n id=\"sydsgl_description\" \r\n label=\"Description\" \r\n formControlName=\"sydsgl_description\"\r\n placeholder=\"Grade level description\"\r\n rows=\"2\"\r\n size=\"sm\">\r\n </cide-ele-textarea>\r\n </div>\r\n \r\n <!-- Entity ID (Hidden) -->\r\n <div class=\"tw-hidden\">\r\n <cide-ele-input \r\n id=\"sydsgl_entity_id_syen\" \r\n label=\"Entity ID*\" \r\n formControlName=\"sydsgl_entity_id_syen\"\r\n placeholder=\"Entity ID\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Action Buttons -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\r\n <div class=\"tw-flex tw-space-x-2\">\r\n <button \r\n cideEleButton \r\n variant=\"primary\" \r\n size=\"sm\" \r\n type=\"submit\"\r\n [disabled]=\"quickAddForm.invalid\"\r\n class=\"tw-px-2 tw-py-1 tw-w-20\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update' : 'Add' }}\r\n </button>\r\n <button \r\n cideEleButton \r\n variant=\"outline\" \r\n size=\"sm\" \r\n type=\"button\"\r\n (click)=\"resetQuickAddForm()\"\r\n class=\"tw-px-2 tw-py-1 tw-w-16\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\r\n Reset\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n \r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n \r\n <cide-ele-data-grid \r\n [config]=\"gridConfig()\" \r\n [templateRenderers]=\"getTemplateRenderers()\"\r\n [actionHandlers]=\"actionHandlers\"\r\n [serverSidePagination]=\"true\" \r\n [totalServerItems]=\"totalItems()\" \r\n [currentServerPage]=\"currentPage()\"\r\n [currentServerPageSize]=\"pageSize()\" \r\n [dragDropEnabled]=\"true\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- Drag Handle Renderer Template -->\r\n<ng-template #dragHandleRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-w-full tw-h-full tw-cursor-move drag-handle\">\r\n <cide-ele-icon \r\n class=\"tw-text-gray-400 hover:tw-text-gray-600 tw-transition-colors\" \r\n size=\"xs\">\r\n drag_indicator\r\n </cide-ele-icon>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Grade Level Details Renderer Template -->\r\n<ng-template #gradeLevelDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Grade Level Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon \r\n class=\"tw-text-gray-400\" \r\n size=\"xs\">\r\n school\r\n </cide-ele-icon>\r\n </div>\r\n \r\n <!-- Grade Level Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \r\n [title]=\"row.sydsgl_name\">\r\n {{ row.sydsgl_name || 'Untitled' }}\r\n </div>\r\n @if (row.sydsgl_description) {\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \r\n [title]=\"row.sydsgl_description\">\r\n {{ row.sydsgl_description }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Grade Level Status Renderer Template -->\r\n<ng-template #gradeLevelStatusRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\r\n [ngClass]=\"getStatusClass(row.sydsgl_isactive)\">\r\n {{ getStatusDisplay(row.sydsgl_isactive) }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown Renderer Template -->\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown \r\n [items]=\"getDropdownItems(row)\"\r\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n\r\n<!-- Confirmation Modal -->\r\n</cide-lyt-shared-wrapper>\r\n<cide-ele-confirmation-modal></cide-ele-confirmation-modal> ", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { 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: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }, { kind: "component", type: CideEleConfirmationModalComponent, selector: "cide-ele-confirmation-modal" }] });
|
|
5733
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreGradeLevelListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5734
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CideCoreGradeLevelListComponent, isStandalone: true, selector: "cide-core-grade-level-list", viewQueries: [{ propertyName: "dragHandleRendererTemplate", first: true, predicate: ["dragHandleRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "gradeLevelDetailsRendererTemplate", first: true, predicate: ["gradeLevelDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "gradeLevelStatusRendererTemplate", first: true, predicate: ["gradeLevelStatusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Grade Level List with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_grade_level_list' }\">\r\n<div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Quick Add Form Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Grade Level' : 'Quick Add Grade Level' }}</h6>\r\n </div>\r\n </div>\r\n \r\n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddGradeLevel()\">\r\n <!-- First Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\r\n <!-- Grade Level Name -->\r\n <div>\r\n <cide-ele-input \r\n id=\"sydsgl_name\" \r\n label=\"Name*\" \r\n formControlName=\"sydsgl_name\"\r\n placeholder=\"Grade level name\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Active Status -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\r\n <cide-ele-input \r\n id=\"sydsgl_isactive\"\r\n type=\"checkbox\"\r\n label=\"Active\"\r\n formControlName=\"sydsgl_isactive\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Second Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\r\n <!-- Description -->\r\n <div>\r\n <cide-ele-textarea \r\n id=\"sydsgl_description\" \r\n label=\"Description\" \r\n formControlName=\"sydsgl_description\"\r\n placeholder=\"Grade level description\"\r\n rows=\"2\"\r\n size=\"sm\">\r\n </cide-ele-textarea>\r\n </div>\r\n \r\n <!-- Entity ID (Hidden) -->\r\n <div class=\"tw-hidden\">\r\n <cide-ele-input \r\n id=\"sydsgl_entity_id_syen\" \r\n label=\"Entity ID*\" \r\n formControlName=\"sydsgl_entity_id_syen\"\r\n placeholder=\"Entity ID\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Action Buttons -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\r\n <div class=\"tw-flex tw-space-x-2\">\r\n <button \r\n cideEleButton \r\n variant=\"primary\" \r\n size=\"sm\" \r\n type=\"submit\"\r\n [disabled]=\"quickAddForm.invalid\"\r\n class=\"tw-px-2 tw-py-1 tw-w-20\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update' : 'Add' }}\r\n </button>\r\n <button \r\n cideEleButton \r\n variant=\"outline\" \r\n size=\"sm\" \r\n type=\"button\"\r\n (click)=\"resetQuickAddForm()\"\r\n class=\"tw-px-2 tw-py-1 tw-w-16\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\r\n Reset\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n \r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n \r\n <cide-ele-data-grid \r\n [config]=\"gridConfig()\" \r\n [templateRenderers]=\"getTemplateRenderers()\"\r\n [actionHandlers]=\"actionHandlers\"\r\n [serverSidePagination]=\"true\" \r\n [totalServerItems]=\"totalItems()\" \r\n [currentServerPage]=\"currentPage()\"\r\n [currentServerPageSize]=\"pageSize()\" \r\n [dragDropEnabled]=\"true\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- Drag Handle Renderer Template -->\r\n<ng-template #dragHandleRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-w-full tw-h-full tw-cursor-move drag-handle\">\r\n <cide-ele-icon \r\n class=\"tw-text-gray-400 hover:tw-text-gray-600 tw-transition-colors\" \r\n size=\"xs\">\r\n drag_indicator\r\n </cide-ele-icon>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Grade Level Details Renderer Template -->\r\n<ng-template #gradeLevelDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Grade Level Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon \r\n class=\"tw-text-gray-400\" \r\n size=\"xs\">\r\n school\r\n </cide-ele-icon>\r\n </div>\r\n \r\n <!-- Grade Level Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \r\n [title]=\"row.sydsgl_name\">\r\n {{ row.sydsgl_name || 'Untitled' }}\r\n </div>\r\n @if (row.sydsgl_description) {\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \r\n [title]=\"row.sydsgl_description\">\r\n {{ row.sydsgl_description }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Grade Level Status Renderer Template -->\r\n<ng-template #gradeLevelStatusRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\r\n [ngClass]=\"getStatusClass(row.sydsgl_isactive)\">\r\n {{ getStatusDisplay(row.sydsgl_isactive) }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown Renderer Template -->\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown \r\n [items]=\"getDropdownItems(row)\"\r\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n\r\n<!-- Confirmation Modal -->\r\n</cide-lyt-shared-wrapper>\r\n<cide-ele-confirmation-modal></cide-ele-confirmation-modal> ", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { 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: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }, { kind: "component", type: CideEleConfirmationModalComponent, selector: "cide-ele-confirmation-modal" }] });
|
|
5762
5735
|
}
|
|
5763
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
5736
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreGradeLevelListComponent, decorators: [{
|
|
5764
5737
|
type: Component,
|
|
5765
5738
|
args: [{ selector: 'cide-core-grade-level-list', standalone: true, imports: [
|
|
5766
5739
|
CommonModule,
|
|
@@ -5775,7 +5748,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
5775
5748
|
CideLytSharedWrapperComponent,
|
|
5776
5749
|
CideEleConfirmationModalComponent
|
|
5777
5750
|
], template: "<!-- Grade Level List with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_grade_level_list' }\">\r\n<div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Quick Add Form Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Grade Level' : 'Quick Add Grade Level' }}</h6>\r\n </div>\r\n </div>\r\n \r\n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddGradeLevel()\">\r\n <!-- First Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\r\n <!-- Grade Level Name -->\r\n <div>\r\n <cide-ele-input \r\n id=\"sydsgl_name\" \r\n label=\"Name*\" \r\n formControlName=\"sydsgl_name\"\r\n placeholder=\"Grade level name\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Active Status -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\r\n <cide-ele-input \r\n id=\"sydsgl_isactive\"\r\n type=\"checkbox\"\r\n label=\"Active\"\r\n formControlName=\"sydsgl_isactive\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Second Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\r\n <!-- Description -->\r\n <div>\r\n <cide-ele-textarea \r\n id=\"sydsgl_description\" \r\n label=\"Description\" \r\n formControlName=\"sydsgl_description\"\r\n placeholder=\"Grade level description\"\r\n rows=\"2\"\r\n size=\"sm\">\r\n </cide-ele-textarea>\r\n </div>\r\n \r\n <!-- Entity ID (Hidden) -->\r\n <div class=\"tw-hidden\">\r\n <cide-ele-input \r\n id=\"sydsgl_entity_id_syen\" \r\n label=\"Entity ID*\" \r\n formControlName=\"sydsgl_entity_id_syen\"\r\n placeholder=\"Entity ID\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Action Buttons -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\r\n <div class=\"tw-flex tw-space-x-2\">\r\n <button \r\n cideEleButton \r\n variant=\"primary\" \r\n size=\"sm\" \r\n type=\"submit\"\r\n [disabled]=\"quickAddForm.invalid\"\r\n class=\"tw-px-2 tw-py-1 tw-w-20\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update' : 'Add' }}\r\n </button>\r\n <button \r\n cideEleButton \r\n variant=\"outline\" \r\n size=\"sm\" \r\n type=\"button\"\r\n (click)=\"resetQuickAddForm()\"\r\n class=\"tw-px-2 tw-py-1 tw-w-16\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\r\n Reset\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n \r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n \r\n <cide-ele-data-grid \r\n [config]=\"gridConfig()\" \r\n [templateRenderers]=\"getTemplateRenderers()\"\r\n [actionHandlers]=\"actionHandlers\"\r\n [serverSidePagination]=\"true\" \r\n [totalServerItems]=\"totalItems()\" \r\n [currentServerPage]=\"currentPage()\"\r\n [currentServerPageSize]=\"pageSize()\" \r\n [dragDropEnabled]=\"true\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- Drag Handle Renderer Template -->\r\n<ng-template #dragHandleRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-w-full tw-h-full tw-cursor-move drag-handle\">\r\n <cide-ele-icon \r\n class=\"tw-text-gray-400 hover:tw-text-gray-600 tw-transition-colors\" \r\n size=\"xs\">\r\n drag_indicator\r\n </cide-ele-icon>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Grade Level Details Renderer Template -->\r\n<ng-template #gradeLevelDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Grade Level Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon \r\n class=\"tw-text-gray-400\" \r\n size=\"xs\">\r\n school\r\n </cide-ele-icon>\r\n </div>\r\n \r\n <!-- Grade Level Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \r\n [title]=\"row.sydsgl_name\">\r\n {{ row.sydsgl_name || 'Untitled' }}\r\n </div>\r\n @if (row.sydsgl_description) {\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \r\n [title]=\"row.sydsgl_description\">\r\n {{ row.sydsgl_description }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Grade Level Status Renderer Template -->\r\n<ng-template #gradeLevelStatusRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\r\n [ngClass]=\"getStatusClass(row.sydsgl_isactive)\">\r\n {{ getStatusDisplay(row.sydsgl_isactive) }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown Renderer Template -->\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown \r\n [items]=\"getDropdownItems(row)\"\r\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n\r\n<!-- Confirmation Modal -->\r\n</cide-lyt-shared-wrapper>\r\n<cide-ele-confirmation-modal></cide-ele-confirmation-modal> " }]
|
|
5778
|
-
}], ctorParameters: () => [] });
|
|
5751
|
+
}], ctorParameters: () => [], propDecorators: { dragHandleRendererTemplate: [{ type: i0.ViewChild, args: ['dragHandleRendererTemplate', { isSignal: true }] }], gradeLevelDetailsRendererTemplate: [{ type: i0.ViewChild, args: ['gradeLevelDetailsRendererTemplate', { isSignal: true }] }], gradeLevelStatusRendererTemplate: [{ type: i0.ViewChild, args: ['gradeLevelStatusRendererTemplate', { isSignal: true }] }], actionsDropdownRendererTemplate: [{ type: i0.ViewChild, args: ['actionsDropdownRendererTemplate', { isSignal: true }] }] } });
|
|
5779
5752
|
|
|
5780
5753
|
var gradeLevelList_component = /*#__PURE__*/Object.freeze({
|
|
5781
5754
|
__proto__: null,
|
|
@@ -5867,10 +5840,10 @@ class CideCorePageManagementService {
|
|
|
5867
5840
|
console.error('Page Management Service Error:', errorMessage);
|
|
5868
5841
|
return throwError(() => new Error(errorMessage));
|
|
5869
5842
|
}
|
|
5870
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
5871
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.
|
|
5843
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCorePageManagementService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5844
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCorePageManagementService, providedIn: 'root' });
|
|
5872
5845
|
}
|
|
5873
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
5846
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCorePageManagementService, decorators: [{
|
|
5874
5847
|
type: Injectable,
|
|
5875
5848
|
args: [{
|
|
5876
5849
|
providedIn: 'root'
|
|
@@ -6245,10 +6218,10 @@ class CideCorePageListComponent {
|
|
|
6245
6218
|
const event = new MouseEvent('click', { bubbles: true });
|
|
6246
6219
|
document.dispatchEvent(event);
|
|
6247
6220
|
}
|
|
6248
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
6249
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.
|
|
6221
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCorePageListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6222
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CideCorePageListComponent, isStandalone: true, selector: "cide-core-page-list", viewQueries: [{ propertyName: "pageDetailsRendererTemplate", first: true, predicate: ["pageDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "pageStatusRendererTemplate", first: true, predicate: ["pageStatusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Page List Container -->\r\n<div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n\r\n <!-- Title -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">web</cide-ele-icon>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Page Management</h5>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <!-- Add Page Button -->\r\n <button\r\n cideEleButton\r\n variant=\"primary\"\r\n size=\"sm\"\r\n (click)=\"createPage()\"\r\n leftIcon=\"add\"\r\n class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\r\n Create New Page\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\">error</cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n \r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n <cide-ele-data-grid\r\n [config]=\"gridConfig()\"\r\n [templateRenderers]=\"getTemplateRenderers()\"\r\n [actionHandlers]=\"actionHandlers\"\r\n [serverSidePagination]=\"true\"\r\n [totalServerItems]=\"totalItems()\"\r\n [currentServerPage]=\"currentPage()\"\r\n [currentServerPageSize]=\"pageSize()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- Page Details Renderer Template -->\r\n<ng-template #pageDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Page Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon class=\"tw-text-gray-400 tw-w-4 tw-h-4\">web</cide-ele-icon>\r\n </div>\r\n \r\n <!-- Page Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \r\n [title]=\"row.sypg_title\">\r\n {{ row.sypg_title || 'Untitled' }}\r\n </div>\r\n @if (row.sypg_desc) {\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \r\n [title]=\"row.sypg_desc\">\r\n {{ row.sypg_desc }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Page Status Renderer Template -->\r\n<ng-template #pageStatusRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\r\n [ngClass]=\"row.sypg_isactive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800'\">\r\n {{ row.sypg_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown Renderer Template -->\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown\r\n [items]=\"getActionDropdownItems(row)\"\r\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template> ", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { 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: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }] });
|
|
6250
6223
|
}
|
|
6251
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
6224
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCorePageListComponent, decorators: [{
|
|
6252
6225
|
type: Component,
|
|
6253
6226
|
args: [{ selector: 'cide-core-page-list', standalone: true, imports: [
|
|
6254
6227
|
CommonModule,
|
|
@@ -6257,7 +6230,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
6257
6230
|
CideIconComponent,
|
|
6258
6231
|
CideEleDropdownComponent
|
|
6259
6232
|
], template: "<!-- Page List Container -->\r\n<div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n\r\n <!-- Title -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">web</cide-ele-icon>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Page Management</h5>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <!-- Add Page Button -->\r\n <button\r\n cideEleButton\r\n variant=\"primary\"\r\n size=\"sm\"\r\n (click)=\"createPage()\"\r\n leftIcon=\"add\"\r\n class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\r\n Create New Page\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\">error</cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n \r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n <cide-ele-data-grid\r\n [config]=\"gridConfig()\"\r\n [templateRenderers]=\"getTemplateRenderers()\"\r\n [actionHandlers]=\"actionHandlers\"\r\n [serverSidePagination]=\"true\"\r\n [totalServerItems]=\"totalItems()\"\r\n [currentServerPage]=\"currentPage()\"\r\n [currentServerPageSize]=\"pageSize()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- Page Details Renderer Template -->\r\n<ng-template #pageDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Page Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon class=\"tw-text-gray-400 tw-w-4 tw-h-4\">web</cide-ele-icon>\r\n </div>\r\n \r\n <!-- Page Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \r\n [title]=\"row.sypg_title\">\r\n {{ row.sypg_title || 'Untitled' }}\r\n </div>\r\n @if (row.sypg_desc) {\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \r\n [title]=\"row.sypg_desc\">\r\n {{ row.sypg_desc }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Page Status Renderer Template -->\r\n<ng-template #pageStatusRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\r\n [ngClass]=\"row.sypg_isactive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800'\">\r\n {{ row.sypg_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown Renderer Template -->\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown\r\n [items]=\"getActionDropdownItems(row)\"\r\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template> " }]
|
|
6260
|
-
}], ctorParameters: () => [] });
|
|
6233
|
+
}], ctorParameters: () => [], propDecorators: { pageDetailsRendererTemplate: [{ type: i0.ViewChild, args: ['pageDetailsRendererTemplate', { isSignal: true }] }], pageStatusRendererTemplate: [{ type: i0.ViewChild, args: ['pageStatusRendererTemplate', { isSignal: true }] }], actionsDropdownRendererTemplate: [{ type: i0.ViewChild, args: ['actionsDropdownRendererTemplate', { isSignal: true }] }] } });
|
|
6261
6234
|
|
|
6262
6235
|
var pageList_component = /*#__PURE__*/Object.freeze({
|
|
6263
6236
|
__proto__: null,
|
|
@@ -6356,10 +6329,10 @@ class CideCorePageThemeService {
|
|
|
6356
6329
|
console.error('Page Theme Service Error:', errorMessage);
|
|
6357
6330
|
return throwError(() => new Error(errorMessage));
|
|
6358
6331
|
}
|
|
6359
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
6360
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.
|
|
6332
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCorePageThemeService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
6333
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCorePageThemeService, providedIn: 'root' });
|
|
6361
6334
|
}
|
|
6362
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
6335
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCorePageThemeService, decorators: [{
|
|
6363
6336
|
type: Injectable,
|
|
6364
6337
|
args: [{
|
|
6365
6338
|
providedIn: 'root'
|
|
@@ -7121,10 +7094,10 @@ class CideCorePageThemeComponent {
|
|
|
7121
7094
|
onPreviewImageUploadProgress(progress) {
|
|
7122
7095
|
console.log('Preview image upload progress:', progress + '%');
|
|
7123
7096
|
}
|
|
7124
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
7125
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideCorePageThemeComponent, isStandalone: true, selector: "cide-core-page-theme", viewQueries: [{ propertyName: "themeDetailsRendererTemplate", first: true, predicate: ["themeDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "themeStatusRendererTemplate", first: true, predicate: ["themeStatusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Page Theme Container -->\r\n<div class=\"tw-flex tw-h-full tw-w-full\">\r\n \r\n <!-- Left: Form and header (60%) -->\r\n <div class=\"tw-w-full lg:tw-w-3/5 tw-flex tw-flex-col tw-border-r tw-border-gray-200\">\r\n\r\n <!-- Header Section -->\r\n <div class=\"tw-px-6 tw-py-2 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-2 sm:tw-space-y-0\">\r\n\r\n <!-- Title and Back Button -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-4\">\r\n <button cideEleButton variant=\"ghost\" size=\"sm\" (click)=\"goBack();\" class=\"tw-text-gray-600 hover:tw-text-gray-900\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">arrow_back</cide-ele-icon>\r\n </button>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">palette</cide-ele-icon>\r\n <div>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Theme Management</h5>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-m-0\">Page: {{ pageTitle() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Quick Add/Edit Form Section -->\r\n <div class=\"tw-px-6 tw-py-3 tw-bg-white tw-overflow-auto\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-2\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Theme' : 'Quick Add Theme' }}</h6>\r\n </div>\r\n </div>\r\n\r\n <!-- Form (kept as-is) -->\r\n <form [formGroup]=\"themeForm\" (ngSubmit)=\"saveTheme()\" class=\"tw-space-y-4\">\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-[1fr_200px] tw-gap-4\">\r\n <!-- Left Side: All Input Fields -->\r\n <div class=\"tw-space-y-4\">\r\n <!-- Row 1: Theme Title and Theme Code -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_title\" formControlName=\"sytm_title\" placeholder=\"Enter theme title\" label=\"Theme Title*\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_theme_code\" formControlName=\"sytm_theme_code\" placeholder=\"Enter theme code\" label=\"Theme Code*\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Row 2: Sub Title and Active Status -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_sub_title\" formControlName=\"sytm_sub_title\" placeholder=\"Enter sub title\" label=\"Sub Title\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n <div class=\"tw-space-y-2 tw-flex tw-items-center\">\r\n <cide-ele-input\r\n id=\"sytm_isactive_cb\"\r\n type=\"checkbox\"\r\n label=\"Active\"\r\n size=\"sm\"\r\n formControlName=\"sytm_isactive\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Row 3: Description -->\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-textarea id=\"sytm_desc\" formControlName=\"sytm_desc\" placeholder=\"Enter theme description\" rows=\"2\" label=\"Description\" size=\"sm\"></cide-ele-textarea>\r\n </div>\r\n </div>\r\n \r\n <!-- Right Side: File Upload -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-start tw-items-center tw-p-0\">\r\n <cide-ele-file-input \r\n id=\"sytm_preview_id_fm\" \r\n formControlName=\"sytm_preview_id_fm\"\r\n accept=\"image/*\"\r\n [showPreview]=\"true\"\r\n [previewBoxMode]=\"true\"\r\n [showFileName]=\"false\"\r\n previewWidth=\"180px\"\r\n previewHeight=\"120px\"\r\n placeholderText=\"Upload Preview Image\"\r\n placeholderIcon=\"image\"\r\n [autoUpload]=\"true\"\r\n [uploadData]=\"getPreviewImageUploadData()\"\r\n (uploadSuccess)=\"onPreviewImageUploadSuccess($event)\"\r\n (uploadError)=\"onPreviewImageUploadError($event)\"\r\n (uploadProgressChange)=\"onPreviewImageUploadProgress($event)\">\r\n </cide-ele-file-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Configuration JSON -->\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-json-editor label=\"Configuration JSON\" formControlName=\"sytm_configuration\" [required]=\"true\" [config]=\"{\r\n showLineNumbers: true,\r\n autoFormat: true,\r\n validateOnChange: true,\r\n minHeight: 150,\r\n maxHeight: 300,\r\n placeholder: 'Enter theme configuration JSON...'\r\n }\" helperText=\"Enter valid JSON configuration for the theme\"></cide-ele-json-editor>\r\n </div>\r\n <!-- Layout Configuration + Selection -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\r\n <div class=\"tw-space-y-2\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Layout & Selection</div>\r\n <!-- Selected toggle -->\r\n <div class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-md tw-px-3 tw-py-2\">\r\n <cide-ele-input\r\n id=\"sytm_isselected\"\r\n type=\"checkbox\"\r\n label=\"Selected (Default)\"\r\n size=\"sm\"\r\n formControlName=\"sytm_isselected\">\r\n </cide-ele-input>\r\n </div>\r\n <div formGroupName=\"sytm_layout\" class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-md tw-divide-y tw-overflow-hidden\">\r\n <!-- Sidebar -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_sidebar\">\r\n <cide-ele-input id=\"layout_sidebar_status\" type=\"checkbox\" label=\"Sidebar\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Header -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_header\">\r\n <cide-ele-input id=\"layout_header_status\" type=\"checkbox\" label=\"Header\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Footer -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_footer\">\r\n <cide-ele-input id=\"layout_footer_status\" type=\"checkbox\" label=\"Footer\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Breadcrumb -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_breadcrumb\">\r\n <cide-ele-input id=\"layout_breadcrumb_status\" type=\"checkbox\" label=\"Breadcrumb\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Console -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_console\">\r\n <cide-ele-input id=\"layout_console_status\" type=\"checkbox\" label=\"Console\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Request -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_request\">\r\n <cide-ele-input id=\"layout_request_status\" type=\"checkbox\" label=\"Request\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n </div>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-pt-1\">Toggle active sections. Only one theme can be selected as default. More options can be added here later.</p>\r\n </div>\r\n \r\n <!-- Drawer Configuration -->\r\n <div class=\"tw-space-y-2\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Drawers</div>\r\n <button cideEleButton type=\"button\" size=\"xs\" variant=\"outline\" (click)=\"addDrawer()\">\r\n Add Drawer\r\n </button>\r\n </div>\r\n\r\n <div formGroupName=\"sytm_layout\">\r\n <div class=\"tw-space-y-2\" formArrayName=\"sytm_layout_drawer\">\r\n <div *ngFor=\"let drawerGrp of drawerArray.controls; let i = index\" [formGroupName]=\"i\" class=\"tw-border tw-border-gray-200 tw-rounded-md tw-p-3 tw-flex tw-items-center tw-gap-3\">\r\n <cide-ele-input id=\"drawer_active_{{i}}\" type=\"checkbox\" label=\"Active\" size=\"sm\" formControlName=\"syth_status\"></cide-ele-input>\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-select\r\n id=\"drawer_config_{{i}}\"\r\n label=\"Drawer For\"\r\n size=\"sm\"\r\n [options]=\"drawerConfigOptions\"\r\n formControlName=\"syth_config_syco_for\">\r\n </cide-ele-select>\r\n </div>\r\n <button cideEleButton type=\"button\" size=\"xs\" variant=\"ghost\" (click)=\"removeDrawer(i)\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n <p class=\"tw-text-xs tw-text-gray-500\">Configure multiple drawers as needed.</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-flex tw-flex-col tw-gap-2 tw-pt-4 tw-border-t tw-border-gray-200\">\r\n <div class=\"tw-flex tw-items-center tw-justify-end tw-space-x-3\">\r\n <button cideEleButton type=\"button\" variant=\"outline\" (click)=\"cancelForm()\" [disabled]=\"loading()\">Cancel</button>\r\n <button cideEleButton type=\"submit\" variant=\"primary\" leftIcon=\"add\" [disabled]=\"!themeForm.valid || loading()\" [loading]=\"loading()\">\r\n {{ isEditMode() ? 'Update Theme' : 'Create Theme' }}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Right: Theme gallery (40%) -->\r\n <div class=\"tw-hidden lg:tw-flex tw-w-2/5 tw-flex-col\">\r\n <!-- (Header consolidated above) -->\r\n\r\n <!-- Gallery list -->\r\n <div class=\"tw-flex-1 tw-overflow-auto tw-bg-gray-50\">\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3 tw-p-4\">\r\n @for (theme of filteredThemes(); track theme._id) {\r\n <div class=\"tw-rounded-md tw-transition tw-cursor-pointer tw-relative\"\r\n [ngClass]=\"theme.sytm_isselected\r\n ? 'tw-border tw-border-blue-500 tw-ring-2 tw-ring-blue-200 tw-bg-blue-50/50'\r\n : 'tw-bg-white tw-border tw-border-gray-200 hover:tw-shadow-sm'\"\r\n (click)=\"editTheme(theme)\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n [attr.aria-selected]=\"theme.sytm_isselected ? 'true' : 'false'\"\r\n [attr.aria-label]=\"'Edit theme ' + (theme.sytm_title || theme.sytm_theme_code)\"\r\n (keydown.enter)=\"editTheme(theme)\"\r\n (keydown.space)=\"$event.preventDefault(); editTheme(theme)\">\r\n\r\n <!-- Selected badge -->\r\n <div *ngIf=\"theme.sytm_isselected\"\r\n class=\"tw-absolute tw-top-2 tw-right-2 tw-flex tw-items-center tw-justify-center tw-w-6 tw-h-6 tw-rounded-full tw-bg-blue-600 tw-text-white\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">check</cide-ele-icon>\r\n </div>\r\n \r\n <div class=\"tw-aspect-[16/9] tw-bg-gray-100 tw-rounded-t-md tw-overflow-hidden tw-flex tw-items-center tw-justify-center\">\r\n @if (theme.sytm_preview_id_fm) {\r\n <img \r\n cideEleFileImage \r\n [fileId]=\"theme.sytm_preview_id_fm\" \r\n [altText]=\"'Theme Preview'\"\r\n class=\"tw-w-full tw-h-full tw-object-cover\" />\r\n } @else {\r\n <div class=\"tw-text-gray-400 tw-text-xs\">No preview</div>\r\n }\r\n </div>\r\n <div class=\"tw-p-3 tw-space-y-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"theme.sytm_title\">{{ theme.sytm_title || 'Untitled Theme' }}</div>\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" [title]=\"theme.sytm_theme_code\">{{ theme.sytm_theme_code }}</div>\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-pt-1\">\r\n <span class=\"tw-inline-flex tw-items-center tw-gap-1 tw-text-xs\" [ngClass]=\"theme.sytm_isactive ? 'tw-text-green-700' : 'tw-text-red-700'\">\r\n <span class=\"tw-w-1.5 tw-h-1.5 tw-rounded-full\" [ngClass]=\"theme.sytm_isactive ? 'tw-bg-green-500' : 'tw-bg-red-500'\"></span>\r\n {{ theme.sytm_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n <div class=\"tw-flex tw-items-center tw-gap-1\">\r\n <!-- Set Selected Button - Clear and Simple -->\r\n @if (theme.sytm_isselected) {\r\n <span class=\"tw-inline-flex tw-items-center tw-gap-1 tw-px-2 tw-py-1 tw-bg-green-100 tw-text-green-800 tw-rounded-md tw-text-xs tw-font-medium\">\r\n <cide-ele-icon class=\"tw-w-3 tw-h-3\">check</cide-ele-icon>\r\n Selected\r\n </span>\r\n } @else {\r\n <button cideEleButton \r\n variant=\"outline\" \r\n size=\"xs\"\r\n (click)=\"$event.stopPropagation(); setSelectedTheme(theme)\"\r\n [attr.aria-label]=\"'Select ' + (theme.sytm_title || theme.sytm_theme_code) + ' theme'\"\r\n class=\"tw-text-xs\">\r\n Select\r\n </button>\r\n }\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" (click)=\"$event.stopPropagation(); editTheme(theme)\"\r\n [attr.aria-label]=\"'Edit theme ' + (theme.sytm_title || theme.sytm_theme_code)\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">edit</cide-ele-icon>\r\n </button>\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" (click)=\"$event.stopPropagation(); deleteTheme(theme)\"\r\n [attr.aria-label]=\"'Delete theme ' + (theme.sytm_title || theme.sytm_theme_code)\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (!loading() && filteredThemes().length === 0) {\r\n <div class=\"tw-col-span-full tw-text-center tw-text-xs tw-text-gray-500 tw-py-8\">No themes found</div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- \r\n Angular Template References for Grid Renderers (Best Practice)\r\n \r\n These ng-template elements represent the Angular best practice for custom rendering.\r\n They provide:\r\n - Type safety with template context\r\n - Component lifecycle integration\r\n - Change detection optimization\r\n - Proper event handling\r\n - Accessibility features\r\n \r\n Note: Current data grid uses string renderers for compatibility.\r\n Templates are maintained for future component enhancement.\r\n-->\r\n\r\n<!-- Theme Details Renderer Template -->\r\n<ng-template #themeDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Theme Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon \r\n class=\"tw-text-purple-600\" \r\n size=\"xs\">\r\n palette\r\n </cide-ele-icon>\r\n </div>\r\n \r\n <!-- Theme Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \r\n [title]=\"row.sytm_title\">\r\n {{ row.sytm_title || 'Untitled' }}\r\n </div>\r\n @if (row.sytm_desc) {\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \r\n [title]=\"row.sytm_desc\">\r\n {{ row.sytm_desc }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Theme Status Renderer Template -->\r\n<ng-template #themeStatusRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\r\n [ngClass]=\"row.sytm_isactive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800'\">\r\n {{ row.sytm_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown Renderer Template -->\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown \r\n [items]=\"getActionDropdownItems(row)\"\r\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template> ", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1$2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { 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: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey"], outputs: ["ngModelChange", "change", "searchChange"] }, { 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: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "component", type: CideEleJsonEditorComponent, selector: "cide-ele-json-editor", inputs: ["label", "helperText", "required", "disabled", "showCharacterCount", "config"], outputs: ["valueChange", "objectChange", "errorsChange", "validChange"] }, { kind: "component", type: CideEleFileInputComponent, selector: "cide-ele-file-input", inputs: ["label", "accept", "multiple", "disabled", "required", "helperText", "errorText", "showPreview", "previewWidth", "previewHeight", "previewBoxMode", "showFileName", "placeholderText", "placeholderIcon", "autoUpload", "uploadData", "showFloatingUploader", "floatingUploaderGroupId"], outputs: ["fileChange", "uploadSuccess", "uploadError", "uploadProgressChange"] }, { kind: "directive", type: CideEleFileImageDirective, selector: "[cideEleFileImage]", inputs: ["fileId", "altText"] }] });
|
|
7097
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCorePageThemeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7098
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CideCorePageThemeComponent, isStandalone: true, selector: "cide-core-page-theme", viewQueries: [{ propertyName: "themeDetailsRendererTemplate", first: true, predicate: ["themeDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "themeStatusRendererTemplate", first: true, predicate: ["themeStatusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Page Theme Container -->\r\n<div class=\"tw-flex tw-h-full tw-w-full\">\r\n \r\n <!-- Left: Form and header (60%) -->\r\n <div class=\"tw-w-full lg:tw-w-3/5 tw-flex tw-flex-col tw-border-r tw-border-gray-200\">\r\n\r\n <!-- Header Section -->\r\n <div class=\"tw-px-6 tw-py-2 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-2 sm:tw-space-y-0\">\r\n\r\n <!-- Title and Back Button -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-4\">\r\n <button cideEleButton variant=\"ghost\" size=\"sm\" (click)=\"goBack();\" class=\"tw-text-gray-600 hover:tw-text-gray-900\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">arrow_back</cide-ele-icon>\r\n </button>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">palette</cide-ele-icon>\r\n <div>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Theme Management</h5>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-m-0\">Page: {{ pageTitle() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Quick Add/Edit Form Section -->\r\n <div class=\"tw-px-6 tw-py-3 tw-bg-white tw-overflow-auto\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-2\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Theme' : 'Quick Add Theme' }}</h6>\r\n </div>\r\n </div>\r\n\r\n <!-- Form (kept as-is) -->\r\n <form [formGroup]=\"themeForm\" (ngSubmit)=\"saveTheme()\" class=\"tw-space-y-4\">\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-[1fr_200px] tw-gap-4\">\r\n <!-- Left Side: All Input Fields -->\r\n <div class=\"tw-space-y-4\">\r\n <!-- Row 1: Theme Title and Theme Code -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_title\" formControlName=\"sytm_title\" placeholder=\"Enter theme title\" label=\"Theme Title*\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_theme_code\" formControlName=\"sytm_theme_code\" placeholder=\"Enter theme code\" label=\"Theme Code*\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Row 2: Sub Title and Active Status -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_sub_title\" formControlName=\"sytm_sub_title\" placeholder=\"Enter sub title\" label=\"Sub Title\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n <div class=\"tw-space-y-2 tw-flex tw-items-center\">\r\n <cide-ele-input\r\n id=\"sytm_isactive_cb\"\r\n type=\"checkbox\"\r\n label=\"Active\"\r\n size=\"sm\"\r\n formControlName=\"sytm_isactive\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Row 3: Description -->\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-textarea id=\"sytm_desc\" formControlName=\"sytm_desc\" placeholder=\"Enter theme description\" rows=\"2\" label=\"Description\" size=\"sm\"></cide-ele-textarea>\r\n </div>\r\n </div>\r\n \r\n <!-- Right Side: File Upload -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-start tw-items-center tw-p-0\">\r\n <cide-ele-file-input \r\n id=\"sytm_preview_id_fm\" \r\n formControlName=\"sytm_preview_id_fm\"\r\n accept=\"image/*\"\r\n [showPreview]=\"true\"\r\n [previewBoxMode]=\"true\"\r\n [showFileName]=\"false\"\r\n previewWidth=\"180px\"\r\n previewHeight=\"120px\"\r\n placeholderText=\"Upload Preview Image\"\r\n placeholderIcon=\"image\"\r\n [autoUpload]=\"true\"\r\n [uploadData]=\"getPreviewImageUploadData()\"\r\n (uploadSuccess)=\"onPreviewImageUploadSuccess($event)\"\r\n (uploadError)=\"onPreviewImageUploadError($event)\"\r\n (uploadProgressChange)=\"onPreviewImageUploadProgress($event)\">\r\n </cide-ele-file-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Configuration JSON -->\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-json-editor label=\"Configuration JSON\" formControlName=\"sytm_configuration\" [required]=\"true\" [config]=\"{\r\n showLineNumbers: true,\r\n autoFormat: true,\r\n validateOnChange: true,\r\n minHeight: 150,\r\n maxHeight: 300,\r\n placeholder: 'Enter theme configuration JSON...'\r\n }\" helperText=\"Enter valid JSON configuration for the theme\"></cide-ele-json-editor>\r\n </div>\r\n <!-- Layout Configuration + Selection -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\r\n <div class=\"tw-space-y-2\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Layout & Selection</div>\r\n <!-- Selected toggle -->\r\n <div class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-md tw-px-3 tw-py-2\">\r\n <cide-ele-input\r\n id=\"sytm_isselected\"\r\n type=\"checkbox\"\r\n label=\"Selected (Default)\"\r\n size=\"sm\"\r\n formControlName=\"sytm_isselected\">\r\n </cide-ele-input>\r\n </div>\r\n <div formGroupName=\"sytm_layout\" class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-md tw-divide-y tw-overflow-hidden\">\r\n <!-- Sidebar -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_sidebar\">\r\n <cide-ele-input id=\"layout_sidebar_status\" type=\"checkbox\" label=\"Sidebar\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Header -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_header\">\r\n <cide-ele-input id=\"layout_header_status\" type=\"checkbox\" label=\"Header\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Footer -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_footer\">\r\n <cide-ele-input id=\"layout_footer_status\" type=\"checkbox\" label=\"Footer\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Breadcrumb -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_breadcrumb\">\r\n <cide-ele-input id=\"layout_breadcrumb_status\" type=\"checkbox\" label=\"Breadcrumb\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Console -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_console\">\r\n <cide-ele-input id=\"layout_console_status\" type=\"checkbox\" label=\"Console\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Request -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_request\">\r\n <cide-ele-input id=\"layout_request_status\" type=\"checkbox\" label=\"Request\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n </div>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-pt-1\">Toggle active sections. Only one theme can be selected as default. More options can be added here later.</p>\r\n </div>\r\n \r\n <!-- Drawer Configuration -->\r\n <div class=\"tw-space-y-2\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Drawers</div>\r\n <button cideEleButton type=\"button\" size=\"xs\" variant=\"outline\" (click)=\"addDrawer()\">\r\n Add Drawer\r\n </button>\r\n </div>\r\n\r\n <div formGroupName=\"sytm_layout\">\r\n <div class=\"tw-space-y-2\" formArrayName=\"sytm_layout_drawer\">\r\n <div *ngFor=\"let drawerGrp of drawerArray.controls; let i = index\" [formGroupName]=\"i\" class=\"tw-border tw-border-gray-200 tw-rounded-md tw-p-3 tw-flex tw-items-center tw-gap-3\">\r\n <cide-ele-input id=\"drawer_active_{{i}}\" type=\"checkbox\" label=\"Active\" size=\"sm\" formControlName=\"syth_status\"></cide-ele-input>\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-select\r\n id=\"drawer_config_{{i}}\"\r\n label=\"Drawer For\"\r\n size=\"sm\"\r\n [options]=\"drawerConfigOptions\"\r\n formControlName=\"syth_config_syco_for\">\r\n </cide-ele-select>\r\n </div>\r\n <button cideEleButton type=\"button\" size=\"xs\" variant=\"ghost\" (click)=\"removeDrawer(i)\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n <p class=\"tw-text-xs tw-text-gray-500\">Configure multiple drawers as needed.</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-flex tw-flex-col tw-gap-2 tw-pt-4 tw-border-t tw-border-gray-200\">\r\n <div class=\"tw-flex tw-items-center tw-justify-end tw-space-x-3\">\r\n <button cideEleButton type=\"button\" variant=\"outline\" (click)=\"cancelForm()\" [disabled]=\"loading()\">Cancel</button>\r\n <button cideEleButton type=\"submit\" variant=\"primary\" leftIcon=\"add\" [disabled]=\"!themeForm.valid || loading()\" [loading]=\"loading()\">\r\n {{ isEditMode() ? 'Update Theme' : 'Create Theme' }}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Right: Theme gallery (40%) -->\r\n <div class=\"tw-hidden lg:tw-flex tw-w-2/5 tw-flex-col\">\r\n <!-- (Header consolidated above) -->\r\n\r\n <!-- Gallery list -->\r\n <div class=\"tw-flex-1 tw-overflow-auto tw-bg-gray-50\">\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3 tw-p-4\">\r\n @for (theme of filteredThemes(); track theme._id) {\r\n <div class=\"tw-rounded-md tw-transition tw-cursor-pointer tw-relative\"\r\n [ngClass]=\"theme.sytm_isselected\r\n ? 'tw-border tw-border-blue-500 tw-ring-2 tw-ring-blue-200 tw-bg-blue-50/50'\r\n : 'tw-bg-white tw-border tw-border-gray-200 hover:tw-shadow-sm'\"\r\n (click)=\"editTheme(theme)\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n [attr.aria-selected]=\"theme.sytm_isselected ? 'true' : 'false'\"\r\n [attr.aria-label]=\"'Edit theme ' + (theme.sytm_title || theme.sytm_theme_code)\"\r\n (keydown.enter)=\"editTheme(theme)\"\r\n (keydown.space)=\"$event.preventDefault(); editTheme(theme)\">\r\n\r\n <!-- Selected badge -->\r\n <div *ngIf=\"theme.sytm_isselected\"\r\n class=\"tw-absolute tw-top-2 tw-right-2 tw-flex tw-items-center tw-justify-center tw-w-6 tw-h-6 tw-rounded-full tw-bg-blue-600 tw-text-white\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">check</cide-ele-icon>\r\n </div>\r\n \r\n <div class=\"tw-aspect-[16/9] tw-bg-gray-100 tw-rounded-t-md tw-overflow-hidden tw-flex tw-items-center tw-justify-center\">\r\n @if (theme.sytm_preview_id_fm) {\r\n <img \r\n cideEleFileImage \r\n [fileId]=\"theme.sytm_preview_id_fm\" \r\n [altText]=\"'Theme Preview'\"\r\n class=\"tw-w-full tw-h-full tw-object-cover\" />\r\n } @else {\r\n <div class=\"tw-text-gray-400 tw-text-xs\">No preview</div>\r\n }\r\n </div>\r\n <div class=\"tw-p-3 tw-space-y-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"theme.sytm_title\">{{ theme.sytm_title || 'Untitled Theme' }}</div>\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" [title]=\"theme.sytm_theme_code\">{{ theme.sytm_theme_code }}</div>\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-pt-1\">\r\n <span class=\"tw-inline-flex tw-items-center tw-gap-1 tw-text-xs\" [ngClass]=\"theme.sytm_isactive ? 'tw-text-green-700' : 'tw-text-red-700'\">\r\n <span class=\"tw-w-1.5 tw-h-1.5 tw-rounded-full\" [ngClass]=\"theme.sytm_isactive ? 'tw-bg-green-500' : 'tw-bg-red-500'\"></span>\r\n {{ theme.sytm_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n <div class=\"tw-flex tw-items-center tw-gap-1\">\r\n <!-- Set Selected Button - Clear and Simple -->\r\n @if (theme.sytm_isselected) {\r\n <span class=\"tw-inline-flex tw-items-center tw-gap-1 tw-px-2 tw-py-1 tw-bg-green-100 tw-text-green-800 tw-rounded-md tw-text-xs tw-font-medium\">\r\n <cide-ele-icon class=\"tw-w-3 tw-h-3\">check</cide-ele-icon>\r\n Selected\r\n </span>\r\n } @else {\r\n <button cideEleButton \r\n variant=\"outline\" \r\n size=\"xs\"\r\n (click)=\"$event.stopPropagation(); setSelectedTheme(theme)\"\r\n [attr.aria-label]=\"'Select ' + (theme.sytm_title || theme.sytm_theme_code) + ' theme'\"\r\n class=\"tw-text-xs\">\r\n Select\r\n </button>\r\n }\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" (click)=\"$event.stopPropagation(); editTheme(theme)\"\r\n [attr.aria-label]=\"'Edit theme ' + (theme.sytm_title || theme.sytm_theme_code)\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">edit</cide-ele-icon>\r\n </button>\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" (click)=\"$event.stopPropagation(); deleteTheme(theme)\"\r\n [attr.aria-label]=\"'Delete theme ' + (theme.sytm_title || theme.sytm_theme_code)\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (!loading() && filteredThemes().length === 0) {\r\n <div class=\"tw-col-span-full tw-text-center tw-text-xs tw-text-gray-500 tw-py-8\">No themes found</div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- \r\n Angular Template References for Grid Renderers (Best Practice)\r\n \r\n These ng-template elements represent the Angular best practice for custom rendering.\r\n They provide:\r\n - Type safety with template context\r\n - Component lifecycle integration\r\n - Change detection optimization\r\n - Proper event handling\r\n - Accessibility features\r\n \r\n Note: Current data grid uses string renderers for compatibility.\r\n Templates are maintained for future component enhancement.\r\n-->\r\n\r\n<!-- Theme Details Renderer Template -->\r\n<ng-template #themeDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Theme Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon \r\n class=\"tw-text-purple-600\" \r\n size=\"xs\">\r\n palette\r\n </cide-ele-icon>\r\n </div>\r\n \r\n <!-- Theme Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \r\n [title]=\"row.sytm_title\">\r\n {{ row.sytm_title || 'Untitled' }}\r\n </div>\r\n @if (row.sytm_desc) {\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \r\n [title]=\"row.sytm_desc\">\r\n {{ row.sytm_desc }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Theme Status Renderer Template -->\r\n<ng-template #themeStatusRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\r\n [ngClass]=\"row.sytm_isactive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800'\">\r\n {{ row.sytm_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown Renderer Template -->\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown \r\n [items]=\"getActionDropdownItems(row)\"\r\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template> ", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1$2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { 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: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }, { 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: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "component", type: CideEleJsonEditorComponent, selector: "cide-ele-json-editor", inputs: ["label", "helperText", "required", "disabled", "showCharacterCount", "config"], outputs: ["valueChange", "objectChange", "errorsChange", "validChange"] }, { kind: "component", type: CideEleFileInputComponent, selector: "cide-ele-file-input", inputs: ["label", "accept", "multiple", "disabled", "required", "helperText", "errorText", "showPreview", "previewWidth", "previewHeight", "previewBoxMode", "showFileName", "placeholderText", "placeholderIcon", "autoUpload", "uploadData", "showFloatingUploader", "floatingUploaderGroupId"], outputs: ["fileChange", "uploadSuccess", "uploadError", "uploadProgressChange"] }, { kind: "directive", type: CideEleFileImageDirective, selector: "[cideEleFileImage]", inputs: ["fileId", "altText"] }] });
|
|
7126
7099
|
}
|
|
7127
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
7100
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCorePageThemeComponent, decorators: [{
|
|
7128
7101
|
type: Component,
|
|
7129
7102
|
args: [{ selector: 'cide-core-page-theme', standalone: true, imports: [
|
|
7130
7103
|
CommonModule,
|
|
@@ -7140,7 +7113,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
7140
7113
|
CideEleFileInputComponent,
|
|
7141
7114
|
CideEleFileImageDirective,
|
|
7142
7115
|
], template: "<!-- Page Theme Container -->\r\n<div class=\"tw-flex tw-h-full tw-w-full\">\r\n \r\n <!-- Left: Form and header (60%) -->\r\n <div class=\"tw-w-full lg:tw-w-3/5 tw-flex tw-flex-col tw-border-r tw-border-gray-200\">\r\n\r\n <!-- Header Section -->\r\n <div class=\"tw-px-6 tw-py-2 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-2 sm:tw-space-y-0\">\r\n\r\n <!-- Title and Back Button -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-4\">\r\n <button cideEleButton variant=\"ghost\" size=\"sm\" (click)=\"goBack();\" class=\"tw-text-gray-600 hover:tw-text-gray-900\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">arrow_back</cide-ele-icon>\r\n </button>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">palette</cide-ele-icon>\r\n <div>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Theme Management</h5>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-m-0\">Page: {{ pageTitle() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Quick Add/Edit Form Section -->\r\n <div class=\"tw-px-6 tw-py-3 tw-bg-white tw-overflow-auto\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-2\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Theme' : 'Quick Add Theme' }}</h6>\r\n </div>\r\n </div>\r\n\r\n <!-- Form (kept as-is) -->\r\n <form [formGroup]=\"themeForm\" (ngSubmit)=\"saveTheme()\" class=\"tw-space-y-4\">\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-[1fr_200px] tw-gap-4\">\r\n <!-- Left Side: All Input Fields -->\r\n <div class=\"tw-space-y-4\">\r\n <!-- Row 1: Theme Title and Theme Code -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_title\" formControlName=\"sytm_title\" placeholder=\"Enter theme title\" label=\"Theme Title*\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_theme_code\" formControlName=\"sytm_theme_code\" placeholder=\"Enter theme code\" label=\"Theme Code*\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Row 2: Sub Title and Active Status -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_sub_title\" formControlName=\"sytm_sub_title\" placeholder=\"Enter sub title\" label=\"Sub Title\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n <div class=\"tw-space-y-2 tw-flex tw-items-center\">\r\n <cide-ele-input\r\n id=\"sytm_isactive_cb\"\r\n type=\"checkbox\"\r\n label=\"Active\"\r\n size=\"sm\"\r\n formControlName=\"sytm_isactive\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Row 3: Description -->\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-textarea id=\"sytm_desc\" formControlName=\"sytm_desc\" placeholder=\"Enter theme description\" rows=\"2\" label=\"Description\" size=\"sm\"></cide-ele-textarea>\r\n </div>\r\n </div>\r\n \r\n <!-- Right Side: File Upload -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-start tw-items-center tw-p-0\">\r\n <cide-ele-file-input \r\n id=\"sytm_preview_id_fm\" \r\n formControlName=\"sytm_preview_id_fm\"\r\n accept=\"image/*\"\r\n [showPreview]=\"true\"\r\n [previewBoxMode]=\"true\"\r\n [showFileName]=\"false\"\r\n previewWidth=\"180px\"\r\n previewHeight=\"120px\"\r\n placeholderText=\"Upload Preview Image\"\r\n placeholderIcon=\"image\"\r\n [autoUpload]=\"true\"\r\n [uploadData]=\"getPreviewImageUploadData()\"\r\n (uploadSuccess)=\"onPreviewImageUploadSuccess($event)\"\r\n (uploadError)=\"onPreviewImageUploadError($event)\"\r\n (uploadProgressChange)=\"onPreviewImageUploadProgress($event)\">\r\n </cide-ele-file-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Configuration JSON -->\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-json-editor label=\"Configuration JSON\" formControlName=\"sytm_configuration\" [required]=\"true\" [config]=\"{\r\n showLineNumbers: true,\r\n autoFormat: true,\r\n validateOnChange: true,\r\n minHeight: 150,\r\n maxHeight: 300,\r\n placeholder: 'Enter theme configuration JSON...'\r\n }\" helperText=\"Enter valid JSON configuration for the theme\"></cide-ele-json-editor>\r\n </div>\r\n <!-- Layout Configuration + Selection -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\r\n <div class=\"tw-space-y-2\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Layout & Selection</div>\r\n <!-- Selected toggle -->\r\n <div class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-md tw-px-3 tw-py-2\">\r\n <cide-ele-input\r\n id=\"sytm_isselected\"\r\n type=\"checkbox\"\r\n label=\"Selected (Default)\"\r\n size=\"sm\"\r\n formControlName=\"sytm_isselected\">\r\n </cide-ele-input>\r\n </div>\r\n <div formGroupName=\"sytm_layout\" class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-md tw-divide-y tw-overflow-hidden\">\r\n <!-- Sidebar -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_sidebar\">\r\n <cide-ele-input id=\"layout_sidebar_status\" type=\"checkbox\" label=\"Sidebar\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Header -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_header\">\r\n <cide-ele-input id=\"layout_header_status\" type=\"checkbox\" label=\"Header\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Footer -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_footer\">\r\n <cide-ele-input id=\"layout_footer_status\" type=\"checkbox\" label=\"Footer\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Breadcrumb -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_breadcrumb\">\r\n <cide-ele-input id=\"layout_breadcrumb_status\" type=\"checkbox\" label=\"Breadcrumb\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Console -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_console\">\r\n <cide-ele-input id=\"layout_console_status\" type=\"checkbox\" label=\"Console\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Request -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_request\">\r\n <cide-ele-input id=\"layout_request_status\" type=\"checkbox\" label=\"Request\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n </div>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-pt-1\">Toggle active sections. Only one theme can be selected as default. More options can be added here later.</p>\r\n </div>\r\n \r\n <!-- Drawer Configuration -->\r\n <div class=\"tw-space-y-2\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Drawers</div>\r\n <button cideEleButton type=\"button\" size=\"xs\" variant=\"outline\" (click)=\"addDrawer()\">\r\n Add Drawer\r\n </button>\r\n </div>\r\n\r\n <div formGroupName=\"sytm_layout\">\r\n <div class=\"tw-space-y-2\" formArrayName=\"sytm_layout_drawer\">\r\n <div *ngFor=\"let drawerGrp of drawerArray.controls; let i = index\" [formGroupName]=\"i\" class=\"tw-border tw-border-gray-200 tw-rounded-md tw-p-3 tw-flex tw-items-center tw-gap-3\">\r\n <cide-ele-input id=\"drawer_active_{{i}}\" type=\"checkbox\" label=\"Active\" size=\"sm\" formControlName=\"syth_status\"></cide-ele-input>\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-select\r\n id=\"drawer_config_{{i}}\"\r\n label=\"Drawer For\"\r\n size=\"sm\"\r\n [options]=\"drawerConfigOptions\"\r\n formControlName=\"syth_config_syco_for\">\r\n </cide-ele-select>\r\n </div>\r\n <button cideEleButton type=\"button\" size=\"xs\" variant=\"ghost\" (click)=\"removeDrawer(i)\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n <p class=\"tw-text-xs tw-text-gray-500\">Configure multiple drawers as needed.</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-flex tw-flex-col tw-gap-2 tw-pt-4 tw-border-t tw-border-gray-200\">\r\n <div class=\"tw-flex tw-items-center tw-justify-end tw-space-x-3\">\r\n <button cideEleButton type=\"button\" variant=\"outline\" (click)=\"cancelForm()\" [disabled]=\"loading()\">Cancel</button>\r\n <button cideEleButton type=\"submit\" variant=\"primary\" leftIcon=\"add\" [disabled]=\"!themeForm.valid || loading()\" [loading]=\"loading()\">\r\n {{ isEditMode() ? 'Update Theme' : 'Create Theme' }}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Right: Theme gallery (40%) -->\r\n <div class=\"tw-hidden lg:tw-flex tw-w-2/5 tw-flex-col\">\r\n <!-- (Header consolidated above) -->\r\n\r\n <!-- Gallery list -->\r\n <div class=\"tw-flex-1 tw-overflow-auto tw-bg-gray-50\">\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3 tw-p-4\">\r\n @for (theme of filteredThemes(); track theme._id) {\r\n <div class=\"tw-rounded-md tw-transition tw-cursor-pointer tw-relative\"\r\n [ngClass]=\"theme.sytm_isselected\r\n ? 'tw-border tw-border-blue-500 tw-ring-2 tw-ring-blue-200 tw-bg-blue-50/50'\r\n : 'tw-bg-white tw-border tw-border-gray-200 hover:tw-shadow-sm'\"\r\n (click)=\"editTheme(theme)\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n [attr.aria-selected]=\"theme.sytm_isselected ? 'true' : 'false'\"\r\n [attr.aria-label]=\"'Edit theme ' + (theme.sytm_title || theme.sytm_theme_code)\"\r\n (keydown.enter)=\"editTheme(theme)\"\r\n (keydown.space)=\"$event.preventDefault(); editTheme(theme)\">\r\n\r\n <!-- Selected badge -->\r\n <div *ngIf=\"theme.sytm_isselected\"\r\n class=\"tw-absolute tw-top-2 tw-right-2 tw-flex tw-items-center tw-justify-center tw-w-6 tw-h-6 tw-rounded-full tw-bg-blue-600 tw-text-white\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">check</cide-ele-icon>\r\n </div>\r\n \r\n <div class=\"tw-aspect-[16/9] tw-bg-gray-100 tw-rounded-t-md tw-overflow-hidden tw-flex tw-items-center tw-justify-center\">\r\n @if (theme.sytm_preview_id_fm) {\r\n <img \r\n cideEleFileImage \r\n [fileId]=\"theme.sytm_preview_id_fm\" \r\n [altText]=\"'Theme Preview'\"\r\n class=\"tw-w-full tw-h-full tw-object-cover\" />\r\n } @else {\r\n <div class=\"tw-text-gray-400 tw-text-xs\">No preview</div>\r\n }\r\n </div>\r\n <div class=\"tw-p-3 tw-space-y-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"theme.sytm_title\">{{ theme.sytm_title || 'Untitled Theme' }}</div>\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" [title]=\"theme.sytm_theme_code\">{{ theme.sytm_theme_code }}</div>\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-pt-1\">\r\n <span class=\"tw-inline-flex tw-items-center tw-gap-1 tw-text-xs\" [ngClass]=\"theme.sytm_isactive ? 'tw-text-green-700' : 'tw-text-red-700'\">\r\n <span class=\"tw-w-1.5 tw-h-1.5 tw-rounded-full\" [ngClass]=\"theme.sytm_isactive ? 'tw-bg-green-500' : 'tw-bg-red-500'\"></span>\r\n {{ theme.sytm_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n <div class=\"tw-flex tw-items-center tw-gap-1\">\r\n <!-- Set Selected Button - Clear and Simple -->\r\n @if (theme.sytm_isselected) {\r\n <span class=\"tw-inline-flex tw-items-center tw-gap-1 tw-px-2 tw-py-1 tw-bg-green-100 tw-text-green-800 tw-rounded-md tw-text-xs tw-font-medium\">\r\n <cide-ele-icon class=\"tw-w-3 tw-h-3\">check</cide-ele-icon>\r\n Selected\r\n </span>\r\n } @else {\r\n <button cideEleButton \r\n variant=\"outline\" \r\n size=\"xs\"\r\n (click)=\"$event.stopPropagation(); setSelectedTheme(theme)\"\r\n [attr.aria-label]=\"'Select ' + (theme.sytm_title || theme.sytm_theme_code) + ' theme'\"\r\n class=\"tw-text-xs\">\r\n Select\r\n </button>\r\n }\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" (click)=\"$event.stopPropagation(); editTheme(theme)\"\r\n [attr.aria-label]=\"'Edit theme ' + (theme.sytm_title || theme.sytm_theme_code)\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">edit</cide-ele-icon>\r\n </button>\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" (click)=\"$event.stopPropagation(); deleteTheme(theme)\"\r\n [attr.aria-label]=\"'Delete theme ' + (theme.sytm_title || theme.sytm_theme_code)\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (!loading() && filteredThemes().length === 0) {\r\n <div class=\"tw-col-span-full tw-text-center tw-text-xs tw-text-gray-500 tw-py-8\">No themes found</div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- \r\n Angular Template References for Grid Renderers (Best Practice)\r\n \r\n These ng-template elements represent the Angular best practice for custom rendering.\r\n They provide:\r\n - Type safety with template context\r\n - Component lifecycle integration\r\n - Change detection optimization\r\n - Proper event handling\r\n - Accessibility features\r\n \r\n Note: Current data grid uses string renderers for compatibility.\r\n Templates are maintained for future component enhancement.\r\n-->\r\n\r\n<!-- Theme Details Renderer Template -->\r\n<ng-template #themeDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Theme Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon \r\n class=\"tw-text-purple-600\" \r\n size=\"xs\">\r\n palette\r\n </cide-ele-icon>\r\n </div>\r\n \r\n <!-- Theme Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \r\n [title]=\"row.sytm_title\">\r\n {{ row.sytm_title || 'Untitled' }}\r\n </div>\r\n @if (row.sytm_desc) {\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \r\n [title]=\"row.sytm_desc\">\r\n {{ row.sytm_desc }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Theme Status Renderer Template -->\r\n<ng-template #themeStatusRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\r\n [ngClass]=\"row.sytm_isactive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800'\">\r\n {{ row.sytm_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown Renderer Template -->\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown \r\n [items]=\"getActionDropdownItems(row)\"\r\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template> " }]
|
|
7143
|
-
}] });
|
|
7116
|
+
}], propDecorators: { themeDetailsRendererTemplate: [{ type: i0.ViewChild, args: ['themeDetailsRendererTemplate', { isSignal: true }] }], themeStatusRendererTemplate: [{ type: i0.ViewChild, args: ['themeStatusRendererTemplate', { isSignal: true }] }], actionsDropdownRendererTemplate: [{ type: i0.ViewChild, args: ['actionsDropdownRendererTemplate', { isSignal: true }] }] } });
|
|
7144
7117
|
|
|
7145
7118
|
var pageTheme_component = /*#__PURE__*/Object.freeze({
|
|
7146
7119
|
__proto__: null,
|
|
@@ -7268,10 +7241,10 @@ class CideCorePageControlsService {
|
|
|
7268
7241
|
console.error('Page Controls Service Error:', errorMessage);
|
|
7269
7242
|
return throwError(() => new Error(errorMessage));
|
|
7270
7243
|
}
|
|
7271
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
7272
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.
|
|
7244
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCorePageControlsService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
7245
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCorePageControlsService, providedIn: 'root' });
|
|
7273
7246
|
}
|
|
7274
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
7247
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCorePageControlsService, decorators: [{
|
|
7275
7248
|
type: Injectable,
|
|
7276
7249
|
args: [{
|
|
7277
7250
|
providedIn: 'root'
|
|
@@ -7730,10 +7703,10 @@ class CideCorePageControlsComponent {
|
|
|
7730
7703
|
trackByControlId(index, control) {
|
|
7731
7704
|
return control._id || '';
|
|
7732
7705
|
}
|
|
7733
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
7734
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: CideCorePageControlsComponent, isStandalone: true, selector: "cide-core-page-controls", ngImport: i0, template: "<!-- Page Controls Container -->\r\n<div class=\"tw-flex tw-flex-col tw-h-full tw-bg-gray-50\">\r\n <!-- Header Section -->\r\n <div class=\"tw-bg-white tw-border-b tw-border-gray-200 tw-px-6 tw-py-4\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-4\">\r\n <button \r\n cideEleButton\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n (click)=\"goBack()\"\r\n class=\"tw-flex tw-items-center tw-justify-center tw-w-8 tw-h-8 tw-text-gray-600 hover:tw-text-gray-900 hover:tw-bg-gray-100 tw-rounded-md tw-transition-colors\">\r\n <cide-ele-icon>arrow_back</cide-ele-icon>\r\n </button>\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-xl\">settings</cide-ele-icon>\r\n <div>\r\n <h1 class=\"tw-text-xl tw-font-semibold tw-text-gray-900 tw-mb-0\">Control Management</h1>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-mb-0\">Page: {{ pageTitle() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n <div class=\"tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md tw-p-4 tw-mx-6 tw-mt-4 tw-flex tw-items-start tw-space-x-3\" *ngIf=\"error()\">\r\n <cide-ele-icon class=\"tw-text-red-500 tw-flex-shrink-0 tw-mt-0.5\">error</cide-ele-icon>\r\n <div>\r\n <h3 class=\"tw-text-red-800 tw-font-medium tw-mb-1\">Error</h3>\r\n <p class=\"tw-text-red-700 tw-text-sm tw-mb-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-flex tw-flex-1 tw-gap-6 tw-p-6 tw-overflow-hidden lg:tw-flex-row tw-flex-col\">\r\n <!-- Form Section -->\r\n <div class=\"tw-w-full lg:tw-w-3/5 tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-flex tw-flex-col\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-p-6 tw-border-b tw-border-gray-200\">\r\n <cide-ele-icon class=\"tw-text-blue-600\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h3 class=\"tw-text-lg tw-font-medium tw-text-gray-900 tw-mb-0\">{{ isEditMode() ? 'Edit Control' : 'Quick Add Control' }}</h3>\r\n </div>\r\n\r\n <!-- Form -->\r\n <form [formGroup]=\"controlForm\" (ngSubmit)=\"saveControl()\" class=\"tw-flex tw-flex-col tw-flex-1 tw-p-6 tw-overflow-y-auto\">\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-4 tw-mb-6\">\r\n \r\n <!-- Basic Information Section -->\r\n <!-- Control Key -->\r\n <div class=\"tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_key\"\r\n formControlName=\"sype_key\"\r\n placeholder=\"Enter control key\"\r\n label=\"Control Key\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Control Label -->\r\n <div class=\"tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_label\"\r\n formControlName=\"sype_label\"\r\n placeholder=\"Enter control label\"\r\n label=\"Control Label\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Control Type -->\r\n <div class=\"tw-space-y-1\">\r\n <cide-ele-select\r\n id=\"sype_type\"\r\n formControlName=\"sype_type\"\r\n [options]=\"[\r\n { value: 'text', label: 'Text Input' },\r\n { value: 'textarea', label: 'Text Area' },\r\n { value: 'select', label: 'Select' },\r\n { value: 'checkbox', label: 'Checkbox' },\r\n { value: 'radio', label: 'Radio' },\r\n { value: 'date', label: 'Date' },\r\n { value: 'number', label: 'Number' },\r\n { value: 'email', label: 'Email' },\r\n { value: 'password', label: 'Password' },\r\n { value: 'file', label: 'File Upload' }\r\n ]\"\r\n label=\"Control Type\"\r\n size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Status - Checkbox aligned properly -->\r\n <div class=\"tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_isactive\"\r\n type=\"checkbox\"\r\n formControlName=\"sype_isactive\"\r\n label=\"Active Status\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Placeholder -->\r\n <div class=\"tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_placeholder\"\r\n formControlName=\"sype_placeholder\"\r\n placeholder=\"Enter placeholder text\"\r\n label=\"Placeholder\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Auto Complete - Checkbox aligned properly -->\r\n <div class=\"tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_auto_complete\"\r\n type=\"checkbox\"\r\n formControlName=\"sype_auto_complete\"\r\n label=\"Auto Complete\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Tooltip -->\r\n <div class=\"tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_tooltip\"\r\n formControlName=\"sype_tooltip\"\r\n placeholder=\"Enter tooltip text\"\r\n label=\"Tooltip\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Validation & Sizing Section -->\r\n <!-- Min/Max Length - Side by side -->\r\n <div class=\"tw-col-span-2 tw-flex tw-gap-4\">\r\n <div class=\"tw-flex-1 tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_min_length\"\r\n type=\"number\"\r\n formControlName=\"sype_min_length\"\r\n placeholder=\"0\"\r\n label=\"Min Length\"\r\n size=\"xs\">\r\n </cide-ele-input>\r\n </div>\r\n <div class=\"tw-flex-1 tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_max_length\"\r\n type=\"number\"\r\n formControlName=\"sype_max_length\"\r\n placeholder=\"20\"\r\n label=\"Max Length\"\r\n size=\"xs\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Size & Label Placement - Side by side -->\r\n <div class=\"tw-col-span-2 tw-flex tw-gap-4\">\r\n <div class=\"tw-flex-1 tw-space-y-1\">\r\n <cide-ele-select\r\n id=\"sype_size\"\r\n formControlName=\"sype_size\"\r\n label=\"Size\"\r\n size=\"xs\"\r\n [options]=\"[\r\n { value: 'xs', label: 'XS' },\r\n { value: 'sm', label: 'SM' },\r\n { value: 'md', label: 'MD' },\r\n { value: 'lg', label: 'LG' },\r\n { value: 'xl', label: 'XL' },\r\n { value: 'xxl', label: 'XXL' }\r\n ]\">\r\n </cide-ele-select>\r\n </div>\r\n <div class=\"tw-flex-1 tw-space-y-1\">\r\n <cide-ele-select\r\n id=\"sype_label_placement\"\r\n formControlName=\"sype_label_placement\"\r\n label=\"Label Placement\"\r\n size=\"xs\"\r\n [options]=\"[\r\n { value: 'left', label: 'Left' },\r\n { value: 'floating', label: 'Floating' },\r\n { value: 'fixed', label: 'Fixed' }\r\n ]\">\r\n </cide-ele-select>\r\n </div>\r\n </div>\r\n\r\n <!-- Width & Height - Side by side -->\r\n <div class=\"tw-col-span-2 tw-flex tw-gap-4\">\r\n <div class=\"tw-flex-1 tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_width\"\r\n type=\"text\"\r\n formControlName=\"sype_width\"\r\n placeholder=\"20px\"\r\n label=\"Width\"\r\n size=\"xs\">\r\n </cide-ele-input>\r\n </div>\r\n <div class=\"tw-flex-1 tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_height\"\r\n type=\"text\"\r\n formControlName=\"sype_height\"\r\n placeholder=\"20px\"\r\n label=\"Height\"\r\n size=\"xs\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Leading Icon -->\r\n <div class=\"tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_leading_icon\"\r\n formControlName=\"sype_leading_icon\"\r\n placeholder=\"Enter icon name\"\r\n label=\"Leading Icon\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Default Value -->\r\n <div class=\"tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_default\"\r\n formControlName=\"sype_default\"\r\n placeholder=\"Enter default value\"\r\n label=\"Default Value\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Regex Pattern -->\r\n <div class=\"tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_regex\"\r\n formControlName=\"sype_regex\"\r\n placeholder=\"Enter regex pattern\"\r\n label=\"Regex Pattern\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Option Key -->\r\n <div class=\"tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_option_key\"\r\n formControlName=\"sype_option_key\"\r\n placeholder=\"Enter option key\"\r\n label=\"Option Key\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Entity ID (Auto-assigned from AppState) - Hidden -->\r\n <div class=\"tw-space-y-1\" style=\"display: none;\">\r\n <cide-ele-input\r\n id=\"sype_entity_id_syen\"\r\n formControlName=\"sype_entity_id_syen\"\r\n placeholder=\"Auto-assigned from system\"\r\n label=\"Entity ID (Auto-assigned)\"\r\n size=\"sm\"\r\n readonly>\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Control Options -->\r\n <div class=\"tw-col-span-2 tw-space-y-1\">\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mb-3\">Control Options</h6>\r\n <div class=\"tw-grid tw-grid-cols-1 sm:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-3\">\r\n \r\n <!-- Required -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-input\r\n id=\"sype_required\"\r\n type=\"checkbox\"\r\n formControlName=\"sype_required\"\r\n label=\"Required\"\r\n size=\"xs\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Disabled -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-input\r\n id=\"sype_disabled\"\r\n type=\"checkbox\"\r\n formControlName=\"sype_disabled\"\r\n label=\"Disabled\"\r\n size=\"xs\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Hide Label -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-input\r\n id=\"sype_label_hide\"\r\n type=\"checkbox\"\r\n formControlName=\"sype_label_hide\"\r\n label=\"Hide Label\"\r\n size=\"xs\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Hide Helper Text -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-input\r\n id=\"sype_hide_helper_and_error_text\"\r\n type=\"checkbox\"\r\n formControlName=\"sype_hide_helper_and_error_text\"\r\n label=\"Hide Helper Text\"\r\n size=\"xs\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Helper Text Collapse -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-input\r\n id=\"sype_helper_text_collapse\"\r\n type=\"checkbox\"\r\n formControlName=\"sype_helper_text_collapse\"\r\n label=\"Collapse Helper\"\r\n size=\"xs\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-flex tw-justify-between tw-items-center tw-pt-4 tw-border-t tw-border-gray-200 tw-mt-auto\">\r\n <!-- Error Message (Left Side) -->\r\n <cide-form-field-error [formGroup]=\"controlForm\"></cide-form-field-error>\r\n \r\n <!-- Action Buttons (Right Side) -->\r\n <div class=\"tw-flex tw-gap-3\">\r\n <button \r\n cideEleButton\r\n type=\"button\"\r\n variant=\"outline\"\r\n (click)=\"cancelForm()\"\r\n [disabled]=\"loading()\">\r\n Cancel\r\n </button>\r\n <button \r\n cideEleButton\r\n type=\"submit\"\r\n variant=\"primary\"\r\n [disabled]=\"loading()\">\r\n {{ isEditMode() ? 'Update Control' : 'Create Control' }}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n <!-- Controls List Section -->\r\n <div class=\"tw-w-full lg:tw-w-2/5 tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-flex tw-flex-col lg:tw-max-h-none tw-max-h-96\">\r\n <div class=\"tw-p-6 tw-border-b tw-border-gray-200\">\r\n <h3 class=\"tw-text-lg tw-font-medium tw-text-gray-900 tw-mb-1\">Page Controls</h3>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-mb-0\">Controls connected to this page</p>\r\n </div>\r\n \r\n <div class=\"tw-flex-1 tw-overflow-y-auto tw-p-4\" *ngIf=\"!loading() && controls().length > 0\">\r\n <div \r\n class=\"tw-bg-gray-50 tw-border tw-border-gray-200 tw-rounded-lg tw-p-4 tw-mb-3 tw-cursor-pointer tw-transition-all tw-duration-200 hover:tw-shadow-md hover:tw-border-gray-300 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500 focus:tw-ring-offset-2\" \r\n *ngFor=\"let control of controls(); trackBy: trackByControlId\"\r\n [class.tw-bg-blue-50]=\"selectedControlId() === control._id\"\r\n [class.tw-border-blue-300]=\"selectedControlId() === control._id\"\r\n [class.tw-shadow-md]=\"selectedControlId() === control._id\"\r\n (click)=\"selectControl(control)\"\r\n (keyup.enter)=\"selectControl(control)\"\r\n (keyup.space)=\"selectControl(control)\"\r\n tabindex=\"0\"\r\n role=\"button\"\r\n [attr.aria-label]=\"'Select control ' + (control.sype_label || control.sype_key)\">\r\n <div class=\"tw-flex tw-items-start tw-space-x-3\">\r\n <div class=\"tw-flex-shrink-0 tw-w-10 tw-h-10 tw-bg-blue-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\r\n <cide-ele-icon class=\"tw-text-blue-600\">settings_input_component</cide-ele-icon>\r\n </div>\r\n <div class=\"tw-flex-1 tw-min-w-0\">\r\n <h4 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mb-1 tw-truncate\">{{ control.sype_label || control.sype_key }}</h4>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-mb-2 tw-truncate\">{{ control.sype_tooltip || 'No tooltip' }}</p>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-gray-100 tw-text-gray-800\">{{ control.sype_type }}</span>\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium\" \r\n [class.tw-bg-red-100]=\"!control.sype_isactive\"\r\n [class.tw-text-red-800]=\"!control.sype_isactive\"\r\n [class.tw-bg-green-100]=\"control.sype_isactive\"\r\n [class.tw-text-green-800]=\"control.sype_isactive\">\r\n {{ control.sype_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"tw-flex tw-items-center tw-space-x-1 tw-opacity-0 tw-transition-opacity tw-duration-200 group-hover:tw-opacity-100\" \r\n [class.tw-opacity-100]=\"selectedControlId() === control._id\">\r\n <button \r\n cideEleButton\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n (click)=\"editControl(control); $event.stopPropagation()\">\r\n <cide-ele-icon>edit</cide-ele-icon>\r\n </button>\r\n <button \r\n cideEleButton\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n (click)=\"deleteControl(control); $event.stopPropagation()\">\r\n <cide-ele-icon>delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-py-12 tw-text-center\" *ngIf=\"!loading() && controls().length === 0\">\r\n <cide-ele-icon class=\"tw-text-4xl tw-text-gray-300 tw-mb-4\">settings_input_component</cide-ele-icon>\r\n <p class=\"tw-text-gray-500 tw-font-medium tw-mb-1\">No controls available</p>\r\n <small class=\"tw-text-gray-400\">Create controls using the form on the left</small>\r\n </div>\r\n\r\n <div class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-py-12 tw-text-center\" *ngIf=\"loading()\">\r\n <cide-ele-icon class=\"tw-text-2xl tw-text-blue-500 tw-mb-4 tw-animate-spin\">refresh</cide-ele-icon>\r\n <p class=\"tw-text-gray-500\">Loading controls...</p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n ", styles: [".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}@media (max-width: 640px){.main-content{padding:1rem;gap:1rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.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: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey"], outputs: ["ngModelChange", "change", "searchChange"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideFormFieldErrorComponent, selector: "cide-form-field-error", inputs: ["control", "formGroup", "fieldName", "customMessages"] }] });
|
|
7706
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCorePageControlsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7707
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: CideCorePageControlsComponent, isStandalone: true, selector: "cide-core-page-controls", ngImport: i0, template: "<!-- Page Controls Container -->\r\n<div class=\"tw-flex tw-flex-col tw-h-full tw-bg-gray-50\">\r\n <!-- Header Section -->\r\n <div class=\"tw-bg-white tw-border-b tw-border-gray-200 tw-px-6 tw-py-4\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-4\">\r\n <button \r\n cideEleButton\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n (click)=\"goBack()\"\r\n class=\"tw-flex tw-items-center tw-justify-center tw-w-8 tw-h-8 tw-text-gray-600 hover:tw-text-gray-900 hover:tw-bg-gray-100 tw-rounded-md tw-transition-colors\">\r\n <cide-ele-icon>arrow_back</cide-ele-icon>\r\n </button>\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-xl\">settings</cide-ele-icon>\r\n <div>\r\n <h1 class=\"tw-text-xl tw-font-semibold tw-text-gray-900 tw-mb-0\">Control Management</h1>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-mb-0\">Page: {{ pageTitle() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n <div class=\"tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md tw-p-4 tw-mx-6 tw-mt-4 tw-flex tw-items-start tw-space-x-3\" *ngIf=\"error()\">\r\n <cide-ele-icon class=\"tw-text-red-500 tw-flex-shrink-0 tw-mt-0.5\">error</cide-ele-icon>\r\n <div>\r\n <h3 class=\"tw-text-red-800 tw-font-medium tw-mb-1\">Error</h3>\r\n <p class=\"tw-text-red-700 tw-text-sm tw-mb-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-flex tw-flex-1 tw-gap-6 tw-p-6 tw-overflow-hidden lg:tw-flex-row tw-flex-col\">\r\n <!-- Form Section -->\r\n <div class=\"tw-w-full lg:tw-w-3/5 tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-flex tw-flex-col\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-p-6 tw-border-b tw-border-gray-200\">\r\n <cide-ele-icon class=\"tw-text-blue-600\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h3 class=\"tw-text-lg tw-font-medium tw-text-gray-900 tw-mb-0\">{{ isEditMode() ? 'Edit Control' : 'Quick Add Control' }}</h3>\r\n </div>\r\n\r\n <!-- Form -->\r\n <form [formGroup]=\"controlForm\" (ngSubmit)=\"saveControl()\" class=\"tw-flex tw-flex-col tw-flex-1 tw-p-6 tw-overflow-y-auto\">\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-4 tw-mb-6\">\r\n \r\n <!-- Basic Information Section -->\r\n <!-- Control Key -->\r\n <div class=\"tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_key\"\r\n formControlName=\"sype_key\"\r\n placeholder=\"Enter control key\"\r\n label=\"Control Key\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Control Label -->\r\n <div class=\"tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_label\"\r\n formControlName=\"sype_label\"\r\n placeholder=\"Enter control label\"\r\n label=\"Control Label\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Control Type -->\r\n <div class=\"tw-space-y-1\">\r\n <cide-ele-select\r\n id=\"sype_type\"\r\n formControlName=\"sype_type\"\r\n [options]=\"[\r\n { value: 'text', label: 'Text Input' },\r\n { value: 'textarea', label: 'Text Area' },\r\n { value: 'select', label: 'Select' },\r\n { value: 'checkbox', label: 'Checkbox' },\r\n { value: 'radio', label: 'Radio' },\r\n { value: 'date', label: 'Date' },\r\n { value: 'number', label: 'Number' },\r\n { value: 'email', label: 'Email' },\r\n { value: 'password', label: 'Password' },\r\n { value: 'file', label: 'File Upload' }\r\n ]\"\r\n label=\"Control Type\"\r\n size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Status - Checkbox aligned properly -->\r\n <div class=\"tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_isactive\"\r\n type=\"checkbox\"\r\n formControlName=\"sype_isactive\"\r\n label=\"Active Status\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Placeholder -->\r\n <div class=\"tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_placeholder\"\r\n formControlName=\"sype_placeholder\"\r\n placeholder=\"Enter placeholder text\"\r\n label=\"Placeholder\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Auto Complete - Checkbox aligned properly -->\r\n <div class=\"tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_auto_complete\"\r\n type=\"checkbox\"\r\n formControlName=\"sype_auto_complete\"\r\n label=\"Auto Complete\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Tooltip -->\r\n <div class=\"tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_tooltip\"\r\n formControlName=\"sype_tooltip\"\r\n placeholder=\"Enter tooltip text\"\r\n label=\"Tooltip\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Validation & Sizing Section -->\r\n <!-- Min/Max Length - Side by side -->\r\n <div class=\"tw-col-span-2 tw-flex tw-gap-4\">\r\n <div class=\"tw-flex-1 tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_min_length\"\r\n type=\"number\"\r\n formControlName=\"sype_min_length\"\r\n placeholder=\"0\"\r\n label=\"Min Length\"\r\n size=\"xs\">\r\n </cide-ele-input>\r\n </div>\r\n <div class=\"tw-flex-1 tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_max_length\"\r\n type=\"number\"\r\n formControlName=\"sype_max_length\"\r\n placeholder=\"20\"\r\n label=\"Max Length\"\r\n size=\"xs\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Size & Label Placement - Side by side -->\r\n <div class=\"tw-col-span-2 tw-flex tw-gap-4\">\r\n <div class=\"tw-flex-1 tw-space-y-1\">\r\n <cide-ele-select\r\n id=\"sype_size\"\r\n formControlName=\"sype_size\"\r\n label=\"Size\"\r\n size=\"xs\"\r\n [options]=\"[\r\n { value: 'xs', label: 'XS' },\r\n { value: 'sm', label: 'SM' },\r\n { value: 'md', label: 'MD' },\r\n { value: 'lg', label: 'LG' },\r\n { value: 'xl', label: 'XL' },\r\n { value: 'xxl', label: 'XXL' }\r\n ]\">\r\n </cide-ele-select>\r\n </div>\r\n <div class=\"tw-flex-1 tw-space-y-1\">\r\n <cide-ele-select\r\n id=\"sype_label_placement\"\r\n formControlName=\"sype_label_placement\"\r\n label=\"Label Placement\"\r\n size=\"xs\"\r\n [options]=\"[\r\n { value: 'left', label: 'Left' },\r\n { value: 'floating', label: 'Floating' },\r\n { value: 'fixed', label: 'Fixed' }\r\n ]\">\r\n </cide-ele-select>\r\n </div>\r\n </div>\r\n\r\n <!-- Width & Height - Side by side -->\r\n <div class=\"tw-col-span-2 tw-flex tw-gap-4\">\r\n <div class=\"tw-flex-1 tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_width\"\r\n type=\"text\"\r\n formControlName=\"sype_width\"\r\n placeholder=\"20px\"\r\n label=\"Width\"\r\n size=\"xs\">\r\n </cide-ele-input>\r\n </div>\r\n <div class=\"tw-flex-1 tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_height\"\r\n type=\"text\"\r\n formControlName=\"sype_height\"\r\n placeholder=\"20px\"\r\n label=\"Height\"\r\n size=\"xs\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Leading Icon -->\r\n <div class=\"tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_leading_icon\"\r\n formControlName=\"sype_leading_icon\"\r\n placeholder=\"Enter icon name\"\r\n label=\"Leading Icon\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Default Value -->\r\n <div class=\"tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_default\"\r\n formControlName=\"sype_default\"\r\n placeholder=\"Enter default value\"\r\n label=\"Default Value\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Regex Pattern -->\r\n <div class=\"tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_regex\"\r\n formControlName=\"sype_regex\"\r\n placeholder=\"Enter regex pattern\"\r\n label=\"Regex Pattern\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Option Key -->\r\n <div class=\"tw-space-y-1\">\r\n <cide-ele-input\r\n id=\"sype_option_key\"\r\n formControlName=\"sype_option_key\"\r\n placeholder=\"Enter option key\"\r\n label=\"Option Key\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Entity ID (Auto-assigned from AppState) - Hidden -->\r\n <div class=\"tw-space-y-1\" style=\"display: none;\">\r\n <cide-ele-input\r\n id=\"sype_entity_id_syen\"\r\n formControlName=\"sype_entity_id_syen\"\r\n placeholder=\"Auto-assigned from system\"\r\n label=\"Entity ID (Auto-assigned)\"\r\n size=\"sm\"\r\n readonly>\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Control Options -->\r\n <div class=\"tw-col-span-2 tw-space-y-1\">\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mb-3\">Control Options</h6>\r\n <div class=\"tw-grid tw-grid-cols-1 sm:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-3\">\r\n \r\n <!-- Required -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-input\r\n id=\"sype_required\"\r\n type=\"checkbox\"\r\n formControlName=\"sype_required\"\r\n label=\"Required\"\r\n size=\"xs\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Disabled -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-input\r\n id=\"sype_disabled\"\r\n type=\"checkbox\"\r\n formControlName=\"sype_disabled\"\r\n label=\"Disabled\"\r\n size=\"xs\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Hide Label -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-input\r\n id=\"sype_label_hide\"\r\n type=\"checkbox\"\r\n formControlName=\"sype_label_hide\"\r\n label=\"Hide Label\"\r\n size=\"xs\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Hide Helper Text -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-input\r\n id=\"sype_hide_helper_and_error_text\"\r\n type=\"checkbox\"\r\n formControlName=\"sype_hide_helper_and_error_text\"\r\n label=\"Hide Helper Text\"\r\n size=\"xs\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Helper Text Collapse -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-input\r\n id=\"sype_helper_text_collapse\"\r\n type=\"checkbox\"\r\n formControlName=\"sype_helper_text_collapse\"\r\n label=\"Collapse Helper\"\r\n size=\"xs\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-flex tw-justify-between tw-items-center tw-pt-4 tw-border-t tw-border-gray-200 tw-mt-auto\">\r\n <!-- Error Message (Left Side) -->\r\n <cide-form-field-error [formGroup]=\"controlForm\"></cide-form-field-error>\r\n \r\n <!-- Action Buttons (Right Side) -->\r\n <div class=\"tw-flex tw-gap-3\">\r\n <button \r\n cideEleButton\r\n type=\"button\"\r\n variant=\"outline\"\r\n (click)=\"cancelForm()\"\r\n [disabled]=\"loading()\">\r\n Cancel\r\n </button>\r\n <button \r\n cideEleButton\r\n type=\"submit\"\r\n variant=\"primary\"\r\n [disabled]=\"loading()\">\r\n {{ isEditMode() ? 'Update Control' : 'Create Control' }}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n <!-- Controls List Section -->\r\n <div class=\"tw-w-full lg:tw-w-2/5 tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-flex tw-flex-col lg:tw-max-h-none tw-max-h-96\">\r\n <div class=\"tw-p-6 tw-border-b tw-border-gray-200\">\r\n <h3 class=\"tw-text-lg tw-font-medium tw-text-gray-900 tw-mb-1\">Page Controls</h3>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-mb-0\">Controls connected to this page</p>\r\n </div>\r\n \r\n <div class=\"tw-flex-1 tw-overflow-y-auto tw-p-4\" *ngIf=\"!loading() && controls().length > 0\">\r\n <div \r\n class=\"tw-bg-gray-50 tw-border tw-border-gray-200 tw-rounded-lg tw-p-4 tw-mb-3 tw-cursor-pointer tw-transition-all tw-duration-200 hover:tw-shadow-md hover:tw-border-gray-300 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500 focus:tw-ring-offset-2\" \r\n *ngFor=\"let control of controls(); trackBy: trackByControlId\"\r\n [class.tw-bg-blue-50]=\"selectedControlId() === control._id\"\r\n [class.tw-border-blue-300]=\"selectedControlId() === control._id\"\r\n [class.tw-shadow-md]=\"selectedControlId() === control._id\"\r\n (click)=\"selectControl(control)\"\r\n (keyup.enter)=\"selectControl(control)\"\r\n (keyup.space)=\"selectControl(control)\"\r\n tabindex=\"0\"\r\n role=\"button\"\r\n [attr.aria-label]=\"'Select control ' + (control.sype_label || control.sype_key)\">\r\n <div class=\"tw-flex tw-items-start tw-space-x-3\">\r\n <div class=\"tw-flex-shrink-0 tw-w-10 tw-h-10 tw-bg-blue-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\r\n <cide-ele-icon class=\"tw-text-blue-600\">settings_input_component</cide-ele-icon>\r\n </div>\r\n <div class=\"tw-flex-1 tw-min-w-0\">\r\n <h4 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mb-1 tw-truncate\">{{ control.sype_label || control.sype_key }}</h4>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-mb-2 tw-truncate\">{{ control.sype_tooltip || 'No tooltip' }}</p>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-gray-100 tw-text-gray-800\">{{ control.sype_type }}</span>\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium\" \r\n [class.tw-bg-red-100]=\"!control.sype_isactive\"\r\n [class.tw-text-red-800]=\"!control.sype_isactive\"\r\n [class.tw-bg-green-100]=\"control.sype_isactive\"\r\n [class.tw-text-green-800]=\"control.sype_isactive\">\r\n {{ control.sype_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"tw-flex tw-items-center tw-space-x-1 tw-opacity-0 tw-transition-opacity tw-duration-200 group-hover:tw-opacity-100\" \r\n [class.tw-opacity-100]=\"selectedControlId() === control._id\">\r\n <button \r\n cideEleButton\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n (click)=\"editControl(control); $event.stopPropagation()\">\r\n <cide-ele-icon>edit</cide-ele-icon>\r\n </button>\r\n <button \r\n cideEleButton\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n (click)=\"deleteControl(control); $event.stopPropagation()\">\r\n <cide-ele-icon>delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-py-12 tw-text-center\" *ngIf=\"!loading() && controls().length === 0\">\r\n <cide-ele-icon class=\"tw-text-4xl tw-text-gray-300 tw-mb-4\">settings_input_component</cide-ele-icon>\r\n <p class=\"tw-text-gray-500 tw-font-medium tw-mb-1\">No controls available</p>\r\n <small class=\"tw-text-gray-400\">Create controls using the form on the left</small>\r\n </div>\r\n\r\n <div class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-py-12 tw-text-center\" *ngIf=\"loading()\">\r\n <cide-ele-icon class=\"tw-text-2xl tw-text-blue-500 tw-mb-4 tw-animate-spin\">refresh</cide-ele-icon>\r\n <p class=\"tw-text-gray-500\">Loading controls...</p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n ", styles: [".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}@media (max-width: 640px){.main-content{padding:1rem;gap:1rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.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: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideFormFieldErrorComponent, selector: "cide-form-field-error", inputs: ["control", "formGroup", "fieldName", "customMessages"] }] });
|
|
7735
7708
|
}
|
|
7736
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
7709
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCorePageControlsComponent, decorators: [{
|
|
7737
7710
|
type: Component,
|
|
7738
7711
|
args: [{ selector: 'cide-core-page-controls', standalone: true, imports: [
|
|
7739
7712
|
CommonModule,
|
|
@@ -7879,10 +7852,10 @@ class CideCoreUserMasterService {
|
|
|
7879
7852
|
return throwError(() => error);
|
|
7880
7853
|
}));
|
|
7881
7854
|
}
|
|
7882
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
7883
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.
|
|
7855
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserMasterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
7856
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserMasterService, providedIn: 'root' });
|
|
7884
7857
|
}
|
|
7885
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
7858
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserMasterService, decorators: [{
|
|
7886
7859
|
type: Injectable,
|
|
7887
7860
|
args: [{
|
|
7888
7861
|
providedIn: 'root'
|
|
@@ -7928,10 +7901,10 @@ class CideCoreRoleSelectService {
|
|
|
7928
7901
|
getAllRoles() {
|
|
7929
7902
|
return this.getRoleOptions();
|
|
7930
7903
|
}
|
|
7931
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
7932
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.
|
|
7904
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreRoleSelectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
7905
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreRoleSelectService, providedIn: 'root' });
|
|
7933
7906
|
}
|
|
7934
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
7907
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreRoleSelectService, decorators: [{
|
|
7935
7908
|
type: Injectable,
|
|
7936
7909
|
args: [{
|
|
7937
7910
|
providedIn: 'root'
|
|
@@ -8017,10 +7990,10 @@ class CideCoreUserRoleService {
|
|
|
8017
7990
|
]);
|
|
8018
7991
|
return this.http.patch(url, payload);
|
|
8019
7992
|
}
|
|
8020
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
8021
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.
|
|
7993
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserRoleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
7994
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserRoleService, providedIn: 'root' });
|
|
8022
7995
|
}
|
|
8023
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
7996
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserRoleService, decorators: [{
|
|
8024
7997
|
type: Injectable,
|
|
8025
7998
|
args: [{
|
|
8026
7999
|
providedIn: 'root'
|
|
@@ -8094,10 +8067,10 @@ class CideCoreEntityManagementService {
|
|
|
8094
8067
|
]);
|
|
8095
8068
|
return this.http.delete(url);
|
|
8096
8069
|
}
|
|
8097
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
8098
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.
|
|
8070
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreEntityManagementService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
8071
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreEntityManagementService, providedIn: 'root' });
|
|
8099
8072
|
}
|
|
8100
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
8073
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreEntityManagementService, decorators: [{
|
|
8101
8074
|
type: Injectable,
|
|
8102
8075
|
args: [{
|
|
8103
8076
|
providedIn: 'root'
|
|
@@ -8110,6 +8083,8 @@ class CideCoreGeneralMasterTypeComponent {
|
|
|
8110
8083
|
typeService = inject(CideCoreGeneralMasterTypeService);
|
|
8111
8084
|
fb = inject(NonNullableFormBuilder);
|
|
8112
8085
|
router = inject(Router);
|
|
8086
|
+
confirmationService = inject(ConfirmationService);
|
|
8087
|
+
notificationService = inject(NotificationService);
|
|
8113
8088
|
// Modern ViewChild signals for template renderers (Angular 20 approach)
|
|
8114
8089
|
typeDetailsRendererTemplate = viewChild.required('typeDetailsRendererTemplate');
|
|
8115
8090
|
typeStatusRendererTemplate = viewChild.required('typeStatusRendererTemplate');
|
|
@@ -8446,28 +8421,33 @@ class CideCoreGeneralMasterTypeComponent {
|
|
|
8446
8421
|
* Delete type
|
|
8447
8422
|
*/
|
|
8448
8423
|
deleteType(type) {
|
|
8449
|
-
|
|
8450
|
-
|
|
8451
|
-
|
|
8452
|
-
.
|
|
8453
|
-
.
|
|
8454
|
-
|
|
8455
|
-
|
|
8456
|
-
|
|
8457
|
-
|
|
8458
|
-
|
|
8459
|
-
|
|
8460
|
-
|
|
8424
|
+
this.confirmationService.confirmDelete(type.sygmt_title)
|
|
8425
|
+
.then((confirmed) => {
|
|
8426
|
+
if (confirmed) {
|
|
8427
|
+
this.loading.set(true);
|
|
8428
|
+
this.typeService.deleteType(type._id || "")
|
|
8429
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
8430
|
+
.subscribe({
|
|
8431
|
+
next: (response) => {
|
|
8432
|
+
if (response.success) {
|
|
8433
|
+
this.loadTypes();
|
|
8434
|
+
this.notificationService.success(`Type "${type.sygmt_title}" has been deleted successfully.`);
|
|
8435
|
+
console.log('✅ Type deleted successfully');
|
|
8436
|
+
}
|
|
8437
|
+
else {
|
|
8438
|
+
console.error('❌ Failed to delete type:', response.message);
|
|
8439
|
+
this.notificationService.error(response.message || 'Failed to delete type');
|
|
8440
|
+
}
|
|
8441
|
+
this.loading.set(false);
|
|
8442
|
+
},
|
|
8443
|
+
error: (error) => {
|
|
8444
|
+
console.error('Error deleting type:', error);
|
|
8445
|
+
this.notificationService.error('Failed to delete type. Please try again.');
|
|
8446
|
+
this.loading.set(false);
|
|
8461
8447
|
}
|
|
8462
|
-
|
|
8463
|
-
|
|
8464
|
-
|
|
8465
|
-
console.error('Error deleting type:', error);
|
|
8466
|
-
console.error('❌ Failed to delete type. Please try again.');
|
|
8467
|
-
this.loading.set(false);
|
|
8468
|
-
}
|
|
8469
|
-
});
|
|
8470
|
-
}
|
|
8448
|
+
});
|
|
8449
|
+
}
|
|
8450
|
+
});
|
|
8471
8451
|
}
|
|
8472
8452
|
/**
|
|
8473
8453
|
* Toggle type status
|
|
@@ -8685,10 +8665,10 @@ class CideCoreGeneralMasterTypeComponent {
|
|
|
8685
8665
|
const event = new MouseEvent('click', { bubbles: true });
|
|
8686
8666
|
document.dispatchEvent(event);
|
|
8687
8667
|
}
|
|
8688
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
8689
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideCoreGeneralMasterTypeComponent, isStandalone: true, selector: "cide-core-general-master-type", viewQueries: [{ propertyName: "typeDetailsRendererTemplate", first: true, predicate: ["typeDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "typeStatusRendererTemplate", first: true, predicate: ["typeStatusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- General Master Type Container -->\r\n<div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Quick Add Form Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-4 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-white\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Type' : 'General Master\r\n Type Management' }}</h6>\r\n </div>\r\n\r\n <!-- Parent Type Info (shown when adding child) -->\r\n @if (typeForm.get('sygmt_id_sygmt')?.value) {\r\n <div\r\n class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child\r\n under:' }}</span>\r\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ getParentTypeDisplay() }}</span>\r\n </div>\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" type=\"button\" (click)=\"clearParentType()\"\r\n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\r\n <svg class=\"tw-w-4 tw-h-4\" 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\" />\r\n </svg>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n\r\n <form [formGroup]=\"typeForm\" (ngSubmit)=\"onSubmit($event)\" class=\"tw-space-y-2 tw-relative\">\r\n <!-- Hidden field for parent type ID -->\r\n <input type=\"hidden\" formControlName=\"sygmt_id_sygmt\">\r\n\r\n <!-- First Row - Basic fields -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-6 tw-gap-2\">\r\n <!-- Type Code -->\r\n <div class=\"lg:tw-col-span-1\">\r\n <cide-ele-input formControlName=\"sygmt_code\" label=\"Type Code*\" placeholder=\"Enter type code\" size=\"sm\"\r\n [maxlength]=\"40\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Type Title -->\r\n <div class=\"lg:tw-col-span-2\">\r\n <cide-ele-input formControlName=\"sygmt_title\" label=\"Type Title*\" placeholder=\"Enter type title\" size=\"sm\"\r\n [maxlength]=\"100\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Active Status -->\r\n <div class=\"lg:tw-col-span-1 tw-flex tw-items-center tw-pt-0\">\r\n <cide-ele-input formControlName=\"sygmt_isactive\" type=\"checkbox\" label=\"Active\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n <!-- Second Row - JSON Configuration and Description/Save side by side -->\r\n <div class=\"tw-flex tw-gap-4\">\r\n <!-- JSON Configuration (60% width) -->\r\n <div class=\"tw-w-3/5\">\r\n <cide-ele-json-editor formControlName=\"sygmt_configuration\" label=\"Configuration*\" size=\"sm\">\r\n </cide-ele-json-editor>\r\n </div>\r\n\r\n <!-- Description and Save Button (40% width) -->\r\n <div class=\"tw-w-2/5 tw-flex tw-flex-col tw-space-y-4\">\r\n <!-- Description -->\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-textarea formControlName=\"sygmt_desc\" label=\"Description\" placeholder=\"Enter description\"\r\n size=\"sm\" [maxlength]=\"255\" [rows]=\"4\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <!-- Action Buttons -->\r\n <div class=\"tw-flex tw-justify-end tw-space-x-2\">\r\n <button cideEleButton variant=\"outline\" size=\"sm\" type=\"button\" (click)=\"cancelForm()\"\r\n [disabled]=\"loading()\" class=\"tw-px-4 tw-py-2\">\r\n Cancel\r\n </button>\r\n <button cideEleButton variant=\"primary\" size=\"sm\" type=\"submit\" [disabled]=\"loading()\"\r\n class=\"tw-px-4 tw-py-2\" [leftIcon]=\"isEditMode() ? 'edit' : 'add'\">\r\n {{ isEditMode() ? 'Update' : 'Save' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-3 tw-p-3 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-4 tw-h-4 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-2\">\r\n <h3 class=\"tw-text-xs tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-xs tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n\r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- Template Renderers -->\r\n<ng-template #typeDetailsRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-flex-col\">\r\n <div class=\"tw-font-medium tw-text-gray-900\">{{ row.sygmt_title || 'N/A' }}</div>\r\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate tw-max-w-xs\" title=\"{{ row.sygmt_desc || 'No description' }}\">{{\r\n row.sygmt_desc || 'No description' }}</div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #typeStatusRendererTemplate let-row=\"row\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium\"\r\n [class.tw-bg-green-100]=\"row.sygmt_isactive\" [class.tw-text-green-800]=\"row.sygmt_isactive\"\r\n [class.tw-bg-red-100]=\"!row.sygmt_isactive\" [class.tw-text-red-800]=\"!row.sygmt_isactive\">\r\n {{ row.sygmt_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n</ng-template>\r\n\r\n\r\n\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\r\n <cide-ele-dropdown [items]=\"getActionDropdownItems(row)\" [config]=\"getDropdownConfig()\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { 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: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "component", type: CideEleJsonEditorComponent, selector: "cide-ele-json-editor", inputs: ["label", "helperText", "required", "disabled", "showCharacterCount", "config"], outputs: ["valueChange", "objectChange", "errorsChange", "validChange"] }] });
|
|
8668
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreGeneralMasterTypeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8669
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CideCoreGeneralMasterTypeComponent, isStandalone: true, selector: "cide-core-general-master-type", viewQueries: [{ propertyName: "typeDetailsRendererTemplate", first: true, predicate: ["typeDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "typeStatusRendererTemplate", first: true, predicate: ["typeStatusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- General Master Type Container -->\r\n<div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Quick Add Form Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-4 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-white\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Type' : 'General Master\r\n Type Management' }}</h6>\r\n </div>\r\n\r\n <!-- Parent Type Info (shown when adding child) -->\r\n @if (typeForm.get('sygmt_id_sygmt')?.value) {\r\n <div\r\n class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child\r\n under:' }}</span>\r\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ getParentTypeDisplay() }}</span>\r\n </div>\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" type=\"button\" (click)=\"clearParentType()\"\r\n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\r\n <svg class=\"tw-w-4 tw-h-4\" 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\" />\r\n </svg>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n\r\n <form [formGroup]=\"typeForm\" (ngSubmit)=\"onSubmit($event)\" class=\"tw-space-y-2 tw-relative\">\r\n <!-- Hidden field for parent type ID -->\r\n <input type=\"hidden\" formControlName=\"sygmt_id_sygmt\">\r\n\r\n <!-- First Row - Basic fields -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-6 tw-gap-2\">\r\n <!-- Type Code -->\r\n <div class=\"lg:tw-col-span-1\">\r\n <cide-ele-input formControlName=\"sygmt_code\" label=\"Type Code*\" placeholder=\"Enter type code\" size=\"sm\"\r\n [maxlength]=\"40\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Type Title -->\r\n <div class=\"lg:tw-col-span-2\">\r\n <cide-ele-input formControlName=\"sygmt_title\" label=\"Type Title*\" placeholder=\"Enter type title\" size=\"sm\"\r\n [maxlength]=\"100\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Active Status -->\r\n <div class=\"lg:tw-col-span-1 tw-flex tw-items-center tw-pt-0\">\r\n <cide-ele-input formControlName=\"sygmt_isactive\" type=\"checkbox\" label=\"Active\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n <!-- Second Row - JSON Configuration and Description/Save side by side -->\r\n <div class=\"tw-flex tw-gap-4\">\r\n <!-- JSON Configuration (60% width) -->\r\n <div class=\"tw-w-3/5\">\r\n <cide-ele-json-editor formControlName=\"sygmt_configuration\" label=\"Configuration*\" size=\"sm\">\r\n </cide-ele-json-editor>\r\n </div>\r\n\r\n <!-- Description and Save Button (40% width) -->\r\n <div class=\"tw-w-2/5 tw-flex tw-flex-col tw-space-y-4\">\r\n <!-- Description -->\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-textarea formControlName=\"sygmt_desc\" label=\"Description\" placeholder=\"Enter description\"\r\n size=\"sm\" [maxlength]=\"255\" [rows]=\"4\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <!-- Action Buttons -->\r\n <div class=\"tw-flex tw-justify-end tw-space-x-2\">\r\n <button cideEleButton variant=\"outline\" size=\"sm\" type=\"button\" (click)=\"cancelForm()\"\r\n [disabled]=\"loading()\" class=\"tw-px-4 tw-py-2\">\r\n Cancel\r\n </button>\r\n <button cideEleButton variant=\"primary\" size=\"sm\" type=\"submit\" [disabled]=\"loading()\"\r\n class=\"tw-px-4 tw-py-2\" [leftIcon]=\"isEditMode() ? 'edit' : 'add'\">\r\n {{ isEditMode() ? 'Update' : 'Save' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-3 tw-p-3 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-4 tw-h-4 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-2\">\r\n <h3 class=\"tw-text-xs tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-xs tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n\r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- Template Renderers -->\r\n<ng-template #typeDetailsRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-flex-col\">\r\n <div class=\"tw-font-medium tw-text-gray-900\">{{ row.sygmt_title || 'N/A' }}</div>\r\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate tw-max-w-xs\" title=\"{{ row.sygmt_desc || 'No description' }}\">{{\r\n row.sygmt_desc || 'No description' }}</div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #typeStatusRendererTemplate let-row=\"row\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium\"\r\n [class.tw-bg-green-100]=\"row.sygmt_isactive\" [class.tw-text-green-800]=\"row.sygmt_isactive\"\r\n [class.tw-bg-red-100]=\"!row.sygmt_isactive\" [class.tw-text-red-800]=\"!row.sygmt_isactive\">\r\n {{ row.sygmt_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n</ng-template>\r\n\r\n\r\n\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\r\n <cide-ele-dropdown [items]=\"getActionDropdownItems(row)\" [config]=\"getDropdownConfig()\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { 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: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "component", type: CideEleJsonEditorComponent, selector: "cide-ele-json-editor", inputs: ["label", "helperText", "required", "disabled", "showCharacterCount", "config"], outputs: ["valueChange", "objectChange", "errorsChange", "validChange"] }] });
|
|
8690
8670
|
}
|
|
8691
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
8671
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreGeneralMasterTypeComponent, decorators: [{
|
|
8692
8672
|
type: Component,
|
|
8693
8673
|
args: [{ selector: 'cide-core-general-master-type', standalone: true, imports: [
|
|
8694
8674
|
CommonModule,
|
|
@@ -8702,7 +8682,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
8702
8682
|
CideEleDropdownComponent,
|
|
8703
8683
|
CideEleJsonEditorComponent
|
|
8704
8684
|
], template: "<!-- General Master Type Container -->\r\n<div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Quick Add Form Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-4 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-white\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Type' : 'General Master\r\n Type Management' }}</h6>\r\n </div>\r\n\r\n <!-- Parent Type Info (shown when adding child) -->\r\n @if (typeForm.get('sygmt_id_sygmt')?.value) {\r\n <div\r\n class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child\r\n under:' }}</span>\r\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ getParentTypeDisplay() }}</span>\r\n </div>\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" type=\"button\" (click)=\"clearParentType()\"\r\n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\r\n <svg class=\"tw-w-4 tw-h-4\" 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\" />\r\n </svg>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n\r\n <form [formGroup]=\"typeForm\" (ngSubmit)=\"onSubmit($event)\" class=\"tw-space-y-2 tw-relative\">\r\n <!-- Hidden field for parent type ID -->\r\n <input type=\"hidden\" formControlName=\"sygmt_id_sygmt\">\r\n\r\n <!-- First Row - Basic fields -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-6 tw-gap-2\">\r\n <!-- Type Code -->\r\n <div class=\"lg:tw-col-span-1\">\r\n <cide-ele-input formControlName=\"sygmt_code\" label=\"Type Code*\" placeholder=\"Enter type code\" size=\"sm\"\r\n [maxlength]=\"40\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Type Title -->\r\n <div class=\"lg:tw-col-span-2\">\r\n <cide-ele-input formControlName=\"sygmt_title\" label=\"Type Title*\" placeholder=\"Enter type title\" size=\"sm\"\r\n [maxlength]=\"100\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Active Status -->\r\n <div class=\"lg:tw-col-span-1 tw-flex tw-items-center tw-pt-0\">\r\n <cide-ele-input formControlName=\"sygmt_isactive\" type=\"checkbox\" label=\"Active\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n <!-- Second Row - JSON Configuration and Description/Save side by side -->\r\n <div class=\"tw-flex tw-gap-4\">\r\n <!-- JSON Configuration (60% width) -->\r\n <div class=\"tw-w-3/5\">\r\n <cide-ele-json-editor formControlName=\"sygmt_configuration\" label=\"Configuration*\" size=\"sm\">\r\n </cide-ele-json-editor>\r\n </div>\r\n\r\n <!-- Description and Save Button (40% width) -->\r\n <div class=\"tw-w-2/5 tw-flex tw-flex-col tw-space-y-4\">\r\n <!-- Description -->\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-textarea formControlName=\"sygmt_desc\" label=\"Description\" placeholder=\"Enter description\"\r\n size=\"sm\" [maxlength]=\"255\" [rows]=\"4\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <!-- Action Buttons -->\r\n <div class=\"tw-flex tw-justify-end tw-space-x-2\">\r\n <button cideEleButton variant=\"outline\" size=\"sm\" type=\"button\" (click)=\"cancelForm()\"\r\n [disabled]=\"loading()\" class=\"tw-px-4 tw-py-2\">\r\n Cancel\r\n </button>\r\n <button cideEleButton variant=\"primary\" size=\"sm\" type=\"submit\" [disabled]=\"loading()\"\r\n class=\"tw-px-4 tw-py-2\" [leftIcon]=\"isEditMode() ? 'edit' : 'add'\">\r\n {{ isEditMode() ? 'Update' : 'Save' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-3 tw-p-3 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-4 tw-h-4 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-2\">\r\n <h3 class=\"tw-text-xs tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-xs tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n\r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- Template Renderers -->\r\n<ng-template #typeDetailsRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-flex-col\">\r\n <div class=\"tw-font-medium tw-text-gray-900\">{{ row.sygmt_title || 'N/A' }}</div>\r\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate tw-max-w-xs\" title=\"{{ row.sygmt_desc || 'No description' }}\">{{\r\n row.sygmt_desc || 'No description' }}</div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #typeStatusRendererTemplate let-row=\"row\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium\"\r\n [class.tw-bg-green-100]=\"row.sygmt_isactive\" [class.tw-text-green-800]=\"row.sygmt_isactive\"\r\n [class.tw-bg-red-100]=\"!row.sygmt_isactive\" [class.tw-text-red-800]=\"!row.sygmt_isactive\">\r\n {{ row.sygmt_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n</ng-template>\r\n\r\n\r\n\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\r\n <cide-ele-dropdown [items]=\"getActionDropdownItems(row)\" [config]=\"getDropdownConfig()\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>" }]
|
|
8705
|
-
}] });
|
|
8685
|
+
}], propDecorators: { typeDetailsRendererTemplate: [{ type: i0.ViewChild, args: ['typeDetailsRendererTemplate', { isSignal: true }] }], typeStatusRendererTemplate: [{ type: i0.ViewChild, args: ['typeStatusRendererTemplate', { isSignal: true }] }], actionsDropdownRendererTemplate: [{ type: i0.ViewChild, args: ['actionsDropdownRendererTemplate', { isSignal: true }] }] } });
|
|
8706
8686
|
|
|
8707
8687
|
var generalMasterType_component = /*#__PURE__*/Object.freeze({
|
|
8708
8688
|
__proto__: null,
|
|
@@ -8833,12 +8813,13 @@ class CideCoreGeneralMasterComponent {
|
|
|
8833
8813
|
},
|
|
8834
8814
|
scroll: {
|
|
8835
8815
|
enabled: true,
|
|
8836
|
-
maxHeight:
|
|
8816
|
+
maxHeight: undefined,
|
|
8837
8817
|
minHeight: '',
|
|
8838
8818
|
stickyHeader: true,
|
|
8839
8819
|
virtualScroll: false,
|
|
8840
8820
|
rowHeight: 50
|
|
8841
8821
|
},
|
|
8822
|
+
fullHeight: true,
|
|
8842
8823
|
tree: {
|
|
8843
8824
|
enabled: true,
|
|
8844
8825
|
primaryKey: '_id',
|
|
@@ -9001,13 +8982,37 @@ class CideCoreGeneralMasterComponent {
|
|
|
9001
8982
|
// Form validation is handled by computed signals
|
|
9002
8983
|
});
|
|
9003
8984
|
}
|
|
8985
|
+
/**
|
|
8986
|
+
* Normalize parent field to string ID for tree view
|
|
8987
|
+
*/
|
|
8988
|
+
normalizeParentField(masters) {
|
|
8989
|
+
return masters.map(master => {
|
|
8990
|
+
const normalized = { ...master };
|
|
8991
|
+
// Normalize parent field to string ID for tree view
|
|
8992
|
+
if (normalized.sygms_id_sygms) {
|
|
8993
|
+
if (typeof normalized.sygms_id_sygms === 'object') {
|
|
8994
|
+
normalized.sygms_id_sygms = normalized.sygms_id_sygms._id || '';
|
|
8995
|
+
}
|
|
8996
|
+
else if (typeof normalized.sygms_id_sygms === 'string') {
|
|
8997
|
+
// Already a string, keep as is
|
|
8998
|
+
normalized.sygms_id_sygms = normalized.sygms_id_sygms;
|
|
8999
|
+
}
|
|
9000
|
+
}
|
|
9001
|
+
else {
|
|
9002
|
+
// Ensure null/undefined becomes empty string for tree view
|
|
9003
|
+
normalized.sygms_id_sygms = '';
|
|
9004
|
+
}
|
|
9005
|
+
return normalized;
|
|
9006
|
+
});
|
|
9007
|
+
}
|
|
9004
9008
|
/**
|
|
9005
9009
|
* Update grid data
|
|
9006
9010
|
*/
|
|
9007
9011
|
updateGridData() {
|
|
9012
|
+
const normalizedMasters = this.normalizeParentField(this.masters());
|
|
9008
9013
|
this.gridConfig.update(config => ({
|
|
9009
9014
|
...config,
|
|
9010
|
-
data:
|
|
9015
|
+
data: normalizedMasters
|
|
9011
9016
|
}));
|
|
9012
9017
|
}
|
|
9013
9018
|
// Computed template renderers for grid
|
|
@@ -9067,6 +9072,14 @@ class CideCoreGeneralMasterComponent {
|
|
|
9067
9072
|
return;
|
|
9068
9073
|
}
|
|
9069
9074
|
const formValue = this.masterForm.getRawValue();
|
|
9075
|
+
// Helper to convert empty strings to null for FK fields
|
|
9076
|
+
const toNullIfEmpty = (value) => {
|
|
9077
|
+
if (value === null || value === undefined)
|
|
9078
|
+
return value;
|
|
9079
|
+
if (typeof value === 'string' && value.trim() === '')
|
|
9080
|
+
return null;
|
|
9081
|
+
return value;
|
|
9082
|
+
};
|
|
9070
9083
|
const newMaster = {
|
|
9071
9084
|
_id: '',
|
|
9072
9085
|
sygms_code: formValue.sygms_code,
|
|
@@ -9074,8 +9087,8 @@ class CideCoreGeneralMasterComponent {
|
|
|
9074
9087
|
sygms_title: formValue.sygms_title,
|
|
9075
9088
|
sygms_desc: formValue.sygms_desc,
|
|
9076
9089
|
sygms_configuration: JSON.parse(formValue.sygms_configuration),
|
|
9077
|
-
sygms_id_sygms: formValue.sygms_id_sygms
|
|
9078
|
-
sygms_entity_id_syen: this.appState.getActiveEntityId()
|
|
9090
|
+
sygms_id_sygms: toNullIfEmpty(formValue.sygms_id_sygms),
|
|
9091
|
+
sygms_entity_id_syen: toNullIfEmpty(this.appState.getActiveEntityId()),
|
|
9079
9092
|
sygms_isactive: formValue.sygms_isactive
|
|
9080
9093
|
};
|
|
9081
9094
|
this.loading.set(true);
|
|
@@ -9110,6 +9123,14 @@ class CideCoreGeneralMasterComponent {
|
|
|
9110
9123
|
return;
|
|
9111
9124
|
}
|
|
9112
9125
|
const formValue = this.masterForm.getRawValue();
|
|
9126
|
+
// Helper to convert empty strings to null for FK fields
|
|
9127
|
+
const toNullIfEmpty = (value) => {
|
|
9128
|
+
if (value === null || value === undefined)
|
|
9129
|
+
return value;
|
|
9130
|
+
if (typeof value === 'string' && value.trim() === '')
|
|
9131
|
+
return null;
|
|
9132
|
+
return value;
|
|
9133
|
+
};
|
|
9113
9134
|
const updatedMaster = {
|
|
9114
9135
|
_id: this.editingMasterId(),
|
|
9115
9136
|
sygms_code: formValue.sygms_code,
|
|
@@ -9117,8 +9138,8 @@ class CideCoreGeneralMasterComponent {
|
|
|
9117
9138
|
sygms_title: formValue.sygms_title,
|
|
9118
9139
|
sygms_desc: formValue.sygms_desc,
|
|
9119
9140
|
sygms_configuration: JSON.parse(formValue.sygms_configuration),
|
|
9120
|
-
sygms_id_sygms: formValue.sygms_id_sygms
|
|
9121
|
-
sygms_entity_id_syen: this.appState.getActiveEntityId()
|
|
9141
|
+
sygms_id_sygms: toNullIfEmpty(formValue.sygms_id_sygms),
|
|
9142
|
+
sygms_entity_id_syen: toNullIfEmpty(this.appState.getActiveEntityId()),
|
|
9122
9143
|
sygms_isactive: formValue.sygms_isactive
|
|
9123
9144
|
};
|
|
9124
9145
|
this.loading.set(true);
|
|
@@ -9160,6 +9181,52 @@ class CideCoreGeneralMasterComponent {
|
|
|
9160
9181
|
sygms_isactive: master.sygms_isactive
|
|
9161
9182
|
});
|
|
9162
9183
|
this.masterForm.markAsPristine();
|
|
9184
|
+
// Scroll to form section
|
|
9185
|
+
setTimeout(() => {
|
|
9186
|
+
const formElement = document.querySelector('.tw-table-row.tw-h-0');
|
|
9187
|
+
if (formElement) {
|
|
9188
|
+
formElement.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
|
9189
|
+
}
|
|
9190
|
+
}, 100);
|
|
9191
|
+
}
|
|
9192
|
+
/**
|
|
9193
|
+
* Copy master - opens form with same data for creating a new record
|
|
9194
|
+
*/
|
|
9195
|
+
copyMaster(master) {
|
|
9196
|
+
// Set to create mode (not edit mode)
|
|
9197
|
+
this.isEditMode.set(false);
|
|
9198
|
+
this.editingMasterId.set(null);
|
|
9199
|
+
this.retrievedMaster.set(null);
|
|
9200
|
+
// Generate copy suffix for code and title
|
|
9201
|
+
const copySuffix = ' (Copy)';
|
|
9202
|
+
const originalCode = master.sygms_code || '';
|
|
9203
|
+
const originalTitle = master.sygms_title || '';
|
|
9204
|
+
// Append "(Copy)" to code and title, but remove it if it already exists
|
|
9205
|
+
const newCode = originalCode.endsWith(copySuffix)
|
|
9206
|
+
? originalCode
|
|
9207
|
+
: originalCode + copySuffix;
|
|
9208
|
+
const newTitle = originalTitle.endsWith(copySuffix)
|
|
9209
|
+
? originalTitle
|
|
9210
|
+
: originalTitle + copySuffix;
|
|
9211
|
+
// Patch form with master data, but with modified code and title
|
|
9212
|
+
this.masterForm.patchValue({
|
|
9213
|
+
sygms_code: newCode,
|
|
9214
|
+
sygms_title: newTitle,
|
|
9215
|
+
sygms_desc: master.sygms_desc || '',
|
|
9216
|
+
sygms_configuration: JSON.stringify(master.sygms_configuration || {}, null, 2),
|
|
9217
|
+
sygms_id_sygms: master.sygms_id_sygms || '',
|
|
9218
|
+
sygms_entity_id_syen: master.sygms_entity_id_syen || this.appState.getActiveEntityId(),
|
|
9219
|
+
sygms_isactive: master.sygms_isactive ?? true
|
|
9220
|
+
});
|
|
9221
|
+
// Mark form as dirty so user knows they need to save
|
|
9222
|
+
this.masterForm.markAsDirty();
|
|
9223
|
+
// Scroll to form section
|
|
9224
|
+
setTimeout(() => {
|
|
9225
|
+
const formElement = document.querySelector('.tw-table-row.tw-h-0');
|
|
9226
|
+
if (formElement) {
|
|
9227
|
+
formElement.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
|
9228
|
+
}
|
|
9229
|
+
}, 100);
|
|
9163
9230
|
}
|
|
9164
9231
|
/**
|
|
9165
9232
|
* Delete master
|
|
@@ -9308,6 +9375,12 @@ class CideCoreGeneralMasterComponent {
|
|
|
9308
9375
|
icon: 'edit',
|
|
9309
9376
|
disabled: false
|
|
9310
9377
|
},
|
|
9378
|
+
{
|
|
9379
|
+
id: 'copy',
|
|
9380
|
+
label: 'Copy',
|
|
9381
|
+
icon: 'content_copy',
|
|
9382
|
+
disabled: false
|
|
9383
|
+
},
|
|
9311
9384
|
{
|
|
9312
9385
|
id: 'addChild',
|
|
9313
9386
|
label: 'Add Child',
|
|
@@ -9348,6 +9421,10 @@ class CideCoreGeneralMasterComponent {
|
|
|
9348
9421
|
console.log('🔵 Calling editMaster with:', row);
|
|
9349
9422
|
this.editMaster(row);
|
|
9350
9423
|
break;
|
|
9424
|
+
case 'copy':
|
|
9425
|
+
console.log('🔵 Calling copyMaster with:', row);
|
|
9426
|
+
this.copyMaster(row);
|
|
9427
|
+
break;
|
|
9351
9428
|
case 'addChild':
|
|
9352
9429
|
console.log('🔵 Calling onAddChild with:', row);
|
|
9353
9430
|
this.onAddChild(row);
|
|
@@ -9418,10 +9495,10 @@ class CideCoreGeneralMasterComponent {
|
|
|
9418
9495
|
const event = new MouseEvent('click', { bubbles: true });
|
|
9419
9496
|
document.dispatchEvent(event);
|
|
9420
9497
|
}
|
|
9421
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
9422
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideCoreGeneralMasterComponent, isStandalone: true, selector: "cide-core-general-master", viewQueries: [{ propertyName: "masterDetailsRendererTemplate", first: true, predicate: ["masterDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "masterStatusRendererTemplate", first: true, predicate: ["masterStatusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- General Master with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_general_master' }\">\r\n<div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Quick Add Form Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-4 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-white\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Master' : 'Quick Add Master' }}</h6>\r\n </div>\r\n \r\n <!-- Parent Master Info Box -->\r\n @if (masterForm.get('sygms_id_sygms')?.value) {\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\r\n <span class=\"tw-text-sm tw-font-medium tw-text-blue-800\">Adding Child</span>\r\n <span class=\"tw-text-xs tw-text-blue-700\">\r\n Parent: <span class=\"tw-font-medium\">{{ getParentMasterDisplay() }}</span>\r\n </span>\r\n <button \r\n type=\"button\"\r\n (click)=\"clearParentMaster()\"\r\n class=\"tw-text-sm tw-text-blue-600 hover:tw-text-blue-800 hover:tw-bg-blue-100 tw-rounded tw-px-1\">\r\n \u00D7\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n \r\n <form [formGroup]=\"masterForm\" class=\"tw-space-y-2\">\r\n \r\n <!-- First Row - Basic fields -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-6 tw-gap-2\">\r\n <!-- Master Code -->\r\n <div class=\"lg:tw-col-span-1\">\r\n <cide-ele-input \r\n formControlName=\"sygms_code\" \r\n label=\"Master Code*\" \r\n placeholder=\"Enter master code\"\r\n size=\"sm\"\r\n [required]=\"true\" \r\n [maxlength]=\"40\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Master Title -->\r\n <div class=\"lg:tw-col-span-3\">\r\n <cide-ele-input \r\n formControlName=\"sygms_title\" \r\n label=\"Master Title*\" \r\n placeholder=\"Enter master title\"\r\n size=\"sm\"\r\n [required]=\"true\" \r\n [maxlength]=\"150\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Active Status -->\r\n <div class=\"lg:tw-col-span-1 tw-flex tw-items-center tw-pt-0\">\r\n <cide-ele-input \r\n formControlName=\"sygms_isactive\"\r\n type=\"checkbox\"\r\n label=\"Active\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Third Row - JSON Configuration and Description/Save side by side -->\r\n <div class=\"tw-flex tw-gap-4\">\r\n <!-- JSON Configuration (60% width) -->\r\n <div class=\"tw-w-3/5\">\r\n <cide-ele-json-editor \r\n formControlName=\"sygms_configuration\" \r\n label=\"Configuration*\" \r\n size=\"sm\"\r\n [required]=\"true\">\r\n </cide-ele-json-editor>\r\n </div>\r\n \r\n <!-- Description and Save Button (40% width) -->\r\n <div class=\"tw-w-2/5 tw-flex tw-flex-col tw-space-y-4\">\r\n <!-- Description -->\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-textarea \r\n formControlName=\"sygms_desc\" \r\n label=\"Description\" \r\n placeholder=\"Enter description\"\r\n size=\"sm\"\r\n [maxlength]=\"500\" \r\n [rows]=\"4\">\r\n </cide-ele-textarea>\r\n </div>\r\n \r\n <!-- Action Buttons -->\r\n <div class=\"tw-flex tw-justify-end tw-space-x-2\">\r\n <button \r\n cideEleButton \r\n variant=\"outline\" \r\n size=\"sm\" \r\n type=\"button\" \r\n (click)=\"resetForm()\"\r\n [disabled]=\"loading()\"\r\n class=\"tw-px-4 tw-py-2\">\r\n Reset\r\n </button>\r\n @if (isEditMode()) {\r\n <button \r\n cideEleButton \r\n variant=\"outline\" \r\n size=\"sm\" \r\n type=\"button\" \r\n (click)=\"cancelForm()\"\r\n [disabled]=\"loading()\"\r\n class=\"tw-px-4 tw-py-2\">\r\n Cancel\r\n </button>\r\n }\r\n <button \r\n cideEleButton \r\n variant=\"primary\" \r\n size=\"sm\" \r\n type=\"submit\"\r\n (click)=\"saveMaster()\"\r\n [disabled]=\"!masterForm.valid || loading()\"\r\n class=\"tw-px-4 tw-py-2\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update' : 'Save' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-4 tw-py-2 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-2 sm:tw-space-y-0\">\r\n \r\n <!-- Title and Back Button -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n @if (typeTitle()) {\r\n <div>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-m-0\">Type: {{ typeTitle() }}</p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-2 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <!-- Actions can be added here in the future -->\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-3 tw-p-3 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-4 tw-h-4 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n \r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n <cide-ele-data-grid \r\n [config]=\"gridConfig()\" \r\n [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- Template Renderers -->\r\n<ng-template #masterDetailsRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-flex-col tw-w-full\">\r\n <div class=\"tw-font-medium tw-text-gray-900\">{{ row.sygms_title || 'N/A' }}</div>\r\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate\">{{ row.sygms_desc || 'No description' }}</div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #masterStatusRendererTemplate let-row=\"row\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium\"\r\n [class.tw-bg-green-100]=\"row.sygms_isactive\"\r\n [class.tw-text-green-800]=\"row.sygms_isactive\"\r\n [class.tw-bg-red-100]=\"!row.sygms_isactive\"\r\n [class.tw-text-red-800]=\"!row.sygms_isactive\">\r\n {{ row.sygms_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\r\n <cide-ele-dropdown\r\n [items]=\"getActionDropdownItems(row)\"\r\n [config]=\"getDropdownConfig()\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n</cide-lyt-shared-wrapper> ", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.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: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { 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: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "component", type: CideEleJsonEditorComponent, selector: "cide-ele-json-editor", inputs: ["label", "helperText", "required", "disabled", "showCharacterCount", "config"], outputs: ["valueChange", "objectChange", "errorsChange", "validChange"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
|
|
9498
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreGeneralMasterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9499
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CideCoreGeneralMasterComponent, isStandalone: true, selector: "cide-core-general-master", viewQueries: [{ propertyName: "masterDetailsRendererTemplate", first: true, predicate: ["masterDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "masterStatusRendererTemplate", first: true, predicate: ["masterStatusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- General Master with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_general_master' }\">\r\n<div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Quick Add Form Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-4 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-white\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Master' : 'Quick Add Master' }}</h6>\r\n @if (typeTitle()) {\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-m-0 tw-mt-0.5\">Type: <span class=\"tw-font-medium tw-text-gray-700\">{{ typeTitle() }}</span></p>\r\n }\r\n </div>\r\n </div>\r\n \r\n <!-- Parent Master Info Box -->\r\n @if (masterForm.get('sygms_id_sygms')?.value) {\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\r\n <span class=\"tw-text-sm tw-font-medium tw-text-blue-800\">Adding Child</span>\r\n <span class=\"tw-text-xs tw-text-blue-700\">\r\n Parent: <span class=\"tw-font-medium\">{{ getParentMasterDisplay() }}</span>\r\n </span>\r\n <button \r\n type=\"button\"\r\n (click)=\"clearParentMaster()\"\r\n class=\"tw-text-sm tw-text-blue-600 hover:tw-text-blue-800 hover:tw-bg-blue-100 tw-rounded tw-px-1\">\r\n \u00D7\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n \r\n <form [formGroup]=\"masterForm\" class=\"tw-space-y-2\">\r\n \r\n <!-- First Row - Basic fields -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-6 tw-gap-2\">\r\n <!-- Master Code -->\r\n <div class=\"lg:tw-col-span-1\">\r\n <cide-ele-input \r\n formControlName=\"sygms_code\" \r\n label=\"Master Code*\" \r\n placeholder=\"Enter master code\"\r\n size=\"sm\"\r\n [required]=\"true\" \r\n [maxlength]=\"40\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Master Title -->\r\n <div class=\"lg:tw-col-span-3\">\r\n <cide-ele-input \r\n formControlName=\"sygms_title\" \r\n label=\"Master Title*\" \r\n placeholder=\"Enter master title\"\r\n size=\"sm\"\r\n [required]=\"true\" \r\n [maxlength]=\"150\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Active Status -->\r\n <div class=\"lg:tw-col-span-1 tw-flex tw-items-center tw-pt-0\">\r\n <cide-ele-input \r\n formControlName=\"sygms_isactive\"\r\n type=\"checkbox\"\r\n label=\"Active\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Third Row - JSON Configuration and Description/Save side by side -->\r\n <div class=\"tw-flex tw-gap-4\">\r\n <!-- JSON Configuration (60% width) -->\r\n <div class=\"tw-w-3/5\">\r\n <cide-ele-json-editor \r\n formControlName=\"sygms_configuration\" \r\n label=\"Configuration*\" \r\n size=\"sm\"\r\n [required]=\"true\">\r\n </cide-ele-json-editor>\r\n </div>\r\n \r\n <!-- Description and Save Button (40% width) -->\r\n <div class=\"tw-w-2/5 tw-flex tw-flex-col tw-space-y-4\">\r\n <!-- Description -->\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-textarea \r\n formControlName=\"sygms_desc\" \r\n label=\"Description\" \r\n placeholder=\"Enter description\"\r\n size=\"sm\"\r\n [maxlength]=\"500\" \r\n [rows]=\"4\">\r\n </cide-ele-textarea>\r\n </div>\r\n \r\n <!-- Action Buttons -->\r\n <div class=\"tw-flex tw-justify-end tw-space-x-2\">\r\n <button \r\n cideEleButton \r\n variant=\"outline\" \r\n size=\"sm\" \r\n type=\"button\" \r\n (click)=\"resetForm()\"\r\n [disabled]=\"loading()\"\r\n class=\"tw-px-4 tw-py-2\">\r\n Reset\r\n </button>\r\n @if (isEditMode()) {\r\n <button \r\n cideEleButton \r\n variant=\"outline\" \r\n size=\"sm\" \r\n type=\"button\" \r\n (click)=\"cancelForm()\"\r\n [disabled]=\"loading()\"\r\n class=\"tw-px-4 tw-py-2\">\r\n Cancel\r\n </button>\r\n }\r\n <button \r\n cideEleButton \r\n variant=\"primary\" \r\n size=\"sm\" \r\n type=\"submit\"\r\n (click)=\"saveMaster()\"\r\n [disabled]=\"!masterForm.valid || loading()\"\r\n class=\"tw-px-4 tw-py-2\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update' : 'Save' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-4 tw-py-2 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-2 sm:tw-space-y-0\">\r\n \r\n <!-- Title and Back Button -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n @if (typeTitle()) {\r\n <div>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-m-0\">Type: {{ typeTitle() }}</p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-2 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <!-- Actions can be added here in the future -->\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-3 tw-p-3 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-4 tw-h-4 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative tw-p-0\">\r\n \r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-hidden\">\r\n <cide-ele-data-grid \r\n class=\"tw-h-full\"\r\n [config]=\"gridConfig()\" \r\n [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- Template Renderers -->\r\n<ng-template #masterDetailsRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-flex-col tw-w-full\">\r\n <div class=\"tw-font-medium tw-text-gray-900\">{{ row.sygms_title || 'N/A' }}</div>\r\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate\">{{ row.sygms_desc || 'No description' }}</div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #masterStatusRendererTemplate let-row=\"row\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium\"\r\n [class.tw-bg-green-100]=\"row.sygms_isactive\"\r\n [class.tw-text-green-800]=\"row.sygms_isactive\"\r\n [class.tw-bg-red-100]=\"!row.sygms_isactive\"\r\n [class.tw-text-red-800]=\"!row.sygms_isactive\">\r\n {{ row.sygms_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\r\n <cide-ele-dropdown\r\n [items]=\"getActionDropdownItems(row)\"\r\n [config]=\"getDropdownConfig()\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n</cide-lyt-shared-wrapper> ", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.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: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { 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: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "component", type: CideEleJsonEditorComponent, selector: "cide-ele-json-editor", inputs: ["label", "helperText", "required", "disabled", "showCharacterCount", "config"], outputs: ["valueChange", "objectChange", "errorsChange", "validChange"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
|
|
9423
9500
|
}
|
|
9424
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
9501
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreGeneralMasterComponent, decorators: [{
|
|
9425
9502
|
type: Component,
|
|
9426
9503
|
args: [{ selector: 'cide-core-general-master', standalone: true, imports: [
|
|
9427
9504
|
CommonModule,
|
|
@@ -9435,8 +9512,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
9435
9512
|
CideEleDropdownComponent,
|
|
9436
9513
|
CideEleJsonEditorComponent,
|
|
9437
9514
|
CideLytSharedWrapperComponent
|
|
9438
|
-
], template: "<!-- General Master with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_general_master' }\">\r\n<div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Quick Add Form Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-4 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-white\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Master' : 'Quick Add Master' }}</h6>\r\n </div>\r\n \r\n <!-- Parent Master Info Box -->\r\n @if (masterForm.get('sygms_id_sygms')?.value) {\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\r\n <span class=\"tw-text-sm tw-font-medium tw-text-blue-800\">Adding Child</span>\r\n <span class=\"tw-text-xs tw-text-blue-700\">\r\n Parent: <span class=\"tw-font-medium\">{{ getParentMasterDisplay() }}</span>\r\n </span>\r\n <button \r\n type=\"button\"\r\n (click)=\"clearParentMaster()\"\r\n class=\"tw-text-sm tw-text-blue-600 hover:tw-text-blue-800 hover:tw-bg-blue-100 tw-rounded tw-px-1\">\r\n \u00D7\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n \r\n <form [formGroup]=\"masterForm\" class=\"tw-space-y-2\">\r\n \r\n <!-- First Row - Basic fields -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-6 tw-gap-2\">\r\n <!-- Master Code -->\r\n <div class=\"lg:tw-col-span-1\">\r\n <cide-ele-input \r\n formControlName=\"sygms_code\" \r\n label=\"Master Code*\" \r\n placeholder=\"Enter master code\"\r\n size=\"sm\"\r\n [required]=\"true\" \r\n [maxlength]=\"40\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Master Title -->\r\n <div class=\"lg:tw-col-span-3\">\r\n <cide-ele-input \r\n formControlName=\"sygms_title\" \r\n label=\"Master Title*\" \r\n placeholder=\"Enter master title\"\r\n size=\"sm\"\r\n [required]=\"true\" \r\n [maxlength]=\"150\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Active Status -->\r\n <div class=\"lg:tw-col-span-1 tw-flex tw-items-center tw-pt-0\">\r\n <cide-ele-input \r\n formControlName=\"sygms_isactive\"\r\n type=\"checkbox\"\r\n label=\"Active\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Third Row - JSON Configuration and Description/Save side by side -->\r\n <div class=\"tw-flex tw-gap-4\">\r\n <!-- JSON Configuration (60% width) -->\r\n <div class=\"tw-w-3/5\">\r\n <cide-ele-json-editor \r\n formControlName=\"sygms_configuration\" \r\n label=\"Configuration*\" \r\n size=\"sm\"\r\n [required]=\"true\">\r\n </cide-ele-json-editor>\r\n </div>\r\n \r\n <!-- Description and Save Button (40% width) -->\r\n <div class=\"tw-w-2/5 tw-flex tw-flex-col tw-space-y-4\">\r\n <!-- Description -->\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-textarea \r\n formControlName=\"sygms_desc\" \r\n label=\"Description\" \r\n placeholder=\"Enter description\"\r\n size=\"sm\"\r\n [maxlength]=\"500\" \r\n [rows]=\"4\">\r\n </cide-ele-textarea>\r\n </div>\r\n \r\n <!-- Action Buttons -->\r\n <div class=\"tw-flex tw-justify-end tw-space-x-2\">\r\n <button \r\n cideEleButton \r\n variant=\"outline\" \r\n size=\"sm\" \r\n type=\"button\" \r\n (click)=\"resetForm()\"\r\n [disabled]=\"loading()\"\r\n class=\"tw-px-4 tw-py-2\">\r\n Reset\r\n </button>\r\n @if (isEditMode()) {\r\n <button \r\n cideEleButton \r\n variant=\"outline\" \r\n size=\"sm\" \r\n type=\"button\" \r\n (click)=\"cancelForm()\"\r\n [disabled]=\"loading()\"\r\n class=\"tw-px-4 tw-py-2\">\r\n Cancel\r\n </button>\r\n }\r\n <button \r\n cideEleButton \r\n variant=\"primary\" \r\n size=\"sm\" \r\n type=\"submit\"\r\n (click)=\"saveMaster()\"\r\n [disabled]=\"!masterForm.valid || loading()\"\r\n class=\"tw-px-4 tw-py-2\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update' : 'Save' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-4 tw-py-2 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-2 sm:tw-space-y-0\">\r\n \r\n <!-- Title and Back Button -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n @if (typeTitle()) {\r\n <div>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-m-0\">Type: {{ typeTitle() }}</p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-2 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <!-- Actions can be added here in the future -->\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-3 tw-p-3 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-4 tw-h-4 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n \r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-
|
|
9439
|
-
}] });
|
|
9515
|
+
], template: "<!-- General Master with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_general_master' }\">\r\n<div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Quick Add Form Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-4 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-white\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Master' : 'Quick Add Master' }}</h6>\r\n @if (typeTitle()) {\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-m-0 tw-mt-0.5\">Type: <span class=\"tw-font-medium tw-text-gray-700\">{{ typeTitle() }}</span></p>\r\n }\r\n </div>\r\n </div>\r\n \r\n <!-- Parent Master Info Box -->\r\n @if (masterForm.get('sygms_id_sygms')?.value) {\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\r\n <span class=\"tw-text-sm tw-font-medium tw-text-blue-800\">Adding Child</span>\r\n <span class=\"tw-text-xs tw-text-blue-700\">\r\n Parent: <span class=\"tw-font-medium\">{{ getParentMasterDisplay() }}</span>\r\n </span>\r\n <button \r\n type=\"button\"\r\n (click)=\"clearParentMaster()\"\r\n class=\"tw-text-sm tw-text-blue-600 hover:tw-text-blue-800 hover:tw-bg-blue-100 tw-rounded tw-px-1\">\r\n \u00D7\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n \r\n <form [formGroup]=\"masterForm\" class=\"tw-space-y-2\">\r\n \r\n <!-- First Row - Basic fields -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-6 tw-gap-2\">\r\n <!-- Master Code -->\r\n <div class=\"lg:tw-col-span-1\">\r\n <cide-ele-input \r\n formControlName=\"sygms_code\" \r\n label=\"Master Code*\" \r\n placeholder=\"Enter master code\"\r\n size=\"sm\"\r\n [required]=\"true\" \r\n [maxlength]=\"40\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Master Title -->\r\n <div class=\"lg:tw-col-span-3\">\r\n <cide-ele-input \r\n formControlName=\"sygms_title\" \r\n label=\"Master Title*\" \r\n placeholder=\"Enter master title\"\r\n size=\"sm\"\r\n [required]=\"true\" \r\n [maxlength]=\"150\">\r\n </cide-ele-input>\r\n </div>\r\n \r\n <!-- Active Status -->\r\n <div class=\"lg:tw-col-span-1 tw-flex tw-items-center tw-pt-0\">\r\n <cide-ele-input \r\n formControlName=\"sygms_isactive\"\r\n type=\"checkbox\"\r\n label=\"Active\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Third Row - JSON Configuration and Description/Save side by side -->\r\n <div class=\"tw-flex tw-gap-4\">\r\n <!-- JSON Configuration (60% width) -->\r\n <div class=\"tw-w-3/5\">\r\n <cide-ele-json-editor \r\n formControlName=\"sygms_configuration\" \r\n label=\"Configuration*\" \r\n size=\"sm\"\r\n [required]=\"true\">\r\n </cide-ele-json-editor>\r\n </div>\r\n \r\n <!-- Description and Save Button (40% width) -->\r\n <div class=\"tw-w-2/5 tw-flex tw-flex-col tw-space-y-4\">\r\n <!-- Description -->\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-textarea \r\n formControlName=\"sygms_desc\" \r\n label=\"Description\" \r\n placeholder=\"Enter description\"\r\n size=\"sm\"\r\n [maxlength]=\"500\" \r\n [rows]=\"4\">\r\n </cide-ele-textarea>\r\n </div>\r\n \r\n <!-- Action Buttons -->\r\n <div class=\"tw-flex tw-justify-end tw-space-x-2\">\r\n <button \r\n cideEleButton \r\n variant=\"outline\" \r\n size=\"sm\" \r\n type=\"button\" \r\n (click)=\"resetForm()\"\r\n [disabled]=\"loading()\"\r\n class=\"tw-px-4 tw-py-2\">\r\n Reset\r\n </button>\r\n @if (isEditMode()) {\r\n <button \r\n cideEleButton \r\n variant=\"outline\" \r\n size=\"sm\" \r\n type=\"button\" \r\n (click)=\"cancelForm()\"\r\n [disabled]=\"loading()\"\r\n class=\"tw-px-4 tw-py-2\">\r\n Cancel\r\n </button>\r\n }\r\n <button \r\n cideEleButton \r\n variant=\"primary\" \r\n size=\"sm\" \r\n type=\"submit\"\r\n (click)=\"saveMaster()\"\r\n [disabled]=\"!masterForm.valid || loading()\"\r\n class=\"tw-px-4 tw-py-2\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update' : 'Save' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-4 tw-py-2 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-2 sm:tw-space-y-0\">\r\n \r\n <!-- Title and Back Button -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n @if (typeTitle()) {\r\n <div>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-m-0\">Type: {{ typeTitle() }}</p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-2 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <!-- Actions can be added here in the future -->\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-3 tw-p-3 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-4 tw-h-4 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative tw-p-0\">\r\n \r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-hidden\">\r\n <cide-ele-data-grid \r\n class=\"tw-h-full\"\r\n [config]=\"gridConfig()\" \r\n [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- Template Renderers -->\r\n<ng-template #masterDetailsRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-flex-col tw-w-full\">\r\n <div class=\"tw-font-medium tw-text-gray-900\">{{ row.sygms_title || 'N/A' }}</div>\r\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate\">{{ row.sygms_desc || 'No description' }}</div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #masterStatusRendererTemplate let-row=\"row\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium\"\r\n [class.tw-bg-green-100]=\"row.sygms_isactive\"\r\n [class.tw-text-green-800]=\"row.sygms_isactive\"\r\n [class.tw-bg-red-100]=\"!row.sygms_isactive\"\r\n [class.tw-text-red-800]=\"!row.sygms_isactive\">\r\n {{ row.sygms_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\r\n <cide-ele-dropdown\r\n [items]=\"getActionDropdownItems(row)\"\r\n [config]=\"getDropdownConfig()\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n</cide-lyt-shared-wrapper> " }]
|
|
9516
|
+
}], propDecorators: { masterDetailsRendererTemplate: [{ type: i0.ViewChild, args: ['masterDetailsRendererTemplate', { isSignal: true }] }], masterStatusRendererTemplate: [{ type: i0.ViewChild, args: ['masterStatusRendererTemplate', { isSignal: true }] }], actionsDropdownRendererTemplate: [{ type: i0.ViewChild, args: ['actionsDropdownRendererTemplate', { isSignal: true }] }] } });
|
|
9440
9517
|
|
|
9441
9518
|
var generalMaster_component = /*#__PURE__*/Object.freeze({
|
|
9442
9519
|
__proto__: null,
|
|
@@ -9487,10 +9564,10 @@ class CideCorePinCodeService {
|
|
|
9487
9564
|
};
|
|
9488
9565
|
return this.getPinCodeData(payload);
|
|
9489
9566
|
}
|
|
9490
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
9491
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.
|
|
9567
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCorePinCodeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
9568
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCorePinCodeService, providedIn: 'root' });
|
|
9492
9569
|
}
|
|
9493
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
9570
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCorePinCodeService, decorators: [{
|
|
9494
9571
|
type: Injectable,
|
|
9495
9572
|
args: [{
|
|
9496
9573
|
providedIn: 'root'
|
|
@@ -9520,10 +9597,10 @@ class CideCoreCurrencyService {
|
|
|
9520
9597
|
console.log('💰 CURRENCY SERVICE: Payload:', body);
|
|
9521
9598
|
return this.http.get(url);
|
|
9522
9599
|
}
|
|
9523
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
9524
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.
|
|
9600
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreCurrencyService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
9601
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreCurrencyService, providedIn: 'root' });
|
|
9525
9602
|
}
|
|
9526
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
9603
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreCurrencyService, decorators: [{
|
|
9527
9604
|
type: Injectable,
|
|
9528
9605
|
args: [{
|
|
9529
9606
|
providedIn: 'root'
|
|
@@ -9593,10 +9670,10 @@ class CideCoreCountryService {
|
|
|
9593
9670
|
}; // Temporary fix - update when MSyctrList interface is available
|
|
9594
9671
|
return this.getAllCountries(payload);
|
|
9595
9672
|
}
|
|
9596
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
9597
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.
|
|
9673
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreCountryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
9674
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreCountryService, providedIn: 'root' });
|
|
9598
9675
|
}
|
|
9599
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
9676
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreCountryService, decorators: [{
|
|
9600
9677
|
type: Injectable,
|
|
9601
9678
|
args: [{
|
|
9602
9679
|
providedIn: 'root'
|
|
@@ -10874,10 +10951,10 @@ class CideCoreEntityCreateComponent {
|
|
|
10874
10951
|
onBack() {
|
|
10875
10952
|
this.router.navigate(['/control-panel/entity-list']);
|
|
10876
10953
|
}
|
|
10877
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
10878
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideCoreEntityCreateComponent, isStandalone: true, selector: "cide-core-entity-create", viewQueries: [{ propertyName: "userCellRendererTemplate", first: true, predicate: ["userCell"], descendants: true, isSignal: true }, { propertyName: "actionsCellRendererTemplate", first: true, predicate: ["actionsCell"], descendants: true, isSignal: true }], ngImport: i0, template: "<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_entity_form' }\"\r\n [breadcrumb_data]=\"breadcrumbData()\">\r\n <!-- Modern Entity Create Form -->\r\n <div class=\"tw-min-h-screen\">\r\n <div class=\"tw-mx-auto\">\r\n\r\n <form [formGroup]=\"entityForm\" [class.tw-opacity-60]=\"loading()\" [class.tw-pointer-events-none]=\"loading()\"\r\n (ngSubmit)=\"onSubmit()\">\r\n\r\n <!-- Breadcrumb is now rendered by shared wrapper; inline breadcrumb removed -->\r\n\r\n <!-- Basic Information Section -->\r\n <div class=\"tw-p-2 tw-pb-0\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Top Section: Image on Right, Form Fields on Left -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-[1fr_200px] tw-gap-4\">\r\n <!-- Left Side: Form Fields -->\r\n <div class=\"tw-space-y-6\">\r\n <!-- Institution Name, Entity Type & Active Status -->\r\n <div\r\n class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_250px_120px] tw-gap-4 tw-items-end\">\r\n <cide-ele-input id=\"syen_name\" type=\"text\" label=\"Institution Name\" formControlName=\"syen_name\"\r\n placeholder=\"Enter institution name\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Entity Type\" labelPlacement=\"floating\" [options]=\"entityTypes()\"\r\n formControlName=\"syen_entity_type_sygms\" placeholder=\"Select institution type\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-gap-1 tw-h-full\">\r\n <cide-ele-input type=\"checkbox\" formControlName=\"syen_isactive\" size=\"sm\" label=\"Is Active\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- UDISE, Affiliation & Institution Code -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-4\">\r\n <cide-ele-input label=\"UDISE Number\" formControlName=\"syen_udise_no\" placeholder=\"Enter UDISE number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Affiliation Number\" formControlName=\"syen_affiliation_no\"\r\n placeholder=\"Enter affiliation number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Institution Code\" formControlName=\"syen_entity_code\"\r\n placeholder=\"Enter unique code\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Side: Entity Image Upload -->\r\n <div class=\"tw-flex tw-items-start tw-justify-center tw-pt-0\">\r\n <cide-ele-file-input id=\"entity_image_upload\" formControlName=\"syen_photo_id_cyfm\" accept=\"image/*\"\r\n [showPreview]=\"true\" [previewBoxMode]=\"true\" [showFileName]=\"false\" previewWidth=\"180px\"\r\n previewHeight=\"120px\" [required]=\"true\" placeholderText=\"Upload Logo\" placeholderIcon=\"cloud_upload\"\r\n [autoUpload]=\"true\" [uploadData]=\"getUploadData()\" (uploadSuccess)=\"onImageUploadSuccess($event)\"\r\n (uploadError)=\"onImageUploadError($event)\" (uploadProgressChange)=\"onImageUploadProgress($event)\">\r\n </cide-ele-file-input>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Tab Navigation -->\r\n <div class=\"tw-px-4 !tw-mt-0\">\r\n <cide-ele-tab [tabs]=\"entityTabs()\" [activeTabId]=\"activeTab()\" size=\"sm\" variant=\"default\"\r\n (tabChange)=\"onTabChange($event)\">\r\n </cide-ele-tab>\r\n </div>\r\n\r\n <!-- Tab Content -->\r\n <div class=\"tw-transition-all tw-duration-300 tw-ease-in-out !tw-mt-2\" [class.tw-opacity-60]=\"loading()\"\r\n [class.tw-pointer-events-none]=\"loading()\">\r\n @switch (activeTab()) {\r\n\r\n @case ('corporate') {\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Corporate Address - Full Width -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-textarea label=\"Corporate Address\" formControlName=\"syen_corporate_address\"\r\n placeholder=\"Enter complete corporate address\" [rows]=\"4\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <!-- Postal Code, City, State & Country - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[220px_0.8fr_0.7fr_240px] tw-gap-6\">\r\n <cide-ele-select label=\"Postal Code\" [options]=\"postalCodes()\"\r\n formControlName=\"syen_corporate_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\r\n [loading]=\"postalCodesLoading()\" (searchChange)=\"onPostalCodeSearch($event)\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"City\" formControlName=\"syen_corporate_city_sypin\" placeholder=\"Enter city name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"State\" formControlName=\"syen_corporate_state_sypin\"\r\n placeholder=\"Enter state name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Country\" [options]=\"corporateCountries()\"\r\n formControlName=\"syen_corporate_country_syctr\" placeholder=\"Select country\" [searchable]=\"true\"\r\n (searchChange)=\"onCorporateCountrySearch($event)\" [loading]=\"corporateCountriesLoading()\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Contact Person, Phone, Email & Fax - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_200px_1fr_150px] tw-gap-6\">\r\n <cide-ele-select label=\"Contact Person\" [options]=\"users()\"\r\n formControlName=\"syen_corporate_contact_person_user\" placeholder=\"Select contact person\"\r\n [searchable]=\"true\" [loading]=\"usersLoading()\" (searchChange)=\"onUserSearch($event)\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Phone\" formControlName=\"syen_corporate_phone\" type=\"tel\"\r\n placeholder=\"Enter phone number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Email\" formControlName=\"syen_corporate_email\" type=\"email\"\r\n placeholder=\"Enter email address\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Fax\" formControlName=\"syen_corporate_fax\" placeholder=\"Enter fax number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('contact') {\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Currency Selection -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-select label=\"Currency\" [options]=\"currencies()\" formControlName=\"syen_currency_sycr\"\r\n placeholder=\"Select currency\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Alternate Phone & Website - Two Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\r\n <cide-ele-input label=\"Alternate Phone\" formControlName=\"syen_corporate_phone_alt\" type=\"tel\"\r\n placeholder=\"Enter alternate phone number\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Website URL\" formControlName=\"syen_website\" type=\"url\"\r\n placeholder=\"https://example.com\" autocomplete=\"url\" leadingIcon=\"language\"\r\n helperText=\"Enter a valid website URL starting with http:// or https://\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Alternate Email - Full Width -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-input label=\"Alternate Email\" formControlName=\"syen_corporate_email_alt\" type=\"email\"\r\n placeholder=\"Enter alternate email address\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('registered') {\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Registered Address - Full Width -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-textarea label=\"Registered Address\" formControlName=\"syen_registered_address\"\r\n placeholder=\"Enter complete registered address\" [rows]=\"4\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <!-- Postal Code, City, State & Country - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[220px_0.8fr_0.7fr_240px] tw-gap-6\">\r\n <cide-ele-select label=\"Postal Code\" [options]=\"postalCodes()\"\r\n formControlName=\"syen_registered_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\r\n [loading]=\"postalCodesLoading()\" (searchChange)=\"onPostalCodeSearch($event)\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"City\" formControlName=\"syen_registered_city_sypin\" placeholder=\"Enter city name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"State\" formControlName=\"syen_registered_state_sypin\"\r\n placeholder=\"Enter state name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Country\" [options]=\"registeredCountries()\"\r\n formControlName=\"syen_registered_country_syctr\" placeholder=\"Select country\" [searchable]=\"true\"\r\n (searchChange)=\"onRegisteredCountrySearch($event)\" [loading]=\"registeredCountriesLoading()\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Contact Person, Phone, Email & Fax - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_200px_1fr_150px] tw-gap-6\">\r\n <cide-ele-select label=\"Contact Person\" [options]=\"users()\"\r\n formControlName=\"syen_registered_contact_person_user\" placeholder=\"Select contact person\"\r\n [searchable]=\"true\" [loading]=\"usersLoading()\" (searchChange)=\"onUserSearch($event)\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Phone\" formControlName=\"syen_registered_phone\" type=\"tel\"\r\n placeholder=\"Enter phone number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Email\" formControlName=\"syen_registered_email\" type=\"email\"\r\n placeholder=\"Enter email address\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Fax\" formControlName=\"syen_registered_fax\" placeholder=\"Enter fax number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('user-mapping') {\r\n <div class=\"tw-p-2\">\r\n <div class=\"tw-space-y-4\">\r\n <!-- Add User Mapping Form -->\r\n <div class=\"tw-bg-white tw-p-4 tw-rounded-lg tw-border tw-shadow-sm\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-mb-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-sm\">person_add</cide-ele-icon>\r\n <h3 class=\"tw-text-sm tw-font-semibold tw-text-gray-800\">Add User to Entity</h3>\r\n </div>\r\n\r\n <form [formGroup]=\"userMappingForm\" (ngSubmit)=\"addUserMapping()\">\r\n <div class=\"tw-flex tw-items-end tw-gap-3\">\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-select label=\"Select User\" [options]=\"availableUsers()\" formControlName=\"syenm_id_user\"\r\n placeholder=\"Choose user to add to entity\" [searchable]=\"true\"\r\n [loading]=\"availableUsersLoading()\" size=\"md\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Add Button -->\r\n <div class=\"tw-flex tw-items-end\">\r\n <button cideEleButton type=\"submit\" variant=\"primary\" size=\"sm\"\r\n [disabled]=\"userMappingForm.invalid || availableUsersLoading()\"\r\n class=\"tw-shadow-sm tw-h-8 tw-px-3\">\r\n <cide-ele-icon class=\"tw-mr-1 tw-text-xs\">add</cide-ele-icon>\r\n <span class=\"tw-text-xs\">Add</span>\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n <!-- User Mappings Grid -->\r\n <div class=\"tw-bg-white tw-rounded-md tw-border tw-overflow-hidden tw-shadow-sm\">\r\n @if (userEntityMappingsLoading()) {\r\n <div class=\"tw-p-4 tw-text-center\">\r\n <div class=\"tw-inline-flex tw-items-center tw-gap-2 tw-text-gray-500\">\r\n <div class=\"tw-animate-spin tw-rounded-full tw-h-3 tw-w-3 tw-border-b-2 tw-border-gray-500\"></div>\r\n <span class=\"tw-text-xs\">Loading...</span>\r\n </div>\r\n </div>\r\n } @else if (userEntityMappings().length === 0) {\r\n <div class=\"tw-p-4 tw-text-center tw-text-gray-500\">\r\n <cide-ele-icon class=\"tw-text-2xl tw-mb-1 tw-text-gray-300\">people_outline</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-font-medium tw-mb-1\">No users mapped yet</p>\r\n <p class=\"tw-text-xs tw-text-gray-400\">Add users above to grant them access to this entity</p>\r\n </div>\r\n } @else {\r\n <cide-ele-data-grid [config]=\"userMappingsGridConfig\" [templateRenderers]=\"getUserMappingsTemplateRenderers()\">\r\n\r\n <!-- Custom user cell template -->\r\n <ng-template #userCell let-row=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <div\r\n class=\"tw-w-6 tw-h-6 tw-bg-gradient-to-br tw-from-blue-100 tw-to-indigo-100 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-shadow-sm\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-xs\">person</cide-ele-icon>\r\n </div>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-font-medium tw-text-gray-900 tw-text-xs\">\r\n {{ row?._displayUserName }}\r\n </span>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Custom actions cell template -->\r\n <ng-template #actionsCell let-row=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-justify-center\">\r\n <button\r\n (click)=\"updateUserMapping(row._id!, { syenm_isactive: !row.syenm_isactive })\"\r\n class=\"tw-w-8 tw-h-8 tw-flex tw-items-center tw-justify-center tw-rounded-md tw-transition-colors tw-border tw-border-transparent hover:tw-border-gray-300\"\r\n [class.tw-bg-green-100]=\"row.syenm_isactive\"\r\n [class.tw-text-green-700]=\"row.syenm_isactive\"\r\n [class.tw-bg-gray-100]=\"!row.syenm_isactive\"\r\n [class.tw-text-gray-600]=\"!row.syenm_isactive\"\r\n [title]=\"row.syenm_isactive ? 'Deactivate' : 'Activate'\">\r\n <cide-ele-icon class=\"tw-text-sm\">\r\n {{ row.syenm_isactive ? 'pause' : 'play_arrow' }}\r\n </cide-ele-icon>\r\n </button>\r\n\r\n <button (click)=\"removeUserMapping(row._id!)\"\r\n class=\"tw-w-8 tw-h-8 tw-flex tw-items-center tw-justify-center tw-rounded-md tw-bg-red-100 tw-text-red-600 hover:tw-bg-red-200 tw-transition-colors tw-border tw-border-transparent hover:tw-border-red-300\"\r\n title=\"Remove User\">\r\n <cide-ele-icon class=\"tw-text-sm\">delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </cide-ele-data-grid>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n }\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-gap-3\">\r\n <!-- Error Message (Left Side) -->\r\n <cide-form-field-error [formGroup]=\"entityForm\"></cide-form-field-error>\r\n\r\n <!-- Action Buttons (Right Side) -->\r\n <div class=\"tw-flex tw-gap-3\">\r\n <button cideEleButton type=\"button\" variant=\"outline\" size=\"md\" (click)=\"onBack()\"\r\n [disabled]=\"loading()\">\r\n <cide-ele-icon>arrow_back</cide-ele-icon>\r\n Back\r\n </button>\r\n\r\n <button cideEleButton type=\"button\" variant=\"secondary\" size=\"md\" (click)=\"onReset()\"\r\n [disabled]=\"loading()\">\r\n <cide-ele-icon>refresh</cide-ele-icon>\r\n Reset Form\r\n </button>\r\n\r\n <button cideEleButton type=\"submit\" variant=\"primary\" size=\"md\"\r\n [disabled]=\"loading() || entityForm.invalid\" [loading]=\"loading()\">\r\n <cide-ele-icon>{{ isEditMode() ? 'save' : 'add' }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update Entity' : 'Create Entity' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n</cide-lyt-shared-wrapper>", styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }, { 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: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey"], outputs: ["ngModelChange", "change", "searchChange"] }, { 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: CideEleFileInputComponent, selector: "cide-ele-file-input", inputs: ["label", "accept", "multiple", "disabled", "required", "helperText", "errorText", "showPreview", "previewWidth", "previewHeight", "previewBoxMode", "showFileName", "placeholderText", "placeholderIcon", "autoUpload", "uploadData", "showFloatingUploader", "floatingUploaderGroupId"], outputs: ["fileChange", "uploadSuccess", "uploadError", "uploadProgressChange"] }, { kind: "component", type: CideEleTabComponent, selector: "cide-ele-tab", inputs: ["tabs", "activeTabId", "size", "variant", "fullWidth", "disabled"], outputs: ["tabChange"] }, { 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: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideFormFieldErrorComponent, selector: "cide-form-field-error", inputs: ["control", "formGroup", "fieldName", "customMessages"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }] });
|
|
10954
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreEntityCreateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10955
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CideCoreEntityCreateComponent, isStandalone: true, selector: "cide-core-entity-create", viewQueries: [{ propertyName: "userCellRendererTemplate", first: true, predicate: ["userCell"], descendants: true, isSignal: true }, { propertyName: "actionsCellRendererTemplate", first: true, predicate: ["actionsCell"], descendants: true, isSignal: true }], ngImport: i0, template: "<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_entity_form' }\"\r\n [breadcrumb_data]=\"breadcrumbData()\">\r\n <!-- Modern Entity Create Form -->\r\n <div class=\"tw-min-h-screen\">\r\n <div class=\"tw-mx-auto\">\r\n\r\n <form [formGroup]=\"entityForm\" [class.tw-opacity-60]=\"loading()\" [class.tw-pointer-events-none]=\"loading()\"\r\n (ngSubmit)=\"onSubmit()\">\r\n\r\n <!-- Breadcrumb is now rendered by shared wrapper; inline breadcrumb removed -->\r\n\r\n <!-- Basic Information Section -->\r\n <div class=\"tw-p-2 tw-pb-0\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Top Section: Image on Right, Form Fields on Left -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-[1fr_200px] tw-gap-4\">\r\n <!-- Left Side: Form Fields -->\r\n <div class=\"tw-space-y-6\">\r\n <!-- Institution Name, Entity Type & Active Status -->\r\n <div\r\n class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_250px_120px] tw-gap-4 tw-items-end\">\r\n <cide-ele-input id=\"syen_name\" type=\"text\" label=\"Institution Name\" formControlName=\"syen_name\"\r\n placeholder=\"Enter institution name\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Entity Type\" labelPlacement=\"floating\" [options]=\"entityTypes()\"\r\n formControlName=\"syen_entity_type_sygms\" placeholder=\"Select institution type\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-gap-1 tw-h-full\">\r\n <cide-ele-input type=\"checkbox\" formControlName=\"syen_isactive\" size=\"sm\" label=\"Is Active\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- UDISE, Affiliation & Institution Code -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-4\">\r\n <cide-ele-input label=\"UDISE Number\" formControlName=\"syen_udise_no\" placeholder=\"Enter UDISE number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Affiliation Number\" formControlName=\"syen_affiliation_no\"\r\n placeholder=\"Enter affiliation number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Institution Code\" formControlName=\"syen_entity_code\"\r\n placeholder=\"Enter unique code\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Side: Entity Image Upload -->\r\n <div class=\"tw-flex tw-items-start tw-justify-center tw-pt-0\">\r\n <cide-ele-file-input id=\"entity_image_upload\" formControlName=\"syen_photo_id_cyfm\" accept=\"image/*\"\r\n [showPreview]=\"true\" [previewBoxMode]=\"true\" [showFileName]=\"false\" previewWidth=\"180px\"\r\n previewHeight=\"120px\" [required]=\"true\" placeholderText=\"Upload Logo\" placeholderIcon=\"cloud_upload\"\r\n [autoUpload]=\"true\" [uploadData]=\"getUploadData()\" (uploadSuccess)=\"onImageUploadSuccess($event)\"\r\n (uploadError)=\"onImageUploadError($event)\" (uploadProgressChange)=\"onImageUploadProgress($event)\">\r\n </cide-ele-file-input>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Tab Navigation -->\r\n <div class=\"tw-px-4 !tw-mt-0\">\r\n <cide-ele-tab [tabs]=\"entityTabs()\" [activeTabId]=\"activeTab()\" size=\"sm\" variant=\"default\"\r\n (tabChange)=\"onTabChange($event)\">\r\n </cide-ele-tab>\r\n </div>\r\n\r\n <!-- Tab Content -->\r\n <div class=\"tw-transition-all tw-duration-300 tw-ease-in-out !tw-mt-2\" [class.tw-opacity-60]=\"loading()\"\r\n [class.tw-pointer-events-none]=\"loading()\">\r\n @switch (activeTab()) {\r\n\r\n @case ('corporate') {\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Corporate Address - Full Width -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-textarea label=\"Corporate Address\" formControlName=\"syen_corporate_address\"\r\n placeholder=\"Enter complete corporate address\" [rows]=\"4\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <!-- Postal Code, City, State & Country - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[220px_0.8fr_0.7fr_240px] tw-gap-6\">\r\n <cide-ele-select label=\"Postal Code\" [options]=\"postalCodes()\"\r\n formControlName=\"syen_corporate_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\r\n [loading]=\"postalCodesLoading()\" (searchChange)=\"onPostalCodeSearch($event)\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"City\" formControlName=\"syen_corporate_city_sypin\" placeholder=\"Enter city name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"State\" formControlName=\"syen_corporate_state_sypin\"\r\n placeholder=\"Enter state name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Country\" [options]=\"corporateCountries()\"\r\n formControlName=\"syen_corporate_country_syctr\" placeholder=\"Select country\" [searchable]=\"true\"\r\n (searchChange)=\"onCorporateCountrySearch($event)\" [loading]=\"corporateCountriesLoading()\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Contact Person, Phone, Email & Fax - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_200px_1fr_150px] tw-gap-6\">\r\n <cide-ele-select label=\"Contact Person\" [options]=\"users()\"\r\n formControlName=\"syen_corporate_contact_person_user\" placeholder=\"Select contact person\"\r\n [searchable]=\"true\" [loading]=\"usersLoading()\" (searchChange)=\"onUserSearch($event)\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Phone\" formControlName=\"syen_corporate_phone\" type=\"tel\"\r\n placeholder=\"Enter phone number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Email\" formControlName=\"syen_corporate_email\" type=\"email\"\r\n placeholder=\"Enter email address\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Fax\" formControlName=\"syen_corporate_fax\" placeholder=\"Enter fax number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('contact') {\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Currency Selection -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-select label=\"Currency\" [options]=\"currencies()\" formControlName=\"syen_currency_sycr\"\r\n placeholder=\"Select currency\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Alternate Phone & Website - Two Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\r\n <cide-ele-input label=\"Alternate Phone\" formControlName=\"syen_corporate_phone_alt\" type=\"tel\"\r\n placeholder=\"Enter alternate phone number\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Website URL\" formControlName=\"syen_website\" type=\"url\"\r\n placeholder=\"https://example.com\" autocomplete=\"url\" leadingIcon=\"language\"\r\n helperText=\"Enter a valid website URL starting with http:// or https://\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Alternate Email - Full Width -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-input label=\"Alternate Email\" formControlName=\"syen_corporate_email_alt\" type=\"email\"\r\n placeholder=\"Enter alternate email address\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('registered') {\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Registered Address - Full Width -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-textarea label=\"Registered Address\" formControlName=\"syen_registered_address\"\r\n placeholder=\"Enter complete registered address\" [rows]=\"4\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <!-- Postal Code, City, State & Country - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[220px_0.8fr_0.7fr_240px] tw-gap-6\">\r\n <cide-ele-select label=\"Postal Code\" [options]=\"postalCodes()\"\r\n formControlName=\"syen_registered_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\r\n [loading]=\"postalCodesLoading()\" (searchChange)=\"onPostalCodeSearch($event)\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"City\" formControlName=\"syen_registered_city_sypin\" placeholder=\"Enter city name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"State\" formControlName=\"syen_registered_state_sypin\"\r\n placeholder=\"Enter state name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Country\" [options]=\"registeredCountries()\"\r\n formControlName=\"syen_registered_country_syctr\" placeholder=\"Select country\" [searchable]=\"true\"\r\n (searchChange)=\"onRegisteredCountrySearch($event)\" [loading]=\"registeredCountriesLoading()\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Contact Person, Phone, Email & Fax - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_200px_1fr_150px] tw-gap-6\">\r\n <cide-ele-select label=\"Contact Person\" [options]=\"users()\"\r\n formControlName=\"syen_registered_contact_person_user\" placeholder=\"Select contact person\"\r\n [searchable]=\"true\" [loading]=\"usersLoading()\" (searchChange)=\"onUserSearch($event)\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Phone\" formControlName=\"syen_registered_phone\" type=\"tel\"\r\n placeholder=\"Enter phone number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Email\" formControlName=\"syen_registered_email\" type=\"email\"\r\n placeholder=\"Enter email address\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Fax\" formControlName=\"syen_registered_fax\" placeholder=\"Enter fax number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('user-mapping') {\r\n <div class=\"tw-p-2\">\r\n <div class=\"tw-space-y-4\">\r\n <!-- Add User Mapping Form -->\r\n <div class=\"tw-bg-white tw-p-4 tw-rounded-lg tw-border tw-shadow-sm\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-mb-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-sm\">person_add</cide-ele-icon>\r\n <h3 class=\"tw-text-sm tw-font-semibold tw-text-gray-800\">Add User to Entity</h3>\r\n </div>\r\n\r\n <form [formGroup]=\"userMappingForm\" (ngSubmit)=\"addUserMapping()\">\r\n <div class=\"tw-flex tw-items-end tw-gap-3\">\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-select label=\"Select User\" [options]=\"availableUsers()\" formControlName=\"syenm_id_user\"\r\n placeholder=\"Choose user to add to entity\" [searchable]=\"true\"\r\n [loading]=\"availableUsersLoading()\" size=\"md\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Add Button -->\r\n <div class=\"tw-flex tw-items-end\">\r\n <button cideEleButton type=\"submit\" variant=\"primary\" size=\"sm\"\r\n [disabled]=\"userMappingForm.invalid || availableUsersLoading()\"\r\n class=\"tw-shadow-sm tw-h-8 tw-px-3\">\r\n <cide-ele-icon class=\"tw-mr-1 tw-text-xs\">add</cide-ele-icon>\r\n <span class=\"tw-text-xs\">Add</span>\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n <!-- User Mappings Grid -->\r\n <div class=\"tw-bg-white tw-rounded-md tw-border tw-overflow-hidden tw-shadow-sm\">\r\n @if (userEntityMappingsLoading()) {\r\n <div class=\"tw-p-4 tw-text-center\">\r\n <div class=\"tw-inline-flex tw-items-center tw-gap-2 tw-text-gray-500\">\r\n <div class=\"tw-animate-spin tw-rounded-full tw-h-3 tw-w-3 tw-border-b-2 tw-border-gray-500\"></div>\r\n <span class=\"tw-text-xs\">Loading...</span>\r\n </div>\r\n </div>\r\n } @else if (userEntityMappings().length === 0) {\r\n <div class=\"tw-p-4 tw-text-center tw-text-gray-500\">\r\n <cide-ele-icon class=\"tw-text-2xl tw-mb-1 tw-text-gray-300\">people_outline</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-font-medium tw-mb-1\">No users mapped yet</p>\r\n <p class=\"tw-text-xs tw-text-gray-400\">Add users above to grant them access to this entity</p>\r\n </div>\r\n } @else {\r\n <cide-ele-data-grid [config]=\"userMappingsGridConfig\" [templateRenderers]=\"getUserMappingsTemplateRenderers()\">\r\n\r\n <!-- Custom user cell template -->\r\n <ng-template #userCell let-row=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <div\r\n class=\"tw-w-6 tw-h-6 tw-bg-gradient-to-br tw-from-blue-100 tw-to-indigo-100 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-shadow-sm\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-xs\">person</cide-ele-icon>\r\n </div>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-font-medium tw-text-gray-900 tw-text-xs\">\r\n {{ row?._displayUserName }}\r\n </span>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Custom actions cell template -->\r\n <ng-template #actionsCell let-row=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-justify-center\">\r\n <button\r\n (click)=\"updateUserMapping(row._id!, { syenm_isactive: !row.syenm_isactive })\"\r\n class=\"tw-w-8 tw-h-8 tw-flex tw-items-center tw-justify-center tw-rounded-md tw-transition-colors tw-border tw-border-transparent hover:tw-border-gray-300\"\r\n [class.tw-bg-green-100]=\"row.syenm_isactive\"\r\n [class.tw-text-green-700]=\"row.syenm_isactive\"\r\n [class.tw-bg-gray-100]=\"!row.syenm_isactive\"\r\n [class.tw-text-gray-600]=\"!row.syenm_isactive\"\r\n [title]=\"row.syenm_isactive ? 'Deactivate' : 'Activate'\">\r\n <cide-ele-icon class=\"tw-text-sm\">\r\n {{ row.syenm_isactive ? 'pause' : 'play_arrow' }}\r\n </cide-ele-icon>\r\n </button>\r\n\r\n <button (click)=\"removeUserMapping(row._id!)\"\r\n class=\"tw-w-8 tw-h-8 tw-flex tw-items-center tw-justify-center tw-rounded-md tw-bg-red-100 tw-text-red-600 hover:tw-bg-red-200 tw-transition-colors tw-border tw-border-transparent hover:tw-border-red-300\"\r\n title=\"Remove User\">\r\n <cide-ele-icon class=\"tw-text-sm\">delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </cide-ele-data-grid>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n }\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-gap-3\">\r\n <!-- Error Message (Left Side) -->\r\n <cide-form-field-error [formGroup]=\"entityForm\"></cide-form-field-error>\r\n\r\n <!-- Action Buttons (Right Side) -->\r\n <div class=\"tw-flex tw-gap-3\">\r\n <button cideEleButton type=\"button\" variant=\"outline\" size=\"md\" (click)=\"onBack()\"\r\n [disabled]=\"loading()\">\r\n <cide-ele-icon>arrow_back</cide-ele-icon>\r\n Back\r\n </button>\r\n\r\n <button cideEleButton type=\"button\" variant=\"secondary\" size=\"md\" (click)=\"onReset()\"\r\n [disabled]=\"loading()\">\r\n <cide-ele-icon>refresh</cide-ele-icon>\r\n Reset Form\r\n </button>\r\n\r\n <button cideEleButton type=\"submit\" variant=\"primary\" size=\"md\"\r\n [disabled]=\"loading() || entityForm.invalid\" [loading]=\"loading()\">\r\n <cide-ele-icon>{{ isEditMode() ? 'save' : 'add' }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update Entity' : 'Create Entity' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n</cide-lyt-shared-wrapper>", styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }, { 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: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }, { 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: CideEleFileInputComponent, selector: "cide-ele-file-input", inputs: ["label", "accept", "multiple", "disabled", "required", "helperText", "errorText", "showPreview", "previewWidth", "previewHeight", "previewBoxMode", "showFileName", "placeholderText", "placeholderIcon", "autoUpload", "uploadData", "showFloatingUploader", "floatingUploaderGroupId"], outputs: ["fileChange", "uploadSuccess", "uploadError", "uploadProgressChange"] }, { kind: "component", type: CideEleTabComponent, selector: "cide-ele-tab", inputs: ["tabs", "activeTabId", "size", "variant", "fullWidth", "disabled"], outputs: ["tabChange"] }, { 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: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideFormFieldErrorComponent, selector: "cide-form-field-error", inputs: ["control", "formGroup", "fieldName", "customMessages"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }] });
|
|
10879
10956
|
}
|
|
10880
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
10957
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreEntityCreateComponent, decorators: [{
|
|
10881
10958
|
type: Component,
|
|
10882
10959
|
args: [{ selector: 'cide-core-entity-create', imports: [
|
|
10883
10960
|
ReactiveFormsModule,
|
|
@@ -10892,7 +10969,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
10892
10969
|
CideFormFieldErrorComponent,
|
|
10893
10970
|
CideEleDataGridComponent,
|
|
10894
10971
|
], template: "<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_entity_form' }\"\r\n [breadcrumb_data]=\"breadcrumbData()\">\r\n <!-- Modern Entity Create Form -->\r\n <div class=\"tw-min-h-screen\">\r\n <div class=\"tw-mx-auto\">\r\n\r\n <form [formGroup]=\"entityForm\" [class.tw-opacity-60]=\"loading()\" [class.tw-pointer-events-none]=\"loading()\"\r\n (ngSubmit)=\"onSubmit()\">\r\n\r\n <!-- Breadcrumb is now rendered by shared wrapper; inline breadcrumb removed -->\r\n\r\n <!-- Basic Information Section -->\r\n <div class=\"tw-p-2 tw-pb-0\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Top Section: Image on Right, Form Fields on Left -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-[1fr_200px] tw-gap-4\">\r\n <!-- Left Side: Form Fields -->\r\n <div class=\"tw-space-y-6\">\r\n <!-- Institution Name, Entity Type & Active Status -->\r\n <div\r\n class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_250px_120px] tw-gap-4 tw-items-end\">\r\n <cide-ele-input id=\"syen_name\" type=\"text\" label=\"Institution Name\" formControlName=\"syen_name\"\r\n placeholder=\"Enter institution name\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Entity Type\" labelPlacement=\"floating\" [options]=\"entityTypes()\"\r\n formControlName=\"syen_entity_type_sygms\" placeholder=\"Select institution type\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-gap-1 tw-h-full\">\r\n <cide-ele-input type=\"checkbox\" formControlName=\"syen_isactive\" size=\"sm\" label=\"Is Active\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- UDISE, Affiliation & Institution Code -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-4\">\r\n <cide-ele-input label=\"UDISE Number\" formControlName=\"syen_udise_no\" placeholder=\"Enter UDISE number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Affiliation Number\" formControlName=\"syen_affiliation_no\"\r\n placeholder=\"Enter affiliation number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Institution Code\" formControlName=\"syen_entity_code\"\r\n placeholder=\"Enter unique code\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Side: Entity Image Upload -->\r\n <div class=\"tw-flex tw-items-start tw-justify-center tw-pt-0\">\r\n <cide-ele-file-input id=\"entity_image_upload\" formControlName=\"syen_photo_id_cyfm\" accept=\"image/*\"\r\n [showPreview]=\"true\" [previewBoxMode]=\"true\" [showFileName]=\"false\" previewWidth=\"180px\"\r\n previewHeight=\"120px\" [required]=\"true\" placeholderText=\"Upload Logo\" placeholderIcon=\"cloud_upload\"\r\n [autoUpload]=\"true\" [uploadData]=\"getUploadData()\" (uploadSuccess)=\"onImageUploadSuccess($event)\"\r\n (uploadError)=\"onImageUploadError($event)\" (uploadProgressChange)=\"onImageUploadProgress($event)\">\r\n </cide-ele-file-input>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Tab Navigation -->\r\n <div class=\"tw-px-4 !tw-mt-0\">\r\n <cide-ele-tab [tabs]=\"entityTabs()\" [activeTabId]=\"activeTab()\" size=\"sm\" variant=\"default\"\r\n (tabChange)=\"onTabChange($event)\">\r\n </cide-ele-tab>\r\n </div>\r\n\r\n <!-- Tab Content -->\r\n <div class=\"tw-transition-all tw-duration-300 tw-ease-in-out !tw-mt-2\" [class.tw-opacity-60]=\"loading()\"\r\n [class.tw-pointer-events-none]=\"loading()\">\r\n @switch (activeTab()) {\r\n\r\n @case ('corporate') {\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Corporate Address - Full Width -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-textarea label=\"Corporate Address\" formControlName=\"syen_corporate_address\"\r\n placeholder=\"Enter complete corporate address\" [rows]=\"4\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <!-- Postal Code, City, State & Country - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[220px_0.8fr_0.7fr_240px] tw-gap-6\">\r\n <cide-ele-select label=\"Postal Code\" [options]=\"postalCodes()\"\r\n formControlName=\"syen_corporate_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\r\n [loading]=\"postalCodesLoading()\" (searchChange)=\"onPostalCodeSearch($event)\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"City\" formControlName=\"syen_corporate_city_sypin\" placeholder=\"Enter city name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"State\" formControlName=\"syen_corporate_state_sypin\"\r\n placeholder=\"Enter state name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Country\" [options]=\"corporateCountries()\"\r\n formControlName=\"syen_corporate_country_syctr\" placeholder=\"Select country\" [searchable]=\"true\"\r\n (searchChange)=\"onCorporateCountrySearch($event)\" [loading]=\"corporateCountriesLoading()\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Contact Person, Phone, Email & Fax - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_200px_1fr_150px] tw-gap-6\">\r\n <cide-ele-select label=\"Contact Person\" [options]=\"users()\"\r\n formControlName=\"syen_corporate_contact_person_user\" placeholder=\"Select contact person\"\r\n [searchable]=\"true\" [loading]=\"usersLoading()\" (searchChange)=\"onUserSearch($event)\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Phone\" formControlName=\"syen_corporate_phone\" type=\"tel\"\r\n placeholder=\"Enter phone number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Email\" formControlName=\"syen_corporate_email\" type=\"email\"\r\n placeholder=\"Enter email address\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Fax\" formControlName=\"syen_corporate_fax\" placeholder=\"Enter fax number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('contact') {\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Currency Selection -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-select label=\"Currency\" [options]=\"currencies()\" formControlName=\"syen_currency_sycr\"\r\n placeholder=\"Select currency\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Alternate Phone & Website - Two Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\r\n <cide-ele-input label=\"Alternate Phone\" formControlName=\"syen_corporate_phone_alt\" type=\"tel\"\r\n placeholder=\"Enter alternate phone number\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Website URL\" formControlName=\"syen_website\" type=\"url\"\r\n placeholder=\"https://example.com\" autocomplete=\"url\" leadingIcon=\"language\"\r\n helperText=\"Enter a valid website URL starting with http:// or https://\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Alternate Email - Full Width -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-input label=\"Alternate Email\" formControlName=\"syen_corporate_email_alt\" type=\"email\"\r\n placeholder=\"Enter alternate email address\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('registered') {\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Registered Address - Full Width -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-textarea label=\"Registered Address\" formControlName=\"syen_registered_address\"\r\n placeholder=\"Enter complete registered address\" [rows]=\"4\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <!-- Postal Code, City, State & Country - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[220px_0.8fr_0.7fr_240px] tw-gap-6\">\r\n <cide-ele-select label=\"Postal Code\" [options]=\"postalCodes()\"\r\n formControlName=\"syen_registered_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\r\n [loading]=\"postalCodesLoading()\" (searchChange)=\"onPostalCodeSearch($event)\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"City\" formControlName=\"syen_registered_city_sypin\" placeholder=\"Enter city name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"State\" formControlName=\"syen_registered_state_sypin\"\r\n placeholder=\"Enter state name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Country\" [options]=\"registeredCountries()\"\r\n formControlName=\"syen_registered_country_syctr\" placeholder=\"Select country\" [searchable]=\"true\"\r\n (searchChange)=\"onRegisteredCountrySearch($event)\" [loading]=\"registeredCountriesLoading()\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Contact Person, Phone, Email & Fax - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_200px_1fr_150px] tw-gap-6\">\r\n <cide-ele-select label=\"Contact Person\" [options]=\"users()\"\r\n formControlName=\"syen_registered_contact_person_user\" placeholder=\"Select contact person\"\r\n [searchable]=\"true\" [loading]=\"usersLoading()\" (searchChange)=\"onUserSearch($event)\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Phone\" formControlName=\"syen_registered_phone\" type=\"tel\"\r\n placeholder=\"Enter phone number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Email\" formControlName=\"syen_registered_email\" type=\"email\"\r\n placeholder=\"Enter email address\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Fax\" formControlName=\"syen_registered_fax\" placeholder=\"Enter fax number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('user-mapping') {\r\n <div class=\"tw-p-2\">\r\n <div class=\"tw-space-y-4\">\r\n <!-- Add User Mapping Form -->\r\n <div class=\"tw-bg-white tw-p-4 tw-rounded-lg tw-border tw-shadow-sm\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-mb-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-sm\">person_add</cide-ele-icon>\r\n <h3 class=\"tw-text-sm tw-font-semibold tw-text-gray-800\">Add User to Entity</h3>\r\n </div>\r\n\r\n <form [formGroup]=\"userMappingForm\" (ngSubmit)=\"addUserMapping()\">\r\n <div class=\"tw-flex tw-items-end tw-gap-3\">\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-select label=\"Select User\" [options]=\"availableUsers()\" formControlName=\"syenm_id_user\"\r\n placeholder=\"Choose user to add to entity\" [searchable]=\"true\"\r\n [loading]=\"availableUsersLoading()\" size=\"md\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Add Button -->\r\n <div class=\"tw-flex tw-items-end\">\r\n <button cideEleButton type=\"submit\" variant=\"primary\" size=\"sm\"\r\n [disabled]=\"userMappingForm.invalid || availableUsersLoading()\"\r\n class=\"tw-shadow-sm tw-h-8 tw-px-3\">\r\n <cide-ele-icon class=\"tw-mr-1 tw-text-xs\">add</cide-ele-icon>\r\n <span class=\"tw-text-xs\">Add</span>\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n <!-- User Mappings Grid -->\r\n <div class=\"tw-bg-white tw-rounded-md tw-border tw-overflow-hidden tw-shadow-sm\">\r\n @if (userEntityMappingsLoading()) {\r\n <div class=\"tw-p-4 tw-text-center\">\r\n <div class=\"tw-inline-flex tw-items-center tw-gap-2 tw-text-gray-500\">\r\n <div class=\"tw-animate-spin tw-rounded-full tw-h-3 tw-w-3 tw-border-b-2 tw-border-gray-500\"></div>\r\n <span class=\"tw-text-xs\">Loading...</span>\r\n </div>\r\n </div>\r\n } @else if (userEntityMappings().length === 0) {\r\n <div class=\"tw-p-4 tw-text-center tw-text-gray-500\">\r\n <cide-ele-icon class=\"tw-text-2xl tw-mb-1 tw-text-gray-300\">people_outline</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-font-medium tw-mb-1\">No users mapped yet</p>\r\n <p class=\"tw-text-xs tw-text-gray-400\">Add users above to grant them access to this entity</p>\r\n </div>\r\n } @else {\r\n <cide-ele-data-grid [config]=\"userMappingsGridConfig\" [templateRenderers]=\"getUserMappingsTemplateRenderers()\">\r\n\r\n <!-- Custom user cell template -->\r\n <ng-template #userCell let-row=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <div\r\n class=\"tw-w-6 tw-h-6 tw-bg-gradient-to-br tw-from-blue-100 tw-to-indigo-100 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-shadow-sm\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-xs\">person</cide-ele-icon>\r\n </div>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-font-medium tw-text-gray-900 tw-text-xs\">\r\n {{ row?._displayUserName }}\r\n </span>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Custom actions cell template -->\r\n <ng-template #actionsCell let-row=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-justify-center\">\r\n <button\r\n (click)=\"updateUserMapping(row._id!, { syenm_isactive: !row.syenm_isactive })\"\r\n class=\"tw-w-8 tw-h-8 tw-flex tw-items-center tw-justify-center tw-rounded-md tw-transition-colors tw-border tw-border-transparent hover:tw-border-gray-300\"\r\n [class.tw-bg-green-100]=\"row.syenm_isactive\"\r\n [class.tw-text-green-700]=\"row.syenm_isactive\"\r\n [class.tw-bg-gray-100]=\"!row.syenm_isactive\"\r\n [class.tw-text-gray-600]=\"!row.syenm_isactive\"\r\n [title]=\"row.syenm_isactive ? 'Deactivate' : 'Activate'\">\r\n <cide-ele-icon class=\"tw-text-sm\">\r\n {{ row.syenm_isactive ? 'pause' : 'play_arrow' }}\r\n </cide-ele-icon>\r\n </button>\r\n\r\n <button (click)=\"removeUserMapping(row._id!)\"\r\n class=\"tw-w-8 tw-h-8 tw-flex tw-items-center tw-justify-center tw-rounded-md tw-bg-red-100 tw-text-red-600 hover:tw-bg-red-200 tw-transition-colors tw-border tw-border-transparent hover:tw-border-red-300\"\r\n title=\"Remove User\">\r\n <cide-ele-icon class=\"tw-text-sm\">delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </cide-ele-data-grid>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n }\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-gap-3\">\r\n <!-- Error Message (Left Side) -->\r\n <cide-form-field-error [formGroup]=\"entityForm\"></cide-form-field-error>\r\n\r\n <!-- Action Buttons (Right Side) -->\r\n <div class=\"tw-flex tw-gap-3\">\r\n <button cideEleButton type=\"button\" variant=\"outline\" size=\"md\" (click)=\"onBack()\"\r\n [disabled]=\"loading()\">\r\n <cide-ele-icon>arrow_back</cide-ele-icon>\r\n Back\r\n </button>\r\n\r\n <button cideEleButton type=\"button\" variant=\"secondary\" size=\"md\" (click)=\"onReset()\"\r\n [disabled]=\"loading()\">\r\n <cide-ele-icon>refresh</cide-ele-icon>\r\n Reset Form\r\n </button>\r\n\r\n <button cideEleButton type=\"submit\" variant=\"primary\" size=\"md\"\r\n [disabled]=\"loading() || entityForm.invalid\" [loading]=\"loading()\">\r\n <cide-ele-icon>{{ isEditMode() ? 'save' : 'add' }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update Entity' : 'Create Entity' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n</cide-lyt-shared-wrapper>" }]
|
|
10895
|
-
}], ctorParameters: () => [] });
|
|
10972
|
+
}], ctorParameters: () => [], propDecorators: { userCellRendererTemplate: [{ type: i0.ViewChild, args: ['userCell', { isSignal: true }] }], actionsCellRendererTemplate: [{ type: i0.ViewChild, args: ['actionsCell', { isSignal: true }] }] } });
|
|
10896
10973
|
|
|
10897
10974
|
var entityCreate_component = /*#__PURE__*/Object.freeze({
|
|
10898
10975
|
__proto__: null,
|
|
@@ -11300,6 +11377,15 @@ class CideCoreEntityListComponent {
|
|
|
11300
11377
|
this.currentPage.set(1);
|
|
11301
11378
|
this.loadEntities();
|
|
11302
11379
|
}
|
|
11380
|
+
/**
|
|
11381
|
+
* Handle entity type selection change
|
|
11382
|
+
*/
|
|
11383
|
+
onEntityTypeChange(value) {
|
|
11384
|
+
const entityType = typeof value === 'string' ? value : (value ? String(value) : '');
|
|
11385
|
+
this.selectedEntityType.set(entityType);
|
|
11386
|
+
this.currentPage.set(1);
|
|
11387
|
+
this.loadEntities();
|
|
11388
|
+
}
|
|
11303
11389
|
onPageChange(page) {
|
|
11304
11390
|
if (parseInt(page) >= 1 && parseInt(page) <= this.totalPages()) {
|
|
11305
11391
|
this.currentPage.set(parseInt(page));
|
|
@@ -11464,10 +11550,10 @@ class CideCoreEntityListComponent {
|
|
|
11464
11550
|
onOrgStructure() {
|
|
11465
11551
|
this.router.navigate(['/control-panel/org-structure']);
|
|
11466
11552
|
}
|
|
11467
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
11468
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.
|
|
11553
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreEntityListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11554
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CideCoreEntityListComponent, isStandalone: true, selector: "cide-core-entity-list", viewQueries: [{ propertyName: "gridComponent", first: true, predicate: CideEleDataGridComponent, descendants: true, isSignal: true }, { propertyName: "entityDetailsRenderer", first: true, predicate: ["entityDetailsRenderer"], descendants: true, isSignal: true }, { propertyName: "entityTypeRenderer", first: true, predicate: ["entityTypeRenderer"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRenderer", first: true, predicate: ["actionsDropdownRenderer"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Entity List Container -->\r\n<div class=\"entity-list-container tw-bg-white tw-shadow-lg tw-rounded-lg tw-overflow-hidden\">\r\n \r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-4 sm:tw-space-y-0\">\r\n \r\n <!-- Title -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600\">apartment</cide-ele-icon>\r\n <div>\r\n <h5 class=\"tw-text-sm tw-font-semibold tw-text-gray-900\">Entity Management</h5>\r\n </div>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <!-- Entity Type Filter -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <label for=\"entityTypeFilter\" class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Type:</label>\r\n <cide-ele-select\r\n id=\"entityTypeFilter\"\r\n [options]=\"entityTypeOptions()\"\r\n [ngModel]=\"selectedEntityTypeValue\"\r\n (ngModelChange)=\"onEntityTypeChange($event)\"\r\n class=\"tw-min-w-40\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Org Structure Button -->\r\n <button\r\n cideEleButton\r\n variant=\"secondary\"\r\n size=\"sm\"\r\n (click)=\"onOrgStructure()\"\r\n class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-6 tw-h-5\">account_tree</cide-ele-icon>\r\n Org Structure\r\n </button>\r\n\r\n <!-- Add Entity Button -->\r\n <button\r\n cideEleButton\r\n variant=\"primary\"\r\n size=\"sm\"\r\n (click)=\"router.navigate(['control-panel', 'entity-create'])\"\r\n class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-6 tw-h-5\">add</cide-ele-icon>\r\n Add Entity\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex\">\r\n <cide-ele-icon name=\"exclamation-triangle\" class=\"tw-text-red-400\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Data Grid Component -->\r\n <cide-ele-data-grid\r\n [config]=\"gridConfig()\"\r\n [templateRenderers]=\"templateRenderers()\"\r\n [actionHandlers]=\"actionHandlers\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n\r\n</div>\r\n\r\n<!-- Custom Renderer Templates -->\r\n\r\n<!-- Entity Details Renderer Template -->\r\n<!-- Context: { $implicit: unknown, row: entityResponseData, value: unknown, column: GridColumn } -->\r\n<ng-template #entityDetailsRenderer let-value=\"value\" let-entity=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <div class=\"tw-flex-shrink-0 tw-w-10 tw-h-10 tw-bg-blue-100 tw-rounded-full tw-flex tw-items-center tw-justify-center\">\r\n <span class=\"tw-text-blue-600 tw-font-semibold tw-text-sm\">\r\n {{ (entity.syen_entity_code || 'NA').substring(0, 2).toUpperCase() }}\r\n </span>\r\n </div>\r\n <div class=\"tw-flex-1 tw-min-w-0\">\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"entity.syen_name || 'Unknown Entity'\">\r\n {{ entity.syen_name || 'Unknown Entity' }}\r\n </p>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-truncate\" [title]=\"entity.syen_entity_code || 'N/A'\">\r\n Code: {{ entity.syen_entity_code || 'N/A' }}\r\n </p>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<!-- Entity Type Renderer Template -->\r\n<!-- Context: { $implicit: unknown, row: entityResponseData, value: unknown, column: GridColumn } -->\r\n<ng-template #entityTypeRenderer let-value=\"value\" let-entity=\"row\">\r\n <div class=\"tw-flex tw-flex-col tw-items-center tw-space-y-1\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"getEntityTypeName(entity)\">\r\n {{ getEntityTypeName(entity) }}\r\n </span>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown Renderer Template -->\r\n<!-- Context: { $implicit: unknown, row: entityResponseData, value: unknown, column: GridColumn } -->\r\n<ng-template #actionsDropdownRenderer let-value=\"value\" let-entity=\"row\">\r\n <cide-ele-dropdown \r\n [items]=\"getDropdownItems(entity)\"\r\n [config]=\"getDropdownConfig()\"\r\n (itemClick)=\"onDropdownItemClick($event, entity)\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n\r\n", styles: ["", ":host{height:100%;display:flex;flex-direction:column}.entity-list-container{height:100%;display:flex;flex-direction:column;overflow:hidden}.tw-overflow-auto{flex:1;min-height:0}cide-ele-data-grid{flex:1;min-height:0;display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { 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: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }] });
|
|
11469
11555
|
}
|
|
11470
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
11556
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreEntityListComponent, decorators: [{
|
|
11471
11557
|
type: Component,
|
|
11472
11558
|
args: [{ selector: 'cide-core-entity-list', imports: [
|
|
11473
11559
|
CommonModule,
|
|
@@ -11477,8 +11563,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
11477
11563
|
CideSelectComponent,
|
|
11478
11564
|
CideEleDataGridComponent,
|
|
11479
11565
|
CideEleDropdownComponent
|
|
11480
|
-
], template: "<!-- Entity List Container -->\r\n<div class=\"entity-list-container tw-bg-white tw-shadow-lg tw-rounded-lg tw-overflow-hidden\">\r\n \r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-4 sm:tw-space-y-0\">\r\n \r\n <!-- Title -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600\">apartment</cide-ele-icon>\r\n <div>\r\n <h5 class=\"tw-text-sm tw-font-semibold tw-text-gray-900\">Entity Management</h5>\r\n </div>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <!-- Entity Type Filter -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <label for=\"entityTypeFilter\" class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Type:</label>\r\n <cide-ele-select\r\n id=\"entityTypeFilter\"\r\n [options]=\"entityTypeOptions()\"\r\n [
|
|
11481
|
-
}] });
|
|
11566
|
+
], template: "<!-- Entity List Container -->\r\n<div class=\"entity-list-container tw-bg-white tw-shadow-lg tw-rounded-lg tw-overflow-hidden\">\r\n \r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-4 sm:tw-space-y-0\">\r\n \r\n <!-- Title -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600\">apartment</cide-ele-icon>\r\n <div>\r\n <h5 class=\"tw-text-sm tw-font-semibold tw-text-gray-900\">Entity Management</h5>\r\n </div>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <!-- Entity Type Filter -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <label for=\"entityTypeFilter\" class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Type:</label>\r\n <cide-ele-select\r\n id=\"entityTypeFilter\"\r\n [options]=\"entityTypeOptions()\"\r\n [ngModel]=\"selectedEntityTypeValue\"\r\n (ngModelChange)=\"onEntityTypeChange($event)\"\r\n class=\"tw-min-w-40\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Org Structure Button -->\r\n <button\r\n cideEleButton\r\n variant=\"secondary\"\r\n size=\"sm\"\r\n (click)=\"onOrgStructure()\"\r\n class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-6 tw-h-5\">account_tree</cide-ele-icon>\r\n Org Structure\r\n </button>\r\n\r\n <!-- Add Entity Button -->\r\n <button\r\n cideEleButton\r\n variant=\"primary\"\r\n size=\"sm\"\r\n (click)=\"router.navigate(['control-panel', 'entity-create'])\"\r\n class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-6 tw-h-5\">add</cide-ele-icon>\r\n Add Entity\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex\">\r\n <cide-ele-icon name=\"exclamation-triangle\" class=\"tw-text-red-400\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Data Grid Component -->\r\n <cide-ele-data-grid\r\n [config]=\"gridConfig()\"\r\n [templateRenderers]=\"templateRenderers()\"\r\n [actionHandlers]=\"actionHandlers\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n\r\n</div>\r\n\r\n<!-- Custom Renderer Templates -->\r\n\r\n<!-- Entity Details Renderer Template -->\r\n<!-- Context: { $implicit: unknown, row: entityResponseData, value: unknown, column: GridColumn } -->\r\n<ng-template #entityDetailsRenderer let-value=\"value\" let-entity=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <div class=\"tw-flex-shrink-0 tw-w-10 tw-h-10 tw-bg-blue-100 tw-rounded-full tw-flex tw-items-center tw-justify-center\">\r\n <span class=\"tw-text-blue-600 tw-font-semibold tw-text-sm\">\r\n {{ (entity.syen_entity_code || 'NA').substring(0, 2).toUpperCase() }}\r\n </span>\r\n </div>\r\n <div class=\"tw-flex-1 tw-min-w-0\">\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"entity.syen_name || 'Unknown Entity'\">\r\n {{ entity.syen_name || 'Unknown Entity' }}\r\n </p>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-truncate\" [title]=\"entity.syen_entity_code || 'N/A'\">\r\n Code: {{ entity.syen_entity_code || 'N/A' }}\r\n </p>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<!-- Entity Type Renderer Template -->\r\n<!-- Context: { $implicit: unknown, row: entityResponseData, value: unknown, column: GridColumn } -->\r\n<ng-template #entityTypeRenderer let-value=\"value\" let-entity=\"row\">\r\n <div class=\"tw-flex tw-flex-col tw-items-center tw-space-y-1\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"getEntityTypeName(entity)\">\r\n {{ getEntityTypeName(entity) }}\r\n </span>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown Renderer Template -->\r\n<!-- Context: { $implicit: unknown, row: entityResponseData, value: unknown, column: GridColumn } -->\r\n<ng-template #actionsDropdownRenderer let-value=\"value\" let-entity=\"row\">\r\n <cide-ele-dropdown \r\n [items]=\"getDropdownItems(entity)\"\r\n [config]=\"getDropdownConfig()\"\r\n (itemClick)=\"onDropdownItemClick($event, entity)\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n\r\n", styles: [":host{height:100%;display:flex;flex-direction:column}.entity-list-container{height:100%;display:flex;flex-direction:column;overflow:hidden}.tw-overflow-auto{flex:1;min-height:0}cide-ele-data-grid{flex:1;min-height:0;display:flex;flex-direction:column}\n"] }]
|
|
11567
|
+
}], propDecorators: { gridComponent: [{ type: i0.ViewChild, args: [i0.forwardRef(() => CideEleDataGridComponent), { isSignal: true }] }], entityDetailsRenderer: [{ type: i0.ViewChild, args: ['entityDetailsRenderer', { isSignal: true }] }], entityTypeRenderer: [{ type: i0.ViewChild, args: ['entityTypeRenderer', { isSignal: true }] }], actionsDropdownRenderer: [{ type: i0.ViewChild, args: ['actionsDropdownRenderer', { isSignal: true }] }] } });
|
|
11482
11568
|
|
|
11483
11569
|
var entityList_component = /*#__PURE__*/Object.freeze({
|
|
11484
11570
|
__proto__: null,
|
|
@@ -11523,8 +11609,8 @@ class CideCoreOrgStructureComponent {
|
|
|
11523
11609
|
onEntityView(entity) {
|
|
11524
11610
|
this.entityView.emit(entity);
|
|
11525
11611
|
}
|
|
11526
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
11527
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.
|
|
11612
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreOrgStructureComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11613
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.15", type: CideCoreOrgStructureComponent, isStandalone: true, selector: "cide-core-org-structure", inputs: { allowSwitching: { classPropertyName: "allowSwitching", publicName: "allowSwitching", isSignal: true, isRequired: false, transformFunction: null }, showActions: { classPropertyName: "showActions", publicName: "showActions", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { entityClick: "entityClick", entitySelect: "entitySelect", entityView: "entityView" }, ngImport: i0, template: `
|
|
11528
11614
|
<cide-lyt-shared-wrapper [shared_wrapper_setup_param]="{ sypg_page_code: 'org_structure' }">
|
|
11529
11615
|
|
|
11530
11616
|
<!-- Back Button using standard content projection -->
|
|
@@ -11552,7 +11638,7 @@ class CideCoreOrgStructureComponent {
|
|
|
11552
11638
|
</cide-lyt-shared-wrapper>
|
|
11553
11639
|
`, isInline: true, styles: [":host{height:100%;display:flex;flex-direction:column}.tw-overflow-y-auto::-webkit-scrollbar{width:6px}.tw-overflow-y-auto::-webkit-scrollbar-track{background:#f1f5f9;border-radius:3px}.tw-overflow-y-auto::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}.tw-overflow-y-auto::-webkit-scrollbar-thumb:hover{background:#94a3b8}.tw-transition-shadow{transition:box-shadow .2s ease-in-out}.tw-shadow-lg:hover{box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;transform:translateY(-2px);transition:all .2s ease-in-out}.tw-bg-purple-300,.tw-bg-purple-400{transition:all .3s ease-in-out}.connection-line-compact{display:block;overflow:visible}.connection-line-compact path,.connection-line-compact line{stroke-linecap:round;stroke-linejoin:round;transition:stroke-width .2s ease}.connection-line-compact:hover path,.connection-line-compact:hover line{stroke-width:3}.connection-line-compact circle{transition:all .2s ease}.connection-line-compact circle:hover{filter:drop-shadow(0 2px 4px rgba(147,51,234,.4))}.level-0{border-color:#fb923c!important}.level-1{border-color:#60a5fa!important}.level-2{border-color:#a78bfa!important}.level-3{border-color:#4ade80!important}.level-4{border-color:#818cf8!important}.level-5{border-color:#f472b6!important}@media (max-width: 1200px){.tw-max-w-7xl{max-width:100%}.tw-gap-6{gap:1rem}.tw-min-w-64{min-width:14rem}.tw-max-w-72{max-width:16rem}}@media (max-width: 768px){.tw-min-w-64{min-width:12rem}.tw-max-w-72{max-width:14rem}.tw-max-w-7xl{max-width:100%}.tw-gap-6{gap:.75rem}.tw-p-4{padding:.75rem}.tw-mb-4{margin-bottom:.75rem}.tw-space-x-3{gap:.5rem}.tw-space-x-2{gap:.375rem}.tw-w-12{width:2.5rem}.tw-h-12{height:2.5rem}}@media (max-width: 480px){.tw-min-w-72{min-width:12rem}.tw-max-w-80{max-width:14rem}.tw-p-4{padding:.5rem}.tw-space-x-3{gap:.375rem}.tw-space-x-2{gap:.25rem}.tw-mb-3{margin-bottom:.5rem}.tw-w-12{width:2rem}.tw-h-12{height:2rem}.tw-w-8{width:1.5rem}.tw-h-8{height:1.5rem}}@media print{.tw-bg-gray-50{background:#fff!important}.tw-shadow-lg{box-shadow:none!important;border:1px solid #e5e7eb!important}.tw-bg-purple-300{background:#6b7280!important}.tw-border-purple-300{border-color:#6b7280!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: CideSharedOrgStructureComponent, selector: "cide-shared-org-structure", inputs: ["allowSwitching", "showActions", "mode"], outputs: ["entityClick", "entitySelect", "entityView"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
|
|
11554
11640
|
}
|
|
11555
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
11641
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreOrgStructureComponent, decorators: [{
|
|
11556
11642
|
type: Component,
|
|
11557
11643
|
args: [{ selector: 'cide-core-org-structure', imports: [
|
|
11558
11644
|
CommonModule,
|
|
@@ -11586,7 +11672,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
11586
11672
|
</cide-shared-org-structure>
|
|
11587
11673
|
</cide-lyt-shared-wrapper>
|
|
11588
11674
|
`, styles: [":host{height:100%;display:flex;flex-direction:column}.tw-overflow-y-auto::-webkit-scrollbar{width:6px}.tw-overflow-y-auto::-webkit-scrollbar-track{background:#f1f5f9;border-radius:3px}.tw-overflow-y-auto::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}.tw-overflow-y-auto::-webkit-scrollbar-thumb:hover{background:#94a3b8}.tw-transition-shadow{transition:box-shadow .2s ease-in-out}.tw-shadow-lg:hover{box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;transform:translateY(-2px);transition:all .2s ease-in-out}.tw-bg-purple-300,.tw-bg-purple-400{transition:all .3s ease-in-out}.connection-line-compact{display:block;overflow:visible}.connection-line-compact path,.connection-line-compact line{stroke-linecap:round;stroke-linejoin:round;transition:stroke-width .2s ease}.connection-line-compact:hover path,.connection-line-compact:hover line{stroke-width:3}.connection-line-compact circle{transition:all .2s ease}.connection-line-compact circle:hover{filter:drop-shadow(0 2px 4px rgba(147,51,234,.4))}.level-0{border-color:#fb923c!important}.level-1{border-color:#60a5fa!important}.level-2{border-color:#a78bfa!important}.level-3{border-color:#4ade80!important}.level-4{border-color:#818cf8!important}.level-5{border-color:#f472b6!important}@media (max-width: 1200px){.tw-max-w-7xl{max-width:100%}.tw-gap-6{gap:1rem}.tw-min-w-64{min-width:14rem}.tw-max-w-72{max-width:16rem}}@media (max-width: 768px){.tw-min-w-64{min-width:12rem}.tw-max-w-72{max-width:14rem}.tw-max-w-7xl{max-width:100%}.tw-gap-6{gap:.75rem}.tw-p-4{padding:.75rem}.tw-mb-4{margin-bottom:.75rem}.tw-space-x-3{gap:.5rem}.tw-space-x-2{gap:.375rem}.tw-w-12{width:2.5rem}.tw-h-12{height:2.5rem}}@media (max-width: 480px){.tw-min-w-72{min-width:12rem}.tw-max-w-80{max-width:14rem}.tw-p-4{padding:.5rem}.tw-space-x-3{gap:.375rem}.tw-space-x-2{gap:.25rem}.tw-mb-3{margin-bottom:.5rem}.tw-w-12{width:2rem}.tw-h-12{height:2rem}.tw-w-8{width:1.5rem}.tw-h-8{height:1.5rem}}@media print{.tw-bg-gray-50{background:#fff!important}.tw-shadow-lg{box-shadow:none!important;border:1px solid #e5e7eb!important}.tw-bg-purple-300{background:#6b7280!important}.tw-border-purple-300{border-color:#6b7280!important}}\n"] }]
|
|
11589
|
-
}] });
|
|
11675
|
+
}], propDecorators: { allowSwitching: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowSwitching", required: false }] }], showActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "showActions", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], entityClick: [{ type: i0.Output, args: ["entityClick"] }], entitySelect: [{ type: i0.Output, args: ["entitySelect"] }], entityView: [{ type: i0.Output, args: ["entityView"] }] } });
|
|
11590
11676
|
|
|
11591
11677
|
var orgStructure_component = /*#__PURE__*/Object.freeze({
|
|
11592
11678
|
__proto__: null,
|
|
@@ -15291,10 +15377,10 @@ class CideCoreUserCreateComponent {
|
|
|
15291
15377
|
throw error;
|
|
15292
15378
|
}
|
|
15293
15379
|
}
|
|
15294
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
15295
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideCoreUserCreateComponent, isStandalone: true, selector: "cide-core-user-create", viewQueries: [{ propertyName: "menuDetailsRendererTemplate", first: true, predicate: ["menuDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "permissionsCheckboxRendererTemplate", first: true, predicate: ["permissionsCheckboxRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "menuTypeRendererTemplate", first: true, predicate: ["menuTypeRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "menuRightsPermissionsRendererTemplate", first: true, predicate: ["menuRightsPermissionsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "permissionsRendererTemplate", first: true, predicate: ["permissionsRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- \r\n ENTERPRISE USER MASTER FORM\r\n \r\n Enterprise-Level Styling with Tailwind CSS\r\n Features: Responsive grids, proper typography, enhanced user experience\r\n-->\r\n\r\n<div class=\"tw-w-full tw-h-full tw-p-1 tw-pt-2\">\r\n <!-- Toast Notifications -->\r\n <cide-ele-toast-notification></cide-ele-toast-notification>\r\n \r\n <form class=\"tw-max-w-7xl tw-mx-auto tw-bg-transparent\" [formGroup]=\"userMasterForm\" [class.tw-opacity-60]=\"loading()\"\r\n (ngSubmit)=\"onSubmit()\">\r\n\r\n\r\n <!-- User Context Header -->\r\n <div\r\n class=\"tw-bg-gradient-to-r tw-from-blue-50 tw-to-indigo-50 tw-border tw-border-blue-200 tw-rounded-md tw-p-1 tw-mb-2 tw-shadow-sm\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-flex-wrap tw-gap-2\">\r\n <!-- User Basic Info Display -->\r\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-flex-wrap\">\r\n <!-- Profile Photo Preview -->\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <div\r\n class=\"tw-w-8 tw-h-8 tw-rounded-full tw-bg-blue-100 tw-border tw-border-blue-200 tw-flex tw-items-center tw-justify-center tw-overflow-hidden\">\r\n @if (userMasterForm.get('user_photo_id_cyfm')?.value) {\r\n <img cideEleFileImage [fileId]=\"userMasterForm.get('user_photo_id_cyfm')?.value\"\r\n [altText]=\"'Profile Photo'\" class=\"tw-w-full tw-h-full tw-object-cover\">\r\n } @else {\r\n <cide-ele-icon name=\"person\" class=\"tw-w-5 tw-h-5 tw-text-blue-600\">\r\n </cide-ele-icon>\r\n }\r\n </div>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-xs tw-font-medium tw-text-blue-900\">\r\n {{ getUserFullName() || 'New User' }}\r\n </span>\r\n <span class=\"tw-text-xs tw-text-blue-600\">\r\n {{ getUserUsername() || 'Username not set' }}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Contact Info -->\r\n <div class=\"tw-flex tw-items-center tw-gap-3\">\r\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-text-xs tw-text-gray-700\">\r\n <cide-ele-icon variant=\"gray\" size=\"xs\">email</cide-ele-icon>\r\n <span>{{ getUserEmail() || 'Email not set' }}</span>\r\n </div>\r\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-text-xs tw-text-gray-700\">\r\n <cide-ele-icon variant=\"gray\" size=\"xs\">phone</cide-ele-icon>\r\n <span>{{ getUserMobile() || 'Mobile not set' }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Active Status -->\r\n <div class=\"tw-flex tw-items-center tw-gap-1\">\r\n @if (getUserActiveStatus()) {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-700\">\r\n <cide-ele-icon variant=\"green\" size=\"xs\" class=\"tw-mr-1\">check_circle</cide-ele-icon>\r\n Active\r\n </span>\r\n } @else {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded tw-text-xs tw-font-medium tw-bg-red-100 tw-text-red-700\">\r\n <cide-ele-icon variant=\"red\" size=\"xs\" class=\"tw-mr-1\">cancel</cide-ele-icon>\r\n Inactive\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Entity Info -->\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n @if (hasDefaultEntity()) {\r\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-text-xs tw-text-blue-700\">\r\n <cide-ele-icon variant=\"blue\" size=\"xs\">business</cide-ele-icon>\r\n <span class=\"tw-font-medium\">{{ getDefaultEntityName() }}</span>\r\n </div>\r\n } @else {\r\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-text-xs tw-text-gray-500\">\r\n <cide-ele-icon variant=\"gray\" size=\"xs\">business</cide-ele-icon>\r\n <span class=\"tw-italic\">No entity</span>\r\n </div>\r\n }\r\n\r\n <span class=\"tw-text-xs tw-text-gray-600 tw-px-2 tw-py-1 tw-bg-gray-100 tw-rounded\">\r\n {{ getEntityMappingCount() }} mapping(s)\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Tab Navigation -->\r\n <div class=\"tw-p-0 tw-mb-2 tw-border-b tw-border-gray-200\">\r\n <cide-ele-tab [tabs]=\"userTabs()\" [activeTabId]=\"activeTab()\" size=\"md\" variant=\"default\"\r\n (tabChange)=\"onTabChange($event)\">\r\n </cide-ele-tab>\r\n </div>\r\n\r\n <!-- Tab Content -->\r\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\r\n @switch (activeTab()) {\r\n\r\n @case ('basic') {\r\n <!-- User Basic Information Section -->\r\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\r\n\r\n <!-- Top Section: Form Fields on Left, Profile Photo on Right -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-[1fr_200px] tw-gap-4 tw-mb-4\">\r\n <!-- Left Side: Form Fields -->\r\n <div class=\"tw-space-y-4\">\r\n <!-- Name Fields - All in One Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-4\">\r\n <cide-ele-input id=\"user_firstname\" label=\"First Name *\" formControlName=\"user_firstname\"\r\n placeholder=\"Enter first name\" [maxlength]=\"20\" size=\"md\" (ngModelChange)=\"onNameFieldChange()\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_middlename\" label=\"Middle Name\" formControlName=\"user_middlename\"\r\n placeholder=\"Enter middle name\" [maxlength]=\"20\" size=\"md\" (ngModelChange)=\"onNameFieldChange()\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_lastname\" label=\"Last Name *\" formControlName=\"user_lastname\"\r\n placeholder=\"Enter last name\" [maxlength]=\"20\" size=\"md\" (ngModelChange)=\"onNameFieldChange()\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_fullname\" label=\"Full Name * (Auto-generated)\" formControlName=\"user_fullname\"\r\n placeholder=\"Auto-generated from name fields or enter manually\" [maxlength]=\"62\" size=\"md\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Contact Information - All in One Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-4\">\r\n <cide-ele-input id=\"user_username\" label=\"Username *\" formControlName=\"user_username\"\r\n placeholder=\"Enter unique username\" [maxlength]=\"20\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_emailid\" label=\"Email ID *\" formControlName=\"user_emailid\" type=\"email\"\r\n placeholder=\"Enter valid email address\" [maxlength]=\"320\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_mobileno\" label=\"Mobile Number *\" formControlName=\"user_mobileno\" type=\"tel\"\r\n placeholder=\"Enter mobile number\" [maxlength]=\"15\" size=\"md\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Side: Profile Photo Upload -->\r\n <div class=\"tw-flex tw-items-start tw-justify-center tw-p-0\">\r\n <cide-ele-file-input id=\"user_photo_id_cyfm\" formControlName=\"user_photo_id_cyfm\" accept=\"image/*\"\r\n [showPreview]=\"true\" [previewBoxMode]=\"true\" [showFileName]=\"false\" previewWidth=\"180px\"\r\n previewHeight=\"120px\" placeholderText=\"Upload Photo\" placeholderIcon=\"cloud_upload\" [autoUpload]=\"true\"\r\n [uploadData]=\"getProfilePhotoUploadData()\" (uploadSuccess)=\"onProfilePhotoUploadSuccess($event)\"\r\n (uploadError)=\"onProfilePhotoUploadError($event)\"\r\n (uploadProgressChange)=\"onProfilePhotoUploadProgress($event)\">\r\n </cide-ele-file-input>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <!-- Status Control -->\r\n <div class=\"tw-grid tw-grid-cols-1 tw-mb-2\">\r\n <div class=\"tw-p-2 tw-bg-blue-50 tw-border tw-border-blue-100 tw-rounded-lg\">\r\n <label\r\n class=\"tw-flex tw-flex-col tw-cursor-pointer tw-py-2 tw-bg-transparent tw-border-none tw-rounded-none tw-transition-all tw-duration-200 hover:tw-bg-blue-75\">\r\n <cide-ele-input type=\"checkbox\" label=\"Active User Status\" formControlName=\"user_isactive\"\r\n class=\"tw-h-5 tw-accent-blue-500 tw-rounded tw-mb-1\" />\r\n <span class=\"tw-font-semibold tw-text-gray-700 tw-text-base\"></span>\r\n <span class=\"tw-text-sm tw-text-gray-600 tw-mt-1 tw-leading-relaxed\">Enable this user account for system\r\n access and operations</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('auth') {\r\n <!-- Authentication Section -->\r\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\r\n <!-- Password Fields -->\r\n @if (shouldShowPasswordFields()) {\r\n <div class=\"tw-mb-4\">\r\n <!-- Password Fields Header for Edit Mode -->\r\n @if (isEditMode()) {\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-800\">Update Password</h6>\r\n <button type=\"button\"\r\n class=\"tw-px-3 tw-py-1 tw-bg-gray-100 tw-text-gray-600 tw-border tw-border-gray-300 tw-rounded-md tw-text-xs tw-font-medium hover:tw-bg-gray-200 tw-transition-colors\"\r\n (click)=\"cancelPasswordUpdate()\">\r\n Cancel Password Update\r\n </button>\r\n </div>\r\n }\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 md:tw-grid-cols-1 tw-gap-6\">\r\n <cide-ele-input id=\"user_password\" [label]=\"getPasswordFieldLabel()\" formControlName=\"user_password\"\r\n type=\"password\" placeholder=\"Enter secure password (min 8 characters)\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_confirm_password\" [label]=\"getPasswordConfirmLabel()\"\r\n formControlName=\"user_confirm_password\" type=\"password\" placeholder=\"Confirm your password\" size=\"md\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Password Update Option for Edit Mode -->\r\n @if (isEditMode() && !shouldShowPasswordFields()) {\r\n <div class=\"tw-mb-4\">\r\n <div class=\"tw-p-2 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-lg\">\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-blue-800 tw-mb-2\">Password Update</h6>\r\n <p class=\"tw-text-sm tw-text-blue-600 tw-mb-3\">Current password will be kept. Click below to change\r\n password.</p>\r\n\r\n @if (hasPasswordInput()) {\r\n <div\r\n class=\"tw-mb-3 tw-p-2 tw-bg-yellow-50 tw-border tw-border-yellow-200 tw-rounded tw-text-sm tw-text-yellow-700\">\r\n <cide-ele-icon variant=\"yellow\" size=\"xs\" class=\"tw-mr-1\">warning</cide-ele-icon>\r\n Password fields contain text. Click \"Change Password\" to manage existing input.\r\n </div>\r\n }\r\n\r\n <button type=\"button\"\r\n class=\"tw-px-4 tw-py-2 tw-bg-blue-100 tw-text-blue-700 tw-border tw-border-blue-300 tw-rounded-md tw-text-sm tw-font-medium hover:tw-bg-blue-200 tw-transition-colors\"\r\n (click)=\"triggerPasswordUpdate()\">\r\n @if (hasPasswordInput()) {\r\n Manage Password Fields\r\n } @else {\r\n Change Password\r\n }\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Password Options -->\r\n <div class=\"tw-grid tw-grid-cols-1 tw-gap-4 tw-mb-4\">\r\n <div class=\"tw-p-2 tw-bg-yellow-50 tw-border tw-border-yellow-100 tw-rounded-lg\">\r\n <label\r\n class=\"tw-flex tw-flex-col tw-gap-2 tw-cursor-pointer tw-py-2 tw-bg-transparent tw-border-none tw-rounded-none tw-transition-all tw-duration-200\">\r\n <cide-ele-input type=\"checkbox\" label=\"Force Password Change on Login\"\r\n formControlName=\"user_passwordchangeonlogin\" class=\"tw-h-5 tw-accent-yellow-500 tw-rounded tw-mb-1\" />\r\n <span class=\"tw-text-sm tw-text-gray-600 tw-mt-1 tw-leading-relaxed\">User will be required to change\r\n password on next login</span>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n }\r\n\r\n @case ('roles') {\r\n <!-- Entity, Roles & Permissions Mapping Section -->\r\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\r\n\r\n\r\n\r\n <!-- Important Note -->\r\n <div class=\"tw-bg-amber-50 tw-border tw-border-amber-200 tw-rounded-lg tw-p-2 tw-mb-4\">\r\n <div class=\"tw-flex tw-items-start tw-gap-3\">\r\n <cide-ele-icon variant=\"amber\" size=\"lg\">info</cide-ele-icon>\r\n <div class=\"tw-flex-1\">\r\n <h4 class=\"tw-text-sm tw-font-semibold tw-text-amber-800 tw-mb-1\">Entity-Role Based Access</h4>\r\n <p class=\"tw-text-sm tw-text-amber-700 tw-mb-2\">User access is completely managed through entity-role\r\n mappings below. At least one entity mapping is required for user access.</p>\r\n @if (hasDefaultEntity()) {\r\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-mt-2 tw-p-2 tw-bg-amber-100 tw-rounded\">\r\n <cide-ele-icon variant=\"amber\" size=\"sm\">star</cide-ele-icon>\r\n <span class=\"tw-text-sm tw-text-amber-800\">\r\n <strong>Default Entity:</strong> {{ getDefaultEntityName() }}\r\n </span>\r\n </div>\r\n } @else {\r\n <div class=\"tw-text-sm tw-text-amber-600 tw-mt-2 tw-italic\">\r\n \u26A0\uFE0F No default entity selected. Please set one entity as default.\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Entity-Role Mapping Section -->\r\n <div class=\"tw-flex tw-text-center tw-justify-between tw-items-center tw-mb-4\">\r\n <div>\r\n <h4 class=\"tw-text-sm tw-text-left tw-font-semibold tw-text-blue-900 tw-mb-1\">Entity-Role Mapping</h4>\r\n <p class=\"tw-text-sm tw-text-blue-700\">Map user to entities with specific roles and permissions</p>\r\n </div>\r\n <div class=\"tw-flex tw-flex-col tw-items-end\">\r\n <button cideEleButton variant=\"primary\" size=\"md\" type=\"button\" (click)=\"addEntityMapping()\"\r\n leftIcon=\"add\" [disabled]=\"isAllEntitiesMapped()\">\r\n Add Entity Mapping\r\n </button>\r\n\r\n @if (isAllEntitiesMapped()) {\r\n <div class=\"tw-mt-2 tw-p-2 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-md tw-max-w-xs\">\r\n <p class=\"tw-text-xs tw-text-blue-700\">\r\n <cide-ele-icon variant=\"info\" size=\"xs\" class=\"tw-mr-1\">info</cide-ele-icon>\r\n All available entities are already mapped.\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div formArrayName=\"core_entity_mapping\">\r\n @for (mapping of entityMappings(); track $index; let i = $index) {\r\n <div class=\"tw-bg-white tw-border tw-border-blue-200 tw-rounded-xl tw-mb-6 tw-overflow-hidden tw-shadow-sm\"\r\n [formGroupName]=\"i\">\r\n <div\r\n class=\"tw-bg-gradient-to-r tw-from-blue-50 tw-to-blue-100 tw-px-6 tw-py-3 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-blue-200\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <h5 class=\"tw-m-0 tw-text-blue-800 tw-text-sm tw-font-semibold\">Entity Mapping {{ i + 1 }}</h5>\r\n @if (mapping.syenm_isdefault) {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\r\n <cide-ele-icon variant=\"green\" size=\"xs\" class=\"tw-mr-1\">star</cide-ele-icon>\r\n Default\r\n </span>\r\n }\r\n </div>\r\n @if (!mapping?._id) {\r\n <button cideEleButton variant=\"danger\" size=\"sm\" type=\"button\" (click)=\"removeEntityMapping(i)\"\r\n leftIcon=\"delete\">\r\n Remove\r\n </button>\r\n }\r\n </div>\r\n\r\n <div>\r\n <!-- Entity and Role Selection -->\r\n <div class=\"tw-grid tw-px-3 tw-py-1 tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4 tw-mb-4\">\r\n <div>\r\n <cide-ele-select label=\"Entity *\" [options]=\"getFilteredEntityOptions(i)\"\r\n formControlName=\"syenm_entity_id_syen\" valueKey=\"_id\" labelKey=\"syen_name\"\r\n placeholder=\"Select entity\" size=\"md\" (change)=\"onEntityChange(i, $event)\">\r\n </cide-ele-select>\r\n\r\n @if (isAllEntitiesSelected(i)) {\r\n <div class=\"tw-mt-2 tw-p-2 tw-bg-yellow-50 tw-border tw-border-yellow-200 tw-rounded-md\">\r\n <p class=\"tw-text-xs tw-text-yellow-700\">\r\n <cide-ele-icon variant=\"warning\" size=\"xs\" class=\"tw-mr-1\">info</cide-ele-icon>\r\n All entities are already mapped. Remove another mapping to add this one.\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n <cide-ele-select label=\"Role for this Entity\" [options]=\"getRoleOptionsForEntity(i)\"\r\n formControlName=\"syenm_role_id_syusrol\" valueKey=\"_id\" labelKey=\"syusrol_role_name\"\r\n placeholder=\"Select role for this entity\" size=\"md\" (change)=\"onRoleChange(i, $event)\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n\r\n <!-- Entity-Specific Details and Active Period - All in One Row -->\r\n <div class=\"tw-grid tw-px-3 tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-4 tw-mb-4\">\r\n <cide-ele-select label=\"Department for this Entity\" [options]=\"getDepartmentOptionsForEntity(i)\"\r\n formControlName=\"syenm_department_id_sydept\" (change)=\"onDepartmentChange($event)\" valueKey=\"_id\"\r\n labelKey=\"sydept_name\" placeholder=\"Select department\" size=\"md\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-select label=\"Designation for this Entity\" [options]=\"getDesignationOptionsForEntity(i)\"\r\n valueKey=\"_id\" labelKey=\"sydsg_name\" formControlName=\"syenm_designation_id_sydsg\"\r\n placeholder=\"Select designation\" size=\"md\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Active From *\" [id]=\"'syenm_activefrom['+i+']'\"\r\n formControlName=\"syenm_activefrom\" type=\"date\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Active Until\" [id]=\"'syenm_activeupto['+i+']'\"\r\n formControlName=\"syenm_activeupto\" type=\"date\" size=\"md\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Mapping Settings -->\r\n <div class=\"tw-grid tw-px-3 tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-4 tw-mb-4\">\r\n <div class=\"tw-p-2 tw-bg-green-50 tw-border tw-border-green-200 tw-rounded-lg\">\r\n <cide-ele-input type=\"checkbox\" label=\"Default Entity\" formControlName=\"syenm_isdefault\"\r\n (change)=\"onDefaultEntityChange(i, $event)\" class=\"tw-h-5 tw-accent-green-500\" />\r\n <span class=\"tw-text-xs tw-text-green-600 tw-block tw-mt-1\">Set as user's default entity (only one\r\n allowed)</span>\r\n </div>\r\n\r\n <div class=\"tw-p-2 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-lg\">\r\n <cide-ele-input type=\"checkbox\" label=\"Active Mapping\" formControlName=\"syenm_isactive\"\r\n class=\"tw-h-5 tw-accent-blue-500\" />\r\n <span class=\"tw-text-xs tw-text-blue-600 tw-block tw-mt-1\">Enable this entity mapping</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Menu Rights Grid for this Entity-Role -->\r\n <div class=\"tw-border-t tw-border-gray-200\">\r\n\r\n @if (getMenuRightsForMapping(i).length > 0) {\r\n <!-- Menu Rights Tree Grid -->\r\n\r\n <cide-ele-data-grid [config]=\"getMenuRightsGridConfig(i)\"\r\n [templateRenderers]=\"getMenuRightsTemplateRenderers(i)\"\r\n (gridEvent)=\"onMenuRightsGridEvent($event, i)\" class=\"tw-h-96 tw-w-full\">\r\n </cide-ele-data-grid>\r\n\r\n } @else {\r\n <div class=\"tw-text-center tw-py-8 tw-bg-gray-50 tw-border tw-border-gray-200 tw-rounded-lg\">\r\n <div class=\"tw-text-gray-400 tw-mb-3\">\r\n <cide-ele-icon variant=\"gray\" size=\"lg\">menu</cide-ele-icon>\r\n </div>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-600 tw-mb-2\">No Menu Rights Available</h6>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-mb-3 tw-text-center\">Select both entity and role to\r\n automatically load\r\n menu rights for this mapping.</p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (entityMappings().length === 0) {\r\n <div class=\"tw-text-center tw-py-8 tw-bg-white tw-border tw-border-blue-200 tw-rounded-lg\">\r\n <div class=\"tw-text-blue-400 tw-mb-3\">\r\n <cide-ele-icon variant=\"blue\" size=\"lg\">business</cide-ele-icon>\r\n </div>\r\n <h4 class=\"tw-text-sm tw-font-medium tw-text-blue-800 tw-mb-2\">No Entity Mappings</h4>\r\n <p class=\"tw-text-blue-600 tw-mb-4 tw-text-center\">Add entity mappings to assign specific roles and\r\n permissions for different entities.</p>\r\n <button class=\"tw-mx-auto\" cideEleButton variant=\"primary\" size=\"md\" type=\"button\"\r\n (click)=\"addEntityMapping()\" leftIcon=\"add\">\r\n Add First Entity Mapping\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @case ('addresses') {\r\n <!-- Contact Addresses Section -->\r\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\r\n <div class=\"tw-flex tw-justify-end\">\r\n <div class=\"tw-flex tw-justify-between tw-items-end tw-mb-2 tw-gap-4\">\r\n <button cideEleButton variant=\"primary\" size=\"md\" type=\"button\" (click)=\"addContactAddress()\"\r\n leftIcon=\"add\" [disabled]=\"!hasAddContactAddressRights()\">\r\n Add New Address\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div formArrayName=\"core_user_contact_addresses\">\r\n @for (address of contactAddresses(); track $index; let i = $index) {\r\n <div [formGroupName]=\"i\"\r\n class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-xl tw-mb-8 tw-overflow-hidden tw-transition-all tw-duration-300 hover:tw-shadow-lg tw-shadow-sm\">\r\n <div\r\n class=\"tw-bg-gradient-to-r tw-from-gray-50 tw-to-gray-100 tw-px-4 tw-py-2 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-gray-200\">\r\n <!-- Use address type as header instead of generic \"Address X\" -->\r\n <h4 class=\"tw-m-0 tw-text-gray-700 tw-text-sm tw-font-semibold tw-tracking-tight\">\r\n {{ getAddressTypeLabel(i) || ('Address ' + (i + 1)) }}\r\n </h4>\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n @if (isAddressOwner(i)) {\r\n <button cideEleButton variant=\"secondary\" size=\"xs\" type=\"button\" (click)=\"shareAddress(i)\"\r\n leftIcon=\"share\" class=\"tw-text-blue-600 hover:tw-text-blue-700\">\r\n Share\r\n </button>\r\n }\r\n @if (!address?._id) {\r\n <button cideEleButton variant=\"danger\" size=\"sm\" type=\"button\" (click)=\"removeContactAddress(i)\"\r\n leftIcon=\"delete\">\r\n Remove\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"tw-p-4\">\r\n <!-- Main Layout: Inputs on Left, Address Textarea on Right -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\r\n \r\n <!-- Left Side: Input Fields (3/4 width) -->\r\n <div class=\"lg:tw-col-span-3\">\r\n <!-- Row 1: Address Type, Contact Person -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3 tw-mb-3\">\r\n <cide-ele-select label=\"Address Type\" [options]=\"addressTypeOptions()\" id=\"sycad_address_type_id_sygms\"\r\n formControlName=\"sycad_address_type_id_sygms\" placeholder=\"Select type\" size=\"sm\"\r\n valueKey=\"_id\" labelKey=\"sygms_title\" (change)=\"onAddressTypeChange(i)\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Contact Person\" formControlName=\"sycad_contact_person_name\"\r\n placeholder=\"Enter contact person\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Row 2: Postal Code, City, State, Country -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-4 tw-gap-3\">\r\n <cide-ele-select label=\"Postal Code\" [options]=\"addressPostalCodes()[i] || []\"\r\n formControlName=\"sycad_contact_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\r\n [loading]=\"addressPostalCodesLoading()[i] || false\" (searchChange)=\"onPostalCodeSearch($event, i)\"\r\n (change)=\"onPostalCodeSelection($event, i)\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"City\" formControlName=\"sycad_contact_city_sypin\" placeholder=\"Enter city\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"State\" formControlName=\"sycad_contact_state_sypin\" placeholder=\"Enter state\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Country\" [options]=\"addressCountries()[i] || []\"\r\n formControlName=\"sycad_contact_country_syctr\" placeholder=\"Select country\" valueKey=\"_id\"\r\n labelKey=\"syctr_country_iso_name\" [searchable]=\"true\" (searchChange)=\"onCountrySearch($event, i)\"\r\n [loading]=\"addressCountriesLoading()[i] || false\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Side: Address Textarea (1/4 width, spans 2 rows) -->\r\n <div class=\"lg:tw-col-span-1 lg:tw-row-span-2 tw-flex tw-flex-col\">\r\n <cide-ele-textarea label=\"Complete Address\" formControlName=\"sycad_contact_address\"\r\n placeholder=\"Enter complete address with area, city, and landmarks\" [rows]=\"4\" size=\"sm\"\r\n class=\"tw-h-full\">\r\n </cide-ele-textarea>\r\n </div>\r\n </div>\r\n\r\n <!-- Contact Details: Primary Phone, Alt Phone, Fax, Primary Email in 4 columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\r\n <cide-ele-input label=\"Primary Phone\" formControlName=\"sycad_contact_phone\" type=\"tel\"\r\n placeholder=\"Primary phone\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Alternate Phone\" formControlName=\"sycad_contact_phone_alt\" type=\"tel\"\r\n placeholder=\"Alternate phone\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Fax Number\" formControlName=\"sycad_contact_fax\" placeholder=\"Fax number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Primary Email\" formControlName=\"sycad_contact_email\" type=\"email\"\r\n placeholder=\"Primary email\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Alternate Email in single row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3\">\r\n <cide-ele-input label=\"Alternate Email\" formControlName=\"sycad_contact_email_alt\" type=\"email\"\r\n placeholder=\"Alternate email address\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('documents') {\r\n <!-- Documents Section -->\r\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\r\n <div class=\"tw-flex tw-justify-end tw-items-end tw-mb-2 tw-gap-4\">\r\n <button cideEleButton variant=\"primary\" size=\"md\" type=\"button\" (click)=\"addDocument()\" leftIcon=\"add\" [disabled]=\"!hasAddDocumentRights()\">\r\n Add Document\r\n </button>\r\n </div>\r\n <div formArrayName=\"core_user_documents\">\r\n @for (doc of documents(); track $index; let i = $index) {\r\n <div [formGroupName]=\"i\"\r\n class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-xl tw-mb-8 tw-overflow-hidden tw-transition-all tw-duration-300 hover:tw-shadow-lg tw-shadow-sm\">\r\n <div\r\n class=\"tw-bg-gradient-to-r tw-from-gray-50 tw-to-gray-100 tw-px-4 tw-py-2 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-gray-200\">\r\n <h4 class=\"tw-m-0 tw-text-gray-700 tw-text-sm tw-font-semibold tw-tracking-tight\">\r\n {{ getDocumentTypeLabel(i) || ('Document ' + (i + 1)) }}\r\n </h4>\r\n <div class=\"tw-flex tw-gap-2\">\r\n @if (doc?._id) {\r\n <button cideEleButton variant=\"secondary\" size=\"sm\" type=\"button\" (click)=\"shareDocumentRights(i)\"\r\n leftIcon=\"share\">\r\n Share\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"tw-p-4\">\r\n <!-- Main Layout: Inputs on Left, File Upload on Right -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-3 tw-gap-4\">\r\n \r\n <!-- Left Side: Document Information (2/3 width) -->\r\n <div class=\"lg:tw-col-span-2\">\r\n <!-- Row 1: Document Type, Document Number, Name as per Document -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-3 tw-mb-3\">\r\n <cide-ele-select label=\"Document Type\" [options]=\"documentTypeOptions()\"\r\n formControlName=\"syusd_document_type_id_sygms\" placeholder=\"Select type\" size=\"sm\"\r\n valueKey=\"_id\" labelKey=\"sygms_title\" (change)=\"onDocumentTypeChange(i)\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Document Number\" formControlName=\"syusd_doc_number\"\r\n placeholder=\"Document number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Name as per Document\" formControlName=\"syusd_doc_name_as_per_doc\"\r\n placeholder=\"Name on document\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Row 2: Issue Date, Expiry Date, Photo Group -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-3 tw-mb-3\">\r\n <cide-ele-input label=\"Issue Date\" formControlName=\"syusd_doc_issue_date\"\r\n [id]=\"'syusd_doc_issue_date['+i+']'\" type=\"date\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Expiry Date\" formControlName=\"syusd_doc_expiry_date\"\r\n [id]=\"'syusd_doc_expiry_date['+i+']'\" type=\"date\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Row 3: Verification Status, KYC Status -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3\">\r\n <cide-ele-select label=\"Verification Status\" [options]=\"documentVerificationStatusOptions()\"\r\n formControlName=\"syusd_doc_verification_status_id_sygms\" placeholder=\"Select status\"\r\n size=\"sm\" valueKey=\"_id\" labelKey=\"sygms_title\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-select label=\"KYC Status\" [options]=\"documentKycStatusOptions()\"\r\n formControlName=\"syusd_doc_kyc_status_id_sygms\" placeholder=\"Select KYC status\" size=\"sm\"\r\n valueKey=\"_id\" labelKey=\"sygms_title\">\r\n </cide-ele-select>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Side: File Upload (1/3 width) -->\r\n <div class=\"lg:tw-col-span-1\">\r\n <div class=\"tw-bg-gray-50 tw-border tw-border-gray-200 tw-rounded-lg tw-p-3 tw-h-full\">\r\n \r\n <!-- File Upload Input -->\r\n <cide-ele-file-input\r\n [id]=\"'document-files-' + i\"\r\n [multiple]=\"true\"\r\n formControlName=\"syusd_photo_group_id_cyfm\"\r\n [accept]=\"'.pdf,.jpg,.jpeg,.png,.doc,.docx'\"\r\n [autoUpload]=\"true\"\r\n [uploadData]=\"getDocumentUploadData(i)\"\r\n (change)=\"onDocumentFilesSelected($event, i)\"\r\n (uploadSuccess)=\"onDocumentUploadSuccess($event, i)\"\r\n (uploadError)=\"onDocumentUploadError($event, i)\"\r\n (uploadProgressChange)=\"onDocumentUploadProgress($event, i)\"\r\n class=\"tw-mb-3\"\r\n size=\"sm\">\r\n </cide-ele-file-input>\r\n\r\n <!-- Upload Status -->\r\n <!-- Upload status is now handled by the file input component itself -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('family') {\r\n <!-- Family Details Section - Compact Design -->\r\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\r\n <div class=\"tw-flex tw-justify-end tw-items-end tw-mb-3 tw-gap-4\">\r\n <button cideEleButton variant=\"primary\" size=\"sm\" type=\"button\" (click)=\"addFamilyDetail()\" leftIcon=\"add\" [disabled]=\"!hasAddFamilyDetailRights()\">\r\n Add Family Member\r\n </button>\r\n </div>\r\n\r\n <div formArrayName=\"core_user_family_details\">\r\n @for (family of familyDetails(); track $index; let i = $index) {\r\n <div [formGroupName]=\"i\"\r\n class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-lg tw-mb-4 tw-overflow-hidden tw-transition-all tw-duration-200 hover:tw-shadow-md tw-shadow-sm\">\r\n \r\n <!-- Compact Header -->\r\n <div class=\"tw-bg-gray-50 tw-px-4 tw-py-2 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-gray-200\">\r\n <h4 class=\"tw-m-0 tw-text-gray-700 tw-text-sm tw-font-medium\">Family Member {{ i + 1 }}</h4>\r\n <div class=\"tw-flex tw-gap-2\">\r\n @if (family?._id) {\r\n <button cideEleButton variant=\"secondary\" size=\"xs\" type=\"button\" (click)=\"shareFamilyDetailRights(i)\"\r\n leftIcon=\"share\">\r\n Share\r\n </button>\r\n }\r\n @if (!family?._id) {\r\n <button cideEleButton variant=\"danger\" size=\"xs\" type=\"button\" (click)=\"removeFamilyDetail(i)\" leftIcon=\"delete\">\r\n Remove\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n \r\n <!-- Compact Form Content - 3 inputs per row -->\r\n <div class=\"tw-p-4\">\r\n <!-- Row 1: Name, User, and Combined Relationship/Active Status (33.33% each) -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-3 tw-mb-3\">\r\n <cide-ele-input label=\"Family Member Name\" formControlName=\"syfdl_family_member_name\"\r\n placeholder=\"Enter family member full name\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Family Member User\" [options]=\"userOptions(i)\"\r\n formControlName=\"syfdl_family_member_id_user\" placeholder=\"Select family member user\" size=\"sm\"\r\n valueKey=\"_id\" labelKey=\"user_fullname\" [searchable]=\"true\"\r\n [loading]=\"userSearchLoading()[i] || false\" (searchChange)=\"onUserSearchChange($event, i)\"\r\n (change)=\"onUserSelectionChange($event, i)\">\r\n </cide-ele-select>\r\n\r\n <!-- Combined Relationship and Active Status (33.33%) -->\r\n <div class=\"tw-flex tw-flex-row tw-gap-2 tw-items-end\">\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-select label=\"Relationship\" [options]=\"relationshipOptions()\"\r\n formControlName=\"syfdl_relationship_id_sygms\" placeholder=\"Select relationship\" size=\"sm\"\r\n valueKey=\"_id\" labelKey=\"sygms_title\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <div class=\"tw-flex tw-items-center tw-pt-1 tw-flex-shrink-0\">\r\n <cide-ele-input formControlName=\"syfdl_isactive\" type=\"checkbox\" label=\"Active\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Row 2: Blood Group, DOB, and Phone -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 xl:tw-grid-cols-3 tw-gap-3 tw-mb-3\">\r\n <cide-ele-select label=\"Blood Group\" [options]=\"bloodGroupOptions()\"\r\n formControlName=\"syfdl_blood_group_sygms\" placeholder=\"Select blood group\" size=\"sm\" valueKey=\"_id\"\r\n labelKey=\"sygms_title\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Date of Birth\" formControlName=\"syfdl_family_member_dob\" type=\"date\" size=\"sm\"\r\n [id]=\"'syfdl_family_member_dob['+i+']'\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Contact Phone\" formControlName=\"syfdl_contact_phone\" type=\"tel\"\r\n placeholder=\"Enter contact phone\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Row 3: Email, Email ID, and Contact Number -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 xl:tw-grid-cols-3 tw-gap-3 tw-mb-3\">\r\n <cide-ele-input label=\"Contact Email\" formControlName=\"syfdl_contact_email\" type=\"email\"\r\n placeholder=\"Enter contact email\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Contact Email ID\" formControlName=\"syfdl_contact_email_id\" type=\"email\"\r\n placeholder=\"Enter contact email ID\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Contact Number\" formControlName=\"syfdl_contact_number\" type=\"tel\"\r\n placeholder=\"Enter contact number\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div\r\n class=\"tw-flex tw-justify-end tw-gap-4 tw-py-2 tw-bg-white tw-border-t tw-border-gray-200 tw-sticky tw-bottom-0 tw-z-10\">\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\r\n [disabled]=\"loading()\">\r\n Reset Form\r\n </button>\r\n\r\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || userMasterForm.invalid\"\r\n [loading]=\"loading()\" leftIcon=\"save\">\r\n Save User Master\r\n </button>\r\n </div>\r\n </form>\r\n</div>\r\n\r\n<!-- Template Renderers for Role Permissions Grid -->\r\n<ng-template #menuDetailsRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-min-w-0\">\r\n <!-- Menu Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n @if (row.syme_type === 'module') {\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">folder</cide-ele-icon>\r\n } @else if (row.syme_type === 'section') {\r\n <cide-ele-icon class=\"tw-text-green-600 tw-w-4 tw-h-4\">folder_open</cide-ele-icon>\r\n } @else if (row.syme_type === 'menu') {\r\n <cide-ele-icon class=\"tw-text-purple-600 tw-w-4 tw-h-4\">menu</cide-ele-icon>\r\n } @else {\r\n <cide-ele-icon class=\"tw-text-gray-600 tw-w-4 tw-h-4\">description</cide-ele-icon>\r\n }\r\n </div>\r\n\r\n <!-- Menu Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <div class=\"tw-text-xs tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"row.syme_title\">\r\n {{ row.syme_title || row.menu?.syme_title || row.menu?.syme_menu_name || 'Untitled' }}\r\n </div>\r\n <!-- Green pill indicator for parent menus with child permissions -->\r\n @if (row.syme_type === 'module' || row.syme_type === 'section') {\r\n @if (hasChildMenusWithPermissions(row._id)) {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800 tw-whitespace-nowrap\">\r\n Assigned\r\n </span>\r\n }\r\n }\r\n </div>\r\n @if (row.permission?.sygms_name) {\r\n <div class=\"tw-text-xs tw-text-blue-500 tw-truncate\" [title]=\"row.permission?.sygms_name\">\r\n {{ row.permission?.sygms_name }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Menu Type Renderer Template -->\r\n<ng-template #menuTypeRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-justify-center\">\r\n @if (row.syme_type === 'module') {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800\">\r\n Module\r\n </span>\r\n } @else if (row.syme_type === 'section') {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\r\n Section\r\n </span>\r\n } @else if (row.syme_type === 'menu') {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-purple-100 tw-text-purple-800\">\r\n Menu\r\n </span>\r\n } @else {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-gray-100 tw-text-gray-800\">\r\n {{ row.syme_type || 'Unknown' }}\r\n </span>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Permissions Checkbox Renderer Template -->\r\n<ng-template #permissionsCheckboxRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-flex-wrap tw-gap-2 tw-max-w-full\">\r\n @if (row.syme_type === 'menu' && row?.syme_permissions_id_sygms && row?.syme_permissions_id_sygms.length > 0) {\r\n @for (permissionId of row?.syme_permissions_id_sygms || []; track permissionId) {\r\n <div class=\"tw-flex tw-items-center tw-space-x-1\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-1\">\r\n <input type=\"checkbox\" [checked]=\"isPermissionSelected(row._id, permissionId)\" [disabled]=\"true\"\r\n class=\"tw-h-4 tw-w-4 tw-text-blue-600 tw-bg-gray-100 tw-border-gray-300 tw-rounded focus:tw-ring-blue-500\">\r\n <label class=\"tw-text-xs tw-text-gray-700\">\r\n {{ getPermissionById(permissionId)?.sygms_title || 'Unknown' }}\r\n </label>\r\n </div>\r\n </div>\r\n }\r\n } @else {\r\n <!-- Show green checkmark for parent menus with child permissions -->\r\n @if (row.syme_type === 'module' || row.syme_type === 'section' || row.syme_type === 'title') {\r\n @if (hasChildMenusWithPermissions(row._id)) {\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-w-6 tw-h-6 tw-bg-green-100 tw-rounded-full\">\r\n <cide-ele-icon class=\"tw-text-green-600\" size=\"xs\">\r\n check\r\n </cide-ele-icon>\r\n </div>\r\n } @else {\r\n <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\r\n }\r\n } @else {\r\n <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\r\n }\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Menu Rights Permissions Renderer Template -->\r\n<ng-template #menuRightsPermissionsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-flex-wrap tw-gap-2 tw-max-w-full\">\r\n <!-- Role Rights Display -->\r\n @if (row.role_rights && row.role_rights.length > 0) {\r\n <div class=\"tw-mb-2\">\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-mb-1\">Role Rights:</div>\r\n <div class=\"tw-flex tw-flex-wrap tw-gap-1\">\r\n @for (right of row.role_rights; track $index) {\r\n <span class=\"tw-inline-block tw-px-2 tw-py-1 tw-text-xs tw-bg-blue-100 tw-text-blue-800 tw-rounded\">\r\n {{ right }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n\r\n <!-- Exception Indicator -->\r\n @if (row.hasException) {\r\n <div class=\"tw-mt-2\">\r\n <span class=\"tw-inline-block tw-px-2 tw-py-1 tw-text-xs tw-bg-yellow-100 tw-text-yellow-800 tw-rounded\">\r\n Override\r\n </span>\r\n </div>\r\n } @else {\r\n <div class=\"tw-mt-2\">\r\n <span class=\"tw-text-xs tw-text-gray-400\">Default</span>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Permissions Renderer Template -->\r\n<ng-template #permissionsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-flex-wrap tw-gap-2 tw-max-w-full\">\r\n @if (row._permissionValues && Object.keys(row._permissionValues).length > 0) {\r\n @for (permissionId of Object.keys(row._permissionValues); track permissionId) {\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-input type=\"checkbox\" [ngModel]=\"row._permissionValues[permissionId].checked\"\r\n (ngModelChange)=\"onPermissionChangeSafe($event, row, permissionId)\"\r\n [id]=\"'permission-' + row._id + '-' + permissionId\" class=\"tw-h-4 tw-w-4\">\r\n </cide-ele-input>\r\n <label [for]=\"'permission-' + row._id + '-' + permissionId\" \r\n class=\"tw-text-xs tw-cursor-pointer\"\r\n [ngClass]=\"{\r\n 'tw-text-gray-700': row._permissionValues[permissionId].modified === row._permissionValues[permissionId].actual,\r\n 'tw-text-blue-600 tw-font-semibold': row._permissionValues[permissionId].modified !== row._permissionValues[permissionId].actual\r\n }\">\r\n {{ row._permissionValues[permissionId].permission?.sygms_title }}\r\n @if (row._permissionValues[permissionId].modified !== row._permissionValues[permissionId].actual) {\r\n <span class=\"tw-text-xs tw-text-orange-500 tw-ml-1\" title=\"Modified from role permission\">\r\n ({{ row._permissionValues[permissionId].actual ? '\u2713' : '\u2717' }})\r\n </span>\r\n }\r\n </label>\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-gray-400 tw-animate-spin\" size=\"xs\">refresh</cide-ele-icon>\r\n <span class=\"tw-text-xs tw-text-gray-400\">Loading permissions...</span>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1$2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey"], outputs: ["ngModelChange", "change", "searchChange"] }, { 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: 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: CideEleTabComponent, selector: "cide-ele-tab", inputs: ["tabs", "activeTabId", "size", "variant", "fullWidth", "disabled"], outputs: ["tabChange"] }, { kind: "component", type: CideEleFileInputComponent, selector: "cide-ele-file-input", inputs: ["label", "accept", "multiple", "disabled", "required", "helperText", "errorText", "showPreview", "previewWidth", "previewHeight", "previewBoxMode", "showFileName", "placeholderText", "placeholderIcon", "autoUpload", "uploadData", "showFloatingUploader", "floatingUploaderGroupId"], outputs: ["fileChange", "uploadSuccess", "uploadError", "uploadProgressChange"] }, { kind: "directive", type: CideEleFileImageDirective, selector: "[cideEleFileImage]", inputs: ["fileId", "altText"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideEleToastNotificationComponent, selector: "cide-ele-toast-notification" }] });
|
|
15380
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserCreateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
15381
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CideCoreUserCreateComponent, isStandalone: true, selector: "cide-core-user-create", viewQueries: [{ propertyName: "menuDetailsRendererTemplate", first: true, predicate: ["menuDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "permissionsCheckboxRendererTemplate", first: true, predicate: ["permissionsCheckboxRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "menuTypeRendererTemplate", first: true, predicate: ["menuTypeRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "menuRightsPermissionsRendererTemplate", first: true, predicate: ["menuRightsPermissionsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "permissionsRendererTemplate", first: true, predicate: ["permissionsRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- \r\n ENTERPRISE USER MASTER FORM\r\n \r\n Enterprise-Level Styling with Tailwind CSS\r\n Features: Responsive grids, proper typography, enhanced user experience\r\n-->\r\n\r\n<div class=\"tw-w-full tw-h-full tw-p-1 tw-pt-2\">\r\n <!-- Toast Notifications -->\r\n <cide-ele-toast-notification></cide-ele-toast-notification>\r\n \r\n <form class=\"tw-max-w-7xl tw-mx-auto tw-bg-transparent\" [formGroup]=\"userMasterForm\" [class.tw-opacity-60]=\"loading()\"\r\n (ngSubmit)=\"onSubmit()\">\r\n\r\n\r\n <!-- User Context Header -->\r\n <div\r\n class=\"tw-bg-gradient-to-r tw-from-blue-50 tw-to-indigo-50 tw-border tw-border-blue-200 tw-rounded-md tw-p-1 tw-mb-2 tw-shadow-sm\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-flex-wrap tw-gap-2\">\r\n <!-- User Basic Info Display -->\r\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-flex-wrap\">\r\n <!-- Profile Photo Preview -->\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <div\r\n class=\"tw-w-8 tw-h-8 tw-rounded-full tw-bg-blue-100 tw-border tw-border-blue-200 tw-flex tw-items-center tw-justify-center tw-overflow-hidden\">\r\n @if (userMasterForm.get('user_photo_id_cyfm')?.value) {\r\n <img cideEleFileImage [fileId]=\"userMasterForm.get('user_photo_id_cyfm')?.value\"\r\n [altText]=\"'Profile Photo'\" class=\"tw-w-full tw-h-full tw-object-cover\">\r\n } @else {\r\n <cide-ele-icon name=\"person\" class=\"tw-w-5 tw-h-5 tw-text-blue-600\">\r\n </cide-ele-icon>\r\n }\r\n </div>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-xs tw-font-medium tw-text-blue-900\">\r\n {{ getUserFullName() || 'New User' }}\r\n </span>\r\n <span class=\"tw-text-xs tw-text-blue-600\">\r\n {{ getUserUsername() || 'Username not set' }}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Contact Info -->\r\n <div class=\"tw-flex tw-items-center tw-gap-3\">\r\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-text-xs tw-text-gray-700\">\r\n <cide-ele-icon variant=\"gray\" size=\"xs\">email</cide-ele-icon>\r\n <span>{{ getUserEmail() || 'Email not set' }}</span>\r\n </div>\r\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-text-xs tw-text-gray-700\">\r\n <cide-ele-icon variant=\"gray\" size=\"xs\">phone</cide-ele-icon>\r\n <span>{{ getUserMobile() || 'Mobile not set' }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Active Status -->\r\n <div class=\"tw-flex tw-items-center tw-gap-1\">\r\n @if (getUserActiveStatus()) {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-700\">\r\n <cide-ele-icon variant=\"green\" size=\"xs\" class=\"tw-mr-1\">check_circle</cide-ele-icon>\r\n Active\r\n </span>\r\n } @else {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded tw-text-xs tw-font-medium tw-bg-red-100 tw-text-red-700\">\r\n <cide-ele-icon variant=\"red\" size=\"xs\" class=\"tw-mr-1\">cancel</cide-ele-icon>\r\n Inactive\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Entity Info -->\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n @if (hasDefaultEntity()) {\r\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-text-xs tw-text-blue-700\">\r\n <cide-ele-icon variant=\"blue\" size=\"xs\">business</cide-ele-icon>\r\n <span class=\"tw-font-medium\">{{ getDefaultEntityName() }}</span>\r\n </div>\r\n } @else {\r\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-text-xs tw-text-gray-500\">\r\n <cide-ele-icon variant=\"gray\" size=\"xs\">business</cide-ele-icon>\r\n <span class=\"tw-italic\">No entity</span>\r\n </div>\r\n }\r\n\r\n <span class=\"tw-text-xs tw-text-gray-600 tw-px-2 tw-py-1 tw-bg-gray-100 tw-rounded\">\r\n {{ getEntityMappingCount() }} mapping(s)\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Tab Navigation -->\r\n <div class=\"tw-p-0 tw-mb-2 tw-border-b tw-border-gray-200\">\r\n <cide-ele-tab [tabs]=\"userTabs()\" [activeTabId]=\"activeTab()\" size=\"md\" variant=\"default\"\r\n (tabChange)=\"onTabChange($event)\">\r\n </cide-ele-tab>\r\n </div>\r\n\r\n <!-- Tab Content -->\r\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\r\n @switch (activeTab()) {\r\n\r\n @case ('basic') {\r\n <!-- User Basic Information Section -->\r\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\r\n\r\n <!-- Top Section: Form Fields on Left, Profile Photo on Right -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-[1fr_200px] tw-gap-4 tw-mb-4\">\r\n <!-- Left Side: Form Fields -->\r\n <div class=\"tw-space-y-4\">\r\n <!-- Name Fields - All in One Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-4\">\r\n <cide-ele-input id=\"user_firstname\" label=\"First Name *\" formControlName=\"user_firstname\"\r\n placeholder=\"Enter first name\" [maxlength]=\"20\" size=\"md\" (ngModelChange)=\"onNameFieldChange()\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_middlename\" label=\"Middle Name\" formControlName=\"user_middlename\"\r\n placeholder=\"Enter middle name\" [maxlength]=\"20\" size=\"md\" (ngModelChange)=\"onNameFieldChange()\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_lastname\" label=\"Last Name *\" formControlName=\"user_lastname\"\r\n placeholder=\"Enter last name\" [maxlength]=\"20\" size=\"md\" (ngModelChange)=\"onNameFieldChange()\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_fullname\" label=\"Full Name * (Auto-generated)\" formControlName=\"user_fullname\"\r\n placeholder=\"Auto-generated from name fields or enter manually\" [maxlength]=\"62\" size=\"md\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Contact Information - All in One Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-4\">\r\n <cide-ele-input id=\"user_username\" label=\"Username *\" formControlName=\"user_username\"\r\n placeholder=\"Enter unique username\" [maxlength]=\"20\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_emailid\" label=\"Email ID *\" formControlName=\"user_emailid\" type=\"email\"\r\n placeholder=\"Enter valid email address\" [maxlength]=\"320\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_mobileno\" label=\"Mobile Number *\" formControlName=\"user_mobileno\" type=\"tel\"\r\n placeholder=\"Enter mobile number\" [maxlength]=\"15\" size=\"md\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Side: Profile Photo Upload -->\r\n <div class=\"tw-flex tw-items-start tw-justify-center tw-p-0\">\r\n <cide-ele-file-input id=\"user_photo_id_cyfm\" formControlName=\"user_photo_id_cyfm\" accept=\"image/*\"\r\n [showPreview]=\"true\" [previewBoxMode]=\"true\" [showFileName]=\"false\" previewWidth=\"180px\"\r\n previewHeight=\"120px\" placeholderText=\"Upload Photo\" placeholderIcon=\"cloud_upload\" [autoUpload]=\"true\"\r\n [uploadData]=\"getProfilePhotoUploadData()\" (uploadSuccess)=\"onProfilePhotoUploadSuccess($event)\"\r\n (uploadError)=\"onProfilePhotoUploadError($event)\"\r\n (uploadProgressChange)=\"onProfilePhotoUploadProgress($event)\">\r\n </cide-ele-file-input>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <!-- Status Control -->\r\n <div class=\"tw-grid tw-grid-cols-1 tw-mb-2\">\r\n <div class=\"tw-p-2 tw-bg-blue-50 tw-border tw-border-blue-100 tw-rounded-lg\">\r\n <label\r\n class=\"tw-flex tw-flex-col tw-cursor-pointer tw-py-2 tw-bg-transparent tw-border-none tw-rounded-none tw-transition-all tw-duration-200 hover:tw-bg-blue-75\">\r\n <cide-ele-input type=\"checkbox\" label=\"Active User Status\" formControlName=\"user_isactive\"\r\n class=\"tw-h-5 tw-accent-blue-500 tw-rounded tw-mb-1\" />\r\n <span class=\"tw-font-semibold tw-text-gray-700 tw-text-base\"></span>\r\n <span class=\"tw-text-sm tw-text-gray-600 tw-mt-1 tw-leading-relaxed\">Enable this user account for system\r\n access and operations</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('auth') {\r\n <!-- Authentication Section -->\r\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\r\n <!-- Password Fields -->\r\n @if (shouldShowPasswordFields()) {\r\n <div class=\"tw-mb-4\">\r\n <!-- Password Fields Header for Edit Mode -->\r\n @if (isEditMode()) {\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-800\">Update Password</h6>\r\n <button type=\"button\"\r\n class=\"tw-px-3 tw-py-1 tw-bg-gray-100 tw-text-gray-600 tw-border tw-border-gray-300 tw-rounded-md tw-text-xs tw-font-medium hover:tw-bg-gray-200 tw-transition-colors\"\r\n (click)=\"cancelPasswordUpdate()\">\r\n Cancel Password Update\r\n </button>\r\n </div>\r\n }\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 md:tw-grid-cols-1 tw-gap-6\">\r\n <cide-ele-input id=\"user_password\" [label]=\"getPasswordFieldLabel()\" formControlName=\"user_password\"\r\n type=\"password\" placeholder=\"Enter secure password (min 8 characters)\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_confirm_password\" [label]=\"getPasswordConfirmLabel()\"\r\n formControlName=\"user_confirm_password\" type=\"password\" placeholder=\"Confirm your password\" size=\"md\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Password Update Option for Edit Mode -->\r\n @if (isEditMode() && !shouldShowPasswordFields()) {\r\n <div class=\"tw-mb-4\">\r\n <div class=\"tw-p-2 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-lg\">\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-blue-800 tw-mb-2\">Password Update</h6>\r\n <p class=\"tw-text-sm tw-text-blue-600 tw-mb-3\">Current password will be kept. Click below to change\r\n password.</p>\r\n\r\n @if (hasPasswordInput()) {\r\n <div\r\n class=\"tw-mb-3 tw-p-2 tw-bg-yellow-50 tw-border tw-border-yellow-200 tw-rounded tw-text-sm tw-text-yellow-700\">\r\n <cide-ele-icon variant=\"yellow\" size=\"xs\" class=\"tw-mr-1\">warning</cide-ele-icon>\r\n Password fields contain text. Click \"Change Password\" to manage existing input.\r\n </div>\r\n }\r\n\r\n <button type=\"button\"\r\n class=\"tw-px-4 tw-py-2 tw-bg-blue-100 tw-text-blue-700 tw-border tw-border-blue-300 tw-rounded-md tw-text-sm tw-font-medium hover:tw-bg-blue-200 tw-transition-colors\"\r\n (click)=\"triggerPasswordUpdate()\">\r\n @if (hasPasswordInput()) {\r\n Manage Password Fields\r\n } @else {\r\n Change Password\r\n }\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Password Options -->\r\n <div class=\"tw-grid tw-grid-cols-1 tw-gap-4 tw-mb-4\">\r\n <div class=\"tw-p-2 tw-bg-yellow-50 tw-border tw-border-yellow-100 tw-rounded-lg\">\r\n <label\r\n class=\"tw-flex tw-flex-col tw-gap-2 tw-cursor-pointer tw-py-2 tw-bg-transparent tw-border-none tw-rounded-none tw-transition-all tw-duration-200\">\r\n <cide-ele-input type=\"checkbox\" label=\"Force Password Change on Login\"\r\n formControlName=\"user_passwordchangeonlogin\" class=\"tw-h-5 tw-accent-yellow-500 tw-rounded tw-mb-1\" />\r\n <span class=\"tw-text-sm tw-text-gray-600 tw-mt-1 tw-leading-relaxed\">User will be required to change\r\n password on next login</span>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n }\r\n\r\n @case ('roles') {\r\n <!-- Entity, Roles & Permissions Mapping Section -->\r\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\r\n\r\n\r\n\r\n <!-- Important Note -->\r\n <div class=\"tw-bg-amber-50 tw-border tw-border-amber-200 tw-rounded-lg tw-p-2 tw-mb-4\">\r\n <div class=\"tw-flex tw-items-start tw-gap-3\">\r\n <cide-ele-icon variant=\"amber\" size=\"lg\">info</cide-ele-icon>\r\n <div class=\"tw-flex-1\">\r\n <h4 class=\"tw-text-sm tw-font-semibold tw-text-amber-800 tw-mb-1\">Entity-Role Based Access</h4>\r\n <p class=\"tw-text-sm tw-text-amber-700 tw-mb-2\">User access is completely managed through entity-role\r\n mappings below. At least one entity mapping is required for user access.</p>\r\n @if (hasDefaultEntity()) {\r\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-mt-2 tw-p-2 tw-bg-amber-100 tw-rounded\">\r\n <cide-ele-icon variant=\"amber\" size=\"sm\">star</cide-ele-icon>\r\n <span class=\"tw-text-sm tw-text-amber-800\">\r\n <strong>Default Entity:</strong> {{ getDefaultEntityName() }}\r\n </span>\r\n </div>\r\n } @else {\r\n <div class=\"tw-text-sm tw-text-amber-600 tw-mt-2 tw-italic\">\r\n \u26A0\uFE0F No default entity selected. Please set one entity as default.\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Entity-Role Mapping Section -->\r\n <div class=\"tw-flex tw-text-center tw-justify-between tw-items-center tw-mb-4\">\r\n <div>\r\n <h4 class=\"tw-text-sm tw-text-left tw-font-semibold tw-text-blue-900 tw-mb-1\">Entity-Role Mapping</h4>\r\n <p class=\"tw-text-sm tw-text-blue-700\">Map user to entities with specific roles and permissions</p>\r\n </div>\r\n <div class=\"tw-flex tw-flex-col tw-items-end\">\r\n <button cideEleButton variant=\"primary\" size=\"md\" type=\"button\" (click)=\"addEntityMapping()\"\r\n leftIcon=\"add\" [disabled]=\"isAllEntitiesMapped()\">\r\n Add Entity Mapping\r\n </button>\r\n\r\n @if (isAllEntitiesMapped()) {\r\n <div class=\"tw-mt-2 tw-p-2 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-md tw-max-w-xs\">\r\n <p class=\"tw-text-xs tw-text-blue-700\">\r\n <cide-ele-icon variant=\"info\" size=\"xs\" class=\"tw-mr-1\">info</cide-ele-icon>\r\n All available entities are already mapped.\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div formArrayName=\"core_entity_mapping\">\r\n @for (mapping of entityMappings(); track $index; let i = $index) {\r\n <div class=\"tw-bg-white tw-border tw-border-blue-200 tw-rounded-xl tw-mb-6 tw-overflow-hidden tw-shadow-sm\"\r\n [formGroupName]=\"i\">\r\n <div\r\n class=\"tw-bg-gradient-to-r tw-from-blue-50 tw-to-blue-100 tw-px-6 tw-py-3 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-blue-200\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <h5 class=\"tw-m-0 tw-text-blue-800 tw-text-sm tw-font-semibold\">Entity Mapping {{ i + 1 }}</h5>\r\n @if (mapping.syenm_isdefault) {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\r\n <cide-ele-icon variant=\"green\" size=\"xs\" class=\"tw-mr-1\">star</cide-ele-icon>\r\n Default\r\n </span>\r\n }\r\n </div>\r\n @if (!mapping?._id) {\r\n <button cideEleButton variant=\"danger\" size=\"sm\" type=\"button\" (click)=\"removeEntityMapping(i)\"\r\n leftIcon=\"delete\">\r\n Remove\r\n </button>\r\n }\r\n </div>\r\n\r\n <div>\r\n <!-- Entity and Role Selection -->\r\n <div class=\"tw-grid tw-px-3 tw-py-1 tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4 tw-mb-4\">\r\n <div>\r\n <cide-ele-select label=\"Entity *\" [options]=\"getFilteredEntityOptions(i)\"\r\n formControlName=\"syenm_entity_id_syen\" valueKey=\"_id\" labelKey=\"syen_name\"\r\n placeholder=\"Select entity\" size=\"md\" (change)=\"onEntityChange(i, $event)\">\r\n </cide-ele-select>\r\n\r\n @if (isAllEntitiesSelected(i)) {\r\n <div class=\"tw-mt-2 tw-p-2 tw-bg-yellow-50 tw-border tw-border-yellow-200 tw-rounded-md\">\r\n <p class=\"tw-text-xs tw-text-yellow-700\">\r\n <cide-ele-icon variant=\"warning\" size=\"xs\" class=\"tw-mr-1\">info</cide-ele-icon>\r\n All entities are already mapped. Remove another mapping to add this one.\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n <cide-ele-select label=\"Role for this Entity\" [options]=\"getRoleOptionsForEntity(i)\"\r\n formControlName=\"syenm_role_id_syusrol\" valueKey=\"_id\" labelKey=\"syusrol_role_name\"\r\n placeholder=\"Select role for this entity\" size=\"md\" (change)=\"onRoleChange(i, $event)\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n\r\n <!-- Entity-Specific Details and Active Period - All in One Row -->\r\n <div class=\"tw-grid tw-px-3 tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-4 tw-mb-4\">\r\n <cide-ele-select label=\"Department for this Entity\" [options]=\"getDepartmentOptionsForEntity(i)\"\r\n formControlName=\"syenm_department_id_sydept\" (change)=\"onDepartmentChange($event)\" valueKey=\"_id\"\r\n labelKey=\"sydept_name\" placeholder=\"Select department\" size=\"md\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-select label=\"Designation for this Entity\" [options]=\"getDesignationOptionsForEntity(i)\"\r\n valueKey=\"_id\" labelKey=\"sydsg_name\" formControlName=\"syenm_designation_id_sydsg\"\r\n placeholder=\"Select designation\" size=\"md\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Active From *\" [id]=\"'syenm_activefrom['+i+']'\"\r\n formControlName=\"syenm_activefrom\" type=\"date\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Active Until\" [id]=\"'syenm_activeupto['+i+']'\"\r\n formControlName=\"syenm_activeupto\" type=\"date\" size=\"md\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Mapping Settings -->\r\n <div class=\"tw-grid tw-px-3 tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-4 tw-mb-4\">\r\n <div class=\"tw-p-2 tw-bg-green-50 tw-border tw-border-green-200 tw-rounded-lg\">\r\n <cide-ele-input type=\"checkbox\" label=\"Default Entity\" formControlName=\"syenm_isdefault\"\r\n (change)=\"onDefaultEntityChange(i, $event)\" class=\"tw-h-5 tw-accent-green-500\" />\r\n <span class=\"tw-text-xs tw-text-green-600 tw-block tw-mt-1\">Set as user's default entity (only one\r\n allowed)</span>\r\n </div>\r\n\r\n <div class=\"tw-p-2 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-lg\">\r\n <cide-ele-input type=\"checkbox\" label=\"Active Mapping\" formControlName=\"syenm_isactive\"\r\n class=\"tw-h-5 tw-accent-blue-500\" />\r\n <span class=\"tw-text-xs tw-text-blue-600 tw-block tw-mt-1\">Enable this entity mapping</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Menu Rights Grid for this Entity-Role -->\r\n <div class=\"tw-border-t tw-border-gray-200\">\r\n\r\n @if (getMenuRightsForMapping(i).length > 0) {\r\n <!-- Menu Rights Tree Grid -->\r\n\r\n <cide-ele-data-grid [config]=\"getMenuRightsGridConfig(i)\"\r\n [templateRenderers]=\"getMenuRightsTemplateRenderers(i)\"\r\n (gridEvent)=\"onMenuRightsGridEvent($event, i)\" class=\"tw-h-96 tw-w-full\">\r\n </cide-ele-data-grid>\r\n\r\n } @else {\r\n <div class=\"tw-text-center tw-py-8 tw-bg-gray-50 tw-border tw-border-gray-200 tw-rounded-lg\">\r\n <div class=\"tw-text-gray-400 tw-mb-3\">\r\n <cide-ele-icon variant=\"gray\" size=\"lg\">menu</cide-ele-icon>\r\n </div>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-600 tw-mb-2\">No Menu Rights Available</h6>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-mb-3 tw-text-center\">Select both entity and role to\r\n automatically load\r\n menu rights for this mapping.</p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (entityMappings().length === 0) {\r\n <div class=\"tw-text-center tw-py-8 tw-bg-white tw-border tw-border-blue-200 tw-rounded-lg\">\r\n <div class=\"tw-text-blue-400 tw-mb-3\">\r\n <cide-ele-icon variant=\"blue\" size=\"lg\">business</cide-ele-icon>\r\n </div>\r\n <h4 class=\"tw-text-sm tw-font-medium tw-text-blue-800 tw-mb-2\">No Entity Mappings</h4>\r\n <p class=\"tw-text-blue-600 tw-mb-4 tw-text-center\">Add entity mappings to assign specific roles and\r\n permissions for different entities.</p>\r\n <button class=\"tw-mx-auto\" cideEleButton variant=\"primary\" size=\"md\" type=\"button\"\r\n (click)=\"addEntityMapping()\" leftIcon=\"add\">\r\n Add First Entity Mapping\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @case ('addresses') {\r\n <!-- Contact Addresses Section -->\r\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\r\n <div class=\"tw-flex tw-justify-end\">\r\n <div class=\"tw-flex tw-justify-between tw-items-end tw-mb-2 tw-gap-4\">\r\n <button cideEleButton variant=\"primary\" size=\"md\" type=\"button\" (click)=\"addContactAddress()\"\r\n leftIcon=\"add\" [disabled]=\"!hasAddContactAddressRights()\">\r\n Add New Address\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div formArrayName=\"core_user_contact_addresses\">\r\n @for (address of contactAddresses(); track $index; let i = $index) {\r\n <div [formGroupName]=\"i\"\r\n class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-xl tw-mb-8 tw-overflow-hidden tw-transition-all tw-duration-300 hover:tw-shadow-lg tw-shadow-sm\">\r\n <div\r\n class=\"tw-bg-gradient-to-r tw-from-gray-50 tw-to-gray-100 tw-px-4 tw-py-2 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-gray-200\">\r\n <!-- Use address type as header instead of generic \"Address X\" -->\r\n <h4 class=\"tw-m-0 tw-text-gray-700 tw-text-sm tw-font-semibold tw-tracking-tight\">\r\n {{ getAddressTypeLabel(i) || ('Address ' + (i + 1)) }}\r\n </h4>\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n @if (isAddressOwner(i)) {\r\n <button cideEleButton variant=\"secondary\" size=\"xs\" type=\"button\" (click)=\"shareAddress(i)\"\r\n leftIcon=\"share\" class=\"tw-text-blue-600 hover:tw-text-blue-700\">\r\n Share\r\n </button>\r\n }\r\n @if (!address?._id) {\r\n <button cideEleButton variant=\"danger\" size=\"sm\" type=\"button\" (click)=\"removeContactAddress(i)\"\r\n leftIcon=\"delete\">\r\n Remove\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"tw-p-4\">\r\n <!-- Main Layout: Inputs on Left, Address Textarea on Right -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\r\n \r\n <!-- Left Side: Input Fields (3/4 width) -->\r\n <div class=\"lg:tw-col-span-3\">\r\n <!-- Row 1: Address Type, Contact Person -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3 tw-mb-3\">\r\n <cide-ele-select label=\"Address Type\" [options]=\"addressTypeOptions()\" id=\"sycad_address_type_id_sygms\"\r\n formControlName=\"sycad_address_type_id_sygms\" placeholder=\"Select type\" size=\"sm\"\r\n valueKey=\"_id\" labelKey=\"sygms_title\" (change)=\"onAddressTypeChange(i)\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Contact Person\" formControlName=\"sycad_contact_person_name\"\r\n placeholder=\"Enter contact person\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Row 2: Postal Code, City, State, Country -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-4 tw-gap-3\">\r\n <cide-ele-select label=\"Postal Code\" [options]=\"addressPostalCodes()[i] || []\"\r\n formControlName=\"sycad_contact_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\r\n [loading]=\"addressPostalCodesLoading()[i] || false\" (searchChange)=\"onPostalCodeSearch($event, i)\"\r\n (change)=\"onPostalCodeSelection($event, i)\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"City\" formControlName=\"sycad_contact_city_sypin\" placeholder=\"Enter city\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"State\" formControlName=\"sycad_contact_state_sypin\" placeholder=\"Enter state\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Country\" [options]=\"addressCountries()[i] || []\"\r\n formControlName=\"sycad_contact_country_syctr\" placeholder=\"Select country\" valueKey=\"_id\"\r\n labelKey=\"syctr_country_iso_name\" [searchable]=\"true\" (searchChange)=\"onCountrySearch($event, i)\"\r\n [loading]=\"addressCountriesLoading()[i] || false\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Side: Address Textarea (1/4 width, spans 2 rows) -->\r\n <div class=\"lg:tw-col-span-1 lg:tw-row-span-2 tw-flex tw-flex-col\">\r\n <cide-ele-textarea label=\"Complete Address\" formControlName=\"sycad_contact_address\"\r\n placeholder=\"Enter complete address with area, city, and landmarks\" [rows]=\"4\" size=\"sm\"\r\n class=\"tw-h-full\">\r\n </cide-ele-textarea>\r\n </div>\r\n </div>\r\n\r\n <!-- Contact Details: Primary Phone, Alt Phone, Fax, Primary Email in 4 columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\r\n <cide-ele-input label=\"Primary Phone\" formControlName=\"sycad_contact_phone\" type=\"tel\"\r\n placeholder=\"Primary phone\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Alternate Phone\" formControlName=\"sycad_contact_phone_alt\" type=\"tel\"\r\n placeholder=\"Alternate phone\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Fax Number\" formControlName=\"sycad_contact_fax\" placeholder=\"Fax number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Primary Email\" formControlName=\"sycad_contact_email\" type=\"email\"\r\n placeholder=\"Primary email\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Alternate Email in single row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3\">\r\n <cide-ele-input label=\"Alternate Email\" formControlName=\"sycad_contact_email_alt\" type=\"email\"\r\n placeholder=\"Alternate email address\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('documents') {\r\n <!-- Documents Section -->\r\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\r\n <div class=\"tw-flex tw-justify-end tw-items-end tw-mb-2 tw-gap-4\">\r\n <button cideEleButton variant=\"primary\" size=\"md\" type=\"button\" (click)=\"addDocument()\" leftIcon=\"add\" [disabled]=\"!hasAddDocumentRights()\">\r\n Add Document\r\n </button>\r\n </div>\r\n <div formArrayName=\"core_user_documents\">\r\n @for (doc of documents(); track $index; let i = $index) {\r\n <div [formGroupName]=\"i\"\r\n class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-xl tw-mb-8 tw-overflow-hidden tw-transition-all tw-duration-300 hover:tw-shadow-lg tw-shadow-sm\">\r\n <div\r\n class=\"tw-bg-gradient-to-r tw-from-gray-50 tw-to-gray-100 tw-px-4 tw-py-2 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-gray-200\">\r\n <h4 class=\"tw-m-0 tw-text-gray-700 tw-text-sm tw-font-semibold tw-tracking-tight\">\r\n {{ getDocumentTypeLabel(i) || ('Document ' + (i + 1)) }}\r\n </h4>\r\n <div class=\"tw-flex tw-gap-2\">\r\n @if (doc?._id) {\r\n <button cideEleButton variant=\"secondary\" size=\"sm\" type=\"button\" (click)=\"shareDocumentRights(i)\"\r\n leftIcon=\"share\">\r\n Share\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"tw-p-4\">\r\n <!-- Main Layout: Inputs on Left, File Upload on Right -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-3 tw-gap-4\">\r\n \r\n <!-- Left Side: Document Information (2/3 width) -->\r\n <div class=\"lg:tw-col-span-2\">\r\n <!-- Row 1: Document Type, Document Number, Name as per Document -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-3 tw-mb-3\">\r\n <cide-ele-select label=\"Document Type\" [options]=\"documentTypeOptions()\"\r\n formControlName=\"syusd_document_type_id_sygms\" placeholder=\"Select type\" size=\"sm\"\r\n valueKey=\"_id\" labelKey=\"sygms_title\" (change)=\"onDocumentTypeChange(i)\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Document Number\" formControlName=\"syusd_doc_number\"\r\n placeholder=\"Document number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Name as per Document\" formControlName=\"syusd_doc_name_as_per_doc\"\r\n placeholder=\"Name on document\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Row 2: Issue Date, Expiry Date, Photo Group -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-3 tw-mb-3\">\r\n <cide-ele-input label=\"Issue Date\" formControlName=\"syusd_doc_issue_date\"\r\n [id]=\"'syusd_doc_issue_date['+i+']'\" type=\"date\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Expiry Date\" formControlName=\"syusd_doc_expiry_date\"\r\n [id]=\"'syusd_doc_expiry_date['+i+']'\" type=\"date\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Row 3: Verification Status, KYC Status -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3\">\r\n <cide-ele-select label=\"Verification Status\" [options]=\"documentVerificationStatusOptions()\"\r\n formControlName=\"syusd_doc_verification_status_id_sygms\" placeholder=\"Select status\"\r\n size=\"sm\" valueKey=\"_id\" labelKey=\"sygms_title\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-select label=\"KYC Status\" [options]=\"documentKycStatusOptions()\"\r\n formControlName=\"syusd_doc_kyc_status_id_sygms\" placeholder=\"Select KYC status\" size=\"sm\"\r\n valueKey=\"_id\" labelKey=\"sygms_title\">\r\n </cide-ele-select>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Side: File Upload (1/3 width) -->\r\n <div class=\"lg:tw-col-span-1\">\r\n <div class=\"tw-bg-gray-50 tw-border tw-border-gray-200 tw-rounded-lg tw-p-3 tw-h-full\">\r\n \r\n <!-- File Upload Input -->\r\n <cide-ele-file-input\r\n [id]=\"'document-files-' + i\"\r\n [multiple]=\"true\"\r\n formControlName=\"syusd_photo_group_id_cyfm\"\r\n [accept]=\"'.pdf,.jpg,.jpeg,.png,.doc,.docx'\"\r\n [autoUpload]=\"true\"\r\n [uploadData]=\"getDocumentUploadData(i)\"\r\n (change)=\"onDocumentFilesSelected($event, i)\"\r\n (uploadSuccess)=\"onDocumentUploadSuccess($event, i)\"\r\n (uploadError)=\"onDocumentUploadError($event, i)\"\r\n (uploadProgressChange)=\"onDocumentUploadProgress($event, i)\"\r\n class=\"tw-mb-3\"\r\n size=\"sm\">\r\n </cide-ele-file-input>\r\n\r\n <!-- Upload Status -->\r\n <!-- Upload status is now handled by the file input component itself -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('family') {\r\n <!-- Family Details Section - Compact Design -->\r\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\r\n <div class=\"tw-flex tw-justify-end tw-items-end tw-mb-3 tw-gap-4\">\r\n <button cideEleButton variant=\"primary\" size=\"sm\" type=\"button\" (click)=\"addFamilyDetail()\" leftIcon=\"add\" [disabled]=\"!hasAddFamilyDetailRights()\">\r\n Add Family Member\r\n </button>\r\n </div>\r\n\r\n <div formArrayName=\"core_user_family_details\">\r\n @for (family of familyDetails(); track $index; let i = $index) {\r\n <div [formGroupName]=\"i\"\r\n class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-lg tw-mb-4 tw-overflow-hidden tw-transition-all tw-duration-200 hover:tw-shadow-md tw-shadow-sm\">\r\n \r\n <!-- Compact Header -->\r\n <div class=\"tw-bg-gray-50 tw-px-4 tw-py-2 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-gray-200\">\r\n <h4 class=\"tw-m-0 tw-text-gray-700 tw-text-sm tw-font-medium\">Family Member {{ i + 1 }}</h4>\r\n <div class=\"tw-flex tw-gap-2\">\r\n @if (family?._id) {\r\n <button cideEleButton variant=\"secondary\" size=\"xs\" type=\"button\" (click)=\"shareFamilyDetailRights(i)\"\r\n leftIcon=\"share\">\r\n Share\r\n </button>\r\n }\r\n @if (!family?._id) {\r\n <button cideEleButton variant=\"danger\" size=\"xs\" type=\"button\" (click)=\"removeFamilyDetail(i)\" leftIcon=\"delete\">\r\n Remove\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n \r\n <!-- Compact Form Content - 3 inputs per row -->\r\n <div class=\"tw-p-4\">\r\n <!-- Row 1: Name, User, and Combined Relationship/Active Status (33.33% each) -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-3 tw-mb-3\">\r\n <cide-ele-input label=\"Family Member Name\" formControlName=\"syfdl_family_member_name\"\r\n placeholder=\"Enter family member full name\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Family Member User\" [options]=\"userOptions(i)\"\r\n formControlName=\"syfdl_family_member_id_user\" placeholder=\"Select family member user\" size=\"sm\"\r\n valueKey=\"_id\" labelKey=\"user_fullname\" [searchable]=\"true\"\r\n [loading]=\"userSearchLoading()[i] || false\" (searchChange)=\"onUserSearchChange($event, i)\"\r\n (change)=\"onUserSelectionChange($event, i)\">\r\n </cide-ele-select>\r\n\r\n <!-- Combined Relationship and Active Status (33.33%) -->\r\n <div class=\"tw-flex tw-flex-row tw-gap-2 tw-items-end\">\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-select label=\"Relationship\" [options]=\"relationshipOptions()\"\r\n formControlName=\"syfdl_relationship_id_sygms\" placeholder=\"Select relationship\" size=\"sm\"\r\n valueKey=\"_id\" labelKey=\"sygms_title\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <div class=\"tw-flex tw-items-center tw-pt-1 tw-flex-shrink-0\">\r\n <cide-ele-input formControlName=\"syfdl_isactive\" type=\"checkbox\" label=\"Active\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Row 2: Blood Group, DOB, and Phone -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 xl:tw-grid-cols-3 tw-gap-3 tw-mb-3\">\r\n <cide-ele-select label=\"Blood Group\" [options]=\"bloodGroupOptions()\"\r\n formControlName=\"syfdl_blood_group_sygms\" placeholder=\"Select blood group\" size=\"sm\" valueKey=\"_id\"\r\n labelKey=\"sygms_title\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Date of Birth\" formControlName=\"syfdl_family_member_dob\" type=\"date\" size=\"sm\"\r\n [id]=\"'syfdl_family_member_dob['+i+']'\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Contact Phone\" formControlName=\"syfdl_contact_phone\" type=\"tel\"\r\n placeholder=\"Enter contact phone\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Row 3: Email, Email ID, and Contact Number -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 xl:tw-grid-cols-3 tw-gap-3 tw-mb-3\">\r\n <cide-ele-input label=\"Contact Email\" formControlName=\"syfdl_contact_email\" type=\"email\"\r\n placeholder=\"Enter contact email\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Contact Email ID\" formControlName=\"syfdl_contact_email_id\" type=\"email\"\r\n placeholder=\"Enter contact email ID\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Contact Number\" formControlName=\"syfdl_contact_number\" type=\"tel\"\r\n placeholder=\"Enter contact number\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div\r\n class=\"tw-flex tw-justify-end tw-gap-4 tw-py-2 tw-bg-white tw-border-t tw-border-gray-200 tw-sticky tw-bottom-0 tw-z-10\">\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\r\n [disabled]=\"loading()\">\r\n Reset Form\r\n </button>\r\n\r\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || userMasterForm.invalid\"\r\n [loading]=\"loading()\" leftIcon=\"save\">\r\n Save User Master\r\n </button>\r\n </div>\r\n </form>\r\n</div>\r\n\r\n<!-- Template Renderers for Role Permissions Grid -->\r\n<ng-template #menuDetailsRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-min-w-0\">\r\n <!-- Menu Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n @if (row.syme_type === 'module') {\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">folder</cide-ele-icon>\r\n } @else if (row.syme_type === 'section') {\r\n <cide-ele-icon class=\"tw-text-green-600 tw-w-4 tw-h-4\">folder_open</cide-ele-icon>\r\n } @else if (row.syme_type === 'menu') {\r\n <cide-ele-icon class=\"tw-text-purple-600 tw-w-4 tw-h-4\">menu</cide-ele-icon>\r\n } @else {\r\n <cide-ele-icon class=\"tw-text-gray-600 tw-w-4 tw-h-4\">description</cide-ele-icon>\r\n }\r\n </div>\r\n\r\n <!-- Menu Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <div class=\"tw-text-xs tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"row.syme_title\">\r\n {{ row.syme_title || row.menu?.syme_title || row.menu?.syme_menu_name || 'Untitled' }}\r\n </div>\r\n <!-- Green pill indicator for parent menus with child permissions -->\r\n @if (row.syme_type === 'module' || row.syme_type === 'section') {\r\n @if (hasChildMenusWithPermissions(row._id)) {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800 tw-whitespace-nowrap\">\r\n Assigned\r\n </span>\r\n }\r\n }\r\n </div>\r\n @if (row.permission?.sygms_name) {\r\n <div class=\"tw-text-xs tw-text-blue-500 tw-truncate\" [title]=\"row.permission?.sygms_name\">\r\n {{ row.permission?.sygms_name }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Menu Type Renderer Template -->\r\n<ng-template #menuTypeRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-justify-center\">\r\n @if (row.syme_type === 'module') {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800\">\r\n Module\r\n </span>\r\n } @else if (row.syme_type === 'section') {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\r\n Section\r\n </span>\r\n } @else if (row.syme_type === 'menu') {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-purple-100 tw-text-purple-800\">\r\n Menu\r\n </span>\r\n } @else {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-gray-100 tw-text-gray-800\">\r\n {{ row.syme_type || 'Unknown' }}\r\n </span>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Permissions Checkbox Renderer Template -->\r\n<ng-template #permissionsCheckboxRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-flex-wrap tw-gap-2 tw-max-w-full\">\r\n @if (row.syme_type === 'menu' && row?.syme_permissions_id_sygms && row?.syme_permissions_id_sygms.length > 0) {\r\n @for (permissionId of row?.syme_permissions_id_sygms || []; track permissionId) {\r\n <div class=\"tw-flex tw-items-center tw-space-x-1\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-1\">\r\n <input type=\"checkbox\" [checked]=\"isPermissionSelected(row._id, permissionId)\" [disabled]=\"true\"\r\n class=\"tw-h-4 tw-w-4 tw-text-blue-600 tw-bg-gray-100 tw-border-gray-300 tw-rounded focus:tw-ring-blue-500\">\r\n <label class=\"tw-text-xs tw-text-gray-700\">\r\n {{ getPermissionById(permissionId)?.sygms_title || 'Unknown' }}\r\n </label>\r\n </div>\r\n </div>\r\n }\r\n } @else {\r\n <!-- Show green checkmark for parent menus with child permissions -->\r\n @if (row.syme_type === 'module' || row.syme_type === 'section' || row.syme_type === 'title') {\r\n @if (hasChildMenusWithPermissions(row._id)) {\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-w-6 tw-h-6 tw-bg-green-100 tw-rounded-full\">\r\n <cide-ele-icon class=\"tw-text-green-600\" size=\"xs\">\r\n check\r\n </cide-ele-icon>\r\n </div>\r\n } @else {\r\n <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\r\n }\r\n } @else {\r\n <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\r\n }\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Menu Rights Permissions Renderer Template -->\r\n<ng-template #menuRightsPermissionsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-flex-wrap tw-gap-2 tw-max-w-full\">\r\n <!-- Role Rights Display -->\r\n @if (row.role_rights && row.role_rights.length > 0) {\r\n <div class=\"tw-mb-2\">\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-mb-1\">Role Rights:</div>\r\n <div class=\"tw-flex tw-flex-wrap tw-gap-1\">\r\n @for (right of row.role_rights; track $index) {\r\n <span class=\"tw-inline-block tw-px-2 tw-py-1 tw-text-xs tw-bg-blue-100 tw-text-blue-800 tw-rounded\">\r\n {{ right }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n\r\n <!-- Exception Indicator -->\r\n @if (row.hasException) {\r\n <div class=\"tw-mt-2\">\r\n <span class=\"tw-inline-block tw-px-2 tw-py-1 tw-text-xs tw-bg-yellow-100 tw-text-yellow-800 tw-rounded\">\r\n Override\r\n </span>\r\n </div>\r\n } @else {\r\n <div class=\"tw-mt-2\">\r\n <span class=\"tw-text-xs tw-text-gray-400\">Default</span>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Permissions Renderer Template -->\r\n<ng-template #permissionsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-flex-wrap tw-gap-2 tw-max-w-full\">\r\n @if (row._permissionValues && Object.keys(row._permissionValues).length > 0) {\r\n @for (permissionId of Object.keys(row._permissionValues); track permissionId) {\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-input type=\"checkbox\" [ngModel]=\"row._permissionValues[permissionId].checked\"\r\n (ngModelChange)=\"onPermissionChangeSafe($event, row, permissionId)\"\r\n [id]=\"'permission-' + row._id + '-' + permissionId\" class=\"tw-h-4 tw-w-4\">\r\n </cide-ele-input>\r\n <label [for]=\"'permission-' + row._id + '-' + permissionId\" \r\n class=\"tw-text-xs tw-cursor-pointer\"\r\n [ngClass]=\"{\r\n 'tw-text-gray-700': row._permissionValues[permissionId].modified === row._permissionValues[permissionId].actual,\r\n 'tw-text-blue-600 tw-font-semibold': row._permissionValues[permissionId].modified !== row._permissionValues[permissionId].actual\r\n }\">\r\n {{ row._permissionValues[permissionId].permission?.sygms_title }}\r\n @if (row._permissionValues[permissionId].modified !== row._permissionValues[permissionId].actual) {\r\n <span class=\"tw-text-xs tw-text-orange-500 tw-ml-1\" title=\"Modified from role permission\">\r\n ({{ row._permissionValues[permissionId].actual ? '\u2713' : '\u2717' }})\r\n </span>\r\n }\r\n </label>\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-gray-400 tw-animate-spin\" size=\"xs\">refresh</cide-ele-icon>\r\n <span class=\"tw-text-xs tw-text-gray-400\">Loading permissions...</span>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1$2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }, { 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: 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: CideEleTabComponent, selector: "cide-ele-tab", inputs: ["tabs", "activeTabId", "size", "variant", "fullWidth", "disabled"], outputs: ["tabChange"] }, { kind: "component", type: CideEleFileInputComponent, selector: "cide-ele-file-input", inputs: ["label", "accept", "multiple", "disabled", "required", "helperText", "errorText", "showPreview", "previewWidth", "previewHeight", "previewBoxMode", "showFileName", "placeholderText", "placeholderIcon", "autoUpload", "uploadData", "showFloatingUploader", "floatingUploaderGroupId"], outputs: ["fileChange", "uploadSuccess", "uploadError", "uploadProgressChange"] }, { kind: "directive", type: CideEleFileImageDirective, selector: "[cideEleFileImage]", inputs: ["fileId", "altText"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideEleToastNotificationComponent, selector: "cide-ele-toast-notification" }] });
|
|
15296
15382
|
}
|
|
15297
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
15383
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserCreateComponent, decorators: [{
|
|
15298
15384
|
type: Component,
|
|
15299
15385
|
args: [{ selector: 'cide-core-user-create', standalone: true, imports: [
|
|
15300
15386
|
CommonModule,
|
|
@@ -15311,7 +15397,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
15311
15397
|
CideEleDataGridComponent,
|
|
15312
15398
|
CideEleToastNotificationComponent
|
|
15313
15399
|
], template: "<!-- \r\n ENTERPRISE USER MASTER FORM\r\n \r\n Enterprise-Level Styling with Tailwind CSS\r\n Features: Responsive grids, proper typography, enhanced user experience\r\n-->\r\n\r\n<div class=\"tw-w-full tw-h-full tw-p-1 tw-pt-2\">\r\n <!-- Toast Notifications -->\r\n <cide-ele-toast-notification></cide-ele-toast-notification>\r\n \r\n <form class=\"tw-max-w-7xl tw-mx-auto tw-bg-transparent\" [formGroup]=\"userMasterForm\" [class.tw-opacity-60]=\"loading()\"\r\n (ngSubmit)=\"onSubmit()\">\r\n\r\n\r\n <!-- User Context Header -->\r\n <div\r\n class=\"tw-bg-gradient-to-r tw-from-blue-50 tw-to-indigo-50 tw-border tw-border-blue-200 tw-rounded-md tw-p-1 tw-mb-2 tw-shadow-sm\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-flex-wrap tw-gap-2\">\r\n <!-- User Basic Info Display -->\r\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-flex-wrap\">\r\n <!-- Profile Photo Preview -->\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <div\r\n class=\"tw-w-8 tw-h-8 tw-rounded-full tw-bg-blue-100 tw-border tw-border-blue-200 tw-flex tw-items-center tw-justify-center tw-overflow-hidden\">\r\n @if (userMasterForm.get('user_photo_id_cyfm')?.value) {\r\n <img cideEleFileImage [fileId]=\"userMasterForm.get('user_photo_id_cyfm')?.value\"\r\n [altText]=\"'Profile Photo'\" class=\"tw-w-full tw-h-full tw-object-cover\">\r\n } @else {\r\n <cide-ele-icon name=\"person\" class=\"tw-w-5 tw-h-5 tw-text-blue-600\">\r\n </cide-ele-icon>\r\n }\r\n </div>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-xs tw-font-medium tw-text-blue-900\">\r\n {{ getUserFullName() || 'New User' }}\r\n </span>\r\n <span class=\"tw-text-xs tw-text-blue-600\">\r\n {{ getUserUsername() || 'Username not set' }}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Contact Info -->\r\n <div class=\"tw-flex tw-items-center tw-gap-3\">\r\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-text-xs tw-text-gray-700\">\r\n <cide-ele-icon variant=\"gray\" size=\"xs\">email</cide-ele-icon>\r\n <span>{{ getUserEmail() || 'Email not set' }}</span>\r\n </div>\r\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-text-xs tw-text-gray-700\">\r\n <cide-ele-icon variant=\"gray\" size=\"xs\">phone</cide-ele-icon>\r\n <span>{{ getUserMobile() || 'Mobile not set' }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Active Status -->\r\n <div class=\"tw-flex tw-items-center tw-gap-1\">\r\n @if (getUserActiveStatus()) {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-700\">\r\n <cide-ele-icon variant=\"green\" size=\"xs\" class=\"tw-mr-1\">check_circle</cide-ele-icon>\r\n Active\r\n </span>\r\n } @else {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded tw-text-xs tw-font-medium tw-bg-red-100 tw-text-red-700\">\r\n <cide-ele-icon variant=\"red\" size=\"xs\" class=\"tw-mr-1\">cancel</cide-ele-icon>\r\n Inactive\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Entity Info -->\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n @if (hasDefaultEntity()) {\r\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-text-xs tw-text-blue-700\">\r\n <cide-ele-icon variant=\"blue\" size=\"xs\">business</cide-ele-icon>\r\n <span class=\"tw-font-medium\">{{ getDefaultEntityName() }}</span>\r\n </div>\r\n } @else {\r\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-text-xs tw-text-gray-500\">\r\n <cide-ele-icon variant=\"gray\" size=\"xs\">business</cide-ele-icon>\r\n <span class=\"tw-italic\">No entity</span>\r\n </div>\r\n }\r\n\r\n <span class=\"tw-text-xs tw-text-gray-600 tw-px-2 tw-py-1 tw-bg-gray-100 tw-rounded\">\r\n {{ getEntityMappingCount() }} mapping(s)\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Tab Navigation -->\r\n <div class=\"tw-p-0 tw-mb-2 tw-border-b tw-border-gray-200\">\r\n <cide-ele-tab [tabs]=\"userTabs()\" [activeTabId]=\"activeTab()\" size=\"md\" variant=\"default\"\r\n (tabChange)=\"onTabChange($event)\">\r\n </cide-ele-tab>\r\n </div>\r\n\r\n <!-- Tab Content -->\r\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\r\n @switch (activeTab()) {\r\n\r\n @case ('basic') {\r\n <!-- User Basic Information Section -->\r\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\r\n\r\n <!-- Top Section: Form Fields on Left, Profile Photo on Right -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-[1fr_200px] tw-gap-4 tw-mb-4\">\r\n <!-- Left Side: Form Fields -->\r\n <div class=\"tw-space-y-4\">\r\n <!-- Name Fields - All in One Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-4\">\r\n <cide-ele-input id=\"user_firstname\" label=\"First Name *\" formControlName=\"user_firstname\"\r\n placeholder=\"Enter first name\" [maxlength]=\"20\" size=\"md\" (ngModelChange)=\"onNameFieldChange()\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_middlename\" label=\"Middle Name\" formControlName=\"user_middlename\"\r\n placeholder=\"Enter middle name\" [maxlength]=\"20\" size=\"md\" (ngModelChange)=\"onNameFieldChange()\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_lastname\" label=\"Last Name *\" formControlName=\"user_lastname\"\r\n placeholder=\"Enter last name\" [maxlength]=\"20\" size=\"md\" (ngModelChange)=\"onNameFieldChange()\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_fullname\" label=\"Full Name * (Auto-generated)\" formControlName=\"user_fullname\"\r\n placeholder=\"Auto-generated from name fields or enter manually\" [maxlength]=\"62\" size=\"md\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Contact Information - All in One Row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-4\">\r\n <cide-ele-input id=\"user_username\" label=\"Username *\" formControlName=\"user_username\"\r\n placeholder=\"Enter unique username\" [maxlength]=\"20\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_emailid\" label=\"Email ID *\" formControlName=\"user_emailid\" type=\"email\"\r\n placeholder=\"Enter valid email address\" [maxlength]=\"320\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_mobileno\" label=\"Mobile Number *\" formControlName=\"user_mobileno\" type=\"tel\"\r\n placeholder=\"Enter mobile number\" [maxlength]=\"15\" size=\"md\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Side: Profile Photo Upload -->\r\n <div class=\"tw-flex tw-items-start tw-justify-center tw-p-0\">\r\n <cide-ele-file-input id=\"user_photo_id_cyfm\" formControlName=\"user_photo_id_cyfm\" accept=\"image/*\"\r\n [showPreview]=\"true\" [previewBoxMode]=\"true\" [showFileName]=\"false\" previewWidth=\"180px\"\r\n previewHeight=\"120px\" placeholderText=\"Upload Photo\" placeholderIcon=\"cloud_upload\" [autoUpload]=\"true\"\r\n [uploadData]=\"getProfilePhotoUploadData()\" (uploadSuccess)=\"onProfilePhotoUploadSuccess($event)\"\r\n (uploadError)=\"onProfilePhotoUploadError($event)\"\r\n (uploadProgressChange)=\"onProfilePhotoUploadProgress($event)\">\r\n </cide-ele-file-input>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <!-- Status Control -->\r\n <div class=\"tw-grid tw-grid-cols-1 tw-mb-2\">\r\n <div class=\"tw-p-2 tw-bg-blue-50 tw-border tw-border-blue-100 tw-rounded-lg\">\r\n <label\r\n class=\"tw-flex tw-flex-col tw-cursor-pointer tw-py-2 tw-bg-transparent tw-border-none tw-rounded-none tw-transition-all tw-duration-200 hover:tw-bg-blue-75\">\r\n <cide-ele-input type=\"checkbox\" label=\"Active User Status\" formControlName=\"user_isactive\"\r\n class=\"tw-h-5 tw-accent-blue-500 tw-rounded tw-mb-1\" />\r\n <span class=\"tw-font-semibold tw-text-gray-700 tw-text-base\"></span>\r\n <span class=\"tw-text-sm tw-text-gray-600 tw-mt-1 tw-leading-relaxed\">Enable this user account for system\r\n access and operations</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('auth') {\r\n <!-- Authentication Section -->\r\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\r\n <!-- Password Fields -->\r\n @if (shouldShowPasswordFields()) {\r\n <div class=\"tw-mb-4\">\r\n <!-- Password Fields Header for Edit Mode -->\r\n @if (isEditMode()) {\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-800\">Update Password</h6>\r\n <button type=\"button\"\r\n class=\"tw-px-3 tw-py-1 tw-bg-gray-100 tw-text-gray-600 tw-border tw-border-gray-300 tw-rounded-md tw-text-xs tw-font-medium hover:tw-bg-gray-200 tw-transition-colors\"\r\n (click)=\"cancelPasswordUpdate()\">\r\n Cancel Password Update\r\n </button>\r\n </div>\r\n }\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 md:tw-grid-cols-1 tw-gap-6\">\r\n <cide-ele-input id=\"user_password\" [label]=\"getPasswordFieldLabel()\" formControlName=\"user_password\"\r\n type=\"password\" placeholder=\"Enter secure password (min 8 characters)\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"user_confirm_password\" [label]=\"getPasswordConfirmLabel()\"\r\n formControlName=\"user_confirm_password\" type=\"password\" placeholder=\"Confirm your password\" size=\"md\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Password Update Option for Edit Mode -->\r\n @if (isEditMode() && !shouldShowPasswordFields()) {\r\n <div class=\"tw-mb-4\">\r\n <div class=\"tw-p-2 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-lg\">\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-blue-800 tw-mb-2\">Password Update</h6>\r\n <p class=\"tw-text-sm tw-text-blue-600 tw-mb-3\">Current password will be kept. Click below to change\r\n password.</p>\r\n\r\n @if (hasPasswordInput()) {\r\n <div\r\n class=\"tw-mb-3 tw-p-2 tw-bg-yellow-50 tw-border tw-border-yellow-200 tw-rounded tw-text-sm tw-text-yellow-700\">\r\n <cide-ele-icon variant=\"yellow\" size=\"xs\" class=\"tw-mr-1\">warning</cide-ele-icon>\r\n Password fields contain text. Click \"Change Password\" to manage existing input.\r\n </div>\r\n }\r\n\r\n <button type=\"button\"\r\n class=\"tw-px-4 tw-py-2 tw-bg-blue-100 tw-text-blue-700 tw-border tw-border-blue-300 tw-rounded-md tw-text-sm tw-font-medium hover:tw-bg-blue-200 tw-transition-colors\"\r\n (click)=\"triggerPasswordUpdate()\">\r\n @if (hasPasswordInput()) {\r\n Manage Password Fields\r\n } @else {\r\n Change Password\r\n }\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Password Options -->\r\n <div class=\"tw-grid tw-grid-cols-1 tw-gap-4 tw-mb-4\">\r\n <div class=\"tw-p-2 tw-bg-yellow-50 tw-border tw-border-yellow-100 tw-rounded-lg\">\r\n <label\r\n class=\"tw-flex tw-flex-col tw-gap-2 tw-cursor-pointer tw-py-2 tw-bg-transparent tw-border-none tw-rounded-none tw-transition-all tw-duration-200\">\r\n <cide-ele-input type=\"checkbox\" label=\"Force Password Change on Login\"\r\n formControlName=\"user_passwordchangeonlogin\" class=\"tw-h-5 tw-accent-yellow-500 tw-rounded tw-mb-1\" />\r\n <span class=\"tw-text-sm tw-text-gray-600 tw-mt-1 tw-leading-relaxed\">User will be required to change\r\n password on next login</span>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n }\r\n\r\n @case ('roles') {\r\n <!-- Entity, Roles & Permissions Mapping Section -->\r\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\r\n\r\n\r\n\r\n <!-- Important Note -->\r\n <div class=\"tw-bg-amber-50 tw-border tw-border-amber-200 tw-rounded-lg tw-p-2 tw-mb-4\">\r\n <div class=\"tw-flex tw-items-start tw-gap-3\">\r\n <cide-ele-icon variant=\"amber\" size=\"lg\">info</cide-ele-icon>\r\n <div class=\"tw-flex-1\">\r\n <h4 class=\"tw-text-sm tw-font-semibold tw-text-amber-800 tw-mb-1\">Entity-Role Based Access</h4>\r\n <p class=\"tw-text-sm tw-text-amber-700 tw-mb-2\">User access is completely managed through entity-role\r\n mappings below. At least one entity mapping is required for user access.</p>\r\n @if (hasDefaultEntity()) {\r\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-mt-2 tw-p-2 tw-bg-amber-100 tw-rounded\">\r\n <cide-ele-icon variant=\"amber\" size=\"sm\">star</cide-ele-icon>\r\n <span class=\"tw-text-sm tw-text-amber-800\">\r\n <strong>Default Entity:</strong> {{ getDefaultEntityName() }}\r\n </span>\r\n </div>\r\n } @else {\r\n <div class=\"tw-text-sm tw-text-amber-600 tw-mt-2 tw-italic\">\r\n \u26A0\uFE0F No default entity selected. Please set one entity as default.\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Entity-Role Mapping Section -->\r\n <div class=\"tw-flex tw-text-center tw-justify-between tw-items-center tw-mb-4\">\r\n <div>\r\n <h4 class=\"tw-text-sm tw-text-left tw-font-semibold tw-text-blue-900 tw-mb-1\">Entity-Role Mapping</h4>\r\n <p class=\"tw-text-sm tw-text-blue-700\">Map user to entities with specific roles and permissions</p>\r\n </div>\r\n <div class=\"tw-flex tw-flex-col tw-items-end\">\r\n <button cideEleButton variant=\"primary\" size=\"md\" type=\"button\" (click)=\"addEntityMapping()\"\r\n leftIcon=\"add\" [disabled]=\"isAllEntitiesMapped()\">\r\n Add Entity Mapping\r\n </button>\r\n\r\n @if (isAllEntitiesMapped()) {\r\n <div class=\"tw-mt-2 tw-p-2 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-md tw-max-w-xs\">\r\n <p class=\"tw-text-xs tw-text-blue-700\">\r\n <cide-ele-icon variant=\"info\" size=\"xs\" class=\"tw-mr-1\">info</cide-ele-icon>\r\n All available entities are already mapped.\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div formArrayName=\"core_entity_mapping\">\r\n @for (mapping of entityMappings(); track $index; let i = $index) {\r\n <div class=\"tw-bg-white tw-border tw-border-blue-200 tw-rounded-xl tw-mb-6 tw-overflow-hidden tw-shadow-sm\"\r\n [formGroupName]=\"i\">\r\n <div\r\n class=\"tw-bg-gradient-to-r tw-from-blue-50 tw-to-blue-100 tw-px-6 tw-py-3 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-blue-200\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <h5 class=\"tw-m-0 tw-text-blue-800 tw-text-sm tw-font-semibold\">Entity Mapping {{ i + 1 }}</h5>\r\n @if (mapping.syenm_isdefault) {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\r\n <cide-ele-icon variant=\"green\" size=\"xs\" class=\"tw-mr-1\">star</cide-ele-icon>\r\n Default\r\n </span>\r\n }\r\n </div>\r\n @if (!mapping?._id) {\r\n <button cideEleButton variant=\"danger\" size=\"sm\" type=\"button\" (click)=\"removeEntityMapping(i)\"\r\n leftIcon=\"delete\">\r\n Remove\r\n </button>\r\n }\r\n </div>\r\n\r\n <div>\r\n <!-- Entity and Role Selection -->\r\n <div class=\"tw-grid tw-px-3 tw-py-1 tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4 tw-mb-4\">\r\n <div>\r\n <cide-ele-select label=\"Entity *\" [options]=\"getFilteredEntityOptions(i)\"\r\n formControlName=\"syenm_entity_id_syen\" valueKey=\"_id\" labelKey=\"syen_name\"\r\n placeholder=\"Select entity\" size=\"md\" (change)=\"onEntityChange(i, $event)\">\r\n </cide-ele-select>\r\n\r\n @if (isAllEntitiesSelected(i)) {\r\n <div class=\"tw-mt-2 tw-p-2 tw-bg-yellow-50 tw-border tw-border-yellow-200 tw-rounded-md\">\r\n <p class=\"tw-text-xs tw-text-yellow-700\">\r\n <cide-ele-icon variant=\"warning\" size=\"xs\" class=\"tw-mr-1\">info</cide-ele-icon>\r\n All entities are already mapped. Remove another mapping to add this one.\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n <cide-ele-select label=\"Role for this Entity\" [options]=\"getRoleOptionsForEntity(i)\"\r\n formControlName=\"syenm_role_id_syusrol\" valueKey=\"_id\" labelKey=\"syusrol_role_name\"\r\n placeholder=\"Select role for this entity\" size=\"md\" (change)=\"onRoleChange(i, $event)\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n\r\n <!-- Entity-Specific Details and Active Period - All in One Row -->\r\n <div class=\"tw-grid tw-px-3 tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-4 tw-mb-4\">\r\n <cide-ele-select label=\"Department for this Entity\" [options]=\"getDepartmentOptionsForEntity(i)\"\r\n formControlName=\"syenm_department_id_sydept\" (change)=\"onDepartmentChange($event)\" valueKey=\"_id\"\r\n labelKey=\"sydept_name\" placeholder=\"Select department\" size=\"md\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-select label=\"Designation for this Entity\" [options]=\"getDesignationOptionsForEntity(i)\"\r\n valueKey=\"_id\" labelKey=\"sydsg_name\" formControlName=\"syenm_designation_id_sydsg\"\r\n placeholder=\"Select designation\" size=\"md\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Active From *\" [id]=\"'syenm_activefrom['+i+']'\"\r\n formControlName=\"syenm_activefrom\" type=\"date\" size=\"md\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Active Until\" [id]=\"'syenm_activeupto['+i+']'\"\r\n formControlName=\"syenm_activeupto\" type=\"date\" size=\"md\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Mapping Settings -->\r\n <div class=\"tw-grid tw-px-3 tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-4 tw-mb-4\">\r\n <div class=\"tw-p-2 tw-bg-green-50 tw-border tw-border-green-200 tw-rounded-lg\">\r\n <cide-ele-input type=\"checkbox\" label=\"Default Entity\" formControlName=\"syenm_isdefault\"\r\n (change)=\"onDefaultEntityChange(i, $event)\" class=\"tw-h-5 tw-accent-green-500\" />\r\n <span class=\"tw-text-xs tw-text-green-600 tw-block tw-mt-1\">Set as user's default entity (only one\r\n allowed)</span>\r\n </div>\r\n\r\n <div class=\"tw-p-2 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-lg\">\r\n <cide-ele-input type=\"checkbox\" label=\"Active Mapping\" formControlName=\"syenm_isactive\"\r\n class=\"tw-h-5 tw-accent-blue-500\" />\r\n <span class=\"tw-text-xs tw-text-blue-600 tw-block tw-mt-1\">Enable this entity mapping</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Menu Rights Grid for this Entity-Role -->\r\n <div class=\"tw-border-t tw-border-gray-200\">\r\n\r\n @if (getMenuRightsForMapping(i).length > 0) {\r\n <!-- Menu Rights Tree Grid -->\r\n\r\n <cide-ele-data-grid [config]=\"getMenuRightsGridConfig(i)\"\r\n [templateRenderers]=\"getMenuRightsTemplateRenderers(i)\"\r\n (gridEvent)=\"onMenuRightsGridEvent($event, i)\" class=\"tw-h-96 tw-w-full\">\r\n </cide-ele-data-grid>\r\n\r\n } @else {\r\n <div class=\"tw-text-center tw-py-8 tw-bg-gray-50 tw-border tw-border-gray-200 tw-rounded-lg\">\r\n <div class=\"tw-text-gray-400 tw-mb-3\">\r\n <cide-ele-icon variant=\"gray\" size=\"lg\">menu</cide-ele-icon>\r\n </div>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-600 tw-mb-2\">No Menu Rights Available</h6>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-mb-3 tw-text-center\">Select both entity and role to\r\n automatically load\r\n menu rights for this mapping.</p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (entityMappings().length === 0) {\r\n <div class=\"tw-text-center tw-py-8 tw-bg-white tw-border tw-border-blue-200 tw-rounded-lg\">\r\n <div class=\"tw-text-blue-400 tw-mb-3\">\r\n <cide-ele-icon variant=\"blue\" size=\"lg\">business</cide-ele-icon>\r\n </div>\r\n <h4 class=\"tw-text-sm tw-font-medium tw-text-blue-800 tw-mb-2\">No Entity Mappings</h4>\r\n <p class=\"tw-text-blue-600 tw-mb-4 tw-text-center\">Add entity mappings to assign specific roles and\r\n permissions for different entities.</p>\r\n <button class=\"tw-mx-auto\" cideEleButton variant=\"primary\" size=\"md\" type=\"button\"\r\n (click)=\"addEntityMapping()\" leftIcon=\"add\">\r\n Add First Entity Mapping\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @case ('addresses') {\r\n <!-- Contact Addresses Section -->\r\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\r\n <div class=\"tw-flex tw-justify-end\">\r\n <div class=\"tw-flex tw-justify-between tw-items-end tw-mb-2 tw-gap-4\">\r\n <button cideEleButton variant=\"primary\" size=\"md\" type=\"button\" (click)=\"addContactAddress()\"\r\n leftIcon=\"add\" [disabled]=\"!hasAddContactAddressRights()\">\r\n Add New Address\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div formArrayName=\"core_user_contact_addresses\">\r\n @for (address of contactAddresses(); track $index; let i = $index) {\r\n <div [formGroupName]=\"i\"\r\n class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-xl tw-mb-8 tw-overflow-hidden tw-transition-all tw-duration-300 hover:tw-shadow-lg tw-shadow-sm\">\r\n <div\r\n class=\"tw-bg-gradient-to-r tw-from-gray-50 tw-to-gray-100 tw-px-4 tw-py-2 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-gray-200\">\r\n <!-- Use address type as header instead of generic \"Address X\" -->\r\n <h4 class=\"tw-m-0 tw-text-gray-700 tw-text-sm tw-font-semibold tw-tracking-tight\">\r\n {{ getAddressTypeLabel(i) || ('Address ' + (i + 1)) }}\r\n </h4>\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n @if (isAddressOwner(i)) {\r\n <button cideEleButton variant=\"secondary\" size=\"xs\" type=\"button\" (click)=\"shareAddress(i)\"\r\n leftIcon=\"share\" class=\"tw-text-blue-600 hover:tw-text-blue-700\">\r\n Share\r\n </button>\r\n }\r\n @if (!address?._id) {\r\n <button cideEleButton variant=\"danger\" size=\"sm\" type=\"button\" (click)=\"removeContactAddress(i)\"\r\n leftIcon=\"delete\">\r\n Remove\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"tw-p-4\">\r\n <!-- Main Layout: Inputs on Left, Address Textarea on Right -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\r\n \r\n <!-- Left Side: Input Fields (3/4 width) -->\r\n <div class=\"lg:tw-col-span-3\">\r\n <!-- Row 1: Address Type, Contact Person -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3 tw-mb-3\">\r\n <cide-ele-select label=\"Address Type\" [options]=\"addressTypeOptions()\" id=\"sycad_address_type_id_sygms\"\r\n formControlName=\"sycad_address_type_id_sygms\" placeholder=\"Select type\" size=\"sm\"\r\n valueKey=\"_id\" labelKey=\"sygms_title\" (change)=\"onAddressTypeChange(i)\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Contact Person\" formControlName=\"sycad_contact_person_name\"\r\n placeholder=\"Enter contact person\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Row 2: Postal Code, City, State, Country -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-4 tw-gap-3\">\r\n <cide-ele-select label=\"Postal Code\" [options]=\"addressPostalCodes()[i] || []\"\r\n formControlName=\"sycad_contact_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\r\n [loading]=\"addressPostalCodesLoading()[i] || false\" (searchChange)=\"onPostalCodeSearch($event, i)\"\r\n (change)=\"onPostalCodeSelection($event, i)\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"City\" formControlName=\"sycad_contact_city_sypin\" placeholder=\"Enter city\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"State\" formControlName=\"sycad_contact_state_sypin\" placeholder=\"Enter state\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Country\" [options]=\"addressCountries()[i] || []\"\r\n formControlName=\"sycad_contact_country_syctr\" placeholder=\"Select country\" valueKey=\"_id\"\r\n labelKey=\"syctr_country_iso_name\" [searchable]=\"true\" (searchChange)=\"onCountrySearch($event, i)\"\r\n [loading]=\"addressCountriesLoading()[i] || false\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Side: Address Textarea (1/4 width, spans 2 rows) -->\r\n <div class=\"lg:tw-col-span-1 lg:tw-row-span-2 tw-flex tw-flex-col\">\r\n <cide-ele-textarea label=\"Complete Address\" formControlName=\"sycad_contact_address\"\r\n placeholder=\"Enter complete address with area, city, and landmarks\" [rows]=\"4\" size=\"sm\"\r\n class=\"tw-h-full\">\r\n </cide-ele-textarea>\r\n </div>\r\n </div>\r\n\r\n <!-- Contact Details: Primary Phone, Alt Phone, Fax, Primary Email in 4 columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\r\n <cide-ele-input label=\"Primary Phone\" formControlName=\"sycad_contact_phone\" type=\"tel\"\r\n placeholder=\"Primary phone\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Alternate Phone\" formControlName=\"sycad_contact_phone_alt\" type=\"tel\"\r\n placeholder=\"Alternate phone\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Fax Number\" formControlName=\"sycad_contact_fax\" placeholder=\"Fax number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Primary Email\" formControlName=\"sycad_contact_email\" type=\"email\"\r\n placeholder=\"Primary email\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Alternate Email in single row -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3\">\r\n <cide-ele-input label=\"Alternate Email\" formControlName=\"sycad_contact_email_alt\" type=\"email\"\r\n placeholder=\"Alternate email address\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('documents') {\r\n <!-- Documents Section -->\r\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\r\n <div class=\"tw-flex tw-justify-end tw-items-end tw-mb-2 tw-gap-4\">\r\n <button cideEleButton variant=\"primary\" size=\"md\" type=\"button\" (click)=\"addDocument()\" leftIcon=\"add\" [disabled]=\"!hasAddDocumentRights()\">\r\n Add Document\r\n </button>\r\n </div>\r\n <div formArrayName=\"core_user_documents\">\r\n @for (doc of documents(); track $index; let i = $index) {\r\n <div [formGroupName]=\"i\"\r\n class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-xl tw-mb-8 tw-overflow-hidden tw-transition-all tw-duration-300 hover:tw-shadow-lg tw-shadow-sm\">\r\n <div\r\n class=\"tw-bg-gradient-to-r tw-from-gray-50 tw-to-gray-100 tw-px-4 tw-py-2 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-gray-200\">\r\n <h4 class=\"tw-m-0 tw-text-gray-700 tw-text-sm tw-font-semibold tw-tracking-tight\">\r\n {{ getDocumentTypeLabel(i) || ('Document ' + (i + 1)) }}\r\n </h4>\r\n <div class=\"tw-flex tw-gap-2\">\r\n @if (doc?._id) {\r\n <button cideEleButton variant=\"secondary\" size=\"sm\" type=\"button\" (click)=\"shareDocumentRights(i)\"\r\n leftIcon=\"share\">\r\n Share\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"tw-p-4\">\r\n <!-- Main Layout: Inputs on Left, File Upload on Right -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-3 tw-gap-4\">\r\n \r\n <!-- Left Side: Document Information (2/3 width) -->\r\n <div class=\"lg:tw-col-span-2\">\r\n <!-- Row 1: Document Type, Document Number, Name as per Document -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-3 tw-mb-3\">\r\n <cide-ele-select label=\"Document Type\" [options]=\"documentTypeOptions()\"\r\n formControlName=\"syusd_document_type_id_sygms\" placeholder=\"Select type\" size=\"sm\"\r\n valueKey=\"_id\" labelKey=\"sygms_title\" (change)=\"onDocumentTypeChange(i)\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Document Number\" formControlName=\"syusd_doc_number\"\r\n placeholder=\"Document number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Name as per Document\" formControlName=\"syusd_doc_name_as_per_doc\"\r\n placeholder=\"Name on document\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Row 2: Issue Date, Expiry Date, Photo Group -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-3 tw-mb-3\">\r\n <cide-ele-input label=\"Issue Date\" formControlName=\"syusd_doc_issue_date\"\r\n [id]=\"'syusd_doc_issue_date['+i+']'\" type=\"date\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Expiry Date\" formControlName=\"syusd_doc_expiry_date\"\r\n [id]=\"'syusd_doc_expiry_date['+i+']'\" type=\"date\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Row 3: Verification Status, KYC Status -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3\">\r\n <cide-ele-select label=\"Verification Status\" [options]=\"documentVerificationStatusOptions()\"\r\n formControlName=\"syusd_doc_verification_status_id_sygms\" placeholder=\"Select status\"\r\n size=\"sm\" valueKey=\"_id\" labelKey=\"sygms_title\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-select label=\"KYC Status\" [options]=\"documentKycStatusOptions()\"\r\n formControlName=\"syusd_doc_kyc_status_id_sygms\" placeholder=\"Select KYC status\" size=\"sm\"\r\n valueKey=\"_id\" labelKey=\"sygms_title\">\r\n </cide-ele-select>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Side: File Upload (1/3 width) -->\r\n <div class=\"lg:tw-col-span-1\">\r\n <div class=\"tw-bg-gray-50 tw-border tw-border-gray-200 tw-rounded-lg tw-p-3 tw-h-full\">\r\n \r\n <!-- File Upload Input -->\r\n <cide-ele-file-input\r\n [id]=\"'document-files-' + i\"\r\n [multiple]=\"true\"\r\n formControlName=\"syusd_photo_group_id_cyfm\"\r\n [accept]=\"'.pdf,.jpg,.jpeg,.png,.doc,.docx'\"\r\n [autoUpload]=\"true\"\r\n [uploadData]=\"getDocumentUploadData(i)\"\r\n (change)=\"onDocumentFilesSelected($event, i)\"\r\n (uploadSuccess)=\"onDocumentUploadSuccess($event, i)\"\r\n (uploadError)=\"onDocumentUploadError($event, i)\"\r\n (uploadProgressChange)=\"onDocumentUploadProgress($event, i)\"\r\n class=\"tw-mb-3\"\r\n size=\"sm\">\r\n </cide-ele-file-input>\r\n\r\n <!-- Upload Status -->\r\n <!-- Upload status is now handled by the file input component itself -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('family') {\r\n <!-- Family Details Section - Compact Design -->\r\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\r\n <div class=\"tw-flex tw-justify-end tw-items-end tw-mb-3 tw-gap-4\">\r\n <button cideEleButton variant=\"primary\" size=\"sm\" type=\"button\" (click)=\"addFamilyDetail()\" leftIcon=\"add\" [disabled]=\"!hasAddFamilyDetailRights()\">\r\n Add Family Member\r\n </button>\r\n </div>\r\n\r\n <div formArrayName=\"core_user_family_details\">\r\n @for (family of familyDetails(); track $index; let i = $index) {\r\n <div [formGroupName]=\"i\"\r\n class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-lg tw-mb-4 tw-overflow-hidden tw-transition-all tw-duration-200 hover:tw-shadow-md tw-shadow-sm\">\r\n \r\n <!-- Compact Header -->\r\n <div class=\"tw-bg-gray-50 tw-px-4 tw-py-2 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-gray-200\">\r\n <h4 class=\"tw-m-0 tw-text-gray-700 tw-text-sm tw-font-medium\">Family Member {{ i + 1 }}</h4>\r\n <div class=\"tw-flex tw-gap-2\">\r\n @if (family?._id) {\r\n <button cideEleButton variant=\"secondary\" size=\"xs\" type=\"button\" (click)=\"shareFamilyDetailRights(i)\"\r\n leftIcon=\"share\">\r\n Share\r\n </button>\r\n }\r\n @if (!family?._id) {\r\n <button cideEleButton variant=\"danger\" size=\"xs\" type=\"button\" (click)=\"removeFamilyDetail(i)\" leftIcon=\"delete\">\r\n Remove\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n \r\n <!-- Compact Form Content - 3 inputs per row -->\r\n <div class=\"tw-p-4\">\r\n <!-- Row 1: Name, User, and Combined Relationship/Active Status (33.33% each) -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-3 tw-mb-3\">\r\n <cide-ele-input label=\"Family Member Name\" formControlName=\"syfdl_family_member_name\"\r\n placeholder=\"Enter family member full name\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Family Member User\" [options]=\"userOptions(i)\"\r\n formControlName=\"syfdl_family_member_id_user\" placeholder=\"Select family member user\" size=\"sm\"\r\n valueKey=\"_id\" labelKey=\"user_fullname\" [searchable]=\"true\"\r\n [loading]=\"userSearchLoading()[i] || false\" (searchChange)=\"onUserSearchChange($event, i)\"\r\n (change)=\"onUserSelectionChange($event, i)\">\r\n </cide-ele-select>\r\n\r\n <!-- Combined Relationship and Active Status (33.33%) -->\r\n <div class=\"tw-flex tw-flex-row tw-gap-2 tw-items-end\">\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-select label=\"Relationship\" [options]=\"relationshipOptions()\"\r\n formControlName=\"syfdl_relationship_id_sygms\" placeholder=\"Select relationship\" size=\"sm\"\r\n valueKey=\"_id\" labelKey=\"sygms_title\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <div class=\"tw-flex tw-items-center tw-pt-1 tw-flex-shrink-0\">\r\n <cide-ele-input formControlName=\"syfdl_isactive\" type=\"checkbox\" label=\"Active\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Row 2: Blood Group, DOB, and Phone -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 xl:tw-grid-cols-3 tw-gap-3 tw-mb-3\">\r\n <cide-ele-select label=\"Blood Group\" [options]=\"bloodGroupOptions()\"\r\n formControlName=\"syfdl_blood_group_sygms\" placeholder=\"Select blood group\" size=\"sm\" valueKey=\"_id\"\r\n labelKey=\"sygms_title\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Date of Birth\" formControlName=\"syfdl_family_member_dob\" type=\"date\" size=\"sm\"\r\n [id]=\"'syfdl_family_member_dob['+i+']'\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Contact Phone\" formControlName=\"syfdl_contact_phone\" type=\"tel\"\r\n placeholder=\"Enter contact phone\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Row 3: Email, Email ID, and Contact Number -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 xl:tw-grid-cols-3 tw-gap-3 tw-mb-3\">\r\n <cide-ele-input label=\"Contact Email\" formControlName=\"syfdl_contact_email\" type=\"email\"\r\n placeholder=\"Enter contact email\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Contact Email ID\" formControlName=\"syfdl_contact_email_id\" type=\"email\"\r\n placeholder=\"Enter contact email ID\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Contact Number\" formControlName=\"syfdl_contact_number\" type=\"tel\"\r\n placeholder=\"Enter contact number\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div\r\n class=\"tw-flex tw-justify-end tw-gap-4 tw-py-2 tw-bg-white tw-border-t tw-border-gray-200 tw-sticky tw-bottom-0 tw-z-10\">\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\r\n [disabled]=\"loading()\">\r\n Reset Form\r\n </button>\r\n\r\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || userMasterForm.invalid\"\r\n [loading]=\"loading()\" leftIcon=\"save\">\r\n Save User Master\r\n </button>\r\n </div>\r\n </form>\r\n</div>\r\n\r\n<!-- Template Renderers for Role Permissions Grid -->\r\n<ng-template #menuDetailsRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-min-w-0\">\r\n <!-- Menu Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n @if (row.syme_type === 'module') {\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">folder</cide-ele-icon>\r\n } @else if (row.syme_type === 'section') {\r\n <cide-ele-icon class=\"tw-text-green-600 tw-w-4 tw-h-4\">folder_open</cide-ele-icon>\r\n } @else if (row.syme_type === 'menu') {\r\n <cide-ele-icon class=\"tw-text-purple-600 tw-w-4 tw-h-4\">menu</cide-ele-icon>\r\n } @else {\r\n <cide-ele-icon class=\"tw-text-gray-600 tw-w-4 tw-h-4\">description</cide-ele-icon>\r\n }\r\n </div>\r\n\r\n <!-- Menu Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <div class=\"tw-text-xs tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"row.syme_title\">\r\n {{ row.syme_title || row.menu?.syme_title || row.menu?.syme_menu_name || 'Untitled' }}\r\n </div>\r\n <!-- Green pill indicator for parent menus with child permissions -->\r\n @if (row.syme_type === 'module' || row.syme_type === 'section') {\r\n @if (hasChildMenusWithPermissions(row._id)) {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800 tw-whitespace-nowrap\">\r\n Assigned\r\n </span>\r\n }\r\n }\r\n </div>\r\n @if (row.permission?.sygms_name) {\r\n <div class=\"tw-text-xs tw-text-blue-500 tw-truncate\" [title]=\"row.permission?.sygms_name\">\r\n {{ row.permission?.sygms_name }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Menu Type Renderer Template -->\r\n<ng-template #menuTypeRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-justify-center\">\r\n @if (row.syme_type === 'module') {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800\">\r\n Module\r\n </span>\r\n } @else if (row.syme_type === 'section') {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\r\n Section\r\n </span>\r\n } @else if (row.syme_type === 'menu') {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-purple-100 tw-text-purple-800\">\r\n Menu\r\n </span>\r\n } @else {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-gray-100 tw-text-gray-800\">\r\n {{ row.syme_type || 'Unknown' }}\r\n </span>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Permissions Checkbox Renderer Template -->\r\n<ng-template #permissionsCheckboxRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-flex-wrap tw-gap-2 tw-max-w-full\">\r\n @if (row.syme_type === 'menu' && row?.syme_permissions_id_sygms && row?.syme_permissions_id_sygms.length > 0) {\r\n @for (permissionId of row?.syme_permissions_id_sygms || []; track permissionId) {\r\n <div class=\"tw-flex tw-items-center tw-space-x-1\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-1\">\r\n <input type=\"checkbox\" [checked]=\"isPermissionSelected(row._id, permissionId)\" [disabled]=\"true\"\r\n class=\"tw-h-4 tw-w-4 tw-text-blue-600 tw-bg-gray-100 tw-border-gray-300 tw-rounded focus:tw-ring-blue-500\">\r\n <label class=\"tw-text-xs tw-text-gray-700\">\r\n {{ getPermissionById(permissionId)?.sygms_title || 'Unknown' }}\r\n </label>\r\n </div>\r\n </div>\r\n }\r\n } @else {\r\n <!-- Show green checkmark for parent menus with child permissions -->\r\n @if (row.syme_type === 'module' || row.syme_type === 'section' || row.syme_type === 'title') {\r\n @if (hasChildMenusWithPermissions(row._id)) {\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-w-6 tw-h-6 tw-bg-green-100 tw-rounded-full\">\r\n <cide-ele-icon class=\"tw-text-green-600\" size=\"xs\">\r\n check\r\n </cide-ele-icon>\r\n </div>\r\n } @else {\r\n <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\r\n }\r\n } @else {\r\n <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\r\n }\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Menu Rights Permissions Renderer Template -->\r\n<ng-template #menuRightsPermissionsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-flex-wrap tw-gap-2 tw-max-w-full\">\r\n <!-- Role Rights Display -->\r\n @if (row.role_rights && row.role_rights.length > 0) {\r\n <div class=\"tw-mb-2\">\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-mb-1\">Role Rights:</div>\r\n <div class=\"tw-flex tw-flex-wrap tw-gap-1\">\r\n @for (right of row.role_rights; track $index) {\r\n <span class=\"tw-inline-block tw-px-2 tw-py-1 tw-text-xs tw-bg-blue-100 tw-text-blue-800 tw-rounded\">\r\n {{ right }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n\r\n <!-- Exception Indicator -->\r\n @if (row.hasException) {\r\n <div class=\"tw-mt-2\">\r\n <span class=\"tw-inline-block tw-px-2 tw-py-1 tw-text-xs tw-bg-yellow-100 tw-text-yellow-800 tw-rounded\">\r\n Override\r\n </span>\r\n </div>\r\n } @else {\r\n <div class=\"tw-mt-2\">\r\n <span class=\"tw-text-xs tw-text-gray-400\">Default</span>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Permissions Renderer Template -->\r\n<ng-template #permissionsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-flex-wrap tw-gap-2 tw-max-w-full\">\r\n @if (row._permissionValues && Object.keys(row._permissionValues).length > 0) {\r\n @for (permissionId of Object.keys(row._permissionValues); track permissionId) {\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-input type=\"checkbox\" [ngModel]=\"row._permissionValues[permissionId].checked\"\r\n (ngModelChange)=\"onPermissionChangeSafe($event, row, permissionId)\"\r\n [id]=\"'permission-' + row._id + '-' + permissionId\" class=\"tw-h-4 tw-w-4\">\r\n </cide-ele-input>\r\n <label [for]=\"'permission-' + row._id + '-' + permissionId\" \r\n class=\"tw-text-xs tw-cursor-pointer\"\r\n [ngClass]=\"{\r\n 'tw-text-gray-700': row._permissionValues[permissionId].modified === row._permissionValues[permissionId].actual,\r\n 'tw-text-blue-600 tw-font-semibold': row._permissionValues[permissionId].modified !== row._permissionValues[permissionId].actual\r\n }\">\r\n {{ row._permissionValues[permissionId].permission?.sygms_title }}\r\n @if (row._permissionValues[permissionId].modified !== row._permissionValues[permissionId].actual) {\r\n <span class=\"tw-text-xs tw-text-orange-500 tw-ml-1\" title=\"Modified from role permission\">\r\n ({{ row._permissionValues[permissionId].actual ? '\u2713' : '\u2717' }})\r\n </span>\r\n }\r\n </label>\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-gray-400 tw-animate-spin\" size=\"xs\">refresh</cide-ele-icon>\r\n <span class=\"tw-text-xs tw-text-gray-400\">Loading permissions...</span>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>" }]
|
|
15314
|
-
}], ctorParameters: () => [] });
|
|
15400
|
+
}], ctorParameters: () => [], propDecorators: { menuDetailsRendererTemplate: [{ type: i0.ViewChild, args: ['menuDetailsRendererTemplate', { isSignal: true }] }], permissionsCheckboxRendererTemplate: [{ type: i0.ViewChild, args: ['permissionsCheckboxRendererTemplate', { isSignal: true }] }], menuTypeRendererTemplate: [{ type: i0.ViewChild, args: ['menuTypeRendererTemplate', { isSignal: true }] }], menuRightsPermissionsRendererTemplate: [{ type: i0.ViewChild, args: ['menuRightsPermissionsRendererTemplate', { isSignal: true }] }], permissionsRendererTemplate: [{ type: i0.ViewChild, args: ['permissionsRendererTemplate', { isSignal: true }] }] } });
|
|
15315
15401
|
|
|
15316
15402
|
var userCreate_component = /*#__PURE__*/Object.freeze({
|
|
15317
15403
|
__proto__: null,
|
|
@@ -15348,20 +15434,6 @@ class CideCoreUserListComponent {
|
|
|
15348
15434
|
sortColumn = signal('user_fullname', ...(ngDevMode ? [{ debugName: "sortColumn" }] : []));
|
|
15349
15435
|
sortDirection = signal('asc', ...(ngDevMode ? [{ debugName: "sortDirection" }] : []));
|
|
15350
15436
|
// Server-side filtering state
|
|
15351
|
-
selectedStatusFilter = signal('', ...(ngDevMode ? [{ debugName: "selectedStatusFilter" }] : []));
|
|
15352
|
-
// Getter and setter for ngModel compatibility
|
|
15353
|
-
get selectedStatusFilterValue() {
|
|
15354
|
-
return this.selectedStatusFilter();
|
|
15355
|
-
}
|
|
15356
|
-
set selectedStatusFilterValue(value) {
|
|
15357
|
-
this.selectedStatusFilter.set(value);
|
|
15358
|
-
}
|
|
15359
|
-
// Filter options
|
|
15360
|
-
statusFilterOptions = signal([
|
|
15361
|
-
{ value: '', label: 'All Status' },
|
|
15362
|
-
{ value: 'active', label: 'Active Users' },
|
|
15363
|
-
{ value: 'inactive', label: 'Inactive Users' }
|
|
15364
|
-
], ...(ngDevMode ? [{ debugName: "statusFilterOptions" }] : []));
|
|
15365
15437
|
// Grid configuration signal for server-side pagination
|
|
15366
15438
|
gridConfig = signal({
|
|
15367
15439
|
id: 'user-master-list-grid',
|
|
@@ -15666,11 +15738,6 @@ class CideCoreUserListComponent {
|
|
|
15666
15738
|
console.log('➕ NAVIGATION: Adding new user');
|
|
15667
15739
|
this.router.navigate(['/control-panel/user-master/create']);
|
|
15668
15740
|
}
|
|
15669
|
-
onFilterChange() {
|
|
15670
|
-
console.log('🔍 FILTER: Status filter changed to:', this.selectedStatusFilterValue);
|
|
15671
|
-
this.currentPage.set(1); // Reset to first page when filter changes
|
|
15672
|
-
this.loadUsersFromServer();
|
|
15673
|
-
}
|
|
15674
15741
|
// Helper methods for templates (avoid using new Date() in templates)
|
|
15675
15742
|
formatDate(dateString) {
|
|
15676
15743
|
if (!dateString)
|
|
@@ -15820,10 +15887,10 @@ class CideCoreUserListComponent {
|
|
|
15820
15887
|
break;
|
|
15821
15888
|
}
|
|
15822
15889
|
}
|
|
15823
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
15824
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideCoreUserListComponent, isStandalone: true, selector: "cide-core-user-list", viewQueries: [{ propertyName: "gridComponent", first: true, predicate: CideEleDataGridComponent, descendants: true }, { propertyName: "actionsTemplate", first: true, predicate: ["actionsTemplate"], descendants: true, static: true }, { propertyName: "userDetailsTemplate", first: true, predicate: ["userDetailsTemplate"], descendants: true, static: true }, { propertyName: "contactInfoTemplate", first: true, predicate: ["contactInfoTemplate"], descendants: true, static: true }, { propertyName: "organizationTemplate", first: true, predicate: ["organizationTemplate"], descendants: true, static: true }, { propertyName: "validityTemplate", first: true, predicate: ["validityTemplate"], descendants: true, static: true }, { propertyName: "statusTemplate", first: true, predicate: ["statusTemplate"], descendants: true, static: true }], ngImport: i0, template: "<!-- User Master List Container -->\r\n<div class=\"user-master-listing-container tw-bg-white tw-shadow-lg tw-rounded-lg tw-table tw-h-full\">\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-4 sm:tw-space-y-0\">\r\n\r\n <!-- Title -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\"> \r\n <cide-ele-icon class=\"tw-text-blue-600\">people</cide-ele-icon>\r\n <div>\r\n <h5 class=\"tw-text-sm tw-font-semibold tw-text-gray-900\">User Master Management</h5>\r\n <p class=\"tw-text-sm tw-text-gray-600\">Manage and view all user master records in the system</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <!-- Status Filter -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <label for=\"statusFilter\" class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Status:</label>\r\n <cide-ele-select id=\"statusFilter\" [options]=\"statusFilterOptions()\" [(ngModel)]=\"selectedStatusFilterValue\"\r\n (ngModelChange)=\"onFilterChange()\" class=\"tw-min-w-40\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Add User Button -->\r\n <button cideEleButton variant=\"primary\" size=\"sm\" (click)=\"onAddUser()\"\r\n class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-6 tw-h-5\">add</cide-ele-icon>\r\n Add User\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex\">\r\n <cide-ele-icon name=\"exclamation-triangle\" class=\"tw-text-red-400\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n <!-- Data Grid Component -->\r\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers\"\r\n [serverSidePagination]=\"true\" [totalServerItems]=\"totalItems()\" [currentServerPage]=\"currentPage()\"\r\n [currentServerPageSize]=\"pageSize()\" (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- Template Definitions for Grid Renderers -->\r\n\r\n<!-- User Details Template -->\r\n<ng-template #userDetailsTemplate let-value let-row=\"row\" let-column=\"column\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <div\r\n class=\"tw-flex-shrink-0 tw-w-12 tw-h-12 tw-bg-blue-100 tw-rounded-full tw-flex tw-items-center tw-justify-center\">\r\n <span class=\"tw-text-blue-600 tw-font-semibold tw-text-sm\">\r\n {{ getUserInitials(row.user_firstname, row.user_lastname) }}\r\n </span>\r\n </div>\r\n <div class=\"tw-flex-1 tw-min-w-0\">\r\n <p class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-truncate\" [title]=\"row.user_fullname\">\r\n {{ row.user_fullname || 'Unknown User' }}\r\n </p>\r\n <p class=\"tw-text-xs tw-text-blue-600 tw-truncate tw-font-medium\" [title]=\"'Username: ' + row.user_username\">\r\n @{{ row.user_username || 'No username' }}\r\n </p>\r\n <p class=\"tw-text-xs tw-text-gray-400 tw-truncate\" [title]=\"'ID: ' + row._id\">\r\n ID: {{ row._id?.substring(0, 8) }}...\r\n </p>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Contact Info Template -->\r\n<ng-template #contactInfoTemplate let-value let-row=\"row\" let-column=\"column\">\r\n <div class=\"tw-space-y-1\">\r\n <p class=\"tw-text-xs tw-text-gray-900 tw-flex tw-items-center\" [title]=\"'Email: ' + row.user_emailid\">\r\n <svg class=\"tw-flex-shrink-0 tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\r\n <path d=\"M2.003 5.884L10 9.882l7.997-3.998A2 2 0 0016 4H4a2 2 0 00-1.997 1.884z\" />\r\n <path d=\"M18 8.118l-8 4-8-4V14a2 2 0 002 2h12a2 2 0 002-2V8.118z\" />\r\n </svg>\r\n <span class=\"tw-truncate\">{{ row.user_emailid || 'No email' }}</span>\r\n </p>\r\n <p class=\"tw-text-xs tw-text-gray-600 tw-flex tw-items-center\" [title]=\"'Mobile: ' + row.user_mobileno\">\r\n <svg class=\"tw-flex-shrink-0 tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\r\n <path\r\n d=\"M2 3a1 1 0 011-1h2.153a1 1 0 01.986.836l.74 4.435a1 1 0 01-.54 1.06l-1.548.773a11.037 11.037 0 006.105 6.105l.774-1.548a1 1 0 011.059-.54l4.435.74a1 1 0 01.836.986V17a1 1 0 01-1 1h-2C7.82 18 2 12.18 2 5V3z\" />\r\n </svg>\r\n <span class=\"tw-truncate\">{{ row.user_mobileno || 'No mobile' }}</span>\r\n </p>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-flex tw-items-center\"\r\n [title]=\"'Password Change: ' + getPasswordChangeText(row.user_passwordchangeonlogin)\">\r\n <svg class=\"tw-flex-shrink-0 tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z\"\r\n clip-rule=\"evenodd\" />\r\n </svg>\r\n <span class=\"tw-truncate\">{{ getPasswordChangeText(row.user_passwordchangeonlogin) }}</span>\r\n </p>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n\r\n<!-- Validity Template -->\r\n<ng-template #validityTemplate let-value let-row=\"row\" let-column=\"column\">\r\n <div class=\"tw-text-center tw-space-y-1\">\r\n <p class=\"tw-text-xs tw-text-gray-900 tw-font-medium\">\r\n Validity managed per entity\r\n </p>\r\n <p class=\"tw-text-xs tw-text-gray-600\">\r\n Check entity mappings for details\r\n </p>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Status Template -->\r\n<ng-template #statusTemplate let-value let-row=\"row\" let-column=\"column\">\r\n <div class=\"tw-flex tw-justify-center\">\r\n @if (row.user_isactive) {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\r\n <svg class=\"tw-w-1.5 tw-h-1.5 tw-mr-1\" fill=\"currentColor\" viewBox=\"0 0 8 8\">\r\n <circle cx=\"4\" cy=\"4\" r=\"3\" />\r\n </svg>\r\n Active\r\n </span>\r\n } @else {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-red-100 tw-text-red-800\">\r\n <svg class=\"tw-w-1.5 tw-h-1.5 tw-mr-1\" fill=\"currentColor\" viewBox=\"0 0 8 8\">\r\n <circle cx=\"4\" cy=\"4\" r=\"3\" />\r\n </svg>\r\n Inactive\r\n </span>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Actions Template using cide-ele-dropdown -->\r\n<ng-template #actionsTemplate let-value let-row=\"row\" let-column=\"column\">\r\n <cide-ele-dropdown [items]=\"getDropdownItems(row)\" [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm', usePortal: true, minWidth: 200 }\" (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>", styles: [".user-master-listing-container{@apply tw-w-full tw-h-full;}:host{@apply tw-w-full tw-h-full tw-flex tw-flex-col;}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { 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: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey"], outputs: ["ngModelChange", "change", "searchChange"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }] });
|
|
15890
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
15891
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CideCoreUserListComponent, isStandalone: true, selector: "cide-core-user-list", viewQueries: [{ propertyName: "gridComponent", first: true, predicate: CideEleDataGridComponent, descendants: true }, { propertyName: "actionsTemplate", first: true, predicate: ["actionsTemplate"], descendants: true, static: true }, { propertyName: "userDetailsTemplate", first: true, predicate: ["userDetailsTemplate"], descendants: true, static: true }, { propertyName: "contactInfoTemplate", first: true, predicate: ["contactInfoTemplate"], descendants: true, static: true }, { propertyName: "organizationTemplate", first: true, predicate: ["organizationTemplate"], descendants: true, static: true }, { propertyName: "validityTemplate", first: true, predicate: ["validityTemplate"], descendants: true, static: true }, { propertyName: "statusTemplate", first: true, predicate: ["statusTemplate"], descendants: true, static: true }], ngImport: i0, template: "<!-- User Master List Container -->\r\n<div class=\"user-master-listing-container tw-bg-white tw-shadow-lg tw-rounded-lg tw-table tw-h-full\">\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-4 sm:tw-space-y-0\">\r\n\r\n <!-- Title -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\"> \r\n <cide-ele-icon class=\"tw-text-blue-600\">people</cide-ele-icon>\r\n <div>\r\n <h5 class=\"tw-text-sm tw-font-semibold tw-text-gray-900\">User Master Management</h5>\r\n <p class=\"tw-text-sm tw-text-gray-600\">Manage and view all user master records in the system</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <!-- Add User Button -->\r\n <button cideEleButton variant=\"primary\" size=\"sm\" (click)=\"onAddUser()\"\r\n class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-6 tw-h-5\">add</cide-ele-icon>\r\n Add User\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex\">\r\n <cide-ele-icon name=\"exclamation-triangle\" class=\"tw-text-red-400\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n <!-- Data Grid Component -->\r\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers\"\r\n [serverSidePagination]=\"true\" [totalServerItems]=\"totalItems()\" [currentServerPage]=\"currentPage()\"\r\n [currentServerPageSize]=\"pageSize()\" (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- Template Definitions for Grid Renderers -->\r\n\r\n<!-- User Details Template -->\r\n<ng-template #userDetailsTemplate let-value let-row=\"row\" let-column=\"column\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <div\r\n class=\"tw-flex-shrink-0 tw-w-12 tw-h-12 tw-bg-blue-100 tw-rounded-full tw-flex tw-items-center tw-justify-center\">\r\n <span class=\"tw-text-blue-600 tw-font-semibold tw-text-sm\">\r\n {{ getUserInitials(row.user_firstname, row.user_lastname) }}\r\n </span>\r\n </div>\r\n <div class=\"tw-flex-1 tw-min-w-0\">\r\n <p class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-truncate\" [title]=\"row.user_fullname\">\r\n {{ row.user_fullname || 'Unknown User' }}\r\n </p>\r\n <p class=\"tw-text-xs tw-text-blue-600 tw-truncate tw-font-medium\" [title]=\"'Username: ' + row.user_username\">\r\n @{{ row.user_username || 'No username' }}\r\n </p>\r\n <p class=\"tw-text-xs tw-text-gray-400 tw-truncate\" [title]=\"'ID: ' + row._id\">\r\n ID: {{ row._id?.substring(0, 8) }}...\r\n </p>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Contact Info Template -->\r\n<ng-template #contactInfoTemplate let-value let-row=\"row\" let-column=\"column\">\r\n <div class=\"tw-space-y-1\">\r\n <p class=\"tw-text-xs tw-text-gray-900 tw-flex tw-items-center\" [title]=\"'Email: ' + row.user_emailid\">\r\n <svg class=\"tw-flex-shrink-0 tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\r\n <path d=\"M2.003 5.884L10 9.882l7.997-3.998A2 2 0 0016 4H4a2 2 0 00-1.997 1.884z\" />\r\n <path d=\"M18 8.118l-8 4-8-4V14a2 2 0 002 2h12a2 2 0 002-2V8.118z\" />\r\n </svg>\r\n <span class=\"tw-truncate\">{{ row.user_emailid || 'No email' }}</span>\r\n </p>\r\n <p class=\"tw-text-xs tw-text-gray-600 tw-flex tw-items-center\" [title]=\"'Mobile: ' + row.user_mobileno\">\r\n <svg class=\"tw-flex-shrink-0 tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\r\n <path\r\n d=\"M2 3a1 1 0 011-1h2.153a1 1 0 01.986.836l.74 4.435a1 1 0 01-.54 1.06l-1.548.773a11.037 11.037 0 006.105 6.105l.774-1.548a1 1 0 011.059-.54l4.435.74a1 1 0 01.836.986V17a1 1 0 01-1 1h-2C7.82 18 2 12.18 2 5V3z\" />\r\n </svg>\r\n <span class=\"tw-truncate\">{{ row.user_mobileno || 'No mobile' }}</span>\r\n </p>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-flex tw-items-center\"\r\n [title]=\"'Password Change: ' + getPasswordChangeText(row.user_passwordchangeonlogin)\">\r\n <svg class=\"tw-flex-shrink-0 tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z\"\r\n clip-rule=\"evenodd\" />\r\n </svg>\r\n <span class=\"tw-truncate\">{{ getPasswordChangeText(row.user_passwordchangeonlogin) }}</span>\r\n </p>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n\r\n<!-- Validity Template -->\r\n<ng-template #validityTemplate let-value let-row=\"row\" let-column=\"column\">\r\n <div class=\"tw-text-center tw-space-y-1\">\r\n <p class=\"tw-text-xs tw-text-gray-900 tw-font-medium\">\r\n Validity managed per entity\r\n </p>\r\n <p class=\"tw-text-xs tw-text-gray-600\">\r\n Check entity mappings for details\r\n </p>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Status Template -->\r\n<ng-template #statusTemplate let-value let-row=\"row\" let-column=\"column\">\r\n <div class=\"tw-flex tw-justify-center\">\r\n @if (row.user_isactive) {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\r\n <svg class=\"tw-w-1.5 tw-h-1.5 tw-mr-1\" fill=\"currentColor\" viewBox=\"0 0 8 8\">\r\n <circle cx=\"4\" cy=\"4\" r=\"3\" />\r\n </svg>\r\n Active\r\n </span>\r\n } @else {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-red-100 tw-text-red-800\">\r\n <svg class=\"tw-w-1.5 tw-h-1.5 tw-mr-1\" fill=\"currentColor\" viewBox=\"0 0 8 8\">\r\n <circle cx=\"4\" cy=\"4\" r=\"3\" />\r\n </svg>\r\n Inactive\r\n </span>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Actions Template using cide-ele-dropdown -->\r\n<ng-template #actionsTemplate let-value let-row=\"row\" let-column=\"column\">\r\n <cide-ele-dropdown [items]=\"getDropdownItems(row)\" [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm', usePortal: true, minWidth: 200 }\" (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>", styles: [".user-master-listing-container{@apply tw-w-full tw-h-full;}:host{@apply tw-w-full tw-h-full tw-flex tw-flex-col;}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { 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: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }] });
|
|
15825
15892
|
}
|
|
15826
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
15893
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserListComponent, decorators: [{
|
|
15827
15894
|
type: Component,
|
|
15828
15895
|
args: [{ selector: 'cide-core-user-list', standalone: true, imports: [
|
|
15829
15896
|
CommonModule,
|
|
@@ -15833,7 +15900,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
15833
15900
|
CideSelectComponent,
|
|
15834
15901
|
CideEleDataGridComponent,
|
|
15835
15902
|
CideEleDropdownComponent
|
|
15836
|
-
], template: "<!-- User Master List Container -->\r\n<div class=\"user-master-listing-container tw-bg-white tw-shadow-lg tw-rounded-lg tw-table tw-h-full\">\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-4 sm:tw-space-y-0\">\r\n\r\n <!-- Title -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\"> \r\n <cide-ele-icon class=\"tw-text-blue-600\">people</cide-ele-icon>\r\n <div>\r\n <h5 class=\"tw-text-sm tw-font-semibold tw-text-gray-900\">User Master Management</h5>\r\n <p class=\"tw-text-sm tw-text-gray-600\">Manage and view all user master records in the system</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <!--
|
|
15903
|
+
], template: "<!-- User Master List Container -->\r\n<div class=\"user-master-listing-container tw-bg-white tw-shadow-lg tw-rounded-lg tw-table tw-h-full\">\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-4 sm:tw-space-y-0\">\r\n\r\n <!-- Title -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\"> \r\n <cide-ele-icon class=\"tw-text-blue-600\">people</cide-ele-icon>\r\n <div>\r\n <h5 class=\"tw-text-sm tw-font-semibold tw-text-gray-900\">User Master Management</h5>\r\n <p class=\"tw-text-sm tw-text-gray-600\">Manage and view all user master records in the system</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <!-- Add User Button -->\r\n <button cideEleButton variant=\"primary\" size=\"sm\" (click)=\"onAddUser()\"\r\n class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-6 tw-h-5\">add</cide-ele-icon>\r\n Add User\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex\">\r\n <cide-ele-icon name=\"exclamation-triangle\" class=\"tw-text-red-400\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n <!-- Data Grid Component -->\r\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers\"\r\n [serverSidePagination]=\"true\" [totalServerItems]=\"totalItems()\" [currentServerPage]=\"currentPage()\"\r\n [currentServerPageSize]=\"pageSize()\" (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- Template Definitions for Grid Renderers -->\r\n\r\n<!-- User Details Template -->\r\n<ng-template #userDetailsTemplate let-value let-row=\"row\" let-column=\"column\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <div\r\n class=\"tw-flex-shrink-0 tw-w-12 tw-h-12 tw-bg-blue-100 tw-rounded-full tw-flex tw-items-center tw-justify-center\">\r\n <span class=\"tw-text-blue-600 tw-font-semibold tw-text-sm\">\r\n {{ getUserInitials(row.user_firstname, row.user_lastname) }}\r\n </span>\r\n </div>\r\n <div class=\"tw-flex-1 tw-min-w-0\">\r\n <p class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-truncate\" [title]=\"row.user_fullname\">\r\n {{ row.user_fullname || 'Unknown User' }}\r\n </p>\r\n <p class=\"tw-text-xs tw-text-blue-600 tw-truncate tw-font-medium\" [title]=\"'Username: ' + row.user_username\">\r\n @{{ row.user_username || 'No username' }}\r\n </p>\r\n <p class=\"tw-text-xs tw-text-gray-400 tw-truncate\" [title]=\"'ID: ' + row._id\">\r\n ID: {{ row._id?.substring(0, 8) }}...\r\n </p>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Contact Info Template -->\r\n<ng-template #contactInfoTemplate let-value let-row=\"row\" let-column=\"column\">\r\n <div class=\"tw-space-y-1\">\r\n <p class=\"tw-text-xs tw-text-gray-900 tw-flex tw-items-center\" [title]=\"'Email: ' + row.user_emailid\">\r\n <svg class=\"tw-flex-shrink-0 tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\r\n <path d=\"M2.003 5.884L10 9.882l7.997-3.998A2 2 0 0016 4H4a2 2 0 00-1.997 1.884z\" />\r\n <path d=\"M18 8.118l-8 4-8-4V14a2 2 0 002 2h12a2 2 0 002-2V8.118z\" />\r\n </svg>\r\n <span class=\"tw-truncate\">{{ row.user_emailid || 'No email' }}</span>\r\n </p>\r\n <p class=\"tw-text-xs tw-text-gray-600 tw-flex tw-items-center\" [title]=\"'Mobile: ' + row.user_mobileno\">\r\n <svg class=\"tw-flex-shrink-0 tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\r\n <path\r\n d=\"M2 3a1 1 0 011-1h2.153a1 1 0 01.986.836l.74 4.435a1 1 0 01-.54 1.06l-1.548.773a11.037 11.037 0 006.105 6.105l.774-1.548a1 1 0 011.059-.54l4.435.74a1 1 0 01.836.986V17a1 1 0 01-1 1h-2C7.82 18 2 12.18 2 5V3z\" />\r\n </svg>\r\n <span class=\"tw-truncate\">{{ row.user_mobileno || 'No mobile' }}</span>\r\n </p>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-flex tw-items-center\"\r\n [title]=\"'Password Change: ' + getPasswordChangeText(row.user_passwordchangeonlogin)\">\r\n <svg class=\"tw-flex-shrink-0 tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z\"\r\n clip-rule=\"evenodd\" />\r\n </svg>\r\n <span class=\"tw-truncate\">{{ getPasswordChangeText(row.user_passwordchangeonlogin) }}</span>\r\n </p>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n\r\n<!-- Validity Template -->\r\n<ng-template #validityTemplate let-value let-row=\"row\" let-column=\"column\">\r\n <div class=\"tw-text-center tw-space-y-1\">\r\n <p class=\"tw-text-xs tw-text-gray-900 tw-font-medium\">\r\n Validity managed per entity\r\n </p>\r\n <p class=\"tw-text-xs tw-text-gray-600\">\r\n Check entity mappings for details\r\n </p>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Status Template -->\r\n<ng-template #statusTemplate let-value let-row=\"row\" let-column=\"column\">\r\n <div class=\"tw-flex tw-justify-center\">\r\n @if (row.user_isactive) {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\r\n <svg class=\"tw-w-1.5 tw-h-1.5 tw-mr-1\" fill=\"currentColor\" viewBox=\"0 0 8 8\">\r\n <circle cx=\"4\" cy=\"4\" r=\"3\" />\r\n </svg>\r\n Active\r\n </span>\r\n } @else {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-red-100 tw-text-red-800\">\r\n <svg class=\"tw-w-1.5 tw-h-1.5 tw-mr-1\" fill=\"currentColor\" viewBox=\"0 0 8 8\">\r\n <circle cx=\"4\" cy=\"4\" r=\"3\" />\r\n </svg>\r\n Inactive\r\n </span>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Actions Template using cide-ele-dropdown -->\r\n<ng-template #actionsTemplate let-value let-row=\"row\" let-column=\"column\">\r\n <cide-ele-dropdown [items]=\"getDropdownItems(row)\" [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm', usePortal: true, minWidth: 200 }\" (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>", styles: [".user-master-listing-container{@apply tw-w-full tw-h-full;}:host{@apply tw-w-full tw-h-full tw-flex tw-flex-col;}\n"] }]
|
|
15837
15904
|
}], propDecorators: { gridComponent: [{
|
|
15838
15905
|
type: ViewChild,
|
|
15839
15906
|
args: [CideEleDataGridComponent]
|
|
@@ -15919,8 +15986,8 @@ class CideCoreUserAttributesComponent {
|
|
|
15919
15986
|
goBack() {
|
|
15920
15987
|
this.router.navigate(['/admin/user-master']);
|
|
15921
15988
|
}
|
|
15922
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
15923
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.
|
|
15989
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserAttributesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
15990
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: CideCoreUserAttributesComponent, isStandalone: true, selector: "cide-core-user-attributes", ngImport: i0, template: `
|
|
15924
15991
|
<div class="p-5">
|
|
15925
15992
|
<div class="bg-white rounded-lg shadow-md mb-5">
|
|
15926
15993
|
<div class="p-5 border-b border-gray-200 flex justify-between items-center">
|
|
@@ -16054,7 +16121,7 @@ class CideCoreUserAttributesComponent {
|
|
|
16054
16121
|
</div>
|
|
16055
16122
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CideFormFieldErrorComponent, selector: "cide-form-field-error", inputs: ["control", "formGroup", "fieldName", "customMessages"] }] });
|
|
16056
16123
|
}
|
|
16057
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
16124
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserAttributesComponent, decorators: [{
|
|
16058
16125
|
type: Component,
|
|
16059
16126
|
args: [{
|
|
16060
16127
|
selector: 'cide-core-user-attributes',
|
|
@@ -16261,8 +16328,8 @@ class CideCoreUserContactAddressesComponent {
|
|
|
16261
16328
|
goBack() {
|
|
16262
16329
|
this.router.navigate(['/admin/user-master']);
|
|
16263
16330
|
}
|
|
16264
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
16265
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.
|
|
16331
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserContactAddressesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
16332
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CideCoreUserContactAddressesComponent, isStandalone: true, selector: "cide-core-user-contact-addresses", ngImport: i0, template: `
|
|
16266
16333
|
<div class="p-5">
|
|
16267
16334
|
<div class="bg-white rounded-lg shadow-md mb-5">
|
|
16268
16335
|
<div class="p-5 border-b border-gray-200 flex justify-between items-center">
|
|
@@ -16515,7 +16582,7 @@ class CideCoreUserContactAddressesComponent {
|
|
|
16515
16582
|
</div>
|
|
16516
16583
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CideFormFieldErrorComponent, selector: "cide-form-field-error", inputs: ["control", "formGroup", "fieldName", "customMessages"] }] });
|
|
16517
16584
|
}
|
|
16518
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
16585
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserContactAddressesComponent, decorators: [{
|
|
16519
16586
|
type: Component,
|
|
16520
16587
|
args: [{
|
|
16521
16588
|
selector: 'cide-core-user-contact-addresses',
|
|
@@ -16837,8 +16904,8 @@ class CideCoreUserDocumentsComponent {
|
|
|
16837
16904
|
goBack() {
|
|
16838
16905
|
this.router.navigate(['/admin/user-master']);
|
|
16839
16906
|
}
|
|
16840
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
16841
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.
|
|
16907
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserDocumentsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
16908
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: CideCoreUserDocumentsComponent, isStandalone: true, selector: "cide-core-user-documents", ngImport: i0, template: `
|
|
16842
16909
|
<div class="p-5">
|
|
16843
16910
|
<div class="bg-white rounded-lg shadow-md mb-5">
|
|
16844
16911
|
<div class="p-5 border-b border-gray-200 flex justify-between items-center">
|
|
@@ -17028,7 +17095,7 @@ class CideCoreUserDocumentsComponent {
|
|
|
17028
17095
|
</div>
|
|
17029
17096
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CideFormFieldErrorComponent, selector: "cide-form-field-error", inputs: ["control", "formGroup", "fieldName", "customMessages"] }] });
|
|
17030
17097
|
}
|
|
17031
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
17098
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserDocumentsComponent, decorators: [{
|
|
17032
17099
|
type: Component,
|
|
17033
17100
|
args: [{
|
|
17034
17101
|
selector: 'cide-core-user-documents',
|
|
@@ -17296,8 +17363,8 @@ class CideCoreUserEntityAccessComponent {
|
|
|
17296
17363
|
goBack() {
|
|
17297
17364
|
this.router.navigate(['/admin/user-master']);
|
|
17298
17365
|
}
|
|
17299
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
17300
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.
|
|
17366
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserEntityAccessComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
17367
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CideCoreUserEntityAccessComponent, isStandalone: true, selector: "cide-core-user-entity-access", ngImport: i0, template: `
|
|
17301
17368
|
<div class="p-5">
|
|
17302
17369
|
<div class="bg-white rounded-lg shadow-md mb-5">
|
|
17303
17370
|
<div class="p-5 border-b border-gray-200 flex justify-between items-center">
|
|
@@ -17462,7 +17529,7 @@ class CideCoreUserEntityAccessComponent {
|
|
|
17462
17529
|
</div>
|
|
17463
17530
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
|
|
17464
17531
|
}
|
|
17465
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
17532
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserEntityAccessComponent, decorators: [{
|
|
17466
17533
|
type: Component,
|
|
17467
17534
|
args: [{
|
|
17468
17535
|
selector: 'cide-core-user-entity-access',
|
|
@@ -17694,8 +17761,8 @@ class CideCoreUserFamilyDetailsComponent {
|
|
|
17694
17761
|
goBack() {
|
|
17695
17762
|
this.router.navigate(['/admin/user-master']);
|
|
17696
17763
|
}
|
|
17697
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
17698
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.
|
|
17764
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserFamilyDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
17765
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: CideCoreUserFamilyDetailsComponent, isStandalone: true, selector: "cide-core-user-family-details", ngImport: i0, template: `
|
|
17699
17766
|
<div class="p-5">
|
|
17700
17767
|
<div class="bg-white rounded-lg shadow-md mb-5">
|
|
17701
17768
|
<div class="p-5 border-b border-gray-200 flex justify-between items-center">
|
|
@@ -17860,7 +17927,7 @@ class CideCoreUserFamilyDetailsComponent {
|
|
|
17860
17927
|
</div>
|
|
17861
17928
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CideFormFieldErrorComponent, selector: "cide-form-field-error", inputs: ["control", "formGroup", "fieldName", "customMessages"] }] });
|
|
17862
17929
|
}
|
|
17863
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
17930
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserFamilyDetailsComponent, decorators: [{
|
|
17864
17931
|
type: Component,
|
|
17865
17932
|
args: [{
|
|
17866
17933
|
selector: 'cide-core-user-family-details',
|
|
@@ -18481,10 +18548,10 @@ class CideCoreUserRoleListComponent {
|
|
|
18481
18548
|
}
|
|
18482
18549
|
return entity || 'N/A';
|
|
18483
18550
|
}
|
|
18484
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
18485
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.
|
|
18551
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserRoleListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
18552
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CideCoreUserRoleListComponent, isStandalone: true, selector: "cide-core-user-role-list", viewQueries: [{ propertyName: "userRoleDetailsRendererTemplate", first: true, predicate: ["userRoleDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "entityRendererTemplate", first: true, predicate: ["entityRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "statusRendererTemplate", first: true, predicate: ["statusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- User Role List with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_user_role' }\">\r\n <div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n\r\n <!-- Title -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">admin_panel_settings</cide-ele-icon>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">User Role Management</h5>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <button cideEleButton variant=\"primary\" size=\"md\" leftIcon=\"add\" (click)=\"createUserRole()\">\r\n Create User Role\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\"\r\n class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n\r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Template Renderers -->\r\n <ng-template #userRoleDetailsRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-flex-col tw-w-full\">\r\n <div class=\"tw-font-medium tw-text-gray-900\">{{ row.syusrol_role_name || 'N/A' }}</div>\r\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate\">{{ row.syusrol_role_description || 'No description' }}</div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #entityRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-flex-col tw-text-sm\">\r\n <span class=\"tw-text-gray-900\">{{ getEntityName(row.syusrol_role_entity_id_syen) }}</span>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #statusRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-justify-center\">\r\n <!-- Active/Inactive Status Badge -->\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-justify-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-text-center\"\r\n [ngClass]=\"getStatusBadgeClass(row)\">\r\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">\r\n {{ row.syusrol_isactive ? 'check_circle' : 'cancel' }}\r\n </cide-ele-icon>\r\n {{ getStatusText(row) }}\r\n </span>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #actionsDropdownRendererTemplate let-row=\"row\">\r\n <cide-ele-dropdown [items]=\"getActionDropdownItems(row)\" [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n </ng-template>\r\n</cide-lyt-shared-wrapper>", styles: [".user-role-listing-container{@apply tw-w-full tw-h-full;}:host{@apply tw-w-full tw-h-full tw-flex tw-flex-col;}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { 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: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
|
|
18486
18553
|
}
|
|
18487
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
18554
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserRoleListComponent, decorators: [{
|
|
18488
18555
|
type: Component,
|
|
18489
18556
|
args: [{ selector: 'cide-core-user-role-list', standalone: true, imports: [
|
|
18490
18557
|
CommonModule,
|
|
@@ -18495,7 +18562,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
18495
18562
|
CideEleDropdownComponent,
|
|
18496
18563
|
CideLytSharedWrapperComponent
|
|
18497
18564
|
], template: "<!-- User Role List with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_user_role' }\">\r\n <div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n\r\n <!-- Title -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">admin_panel_settings</cide-ele-icon>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">User Role Management</h5>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <button cideEleButton variant=\"primary\" size=\"md\" leftIcon=\"add\" (click)=\"createUserRole()\">\r\n Create User Role\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\"\r\n class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n\r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Template Renderers -->\r\n <ng-template #userRoleDetailsRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-flex-col tw-w-full\">\r\n <div class=\"tw-font-medium tw-text-gray-900\">{{ row.syusrol_role_name || 'N/A' }}</div>\r\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate\">{{ row.syusrol_role_description || 'No description' }}</div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #entityRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-flex-col tw-text-sm\">\r\n <span class=\"tw-text-gray-900\">{{ getEntityName(row.syusrol_role_entity_id_syen) }}</span>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #statusRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-justify-center\">\r\n <!-- Active/Inactive Status Badge -->\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-justify-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-text-center\"\r\n [ngClass]=\"getStatusBadgeClass(row)\">\r\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">\r\n {{ row.syusrol_isactive ? 'check_circle' : 'cancel' }}\r\n </cide-ele-icon>\r\n {{ getStatusText(row) }}\r\n </span>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #actionsDropdownRendererTemplate let-row=\"row\">\r\n <cide-ele-dropdown [items]=\"getActionDropdownItems(row)\" [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n </ng-template>\r\n</cide-lyt-shared-wrapper>", styles: [".user-role-listing-container{@apply tw-w-full tw-h-full;}:host{@apply tw-w-full tw-h-full tw-flex tw-flex-col;}\n"] }]
|
|
18498
|
-
}] });
|
|
18565
|
+
}], propDecorators: { userRoleDetailsRendererTemplate: [{ type: i0.ViewChild, args: ['userRoleDetailsRendererTemplate', { isSignal: true }] }], entityRendererTemplate: [{ type: i0.ViewChild, args: ['entityRendererTemplate', { isSignal: true }] }], statusRendererTemplate: [{ type: i0.ViewChild, args: ['statusRendererTemplate', { isSignal: true }] }], actionsDropdownRendererTemplate: [{ type: i0.ViewChild, args: ['actionsDropdownRendererTemplate', { isSignal: true }] }] } });
|
|
18499
18566
|
|
|
18500
18567
|
var userRoleList_component = /*#__PURE__*/Object.freeze({
|
|
18501
18568
|
__proto__: null,
|
|
@@ -19390,10 +19457,10 @@ class CideCoreUserRoleFormComponent {
|
|
|
19390
19457
|
console.log('🔍 Change detection triggered after auto-checking parent view rights');
|
|
19391
19458
|
}, 100);
|
|
19392
19459
|
}
|
|
19393
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
19394
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideCoreUserRoleFormComponent, isStandalone: true, selector: "cide-core-user-role-form", viewQueries: [{ propertyName: "menuDetailsRendererTemplate", first: true, predicate: ["menuDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "permissionsCheckboxRendererTemplate", first: true, predicate: ["permissionsCheckboxRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- User Role Form Container -->\r\n<div class=\"tw-w-full tw-h-full\">\r\n <form class=\"tw-max-w-7xl tw-mx-auto tw-bg-transparent tw-h-full tw-flex tw-flex-col\" [formGroup]=\"userRoleForm\" [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mb-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <!-- User Role Basic Information Section -->\r\n <div class=\"tw-py-2 tw-border-b-0 tw-mb-0 tw-p-3\">\r\n\r\n <!-- Basic Fields -->\r\n <div class=\"tw-grid tw-grid-cols-1 xl:tw-grid-cols-2 lg:tw-grid-cols-2 md:tw-grid-cols-1 tw-gap-6 tw-mb-0\">\r\n <!-- Left Column: Role Name -->\r\n <div>\r\n <cide-ele-input \r\n id=\"syusrol_role_name\" \r\n label=\"Role Name *\" \r\n formControlName=\"syusrol_role_name\"\r\n placeholder=\"Enter role name\" \r\n [maxlength]=\"50\" \r\n size=\"md\"\r\n [disabled]=\"isViewMode()\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Right Column: Description -->\r\n <div>\r\n <cide-ele-textarea \r\n id=\"syusrol_role_description\" \r\n label=\"Description *\" \r\n formControlName=\"syusrol_role_description\"\r\n placeholder=\"Enter role description\" \r\n rows=\"3\"\r\n [maxlength]=\"200\"\r\n [disabled]=\"isViewMode()\">\r\n </cide-ele-textarea>\r\n </div>\r\n </div>\r\n\r\n <!-- Active Status Row -->\r\n <div class=\"tw-mb-0\">\r\n <cide-ele-input \r\n id=\"syusrol_isactive\" \r\n label=\"Active Status\" \r\n formControlName=\"syusrol_isactive\"\r\n type=\"checkbox\" \r\n size=\"md\"\r\n [disabled]=\"isViewMode()\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Role Rights Section -->\r\n <div class=\"tw-pt-2 tw-border-b-0 tw-mb-0 tw-flex-1 tw-flex tw-flex-col tw-min-h-0\">\r\n\r\n <!-- Role Rights Grid -->\r\n <div class=\"tw-flex-1 tw-min-h-0 tw-w-full\" style=\"height: 400px; max-height: 900px;\">\r\n <cide-ele-data-grid \r\n [config]=\"roleRightsGridConfig()\" \r\n [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onRoleRightsGridEvent($event)\"\r\n class=\"tw-h-full tw-w-full\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n <!-- Role Rights Form (Hidden but functional) -->\r\n <div [formGroup]=\"roleRightsForm\" class=\"tw-hidden\">\r\n <div formArrayName=\"roleRights\">\r\n @for (right of roleRightsArray.controls; track $index; let i = $index) {\r\n <div [formGroupName]=\"i\">\r\n <cide-ele-select formControlName=\"syusrgt_menu_id_syme\">\r\n <option value=\"\">Select Menu</option>\r\n @for (menu of menus(); track menu._id) {\r\n <option [value]=\"menu._id\">{{ menu.syme_title }}</option>\r\n }\r\n </cide-ele-select>\r\n <cide-ele-select formControlName=\"syusrgt_role_permissions_id_sygms\">\r\n <option value=\"\">Select Permission</option>\r\n @for (permission of permissions(); track permission._id) {\r\n <option [value]=\"permission._id\">{{ permission.sygms_name }}</option>\r\n }\r\n </cide-ele-select>\r\n <cide-ele-input formControlName=\"syusrgt_isactive\" type=\"checkbox\"></cide-ele-input>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-flex tw-justify-between tw-items-center tw-p-3 tw-gap-4 tw-py-2 tw-bg-white tw-border-t tw-border-gray-200 tw-sticky tw-bottom-0 tw-z-10\">\r\n <!-- Error Message (Left Side) -->\r\n <cide-form-field-error [formGroup]=\"userRoleForm\"></cide-form-field-error>\r\n \r\n <!-- Action Buttons (Right Side) -->\r\n <div class=\"tw-flex tw-gap-4\">\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"onCancel()\" leftIcon=\"arrow_back\"\r\n [disabled]=\"loading()\">\r\n {{ isViewMode() ? 'Close' : 'Cancel' }}\r\n </button>\r\n\r\n @if (!isViewMode()) {\r\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || !isFormReadyToSave\"\r\n [loading]=\"loading()\" leftIcon=\"save\">\r\n {{ submitButtonText }}\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </form>\r\n</div>\r\n\r\n<!-- Template Renderers for Role Rights Grid -->\r\n<ng-template #menuDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Menu Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon \r\n class=\"tw-text-gray-400\" \r\n size=\"xs\">\r\n {{ row.syme_icon || 'folder_open' }}\r\n </cide-ele-icon>\r\n </div>\r\n \r\n <!-- Menu Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <div class=\"tw-text-xs tw-font-medium tw-text-gray-900 tw-truncate\" \r\n [title]=\"row.syme_title\">\r\n {{ row.syme_title || row.menu?.syme_title || row.menu?.syme_menu_name || 'Untitled' }}\r\n </div>\r\n <!-- Green pill indicator for parent menus with child permissions -->\r\n @if (row.syme_type === 'module' || row.syme_type === 'section') {\r\n @if (hasChildMenusWithPermissions(row._id)) {\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800 tw-whitespace-nowrap\">\r\n Assigned\r\n </span>\r\n }\r\n }\r\n </div>\r\n @if (row.permission?.sygms_name) {\r\n <div class=\"tw-text-xs tw-text-blue-500 tw-truncate\" \r\n [title]=\"row.permission?.sygms_name\">\r\n {{ row.permission?.sygms_name }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<!-- Permissions Checkbox Renderer Template -->\r\n<ng-template #permissionsCheckboxRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-flex-wrap tw-gap-2 tw-max-w-full\">\r\n @if (row.syme_type === 'menu' && row?.syme_permissions_id_sygms && row?.syme_permissions_id_sygms.length > 0) {\r\n @for (permissionId of row?.syme_permissions_id_sygms || []; track permissionId) {\r\n <div class=\"tw-flex tw-items-center tw-space-x-1\">\r\n <cide-ele-input \r\n type=\"checkbox\"\r\n [label]=\"getPermissionById(permissionId)?.sygms_name || 'Unknown'\"\r\n [ngModel]=\"isPermissionSelected(row._id, permissionId)\"\r\n (ngModelChange)=\"onPermissionCheckboxChange(row._id, permissionId, $event)\"\r\n size=\"xs\"\r\n [disabled]=\"isViewMode()\">\r\n </cide-ele-input>\r\n </div>\r\n }\r\n } @else {\r\n <!-- Show green checkmark for parent menus with child permissions -->\r\n @if (row.syme_type === 'module' || row.syme_type === 'section' || row.syme_type === 'title') {\r\n @if (hasChildMenusWithPermissions(row._id)) {\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-w-6 tw-h-6 tw-bg-green-100 tw-rounded-full\" \r\n [title]=\"hasParentViewRight(row._id) ? 'View right automatically enabled' : 'Child permissions assigned'\">\r\n <cide-ele-icon \r\n class=\"tw-text-green-600\" \r\n size=\"xs\">\r\n check\r\n </cide-ele-icon>\r\n </div>\r\n } @else if (hasParentViewRight(row._id)) {\r\n <!-- Show green checkmark for parent with view right -->\r\n <cide-ele-icon \r\n class=\"tw-text-green-600\" \r\n size=\"xs\"\r\n title=\"View right automatically enabled\">\r\n check\r\n </cide-ele-icon>\r\n } @else {\r\n <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\r\n }\r\n } @else {\r\n <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\r\n }\r\n }\r\n </div>\r\n</ng-template>", styles: [":host{@apply tw-w-full tw-h-full tw-flex tw-flex-col;}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1$2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { 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: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey"], outputs: ["ngModelChange", "change", "searchChange"] }, { 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: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideFormFieldErrorComponent, selector: "cide-form-field-error", inputs: ["control", "formGroup", "fieldName", "customMessages"] }] });
|
|
19460
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserRoleFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
19461
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CideCoreUserRoleFormComponent, isStandalone: true, selector: "cide-core-user-role-form", viewQueries: [{ propertyName: "menuDetailsRendererTemplate", first: true, predicate: ["menuDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "permissionsCheckboxRendererTemplate", first: true, predicate: ["permissionsCheckboxRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- User Role Form Container -->\r\n<div class=\"tw-w-full tw-h-full\">\r\n <form class=\"tw-max-w-7xl tw-mx-auto tw-bg-transparent tw-h-full tw-flex tw-flex-col\" [formGroup]=\"userRoleForm\" [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mb-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <!-- User Role Basic Information Section -->\r\n <div class=\"tw-py-2 tw-border-b-0 tw-mb-0 tw-p-3\">\r\n\r\n <!-- Basic Fields -->\r\n <div class=\"tw-grid tw-grid-cols-1 xl:tw-grid-cols-2 lg:tw-grid-cols-2 md:tw-grid-cols-1 tw-gap-6 tw-mb-0\">\r\n <!-- Left Column: Role Name -->\r\n <div>\r\n <cide-ele-input \r\n id=\"syusrol_role_name\" \r\n label=\"Role Name *\" \r\n formControlName=\"syusrol_role_name\"\r\n placeholder=\"Enter role name\" \r\n [maxlength]=\"50\" \r\n size=\"md\"\r\n [disabled]=\"isViewMode()\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Right Column: Description -->\r\n <div>\r\n <cide-ele-textarea \r\n id=\"syusrol_role_description\" \r\n label=\"Description *\" \r\n formControlName=\"syusrol_role_description\"\r\n placeholder=\"Enter role description\" \r\n rows=\"3\"\r\n [maxlength]=\"200\"\r\n [disabled]=\"isViewMode()\">\r\n </cide-ele-textarea>\r\n </div>\r\n </div>\r\n\r\n <!-- Active Status Row -->\r\n <div class=\"tw-mb-0\">\r\n <cide-ele-input \r\n id=\"syusrol_isactive\" \r\n label=\"Active Status\" \r\n formControlName=\"syusrol_isactive\"\r\n type=\"checkbox\" \r\n size=\"md\"\r\n [disabled]=\"isViewMode()\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Role Rights Section -->\r\n <div class=\"tw-pt-2 tw-border-b-0 tw-mb-0 tw-flex-1 tw-flex tw-flex-col tw-min-h-0\">\r\n\r\n <!-- Role Rights Grid -->\r\n <div class=\"tw-flex-1 tw-min-h-0 tw-w-full\" style=\"height: 400px; max-height: 900px;\">\r\n <cide-ele-data-grid \r\n [config]=\"roleRightsGridConfig()\" \r\n [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onRoleRightsGridEvent($event)\"\r\n class=\"tw-h-full tw-w-full\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n <!-- Role Rights Form (Hidden but functional) -->\r\n <div [formGroup]=\"roleRightsForm\" class=\"tw-hidden\">\r\n <div formArrayName=\"roleRights\">\r\n @for (right of roleRightsArray.controls; track $index; let i = $index) {\r\n <div [formGroupName]=\"i\">\r\n <cide-ele-select formControlName=\"syusrgt_menu_id_syme\">\r\n <option value=\"\">Select Menu</option>\r\n @for (menu of menus(); track menu._id) {\r\n <option [value]=\"menu._id\">{{ menu.syme_title }}</option>\r\n }\r\n </cide-ele-select>\r\n <cide-ele-select formControlName=\"syusrgt_role_permissions_id_sygms\">\r\n <option value=\"\">Select Permission</option>\r\n @for (permission of permissions(); track permission._id) {\r\n <option [value]=\"permission._id\">{{ permission.sygms_name }}</option>\r\n }\r\n </cide-ele-select>\r\n <cide-ele-input formControlName=\"syusrgt_isactive\" type=\"checkbox\"></cide-ele-input>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-flex tw-justify-between tw-items-center tw-p-3 tw-gap-4 tw-py-2 tw-bg-white tw-border-t tw-border-gray-200 tw-sticky tw-bottom-0 tw-z-10\">\r\n <!-- Error Message (Left Side) -->\r\n <cide-form-field-error [formGroup]=\"userRoleForm\"></cide-form-field-error>\r\n \r\n <!-- Action Buttons (Right Side) -->\r\n <div class=\"tw-flex tw-gap-4\">\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"onCancel()\" leftIcon=\"arrow_back\"\r\n [disabled]=\"loading()\">\r\n {{ isViewMode() ? 'Close' : 'Cancel' }}\r\n </button>\r\n\r\n @if (!isViewMode()) {\r\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || !isFormReadyToSave\"\r\n [loading]=\"loading()\" leftIcon=\"save\">\r\n {{ submitButtonText }}\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </form>\r\n</div>\r\n\r\n<!-- Template Renderers for Role Rights Grid -->\r\n<ng-template #menuDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Menu Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon \r\n class=\"tw-text-gray-400\" \r\n size=\"xs\">\r\n {{ row.syme_icon || 'folder_open' }}\r\n </cide-ele-icon>\r\n </div>\r\n \r\n <!-- Menu Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <div class=\"tw-text-xs tw-font-medium tw-text-gray-900 tw-truncate\" \r\n [title]=\"row.syme_title\">\r\n {{ row.syme_title || row.menu?.syme_title || row.menu?.syme_menu_name || 'Untitled' }}\r\n </div>\r\n <!-- Green pill indicator for parent menus with child permissions -->\r\n @if (row.syme_type === 'module' || row.syme_type === 'section') {\r\n @if (hasChildMenusWithPermissions(row._id)) {\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800 tw-whitespace-nowrap\">\r\n Assigned\r\n </span>\r\n }\r\n }\r\n </div>\r\n @if (row.permission?.sygms_name) {\r\n <div class=\"tw-text-xs tw-text-blue-500 tw-truncate\" \r\n [title]=\"row.permission?.sygms_name\">\r\n {{ row.permission?.sygms_name }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<!-- Permissions Checkbox Renderer Template -->\r\n<ng-template #permissionsCheckboxRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-flex-wrap tw-gap-2 tw-max-w-full\">\r\n @if (row.syme_type === 'menu' && row?.syme_permissions_id_sygms && row?.syme_permissions_id_sygms.length > 0) {\r\n @for (permissionId of row?.syme_permissions_id_sygms || []; track permissionId) {\r\n <div class=\"tw-flex tw-items-center tw-space-x-1\">\r\n <cide-ele-input \r\n type=\"checkbox\"\r\n [label]=\"getPermissionById(permissionId)?.sygms_name || 'Unknown'\"\r\n [ngModel]=\"isPermissionSelected(row._id, permissionId)\"\r\n (ngModelChange)=\"onPermissionCheckboxChange(row._id, permissionId, $event)\"\r\n size=\"xs\"\r\n [disabled]=\"isViewMode()\">\r\n </cide-ele-input>\r\n </div>\r\n }\r\n } @else {\r\n <!-- Show green checkmark for parent menus with child permissions -->\r\n @if (row.syme_type === 'module' || row.syme_type === 'section' || row.syme_type === 'title') {\r\n @if (hasChildMenusWithPermissions(row._id)) {\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-w-6 tw-h-6 tw-bg-green-100 tw-rounded-full\" \r\n [title]=\"hasParentViewRight(row._id) ? 'View right automatically enabled' : 'Child permissions assigned'\">\r\n <cide-ele-icon \r\n class=\"tw-text-green-600\" \r\n size=\"xs\">\r\n check\r\n </cide-ele-icon>\r\n </div>\r\n } @else if (hasParentViewRight(row._id)) {\r\n <!-- Show green checkmark for parent with view right -->\r\n <cide-ele-icon \r\n class=\"tw-text-green-600\" \r\n size=\"xs\"\r\n title=\"View right automatically enabled\">\r\n check\r\n </cide-ele-icon>\r\n } @else {\r\n <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\r\n }\r\n } @else {\r\n <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\r\n }\r\n }\r\n </div>\r\n</ng-template>", styles: [":host{@apply tw-w-full tw-h-full tw-flex tw-flex-col;}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1$2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { 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: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }, { 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: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideFormFieldErrorComponent, selector: "cide-form-field-error", inputs: ["control", "formGroup", "fieldName", "customMessages"] }] });
|
|
19395
19462
|
}
|
|
19396
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
19463
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreUserRoleFormComponent, decorators: [{
|
|
19397
19464
|
type: Component,
|
|
19398
19465
|
args: [{ selector: 'cide-core-user-role-form', standalone: true, imports: [
|
|
19399
19466
|
CommonModule,
|
|
@@ -19407,7 +19474,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
19407
19474
|
CideEleDataGridComponent,
|
|
19408
19475
|
CideFormFieldErrorComponent
|
|
19409
19476
|
], template: "<!-- User Role Form Container -->\r\n<div class=\"tw-w-full tw-h-full\">\r\n <form class=\"tw-max-w-7xl tw-mx-auto tw-bg-transparent tw-h-full tw-flex tw-flex-col\" [formGroup]=\"userRoleForm\" [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mb-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <!-- User Role Basic Information Section -->\r\n <div class=\"tw-py-2 tw-border-b-0 tw-mb-0 tw-p-3\">\r\n\r\n <!-- Basic Fields -->\r\n <div class=\"tw-grid tw-grid-cols-1 xl:tw-grid-cols-2 lg:tw-grid-cols-2 md:tw-grid-cols-1 tw-gap-6 tw-mb-0\">\r\n <!-- Left Column: Role Name -->\r\n <div>\r\n <cide-ele-input \r\n id=\"syusrol_role_name\" \r\n label=\"Role Name *\" \r\n formControlName=\"syusrol_role_name\"\r\n placeholder=\"Enter role name\" \r\n [maxlength]=\"50\" \r\n size=\"md\"\r\n [disabled]=\"isViewMode()\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Right Column: Description -->\r\n <div>\r\n <cide-ele-textarea \r\n id=\"syusrol_role_description\" \r\n label=\"Description *\" \r\n formControlName=\"syusrol_role_description\"\r\n placeholder=\"Enter role description\" \r\n rows=\"3\"\r\n [maxlength]=\"200\"\r\n [disabled]=\"isViewMode()\">\r\n </cide-ele-textarea>\r\n </div>\r\n </div>\r\n\r\n <!-- Active Status Row -->\r\n <div class=\"tw-mb-0\">\r\n <cide-ele-input \r\n id=\"syusrol_isactive\" \r\n label=\"Active Status\" \r\n formControlName=\"syusrol_isactive\"\r\n type=\"checkbox\" \r\n size=\"md\"\r\n [disabled]=\"isViewMode()\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Role Rights Section -->\r\n <div class=\"tw-pt-2 tw-border-b-0 tw-mb-0 tw-flex-1 tw-flex tw-flex-col tw-min-h-0\">\r\n\r\n <!-- Role Rights Grid -->\r\n <div class=\"tw-flex-1 tw-min-h-0 tw-w-full\" style=\"height: 400px; max-height: 900px;\">\r\n <cide-ele-data-grid \r\n [config]=\"roleRightsGridConfig()\" \r\n [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onRoleRightsGridEvent($event)\"\r\n class=\"tw-h-full tw-w-full\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n <!-- Role Rights Form (Hidden but functional) -->\r\n <div [formGroup]=\"roleRightsForm\" class=\"tw-hidden\">\r\n <div formArrayName=\"roleRights\">\r\n @for (right of roleRightsArray.controls; track $index; let i = $index) {\r\n <div [formGroupName]=\"i\">\r\n <cide-ele-select formControlName=\"syusrgt_menu_id_syme\">\r\n <option value=\"\">Select Menu</option>\r\n @for (menu of menus(); track menu._id) {\r\n <option [value]=\"menu._id\">{{ menu.syme_title }}</option>\r\n }\r\n </cide-ele-select>\r\n <cide-ele-select formControlName=\"syusrgt_role_permissions_id_sygms\">\r\n <option value=\"\">Select Permission</option>\r\n @for (permission of permissions(); track permission._id) {\r\n <option [value]=\"permission._id\">{{ permission.sygms_name }}</option>\r\n }\r\n </cide-ele-select>\r\n <cide-ele-input formControlName=\"syusrgt_isactive\" type=\"checkbox\"></cide-ele-input>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-flex tw-justify-between tw-items-center tw-p-3 tw-gap-4 tw-py-2 tw-bg-white tw-border-t tw-border-gray-200 tw-sticky tw-bottom-0 tw-z-10\">\r\n <!-- Error Message (Left Side) -->\r\n <cide-form-field-error [formGroup]=\"userRoleForm\"></cide-form-field-error>\r\n \r\n <!-- Action Buttons (Right Side) -->\r\n <div class=\"tw-flex tw-gap-4\">\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"onCancel()\" leftIcon=\"arrow_back\"\r\n [disabled]=\"loading()\">\r\n {{ isViewMode() ? 'Close' : 'Cancel' }}\r\n </button>\r\n\r\n @if (!isViewMode()) {\r\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || !isFormReadyToSave\"\r\n [loading]=\"loading()\" leftIcon=\"save\">\r\n {{ submitButtonText }}\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </form>\r\n</div>\r\n\r\n<!-- Template Renderers for Role Rights Grid -->\r\n<ng-template #menuDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Menu Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon \r\n class=\"tw-text-gray-400\" \r\n size=\"xs\">\r\n {{ row.syme_icon || 'folder_open' }}\r\n </cide-ele-icon>\r\n </div>\r\n \r\n <!-- Menu Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <div class=\"tw-text-xs tw-font-medium tw-text-gray-900 tw-truncate\" \r\n [title]=\"row.syme_title\">\r\n {{ row.syme_title || row.menu?.syme_title || row.menu?.syme_menu_name || 'Untitled' }}\r\n </div>\r\n <!-- Green pill indicator for parent menus with child permissions -->\r\n @if (row.syme_type === 'module' || row.syme_type === 'section') {\r\n @if (hasChildMenusWithPermissions(row._id)) {\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800 tw-whitespace-nowrap\">\r\n Assigned\r\n </span>\r\n }\r\n }\r\n </div>\r\n @if (row.permission?.sygms_name) {\r\n <div class=\"tw-text-xs tw-text-blue-500 tw-truncate\" \r\n [title]=\"row.permission?.sygms_name\">\r\n {{ row.permission?.sygms_name }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<!-- Permissions Checkbox Renderer Template -->\r\n<ng-template #permissionsCheckboxRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-flex-wrap tw-gap-2 tw-max-w-full\">\r\n @if (row.syme_type === 'menu' && row?.syme_permissions_id_sygms && row?.syme_permissions_id_sygms.length > 0) {\r\n @for (permissionId of row?.syme_permissions_id_sygms || []; track permissionId) {\r\n <div class=\"tw-flex tw-items-center tw-space-x-1\">\r\n <cide-ele-input \r\n type=\"checkbox\"\r\n [label]=\"getPermissionById(permissionId)?.sygms_name || 'Unknown'\"\r\n [ngModel]=\"isPermissionSelected(row._id, permissionId)\"\r\n (ngModelChange)=\"onPermissionCheckboxChange(row._id, permissionId, $event)\"\r\n size=\"xs\"\r\n [disabled]=\"isViewMode()\">\r\n </cide-ele-input>\r\n </div>\r\n }\r\n } @else {\r\n <!-- Show green checkmark for parent menus with child permissions -->\r\n @if (row.syme_type === 'module' || row.syme_type === 'section' || row.syme_type === 'title') {\r\n @if (hasChildMenusWithPermissions(row._id)) {\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-w-6 tw-h-6 tw-bg-green-100 tw-rounded-full\" \r\n [title]=\"hasParentViewRight(row._id) ? 'View right automatically enabled' : 'Child permissions assigned'\">\r\n <cide-ele-icon \r\n class=\"tw-text-green-600\" \r\n size=\"xs\">\r\n check\r\n </cide-ele-icon>\r\n </div>\r\n } @else if (hasParentViewRight(row._id)) {\r\n <!-- Show green checkmark for parent with view right -->\r\n <cide-ele-icon \r\n class=\"tw-text-green-600\" \r\n size=\"xs\"\r\n title=\"View right automatically enabled\">\r\n check\r\n </cide-ele-icon>\r\n } @else {\r\n <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\r\n }\r\n } @else {\r\n <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\r\n }\r\n }\r\n </div>\r\n</ng-template>", styles: [":host{@apply tw-w-full tw-h-full tw-flex tw-flex-col;}\n"] }]
|
|
19410
|
-
}] });
|
|
19477
|
+
}], propDecorators: { menuDetailsRendererTemplate: [{ type: i0.ViewChild, args: ['menuDetailsRendererTemplate', { isSignal: true }] }], permissionsCheckboxRendererTemplate: [{ type: i0.ViewChild, args: ['permissionsCheckboxRendererTemplate', { isSignal: true }] }] } });
|
|
19411
19478
|
|
|
19412
19479
|
var userRoleForm_component = /*#__PURE__*/Object.freeze({
|
|
19413
19480
|
__proto__: null,
|
|
@@ -19471,10 +19538,10 @@ class CideCoreNationalityService {
|
|
|
19471
19538
|
};
|
|
19472
19539
|
return this.getAllNationalities(payload);
|
|
19473
19540
|
}
|
|
19474
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
19475
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.
|
|
19541
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreNationalityService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
19542
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreNationalityService, providedIn: 'root' });
|
|
19476
19543
|
}
|
|
19477
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
19544
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreNationalityService, decorators: [{
|
|
19478
19545
|
type: Injectable,
|
|
19479
19546
|
args: [{
|
|
19480
19547
|
providedIn: 'root'
|
|
@@ -19523,10 +19590,10 @@ class CideCoreClassProgramMasterService {
|
|
|
19523
19590
|
pagination: false
|
|
19524
19591
|
});
|
|
19525
19592
|
}
|
|
19526
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
19527
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.
|
|
19593
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreClassProgramMasterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
19594
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreClassProgramMasterService, providedIn: 'root' });
|
|
19528
19595
|
}
|
|
19529
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
19596
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreClassProgramMasterService, decorators: [{
|
|
19530
19597
|
type: Injectable,
|
|
19531
19598
|
args: [{
|
|
19532
19599
|
providedIn: 'root'
|
|
@@ -19541,5 +19608,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
19541
19608
|
* Generated bundle index. Do not edit.
|
|
19542
19609
|
*/
|
|
19543
19610
|
|
|
19544
|
-
export { CideCoreClassProgramMasterService, CideCoreCountryService, CideCoreDepartmentListComponent, CideCoreDepartmentManagementService, CideCoreDesignationListComponent, CideCoreDesignationManagementService, CideCoreEntityCreateComponent, CideCoreEntityListComponent, CideCoreEntityManagementService, CideCoreGeneralMasterComponent, CideCoreGeneralMasterService, CideCoreGeneralMasterTypeComponent, CideCoreGeneralMasterTypeService, CideCoreGradeLevelListComponent, CideCoreGradeLevelManagementService, CideCoreNationalityService, CideCoreOrgStructureComponent, CideCorePageControlsComponent, CideCorePageControlsService, CideCorePageListComponent, CideCorePageManagementService, CideCorePageThemeComponent, CideCorePageThemeService, CideCorePinCodeService, CideCoreRoleSelectService, CideCoreUserAttributesComponent, CideCoreUserContactAddressesComponent, CideCoreUserCreateComponent, CideCoreUserDocumentsComponent, CideCoreUserEntityAccessComponent, CideCoreUserFamilyDetailsComponent, CideCoreUserListComponent, CideCoreUserMasterService, CideCoreUserRoleFormComponent, CideCoreUserRoleListComponent, CideCoreUserRoleService, CloudIdeCoreComponent, CloudIdeCoreService, MenuListComponent, MenuManagementService, coreRoutes };
|
|
19611
|
+
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 };
|
|
19545
19612
|
//# sourceMappingURL=cloud-ide-core.mjs.map
|