cloud-ide-core 0.0.1 → 1.0.1

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 (25) hide show
  1. package/esm2022/lib/cloud-ide-core.routes.mjs +137 -0
  2. package/esm2022/lib/core/general-master-management/components/general-master/general-master.component.mjs +738 -0
  3. package/esm2022/lib/core/general-master-management/components/general-master-type/general-master-type.component.mjs +608 -0
  4. package/esm2022/lib/core/general-master-management/services/general-master-type.service.mjs +203 -0
  5. package/esm2022/lib/core/general-master-management/services/general-master.service.mjs +166 -0
  6. package/esm2022/lib/core/page-management/components/page-form/page-form.component.mjs +212 -0
  7. package/esm2022/public-api.mjs +2 -1
  8. package/fesm2022/cloud-ide-core-general-master-type.component-B26auJZw.mjs +611 -0
  9. package/fesm2022/cloud-ide-core-general-master-type.component-B26auJZw.mjs.map +1 -0
  10. package/fesm2022/cloud-ide-core-general-master-type.service-Ab64Jjps.mjs +206 -0
  11. package/fesm2022/cloud-ide-core-general-master-type.service-Ab64Jjps.mjs.map +1 -0
  12. package/fesm2022/cloud-ide-core-general-master.component-B6llTVoV.mjs +903 -0
  13. package/fesm2022/cloud-ide-core-general-master.component-B6llTVoV.mjs.map +1 -0
  14. package/fesm2022/cloud-ide-core-page-form.component-CaEca3mB.mjs +215 -0
  15. package/fesm2022/cloud-ide-core-page-form.component-CaEca3mB.mjs.map +1 -0
  16. package/fesm2022/cloud-ide-core.mjs +173 -1
  17. package/fesm2022/cloud-ide-core.mjs.map +1 -1
  18. package/lib/cloud-ide-core.routes.d.ts +2 -0
  19. package/lib/core/general-master-management/components/general-master/general-master.component.d.ts +167 -0
  20. package/lib/core/general-master-management/components/general-master-type/general-master-type.component.d.ts +129 -0
  21. package/lib/core/general-master-management/services/general-master-type.service.d.ts +75 -0
  22. package/lib/core/general-master-management/services/general-master.service.d.ts +62 -0
  23. package/lib/core/page-management/components/page-form/page-form.component.d.ts +35 -0
  24. package/package.json +1 -1
  25. package/public-api.d.ts +1 -0
@@ -0,0 +1,203 @@
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==
@@ -0,0 +1,166 @@
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