cloud-ide-core 1.0.1 → 1.0.4

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.
Files changed (73) hide show
  1. package/README.md +49 -10
  2. package/fesm2022/{cloud-ide-core-general-master-type.component-B26auJZw.mjs → cloud-ide-core-general-master-type.component-OPaXxAXW.mjs} +133 -135
  3. package/fesm2022/{cloud-ide-core-general-master-type.component-B26auJZw.mjs.map → cloud-ide-core-general-master-type.component-OPaXxAXW.mjs.map} +1 -1
  4. package/fesm2022/{cloud-ide-core-general-master-type.service-Ab64Jjps.mjs → cloud-ide-core-general-master-type.service-8JWTVijZ.mjs} +7 -7
  5. package/fesm2022/{cloud-ide-core-general-master-type.service-Ab64Jjps.mjs.map → cloud-ide-core-general-master-type.service-8JWTVijZ.mjs.map} +1 -1
  6. package/fesm2022/{cloud-ide-core-general-master.component-B6llTVoV.mjs → cloud-ide-core-general-master.component-BEHWqXvF.mjs} +153 -155
  7. package/fesm2022/{cloud-ide-core-general-master.component-B6llTVoV.mjs.map → cloud-ide-core-general-master.component-BEHWqXvF.mjs.map} +1 -1
  8. package/fesm2022/{cloud-ide-core-page-form.component-CaEca3mB.mjs → cloud-ide-core-page-form.component-BatglsBU.mjs} +26 -26
  9. package/fesm2022/{cloud-ide-core-page-form.component-CaEca3mB.mjs.map → cloud-ide-core-page-form.component-BatglsBU.mjs.map} +1 -1
  10. package/fesm2022/cloud-ide-core.mjs +5089 -1116
  11. package/fesm2022/cloud-ide-core.mjs.map +1 -1
  12. package/index.d.ts +2111 -3
  13. package/package.json +3 -5
  14. package/esm2022/cloud-ide-core.mjs +0 -5
  15. package/esm2022/lib/cloud-ide-core.component.mjs +0 -19
  16. package/esm2022/lib/cloud-ide-core.routes.mjs +0 -137
  17. package/esm2022/lib/cloud-ide-core.service.mjs +0 -14
  18. package/esm2022/lib/core/department-management/components/department-list/department-list.component.mjs +0 -768
  19. package/esm2022/lib/core/department-management/index.mjs +0 -5
  20. package/esm2022/lib/core/department-management/services/department-management.service.mjs +0 -187
  21. package/esm2022/lib/core/designation-management/components/designation-list/designation-list.component.mjs +0 -1122
  22. package/esm2022/lib/core/designation-management/index.mjs +0 -5
  23. package/esm2022/lib/core/designation-management/services/designation-management.service.mjs +0 -194
  24. package/esm2022/lib/core/general-master-management/components/general-master/general-master.component.mjs +0 -738
  25. package/esm2022/lib/core/general-master-management/components/general-master-type/general-master-type.component.mjs +0 -608
  26. package/esm2022/lib/core/general-master-management/services/general-master-type.service.mjs +0 -203
  27. package/esm2022/lib/core/general-master-management/services/general-master.service.mjs +0 -166
  28. package/esm2022/lib/core/grade-level-management/components/grade-level-list/grade-level-list.component.mjs +0 -794
  29. package/esm2022/lib/core/grade-level-management/index.mjs +0 -5
  30. package/esm2022/lib/core/grade-level-management/services/grade-level-management.service.mjs +0 -172
  31. package/esm2022/lib/core/menu-management/components/menu-list/menu-list.component.mjs +0 -1135
  32. package/esm2022/lib/core/menu-management/index.mjs +0 -10
  33. package/esm2022/lib/core/menu-management/interfaces/menu-item.interface.mjs +0 -11
  34. package/esm2022/lib/core/menu-management/mock-data/menu-items.json +0 -311
  35. package/esm2022/lib/core/menu-management/services/menu-management.service.mjs +0 -230
  36. package/esm2022/lib/core/page-management/components/page-controls/page-controls.component.mjs +0 -483
  37. package/esm2022/lib/core/page-management/components/page-form/page-form.component.mjs +0 -212
  38. package/esm2022/lib/core/page-management/components/page-list/page-list.component.mjs +0 -393
  39. package/esm2022/lib/core/page-management/components/page-theme/page-theme.component.mjs +0 -767
  40. package/esm2022/lib/core/page-management/index.mjs +0 -10
  41. package/esm2022/lib/core/page-management/services/page-controls.service.mjs +0 -136
  42. package/esm2022/lib/core/page-management/services/page-management.service.mjs +0 -98
  43. package/esm2022/lib/core/page-management/services/page-theme.service.mjs +0 -107
  44. package/esm2022/public-api.mjs +0 -17
  45. package/lib/cloud-ide-core.component.d.ts +0 -5
  46. package/lib/cloud-ide-core.routes.d.ts +0 -2
  47. package/lib/cloud-ide-core.service.d.ts +0 -6
  48. package/lib/core/department-management/components/department-list/department-list.component.d.ts +0 -178
  49. package/lib/core/department-management/index.d.ts +0 -2
  50. package/lib/core/department-management/services/department-management.service.d.ts +0 -68
  51. package/lib/core/designation-management/components/designation-list/designation-list.component.d.ts +0 -242
  52. package/lib/core/designation-management/index.d.ts +0 -2
  53. package/lib/core/designation-management/services/designation-management.service.d.ts +0 -69
  54. package/lib/core/general-master-management/components/general-master/general-master.component.d.ts +0 -167
  55. package/lib/core/general-master-management/components/general-master-type/general-master-type.component.d.ts +0 -129
  56. package/lib/core/general-master-management/services/general-master-type.service.d.ts +0 -75
  57. package/lib/core/general-master-management/services/general-master.service.d.ts +0 -62
  58. package/lib/core/grade-level-management/components/grade-level-list/grade-level-list.component.d.ts +0 -199
  59. package/lib/core/grade-level-management/index.d.ts +0 -2
  60. package/lib/core/grade-level-management/services/grade-level-management.service.d.ts +0 -69
  61. package/lib/core/menu-management/components/menu-list/menu-list.component.d.ts +0 -278
  62. package/lib/core/menu-management/index.d.ts +0 -3
  63. package/lib/core/menu-management/interfaces/menu-item.interface.d.ts +0 -30
  64. package/lib/core/menu-management/services/menu-management.service.d.ts +0 -85
  65. package/lib/core/page-management/components/page-controls/page-controls.component.d.ts +0 -126
  66. package/lib/core/page-management/components/page-form/page-form.component.d.ts +0 -35
  67. package/lib/core/page-management/components/page-list/page-list.component.d.ts +0 -91
  68. package/lib/core/page-management/components/page-theme/page-theme.component.d.ts +0 -189
  69. package/lib/core/page-management/index.d.ts +0 -6
  70. package/lib/core/page-management/services/page-controls.service.d.ts +0 -54
  71. package/lib/core/page-management/services/page-management.service.d.ts +0 -42
  72. package/lib/core/page-management/services/page-theme.service.d.ts +0 -43
  73. package/public-api.d.ts +0 -8
