cloud-ide-core 1.0.1 → 1.0.2

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-BNYoP_bS.mjs} +132 -134
  3. package/fesm2022/{cloud-ide-core-general-master-type.component-B26auJZw.mjs.map → cloud-ide-core-general-master-type.component-BNYoP_bS.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-CFGGHinl.mjs} +152 -154
  7. package/fesm2022/{cloud-ide-core-general-master.component-B6llTVoV.mjs.map → cloud-ide-core-general-master.component-CFGGHinl.mjs.map} +1 -1
  8. package/fesm2022/{cloud-ide-core-page-form.component-CaEca3mB.mjs → cloud-ide-core-page-form.component-vfE-LkTS.mjs} +25 -25
  9. package/fesm2022/{cloud-ide-core-page-form.component-CaEca3mB.mjs.map → cloud-ide-core-page-form.component-vfE-LkTS.mjs.map} +1 -1
  10. package/fesm2022/cloud-ide-core.mjs +1113 -1110
  11. package/fesm2022/cloud-ide-core.mjs.map +1 -1
  12. package/index.d.ts +1736 -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,203 +0,0 @@
1
- import { Injectable, inject } from '@angular/core';
2
- import { HttpClient } from '@angular/common/http';
3
- import { throwError, BehaviorSubject } from 'rxjs';
4
- import { catchError, tap } from 'rxjs/operators';
5
- import { cidePath, coreRoutesUrl, generateStringFromObject, hostManagerRoutesUrl } from 'cloud-ide-lms-model';
6
- import * as i0 from "@angular/core";
7
- export class GeneralMasterTypeService {
8
- constructor() {
9
- this.http = inject(HttpClient);
10
- this.generalMasterTypeListSubject = new BehaviorSubject([]);
11
- this.generalMasterTypeList$ = this.generalMasterTypeListSubject.asObservable();
12
- console.log('GeneralMasterTypeService initialized - using real API');
13
- }
14
- /**
15
- * Get general master type list from API
16
- */
17
- getTypeList(body) {
18
- const query = generateStringFromObject(body);
19
- return this.http?.get(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, query]))
20
- .pipe(tap((response) => {
21
- if (response?.success) {
22
- this.generalMasterTypeListSubject.next(response?.data || []);
23
- }
24
- }), catchError(error => {
25
- console.error('GeneralMasterTypeService API error:', error);
26
- return this.handleError(error);
27
- }));
28
- }
29
- /**
30
- * Get general master type list from cache (if available)
31
- */
32
- getTypeListFromCache() {
33
- return this.generalMasterTypeListSubject.value;
34
- }
35
- /**
36
- * Create or update general master type
37
- * POST ${coreRoutesUrl?.generalMasterType} - payload: IGeneralMasterTypeCreateUpdatePayload, response: generalMasterTypeInsertUpdateControllerResponse
38
- * If type._id exists, it will update; otherwise, it will create a new type
39
- */
40
- saveType(type) {
41
- const isUpdate = !!type._id;
42
- console.log(`${isUpdate ? 'Updating' : 'Creating'} general master type:`, type);
43
- // Create proper payload - backend will determine create vs update based on _id presence
44
- const payload = {
45
- ...(type._id && { _id: type._id }), // Only include _id if it exists
46
- sygmt_code: type.sygmt_code,
47
- sygmt_title: type.sygmt_title,
48
- sygmt_desc: type.sygmt_desc,
49
- sygmt_isactive: type.sygmt_isactive,
50
- sygmt_configuration: type.sygmt_configuration,
51
- sygmt_id_sygmt: type.sygmt_id_sygmt
52
- };
53
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType]);
54
- return this.http.post(url, payload)
55
- .pipe(tap((response) => {
56
- if (response.success) {
57
- this.refreshTypeList();
58
- }
59
- }), catchError(this.handleError));
60
- }
61
- /**
62
- * Get general master type by ID
63
- * GET ${coreRoutesUrl?.generalMasterType}/byId/:query - payload: { sygmt_id: string }, response: generalMasterTypeByIdControllerResponse
64
- */
65
- getTypeById(id) {
66
- console.log('Getting general master type by ID:', id);
67
- const payload = { sygmt_id: id };
68
- const query = generateStringFromObject(payload);
69
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, 'byId', query]);
70
- return this.http.get(url)
71
- .pipe(catchError(this.handleError));
72
- }
73
- /**
74
- * Delete general master type
75
- * DELETE ${coreRoutesUrl?.generalMasterType}/:query - payload: { sygmt_id: string }, response: generalMasterTypeDeleteControllerResponse
76
- */
77
- deleteType(id) {
78
- const payload = { sygmt_id: id };
79
- const query = generateStringFromObject(payload);
80
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, query]);
81
- return this.http.delete(url)
82
- .pipe(tap((response) => {
83
- if (response.success) {
84
- this.refreshTypeList();
85
- }
86
- }), catchError(this.handleError));
87
- }
88
- /**
89
- * Delete multiple general master types
90
- */
91
- deleteMultipleTypes(ids) {
92
- console.log('Deleting multiple general master types:', ids);
93
- const payload = { ids };
94
- const query = generateStringFromObject(payload);
95
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, query]);
96
- return this.http.delete(url)
97
- .pipe(tap((response) => {
98
- if (response.success) {
99
- this.refreshTypeList();
100
- }
101
- }), catchError(this.handleError));
102
- }
103
- /**
104
- * Toggle general master type active status
105
- */
106
- toggleTypeStatus(payload) {
107
- const query = generateStringFromObject(payload);
108
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, query]);
109
- return this.http.put(url, {})
110
- .pipe(tap((response) => {
111
- if (response.success) {
112
- this.refreshTypeList();
113
- }
114
- }), catchError(this.handleError));
115
- }
116
- /**
117
- * Check if type code exists
118
- */
119
- checkTypeCodeExists(code, excludeId) {
120
- const payload = { code };
121
- if (excludeId) {
122
- payload['excludeId'] = excludeId;
123
- }
124
- const query = generateStringFromObject(payload);
125
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, 'checkCodeExists', query]);
126
- return this.http.get(url)
127
- .pipe(catchError(this.handleError));
128
- }
129
- /**
130
- * Get hierarchical tree structure
131
- */
132
- getTypeTree() {
133
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, 'tree']);
134
- return this.http.get(url)
135
- .pipe(catchError(this.handleError));
136
- }
137
- /**
138
- * Find general master type by ID
139
- */
140
- findTypeById(id, items = this.generalMasterTypeListSubject.value) {
141
- for (const item of items) {
142
- if (item._id === id) {
143
- return item;
144
- }
145
- }
146
- return null;
147
- }
148
- /**
149
- * Get parent general master types for dropdown selection
150
- */
151
- getParentTypes(excludeId) {
152
- const allItems = [];
153
- const flattenItems = (items, level = 0) => {
154
- items.forEach(item => {
155
- if (item._id !== excludeId) {
156
- allItems.push({
157
- ...item,
158
- sygmt_title: ' '.repeat(level) + item.sygmt_title
159
- });
160
- }
161
- });
162
- };
163
- flattenItems(this.generalMasterTypeListSubject.value);
164
- return allItems;
165
- }
166
- /**
167
- * Refresh general master type list from server
168
- */
169
- refreshTypeList() {
170
- const defaultBody = {};
171
- this.getTypeList(defaultBody).subscribe({
172
- next: () => {
173
- console.log('General master type list refreshed successfully');
174
- },
175
- error: (error) => {
176
- console.error('Error refreshing general master type list:', error);
177
- }
178
- });
179
- }
180
- /**
181
- * Handle errors
182
- */
183
- handleError(error) {
184
- let errorMessage = 'An error occurred';
185
- if (error instanceof Error) {
186
- errorMessage = error.message;
187
- }
188
- else if (typeof error === 'string') {
189
- errorMessage = error;
190
- }
191
- console.error('General Master Type Service Error:', errorMessage);
192
- return throwError(() => new Error(errorMessage));
193
- }
194
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: GeneralMasterTypeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
195
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: GeneralMasterTypeService, providedIn: 'root' }); }
196
- }
197
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: GeneralMasterTypeService, decorators: [{
198
- type: Injectable,
199
- args: [{
200
- providedIn: 'root'
201
- }]
202
- }], ctorParameters: () => [] });
203
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbC1tYXN0ZXItdHlwZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWNvcmUvc3JjL2xpYi9jb3JlL2dlbmVyYWwtbWFzdGVyLW1hbmFnZW1lbnQvc2VydmljZXMvZ2VuZXJhbC1tYXN0ZXItdHlwZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQWMsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFDTCxRQUFRLEVBQ1IsYUFBYSxFQUNiLHdCQUF3QixFQUN4QixvQkFBb0IsRUFTckIsTUFBTSxxQkFBcUIsQ0FBQzs7QUFLN0IsTUFBTSxPQUFPLHdCQUF3QjtJQUtuQztRQUpRLFNBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUIsaUNBQTRCLEdBQUcsSUFBSSxlQUFlLENBQWUsRUFBRSxDQUFDLENBQUM7UUFDdEUsMkJBQXNCLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRy9FLE9BQU8sQ0FBQyxHQUFHLENBQUMsdURBQXVELENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXLENBQUMsSUFBd0I7UUFDbEMsTUFBTSxLQUFLLEdBQUcsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBMEMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLG9CQUFvQixFQUFFLGFBQWEsRUFB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RUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQzs4R0FsT1Usd0JBQXdCO2tIQUF4Qix3QkFBd0IsY0FGdkIsTUFBTTs7MkZBRVAsd0JBQXdCO2tCQUhwQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgXG4gIGNpZGVQYXRoLFxuICBjb3JlUm91dGVzVXJsLFxuICBnZW5lcmF0ZVN0cmluZ0Zyb21PYmplY3QsXG4gIGhvc3RNYW5hZ2VyUm91dGVzVXJsLFxuICBnZW5lcmFsTWFzdGVyVHlwZUxpc3RDb250cm9sbGVyUmVzcG9uc2UsXG4gIGdlbmVyYWxNYXN0ZXJUeXBlQnlJZENvbnRyb2xsZXJSZXNwb25zZSxcbiAgZ2VuZXJhbE1hc3RlclR5cGVJbnNlcnRVcGRhdGVDb250cm9sbGVyUmVzcG9uc2UsXG4gIGdlbmVyYWxNYXN0ZXJUeXBlRGVsZXRlQ29udHJvbGxlclJlc3BvbnNlLFxuICBnZW5lcmFsTWFzdGVyVHlwZVRvZ2dsZVN0YXR1c0NvbnRyb2xsZXJSZXNwb25zZSxcbiAgTUdlbmVyYWxNYXN0ZXJUeXBlLFxuICBNR2VuZXJhbE1hc3RlclR5cGVUb2dnbGVTdGF0dXNQYXlsb2FkLFxuICBJQ29yZVN5Z210XG59IGZyb20gJ2Nsb3VkLWlkZS1sbXMtbW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBHZW5lcmFsTWFzdGVyVHlwZVNlcnZpY2Uge1xuICBwcml2YXRlIGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG4gIHByaXZhdGUgZ2VuZXJhbE1hc3RlclR5cGVMaXN0U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUNvcmVTeWdtdFtdPihbXSk7XG4gIHB1YmxpYyBnZW5lcmFsTWFzdGVyVHlwZUxpc3QkID0gdGhpcy5nZW5lcmFsTWFzdGVyVHlwZUxpc3RTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnNvbGUubG9nKCdHZW5lcmFsTWFzdGVyVHlwZVNlcnZpY2UgaW5pdGlhbGl6ZWQgLSB1c2luZyByZWFsIEFQSScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBnZW5lcmFsIG1hc3RlciB0eXBlIGxpc3QgZnJvbSBBUElcbiAgICovXG4gIGdldFR5cGVMaXN0KGJvZHk6IE1HZW5lcmFsTWFzdGVyVHlwZSk6IE9ic2VydmFibGU8Z2VuZXJhbE1hc3RlclR5cGVMaXN0Q29udHJvbGxlclJlc3BvbnNlPiB7XG4gICAgY29uc3QgcXVlcnkgPSBnZW5lcmF0ZVN0cmluZ0Zyb21PYmplY3QoYm9keSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cD8uZ2V0PGdlbmVyYWxNYXN0ZXJUeXBlTGlzdENvbnRyb2xsZXJSZXNwb25zZT4oY2lkZVBhdGg/LmpvaW4oW2hvc3RNYW5hZ2VyUm91dGVzVXJsPy5jaWRlU3VpdGVIb3N0LCBjb3JlUm91dGVzVXJsPy5tb2R1bGUsIGNvcmVSb3V0ZXNVcmw/LmdlbmVyYWxNYXN0ZXJUeXBlLCBxdWVyeV0pKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgocmVzcG9uc2U6IGdlbmVyYWxNYXN0ZXJUeXBlTGlzdENvbnRyb2xsZXJSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZT8uc3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5nZW5lcmFsTWFzdGVyVHlwZUxpc3RTdWJqZWN0Lm5leHQocmVzcG9uc2U/LmRhdGEgfHwgW10pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0dlbmVyYWxNYXN0ZXJUeXBlU2VydmljZSBBUEkgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGdlbmVyYWwgbWFzdGVyIHR5cGUgbGlzdCBmcm9tIGNhY2hlIChpZiBhdmFpbGFibGUpXG4gICAqL1xuICBnZXRUeXBlTGlzdEZyb21DYWNoZSgpOiBJQ29yZVN5Z210W10ge1xuICAgIHJldHVybiB0aGlzLmdlbmVyYWxNYXN0ZXJUeXBlTGlzdFN1YmplY3QudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIG9yIHVwZGF0ZSBnZW5lcmFsIG1hc3RlciB0eXBlXG4gICAqIFBPU1QgJHtjb3JlUm91dGVzVXJsPy5nZW5lcmFsTWFzdGVyVHlwZX0gLSBwYXlsb2FkOiBJR2VuZXJhbE1hc3RlclR5cGVDcmVhdGVVcGRhdGVQYXlsb2FkLCByZXNwb25zZTogZ2VuZXJhbE1hc3RlclR5cGVJbnNlcnRVcGRhdGVDb250cm9sbGVyUmVzcG9uc2VcbiAgICogSWYgdHlwZS5faWQgZXhpc3RzLCBpdCB3aWxsIHVwZGF0ZTsgb3RoZXJ3aXNlLCBpdCB3aWxsIGNyZWF0ZSBhIG5ldyB0eXBlXG4gICAqL1xuICBzYXZlVHlwZSh0eXBlOiBJQ29yZVN5Z210KTogT2JzZXJ2YWJsZTxnZW5lcmFsTWFzdGVyVHlwZUluc2VydFVwZGF0ZUNvbnRyb2xsZXJSZXNwb25zZT4ge1xuICAgIGNvbnN0IGlzVXBkYXRlID0gISF0eXBlLl9pZDtcbiAgICBjb25zb2xlLmxvZyhgJHtpc1VwZGF0ZSA/ICdVcGRhdGluZycgOiAnQ3JlYXRpbmcnfSBnZW5lcmFsIG1hc3RlciB0eXBlOmAsIHR5cGUpO1xuICAgIFxuICAgIC8vIENyZWF0ZSBwcm9wZXIgcGF5bG9hZCAtIGJhY2tlbmQgd2lsbCBkZXRlcm1pbmUgY3JlYXRlIHZzIHVwZGF0ZSBiYXNlZCBvbiBfaWQgcHJlc2VuY2VcbiAgICBjb25zdCBwYXlsb2FkOiBJQ29yZVN5Z210ID0ge1xuICAgICAgLi4uKHR5cGUuX2lkICYmIHsgX2lkOiB0eXBlLl9pZCB9KSwgLy8gT25seSBpbmNsdWRlIF9pZCBpZiBpdCBleGlzdHNcbiAgICAgIHN5Z210X2NvZGU6IHR5cGUuc3lnbXRfY29kZSxcbiAgICAgIHN5Z210X3RpdGxlOiB0eXBlLnN5Z210X3RpdGxlLFxuICAgICAgc3lnbXRfZGVzYzogdHlwZS5zeWdtdF9kZXNjLFxuICAgICAgc3lnbXRfaXNhY3RpdmU6IHR5cGUuc3lnbXRfaXNhY3RpdmUsXG4gICAgICBzeWdtdF9jb25maWd1cmF0aW9uOiB0eXBlLnN5Z210X2NvbmZpZ3VyYXRpb24sXG4gICAgICBzeWdtdF9pZF9zeWdtdDogdHlwZS5zeWdtdF9pZF9zeWdtdFxuICAgIH07XG4gICAgXG4gICAgY29uc3QgdXJsID0gY2lkZVBhdGg/LmpvaW4oW2hvc3RNYW5hZ2VyUm91dGVzVXJsPy5jaWRlU3VpdGVIb3N0LCBjb3JlUm91dGVzVXJsPy5tb2R1bGUsIGNvcmVSb3V0ZXNVcmw/LmdlbmVyYWxNYXN0ZXJUeXBlXSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGdlbmVyYWxNYXN0ZXJUeXBlSW5zZXJ0VXBkYXRlQ29udHJvbGxlclJlc3BvbnNlPih1cmwsIHBheWxvYWQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChyZXNwb25zZTogZ2VuZXJhbE1hc3RlclR5cGVJbnNlcnRVcGRhdGVDb250cm9sbGVyUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVHlwZUxpc3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBnZW5lcmFsIG1hc3RlciB0eXBlIGJ5IElEXG4gICAqIEdFVCAke2NvcmVSb3V0ZXNVcmw/LmdlbmVyYWxNYXN0ZXJUeXBlfS9ieUlkLzpxdWVyeSAtIHBheWxvYWQ6IHsgc3lnbXRfaWQ6IHN0cmluZyB9LCByZXNwb25zZTogZ2VuZXJhbE1hc3RlclR5cGVCeUlkQ29udHJvbGxlclJlc3BvbnNlXG4gICAqL1xuICBnZXRUeXBlQnlJZChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxnZW5lcmFsTWFzdGVyVHlwZUJ5SWRDb250cm9sbGVyUmVzcG9uc2U+IHtcbiAgICBjb25zb2xlLmxvZygnR2V0dGluZyBnZW5lcmFsIG1hc3RlciB0eXBlIGJ5IElEOicsIGlkKTtcbiAgICBjb25zdCBwYXlsb2FkID0geyBzeWdtdF9pZDogaWQgfTtcbiAgICBjb25zdCBxdWVyeSA9IGdlbmVyYXRlU3RyaW5nRnJvbU9iamVjdChwYXlsb2FkKTtcbiAgICBjb25zdCB1cmwgPSBjaWRlUGF0aD8uam9pbihbaG9zdE1hbmFnZXJSb3V0ZXNVcmw/LmNpZGVTdWl0ZUhvc3QsIGNvcmVSb3V0ZXNVcmw/Lm1vZHVsZSwgY29yZVJvdXRlc1VybD8uZ2VuZXJhbE1hc3RlclR5cGUsICdieUlkJywgcXVlcnldKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxnZW5lcmFsTWFzdGVyVHlwZUJ5SWRDb250cm9sbGVyUmVzcG9uc2U+KHVybClcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBnZW5lcmFsIG1hc3RlciB0eXBlXG4gICAqIERFTEVURSAke2NvcmVSb3V0ZXNVcmw/LmdlbmVyYWxNYXN0ZXJUeXBlfS86cXVlcnkgLSBwYXlsb2FkOiB7IHN5Z210X2lkOiBzdHJpbmcgfSwgcmVzcG9uc2U6IGdlbmVyYWxNYXN0ZXJUeXBlRGVsZXRlQ29udHJvbGxlclJlc3BvbnNlXG4gICAqL1xuICBkZWxldGVUeXBlKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGdlbmVyYWxNYXN0ZXJUeXBlRGVsZXRlQ29udHJvbGxlclJlc3BvbnNlPiB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHsgc3lnbXRfaWQ6IGlkIH07XG4gICAgY29uc3QgcXVlcnkgPSBnZW5lcmF0ZVN0cmluZ0Zyb21PYmplY3QocGF5bG9hZCk7XG4gICAgY29uc3QgdXJsID0gY2lkZVBhdGg/LmpvaW4oW2hvc3RNYW5hZ2VyUm91dGVzVXJsPy5jaWRlU3VpdGVIb3N0LCBjb3JlUm91dGVzVXJsPy5tb2R1bGUsIGNvcmVSb3V0ZXNVcmw/LmdlbmVyYWxNYXN0ZXJUeXBlLCBxdWVyeV0pO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGdlbmVyYWxNYXN0ZXJUeXBlRGVsZXRlQ29udHJvbGxlclJlc3BvbnNlPih1cmwpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChyZXNwb25zZTogZ2VuZXJhbE1hc3RlclR5cGVEZWxldGVDb250cm9sbGVyUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVHlwZUxpc3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBtdWx0aXBsZSBnZW5lcmFsIG1hc3RlciB0eXBlc1xuICAgKi9cbiAgZGVsZXRlTXVsdGlwbGVUeXBlcyhpZHM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTx7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2U/OiBzdHJpbmc7IGRhdGE/OiB1bmtub3duIH0+IHtcbiAgICBjb25zb2xlLmxvZygnRGVsZXRpbmcgbXVsdGlwbGUgZ2VuZXJhbCBtYXN0ZXIgdHlwZXM6JywgaWRzKTtcbiAgICBjb25zdCBwYXlsb2FkID0geyBpZHMgfTtcbiAgICBjb25zdCBxdWVyeSA9IGdlbmVyYXRlU3RyaW5nRnJvbU9iamVjdChwYXlsb2FkKTtcbiAgICBjb25zdCB1cmwgPSBjaWRlUGF0aD8uam9pbihbaG9zdE1hbmFnZXJSb3V0ZXNVcmw/LmNpZGVTdWl0ZUhvc3QsIGNvcmVSb3V0ZXNVcmw/Lm1vZHVsZSwgY29yZVJvdXRlc1VybD8uZ2VuZXJhbE1hc3RlclR5cGUsIHF1ZXJ5XSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8eyBzdWNjZXNzOiBib29sZWFuOyBtZXNzYWdlPzogc3RyaW5nOyBkYXRhPzogdW5rbm93biB9Pih1cmwpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChyZXNwb25zZTogeyBzdWNjZXNzOiBib29sZWFuOyBtZXNzYWdlPzogc3RyaW5nOyBkYXRhPzogdW5rbm93biB9KSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFR5cGVMaXN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgZ2VuZXJhbCBtYXN0ZXIgdHlwZSBhY3RpdmUgc3RhdHVzXG4gICAqL1xuICB0b2dnbGVUeXBlU3RhdHVzKHBheWxvYWQ6IE1HZW5lcmFsTWFzdGVyVHlwZVRvZ2dsZVN0YXR1c1BheWxvYWQpOiBPYnNlcnZhYmxlPGdlbmVyYWxNYXN0ZXJUeXBlVG9nZ2xlU3RhdHVzQ29udHJvbGxlclJlc3BvbnNlPiB7XG4gICAgY29uc3QgcXVlcnkgPSBnZW5lcmF0ZVN0cmluZ0Zyb21PYmplY3QocGF5bG9hZCk7XG4gICAgY29uc3QgdXJsID0gY2lkZVBhdGg/LmpvaW4oW2hvc3RNYW5hZ2VyUm91dGVzVXJsPy5jaWRlU3VpdGVIb3N0LCBjb3JlUm91dGVzVXJsPy5tb2R1bGUsIGNvcmVSb3V0ZXNVcmw/LmdlbmVyYWxNYXN0ZXJUeXBlLCBxdWVyeV0pO1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PGdlbmVyYWxNYXN0ZXJUeXBlVG9nZ2xlU3RhdHVzQ29udHJvbGxlclJlc3BvbnNlPih1cmwsIHt9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgocmVzcG9uc2U6IGdlbmVyYWxNYXN0ZXJUeXBlVG9nZ2xlU3RhdHVzQ29udHJvbGxlclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFR5cGVMaXN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0eXBlIGNvZGUgZXhpc3RzXG4gICAqL1xuICBjaGVja1R5cGVDb2RlRXhpc3RzKGNvZGU6IHN0cmluZywgZXhjbHVkZUlkPzogc3RyaW5nKTogT2JzZXJ2YWJsZTx7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZzsgZXhpc3RzOiBib29sZWFuIH0+IHtcbiAgICBjb25zdCBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBjb2RlIH07XG4gICAgaWYgKGV4Y2x1ZGVJZCkge1xuICAgICAgcGF5bG9hZFsnZXhjbHVkZUlkJ10gPSBleGNsdWRlSWQ7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5ID0gZ2VuZXJhdGVTdHJpbmdGcm9tT2JqZWN0KHBheWxvYWQpO1xuICAgIGNvbnN0IHVybCA9IGNpZGVQYXRoPy5qb2luKFtob3N0TWFuYWdlclJvdXRlc1VybD8uY2lkZVN1aXRlSG9zdCwgY29yZVJvdXRlc1VybD8ubW9kdWxlLCBjb3JlUm91dGVzVXJsPy5nZW5lcmFsTWFzdGVyVHlwZSwgJ2NoZWNrQ29kZUV4aXN0cycsIHF1ZXJ5XSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8eyBzdWNjZXNzOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmc7IGV4aXN0czogYm9vbGVhbiB9Pih1cmwpXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaGllcmFyY2hpY2FsIHRyZWUgc3RydWN0dXJlXG4gICAqL1xuICBnZXRUeXBlVHJlZSgpOiBPYnNlcnZhYmxlPGdlbmVyYWxNYXN0ZXJUeXBlTGlzdENvbnRyb2xsZXJSZXNwb25zZT4ge1xuICAgIGNvbnN0IHVybCA9IGNpZGVQYXRoPy5qb2luKFtob3N0TWFuYWdlclJvdXRlc1VybD8uY2lkZVN1aXRlSG9zdCwgY29yZVJvdXRlc1VybD8ubW9kdWxlLCBjb3JlUm91dGVzVXJsPy5nZW5lcmFsTWFzdGVyVHlwZSwgJ3RyZWUnXSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8Z2VuZXJhbE1hc3RlclR5cGVMaXN0Q29udHJvbGxlclJlc3BvbnNlPih1cmwpXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGdlbmVyYWwgbWFzdGVyIHR5cGUgYnkgSURcbiAgICovXG4gIGZpbmRUeXBlQnlJZChpZDogc3RyaW5nLCBpdGVtczogSUNvcmVTeWdtdFtdID0gdGhpcy5nZW5lcmFsTWFzdGVyVHlwZUxpc3RTdWJqZWN0LnZhbHVlKTogSUNvcmVTeWdtdCB8IG51bGwge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgaWYgKGl0ZW0uX2lkID09PSBpZCkge1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHBhcmVudCBnZW5lcmFsIG1hc3RlciB0eXBlcyBmb3IgZHJvcGRvd24gc2VsZWN0aW9uXG4gICAqL1xuICBnZXRQYXJlbnRUeXBlcyhleGNsdWRlSWQ/OiBzdHJpbmcpOiBJQ29yZVN5Z210W10ge1xuICAgIGNvbnN0IGFsbEl0ZW1zOiBJQ29yZVN5Z210W10gPSBbXTtcblxuICAgIGNvbnN0IGZsYXR0ZW5JdGVtcyA9IChpdGVtczogSUNvcmVTeWdtdFtdLCBsZXZlbDogbnVtYmVyID0gMCkgPT4ge1xuICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uX2lkICE9PSBleGNsdWRlSWQpIHtcbiAgICAgICAgICBhbGxJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBzeWdtdF90aXRsZTogJyAgJy5yZXBlYXQobGV2ZWwpICsgaXRlbS5zeWdtdF90aXRsZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgZmxhdHRlbkl0ZW1zKHRoaXMuZ2VuZXJhbE1hc3RlclR5cGVMaXN0U3ViamVjdC52YWx1ZSk7XG4gICAgcmV0dXJuIGFsbEl0ZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggZ2VuZXJhbCBtYXN0ZXIgdHlwZSBsaXN0IGZyb20gc2VydmVyXG4gICAqL1xuICBwcml2YXRlIHJlZnJlc2hUeXBlTGlzdCgpOiB2b2lkIHtcbiAgICBjb25zdCBkZWZhdWx0Qm9keTogTUdlbmVyYWxNYXN0ZXJUeXBlID0ge307XG4gICAgdGhpcy5nZXRUeXBlTGlzdChkZWZhdWx0Qm9keSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ0dlbmVyYWwgbWFzdGVyIHR5cGUgbGlzdCByZWZyZXNoZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZWZyZXNoaW5nIGdlbmVyYWwgbWFzdGVyIHR5cGUgbGlzdDonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGVycm9yc1xuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnJvcjogdW5rbm93bik6IE9ic2VydmFibGU8bmV2ZXI+IHtcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gJ0FuIGVycm9yIG9jY3VycmVkJztcblxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcignR2VuZXJhbCBNYXN0ZXIgVHlwZSBTZXJ2aWNlIEVycm9yOicsIGVycm9yTWVzc2FnZSk7XG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKGVycm9yTWVzc2FnZSkpO1xuICB9XG59ICJdfQ==
@@ -1,166 +0,0 @@
1
- import { Injectable, inject } from '@angular/core';
2
- import { HttpClient } from '@angular/common/http';
3
- import { throwError, BehaviorSubject } from 'rxjs';
4
- import { catchError, tap } from 'rxjs/operators';
5
- import { cidePath, coreRoutesUrl, generateStringFromObject, hostManagerRoutesUrl, } from 'cloud-ide-lms-model';
6
- import * as i0 from "@angular/core";
7
- export class GeneralMasterService {
8
- constructor() {
9
- this.http = inject(HttpClient);
10
- this.generalMasterListSubject = new BehaviorSubject([]);
11
- this.generalMasterList$ = this.generalMasterListSubject.asObservable();
12
- console.log('GeneralMasterService initialized - using real API');
13
- }
14
- /**
15
- * Get general master list from API
16
- */
17
- getMasterList(payload) {
18
- const query = generateStringFromObject(payload);
19
- return this.http?.get(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, query]))
20
- .pipe(tap((response) => {
21
- if (response?.success) {
22
- this.generalMasterListSubject.next(response?.data || []);
23
- }
24
- }), catchError(error => {
25
- console.error('GeneralMasterService API error:', error);
26
- return this.handleError(error);
27
- }));
28
- }
29
- /**
30
- * Get general master list from cache (if available)
31
- */
32
- getMasterListFromCache() {
33
- return this.generalMasterListSubject.value;
34
- }
35
- /**
36
- * Save general master (create or update)
37
- * POST ${coreRoutesUrl?.generalMaster} - payload: ICoreSygms, response: generalMasterInsertUpdateControllerResponse
38
- */
39
- saveMaster(master) {
40
- const isUpdate = !!master._id;
41
- console.log(`${isUpdate ? 'Updating' : 'Creating'} general master:`, master);
42
- // Create proper payload
43
- const payload = {
44
- ...(master._id && { _id: master._id }), // Only include _id if it exists
45
- sygms_code: master.sygms_code,
46
- sygms_id_sygmt: master.sygms_id_sygmt,
47
- sygms_title: master.sygms_title,
48
- sygms_desc: master.sygms_desc,
49
- sygms_isactive: master.sygms_isactive,
50
- sygms_id_sygms: master.sygms_id_sygms,
51
- sygms_configuration: master.sygms_configuration,
52
- sygms_entity_id_syen: master.sygms_entity_id_syen
53
- };
54
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster]);
55
- return this.http.post(url, payload)
56
- .pipe(tap((response) => {
57
- if (response.success) {
58
- this.refreshMasterList();
59
- }
60
- }), catchError(this.handleError));
61
- }
62
- /**
63
- * Create new general master (backward compatibility)
64
- */
65
- createMaster(master) {
66
- return this.saveMaster(master);
67
- }
68
- /**
69
- * Update existing general master (backward compatibility)
70
- */
71
- updateMaster(id, master) {
72
- return this.saveMaster({ ...master, _id: id });
73
- }
74
- /**
75
- * Get general master by ID
76
- * GET ${coreRoutesUrl?.generalMaster}/byId/:query - payload: { sygms_id: string }, response: generalMasterByIdControllerResponse
77
- */
78
- getMasterById(id) {
79
- console.log('Getting general master by ID:', id);
80
- const payload = { sygms_id: id };
81
- const query = generateStringFromObject(payload);
82
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, 'byId', query]);
83
- return this.http.get(url)
84
- .pipe(catchError(this.handleError));
85
- }
86
- /**
87
- * Delete general master
88
- * DELETE ${coreRoutesUrl?.generalMaster}/:query - payload: { sygms_id: string }, response: generalMasterDeleteControllerResponse
89
- */
90
- deleteMaster(id) {
91
- const payload = { sygms_id: id };
92
- const query = generateStringFromObject(payload);
93
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, query]);
94
- return this.http.delete(url)
95
- .pipe(tap((response) => {
96
- if (response.success) {
97
- this.refreshMasterList();
98
- }
99
- }), catchError(this.handleError));
100
- }
101
- /**
102
- * Toggle general master active status
103
- */
104
- toggleMasterStatus(id) {
105
- console.log('Toggling general master status:', id);
106
- const payload = { id };
107
- const query = generateStringFromObject(payload);
108
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, query]);
109
- return this.http.put(url, {})
110
- .pipe(tap((response) => {
111
- if (response.success) {
112
- this.refreshMasterList();
113
- }
114
- }), catchError(this.handleError));
115
- }
116
- /**
117
- * Check if master code exists
118
- */
119
- checkMasterCodeExists(code, typeId, excludeId) {
120
- const payload = { code, typeId };
121
- if (excludeId) {
122
- payload['excludeId'] = excludeId;
123
- }
124
- const query = generateStringFromObject(payload);
125
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, 'checkCodeExists', query]);
126
- return this.http.get(url)
127
- .pipe(catchError(this.handleError));
128
- }
129
- /**
130
- * Refresh general master list from server
131
- */
132
- refreshMasterList() {
133
- const defaultPayload = {};
134
- this.getMasterList(defaultPayload).subscribe({
135
- next: () => {
136
- console.log('General master list refreshed successfully');
137
- },
138
- error: (error) => {
139
- console.error('Error refreshing general master list:', error);
140
- }
141
- });
142
- }
143
- /**
144
- * Handle errors
145
- */
146
- handleError(error) {
147
- let errorMessage = 'An error occurred';
148
- if (error instanceof Error) {
149
- errorMessage = error.message;
150
- }
151
- else if (typeof error === 'string') {
152
- errorMessage = error;
153
- }
154
- console.error('General Master Service Error:', errorMessage);
155
- return throwError(() => new Error(errorMessage));
156
- }
157
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: GeneralMasterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
158
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: GeneralMasterService, providedIn: 'root' }); }
159
- }
160
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: GeneralMasterService, decorators: [{
161
- type: Injectable,
162
- args: [{
163
- providedIn: 'root'
164
- }]
165
- }], ctorParameters: () => [] });
166
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbC1tYXN0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1jb3JlL3NyYy9saWIvY29yZS9nZW5lcmFsLW1hc3Rlci1tYW5hZ2VtZW50L3NlcnZpY2VzL2dlbmVyYWwtbWFzdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBYyxVQUFVLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUNMLFFBQVEsRUFDUixhQUFhLEVBQ2Isd0JBQXdCLEVBQ3hCLG9CQUFvQixHQVFyQixNQUFNLHFCQUFxQixDQUFDOztBQUs3QixNQUFNLE9BQU8sb0JBQW9CO0lBSy9CO1FBSlEsU0FBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQiw2QkFBd0IsR0FBRyxJQUFJLGVBQWUsQ0FBZSxFQUFFLENBQUMsQ0FBQztRQUNsRSx1QkFBa0IsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFHdkUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWEsQ0FBQyxPQUFrQztRQUM5QyxNQUFNLEtBQUssR0FBRyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFzQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFB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SSxDQUNILFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQzdCLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSyxpQkFBaUI7UUFDdkIsTUFBTSxjQUFjLEdBQThCLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUMzQyxJQUFJLEVBQUUsR0FBRyxFQUFFO2dCQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsNENBQTRDLENBQUMsQ0FBQztZQUM1RCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNoRSxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssV0FBVyxDQUFDLEtBQWM7UUFDaEMsSUFBSSxZQUFZLEdBQUcsbUJBQW1CLENBQUM7UUFFdkMsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7WUFDM0IsWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDL0IsQ0FBQzthQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDckMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDO1FBRUQsT0FBTyxDQUFDLEtBQUssQ0FBQywrQkFBK0IsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM3RCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7OEdBcExVLG9CQUFvQjtrSEFBcEIsb0JBQW9CLGNBRm5CLE1BQU07OzJGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFxuICBjaWRlUGF0aCxcbiAgY29yZVJvdXRlc1VybCxcbiAgZ2VuZXJhdGVTdHJpbmdGcm9tT2JqZWN0LFxuICBob3N0TWFuYWdlclJvdXRlc1VybCxcbiAgZ2VuZXJhbE1hc3Rlckxpc3RDb250cm9sbGVyUmVzcG9uc2UsXG4gIGdlbmVyYWxNYXN0ZXJCeUlkQ29udHJvbGxlclJlc3BvbnNlLFxuICBnZW5lcmFsTWFzdGVySW5zZXJ0VXBkYXRlQ29udHJvbGxlclJlc3BvbnNlLFxuICBnZW5lcmFsTWFzdGVyRGVsZXRlQ29udHJvbGxlclJlc3BvbnNlLFxuICBnZW5lcmFsTWFzdGVyVG9nZ2xlU3RhdHVzQ29udHJvbGxlclJlc3BvbnNlLFxuICBJQ29yZVN5Z21zLFxuICBJR2VuZXJhbE1hc3Rlckxpc3RSZXF1ZXN0LFxufSBmcm9tICdjbG91ZC1pZGUtbG1zLW1vZGVsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJhbE1hc3RlclNlcnZpY2Uge1xuICBwcml2YXRlIGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG4gIHByaXZhdGUgZ2VuZXJhbE1hc3Rlckxpc3RTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJQ29yZVN5Z21zW10+KFtdKTtcbiAgcHVibGljIGdlbmVyYWxNYXN0ZXJMaXN0JCA9IHRoaXMuZ2VuZXJhbE1hc3Rlckxpc3RTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnNvbGUubG9nKCdHZW5lcmFsTWFzdGVyU2VydmljZSBpbml0aWFsaXplZCAtIHVzaW5nIHJlYWwgQVBJJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGdlbmVyYWwgbWFzdGVyIGxpc3QgZnJvbSBBUElcbiAgICovXG4gIGdldE1hc3Rlckxpc3QocGF5bG9hZDogSUdlbmVyYWxNYXN0ZXJMaXN0UmVxdWVzdCk6IE9ic2VydmFibGU8Z2VuZXJhbE1hc3Rlckxpc3RDb250cm9sbGVyUmVzcG9uc2U+IHtcbiAgICBjb25zdCBxdWVyeSA9IGdlbmVyYXRlU3RyaW5nRnJvbU9iamVjdChwYXlsb2FkKTtcbiAgICByZXR1cm4gdGhpcy5odHRwPy5nZXQ8Z2VuZXJhbE1hc3Rlckxpc3RDb250cm9sbGVyUmVzcG9uc2U+KGNpZGVQYXRoPy5qb2luKFtob3N0TWFuYWdlclJvdXRlc1VybD8uY2lkZVN1aXRlSG9zdCwgY29yZVJvdXRlc1VybD8ubW9kdWxlLCBjb3JlUm91dGVzVXJsPy5nZW5lcmFsTWFzdGVyLCBxdWVyeV0pKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgocmVzcG9uc2U6IGdlbmVyYWxNYXN0ZXJMaXN0Q29udHJvbGxlclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlPy5zdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYWxNYXN0ZXJMaXN0U3ViamVjdC5uZXh0KHJlc3BvbnNlPy5kYXRhIHx8IFtdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdHZW5lcmFsTWFzdGVyU2VydmljZSBBUEkgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGdlbmVyYWwgbWFzdGVyIGxpc3QgZnJvbSBjYWNoZSAoaWYgYXZhaWxhYmxlKVxuICAgKi9cbiAgZ2V0TWFzdGVyTGlzdEZyb21DYWNoZSgpOiBJQ29yZVN5Z21zW10ge1xuICAgIHJldHVybiB0aGlzLmdlbmVyYWxNYXN0ZXJMaXN0U3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGdlbmVyYWwgbWFzdGVyIChjcmVhdGUgb3IgdXBkYXRlKVxuICAgKiBQT1NUICR7Y29yZVJvdXRlc1VybD8uZ2VuZXJhbE1hc3Rlcn0gLSBwYXlsb2FkOiBJQ29yZVN5Z21zLCByZXNwb25zZTogZ2VuZXJhbE1hc3Rlckluc2VydFVwZGF0ZUNvbnRyb2xsZXJSZXNwb25zZVxuICAgKi9cbiAgc2F2ZU1hc3RlcihtYXN0ZXI6IElDb3JlU3lnbXMpOiBPYnNlcnZhYmxlPGdlbmVyYWxNYXN0ZXJJbnNlcnRVcGRhdGVDb250cm9sbGVyUmVzcG9uc2U+IHtcbiAgICBjb25zdCBpc1VwZGF0ZSA9ICEhbWFzdGVyLl9pZDtcbiAgICBjb25zb2xlLmxvZyhgJHtpc1VwZGF0ZSA/ICdVcGRhdGluZycgOiAnQ3JlYXRpbmcnfSBnZW5lcmFsIG1hc3RlcjpgLCBtYXN0ZXIpO1xuICAgIFxuICAgIC8vIENyZWF0ZSBwcm9wZXIgcGF5bG9hZFxuICAgIGNvbnN0IHBheWxvYWQ6IElDb3JlU3lnbXMgPSB7XG4gICAgICAuLi4obWFzdGVyLl9pZCAmJiB7IF9pZDogbWFzdGVyLl9pZCB9KSwgLy8gT25seSBpbmNsdWRlIF9pZCBpZiBpdCBleGlzdHNcbiAgICAgIHN5Z21zX2NvZGU6IG1hc3Rlci5zeWdtc19jb2RlLFxuICAgICAgc3lnbXNfaWRfc3lnbXQ6IG1hc3Rlci5zeWdtc19pZF9zeWdtdCxcbiAgICAgIHN5Z21zX3RpdGxlOiBtYXN0ZXIuc3lnbXNfdGl0bGUsXG4gICAgICBzeWdtc19kZXNjOiBtYXN0ZXIuc3lnbXNfZGVzYyxcbiAgICAgIHN5Z21zX2lzYWN0aXZlOiBtYXN0ZXIuc3lnbXNfaXNhY3RpdmUsXG4gICAgICBzeWdtc19pZF9zeWdtczogbWFzdGVyLnN5Z21zX2lkX3N5Z21zLFxuICAgICAgc3lnbXNfY29uZmlndXJhdGlvbjogbWFzdGVyLnN5Z21zX2NvbmZpZ3VyYXRpb24sXG4gICAgICBzeWdtc19lbnRpdHlfaWRfc3llbjogbWFzdGVyLnN5Z21zX2VudGl0eV9pZF9zeWVuXG4gICAgfTtcbiAgICBcbiAgICBjb25zdCB1cmwgPSBjaWRlUGF0aD8uam9pbihbaG9zdE1hbmFnZXJSb3V0ZXNVcmw/LmNpZGVTdWl0ZUhvc3QsIGNvcmVSb3V0ZXNVcmw/Lm1vZHVsZSwgY29yZVJvdXRlc1VybD8uZ2VuZXJhbE1hc3Rlcl0pO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxnZW5lcmFsTWFzdGVySW5zZXJ0VXBkYXRlQ29udHJvbGxlclJlc3BvbnNlPih1cmwsIHBheWxvYWQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChyZXNwb25zZTogZ2VuZXJhbE1hc3Rlckluc2VydFVwZGF0ZUNvbnRyb2xsZXJSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hNYXN0ZXJMaXN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgbmV3IGdlbmVyYWwgbWFzdGVyIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KVxuICAgKi9cbiAgY3JlYXRlTWFzdGVyKG1hc3RlcjogSUNvcmVTeWdtcyk6IE9ic2VydmFibGU8Z2VuZXJhbE1hc3Rlckluc2VydFVwZGF0ZUNvbnRyb2xsZXJSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnNhdmVNYXN0ZXIobWFzdGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZXhpc3RpbmcgZ2VuZXJhbCBtYXN0ZXIgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpXG4gICAqL1xuICB1cGRhdGVNYXN0ZXIoaWQ6IHN0cmluZywgbWFzdGVyOiBJQ29yZVN5Z21zKTogT2JzZXJ2YWJsZTxnZW5lcmFsTWFzdGVySW5zZXJ0VXBkYXRlQ29udHJvbGxlclJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuc2F2ZU1hc3Rlcih7IC4uLm1hc3RlciwgX2lkOiBpZCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZ2VuZXJhbCBtYXN0ZXIgYnkgSURcbiAgICogR0VUICR7Y29yZVJvdXRlc1VybD8uZ2VuZXJhbE1hc3Rlcn0vYnlJZC86cXVlcnkgLSBwYXlsb2FkOiB7IHN5Z21zX2lkOiBzdHJpbmcgfSwgcmVzcG9uc2U6IGdlbmVyYWxNYXN0ZXJCeUlkQ29udHJvbGxlclJlc3BvbnNlXG4gICAqL1xuICBnZXRNYXN0ZXJCeUlkKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGdlbmVyYWxNYXN0ZXJCeUlkQ29udHJvbGxlclJlc3BvbnNlPiB7XG4gICAgY29uc29sZS5sb2coJ0dldHRpbmcgZ2VuZXJhbCBtYXN0ZXIgYnkgSUQ6JywgaWQpO1xuICAgIGNvbnN0IHBheWxvYWQgPSB7IHN5Z21zX2lkOiBpZCB9O1xuICAgIGNvbnN0IHF1ZXJ5ID0gZ2VuZXJhdGVTdHJpbmdGcm9tT2JqZWN0KHBheWxvYWQpO1xuICAgIGNvbnN0IHVybCA9IGNpZGVQYXRoPy5qb2luKFtob3N0TWFuYWdlclJvdXRlc1VybD8uY2lkZVN1aXRlSG9zdCwgY29yZVJvdXRlc1VybD8ubW9kdWxlLCBjb3JlUm91dGVzVXJsPy5nZW5lcmFsTWFzdGVyLCAnYnlJZCcsIHF1ZXJ5XSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8Z2VuZXJhbE1hc3RlckJ5SWRDb250cm9sbGVyUmVzcG9uc2U+KHVybClcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBnZW5lcmFsIG1hc3RlclxuICAgKiBERUxFVEUgJHtjb3JlUm91dGVzVXJsPy5nZW5lcmFsTWFzdGVyfS86cXVlcnkgLSBwYXlsb2FkOiB7IHN5Z21zX2lkOiBzdHJpbmcgfSwgcmVzcG9uc2U6IGdlbmVyYWxNYXN0ZXJEZWxldGVDb250cm9sbGVyUmVzcG9uc2VcbiAgICovXG4gIGRlbGV0ZU1hc3RlcihpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxnZW5lcmFsTWFzdGVyRGVsZXRlQ29udHJvbGxlclJlc3BvbnNlPiB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHsgc3lnbXNfaWQ6IGlkIH07XG4gICAgY29uc3QgcXVlcnkgPSBnZW5lcmF0ZVN0cmluZ0Zyb21PYmplY3QocGF5bG9hZCk7XG4gICAgY29uc3QgdXJsID0gY2lkZVBhdGg/LmpvaW4oW2hvc3RNYW5hZ2VyUm91dGVzVXJsPy5jaWRlU3VpdGVIb3N0LCBjb3JlUm91dGVzVXJsPy5tb2R1bGUsIGNvcmVSb3V0ZXNVcmw/LmdlbmVyYWxNYXN0ZXIsIHF1ZXJ5XSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8Z2VuZXJhbE1hc3RlckRlbGV0ZUNvbnRyb2xsZXJSZXNwb25zZT4odXJsKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgocmVzcG9uc2U6IGdlbmVyYWxNYXN0ZXJEZWxldGVDb250cm9sbGVyUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTWFzdGVyTGlzdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIGdlbmVyYWwgbWFzdGVyIGFjdGl2ZSBzdGF0dXNcbiAgICovXG4gIHRvZ2dsZU1hc3RlclN0YXR1cyhpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxnZW5lcmFsTWFzdGVyVG9nZ2xlU3RhdHVzQ29udHJvbGxlclJlc3BvbnNlPiB7XG4gICAgY29uc29sZS5sb2coJ1RvZ2dsaW5nIGdlbmVyYWwgbWFzdGVyIHN0YXR1czonLCBpZCk7XG4gICAgY29uc3QgcGF5bG9hZCA9IHsgaWQgfTtcbiAgICBjb25zdCBxdWVyeSA9IGdlbmVyYXRlU3RyaW5nRnJvbU9iamVjdChwYXlsb2FkKTtcbiAgICBjb25zdCB1cmwgPSBjaWRlUGF0aD8uam9pbihbaG9zdE1hbmFnZXJSb3V0ZXNVcmw/LmNpZGVTdWl0ZUhvc3QsIGNvcmVSb3V0ZXNVcmw/Lm1vZHVsZSwgY29yZVJvdXRlc1VybD8uZ2VuZXJhbE1hc3RlciwgcXVlcnldKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxnZW5lcmFsTWFzdGVyVG9nZ2xlU3RhdHVzQ29udHJvbGxlclJlc3BvbnNlPih1cmwsIHt9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgocmVzcG9uc2U6IGdlbmVyYWxNYXN0ZXJUb2dnbGVTdGF0dXNDb250cm9sbGVyUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTWFzdGVyTGlzdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgbWFzdGVyIGNvZGUgZXhpc3RzXG4gICAqL1xuICBjaGVja01hc3RlckNvZGVFeGlzdHMoY29kZTogc3RyaW5nLCB0eXBlSWQ6IHN0cmluZywgZXhjbHVkZUlkPzogc3RyaW5nKTogT2JzZXJ2YWJsZTx7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZzsgZXhpc3RzOiBib29sZWFuIH0+IHtcbiAgICBjb25zdCBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBjb2RlLCB0eXBlSWQgfTtcbiAgICBpZiAoZXhjbHVkZUlkKSB7XG4gICAgICBwYXlsb2FkWydleGNsdWRlSWQnXSA9IGV4Y2x1ZGVJZDtcbiAgICB9XG4gICAgY29uc3QgcXVlcnkgPSBnZW5lcmF0ZVN0cmluZ0Zyb21PYmplY3QocGF5bG9hZCk7XG4gICAgY29uc3QgdXJsID0gY2lkZVBhdGg/LmpvaW4oW2hvc3RNYW5hZ2VyUm91dGVzVXJsPy5jaWRlU3VpdGVIb3N0LCBjb3JlUm91dGVzVXJsPy5tb2R1bGUsIGNvcmVSb3V0ZXNVcmw/LmdlbmVyYWxNYXN0ZXIsICdjaGVja0NvZGVFeGlzdHMnLCBxdWVyeV0pO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PHsgc3VjY2VzczogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nOyBleGlzdHM6IGJvb2xlYW4gfT4odXJsKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaCBnZW5lcmFsIG1hc3RlciBsaXN0IGZyb20gc2VydmVyXG4gICAqL1xuICBwcml2YXRlIHJlZnJlc2hNYXN0ZXJMaXN0KCk6IHZvaWQge1xuICAgIGNvbnN0IGRlZmF1bHRQYXlsb2FkOiBJR2VuZXJhbE1hc3Rlckxpc3RSZXF1ZXN0ID0ge307XG4gICAgdGhpcy5nZXRNYXN0ZXJMaXN0KGRlZmF1bHRQYXlsb2FkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnR2VuZXJhbCBtYXN0ZXIgbGlzdCByZWZyZXNoZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZWZyZXNoaW5nIGdlbmVyYWwgbWFzdGVyIGxpc3Q6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBlcnJvcnNcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyb3I6IHVua25vd24pOiBPYnNlcnZhYmxlPG5ldmVyPiB7XG4gICAgbGV0IGVycm9yTWVzc2FnZSA9ICdBbiBlcnJvciBvY2N1cnJlZCc7XG5cbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoJ0dlbmVyYWwgTWFzdGVyIFNlcnZpY2UgRXJyb3I6JywgZXJyb3JNZXNzYWdlKTtcbiAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKSk7XG4gIH1cbn0gIl19