@rangertechnologies/ngnxt 2.1.252 → 2.1.254
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/environments/version.mjs +2 -2
- package/esm2022/lib/components/button/nxt-button.component.mjs +4 -4
- package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +8 -5
- package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +13 -14
- package/esm2022/lib/components/custom-model/custom-model.component.mjs +5 -3
- package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +11 -12
- package/esm2022/lib/components/datatable/datatable.component.mjs +7 -21
- package/esm2022/lib/components/file-upload/file-upload.component.mjs +13 -16
- package/esm2022/lib/components/icon-selector/icon-selector.component.mjs +5 -3
- package/esm2022/lib/components/list-view-filter/list-view-filter.component.mjs +9 -9
- package/esm2022/lib/components/nxt-input/nxt-input.component.mjs +24 -12
- package/esm2022/lib/components/pagination/pagination.component.mjs +3 -3
- package/esm2022/lib/components/pick-location/pick-location.component.mjs +10 -13
- package/esm2022/lib/components/search-box/search-box.component.mjs +14 -15
- package/esm2022/lib/model/bookletWrapper.mjs +1 -3
- package/esm2022/lib/nxt-app.module.mjs +9 -33
- package/esm2022/lib/pages/booklet/booklet.component.mjs +33 -100
- package/esm2022/lib/pages/builder/element/element.component.mjs +68 -61
- package/esm2022/lib/pages/builder/form/form.component.mjs +6 -3
- package/esm2022/lib/pages/builder/properties/common-fields.constants.mjs +11 -11
- package/esm2022/lib/pages/builder/properties/properties.component.mjs +235 -78
- package/esm2022/lib/pages/builder/templates/templates.component.mjs +5 -4
- package/esm2022/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.mjs +5 -46
- package/esm2022/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.mjs +50 -57
- package/esm2022/lib/pages/questionbook/questionbook.component.mjs +20 -59
- package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +17 -30
- package/esm2022/lib/pipe/custom-translate.pipe.mjs +21 -14
- package/esm2022/lib/pipe/svg/svg.pipe.mjs +26 -0
- package/esm2022/lib/services/change/change.service.mjs +46 -0
- package/esm2022/lib/services/country/country.service.mjs +135 -0
- package/esm2022/lib/services/data/data.service.mjs +100 -0
- package/esm2022/lib/services/form-builder/form-builder.service.mjs +474 -0
- package/esm2022/lib/services/pdf-designer/pdf-designer.service.mjs +395 -0
- package/esm2022/lib/services/salesforce/salesforce.service.mjs +41 -0
- package/esm2022/lib/services/shared/shared.service.mjs +100 -0
- package/esm2022/lib/services/storage/storage.service.mjs +59 -0
- package/esm2022/lib/services/template/template.service.mjs +335 -0
- package/esm2022/lib/services/translation/translation.service.mjs +121 -0
- package/esm2022/public-api.mjs +2 -5
- package/fesm2022/rangertechnologies-ngnxt.mjs +1147 -1285
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/lib/components/button/nxt-button.component.d.ts +1 -1
- package/lib/components/custom-calendar/custom-calendar.component.d.ts +1 -1
- package/lib/components/custom-dropdown/custom-dropdown.component.d.ts +3 -5
- package/lib/components/custom-radio/custom-radio.component.d.ts +3 -5
- package/lib/components/datatable/datatable.component.d.ts +3 -4
- package/lib/components/file-upload/file-upload.component.d.ts +3 -5
- package/lib/components/image-cropper/component/image-cropper.component.d.ts +1 -1
- package/lib/components/nxt-input/nxt-input.component.d.ts +2 -2
- package/lib/components/pick-location/pick-location.component.d.ts +1 -3
- package/lib/components/search-box/search-box.component.d.ts +5 -7
- package/lib/model/bookletWrapper.d.ts +0 -1
- package/lib/nxt-app.module.d.ts +15 -17
- package/lib/pages/booklet/booklet.component.d.ts +9 -11
- package/lib/pages/builder/element/element.component.d.ts +10 -7
- package/lib/pages/builder/form/form.component.d.ts +2 -1
- package/lib/pages/builder/properties/properties.component.d.ts +39 -7
- package/lib/pages/builder/templates/templates.component.d.ts +1 -1
- package/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.d.ts +1 -4
- package/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.d.ts +19 -2
- package/lib/pages/questionbook/questionbook.component.d.ts +7 -12
- package/lib/pages/questionnaire/questionnaire.component.d.ts +7 -9
- package/lib/pipe/custom-translate.pipe.d.ts +3 -4
- package/lib/pipe/svg/svg.pipe.d.ts +10 -0
- package/lib/services/{form-builder.service.d.ts → form-builder/form-builder.service.d.ts} +3 -2
- package/lib/services/{pdf-designer.service.d.ts → pdf-designer/pdf-designer.service.d.ts} +1 -1
- package/lib/services/{storage.service.d.ts → storage/storage.service.d.ts} +2 -2
- package/lib/services/{translation.service.d.ts → translation/translation.service.d.ts} +12 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -3
- package/rangertechnologies-ngnxt-2.1.254.tgz +0 -0
- package/esm2022/lib/ar.i18n.mjs +0 -29
- package/esm2022/lib/en.i18n.mjs +0 -29
- package/esm2022/lib/i18n-config.service.mjs +0 -4
- package/esm2022/lib/i18n.component.mjs +0 -45
- package/esm2022/lib/i18n.module.mjs +0 -38
- package/esm2022/lib/i18n.pipe.mjs +0 -26
- package/esm2022/lib/i18n.service.mjs +0 -56
- package/esm2022/lib/interfaces/apimeta.mjs +0 -2
- package/esm2022/lib/services/change.service.mjs +0 -46
- package/esm2022/lib/services/country.service.mjs +0 -135
- package/esm2022/lib/services/data.service.mjs +0 -100
- package/esm2022/lib/services/form-builder.service.mjs +0 -402
- package/esm2022/lib/services/pdf-designer.service.mjs +0 -398
- package/esm2022/lib/services/salesforce.service.mjs +0 -41
- package/esm2022/lib/services/shared.service.mjs +0 -100
- package/esm2022/lib/services/storage.service.mjs +0 -59
- package/esm2022/lib/services/template.service.mjs +0 -351
- package/esm2022/lib/services/translation.service.mjs +0 -61
- package/esm2022/lib/tam.i18n.mjs +0 -29
- package/lib/ar.i18n.d.ts +0 -24
- package/lib/en.i18n.d.ts +0 -24
- package/lib/i18n-config.service.d.ts +0 -2
- package/lib/i18n.component.d.ts +0 -11
- package/lib/i18n.module.d.ts +0 -9
- package/lib/i18n.pipe.d.ts +0 -10
- package/lib/i18n.service.d.ts +0 -14
- package/lib/interfaces/apimeta.d.ts +0 -15
- package/lib/tam.i18n.d.ts +0 -24
- package/rangertechnologies-ngnxt-2.1.252.tgz +0 -0
- /package/lib/services/{change.service.d.ts → change/change.service.d.ts} +0 -0
- /package/lib/services/{country.service.d.ts → country/country.service.d.ts} +0 -0
- /package/lib/services/{data.service.d.ts → data/data.service.d.ts} +0 -0
- /package/lib/services/{salesforce.service.d.ts → salesforce/salesforce.service.d.ts} +0 -0
- /package/lib/services/{shared.service.d.ts → shared/shared.service.d.ts} +0 -0
- /package/lib/services/{template.service.d.ts → template/template.service.d.ts} +0 -0
|
@@ -1,30 +1,37 @@
|
|
|
1
|
-
import { Pipe } from '@angular/core';
|
|
1
|
+
import { inject, Pipe } from '@angular/core';
|
|
2
|
+
import { TranslationService } from '../services/translation/translation.service';
|
|
3
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
2
4
|
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "../services/translation.service";
|
|
4
5
|
export class NxtCustomTranslatePipe {
|
|
5
|
-
translationService;
|
|
6
6
|
cache = new Map();
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
translationService = inject(TranslationService);
|
|
8
|
+
constructor() {
|
|
9
|
+
// SKS28JUL25 clear catch if input language code change
|
|
10
|
+
this.translationService.translationsLoaded$
|
|
11
|
+
.pipe(takeUntilDestroyed())
|
|
12
|
+
.subscribe(() => {
|
|
13
|
+
this.cache.clear();
|
|
14
|
+
});
|
|
9
15
|
}
|
|
10
|
-
transform(key, fallback) {
|
|
11
|
-
if (this.cache.has(key)) {
|
|
16
|
+
transform(key, fallback, from) {
|
|
17
|
+
if (from !== 'formBuilder' && this.cache.has(key)) {
|
|
12
18
|
return this.cache.get(key);
|
|
13
19
|
}
|
|
14
20
|
const translated = this.translationService.translate(key);
|
|
15
|
-
const result = translated || fallback || key;
|
|
16
|
-
|
|
21
|
+
const result = translated || fallback || (from === 'formBuilder' ? null : key);
|
|
22
|
+
if (from !== 'formBuilder')
|
|
23
|
+
this.cache.set(key, result);
|
|
17
24
|
return result;
|
|
18
25
|
}
|
|
19
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtCustomTranslatePipe, deps: [
|
|
20
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: NxtCustomTranslatePipe, isStandalone: true, name: "nxtCustomTranslate" });
|
|
26
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtCustomTranslatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
27
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: NxtCustomTranslatePipe, isStandalone: true, name: "nxtCustomTranslate", pure: false });
|
|
21
28
|
}
|
|
22
29
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtCustomTranslatePipe, decorators: [{
|
|
23
30
|
type: Pipe,
|
|
24
31
|
args: [{
|
|
25
32
|
name: 'nxtCustomTranslate',
|
|
26
|
-
pure:
|
|
33
|
+
pure: false,
|
|
27
34
|
standalone: true
|
|
28
35
|
}]
|
|
29
|
-
}], ctorParameters: () => [
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
}], ctorParameters: () => [] });
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXRyYW5zbGF0ZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL3BpcGUvY3VzdG9tLXRyYW5zbGF0ZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFPaEUsTUFBTSxPQUFPLHNCQUFzQjtJQUN6QixLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDbEMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFFeEQ7UUFDRSx1REFBdUQ7UUFDdkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQjthQUN4QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUMxQixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxTQUFTLENBQUMsR0FBVyxFQUFFLFFBQWdCLEVBQUUsSUFBYTtRQUNwRCxJQUFJLElBQUksS0FBSyxhQUFhLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBRSxDQUFDO1FBQzlCLENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFELE1BQU0sTUFBTSxHQUFHLFVBQVUsSUFBSSxRQUFRLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9FLElBQUksSUFBSSxLQUFLLGFBQWE7WUFBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdkQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzt3R0FyQlUsc0JBQXNCO3NHQUF0QixzQkFBc0I7OzRGQUF0QixzQkFBc0I7a0JBTGxDLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLG9CQUFvQjtvQkFDMUIsSUFBSSxFQUFFLEtBQUs7b0JBQ1gsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi90cmFuc2xhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuQFBpcGUoe1xuICBuYW1lOiAnbnh0Q3VzdG9tVHJhbnNsYXRlJyxcbiAgcHVyZTogZmFsc2UsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgTnh0Q3VzdG9tVHJhbnNsYXRlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBwcml2YXRlIGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRpb25TZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBTS1MyOEpVTDI1IGNsZWFyIGNhdGNoIGlmIGlucHV0IGxhbmd1YWdlIGNvZGUgY2hhbmdlXG4gICAgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRpb25zTG9hZGVkJFxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICAgICAgfSk7XG4gIH1cblxuICB0cmFuc2Zvcm0oa2V5OiBzdHJpbmcsIGZhbGxiYWNrOiBzdHJpbmcsIGZyb20/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChmcm9tICE9PSAnZm9ybUJ1aWxkZXInICYmIHRoaXMuY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlLmdldChrZXkpITtcbiAgICB9XG4gICAgY29uc3QgdHJhbnNsYXRlZCA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZShrZXkpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRyYW5zbGF0ZWQgfHwgZmFsbGJhY2sgfHwgKGZyb20gPT09ICdmb3JtQnVpbGRlcicgPyBudWxsIDoga2V5KTtcbiAgICBpZiAoZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyl0aGlzLmNhY2hlLnNldChrZXksIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/platform-browser";
|
|
4
|
+
// SKS31JUL25 for icon selector
|
|
5
|
+
export class SvgPipe {
|
|
6
|
+
sanitizer;
|
|
7
|
+
constructor(sanitizer) {
|
|
8
|
+
this.sanitizer = sanitizer;
|
|
9
|
+
}
|
|
10
|
+
transform(icon) {
|
|
11
|
+
if (typeof icon === 'object') {
|
|
12
|
+
return this.sanitizer.bypassSecurityTrustHtml(icon.changingThisBreaksApplicationSecurity || '');
|
|
13
|
+
}
|
|
14
|
+
return this.sanitizer.bypassSecurityTrustHtml(icon);
|
|
15
|
+
}
|
|
16
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SvgPipe, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
17
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: SvgPipe, isStandalone: true, name: "svg" });
|
|
18
|
+
}
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SvgPipe, decorators: [{
|
|
20
|
+
type: Pipe,
|
|
21
|
+
args: [{
|
|
22
|
+
name: 'svg',
|
|
23
|
+
standalone: true
|
|
24
|
+
}]
|
|
25
|
+
}], ctorParameters: () => [{ type: i1.DomSanitizer }] });
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ZnLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGlwZS9zdmcvc3ZnLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7OztBQU9wRCwrQkFBK0I7QUFDL0IsTUFBTSxPQUFPLE9BQU87SUFDRTtJQUFwQixZQUFvQixTQUF1QjtRQUF2QixjQUFTLEdBQVQsU0FBUyxDQUFjO0lBQUcsQ0FBQztJQUUvQyxTQUFTLENBQUMsSUFBUztRQUNqQixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FDM0MsSUFBSSxDQUFDLHFDQUFxQyxJQUFJLEVBQUUsQ0FDakQsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEQsQ0FBQzt3R0FWVSxPQUFPO3NHQUFQLE9BQU87OzRGQUFQLE9BQU87a0JBTG5CLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLEtBQUs7b0JBQ1gsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdzdmcnLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuLy8gU0tTMzFKVUwyNSBmb3IgaWNvbiBzZWxlY3RvclxuZXhwb3J0IGNsYXNzIFN2Z1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikge31cblxuICB0cmFuc2Zvcm0oaWNvbjogYW55KTogU2FmZUh0bWwge1xuICAgIGlmICh0eXBlb2YgaWNvbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChcbiAgICAgICAgaWNvbi5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5IHx8ICcnXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoaWNvbik7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class ChangeService {
|
|
5
|
+
constructor() { }
|
|
6
|
+
// Observable parentQuestion sources
|
|
7
|
+
changeAnnouncedSource = new BehaviorSubject(null);
|
|
8
|
+
changeConfirmedSource = new BehaviorSubject(null);
|
|
9
|
+
validationSource = new BehaviorSubject(null);
|
|
10
|
+
fieldSource = new BehaviorSubject(null);
|
|
11
|
+
// VD 13Sep24 - databind changes
|
|
12
|
+
customChanges = new BehaviorSubject(null);
|
|
13
|
+
// Observable parentQuestion streams
|
|
14
|
+
changeAnnounced$ = this.changeAnnouncedSource.asObservable();
|
|
15
|
+
changeConfirmed$ = this.changeConfirmedSource.asObservable();
|
|
16
|
+
submitValidate$ = this.validationSource.asObservable();
|
|
17
|
+
changeField$ = this.fieldSource.asObservable();
|
|
18
|
+
// VD 13Sep24 - databind changes
|
|
19
|
+
customChange$ = this.customChanges.asObservable();
|
|
20
|
+
// Service message commands
|
|
21
|
+
announceChange(changeValue) {
|
|
22
|
+
this.changeAnnouncedSource.next(changeValue);
|
|
23
|
+
}
|
|
24
|
+
confirmChange(childQuestion) {
|
|
25
|
+
this.changeConfirmedSource.next(childQuestion);
|
|
26
|
+
}
|
|
27
|
+
// VD 13Sep24 - databind changes
|
|
28
|
+
dataChanges(data) {
|
|
29
|
+
this.customChanges.next(data);
|
|
30
|
+
}
|
|
31
|
+
submitChange(value) {
|
|
32
|
+
this.validationSource.next(value);
|
|
33
|
+
}
|
|
34
|
+
fieldChange(value) {
|
|
35
|
+
this.fieldSource.next(value);
|
|
36
|
+
}
|
|
37
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChangeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
38
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChangeService, providedIn: 'root' });
|
|
39
|
+
}
|
|
40
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChangeService, decorators: [{
|
|
41
|
+
type: Injectable,
|
|
42
|
+
args: [{
|
|
43
|
+
providedIn: 'root'
|
|
44
|
+
}]
|
|
45
|
+
}], ctorParameters: () => [] });
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbmdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvc2VydmljZXMvY2hhbmdlL2NoYW5nZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFLdkMsTUFBTSxPQUFPLGFBQWE7SUFFeEIsZ0JBQWdCLENBQUM7SUFDbkIsb0NBQW9DO0lBQzVCLHFCQUFxQixHQUFFLElBQUksZUFBZSxDQUFNLElBQUksQ0FBQyxDQUFDO0lBQ3RELHFCQUFxQixHQUFHLElBQUksZUFBZSxDQUFNLElBQUksQ0FBQyxDQUFDO0lBQ3ZELGdCQUFnQixHQUFHLElBQUksZUFBZSxDQUFNLElBQUksQ0FBQyxDQUFDO0lBQ2xELFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBTSxJQUFJLENBQUMsQ0FBQztJQUNyRCxnQ0FBZ0M7SUFDeEIsYUFBYSxHQUFHLElBQUksZUFBZSxDQUFNLElBQUksQ0FBQyxDQUFDO0lBRXZELG9DQUFvQztJQUNwQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0QsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdELGVBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdkQsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0MsZ0NBQWdDO0lBQ2hDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRWxELDJCQUEyQjtJQUMzQixjQUFjLENBQUMsV0FBZ0I7UUFDN0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsYUFBYSxDQUFDLGFBQXFCO1FBQ2pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUNELGdDQUFnQztJQUNoQyxXQUFXLENBQUMsSUFBWTtRQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQVk7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsV0FBVyxDQUFDLEtBQVM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQzt3R0FyQ1ksYUFBYTs0R0FBYixhQUFhLGNBRlosTUFBTTs7NEZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2hhbmdlU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cbi8vIE9ic2VydmFibGUgcGFyZW50UXVlc3Rpb24gc291cmNlc1xucHJpdmF0ZSBjaGFuZ2VBbm5vdW5jZWRTb3VyY2UgPW5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcbnByaXZhdGUgY2hhbmdlQ29uZmlybWVkU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xucHJpdmF0ZSB2YWxpZGF0aW9uU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xucHJpdmF0ZSBmaWVsZFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcbi8vIFZEIDEzU2VwMjQgLSBkYXRhYmluZCBjaGFuZ2VzXG5wcml2YXRlIGN1c3RvbUNoYW5nZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG5cbi8vIE9ic2VydmFibGUgcGFyZW50UXVlc3Rpb24gc3RyZWFtc1xuY2hhbmdlQW5ub3VuY2VkJCA9IHRoaXMuY2hhbmdlQW5ub3VuY2VkU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuY2hhbmdlQ29uZmlybWVkJCA9IHRoaXMuY2hhbmdlQ29uZmlybWVkU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuc3VibWl0VmFsaWRhdGUkID0gdGhpcy52YWxpZGF0aW9uU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuY2hhbmdlRmllbGQkID0gdGhpcy5maWVsZFNvdXJjZS5hc09ic2VydmFibGUoKTtcbi8vIFZEIDEzU2VwMjQgLSBkYXRhYmluZCBjaGFuZ2VzXG5jdXN0b21DaGFuZ2UkID0gdGhpcy5jdXN0b21DaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpO1xuXG4vLyBTZXJ2aWNlIG1lc3NhZ2UgY29tbWFuZHNcbmFubm91bmNlQ2hhbmdlKGNoYW5nZVZhbHVlOiBhbnkpIHtcbiAgdGhpcy5jaGFuZ2VBbm5vdW5jZWRTb3VyY2UubmV4dChjaGFuZ2VWYWx1ZSk7XG59XG5cbmNvbmZpcm1DaGFuZ2UoY2hpbGRRdWVzdGlvbjogc3RyaW5nKSB7XG4gIHRoaXMuY2hhbmdlQ29uZmlybWVkU291cmNlLm5leHQoY2hpbGRRdWVzdGlvbik7XG59XG4vLyBWRCAxM1NlcDI0IC0gZGF0YWJpbmQgY2hhbmdlc1xuZGF0YUNoYW5nZXMoZGF0YTogc3RyaW5nKSB7XG4gIHRoaXMuY3VzdG9tQ2hhbmdlcy5uZXh0KGRhdGEpO1xufVxuXG5zdWJtaXRDaGFuZ2UodmFsdWU6c3RyaW5nKXtcbiAgdGhpcy52YWxpZGF0aW9uU291cmNlLm5leHQodmFsdWUpO1xufVxuZmllbGRDaGFuZ2UodmFsdWU6YW55KXtcbiB0aGlzLmZpZWxkU291cmNlLm5leHQodmFsdWUpO1xufVxufSJdfQ==
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
// country.service.ts
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import countryJson from '../../country.json';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class CountryService {
|
|
6
|
+
countriesData = [];
|
|
7
|
+
constructor() {
|
|
8
|
+
this.countriesData = this.transformData(countryJson);
|
|
9
|
+
}
|
|
10
|
+
//SKS24JUN25 Transform raw data to enhanced format
|
|
11
|
+
transformData(countries) {
|
|
12
|
+
return countries.map(country => {
|
|
13
|
+
const getFirstValue = (obj) => obj ? Object.values(obj)[0] : null;
|
|
14
|
+
const getFirstKey = (obj) => obj ? Object.keys(obj)[0] : null;
|
|
15
|
+
const safeCurrency = country.currencies ? getFirstValue(country.currencies) : null;
|
|
16
|
+
const primaryLanguage = country.languages ? getFirstKey(country.languages) : 'en';
|
|
17
|
+
return {
|
|
18
|
+
countryName: country.name?.common || 'Unknown',
|
|
19
|
+
officialName: country.name?.official || country.name?.common || 'Unknown',
|
|
20
|
+
isoAlpha2: country.cca2 || '',
|
|
21
|
+
isoAlpha3: country.cca3 || '',
|
|
22
|
+
isoNumeric: country.ccn3 || '',
|
|
23
|
+
capital: Array.isArray(country.capital) ? country.capital : [country.capital || 'N/A'],
|
|
24
|
+
capitalPrimary: Array.isArray(country.capital) ? country.capital[0] : (country.capital || 'N/A'),
|
|
25
|
+
coordinates: {
|
|
26
|
+
latitude: country.latlng?.[0] || 0,
|
|
27
|
+
longitude: country.latlng?.[1] || 0,
|
|
28
|
+
latLng: country.latlng || [0, 0]
|
|
29
|
+
},
|
|
30
|
+
areaSqKm: country.area || 0,
|
|
31
|
+
continent: Array.isArray(country.continents) ? country.continents[0] : (country.continents || 'Unknown'),
|
|
32
|
+
region: country.region || 'Unknown',
|
|
33
|
+
subregion: country.subregion || 'Unknown',
|
|
34
|
+
population: country.population || 0,
|
|
35
|
+
languages: country.languages || {},
|
|
36
|
+
languagesCodeAndName: country.languages
|
|
37
|
+
? Object.entries(country.languages).map(([code, name]) => ({
|
|
38
|
+
languageCode: code,
|
|
39
|
+
languagesName: name
|
|
40
|
+
}))
|
|
41
|
+
: [],
|
|
42
|
+
languagesName: country.languages ? Object.values(country.languages) : [],
|
|
43
|
+
languageCode: country.languages ? Object.keys(country.languages) : [],
|
|
44
|
+
primaryLanguage: country.languages ? getFirstValue(country.languages) : 'English',
|
|
45
|
+
primaryLanguageCode: primaryLanguage,
|
|
46
|
+
currencies: country.currencies || {},
|
|
47
|
+
currencyCode: safeCurrency ? getFirstKey(country.currencies) : 'USD',
|
|
48
|
+
currencyName: safeCurrency?.name || 'Unknown',
|
|
49
|
+
currencySymbol: safeCurrency?.symbol || '$',
|
|
50
|
+
phoneCodeFull: (country.idd?.root || '') + (country.idd?.suffixes?.[0] || ''),
|
|
51
|
+
flag: country.flag || '🏳️',
|
|
52
|
+
flagPng: country.flags?.png || '',
|
|
53
|
+
flagSvg: country.flags?.svg || '',
|
|
54
|
+
timezones: country.timezones || [],
|
|
55
|
+
borders: country.borders || [],
|
|
56
|
+
...country
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
//SKS24JUN25 Single method to get requested fields, with deduplication for languageCode and languagesName
|
|
61
|
+
getCountryData(fields) {
|
|
62
|
+
// SKS24JUN25 Handle special case for languageCode and languagesName to remove duplicates
|
|
63
|
+
if (fields.includes('languageCode') || fields.includes('languagesName')) {
|
|
64
|
+
const result = [];
|
|
65
|
+
const uniqueValues = new Set();
|
|
66
|
+
if (fields.includes('languageCode') && !fields.includes('languagesName')) {
|
|
67
|
+
this.countriesData.forEach(country => {
|
|
68
|
+
country.languageCode.forEach(code => {
|
|
69
|
+
if (code && code !== '') {
|
|
70
|
+
uniqueValues.add(code);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
result.push(...Array.from(uniqueValues).map(code => ({ languageCode: code })));
|
|
75
|
+
}
|
|
76
|
+
if (fields.includes('languagesName') && !fields.includes('languageCode')) {
|
|
77
|
+
uniqueValues.clear();
|
|
78
|
+
this.countriesData.forEach(country => {
|
|
79
|
+
country.languagesName.forEach(lang => {
|
|
80
|
+
if (lang && lang !== '') {
|
|
81
|
+
uniqueValues.add(lang);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
result.push(...Array.from(uniqueValues).map(lang => ({ languagesName: lang })));
|
|
86
|
+
}
|
|
87
|
+
if (fields.includes('languagesName') && fields.includes('languageCode')) {
|
|
88
|
+
const uniqueLanguageMap = new Map();
|
|
89
|
+
this.countriesData.forEach(country => {
|
|
90
|
+
country.languagesCodeAndName.forEach(language => {
|
|
91
|
+
const key = `${language.languageCode}-${language.languagesName}`;
|
|
92
|
+
if (!uniqueLanguageMap.has(key)) {
|
|
93
|
+
uniqueLanguageMap.set(key, language);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
result.push(...Array.from(uniqueLanguageMap.values()));
|
|
98
|
+
}
|
|
99
|
+
// SKS24JUN25 Include other requested fields
|
|
100
|
+
const otherFields = fields.filter(f => f !== 'languageCode' && f !== 'languagesName');
|
|
101
|
+
if (otherFields.length > 0) {
|
|
102
|
+
const otherData = this.countriesData.map(country => {
|
|
103
|
+
const obj = {};
|
|
104
|
+
otherFields.forEach(field => {
|
|
105
|
+
if (country[field] != null && country[field] !== '' && country[field] !== 'Unknown') {
|
|
106
|
+
obj[field] = country[field];
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
return Object.keys(obj).length > 0 ? obj : null;
|
|
110
|
+
}).filter(obj => obj != null);
|
|
111
|
+
result.push(...otherData);
|
|
112
|
+
}
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
// SKS24JUN25 General case: return requested fields for all countries
|
|
116
|
+
return this.countriesData.map(country => {
|
|
117
|
+
const obj = {};
|
|
118
|
+
fields.forEach(field => {
|
|
119
|
+
if (country[field] != null && country[field] !== '' && country[field] !== 'Unknown') {
|
|
120
|
+
obj[field] = country[field];
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
return Object.keys(obj).length > 0 ? obj : null;
|
|
124
|
+
}).filter(obj => obj != null);
|
|
125
|
+
}
|
|
126
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CountryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
127
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CountryService, providedIn: 'root' });
|
|
128
|
+
}
|
|
129
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CountryService, decorators: [{
|
|
130
|
+
type: Injectable,
|
|
131
|
+
args: [{
|
|
132
|
+
providedIn: 'root'
|
|
133
|
+
}]
|
|
134
|
+
}], ctorParameters: () => [] });
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL3NlcnZpY2VzL2NvdW50cnkvY291bnRyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFCQUFxQjtBQUNyQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sV0FBVyxNQUFNLG9CQUFvQixDQUFDOztBQXlDN0MsTUFBTSxPQUFPLGNBQWM7SUFDakIsYUFBYSxHQUFrQixFQUFFLENBQUM7SUFFMUM7UUFDRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELGtEQUFrRDtJQUMxQyxhQUFhLENBQUMsU0FBZ0I7UUFDcEMsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzdCLE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN2RSxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkUsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25GLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcs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QUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQzt3R0FqSVUsY0FBYzs0R0FBZCxjQUFjLGNBRmIsTUFBTTs7NEZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBjb3VudHJ5LnNlcnZpY2UudHNcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBjb3VudHJ5SnNvbiBmcm9tICcuLi8uLi9jb3VudHJ5Lmpzb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvdW50cnlEYXRhIHtcbiAgY291bnRyeU5hbWU6IHN0cmluZztcbiAgb2ZmaWNpYWxOYW1lOiBzdHJpbmc7XG4gIGlzb0FscGhhMjogc3RyaW5nO1xuICBpc29BbHBoYTM6IHN0cmluZztcbiAgaXNvTnVtZXJpYzogc3RyaW5nO1xuICBjYXBpdGFsOiBzdHJpbmdbXTtcbiAgY2FwaXRhbFByaW1hcnk6IHN0cmluZztcbiAgY29vcmRpbmF0ZXM6IHtcbiAgICBsYXRpdHVkZTogbnVtYmVyO1xuICAgIGxvbmdpdHVkZTogbnVtYmVyO1xuICAgIGxhdExuZzogbnVtYmVyW107XG4gIH07XG4gIGFyZWFTcUttOiBudW1iZXI7XG4gIGNvbnRpbmVudDogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbiAgc3VicmVnaW9uOiBzdHJpbmc7XG4gIHBvcHVsYXRpb246IG51bWJlcjtcbiAgbGFuZ3VhZ2VzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICBsYW5ndWFnZXNOYW1lOiBzdHJpbmdbXTtcbiAgbGFuZ3VhZ2VDb2RlOiBzdHJpbmdbXTtcbiAgcHJpbWFyeUxhbmd1YWdlOiBzdHJpbmc7XG4gIHByaW1hcnlMYW5ndWFnZUNvZGU6IHN0cmluZztcbiAgY3VycmVuY2llczogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgY3VycmVuY3lDb2RlOiBzdHJpbmc7XG4gIGN1cnJlbmN5TmFtZTogc3RyaW5nO1xuICBjdXJyZW5jeVN5bWJvbDogc3RyaW5nO1xuICBwaG9uZUNvZGVGdWxsOiBzdHJpbmc7XG4gIGZsYWc6IHN0cmluZztcbiAgZmxhZ1BuZzogc3RyaW5nO1xuICBmbGFnU3ZnOiBzdHJpbmc7XG4gIHRpbWV6b25lczogc3RyaW5nW107XG4gIGJvcmRlcnM6IHN0cmluZ1tdO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvdW50cnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb3VudHJpZXNEYXRhOiBDb3VudHJ5RGF0YVtdID0gW107XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb3VudHJpZXNEYXRhID0gdGhpcy50cmFuc2Zvcm1EYXRhKGNvdW50cnlKc29uKTtcbiAgfVxuXG4gIC8vU0tTMjRKVU4yNSBUcmFuc2Zvcm0gcmF3IGRhdGEgdG8gZW5oYW5jZWQgZm9ybWF0XG4gIHByaXZhdGUgdHJhbnNmb3JtRGF0YShjb3VudHJpZXM6IGFueVtdKTogQ291bnRyeURhdGFbXSB7XG4gICAgcmV0dXJuIGNvdW50cmllcy5tYXAoY291bnRyeSA9PiB7XG4gICAgICBjb25zdCBnZXRGaXJzdFZhbHVlID0gKG9iajogYW55KSA9PiBvYmogPyBPYmplY3QudmFsdWVzKG9iailbMF0gOiBudWxsO1xuICAgICAgY29uc3QgZ2V0Rmlyc3RLZXkgPSAob2JqOiBhbnkpID0+IG9iaiA/IE9iamVjdC5rZXlzKG9iailbMF0gOiBudWxsO1xuICAgICAgY29uc3Qgc2FmZUN1cnJlbmN5ID0gY291bnRyeS5jdXJyZW5jaWVzID8gZ2V0Rmlyc3RWYWx1ZShjb3VudHJ5LmN1cnJlbmNpZXMpIDogbnVsbDtcbiAgICAgIGNvbnN0IHByaW1hcnlMYW5ndWFnZSA9IGNvdW50cnkubGFuZ3VhZ2VzID8gZ2V0Rmlyc3RLZXkoY291bnRyeS5sYW5ndWFnZXMpIDogJ2VuJztcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY291bnRyeU5hbWU6IGNvdW50cnkubmFtZT8uY29tbW9uIHx8ICdVbmtub3duJyxcbiAgICAgICAgb2ZmaWNpYWxOYW1lOiBjb3VudHJ5Lm5hbWU/Lm9mZmljaWFsIHx8IGNvdW50cnkubmFtZT8uY29tbW9uIHx8ICdVbmtub3duJyxcbiAgICAgICAgaXNvQWxwaGEyOiBjb3VudHJ5LmNjYTIgfHwgJycsXG4gICAgICAgIGlzb0FscGhhMzogY291bnRyeS5jY2EzIHx8ICcnLFxuICAgICAgICBpc29OdW1lcmljOiBjb3VudHJ5LmNjbjMgfHwgJycsXG4gICAgICAgIGNhcGl0YWw6IEFycmF5LmlzQXJyYXkoY291bnRyeS5jYXBpdGFsKSA/IGNvdW50cnkuY2FwaXRhbCA6IFtjb3VudHJ5LmNhcGl0YWwgfHwgJ04vQSddLFxuICAgICAgICBjYXBpdGFsUHJpbWFyeTogQXJyYXkuaXNBcnJheShjb3VudHJ5LmNhcGl0YWwpID8gY291bnRyeS5jYXBpdGFsWzBdIDogKGNvdW50cnkuY2FwaXRhbCB8fCAnTi9BJyksXG4gICAgICAgIGNvb3JkaW5hdGVzOiB7XG4gICAgICAgICAgbGF0aXR1ZGU6IGNvdW50cnkubGF0bG5nPy5bMF0gfHwgMCxcbiAgICAgICAgICBsb25naXR1ZGU6IGNvdW50cnkubGF0bG5nPy5bMV0gfHwgMCxcbiAgICAgICAgICBsYXRMbmc6IGNvdW50cnkubGF0bG5nIHx8IFswLCAwXVxuICAgICAgICB9LFxuICAgICAgICBhcmVhU3FLbTogY291bnRyeS5hcmVhIHx8IDAsXG4gICAgICAgIGNvbnRpbmVudDogQXJyYXkuaXNBcnJheShjb3VudHJ5LmNvbnRpbmVudHMpID8gY291bnRyeS5jb250aW5lbnRzWzBdIDogKGNvdW50cnkuY29udGluZW50cyB8fCAnVW5rbm93bicpLFxuICAgICAgICByZWdpb246IGNvdW50cnkucmVnaW9uIHx8ICdVbmtub3duJyxcbiAgICAgICAgc3VicmVnaW9uOiBjb3VudHJ5LnN1YnJlZ2lvbiB8fCAnVW5rbm93bicsXG4gICAgICAgIHBvcHVsYXRpb246IGNvdW50cnkucG9wdWxhdGlvbiB8fCAwLFxuICAgICAgICBsYW5ndWFnZXM6IGNvdW50cnkubGFuZ3VhZ2VzIHx8IHt9LFxuICAgICAgICBsYW5ndWFnZXNDb2RlQW5kTmFtZTogY291bnRyeS5sYW5ndWFnZXNcbiAgICAgICAgPyBPYmplY3QuZW50cmllcyhjb3VudHJ5Lmxhbmd1YWdlcykubWFwKChbY29kZSwgbmFtZV0pID0+ICh7XG4gICAgICAgICAgICBsYW5ndWFnZUNvZGU6IGNvZGUsXG4gICAgICAgICAgICBsYW5ndWFnZXNOYW1lOiBuYW1lXG4gICAgICAgICAgfSkpXG4gICAgICAgIDogW10sXG4gICAgICAgIGxhbmd1YWdlc05hbWU6IGNvdW50cnkubGFuZ3VhZ2VzID8gT2JqZWN0LnZhbHVlcyhjb3VudHJ5Lmxhbmd1YWdlcykgOiBbXSxcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBjb3VudHJ5Lmxhbmd1YWdlcyA/IE9iamVjdC5rZXlzKGNvdW50cnkubGFuZ3VhZ2VzKSA6IFtdLFxuICAgICAgICBwcmltYXJ5TGFuZ3VhZ2U6IGNvdW50cnkubGFuZ3VhZ2VzID8gZ2V0Rmlyc3RWYWx1ZShjb3VudHJ5Lmxhbmd1YWdlcykgOiAnRW5nbGlzaCcsXG4gICAgICAgIHByaW1hcnlMYW5ndWFnZUNvZGU6IHByaW1hcnlMYW5ndWFnZSxcbiAgICAgICAgY3VycmVuY2llczogY291bnRyeS5jdXJyZW5jaWVzIHx8IHt9LFxuICAgICAgICBjdXJyZW5jeUNvZGU6IHNhZmVDdXJyZW5jeSA/IGdldEZpcnN0S2V5KGNvdW50cnkuY3VycmVuY2llcykgOiAnVVNEJyxcbiAgICAgICAgY3VycmVuY3lOYW1lOiAoc2FmZUN1cnJlbmN5IGFzIGFueSk/Lm5hbWUgfHwgJ1Vua25vd24nLFxuICAgICAgICBjdXJyZW5jeVN5bWJvbDogKHNhZmVDdXJyZW5jeSBhcyBhbnkpPy5zeW1ib2wgfHwgJyQnLFxuICAgICAgICBwaG9uZUNvZGVGdWxsOiAoY291bnRyeS5pZGQ/LnJvb3QgfHwgJycpICsgKGNvdW50cnkuaWRkPy5zdWZmaXhlcz8uWzBdIHx8ICcnKSxcbiAgICAgICAgZmxhZzogY291bnRyeS5mbGFnIHx8ICfwn4+z77iPJyxcbiAgICAgICAgZmxhZ1BuZzogY291bnRyeS5mbGFncz8ucG5nIHx8ICcnLFxuICAgICAgICBmbGFnU3ZnOiBjb3VudHJ5LmZsYWdzPy5zdmcgfHwgJycsXG4gICAgICAgIHRpbWV6b25lczogY291bnRyeS50aW1lem9uZXMgfHwgW10sXG4gICAgICAgIGJvcmRlcnM6IGNvdW50cnkuYm9yZGVycyB8fCBbXSxcbiAgICAgICAgLi4uY291bnRyeVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vU0tTMjRKVU4yNSBTaW5nbGUgbWV0aG9kIHRvIGdldCByZXF1ZXN0ZWQgZmllbGRzLCB3aXRoIGRlZHVwbGljYXRpb24gZm9yIGxhbmd1YWdlQ29kZSBhbmQgbGFuZ3VhZ2VzTmFtZVxuICBnZXRDb3VudHJ5RGF0YShmaWVsZHM6IChrZXlvZiBDb3VudHJ5RGF0YSlbXSk6IGFueVtdIHtcbiAgICAvLyBTS1MyNEpVTjI1IEhhbmRsZSBzcGVjaWFsIGNhc2UgZm9yIGxhbmd1YWdlQ29kZSBhbmQgbGFuZ3VhZ2VzTmFtZSB0byByZW1vdmUgZHVwbGljYXRlc1xuICAgIGlmIChmaWVsZHMuaW5jbHVkZXMoJ2xhbmd1YWdlQ29kZScpIHx8IGZpZWxkcy5pbmNsdWRlcygnbGFuZ3VhZ2VzTmFtZScpKSB7XG4gICAgICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG4gICAgICBjb25zdCB1bmlxdWVWYWx1ZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgaWYgKGZpZWxkcy5pbmNsdWRlcygnbGFuZ3VhZ2VDb2RlJykgJiYgIWZpZWxkcy5pbmNsdWRlcygnbGFuZ3VhZ2VzTmFtZScpKSB7XG4gICAgICAgIHRoaXMuY291bnRyaWVzRGF0YS5mb3JFYWNoKGNvdW50cnkgPT4ge1xuICAgICAgICAgIGNvdW50cnkubGFuZ3VhZ2VDb2RlLmZvckVhY2goY29kZSA9PiB7XG4gICAgICAgICAgICBpZiAoY29kZSAmJiBjb2RlICE9PSAnJykge1xuICAgICAgICAgICAgICB1bmlxdWVWYWx1ZXMuYWRkKGNvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnB1c2goLi4uQXJyYXkuZnJvbSh1bmlxdWVWYWx1ZXMpLm1hcChjb2RlID0+ICh7IGxhbmd1YWdlQ29kZTogY29kZSB9KSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmllbGRzLmluY2x1ZGVzKCdsYW5ndWFnZXNOYW1lJykgJiYgIWZpZWxkcy5pbmNsdWRlcygnbGFuZ3VhZ2VDb2RlJykpIHtcbiAgICAgICAgdW5pcXVlVmFsdWVzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuY291bnRyaWVzRGF0YS5mb3JFYWNoKGNvdW50cnkgPT4ge1xuICAgICAgICAgIGNvdW50cnkubGFuZ3VhZ2VzTmFtZS5mb3JFYWNoKGxhbmcgPT4ge1xuICAgICAgICAgICAgaWYgKGxhbmcgJiYgbGFuZyAhPT0gJycpIHtcbiAgICAgICAgICAgICAgdW5pcXVlVmFsdWVzLmFkZChsYW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLkFycmF5LmZyb20odW5pcXVlVmFsdWVzKS5tYXAobGFuZyA9PiAoeyBsYW5ndWFnZXNOYW1lOiBsYW5nIH0pKSk7XG4gICAgICB9XG4gICAgICBpZihmaWVsZHMuaW5jbHVkZXMoJ2xhbmd1YWdlc05hbWUnKSAmJiBmaWVsZHMuaW5jbHVkZXMoJ2xhbmd1YWdlQ29kZScpKXtcbiAgICAgICAgY29uc3QgdW5pcXVlTGFuZ3VhZ2VNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuY291bnRyaWVzRGF0YS5mb3JFYWNoKGNvdW50cnkgPT4ge1xuICAgICAgICAgIGNvdW50cnkubGFuZ3VhZ2VzQ29kZUFuZE5hbWUuZm9yRWFjaChsYW5ndWFnZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBgJHtsYW5ndWFnZS5sYW5ndWFnZUNvZGV9LSR7bGFuZ3VhZ2UubGFuZ3VhZ2VzTmFtZX1gO1xuICAgICAgICAgICAgaWYgKCF1bmlxdWVMYW5ndWFnZU1hcC5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICB1bmlxdWVMYW5ndWFnZU1hcC5zZXQoa2V5LCBsYW5ndWFnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQucHVzaCguLi5BcnJheS5mcm9tKHVuaXF1ZUxhbmd1YWdlTWFwLnZhbHVlcygpKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNLUzI0SlVOMjUgSW5jbHVkZSBvdGhlciByZXF1ZXN0ZWQgZmllbGRzXG4gICAgICBjb25zdCBvdGhlckZpZWxkcyA9IGZpZWxkcy5maWx0ZXIoZiA9PiBmICE9PSAnbGFuZ3VhZ2VDb2RlJyAmJiBmICE9PSAnbGFuZ3VhZ2VzTmFtZScpO1xuICAgICAgaWYgKG90aGVyRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3Qgb3RoZXJEYXRhID0gdGhpcy5jb3VudHJpZXNEYXRhLm1hcChjb3VudHJ5ID0+IHtcbiAgICAgICAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgICAgICAgIG90aGVyRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgaWYgKGNvdW50cnlbZmllbGRdICE9IG51bGwgJiYgY291bnRyeVtmaWVsZF0gIT09ICcnICYmIGNvdW50cnlbZmllbGRdICE9PSAnVW5rbm93bicpIHtcbiAgICAgICAgICAgICAgb2JqW2ZpZWxkXSA9IGNvdW50cnlbZmllbGRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA+IDAgPyBvYmogOiBudWxsO1xuICAgICAgICB9KS5maWx0ZXIob2JqID0+IG9iaiAhPSBudWxsKTtcbiAgICAgICAgcmVzdWx0LnB1c2goLi4ub3RoZXJEYXRhKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBTS1MyNEpVTjI1IEdlbmVyYWwgY2FzZTogcmV0dXJuIHJlcXVlc3RlZCBmaWVsZHMgZm9yIGFsbCBjb3VudHJpZXNcbiAgICByZXR1cm4gdGhpcy5jb3VudHJpZXNEYXRhLm1hcChjb3VudHJ5ID0+IHtcbiAgICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgIGlmIChjb3VudHJ5W2ZpZWxkXSAhPSBudWxsICYmIGNvdW50cnlbZmllbGRdICE9PSAnJyAmJiBjb3VudHJ5W2ZpZWxkXSAhPT0gJ1Vua25vd24nKSB7XG4gICAgICAgICAgb2JqW2ZpZWxkXSA9IGNvdW50cnlbZmllbGRdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA+IDAgPyBvYmogOiBudWxsO1xuICAgIH0pLmZpbHRlcihvYmogPT4gb2JqICE9IG51bGwpO1xuICB9XG59Il19
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { Injectable, Optional } from '@angular/core';
|
|
2
|
+
import { HttpHeaders } from '@angular/common/http';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common/http";
|
|
5
|
+
export class DataService {
|
|
6
|
+
http;
|
|
7
|
+
apiUrl;
|
|
8
|
+
// VD 23JAN24 optionally declared httpClient
|
|
9
|
+
constructor(http) {
|
|
10
|
+
this.http = http;
|
|
11
|
+
}
|
|
12
|
+
getAPIData(tkn, params, resolve, reject, config) {
|
|
13
|
+
const self = this;
|
|
14
|
+
// Call the ShengelGo Server
|
|
15
|
+
const headers = new HttpHeaders().set('Authorization', `${tkn}`);
|
|
16
|
+
headers.append('Accept', 'application/json');
|
|
17
|
+
headers.append('Access-Control-Allow-Origin', '*');
|
|
18
|
+
// MR 23JAN24 - This should be removed, for now testing with dev-hse-api
|
|
19
|
+
this.http.get('https://dev-hse-api.rangerfusion.com/nxt/api/process/?dataType=' + params[0] + '&operation=' + params[1] + '¶m=' + params[2], { headers: headers, observe: 'response' })
|
|
20
|
+
.subscribe(response => {
|
|
21
|
+
if (response.status == 200) {
|
|
22
|
+
resolve(response.body);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
reject(response.body);
|
|
26
|
+
}
|
|
27
|
+
}, error => {
|
|
28
|
+
reject(error);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
//calling the node api
|
|
32
|
+
getAPIFromNode(dataType, operation, param1, param2, api) {
|
|
33
|
+
const apiUrl = api ? api : 'http://localhost:3001/nxt';
|
|
34
|
+
// let params = new HttpParams()
|
|
35
|
+
// .set('dataType', dataType)
|
|
36
|
+
// .set('operation', operation)
|
|
37
|
+
// .set('param1', param1)
|
|
38
|
+
// .set('param2',param2)
|
|
39
|
+
let body = {
|
|
40
|
+
"dataType": dataType,
|
|
41
|
+
"operation": operation,
|
|
42
|
+
"param1": param1,
|
|
43
|
+
"param2": param2,
|
|
44
|
+
};
|
|
45
|
+
return this.http.post(apiUrl, body);
|
|
46
|
+
}
|
|
47
|
+
// VD 22May24 -funtion to handling multiple child objects
|
|
48
|
+
getValue(element, columns) {
|
|
49
|
+
if (!element || !columns)
|
|
50
|
+
return null; //AP-25MAR25 Ensure both element and column are valid
|
|
51
|
+
// MSM27MAR25 check if columns is an array
|
|
52
|
+
if (typeof columns === 'string' && !Array.isArray(columns)) {
|
|
53
|
+
columns = [columns];
|
|
54
|
+
}
|
|
55
|
+
columns.forEach((column) => {
|
|
56
|
+
let flds = column?.split('.');
|
|
57
|
+
for (let i = 0; i < flds.length; i++) {
|
|
58
|
+
if (element == null)
|
|
59
|
+
return null; //AP-25MAR25 Prevent errors if element is null or undefined
|
|
60
|
+
let splitFlds = flds[i].split('[');
|
|
61
|
+
if (splitFlds.length === 1) {
|
|
62
|
+
element = element[flds[i]] !== undefined ? element[flds[i]] : null;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
let index = Number(splitFlds[1].split(']')[0]);
|
|
66
|
+
element = element[splitFlds[0]] && Array.isArray(element[splitFlds[0]])
|
|
67
|
+
? element[splitFlds[0]][index] !== undefined ? element[splitFlds[0]][index] : null
|
|
68
|
+
: null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
return element;
|
|
73
|
+
}
|
|
74
|
+
// AP-16APR25 Sets the API URL with the provided apidata
|
|
75
|
+
apikey(apidata) {
|
|
76
|
+
this.apiUrl = apidata;
|
|
77
|
+
}
|
|
78
|
+
// VD 23JAN24 get callout
|
|
79
|
+
apiResponse(endpoint) {
|
|
80
|
+
if (this.apiUrl && this.apiUrl.trim() !== '') {
|
|
81
|
+
// AP-16APR25 If apiUrl is set, make the request with the base URL
|
|
82
|
+
return this.http?.get(this.apiUrl + endpoint);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
// AP-16APR25 If no apiUrl is set, make the request to the endpoint directly
|
|
86
|
+
return this.http?.get(endpoint);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataService, deps: [{ token: i1.HttpClient, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
90
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataService, providedIn: 'root' });
|
|
91
|
+
}
|
|
92
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataService, decorators: [{
|
|
93
|
+
type: Injectable,
|
|
94
|
+
args: [{
|
|
95
|
+
providedIn: 'root'
|
|
96
|
+
}]
|
|
97
|
+
}], ctorParameters: () => [{ type: i1.HttpClient, decorators: [{
|
|
98
|
+
type: Optional
|
|
99
|
+
}] }] });
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL3NlcnZpY2VzL2RhdGEvZGF0YS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBYyxXQUFXLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBTTNFLE1BQU0sT0FBTyxXQUFXO0lBR1U7SUFGaEMsTUFBTSxDQUFNO0lBQ1osNENBQTRDO0lBQzVDLFlBQWdDLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7SUFBSSxDQUFDO0lBRTlDLFVBQVUsQ0FBQyxHQUFXLEVBQzNCLE1BQWdCLEVBQ2hCLE9BQU8sRUFDUCxNQUFNLEVBQ04sTUFBWTtRQUNWLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztRQUVsQiw0QkFBNEI7UUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNqRSxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxNQUFNLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFbkQsd0VBQXdFO1FBQ3hFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGlFQUFpRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFHLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQzthQUN6TCxTQUFTLENBQUMsUUFBUSxDQUFDLEVB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QyxDQUFDLENBQUMsSUFBSTt3QkFDbEYsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDWCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUNELHdEQUF3RDtJQUN4RCxNQUFNLENBQUMsT0FBWTtRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBQ0QsMEJBQTBCO0lBQ2pCLFdBQVcsQ0FBQyxRQUFnQjtRQUNqQyxJQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUMsQ0FBQztZQUM3QyxrRUFBa0U7WUFDbEUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLENBQUM7YUFDRyxDQUFDO1lBQ0gsNEVBQTRFO1lBQzVFLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7d0dBMUZVLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07OzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFJYyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEYXRhU2VydmljZSB7XG4gIGFwaVVybDogYW55O1xuICAvLyBWRCAyM0pBTjI0IG9wdGlvbmFsbHkgZGVjbGFyZWQgaHR0cENsaWVudFxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHsgfVxuXG4gIHB1YmxpYyBnZXRBUElEYXRhKHRrbjogc3RyaW5nLCBcbiAgICBwYXJhbXM6IHN0cmluZ1tdLFxuICAgIHJlc29sdmUsXG4gICAgcmVqZWN0LFxuICAgIGNvbmZpZz86IGFueSkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAgIC8vIENhbGwgdGhlIFNoZW5nZWxHbyBTZXJ2ZXJcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCBgJHt0a259YCk7XG4gICAgICBoZWFkZXJzLmFwcGVuZCgnQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgIGhlYWRlcnMuYXBwZW5kKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLCAnKicpO1xuXG4gICAgICAvLyBNUiAyM0pBTjI0IC0gVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCwgZm9yIG5vdyB0ZXN0aW5nIHdpdGggZGV2LWhzZS1hcGlcbiAgICAgIHRoaXMuaHR0cC5nZXQoJ2h0dHBzOi8vZGV2LWhzZS1hcGkucmFuZ2VyZnVzaW9uLmNvbS9ueHQvYXBpL3Byb2Nlc3MvP2RhdGFUeXBlPScgKyBwYXJhbXNbMF0gKyAnJm9wZXJhdGlvbj0nICsgcGFyYW1zWzFdICsgJyZwYXJhbT0nICsgcGFyYW1zWzJdLCB7IGhlYWRlcnM6IGhlYWRlcnMgLCBvYnNlcnZlOiAncmVzcG9uc2UnIH0pXG4gICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cyA9PSAyMDApIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UuYm9keSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlamVjdChyZXNwb25zZS5ib2R5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgfVxuXG4gIC8vY2FsbGluZyB0aGUgbm9kZSBhcGlcbiAgcHVibGljIGdldEFQSUZyb21Ob2RlKGRhdGFUeXBlOiBzdHJpbmcsIG9wZXJhdGlvbjogc3RyaW5nLCBwYXJhbTE6IHN0cmluZyxwYXJhbTI6IHN0cmluZyxhcGk6c3RyaW5nKXtcbiAgICBjb25zdCBhcGlVcmwgPSBhcGkgPyBhcGkgOiAnaHR0cDovL2xvY2FsaG9zdDozMDAxL254dCc7XG4gICAgLy8gbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKClcbiAgICAvLyAgIC5zZXQoJ2RhdGFUeXBlJywgZGF0YVR5cGUpXG4gICAgLy8gICAuc2V0KCdvcGVyYXRpb24nLCBvcGVyYXRpb24pXG4gICAgLy8gICAuc2V0KCdwYXJhbTEnLCBwYXJhbTEpXG4gICAgLy8gICAuc2V0KCdwYXJhbTInLHBhcmFtMilcblxuICAgIGxldCBib2R5ID0ge1xuICAgICAgXCJkYXRhVHlwZVwiIDpkYXRhVHlwZSAsXG4gICAgICBcIm9wZXJhdGlvblwiIDpvcGVyYXRpb24gLFxuICAgICAgXCJwYXJhbTFcIiA6cGFyYW0xLCBcbiAgICAgIFwicGFyYW0yXCIgOiBwYXJhbTIsXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGFwaVVybCxib2R5ICk7XG5cbiAgfVxuXG4gICAgXG4vLyBWRCAyMk1heTI0IC1mdW50aW9uIHRvICBoYW5kbGluZyBtdWx0aXBsZSBjaGlsZCBvYmplY3RzXG5wdWJsaWMgZ2V0VmFsdWUoZWxlbWVudDogYW55LCBjb2x1bW5zOiBhbnkpIHtcbiAgaWYgKCFlbGVtZW50IHx8ICFjb2x1bW5zKSByZXR1cm4gbnVsbDsgLy9BUC0yNU1BUjI1IEVuc3VyZSBib3RoIGVsZW1lbnQgYW5kIGNvbHVtbiBhcmUgdmFsaWRcbi8vIE1TTTI3TUFSMjUgY2hlY2sgaWYgY29sdW1ucyBpcyBhbiBhcnJheVxuICBpZih0eXBlb2YgY29sdW1ucyA9PT0gJ3N0cmluZycgJiYgIUFycmF5LmlzQXJyYXkoY29sdW1ucykgICkge1xuICAgIGNvbHVtbnMgPSBbY29sdW1uc107XG4gIH1cbiAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICBsZXQgZmxkcyA9IGNvbHVtbj8uc3BsaXQoJy4nKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7IC8vQVAtMjVNQVIyNSBQcmV2ZW50IGVycm9ycyBpZiBlbGVtZW50IGlzIG51bGwgb3IgdW5kZWZpbmVkXG5cbiAgICAgIGxldCBzcGxpdEZsZHMgPSBmbGRzW2ldLnNwbGl0KCdbJyk7XG4gICAgICBpZiAoc3BsaXRGbGRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudFtmbGRzW2ldXSAhPT0gdW5kZWZpbmVkID8gZWxlbWVudFtmbGRzW2ldXSA6IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgaW5kZXggPSBOdW1iZXIoc3BsaXRGbGRzWzFdLnNwbGl0KCddJylbMF0pO1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudFtzcGxpdEZsZHNbMF1dICYmIEFycmF5LmlzQXJyYXkoZWxlbWVudFtzcGxpdEZsZHNbMF1dKSBcbiAgICAgICAgICA/IGVsZW1lbnRbc3BsaXRGbGRzWzBdXVtpbmRleF0gIT09IHVuZGVmaW5lZCA/IGVsZW1lbnRbc3BsaXRGbGRzWzBdXVtpbmRleF0gOiBudWxsXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBlbGVtZW50O1xufVxuLy8gQVAtMTZBUFIyNSBTZXRzIHRoZSBBUEkgVVJMIHdpdGggdGhlIHByb3ZpZGVkIGFwaWRhdGFcbmFwaWtleShhcGlkYXRhOiBhbnkpe1xuICB0aGlzLmFwaVVybCA9IGFwaWRhdGE7XG59XG4vLyBWRCAyM0pBTjI0IGdldCBjYWxsb3V0IFxuICBwdWJsaWMgYXBpUmVzcG9uc2UoZW5kcG9pbnQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgaWYodGhpcy5hcGlVcmwgJiYgdGhpcy5hcGlVcmwudHJpbSgpICE9PSAnJyl7XG4gICAgLy8gQVAtMTZBUFIyNSBJZiBhcGlVcmwgaXMgc2V0LCBtYWtlIHRoZSByZXF1ZXN0IHdpdGggdGhlIGJhc2UgVVJMXG4gICAgcmV0dXJuIHRoaXMuaHR0cD8uZ2V0KHRoaXMuYXBpVXJsK2VuZHBvaW50KTtcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIC8vIEFQLTE2QVBSMjUgSWYgbm8gYXBpVXJsIGlzIHNldCwgbWFrZSB0aGUgcmVxdWVzdCB0byB0aGUgZW5kcG9pbnQgZGlyZWN0bHlcbiAgICAgIHJldHVybiB0aGlzLmh0dHA/LmdldChlbmRwb2ludCk7XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==
|