@@ -1,10 +0,0 @@
1
- /*
2
- * Menu Management Module Exports
3
- */
4
- // Components
5
- export * from './components/menu-list/menu-list.component';
6
- // Services
7
- export * from './services/menu-management.service';
8
- // Interfaces
9
- export * from './interfaces/menu-item.interface';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbG91ZC1pZGUtY29yZS9zcmMvbGliL2NvcmUvbWVudS1tYW5hZ2VtZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsYUFBYTtBQUNiLGNBQWMsNENBQTRDLENBQUM7QUFFM0QsV0FBVztBQUNYLGNBQWMsb0NBQW9DLENBQUM7QUFFbkQsYUFBYTtBQUNiLGNBQWMsa0NBQWtDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBNZW51IE1hbmFnZW1lbnQgTW9kdWxlIEV4cG9ydHNcclxuICovXHJcblxyXG4vLyBDb21wb25lbnRzXHJcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy9tZW51LWxpc3QvbWVudS1saXN0LmNvbXBvbmVudCc7XHJcblxyXG4vLyBTZXJ2aWNlc1xyXG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL21lbnUtbWFuYWdlbWVudC5zZXJ2aWNlJztcclxuXHJcbi8vIEludGVyZmFjZXNcclxuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL21lbnUtaXRlbS5pbnRlcmZhY2UnOyAiXX0=
@@ -1,11 +0,0 @@
1
- /**
2
- * Menu Type Options
3
- * Available menu types for selection
4
- */
5
- export const MENU_TYPES = [
6
- { value: 'module', label: 'Module' },
7
- { value: 'section', label: 'Section' },
8
- { value: 'menu', label: 'Menu Item' },
9
- { value: 'title', label: 'Title' }
10
- ];
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pdGVtLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1jb3JlL3NyYy9saWIvY29yZS9tZW51LW1hbmFnZW1lbnQvaW50ZXJmYWNlcy9tZW51LWl0ZW0uaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtJQUNwQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUN0QyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRTtJQUNyQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtDQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTU1lbnUgfSBmcm9tIFwiY2xvdWQtaWRlLWxtcy1tb2RlbFwiO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBNZW51IFJlb3JkZXIgUmVxdWVzdFxyXG4gKiBVc2VkIGZvciByZW9yZGVyaW5nIG1lbnUgaXRlbXNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWVudVJlb3JkZXJSZXF1ZXN0IHtcclxuICBpdGVtczogTU1lbnVbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1lbnUgVHlwZSBPcHRpb25zXHJcbiAqIEF2YWlsYWJsZSBtZW51IHR5cGVzIGZvciBzZWxlY3Rpb25cclxuICovXHJcbmV4cG9ydCBjb25zdCBNRU5VX1RZUEVTID0gW1xyXG4gIHsgdmFsdWU6ICdtb2R1bGUnLCBsYWJlbDogJ01vZHVsZScgfSxcclxuICB7IHZhbHVlOiAnc2VjdGlvbicsIGxhYmVsOiAnU2VjdGlvbicgfSxcclxuICB7IHZhbHVlOiAnbWVudScsIGxhYmVsOiAnTWVudSBJdGVtJyB9LFxyXG4gIHsgdmFsdWU6ICd0aXRsZScsIGxhYmVsOiAnVGl0bGUnIH1cclxuXSBhcyBjb25zdDtcclxuXHJcbi8qKlxyXG4gKiBNZW51IFR5cGVcclxuICogVHlwZSBkZWZpbml0aW9uIGZvciBtZW51IHR5cGVzXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBNZW51VHlwZSA9ICdtZW51JyB8ICdzZWN0aW9uJyB8ICd0aXRsZScgfCAnbW9kdWxlJzsiXX0=
@@ -1,311 +0,0 @@
1
- {
2
- "success": true,
3
- "code": 200,
4
- "data": [
5
- {
6
- "_id": "module-1",
7
- "syme_title": "User Management",
8
- "syme_desc": "Manage system users, roles, and permissions",
9
- "syme_path": "/admin/users",
10
- "syme_icon": "people",
11
- "syme_type": "module",
12
- "syme_link": false,
13
- "syme_order_by": 1,
14
- "syme_isactive": true,
15
- "children": [
16
- {
17
- "_id": "section-1",
18
- "syme_title": "User Administration",
19
- "syme_desc": "User management and administration tools",
20
- "syme_path": "",
21
- "syme_icon": "admin_panel_settings",
22
- "syme_type": "section",
23
- "syme_link": false,
24
- "syme_order_by": 1,
25
- "syme_id_syme": "module-1",
26
- "syme_isactive": true,
27
- "children": [
28
- {
29
- "_id": "menu-1",
30
- "syme_title": "User List",
31
- "syme_desc": "View and manage all system users",
32
- "syme_path": "/admin/users/list",
33
- "syme_icon": "list",
34
- "syme_type": "menu",
35
- "syme_link": false,
36
- "syme_order_by": 1,
37
- "syme_id_syme": "section-1",
38
- "syme_isactive": true
39
- },
40
- {
41
- "_id": "menu-2",
42
- "syme_title": "Add User",
43
- "syme_desc": "Create new user accounts",
44
- "syme_path": "/admin/users/add",
45
- "syme_icon": "person_add",
46
- "syme_type": "menu",
47
- "syme_link": false,
48
- "syme_order_by": 2,
49
- "syme_id_syme": "section-1",
50
- "syme_isactive": true
51
- },
52
- {
53
- "_id": "menu-3",
54
- "syme_title": "User Roles",
55
- "syme_desc": "Manage user roles and permissions",
56
- "syme_path": "/admin/users/roles",
57
- "syme_icon": "security",
58
- "syme_type": "menu",
59
- "syme_link": false,
60
- "syme_order_by": 3,
61
- "syme_id_syme": "section-1",
62
- "syme_isactive": true
63
- }
64
- ]
65
- },
66
- {
67
- "_id": "section-2",
68
- "syme_title": "Reports",
69
- "syme_desc": "User-related reports and analytics",
70
- "syme_path": "",
71
- "syme_icon": "analytics",
72
- "syme_type": "section",
73
- "syme_link": false,
74
- "syme_order_by": 2,
75
- "syme_id_syme": "module-1",
76
- "syme_isactive": true,
77
- "children": [
78
- {
79
- "_id": "menu-4",
80
- "syme_title": "User Activity",
81
- "syme_desc": "Track user activity and login history",
82
- "syme_path": "/admin/users/activity",
83
- "syme_icon": "timeline",
84
- "syme_type": "menu",
85
- "syme_link": false,
86
- "syme_order_by": 1,
87
- "syme_id_syme": "section-2",
88
- "syme_isactive": true
89
- },
90
- {
91
- "_id": "menu-5",
92
- "syme_title": "User Statistics",
93
- "syme_desc": "User statistics and analytics",
94
- "syme_path": "/admin/users/stats",
95
- "syme_icon": "bar_chart",
96
- "syme_type": "menu",
97
- "syme_link": false,
98
- "syme_order_by": 2,
99
- "syme_id_syme": "section-2",
100
- "syme_isactive": false
101
- }
102
- ]
103
- }
104
- ]
105
- },
106
- {
107
- "_id": "module-2",
108
- "syme_title": "Content Management",
109
- "syme_desc": "Manage website content and pages",
110
- "syme_path": "/admin/content",
111
- "syme_icon": "article",
112
- "syme_type": "module",
113
- "syme_link": false,
114
- "syme_order_by": 2,
115
- "syme_isactive": true,
116
- "children": [
117
- {
118
- "_id": "section-3",
119
- "syme_title": "Pages",
120
- "syme_desc": "Manage website pages and content",
121
- "syme_path": "",
122
- "syme_icon": "web",
123
- "syme_type": "section",
124
- "syme_link": false,
125
- "syme_order_by": 1,
126
- "syme_id_syme": "module-2",
127
- "syme_isactive": true,
128
- "children": [
129
- {
130
- "_id": "menu-6",
131
- "syme_title": "Page List",
132
- "syme_desc": "View and manage all pages",
133
- "syme_path": "/admin/content/pages",
134
- "syme_icon": "list",
135
- "syme_type": "menu",
136
- "syme_link": false,
137
- "syme_order_by": 1,
138
- "syme_id_syme": "section-3",
139
- "syme_isactive": true
140
- },
141
- {
142
- "_id": "menu-7",
143
- "syme_title": "Create Page",
144
- "syme_desc": "Create new pages",
145
- "syme_path": "/admin/content/pages/create",
146
- "syme_icon": "add",
147
- "syme_type": "menu",
148
- "syme_link": false,
149
- "syme_order_by": 2,
150
- "syme_id_syme": "section-3",
151
- "syme_isactive": true
152
- }
153
- ]
154
- },
155
- {
156
- "_id": "title-1",
157
- "syme_title": "Media Management",
158
- "syme_desc": "Manage media files and assets",
159
- "syme_path": "",
160
- "syme_icon": "",
161
- "syme_type": "title",
162
- "syme_link": false,
163
- "syme_order_by": 2,
164
- "syme_id_syme": "module-2",
165
- "syme_isactive": true,
166
- "children": [
167
- {
168
- "_id": "menu-8",
169
- "syme_title": "Media Library",
170
- "syme_desc": "Manage uploaded media files",
171
- "syme_path": "/admin/content/media",
172
- "syme_icon": "photo_library",
173
- "syme_type": "menu",
174
- "syme_link": false,
175
- "syme_order_by": 1,
176
- "syme_id_syme": "title-1",
177
- "syme_isactive": true
178
- }
179
- ]
180
- }
181
- ]
182
- },
183
- {
184
- "_id": "module-3",
185
- "syme_title": "System Settings",
186
- "syme_desc": "System configuration and settings",
187
- "syme_path": "/admin/settings",
188
- "syme_icon": "settings",
189
- "syme_type": "module",
190
- "syme_link": false,
191
- "syme_order_by": 3,
192
- "syme_isactive": true,
193
- "children": [
194
- {
195
- "_id": "section-4",
196
- "syme_title": "General Settings",
197
- "syme_desc": "General system configuration",
198
- "syme_path": "",
199
- "syme_icon": "tune",
200
- "syme_type": "section",
201
- "syme_link": false,
202
- "syme_order_by": 1,
203
- "syme_id_syme": "module-3",
204
- "syme_isactive": true,
205
- "children": [
206
- {
207
- "_id": "menu-9",
208
- "syme_title": "Site Configuration",
209
- "syme_desc": "Configure site settings and preferences",
210
- "syme_path": "/admin/settings/site",
211
- "syme_icon": "web",
212
- "syme_type": "menu",
213
- "syme_link": false,
214
- "syme_order_by": 1,
215
- "syme_id_syme": "section-4",
216
- "syme_isactive": true
217
- },
218
- {
219
- "_id": "menu-10",
220
- "syme_title": "Email Settings",
221
- "syme_desc": "Configure email settings and templates",
222
- "syme_path": "/admin/settings/email",
223
- "syme_icon": "email",
224
- "syme_type": "menu",
225
- "syme_link": false,
226
- "syme_order_by": 2,
227
- "syme_id_syme": "section-4",
228
- "syme_isactive": false
229
- }
230
- ]
231
- },
232
- {
233
- "_id": "section-5",
234
- "syme_title": "Advanced",
235
- "syme_desc": "Advanced system settings",
236
- "syme_path": "",
237
- "syme_icon": "build",
238
- "syme_type": "section",
239
- "syme_link": false,
240
- "syme_order_by": 2,
241
- "syme_id_syme": "module-3",
242
- "syme_isactive": true,
243
- "children": [
244
- {
245
- "_id": "menu-11",
246
- "syme_title": "Database",
247
- "syme_desc": "Database configuration and maintenance",
248
- "syme_path": "/admin/settings/database",
249
- "syme_icon": "storage",
250
- "syme_type": "menu",
251
- "syme_link": false,
252
- "syme_order_by": 1,
253
- "syme_id_syme": "section-5",
254
- "syme_isactive": true
255
- },
256
- {
257
- "_id": "menu-12",
258
- "syme_title": "Logs",
259
- "syme_desc": "System logs and debugging",
260
- "syme_path": "/admin/settings/logs",
261
- "syme_icon": "description",
262
- "syme_type": "menu",
263
- "syme_link": false,
264
- "syme_order_by": 2,
265
- "syme_id_syme": "section-5",
266
- "syme_isactive": true
267
- }
268
- ]
269
- }
270
- ]
271
- },
272
- {
273
- "_id": "module-4",
274
- "syme_title": "Help & Support",
275
- "syme_desc": "Help documentation and support tools",
276
- "syme_path": "/help",
277
- "syme_icon": "help",
278
- "syme_type": "module",
279
- "syme_link": false,
280
- "syme_order_by": 4,
281
- "syme_isactive": true,
282
- "children": [
283
- {
284
- "_id": "menu-13",
285
- "syme_title": "Documentation",
286
- "syme_desc": "System documentation and guides",
287
- "syme_path": "/help/docs",
288
- "syme_icon": "book",
289
- "syme_type": "menu",
290
- "syme_link": false,
291
- "syme_order_by": 1,
292
- "syme_id_syme": "module-4",
293
- "syme_isactive": true
294
- },
295
- {
296
- "_id": "menu-14",
297
- "syme_title": "Contact Support",
298
- "syme_desc": "Contact technical support team",
299
- "syme_path": "/help/contact",
300
- "syme_icon": "support_agent",
301
- "syme_type": "menu",
302
- "syme_link": false,
303
- "syme_order_by": 2,
304
- "syme_id_syme": "module-4",
305
- "syme_isactive": true
306
- }
307
- ]
308
- }
309
- ],
310
- "total": 14
311
- }
@@ -1,230 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { throwError, BehaviorSubject, of } from 'rxjs';
3
- import { catchError, tap, map } from 'rxjs/operators';
4
- import { cidePath, coreRoutesUrl, generateStringFromObject, hostManagerRoutesUrl } from 'cloud-ide-lms-model';
5
- import mockMenuData from '../mock-data/menu-items.json';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/common/http";
8
- export class MenuManagementService {
9
- constructor(http) {
10
- this.http = http;
11
- this.apiUrl = `${coreRoutesUrl?.getSidebarMenues}`;
12
- this.menuListSubject = new BehaviorSubject([]);
13
- this.menuList$ = this.menuListSubject.asObservable();
14
- console.log('MenuManagementService initialized - using real API');
15
- }
16
- /**
17
- * Get menu list from API
18
- */
19
- getMenuList(body) {
20
- const query = generateStringFromObject(body);
21
- return this.http?.get(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, query]))
22
- .pipe(tap((response) => {
23
- if (response?.success) {
24
- this.menuListSubject.next(response?.data || []);
25
- }
26
- }), catchError(error => {
27
- console.error('MenuManagementService API error:', error);
28
- return this.handleError(error);
29
- }));
30
- }
31
- /**
32
- * Get menu list using mock data
33
- */
34
- getMenuListWithMockData() {
35
- console.log('Using mock data for menu list');
36
- // Convert mock data to match ICoreSyme interface
37
- const mockData = {
38
- ...mockMenuData,
39
- data: mockMenuData.data.map((item) => ({
40
- ...item,
41
- syme_link: item['syme_link'] ? '1' : '0' // Convert boolean to string
42
- }))
43
- };
44
- return of(mockData).pipe(tap((response) => {
45
- if (response?.success) {
46
- this.menuListSubject.next(response?.data || []);
47
- }
48
- }));
49
- }
50
- /**
51
- * Get menu list from cache (if available)
52
- */
53
- getMenuListFromCache() {
54
- return this.menuListSubject.value;
55
- }
56
- /**
57
- * Create new menu item
58
- * POST ${coreRoutesUrl?.menu} - payload: MCoreSymeInsertUpdatePayload, response: menuInsertUpdateControllerResponse
59
- */
60
- createMenuItem(menuItem) {
61
- console.log('Creating menu item:', menuItem);
62
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu]);
63
- return this.http.post(url, menuItem)
64
- .pipe(tap((response) => {
65
- if (response.success) {
66
- this.refreshMenuList();
67
- }
68
- }), catchError(this.handleError));
69
- }
70
- /**
71
- * Update existing menu item
72
- * POST ${coreRoutesUrl?.menu} - payload: MCoreSymeInsertUpdatePayload, response: menuInsertUpdateControllerResponse
73
- */
74
- updateMenuItem(id, menuItem) {
75
- console.log('Updating menu item:', id, menuItem);
76
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu]);
77
- return this.http.post(url, menuItem)
78
- .pipe(tap((response) => {
79
- if (response.success) {
80
- this.refreshMenuList();
81
- }
82
- }), catchError(this.handleError));
83
- }
84
- /**
85
- * Get menu item by ID
86
- * GET ${coreRoutesUrl?.menu}/byId/:query - payload: MCoreSymeGetByIdPayload, response: menuByIdControllerResponse
87
- * TODO: Update to use MCoreSymeGetByIdPayload and menuByIdControllerResponse when available
88
- */
89
- getMenuItemById(id) {
90
- console.log('Getting menu item by ID:', id);
91
- const payload = { syme_id: id };
92
- const query = generateStringFromObject(payload);
93
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, 'byId', query]);
94
- return this.http.get(url)
95
- .pipe(catchError(this.handleError));
96
- }
97
- /**
98
- * Delete menu item
99
- * DELETE ${coreRoutesUrl?.menu}/:query - payload: MCoreSymeDeletePayload, response: menuDeleteControllerResponse
100
- * TODO: Update to use MCoreSymeDeletePayload and menuDeleteControllerResponse when available
101
- */
102
- deleteMenuItem(id) {
103
- const payload = { syme_id: id };
104
- const query = generateStringFromObject(payload);
105
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, query]);
106
- return this.http.delete(url)
107
- .pipe(tap((response) => {
108
- if (response.success) {
109
- this.refreshMenuList();
110
- }
111
- }), catchError(this.handleError));
112
- }
113
- /**
114
- * Delete multiple menu items
115
- * DELETE ${coreRoutesUrl?.menu}/:query - payload: MCoreSymeDeletePayload, response: menuDeleteControllerResponse
116
- * TODO: Update to use MCoreSymeDeletePayload and menuDeleteControllerResponse when available
117
- */
118
- deleteMultipleMenuItems(ids) {
119
- console.log('Deleting multiple menu items:', ids);
120
- const payload = { ids };
121
- const query = generateStringFromObject(payload);
122
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, query]);
123
- return this.http.delete(url)
124
- .pipe(tap((response) => {
125
- if (response.success) {
126
- this.refreshMenuList();
127
- }
128
- }), catchError(this.handleError));
129
- }
130
- /**
131
- * Toggle menu item active status
132
- */
133
- toggleMenuItemStatus(id) {
134
- console.log('Toggling menu item status:', id);
135
- const payload = { id };
136
- const query = generateStringFromObject(payload);
137
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, query]);
138
- return this.http.put(url, {})
139
- .pipe(tap((response) => {
140
- if (response.success) {
141
- this.refreshMenuList();
142
- }
143
- }), catchError(this.handleError));
144
- }
145
- /**
146
- * Get available menu types
147
- */
148
- getMenuTypes() {
149
- return this.http.get('/api/menu/types')
150
- .pipe(map((response) => response.data), catchError(this.handleError));
151
- }
152
- /**
153
- * Get available icons
154
- */
155
- getAvailableIcons() {
156
- return this.http.get('/api/menu/icons')
157
- .pipe(map((response) => response.data), catchError(this.handleError));
158
- }
159
- /**
160
- * Find menu item by ID (including nested items)
161
- */
162
- findMenuItemById(id, items = this.menuListSubject.value) {
163
- // Local search in current menu list
164
- for (const item of items) {
165
- if (item._id === id) {
166
- return item;
167
- }
168
- }
169
- return null;
170
- }
171
- /**
172
- * Get parent menu items for dropdown selection
173
- */
174
- getParentMenuItems(excludeId) {
175
- const allItems = [];
176
- const flattenItems = (items, level = 0) => {
177
- items.forEach(item => {
178
- if (item._id !== excludeId) {
179
- allItems.push({
180
- ...item,
181
- syme_title: ' '.repeat(level) + item.syme_title
182
- });
183
- }
184
- });
185
- };
186
- flattenItems(this.menuListSubject.value);
187
- return allItems;
188
- }
189
- /**
190
- * Refresh menu list from server
191
- */
192
- refreshMenuList() {
193
- // Create a default body for getting all menu items
194
- const defaultBody = {
195
- pageIndex: 1,
196
- pageSize: 10
197
- };
198
- this.getMenuList(defaultBody).subscribe({
199
- next: () => {
200
- console.log('Menu list refreshed successfully');
201
- },
202
- error: (error) => {
203
- console.error('Error refreshing menu list:', error);
204
- }
205
- });
206
- }
207
- /**
208
- * Handle errors
209
- */
210
- handleError(error) {
211
- let errorMessage = 'An error occurred';
212
- if (error instanceof Error) {
213
- errorMessage = error.message;
214
- }
215
- else if (typeof error === 'string') {
216
- errorMessage = error;
217
- }
218
- console.error('Menu Management Service Error:', errorMessage);
219
- return throwError(() => new Error(errorMessage));
220
- }
221
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: MenuManagementService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
222
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: MenuManagementService, providedIn: 'root' }); }
223
- }
224
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: MenuManagementService, decorators: [{
225
- type: Injectable,
226
- args: [{
227
- providedIn: 'root'
228
- }]
229
- }], ctorParameters: () => [{ type: i1.HttpClient }] });
230
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1tYW5hZ2VtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbG91ZC1pZGUtY29yZS9zcmMvbGliL2NvcmUvbWVudS1tYW5hZ2VtZW50L3NlcnZpY2VzL21lbnUtbWFuYWdlbWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFjLFVBQVUsRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFDTCxRQUFRLEVBQ1IsYUFBYSxFQUNiLHdCQUF3QixFQUN4QixvQkFBb0IsRUFRckIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLFlBQVksTUFBTSw4QkFBOEIsQ0FBQzs7O0FBS3hELE1BQU0sT0FBTyxxQkFBcUI7SUFLaEMsWUFBb0IsSUFBZ0I7UUFBaEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUo1QixXQUFNLEdBQUcsR0FBRyxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QyxvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELGNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBR3JELE9BQU8sQ0FBQyxHQUFHLENBQUMsb0RBQW9ELENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXLENBQUMsSUFBc0I7UUFDaEMsTUFBTSxLQUFLLEdBQUcsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBNkIsUUFBUSxFQUFFLElBQUksQ0FBQyxD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a0NBQWtDLENBQUMsQ0FBQztZQUNsRCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0RCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssV0FBVyxDQUFDLEtBQWM7UUFDaEMsSUFBSSxZQUFZLEdBQUcsbUJBQW1CLENBQUM7UUFFdkMsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7WUFDM0IsWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDL0IsQ0FBQzthQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDckMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDO1FBRUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM5RCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7OEdBbFFVLHFCQUFxQjtrSEFBckIscUJBQXFCLGNBRnBCLE1BQU07OzJGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IsIEJlaGF2aW9yU3ViamVjdCwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgdGFwLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFxyXG4gIGNpZGVQYXRoLCBcclxuICBjb3JlUm91dGVzVXJsLCBcclxuICBnZW5lcmF0ZVN0cmluZ0Zyb21PYmplY3QsIFxyXG4gIGhvc3RNYW5hZ2VyUm91dGVzVXJsLCBcclxuICBJQ29yZVN5bWUsIFxyXG4gIE1Db3JlU3ltZURlbGV0ZVBheWxvYWQsIFxyXG4gIE1Db3JlU3ltZUdldEJ5SWRQYXlsb2FkLCBcclxuICBtZW51QnlJZENvbnRyb2xsZXJSZXNwb25zZSwgXHJcbiAgbWVudURlbGV0ZUNvbnRyb2xsZXJSZXNwb25zZSwgXHJcbiAgbWVudUxpc3RDb250cm9sbGVyUmVzcG9uc2UsIFxyXG4gIE1NZW51TGlzdFBheWxvYWRcclxufSBmcm9tICdjbG91ZC1pZGUtbG1zLW1vZGVsJztcclxuaW1wb3J0IG1vY2tNZW51RGF0YSBmcm9tICcuLi9tb2NrLWRhdGEvbWVudS1pdGVtcy5qc29uJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE1lbnVNYW5hZ2VtZW50U2VydmljZSB7XHJcbiAgcHJpdmF0ZSBhcGlVcmwgPSBgJHtjb3JlUm91dGVzVXJsPy5nZXRTaWRlYmFyTWVudWVzfWA7XHJcbiAgcHJpdmF0ZSBtZW51TGlzdFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElDb3JlU3ltZVtdPihbXSk7XHJcbiAgcHVibGljIG1lbnVMaXN0JCA9IHRoaXMubWVudUxpc3RTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHtcclxuICAgIGNvbnNvbGUubG9nKCdNZW51TWFuYWdlbWVudFNlcnZpY2UgaW5pdGlhbGl6ZWQgLSB1c2luZyByZWFsIEFQSScpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IG1lbnUgbGlzdCBmcm9tIEFQSVxyXG4gICAqL1xyXG4gIGdldE1lbnVMaXN0KGJvZHk6IE1NZW51TGlzdFBheWxvYWQpOiBPYnNlcnZhYmxlPG1lbnVMaXN0Q29udHJvbGxlclJlc3BvbnNlPiB7XHJcbiAgICBjb25zdCBxdWVyeSA9IGdlbmVyYXRlU3RyaW5nRnJvbU9iamVjdChib2R5KTtcclxuICAgIHJldHVybiB0aGlzLmh0dHA/LmdldDxtZW51TGlzdENvbnRyb2xsZXJSZXNwb25zZT4oY2lkZVBhdGg/LmpvaW4oW2hvc3RNYW5hZ2VyUm91dGVzVXJsPy5jaWRlU3VpdGVIb3N0LCBjb3JlUm91dGVzVXJsPy5tb2R1bGUsIGNvcmVSb3V0ZXNVcmw/Lm1lbnUsIHF1ZXJ5XSkpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRhcCgocmVzcG9uc2U6IG1lbnVMaXN0Q29udHJvbGxlclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2U/LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5tZW51TGlzdFN1YmplY3QubmV4dChyZXNwb25zZT8uZGF0YSB8fCBbXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdNZW51TWFuYWdlbWVudFNlcnZpY2UgQVBJIGVycm9yOicsIGVycm9yKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IG1lbnUgbGlzdCB1c2luZyBtb2NrIGRhdGFcclxuICAgKi9cclxuICBnZXRNZW51TGlzdFdpdGhNb2NrRGF0YSgpOiBPYnNlcnZhYmxlPG1lbnVMaXN0Q29udHJvbGxlclJlc3BvbnNlPiB7XHJcbiAgICBjb25zb2xlLmxvZygnVXNpbmcgbW9jayBkYXRhIGZvciBtZW51IGxpc3QnKTtcclxuICAgIC8vIENvbnZlcnQgbW9jayBkYXRhIHRvIG1hdGNoIElDb3JlU3ltZSBpbnRlcmZhY2VcclxuICAgIGNvbnN0IG1vY2tEYXRhID0ge1xyXG4gICAgICAuLi5tb2NrTWVudURhdGEsXHJcbiAgICAgIGRhdGE6IG1vY2tNZW51RGF0YS5kYXRhLm1hcCgoaXRlbTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+ICh7XHJcbiAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICBzeW1lX2xpbms6IChpdGVtWydzeW1lX2xpbmsnXSBhcyBib29sZWFuKSA/ICcxJyA6ICcwJyAvLyBDb252ZXJ0IGJvb2xlYW4gdG8gc3RyaW5nXHJcbiAgICAgIH0pKVxyXG4gICAgfTtcclxuICAgIHJldHVybiBvZihtb2NrRGF0YSBhcyBtZW51TGlzdENvbnRyb2xsZXJSZXNwb25zZSkucGlwZShcclxuICAgICAgdGFwKChyZXNwb25zZTogbWVudUxpc3RDb250cm9sbGVyUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2U/LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRoaXMubWVudUxpc3RTdWJqZWN0Lm5leHQocmVzcG9uc2U/LmRhdGEgfHwgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgbWVudSBsaXN0IGZyb20gY2FjaGUgKGlmIGF2YWlsYWJsZSlcclxuICAgKi9cclxuICBnZXRNZW51TGlzdEZyb21DYWNoZSgpOiBJQ29yZVN5bWVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5tZW51TGlzdFN1YmplY3QudmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgbmV3IG1lbnUgaXRlbVxyXG4gICAqIFBPU1QgJHtjb3JlUm91dGVzVXJsPy5tZW51fSAtIHBheWxvYWQ6IE1Db3JlU3ltZUluc2VydFVwZGF0ZVBheWxvYWQsIHJlc3BvbnNlOiBtZW51SW5zZXJ0VXBkYXRlQ29udHJvbGxlclJlc3BvbnNlXHJcbiAgICovXHJcbiAgY3JlYXRlTWVudUl0ZW0obWVudUl0ZW06IElDb3JlU3ltZSk6IE9ic2VydmFibGU8bWVudUxpc3RDb250cm9sbGVyUmVzcG9uc2U+IHtcclxuICAgIGNvbnNvbGUubG9nKCdDcmVhdGluZyBtZW51IGl0ZW06JywgbWVudUl0ZW0pO1xyXG4gICAgY29uc3QgdXJsID0gY2lkZVBhdGg/LmpvaW4oW2hvc3RNYW5hZ2VyUm91dGVzVXJsPy5jaWRlU3VpdGVIb3N0LCBjb3JlUm91dGVzVXJsPy5tb2R1bGUsIGNvcmVSb3V0ZXNVcmw/Lm1lbnVdKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxtZW51TGlzdENvbnRyb2xsZXJSZXNwb25zZT4odXJsLCBtZW51SXRlbSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFwKChyZXNwb25zZTogbWVudUxpc3RDb250cm9sbGVyUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaE1lbnVMaXN0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGV4aXN0aW5nIG1lbnUgaXRlbVxyXG4gICAqIFBPU1QgJHtjb3JlUm91dGVzVXJsPy5tZW51fSAtIHBheWxvYWQ6IE1Db3JlU3ltZUluc2VydFVwZGF0ZVBheWxvYWQsIHJlc3BvbnNlOiBtZW51SW5zZXJ0VXBkYXRlQ29udHJvbGxlclJlc3BvbnNlXHJcbiAgICovXHJcbiAgdXBkYXRlTWVudUl0ZW0oaWQ6IHN0cmluZywgbWVudUl0ZW06IElDb3JlU3ltZSk6IE9ic2VydmFibGU8bWVudUxpc3RDb250cm9sbGVyUmVzcG9uc2U+IHtcclxuICAgIGNvbnNvbGUubG9nKCdVcGRhdGluZyBtZW51IGl0ZW06JywgaWQsIG1lbnVJdGVtKTtcclxuICAgIGNvbnN0IHVybCA9IGNpZGVQYXRoPy5qb2luKFtob3N0TWFuYWdlclJvdXRlc1VybD8uY2lkZVN1aXRlSG9zdCwgY29yZVJvdXRlc1VybD8ubW9kdWxlLCBjb3JlUm91dGVzVXJsPy5tZW51XSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8bWVudUxpc3RDb250cm9sbGVyUmVzcG9uc2U+KHVybCwgbWVudUl0ZW0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRhcCgocmVzcG9uc2U6IG1lbnVMaXN0Q29udHJvbGxlclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hNZW51TGlzdCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBtZW51IGl0ZW0gYnkgSURcclxuICAgKiBHRVQgJHtjb3JlUm91dGVzVXJsPy5tZW51fS9ieUlkLzpxdWVyeSAtIHBheWxvYWQ6IE1Db3JlU3ltZUdldEJ5SWRQYXlsb2FkLCByZXNwb25zZTogbWVudUJ5SWRDb250cm9sbGVyUmVzcG9uc2VcclxuICAgKiBUT0RPOiBVcGRhdGUgdG8gdXNlIE1Db3JlU3ltZUdldEJ5SWRQYXlsb2FkIGFuZCBtZW51QnlJZENvbnRyb2xsZXJSZXNwb25zZSB3aGVuIGF2YWlsYWJsZVxyXG4gICAqL1xyXG4gIGdldE1lbnVJdGVtQnlJZChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxtZW51QnlJZENvbnRyb2xsZXJSZXNwb25zZT4ge1xyXG4gICAgY29uc29sZS5sb2coJ0dldHRpbmcgbWVudSBpdGVtIGJ5IElEOicsIGlkKTtcclxuICAgIGNvbnN0IHBheWxvYWQ6IE1Db3JlU3ltZUdldEJ5SWRQYXlsb2FkID0geyBzeW1lX2lkOiBpZCB9O1xyXG4gICAgY29uc3QgcXVlcnkgPSBnZW5lcmF0ZVN0cmluZ0Zyb21PYmplY3QocGF5bG9hZCk7XHJcbiAgICBjb25zdCB1cmwgPSBjaWRlUGF0aD8uam9pbihbaG9zdE1hbmFnZXJSb3V0ZXNVcmw/LmNpZGVTdWl0ZUhvc3QsIGNvcmVSb3V0ZXNVcmw/Lm1vZHVsZSwgY29yZVJvdXRlc1VybD8ubWVudSwgJ2J5SWQnLCBxdWVyeV0pO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8bWVudUJ5SWRDb250cm9sbGVyUmVzcG9uc2U+KHVybClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlIG1lbnUgaXRlbVxyXG4gICAqIERFTEVURSAke2NvcmVSb3V0ZXNVcmw/Lm1lbnV9LzpxdWVyeSAtIHBheWxvYWQ6IE1Db3JlU3ltZURlbGV0ZVBheWxvYWQsIHJlc3BvbnNlOiBtZW51RGVsZXRlQ29udHJvbGxlclJlc3BvbnNlXHJcbiAgICogVE9ETzogVXBkYXRlIHRvIHVzZSBNQ29yZVN5bWVEZWxldGVQYXlsb2FkIGFuZCBtZW51RGVsZXRlQ29udHJvbGxlclJlc3BvbnNlIHdoZW4gYXZhaWxhYmxlXHJcbiAgICovXHJcbiAgZGVsZXRlTWVudUl0ZW0oaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8bWVudURlbGV0ZUNvbnRyb2xsZXJSZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcGF5bG9hZDogTUNvcmVTeW1lRGVsZXRlUGF5bG9hZCA9IHsgc3ltZV9pZDogaWQgfTtcclxuICAgIGNvbnN0IHF1ZXJ5ID0gZ2VuZXJhdGVTdHJpbmdGcm9tT2JqZWN0KHBheWxvYWQpO1xyXG4gICAgY29uc3QgdXJsID0gY2lkZVBhdGg/LmpvaW4oW2hvc3RNYW5hZ2VyUm91dGVzVXJsPy5jaWRlU3VpdGVIb3N0LCBjb3JlUm91dGVzVXJsPy5tb2R1bGUsIGNvcmVSb3V0ZXNVcmw/Lm1lbnUsIHF1ZXJ5XSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxtZW51RGVsZXRlQ29udHJvbGxlclJlc3BvbnNlPih1cmwpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRhcCgocmVzcG9uc2U6IG1lbnVEZWxldGVDb250cm9sbGVyUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaE1lbnVMaXN0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlIG11bHRpcGxlIG1lbnUgaXRlbXNcclxuICAgKiBERUxFVEUgJHtjb3JlUm91dGVzVXJsPy5tZW51fS86cXVlcnkgLSBwYXlsb2FkOiBNQ29yZVN5bWVEZWxldGVQYXlsb2FkLCByZXNwb25zZTogbWVudURlbGV0ZUNvbnRyb2xsZXJSZXNwb25zZVxyXG4gICAqIFRPRE86IFVwZGF0ZSB0byB1c2UgTUNvcmVTeW1lRGVsZXRlUGF5bG9hZCBhbmQgbWVudURlbGV0ZUNvbnRyb2xsZXJSZXNwb25zZSB3aGVuIGF2YWlsYWJsZVxyXG4gICAqL1xyXG4gIGRlbGV0ZU11bHRpcGxlTWVudUl0ZW1zKGlkczogc3RyaW5nW10pOiBPYnNlcnZhYmxlPHsgc3VjY2VzczogYm9vbGVhbjsgbWVzc2FnZT86IHN0cmluZzsgZGF0YT86IHVua25vd24gfT4ge1xyXG4gICAgY29uc29sZS5sb2coJ0RlbGV0aW5nIG11bHRpcGxlIG1lbnUgaXRlbXM6JywgaWRzKTtcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7IGlkcyB9O1xyXG4gICAgY29uc3QgcXVlcnkgPSBnZW5lcmF0ZVN0cmluZ0Zyb21PYmplY3QocGF5bG9hZCk7XHJcbiAgICBjb25zdCB1cmwgPSBjaWRlUGF0aD8uam9pbihbaG9zdE1hbmFnZXJSb3V0ZXNVcmw/LmNpZGVTdWl0ZUhvc3QsIGNvcmVSb3V0ZXNVcmw/Lm1vZHVsZSwgY29yZVJvdXRlc1VybD8ubWVudSwgcXVlcnldKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPHsgc3VjY2VzczogYm9vbGVhbjsgbWVzc2FnZT86IHN0cmluZzsgZGF0YT86IHVua25vd24gfT4odXJsKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YXAoKHJlc3BvbnNlOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2U/OiBzdHJpbmc7IGRhdGE/OiB1bmtub3duIH0pID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaE1lbnVMaXN0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlIG1lbnUgaXRlbSBhY3RpdmUgc3RhdHVzXHJcbiAgICovXHJcbiAgdG9nZ2xlTWVudUl0ZW1TdGF0dXMoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8bWVudUxpc3RDb250cm9sbGVyUmVzcG9uc2U+IHtcclxuICAgIGNvbnNvbGUubG9nKCdUb2dnbGluZyBtZW51IGl0ZW0gc3RhdHVzOicsIGlkKTtcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7IGlkIH07XHJcbiAgICBjb25zdCBxdWVyeSA9IGdlbmVyYXRlU3RyaW5nRnJvbU9iamVjdChwYXlsb2FkKTtcclxuICAgIGNvbnN0IHVybCA9IGNpZGVQYXRoPy5qb2luKFtob3N0TWFuYWdlclJvdXRlc1VybD8uY2lkZVN1aXRlSG9zdCwgY29yZVJvdXRlc1VybD8ubW9kdWxlLCBjb3JlUm91dGVzVXJsPy5tZW51LCBxdWVyeV0pO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8bWVudUxpc3RDb250cm9sbGVyUmVzcG9uc2U+KHVybCwge30pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRhcCgocmVzcG9uc2U6IG1lbnVMaXN0Q29udHJvbGxlclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hNZW51TGlzdCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhdmFpbGFibGUgbWVudSB0eXBlc1xyXG4gICAqL1xyXG4gIGdldE1lbnVUeXBlcygpOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDx7IGRhdGE6IHN0cmluZ1tdIH0+KCcvYXBpL21lbnUvdHlwZXMnKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlOiB7IGRhdGE6IHN0cmluZ1tdIH0pID0+IHJlc3BvbnNlLmRhdGEpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhdmFpbGFibGUgaWNvbnNcclxuICAgKi9cclxuICBnZXRBdmFpbGFibGVJY29ucygpOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDx7IGRhdGE6IHN0cmluZ1tdIH0+KCcvYXBpL21lbnUvaWNvbnMnKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlOiB7IGRhdGE6IHN0cmluZ1tdIH0pID0+IHJlc3BvbnNlLmRhdGEpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbmQgbWVudSBpdGVtIGJ5IElEIChpbmNsdWRpbmcgbmVzdGVkIGl0ZW1zKVxyXG4gICAqL1xyXG4gIGZpbmRNZW51SXRlbUJ5SWQoaWQ6IHN0cmluZywgaXRlbXM6IElDb3JlU3ltZVtdID0gdGhpcy5tZW51TGlzdFN1YmplY3QudmFsdWUpOiBJQ29yZVN5bWUgfCBudWxsIHtcclxuICAgIC8vIExvY2FsIHNlYXJjaCBpbiBjdXJyZW50IG1lbnUgbGlzdFxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XHJcbiAgICAgIGlmIChpdGVtLl9pZCA9PT0gaWQpIHtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgcGFyZW50IG1lbnUgaXRlbXMgZm9yIGRyb3Bkb3duIHNlbGVjdGlvblxyXG4gICAqL1xyXG4gIGdldFBhcmVudE1lbnVJdGVtcyhleGNsdWRlSWQ/OiBzdHJpbmcpOiBJQ29yZVN5bWVbXSB7XHJcbiAgICBjb25zdCBhbGxJdGVtczogSUNvcmVTeW1lW10gPSBbXTtcclxuXHJcbiAgICBjb25zdCBmbGF0dGVuSXRlbXMgPSAoaXRlbXM6IElDb3JlU3ltZVtdLCBsZXZlbDogbnVtYmVyID0gMCkgPT4ge1xyXG4gICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLl9pZCAhPT0gZXhjbHVkZUlkKSB7XHJcbiAgICAgICAgICBhbGxJdGVtcy5wdXNoKHtcclxuICAgICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICAgICAgc3ltZV90aXRsZTogJyAgJy5yZXBlYXQobGV2ZWwpICsgaXRlbS5zeW1lX3RpdGxlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBmbGF0dGVuSXRlbXModGhpcy5tZW51TGlzdFN1YmplY3QudmFsdWUpO1xyXG4gICAgcmV0dXJuIGFsbEl0ZW1zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVmcmVzaCBtZW51IGxpc3QgZnJvbSBzZXJ2ZXJcclxuICAgKi9cclxuICBwcml2YXRlIHJlZnJlc2hNZW51TGlzdCgpOiB2b2lkIHtcclxuICAgIC8vIENyZWF0ZSBhIGRlZmF1bHQgYm9keSBmb3IgZ2V0dGluZyBhbGwgbWVudSBpdGVtc1xyXG4gICAgY29uc3QgZGVmYXVsdEJvZHk6IE1NZW51TGlzdFBheWxvYWQgPSB7XHJcbiAgICAgIHBhZ2VJbmRleDogMSxcclxuICAgICAgcGFnZVNpemU6IDEwXHJcbiAgICB9O1xyXG4gICAgdGhpcy5nZXRNZW51TGlzdChkZWZhdWx0Qm9keSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdNZW51IGxpc3QgcmVmcmVzaGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcmVmcmVzaGluZyBtZW51IGxpc3Q6JywgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBlcnJvcnNcclxuICAgKi9cclxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiB1bmtub3duKTogT2JzZXJ2YWJsZTxuZXZlcj4ge1xyXG4gICAgbGV0IGVycm9yTWVzc2FnZSA9ICdBbiBlcnJvciBvY2N1cnJlZCc7XHJcblxyXG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcclxuICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvcjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmVycm9yKCdNZW51IE1hbmFnZW1lbnQgU2VydmljZSBFcnJvcjonLCBlcnJvck1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKGVycm9yTWVzc2FnZSkpO1xyXG4gIH1cclxufSAiXX0=