@onecx/angular-integration-interface 4.13.1 → 4.13.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,12 @@
1
+ // services
2
+ export * from './lib/services/app-state.service';
3
+ export * from './lib/services/configuration.service';
4
+ export * from './lib/services/user.service';
5
+ export * from './lib/services/portal-message.service';
6
+ export * from './lib/services/theme.service';
7
+ // models
8
+ export * from './lib/model/config-key.model';
9
+ // core
10
+ export * from './lib/api/iauth.service';
11
+ export * from './lib/api/injection-tokens';
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItaW50ZWdyYXRpb24taW50ZXJmYWNlL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxXQUFXO0FBQ1gsY0FBYyxrQ0FBa0MsQ0FBQTtBQUNoRCxjQUFjLHNDQUFzQyxDQUFBO0FBQ3BELGNBQWMsNkJBQTZCLENBQUE7QUFDM0MsY0FBYyx1Q0FBdUMsQ0FBQTtBQUNyRCxjQUFjLDhCQUE4QixDQUFBO0FBRTVDLFNBQVM7QUFDVCxjQUFjLDhCQUE4QixDQUFBO0FBRTVDLE9BQU87QUFDUCxjQUFjLHlCQUF5QixDQUFBO0FBQ3ZDLGNBQWMsNEJBQTRCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzZXJ2aWNlc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvYXBwLXN0YXRlLnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jb25maWd1cmF0aW9uLnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9wb3J0YWwtbWVzc2FnZS5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvdGhlbWUuc2VydmljZSdcblxuLy8gbW9kZWxzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbC9jb25maWcta2V5Lm1vZGVsJ1xuXG4vLyBjb3JlXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hcGkvaWF1dGguc2VydmljZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FwaS9pbmplY3Rpb24tdG9rZW5zJ1xuXG4vLyB1dGlsc1xuXG5leHBvcnQgeyBNZmVJbmZvLCBUaGVtZSB9IGZyb20gJ0BvbmVjeC9pbnRlZ3JhdGlvbi1pbnRlcmZhY2UnXG4iXX0=
@@ -0,0 +1,3 @@
1
+ export const API_PREFIX = 'portal-api';
2
+ export const DEFAULT_LANG = 'en';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWludGVncmF0aW9uLWludGVyZmFjZS9zcmMvbGliL2FwaS9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQTtBQUV0QyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEFQSV9QUkVGSVggPSAncG9ydGFsLWFwaSdcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTEFORyA9ICdlbidcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWF1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1pbnRlZ3JhdGlvbi1pbnRlcmZhY2Uvc3JjL2xpYi9hcGkvaWF1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJQXV0aFNlcnZpY2Uge1xuICBsb2dvdXQoKTogdm9pZFxuXG4gIC8qKlxuICAgKiBVbmlxdWUgbmFtZSBvZiB0aGlzIGF1dGggcHJvdmlkZXI6IGUuZy4gbW9ja0F1dGhQcm92aWRlciwgS2V5Y2xvYWtQcm92aWRlci4uXG4gICAqL1xuICBnZXRBdXRoUHJvdmlkZXJOYW1lKCk6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXphdGlvbiBtZXRob2Qgb2YgdGhlIEF1dGggc2VydmljZS4gT25jZSByZXNvbHZlZCwgYWxsIHVzZXIgZGF0YSBNVVNUIGJlIGF2YWlsYWJsZS5cbiAgICovXG4gIGluaXQoKTogUHJvbWlzZTxib29sZWFuPlxuXG4gIGdldElkVG9rZW4oKTogc3RyaW5nIHwgbnVsbFxuXG4gIGhhc1JvbGUoX3JvbGU6IHN0cmluZyk6IGJvb2xlYW5cblxuICBnZXRVc2VyUm9sZXMoKTogc3RyaW5nW11cbn1cbiJdfQ==
@@ -0,0 +1,6 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const APP_CONFIG = new InjectionToken('APP_CONFIG');
3
+ export const AUTH_SERVICE = new InjectionToken('AUTH_SERVICE');
4
+ export const SANITY_CHECK = new InjectionToken('OCXSANITY_CHECK');
5
+ export const APPLICATION_NAME = new InjectionToken('APPLICATION_NAME');
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0aW9uLXRva2Vucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1pbnRlZ3JhdGlvbi1pbnRlcmZhY2Uvc3JjL2xpYi9hcGkvaW5qZWN0aW9uLXRva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBZTlDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxJQUFJLGNBQWMsQ0FBWSxZQUFZLENBQUMsQ0FBQTtBQUVyRSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQWUsY0FBYyxDQUFDLENBQUE7QUFFNUUsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLElBQUksY0FBYyxDQUFTLGlCQUFpQixDQUFDLENBQUE7QUFFekUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQVMsa0JBQWtCLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IElBdXRoU2VydmljZSB9IGZyb20gJy4vaWF1dGguc2VydmljZSdcblxuZXhwb3J0IGludGVyZmFjZSBMaWJDb25maWcge1xuICBhcHBJZDogc3RyaW5nXG4gIHBvcnRhbElkOiBzdHJpbmdcbiAgLyoqXG4gICAqIElmIHRydWUsIHRoZSB0a2l0LW1vZHVsZSB3aWxsIG5vdCB0cnkgdG8gbG9hZCByZW1vdGUgZW52IHZhbHVlcyBmcm9tIHNlcnZlcihHRVQgL2Fzc2V0cy9lbnYuanNvbilcbiAgICovXG4gIHNraXBSZW1vdGVDb25maWdMb2FkOiBib29sZWFuXG4gIC8qKlxuICAgKiBVUkwgZnJvbSB3aGljaCB0aGUgcmVtb3RlIGNvbmZpZyB3aWxsIGJlIGxvYWRlZCwgZGVmYXVsdDogJy9hc3NldHMvZW52Lmpzb24nXG4gICAqL1xuICByZW1vdGVDb25maWdVUkw6IHN0cmluZ1xufVxuZXhwb3J0IGNvbnN0IEFQUF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48TGliQ29uZmlnPignQVBQX0NPTkZJRycpXG5cbmV4cG9ydCBjb25zdCBBVVRIX1NFUlZJQ0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48SUF1dGhTZXJ2aWNlPignQVVUSF9TRVJWSUNFJylcblxuZXhwb3J0IGNvbnN0IFNBTklUWV9DSEVDSyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdPQ1hTQU5JVFlfQ0hFQ0snKVxuXG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fTkFNRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdBUFBMSUNBVElPTl9OQU1FJylcbiJdfQ==
@@ -0,0 +1,27 @@
1
+ export var CONFIG_KEY;
2
+ (function (CONFIG_KEY) {
3
+ CONFIG_KEY["TKIT_PORTAL_DEFAULT_THEME"] = "TKIT_PORTAL_DEFAULT_THEME";
4
+ CONFIG_KEY["TKIT_PORTAL_DISABLE_THEME_MANAGEMENT"] = "TKIT_PORTAL_DISABLE_THEME_MANAGEMENT";
5
+ CONFIG_KEY["TKIT_PORTAL_THEME_SERVER_URL"] = "TKIT_PORTAL_THEME_SERVER_URL";
6
+ CONFIG_KEY["TKIT_TOKEN_ROLE_CLAIM_NAME"] = "TKIT_TOKEN_ROLE_CLAIM_NAME";
7
+ CONFIG_KEY["TKIT_PORTAL_ID"] = "TKIT_PORTAL_ID";
8
+ CONFIG_KEY["TKIT_SUPPORTED_LANGUAGES"] = "TKIT_SUPPORTED_LANGUAGES";
9
+ CONFIG_KEY["TKIT_SEARCH_BASE_URL"] = "TKIT_SEARCH_BASE_URL";
10
+ CONFIG_KEY["APP_BASE_HREF"] = "APP_BASE_HREF";
11
+ CONFIG_KEY["KEYCLOAK_REALM"] = "KEYCLOAK_REALM";
12
+ CONFIG_KEY["KEYCLOAK_ENABLE_SILENT_SSO"] = "KEYCLOAK_ENABLE_SILENT_SSO";
13
+ CONFIG_KEY["KEYCLOAK_URL"] = "KEYCLOAK_URL";
14
+ CONFIG_KEY["KEYCLOAK_CLIENT_ID"] = "KEYCLOAK_CLIENT_ID";
15
+ CONFIG_KEY["ONECX_PORTAL_FAVORITES_DISABLED"] = "ONECX_PORTAL_FAVORITES_DISABLED";
16
+ CONFIG_KEY["ONECX_PORTAL_FEEDBACK_DISABLED"] = "ONECX_PORTAL_FEEDBACK_DISABLED";
17
+ CONFIG_KEY["ONECX_PORTAL_SEARCH_DISABLED"] = "ONECX_PORTAL_SEARCH_DISABLED";
18
+ CONFIG_KEY["ONECX_PORTAL_SUPPORT_TICKET_DISABLED"] = "ONECX_PORTAL_SUPPORT_TICKET_DISABLED";
19
+ CONFIG_KEY["ONECX_PORTAL_ANNOUNCEMENTS_DISABLED"] = "ONECX_PORTAL_ANNOUNCEMENTS_DISABLED";
20
+ CONFIG_KEY["ONECX_PORTAL_PASSWORD_CHANGE_DISABLED"] = "ONECX_PORTAL_PASSWORD_CHANGE_DISABLED";
21
+ CONFIG_KEY["ONECX_PORTAL_SETTINGS_DISABLED"] = "ONECX_PORTAL_SETTINGS_DISABLED";
22
+ CONFIG_KEY["ONECX_PORTAL_MY_ROLES_PERMISSIONS_DISABLED"] = "ONECX_PORTAL_MY_ROLES_PERMISSIONS_DISABLED";
23
+ CONFIG_KEY["ONECX_PORTAL_HELP_DISABLED"] = "ONECX_PORTAL_HELP_DISABLED";
24
+ CONFIG_KEY["APP_VERSION"] = "APP_VERSION";
25
+ CONFIG_KEY["IS_SHELL"] = "IS_SHELL";
26
+ })(CONFIG_KEY || (CONFIG_KEY = {}));
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWtleS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1pbnRlZ3JhdGlvbi1pbnRlcmZhY2Uvc3JjL2xpYi9tb2RlbC9jb25maWcta2V5Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLFVBd0JYO0FBeEJELFdBQVksVUFBVTtJQUNwQixxRUFBdUQsQ0FBQTtJQUN2RCwyRkFBNkUsQ0FBQTtJQUM3RSwyRUFBNkQsQ0FBQTtJQUM3RCx1RUFBeUQsQ0FBQTtJQUN6RCwrQ0FBaUMsQ0FBQTtJQUNqQyxtRUFBcUQsQ0FBQTtJQUNyRCwyREFBNkMsQ0FBQTtJQUM3Qyw2Q0FBK0IsQ0FBQTtJQUMvQiwrQ0FBaUMsQ0FBQTtJQUNqQyx1RUFBeUQsQ0FBQTtJQUN6RCwyQ0FBNkIsQ0FBQTtJQUM3Qix1REFBeUMsQ0FBQTtJQUN6QyxpRkFBbUUsQ0FBQTtJQUNuRSwrRUFBaUUsQ0FBQTtJQUNqRSwyRUFBNkQsQ0FBQTtJQUM3RCwyRkFBNkUsQ0FBQTtJQUM3RSx5RkFBMkUsQ0FBQTtJQUMzRSw2RkFBK0UsQ0FBQTtJQUMvRSwrRUFBaUUsQ0FBQTtJQUNqRSx1R0FBeUYsQ0FBQTtJQUN6Rix1RUFBeUQsQ0FBQTtJQUN6RCx5Q0FBMkIsQ0FBQTtJQUMzQixtQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBeEJXLFVBQVUsS0FBVixVQUFVLFFBd0JyQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIENPTkZJR19LRVkge1xuICBUS0lUX1BPUlRBTF9ERUZBVUxUX1RIRU1FID0gJ1RLSVRfUE9SVEFMX0RFRkFVTFRfVEhFTUUnLFxuICBUS0lUX1BPUlRBTF9ESVNBQkxFX1RIRU1FX01BTkFHRU1FTlQgPSAnVEtJVF9QT1JUQUxfRElTQUJMRV9USEVNRV9NQU5BR0VNRU5UJyxcbiAgVEtJVF9QT1JUQUxfVEhFTUVfU0VSVkVSX1VSTCA9ICdUS0lUX1BPUlRBTF9USEVNRV9TRVJWRVJfVVJMJyxcbiAgVEtJVF9UT0tFTl9ST0xFX0NMQUlNX05BTUUgPSAnVEtJVF9UT0tFTl9ST0xFX0NMQUlNX05BTUUnLFxuICBUS0lUX1BPUlRBTF9JRCA9ICdUS0lUX1BPUlRBTF9JRCcsXG4gIFRLSVRfU1VQUE9SVEVEX0xBTkdVQUdFUyA9ICdUS0lUX1NVUFBPUlRFRF9MQU5HVUFHRVMnLFxuICBUS0lUX1NFQVJDSF9CQVNFX1VSTCA9ICdUS0lUX1NFQVJDSF9CQVNFX1VSTCcsXG4gIEFQUF9CQVNFX0hSRUYgPSAnQVBQX0JBU0VfSFJFRicsXG4gIEtFWUNMT0FLX1JFQUxNID0gJ0tFWUNMT0FLX1JFQUxNJyxcbiAgS0VZQ0xPQUtfRU5BQkxFX1NJTEVOVF9TU08gPSAnS0VZQ0xPQUtfRU5BQkxFX1NJTEVOVF9TU08nLFxuICBLRVlDTE9BS19VUkwgPSAnS0VZQ0xPQUtfVVJMJyxcbiAgS0VZQ0xPQUtfQ0xJRU5UX0lEID0gJ0tFWUNMT0FLX0NMSUVOVF9JRCcsXG4gIE9ORUNYX1BPUlRBTF9GQVZPUklURVNfRElTQUJMRUQgPSAnT05FQ1hfUE9SVEFMX0ZBVk9SSVRFU19ESVNBQkxFRCcsXG4gIE9ORUNYX1BPUlRBTF9GRUVEQkFDS19ESVNBQkxFRCA9ICdPTkVDWF9QT1JUQUxfRkVFREJBQ0tfRElTQUJMRUQnLFxuICBPTkVDWF9QT1JUQUxfU0VBUkNIX0RJU0FCTEVEID0gJ09ORUNYX1BPUlRBTF9TRUFSQ0hfRElTQUJMRUQnLFxuICBPTkVDWF9QT1JUQUxfU1VQUE9SVF9USUNLRVRfRElTQUJMRUQgPSAnT05FQ1hfUE9SVEFMX1NVUFBPUlRfVElDS0VUX0RJU0FCTEVEJyxcbiAgT05FQ1hfUE9SVEFMX0FOTk9VTkNFTUVOVFNfRElTQUJMRUQgPSAnT05FQ1hfUE9SVEFMX0FOTk9VTkNFTUVOVFNfRElTQUJMRUQnLFxuICBPTkVDWF9QT1JUQUxfUEFTU1dPUkRfQ0hBTkdFX0RJU0FCTEVEID0gJ09ORUNYX1BPUlRBTF9QQVNTV09SRF9DSEFOR0VfRElTQUJMRUQnLFxuICBPTkVDWF9QT1JUQUxfU0VUVElOR1NfRElTQUJMRUQgPSAnT05FQ1hfUE9SVEFMX1NFVFRJTkdTX0RJU0FCTEVEJyxcbiAgT05FQ1hfUE9SVEFMX01ZX1JPTEVTX1BFUk1JU1NJT05TX0RJU0FCTEVEID0gJ09ORUNYX1BPUlRBTF9NWV9ST0xFU19QRVJNSVNTSU9OU19ESVNBQkxFRCcsXG4gIE9ORUNYX1BPUlRBTF9IRUxQX0RJU0FCTEVEID0gJ09ORUNYX1BPUlRBTF9IRUxQX0RJU0FCTEVEJyxcbiAgQVBQX1ZFUlNJT04gPSAnQVBQX1ZFUlNJT04nLFxuICBJU19TSEVMTCA9ICdJU19TSEVMTCcsXG59XG4iXX0=
@@ -0,0 +1,35 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { GlobalErrorTopic, GlobalLoadingTopic, CurrentMfeTopic, CurrentPageTopic, CurrentPortalTopic, IsAuthenticatedTopic, } from '@onecx/integration-interface';
3
+ import * as i0 from "@angular/core";
4
+ export class AppStateService {
5
+ constructor() {
6
+ this.globalError$ = new GlobalErrorTopic();
7
+ this.globalLoading$ = new GlobalLoadingTopic();
8
+ this.currentMfe$ = new CurrentMfeTopic();
9
+ /**
10
+ * This topic will only fire when pageInfo.path matches document.location.pathname,
11
+ * if not it will fire undefined.
12
+ */
13
+ this.currentPage$ = new CurrentPageTopic();
14
+ this.currentPortal$ = new CurrentPortalTopic();
15
+ /**
16
+ * This Topic is initialized as soon as the authentication is done
17
+ */
18
+ this.isAuthenticated$ = new IsAuthenticatedTopic();
19
+ }
20
+ ngOnDestroy() {
21
+ this.globalError$.destroy();
22
+ this.globalLoading$.destroy();
23
+ this.currentMfe$.destroy();
24
+ this.currentPage$.destroy();
25
+ this.currentPortal$.destroy();
26
+ this.isAuthenticated$.destroy();
27
+ }
28
+ }
29
+ AppStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
30
+ AppStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppStateService, providedIn: 'root' });
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppStateService, decorators: [{
32
+ type: Injectable,
33
+ args: [{ providedIn: 'root' }]
34
+ }] });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXN0YXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItaW50ZWdyYXRpb24taW50ZXJmYWNlL3NyYy9saWIvc2VydmljZXMvYXBwLXN0YXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQTtBQUNyRCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixvQkFBb0IsR0FDckIsTUFBTSw4QkFBOEIsQ0FBQTs7QUFHckMsTUFBTSxPQUFPLGVBQWU7SUFENUI7UUFFRSxpQkFBWSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQTtRQUNyQyxtQkFBYyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQTtRQUN6QyxnQkFBVyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUE7UUFFbkM7OztXQUdHO1FBQ0gsaUJBQVksR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUE7UUFDckMsbUJBQWMsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUE7UUFFekM7O1dBRUc7UUFDSCxxQkFBZ0IsR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUE7S0FVOUM7SUFSQyxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUNqQyxDQUFDOzs2R0F4QlUsZUFBZTtpSEFBZixlQUFlLGNBREYsTUFBTTs0RkFDbkIsZUFBZTtrQkFEM0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgR2xvYmFsRXJyb3JUb3BpYyxcbiAgR2xvYmFsTG9hZGluZ1RvcGljLFxuICBDdXJyZW50TWZlVG9waWMsXG4gIEN1cnJlbnRQYWdlVG9waWMsXG4gIEN1cnJlbnRQb3J0YWxUb3BpYyxcbiAgSXNBdXRoZW50aWNhdGVkVG9waWMsXG59IGZyb20gJ0BvbmVjeC9pbnRlZ3JhdGlvbi1pbnRlcmZhY2UnXG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXBwU3RhdGVTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgZ2xvYmFsRXJyb3IkID0gbmV3IEdsb2JhbEVycm9yVG9waWMoKVxuICBnbG9iYWxMb2FkaW5nJCA9IG5ldyBHbG9iYWxMb2FkaW5nVG9waWMoKVxuICBjdXJyZW50TWZlJCA9IG5ldyBDdXJyZW50TWZlVG9waWMoKVxuXG4gIC8qKlxuICAgKiBUaGlzIHRvcGljIHdpbGwgb25seSBmaXJlIHdoZW4gcGFnZUluZm8ucGF0aCBtYXRjaGVzIGRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lLFxuICAgKiBpZiBub3QgaXQgd2lsbCBmaXJlIHVuZGVmaW5lZC5cbiAgICovXG4gIGN1cnJlbnRQYWdlJCA9IG5ldyBDdXJyZW50UGFnZVRvcGljKClcbiAgY3VycmVudFBvcnRhbCQgPSBuZXcgQ3VycmVudFBvcnRhbFRvcGljKClcblxuICAvKipcbiAgICogVGhpcyBUb3BpYyBpcyBpbml0aWFsaXplZCBhcyBzb29uIGFzIHRoZSBhdXRoZW50aWNhdGlvbiBpcyBkb25lXG4gICAqL1xuICBpc0F1dGhlbnRpY2F0ZWQkID0gbmV3IElzQXV0aGVudGljYXRlZFRvcGljKClcblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmdsb2JhbEVycm9yJC5kZXN0cm95KClcbiAgICB0aGlzLmdsb2JhbExvYWRpbmckLmRlc3Ryb3koKVxuICAgIHRoaXMuY3VycmVudE1mZSQuZGVzdHJveSgpXG4gICAgdGhpcy5jdXJyZW50UGFnZSQuZGVzdHJveSgpXG4gICAgdGhpcy5jdXJyZW50UG9ydGFsJC5kZXN0cm95KClcbiAgICB0aGlzLmlzQXV0aGVudGljYXRlZCQuZGVzdHJveSgpXG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,77 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { Inject, Injectable, Optional } from '@angular/core';
3
+ import { firstValueFrom } from 'rxjs';
4
+ import { ConfigurationTopic } from '@onecx/integration-interface';
5
+ import { APP_CONFIG } from '../api/injection-tokens';
6
+ import { CONFIG_KEY } from '../model/config-key.model';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common/http";
9
+ export class ConfigurationService {
10
+ constructor(http, defaultConfig) {
11
+ this.http = http;
12
+ this.defaultConfig = defaultConfig;
13
+ this.config$ = new ConfigurationTopic();
14
+ }
15
+ ngOnDestroy() {
16
+ this.config$.destroy();
17
+ }
18
+ init() {
19
+ return new Promise((resolve, reject) => {
20
+ const skipRemoteConfigLoad = this.defaultConfig && this.defaultConfig['skipRemoteConfigLoad'];
21
+ let loadConfigPromise;
22
+ const inlinedConfig = window['APP_CONFIG'];
23
+ if (inlinedConfig) {
24
+ console.log(`ENV resolved from injected config`);
25
+ loadConfigPromise = Promise.resolve(inlinedConfig);
26
+ }
27
+ else {
28
+ if (skipRemoteConfigLoad) {
29
+ console.log('📢 TKA001: Remote config load is disabled. To enable it, remove the "skipRemoteConfigLoad" key in your environment.json');
30
+ loadConfigPromise = Promise.resolve(this.defaultConfig || {});
31
+ }
32
+ else {
33
+ loadConfigPromise = firstValueFrom(this.http.get((this.defaultConfig && this.defaultConfig['remoteConfigURL']) || 'assets/env.json'));
34
+ }
35
+ }
36
+ loadConfigPromise
37
+ .then(async (config) => {
38
+ if (config) {
39
+ await this.config$.publish({ ...this.defaultConfig, ...config }).then(() => {
40
+ resolve(true);
41
+ });
42
+ }
43
+ })
44
+ .catch((e) => {
45
+ console.log(`Failed to load env configuration`);
46
+ reject(e);
47
+ });
48
+ });
49
+ }
50
+ get isInitialized() {
51
+ return this.config$.isInitialized;
52
+ }
53
+ getProperty(key) {
54
+ if (!Object.values(CONFIG_KEY).includes(key)) {
55
+ console.error('Invalid config key ', key);
56
+ }
57
+ return this.config$.getValue()?.[key];
58
+ }
59
+ async setProperty(key, val) {
60
+ await this.config$.publish({ key, val });
61
+ }
62
+ getConfig() {
63
+ return this.config$.getValue();
64
+ }
65
+ }
66
+ ConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ConfigurationService, deps: [{ token: i1.HttpClient }, { token: APP_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
67
+ ConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ConfigurationService, providedIn: 'root' });
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ConfigurationService, decorators: [{
69
+ type: Injectable,
70
+ args: [{ providedIn: 'root' }]
71
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
72
+ type: Optional
73
+ }, {
74
+ type: Inject,
75
+ args: [APP_CONFIG]
76
+ }] }]; } });
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWludGVncmF0aW9uLWludGVyZmFjZS9zcmMvbGliL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQWEsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDckMsT0FBTyxFQUFVLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTs7O0FBR3RELE1BQU0sT0FBTyxvQkFBb0I7SUFHL0IsWUFDVSxJQUFnQixFQUNnQixhQUF5QztRQUR6RSxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2dCLGtCQUFhLEdBQWIsYUFBYSxDQUE0QjtRQUpuRixZQUFPLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFBO0lBSy9CLENBQUM7SUFFSixXQUFXO1FBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUN4QixDQUFDO0lBRU0sSUFBSTtRQUNULE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtZQUM3RixJQUFJLGlCQUFrQyxDQUFBO1lBRXRDLE1BQU0sYUFBYSxHQUFJLE1BQWlELENBQUMsWUFBWSxDQUFDLENBQUE7WUFDdEYsSUFBSSxhQUFhLEVBQUU7Z0JBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQW1DLENBQUMsQ0FBQTtnQkFDaEQsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTthQUNuRDtpQkFBTTtnQkFDTCxJQUFJLG9CQUFvQixFQUFFO29CQUN4QixPQUFPLENBQUMsR0FBRyxDQUNULHlIQUF5SCxDQUMxSCxDQUFBO29CQUNELGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQTtpQkFDOUQ7cUJBQU07b0JBQ0wsaUJBQWlCLEdBQUcsY0FBYyxDQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksaUJBQWlCLENBQUMsQ0FDMUcsQ0FBQTtpQkFDRjthQUNGO1lBRUQsaUJBQWlCO2lCQUNkLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQ3JCLElBQUksTUFBTSxFQUFFO29CQUNWLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7d0JBQ3pFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtvQkFDZixDQUFDLENBQUMsQ0FBQTtpQkFDSDtZQUNILENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxDQUFDLENBQUE7Z0JBQy9DLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNYLENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQTtJQUNuQyxDQUFDO0lBRU0sV0FBVyxDQUFDLEdBQWU7UUFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzVDLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsR0FBRyxDQUFDLENBQUE7U0FDMUM7UUFDRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN2QyxDQUFDO0lBRU0sS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFXLEVBQUUsR0FBVztRQUMvQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7SUFDMUMsQ0FBQztJQUVNLFNBQVM7UUFDZCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDaEMsQ0FBQzs7a0hBbEVVLG9CQUFvQiw0Q0FLVCxVQUFVO3NIQUxyQixvQkFBb0IsY0FEUCxNQUFNOzRGQUNuQixvQkFBb0I7a0JBRGhDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFNN0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IENvbmZpZywgQ29uZmlndXJhdGlvblRvcGljIH0gZnJvbSAnQG9uZWN4L2ludGVncmF0aW9uLWludGVyZmFjZSdcbmltcG9ydCB7IEFQUF9DT05GSUcgfSBmcm9tICcuLi9hcGkvaW5qZWN0aW9uLXRva2VucydcbmltcG9ydCB7IENPTkZJR19LRVkgfSBmcm9tICcuLi9tb2RlbC9jb25maWcta2V5Lm1vZGVsJ1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25TZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgY29uZmlnJCA9IG5ldyBDb25maWd1cmF0aW9uVG9waWMoKVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9DT05GSUcpIHByaXZhdGUgZGVmYXVsdENvbmZpZz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cbiAgKSB7fVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnJC5kZXN0cm95KClcbiAgfVxuXG4gIHB1YmxpYyBpbml0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBza2lwUmVtb3RlQ29uZmlnTG9hZCA9IHRoaXMuZGVmYXVsdENvbmZpZyAmJiB0aGlzLmRlZmF1bHRDb25maWdbJ3NraXBSZW1vdGVDb25maWdMb2FkJ11cbiAgICAgIGxldCBsb2FkQ29uZmlnUHJvbWlzZTogUHJvbWlzZTxDb25maWc+XG5cbiAgICAgIGNvbnN0IGlubGluZWRDb25maWcgPSAod2luZG93IGFzIHR5cGVvZiB3aW5kb3cgJiB7IEFQUF9DT05GSUc6IENvbmZpZyB9KVsnQVBQX0NPTkZJRyddXG4gICAgICBpZiAoaW5saW5lZENvbmZpZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgRU5WIHJlc29sdmVkIGZyb20gaW5qZWN0ZWQgY29uZmlnYClcbiAgICAgICAgbG9hZENvbmZpZ1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUoaW5saW5lZENvbmZpZylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChza2lwUmVtb3RlQ29uZmlnTG9hZCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgJ/Cfk6IgVEtBMDAxOiBSZW1vdGUgY29uZmlnIGxvYWQgaXMgZGlzYWJsZWQuIFRvIGVuYWJsZSBpdCwgcmVtb3ZlIHRoZSBcInNraXBSZW1vdGVDb25maWdMb2FkXCIga2V5IGluIHlvdXIgZW52aXJvbm1lbnQuanNvbidcbiAgICAgICAgICApXG4gICAgICAgICAgbG9hZENvbmZpZ1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcy5kZWZhdWx0Q29uZmlnIHx8IHt9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvYWRDb25maWdQcm9taXNlID0gZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICB0aGlzLmh0dHAuZ2V0PENvbmZpZz4oKHRoaXMuZGVmYXVsdENvbmZpZyAmJiB0aGlzLmRlZmF1bHRDb25maWdbJ3JlbW90ZUNvbmZpZ1VSTCddKSB8fCAnYXNzZXRzL2Vudi5qc29uJylcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbG9hZENvbmZpZ1Byb21pc2VcbiAgICAgICAgLnRoZW4oYXN5bmMgKGNvbmZpZykgPT4ge1xuICAgICAgICAgIGlmIChjb25maWcpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29uZmlnJC5wdWJsaXNoKHsgLi4udGhpcy5kZWZhdWx0Q29uZmlnLCAuLi5jb25maWcgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgRmFpbGVkIHRvIGxvYWQgZW52IGNvbmZpZ3VyYXRpb25gKVxuICAgICAgICAgIHJlamVjdChlKVxuICAgICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBnZXQgaXNJbml0aWFsaXplZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWckLmlzSW5pdGlhbGl6ZWRcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcm9wZXJ0eShrZXk6IENPTkZJR19LRVkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghT2JqZWN0LnZhbHVlcyhDT05GSUdfS0VZKS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIGNvbmZpZyBrZXkgJywga2V5KVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb25maWckLmdldFZhbHVlKCk/LltrZXldXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2V0UHJvcGVydHkoa2V5OiBzdHJpbmcsIHZhbDogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5jb25maWckLnB1Ymxpc2goeyBrZXksIHZhbCB9KVxuICB9XG5cbiAgcHVibGljIGdldENvbmZpZygpOiBDb25maWcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZyQuZ2V0VmFsdWUoKVxuICB9XG59XG4iXX0=
@@ -0,0 +1,44 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { TranslateService } from '@ngx-translate/core';
3
+ import { combineLatest, of } from 'rxjs';
4
+ import { MessageTopic } from '@onecx/integration-interface';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@ngx-translate/core";
7
+ export class PortalMessageService {
8
+ constructor(translateService) {
9
+ this.translateService = translateService;
10
+ this.message$ = new MessageTopic();
11
+ }
12
+ success(msg) {
13
+ this.addTranslated('success', msg);
14
+ }
15
+ info(msg) {
16
+ this.addTranslated('info', msg);
17
+ }
18
+ error(msg) {
19
+ this.addTranslated('error', msg);
20
+ }
21
+ warning(msg) {
22
+ this.addTranslated('warning', msg);
23
+ }
24
+ addTranslated(severity, msg) {
25
+ combineLatest([
26
+ msg.summaryKey ? this.translateService.get(msg.summaryKey || '', msg.summaryParameters) : of(undefined),
27
+ msg.detailKey ? this.translateService.get(msg.detailKey, msg.detailParameters) : of(undefined),
28
+ ]).subscribe(([summaryTranslation, detailTranslation]) => {
29
+ this.message$.publish({
30
+ ...msg,
31
+ severity: severity,
32
+ summary: summaryTranslation,
33
+ detail: detailTranslation,
34
+ });
35
+ });
36
+ }
37
+ }
38
+ PortalMessageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PortalMessageService, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
39
+ PortalMessageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PortalMessageService, providedIn: 'any' });
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PortalMessageService, decorators: [{
41
+ type: Injectable,
42
+ args: [{ providedIn: 'any' }]
43
+ }], ctorParameters: function () { return [{ type: i1.TranslateService }]; } });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLW1lc3NhZ2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1pbnRlZ3JhdGlvbi1pbnRlcmZhY2Uvc3JjL2xpYi9zZXJ2aWNlcy9wb3J0YWwtbWVzc2FnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFBOzs7QUFtQjNELE1BQU0sT0FBTyxvQkFBb0I7SUFDL0IsWUFBb0IsZ0JBQWtDO1FBQWxDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFFdEQsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUE7SUFGNEIsQ0FBQztJQUkxRCxPQUFPLENBQUMsR0FBWTtRQUNsQixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUNwQyxDQUFDO0lBRUQsSUFBSSxDQUFDLEdBQVk7UUFDZixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUNqQyxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQVk7UUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFZO1FBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQ3BDLENBQUM7SUFFTyxhQUFhLENBQUMsUUFBZ0IsRUFBRSxHQUFZO1FBQ2xELGFBQWEsQ0FBQztZQUNaLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDdkcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDO1NBQy9GLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixDQUFXLEVBQUUsRUFBRTtZQUNqRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztnQkFDcEIsR0FBRyxHQUFHO2dCQUNOLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixPQUFPLEVBQUUsa0JBQWtCO2dCQUMzQixNQUFNLEVBQUUsaUJBQWlCO2FBQzFCLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQzs7a0hBakNVLG9CQUFvQjtzSEFBcEIsb0JBQW9CLGNBRFAsS0FBSzs0RkFDbEIsb0JBQW9CO2tCQURoQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBvZiB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBNZXNzYWdlVG9waWMgfSBmcm9tICdAb25lY3gvaW50ZWdyYXRpb24taW50ZXJmYWNlJ1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlID0ge1xuICBzdW1tYXJ5S2V5Pzogc3RyaW5nXG4gIHN1bW1hcnlQYXJhbWV0ZXJzPzogb2JqZWN0XG4gIGRldGFpbEtleT86IHN0cmluZ1xuICBkZXRhaWxQYXJhbWV0ZXJzPzogb2JqZWN0XG4gIGlkPzogYW55XG4gIGtleT86IHN0cmluZ1xuICBsaWZlPzogbnVtYmVyXG4gIHN0aWNreT86IGJvb2xlYW5cbiAgY2xvc2FibGU/OiBib29sZWFuXG4gIGRhdGE/OiBhbnlcbiAgaWNvbj86IHN0cmluZ1xuICBjb250ZW50U3R5bGVDbGFzcz86IHN0cmluZ1xuICBzdHlsZUNsYXNzPzogc3RyaW5nXG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ2FueScgfSlcbmV4cG9ydCBjbGFzcyBQb3J0YWxNZXNzYWdlU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSkge31cblxuICBtZXNzYWdlJCA9IG5ldyBNZXNzYWdlVG9waWMoKVxuXG4gIHN1Y2Nlc3MobXNnOiBNZXNzYWdlKSB7XG4gICAgdGhpcy5hZGRUcmFuc2xhdGVkKCdzdWNjZXNzJywgbXNnKVxuICB9XG5cbiAgaW5mbyhtc2c6IE1lc3NhZ2UpIHtcbiAgICB0aGlzLmFkZFRyYW5zbGF0ZWQoJ2luZm8nLCBtc2cpXG4gIH1cblxuICBlcnJvcihtc2c6IE1lc3NhZ2UpIHtcbiAgICB0aGlzLmFkZFRyYW5zbGF0ZWQoJ2Vycm9yJywgbXNnKVxuICB9XG5cbiAgd2FybmluZyhtc2c6IE1lc3NhZ2UpIHtcbiAgICB0aGlzLmFkZFRyYW5zbGF0ZWQoJ3dhcm5pbmcnLCBtc2cpXG4gIH1cblxuICBwcml2YXRlIGFkZFRyYW5zbGF0ZWQoc2V2ZXJpdHk6IHN0cmluZywgbXNnOiBNZXNzYWdlKSB7XG4gICAgY29tYmluZUxhdGVzdChbXG4gICAgICBtc2cuc3VtbWFyeUtleSA/IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQobXNnLnN1bW1hcnlLZXkgfHwgJycsIG1zZy5zdW1tYXJ5UGFyYW1ldGVycykgOiBvZih1bmRlZmluZWQpLFxuICAgICAgbXNnLmRldGFpbEtleSA/IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQobXNnLmRldGFpbEtleSwgbXNnLmRldGFpbFBhcmFtZXRlcnMpIDogb2YodW5kZWZpbmVkKSxcbiAgICBdKS5zdWJzY3JpYmUoKFtzdW1tYXJ5VHJhbnNsYXRpb24sIGRldGFpbFRyYW5zbGF0aW9uXTogc3RyaW5nW10pID0+IHtcbiAgICAgIHRoaXMubWVzc2FnZSQucHVibGlzaCh7XG4gICAgICAgIC4uLm1zZyxcbiAgICAgICAgc2V2ZXJpdHk6IHNldmVyaXR5LFxuICAgICAgICBzdW1tYXJ5OiBzdW1tYXJ5VHJhbnNsYXRpb24sXG4gICAgICAgIGRldGFpbDogZGV0YWlsVHJhbnNsYXRpb24sXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,48 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { Injectable } from '@angular/core';
3
+ import { from, map, mergeMap } from 'rxjs';
4
+ import { CurrentThemeTopic } from '@onecx/integration-interface';
5
+ import { ConfigurationService } from './configuration.service';
6
+ import { CONFIG_KEY } from '../model/config-key.model';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "./configuration.service";
9
+ import * as i2 from "@angular/common/http";
10
+ const defaultThemeServerUrl = 'http://portal-theme-management:8080';
11
+ export class ThemeService {
12
+ constructor(configService, http) {
13
+ this.configService = configService;
14
+ this.http = http;
15
+ this.baseUrlV1 = './portal-api';
16
+ this.currentTheme$ = new CurrentThemeTopic();
17
+ }
18
+ getThemeHref(themeId) {
19
+ const themeServerUrl = this.configService.getProperty(CONFIG_KEY.TKIT_PORTAL_THEME_SERVER_URL) || defaultThemeServerUrl;
20
+ return `${themeServerUrl}/themes/${themeId}/${themeId}.min.css`;
21
+ }
22
+ loadAndApplyTheme(themeName) {
23
+ return this.http.get(`${this.baseUrlV1}/internal/themes/${encodeURI(themeName)}`).pipe(mergeMap((theme) => {
24
+ return from(this.apply(theme)).pipe(map(() => theme));
25
+ }));
26
+ }
27
+ async apply(theme) {
28
+ console.log(`🎨 Applying theme: ${theme.name}`);
29
+ await this.currentTheme$.publish(theme);
30
+ if (theme.properties) {
31
+ Object.values(theme.properties).forEach((group) => {
32
+ for (const [key, value] of Object.entries(group)) {
33
+ document.documentElement.style.setProperty(`--${key}`, value);
34
+ }
35
+ });
36
+ }
37
+ }
38
+ ngOnDestroy() {
39
+ this.currentTheme$.destroy();
40
+ }
41
+ }
42
+ ThemeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ThemeService, deps: [{ token: i1.ConfigurationService }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
43
+ ThemeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ThemeService, providedIn: 'root' });
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ThemeService, decorators: [{
45
+ type: Injectable,
46
+ args: [{ providedIn: 'root' }]
47
+ }], ctorParameters: function () { return [{ type: i1.ConfigurationService }, { type: i2.HttpClient }]; } });
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1pbnRlZ3JhdGlvbi1pbnRlcmZhY2Uvc3JjL2xpYi9zZXJ2aWNlcy90aGVtZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFBO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQVMsTUFBTSw4QkFBOEIsQ0FBQTtBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7Ozs7QUFFdEQsTUFBTSxxQkFBcUIsR0FBRyxxQ0FBcUMsQ0FBQTtBQUduRSxNQUFNLE9BQU8sWUFBWTtJQUl2QixZQUFvQixhQUFtQyxFQUFVLElBQWdCO1FBQTdELGtCQUFhLEdBQWIsYUFBYSxDQUFzQjtRQUFVLFNBQUksR0FBSixJQUFJLENBQVk7UUFIakYsY0FBUyxHQUFHLGNBQWMsQ0FBQTtRQUMxQixrQkFBYSxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQTtJQUU2QyxDQUFDO0lBRXJGLFlBQVksQ0FBQyxPQUFlO1FBQzFCLE1BQU0sY0FBYyxHQUNsQixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsNEJBQTRCLENBQUMsSUFBSSxxQkFBcUIsQ0FBQTtRQUNsRyxPQUFPLEdBQUcsY0FBYyxXQUFXLE9BQU8sSUFBSSxPQUFPLFVBQVUsQ0FBQTtJQUNqRSxDQUFDO0lBRU0saUJBQWlCLENBQUMsU0FBaUI7UUFDeEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBUSxHQUFHLElBQUksQ0FBQyxTQUFTLG9CQUFvQixTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDM0YsUUFBUSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDakIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUN2RCxDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBWTtRQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUMvQyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3ZDLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUNwQixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDaEQsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ2hELFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFBO2lCQUM5RDtZQUNILENBQUMsQ0FBQyxDQUFBO1NBQ0g7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDOUIsQ0FBQzs7MEdBbENVLFlBQVk7OEdBQVosWUFBWSxjQURDLE1BQU07NEZBQ25CLFlBQVk7a0JBRHhCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IGZyb20sIG1hcCwgbWVyZ2VNYXAgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgQ3VycmVudFRoZW1lVG9waWMsIFRoZW1lIH0gZnJvbSAnQG9uZWN4L2ludGVncmF0aW9uLWludGVyZmFjZSdcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLnNlcnZpY2UnXG5pbXBvcnQgeyBDT05GSUdfS0VZIH0gZnJvbSAnLi4vbW9kZWwvY29uZmlnLWtleS5tb2RlbCdcblxuY29uc3QgZGVmYXVsdFRoZW1lU2VydmVyVXJsID0gJ2h0dHA6Ly9wb3J0YWwtdGhlbWUtbWFuYWdlbWVudDo4MDgwJ1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFRoZW1lU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIGJhc2VVcmxWMSA9ICcuL3BvcnRhbC1hcGknXG4gIGN1cnJlbnRUaGVtZSQgPSBuZXcgQ3VycmVudFRoZW1lVG9waWMoKVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2UsIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cblxuICBnZXRUaGVtZUhyZWYodGhlbWVJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB0aGVtZVNlcnZlclVybCA9XG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0UHJvcGVydHkoQ09ORklHX0tFWS5US0lUX1BPUlRBTF9USEVNRV9TRVJWRVJfVVJMKSB8fCBkZWZhdWx0VGhlbWVTZXJ2ZXJVcmxcbiAgICByZXR1cm4gYCR7dGhlbWVTZXJ2ZXJVcmx9L3RoZW1lcy8ke3RoZW1lSWR9LyR7dGhlbWVJZH0ubWluLmNzc2BcbiAgfVxuXG4gIHB1YmxpYyBsb2FkQW5kQXBwbHlUaGVtZSh0aGVtZU5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFRoZW1lPihgJHt0aGlzLmJhc2VVcmxWMX0vaW50ZXJuYWwvdGhlbWVzLyR7ZW5jb2RlVVJJKHRoZW1lTmFtZSl9YCkucGlwZShcbiAgICAgIG1lcmdlTWFwKCh0aGVtZSkgPT4ge1xuICAgICAgICByZXR1cm4gZnJvbSh0aGlzLmFwcGx5KHRoZW1lKSkucGlwZShtYXAoKCkgPT4gdGhlbWUpKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYXBwbHkodGhlbWU6IFRoZW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coYPCfjqggQXBwbHlpbmcgdGhlbWU6ICR7dGhlbWUubmFtZX1gKVxuICAgIGF3YWl0IHRoaXMuY3VycmVudFRoZW1lJC5wdWJsaXNoKHRoZW1lKVxuICAgIGlmICh0aGVtZS5wcm9wZXJ0aWVzKSB7XG4gICAgICBPYmplY3QudmFsdWVzKHRoZW1lLnByb3BlcnRpZXMpLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGdyb3VwKSkge1xuICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShgLS0ke2tleX1gLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRUaGVtZSQuZGVzdHJveSgpXG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,69 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject, map } from 'rxjs';
3
+ import { UserProfileTopic } from '@onecx/integration-interface';
4
+ import { DEFAULT_LANG } from '../api/constants';
5
+ import * as i0 from "@angular/core";
6
+ export class UserService {
7
+ constructor() {
8
+ this.profile$ = new UserProfileTopic();
9
+ this.permissions$ = new BehaviorSubject([]);
10
+ this.lang$ = new BehaviorSubject(this.determineLanguage() ?? DEFAULT_LANG);
11
+ this.profile$
12
+ .pipe(map((profile) => profile.accountSettings?.localeAndTimeSettings?.locale ?? this.determineLanguage() ?? DEFAULT_LANG))
13
+ .subscribe(this.lang$);
14
+ this.profile$.pipe(map((profile) => this.extractPermissions(profile))).subscribe(this.permissions$);
15
+ }
16
+ ngOnDestroy() {
17
+ this.profile$.destroy();
18
+ }
19
+ hasPermission(permissionKey) {
20
+ const result = this.permissions$.getValue() ? this.permissions$.getValue()?.includes(permissionKey) : false;
21
+ if (!result) {
22
+ console.log(`👮‍♀️ No permission for: ${permissionKey}`);
23
+ }
24
+ return !!result;
25
+ }
26
+ determineLanguage() {
27
+ if (typeof window === 'undefined' || typeof window.navigator === 'undefined') {
28
+ return undefined;
29
+ }
30
+ let browserLang = window.navigator.languages ? window.navigator.languages[0] : null;
31
+ browserLang = browserLang || window.navigator.language;
32
+ if (typeof browserLang === 'undefined') {
33
+ return undefined;
34
+ }
35
+ if (browserLang.indexOf('-') !== -1) {
36
+ browserLang = browserLang.split('-')[0];
37
+ }
38
+ if (browserLang.indexOf('_') !== -1) {
39
+ browserLang = browserLang.split('_')[0];
40
+ }
41
+ return browserLang;
42
+ }
43
+ extractPermissions(userProfile) {
44
+ const permissions = [];
45
+ if (userProfile) {
46
+ if (userProfile.memberships) {
47
+ userProfile.memberships.forEach((m) => {
48
+ m.roleMemberships?.forEach((r) => {
49
+ r.permissions?.forEach((p) => {
50
+ if (p) {
51
+ if (p.key !== undefined) {
52
+ permissions.push(p.key);
53
+ }
54
+ }
55
+ });
56
+ });
57
+ });
58
+ }
59
+ }
60
+ return permissions;
61
+ }
62
+ }
63
+ UserService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
64
+ UserService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserService, providedIn: 'root' });
65
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserService, decorators: [{
66
+ type: Injectable,
67
+ args: [{ providedIn: 'root' }]
68
+ }], ctorParameters: function () { return []; } });
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWludGVncmF0aW9uLWludGVyZmFjZS9zcmMvbGliL3NlcnZpY2VzL3VzZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFBO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzNDLE9BQU8sRUFBZSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFBO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTs7QUFHL0MsTUFBTSxPQUFPLFdBQVc7SUFLdEI7UUFKQSxhQUFRLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFBO1FBQ2pDLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQVcsRUFBRSxDQUFDLENBQUE7UUFDaEQsVUFBSyxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLFlBQVksQ0FBQyxDQUFBO1FBR25FLElBQUksQ0FBQyxRQUFRO2FBQ1YsSUFBSSxDQUNILEdBQUcsQ0FDRCxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ1YsT0FBTyxDQUFDLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksWUFBWSxDQUNyRyxDQUNGO2FBQ0EsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUV4QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUNyRyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDekIsQ0FBQztJQUVELGFBQWEsQ0FBQyxhQUFxQjtRQUNqQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO1FBQzNHLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixhQUFhLEVBQUUsQ0FBQyxDQUFBO1NBQ3pEO1FBQ0QsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFBO0lBQ2pCLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksT0FBTyxNQUFNLENBQUMsU0FBUyxLQUFLLFdBQVcsRUFBRTtZQUM1RSxPQUFPLFNBQVMsQ0FBQTtTQUNqQjtRQUVELElBQUksV0FBVyxHQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO1FBQ3hGLFdBQVcsR0FBRyxXQUFXLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUE7UUFFdEQsSUFBSSxPQUFPLFdBQVcsS0FBSyxXQUFXLEVBQUU7WUFDdEMsT0FBTyxTQUFTLENBQUE7U0FDakI7UUFFRCxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDbkMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDeEM7UUFFRCxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDbkMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDeEM7UUFFRCxPQUFPLFdBQVcsQ0FBQTtJQUNwQixDQUFDO0lBRU8sa0JBQWtCLENBQUMsV0FBd0I7UUFDakQsTUFBTSxXQUFXLEdBQWEsRUFBRSxDQUFBO1FBQ2hDLElBQUksV0FBVyxFQUFFO1lBQ2YsSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFO2dCQUMzQixXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNwQyxDQUFDLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO3dCQUMvQixDQUFDLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFOzRCQUMzQixJQUFJLENBQUMsRUFBRTtnQ0FDTCxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFO29DQUN2QixXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtpQ0FDeEI7NkJBQ0Y7d0JBQ0gsQ0FBQyxDQUFDLENBQUE7b0JBQ0osQ0FBQyxDQUFDLENBQUE7Z0JBQ0osQ0FBQyxDQUFDLENBQUE7YUFDSDtTQUNGO1FBQ0QsT0FBTyxXQUFXLENBQUE7SUFDcEIsQ0FBQzs7eUdBdkVVLFdBQVc7NkdBQVgsV0FBVyxjQURFLE1BQU07NEZBQ25CLFdBQVc7a0JBRHZCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgbWFwIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IFVzZXJQcm9maWxlLCBVc2VyUHJvZmlsZVRvcGljIH0gZnJvbSAnQG9uZWN4L2ludGVncmF0aW9uLWludGVyZmFjZSdcbmltcG9ydCB7IERFRkFVTFRfTEFORyB9IGZyb20gJy4uL2FwaS9jb25zdGFudHMnXG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgVXNlclNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcm9maWxlJCA9IG5ldyBVc2VyUHJvZmlsZVRvcGljKClcbiAgcGVybWlzc2lvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pXG4gIGxhbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLmRldGVybWluZUxhbmd1YWdlKCkgPz8gREVGQVVMVF9MQU5HKVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucHJvZmlsZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoXG4gICAgICAgICAgKHByb2ZpbGUpID0+XG4gICAgICAgICAgICBwcm9maWxlLmFjY291bnRTZXR0aW5ncz8ubG9jYWxlQW5kVGltZVNldHRpbmdzPy5sb2NhbGUgPz8gdGhpcy5kZXRlcm1pbmVMYW5ndWFnZSgpID8/IERFRkFVTFRfTEFOR1xuICAgICAgICApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHRoaXMubGFuZyQpXG5cbiAgICB0aGlzLnByb2ZpbGUkLnBpcGUobWFwKChwcm9maWxlKSA9PiB0aGlzLmV4dHJhY3RQZXJtaXNzaW9ucyhwcm9maWxlKSkpLnN1YnNjcmliZSh0aGlzLnBlcm1pc3Npb25zJClcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucHJvZmlsZSQuZGVzdHJveSgpXG4gIH1cblxuICBoYXNQZXJtaXNzaW9uKHBlcm1pc3Npb25LZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucGVybWlzc2lvbnMkLmdldFZhbHVlKCkgPyB0aGlzLnBlcm1pc3Npb25zJC5nZXRWYWx1ZSgpPy5pbmNsdWRlcyhwZXJtaXNzaW9uS2V5KSA6IGZhbHNlXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGDwn5Gu4oCN4pmA77iPIE5vIHBlcm1pc3Npb24gZm9yOiAke3Blcm1pc3Npb25LZXl9YClcbiAgICB9XG4gICAgcmV0dXJuICEhcmVzdWx0XG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZUxhbmd1YWdlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGxldCBicm93c2VyTGFuZzogYW55ID0gd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZXMgPyB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlc1swXSA6IG51bGxcbiAgICBicm93c2VyTGFuZyA9IGJyb3dzZXJMYW5nIHx8IHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2VcblxuICAgIGlmICh0eXBlb2YgYnJvd3NlckxhbmcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgaWYgKGJyb3dzZXJMYW5nLmluZGV4T2YoJy0nKSAhPT0gLTEpIHtcbiAgICAgIGJyb3dzZXJMYW5nID0gYnJvd3Nlckxhbmcuc3BsaXQoJy0nKVswXVxuICAgIH1cblxuICAgIGlmIChicm93c2VyTGFuZy5pbmRleE9mKCdfJykgIT09IC0xKSB7XG4gICAgICBicm93c2VyTGFuZyA9IGJyb3dzZXJMYW5nLnNwbGl0KCdfJylbMF1cbiAgICB9XG5cbiAgICByZXR1cm4gYnJvd3NlckxhbmdcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdFBlcm1pc3Npb25zKHVzZXJQcm9maWxlOiBVc2VyUHJvZmlsZSkge1xuICAgIGNvbnN0IHBlcm1pc3Npb25zOiBzdHJpbmdbXSA9IFtdXG4gICAgaWYgKHVzZXJQcm9maWxlKSB7XG4gICAgICBpZiAodXNlclByb2ZpbGUubWVtYmVyc2hpcHMpIHtcbiAgICAgICAgdXNlclByb2ZpbGUubWVtYmVyc2hpcHMuZm9yRWFjaCgobSkgPT4ge1xuICAgICAgICAgIG0ucm9sZU1lbWJlcnNoaXBzPy5mb3JFYWNoKChyKSA9PiB7XG4gICAgICAgICAgICByLnBlcm1pc3Npb25zPy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHAua2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2gocC5rZXkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwZXJtaXNzaW9uc1xuICB9XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lY3gtYW5ndWxhci1pbnRlZ3JhdGlvbi1pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItaW50ZWdyYXRpb24taW50ZXJmYWNlL3NyYy9vbmVjeC1hbmd1bGFyLWludGVncmF0aW9uLWludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -0,0 +1,292 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, InjectionToken, Optional, Inject } from '@angular/core';
3
+ import { GlobalErrorTopic, GlobalLoadingTopic, CurrentMfeTopic, CurrentPageTopic, CurrentPortalTopic, IsAuthenticatedTopic, ConfigurationTopic, UserProfileTopic, MessageTopic, CurrentThemeTopic } from '@onecx/integration-interface';
4
+ import * as i1 from '@angular/common/http';
5
+ import { firstValueFrom, BehaviorSubject, map, combineLatest, of, mergeMap, from } from 'rxjs';
6
+ import * as i1$1 from '@ngx-translate/core';
7
+
8
+ class AppStateService {
9
+ constructor() {
10
+ this.globalError$ = new GlobalErrorTopic();
11
+ this.globalLoading$ = new GlobalLoadingTopic();
12
+ this.currentMfe$ = new CurrentMfeTopic();
13
+ /**
14
+ * This topic will only fire when pageInfo.path matches document.location.pathname,
15
+ * if not it will fire undefined.
16
+ */
17
+ this.currentPage$ = new CurrentPageTopic();
18
+ this.currentPortal$ = new CurrentPortalTopic();
19
+ /**
20
+ * This Topic is initialized as soon as the authentication is done
21
+ */
22
+ this.isAuthenticated$ = new IsAuthenticatedTopic();
23
+ }
24
+ ngOnDestroy() {
25
+ this.globalError$.destroy();
26
+ this.globalLoading$.destroy();
27
+ this.currentMfe$.destroy();
28
+ this.currentPage$.destroy();
29
+ this.currentPortal$.destroy();
30
+ this.isAuthenticated$.destroy();
31
+ }
32
+ }
33
+ AppStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
34
+ AppStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppStateService, providedIn: 'root' });
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppStateService, decorators: [{
36
+ type: Injectable,
37
+ args: [{ providedIn: 'root' }]
38
+ }] });
39
+
40
+ const APP_CONFIG = new InjectionToken('APP_CONFIG');
41
+ const AUTH_SERVICE = new InjectionToken('AUTH_SERVICE');
42
+ const SANITY_CHECK = new InjectionToken('OCXSANITY_CHECK');
43
+ const APPLICATION_NAME = new InjectionToken('APPLICATION_NAME');
44
+
45
+ var CONFIG_KEY;
46
+ (function (CONFIG_KEY) {
47
+ CONFIG_KEY["TKIT_PORTAL_DEFAULT_THEME"] = "TKIT_PORTAL_DEFAULT_THEME";
48
+ CONFIG_KEY["TKIT_PORTAL_DISABLE_THEME_MANAGEMENT"] = "TKIT_PORTAL_DISABLE_THEME_MANAGEMENT";
49
+ CONFIG_KEY["TKIT_PORTAL_THEME_SERVER_URL"] = "TKIT_PORTAL_THEME_SERVER_URL";
50
+ CONFIG_KEY["TKIT_TOKEN_ROLE_CLAIM_NAME"] = "TKIT_TOKEN_ROLE_CLAIM_NAME";
51
+ CONFIG_KEY["TKIT_PORTAL_ID"] = "TKIT_PORTAL_ID";
52
+ CONFIG_KEY["TKIT_SUPPORTED_LANGUAGES"] = "TKIT_SUPPORTED_LANGUAGES";
53
+ CONFIG_KEY["TKIT_SEARCH_BASE_URL"] = "TKIT_SEARCH_BASE_URL";
54
+ CONFIG_KEY["APP_BASE_HREF"] = "APP_BASE_HREF";
55
+ CONFIG_KEY["KEYCLOAK_REALM"] = "KEYCLOAK_REALM";
56
+ CONFIG_KEY["KEYCLOAK_ENABLE_SILENT_SSO"] = "KEYCLOAK_ENABLE_SILENT_SSO";
57
+ CONFIG_KEY["KEYCLOAK_URL"] = "KEYCLOAK_URL";
58
+ CONFIG_KEY["KEYCLOAK_CLIENT_ID"] = "KEYCLOAK_CLIENT_ID";
59
+ CONFIG_KEY["ONECX_PORTAL_FAVORITES_DISABLED"] = "ONECX_PORTAL_FAVORITES_DISABLED";
60
+ CONFIG_KEY["ONECX_PORTAL_FEEDBACK_DISABLED"] = "ONECX_PORTAL_FEEDBACK_DISABLED";
61
+ CONFIG_KEY["ONECX_PORTAL_SEARCH_DISABLED"] = "ONECX_PORTAL_SEARCH_DISABLED";
62
+ CONFIG_KEY["ONECX_PORTAL_SUPPORT_TICKET_DISABLED"] = "ONECX_PORTAL_SUPPORT_TICKET_DISABLED";
63
+ CONFIG_KEY["ONECX_PORTAL_ANNOUNCEMENTS_DISABLED"] = "ONECX_PORTAL_ANNOUNCEMENTS_DISABLED";
64
+ CONFIG_KEY["ONECX_PORTAL_PASSWORD_CHANGE_DISABLED"] = "ONECX_PORTAL_PASSWORD_CHANGE_DISABLED";
65
+ CONFIG_KEY["ONECX_PORTAL_SETTINGS_DISABLED"] = "ONECX_PORTAL_SETTINGS_DISABLED";
66
+ CONFIG_KEY["ONECX_PORTAL_MY_ROLES_PERMISSIONS_DISABLED"] = "ONECX_PORTAL_MY_ROLES_PERMISSIONS_DISABLED";
67
+ CONFIG_KEY["ONECX_PORTAL_HELP_DISABLED"] = "ONECX_PORTAL_HELP_DISABLED";
68
+ CONFIG_KEY["APP_VERSION"] = "APP_VERSION";
69
+ CONFIG_KEY["IS_SHELL"] = "IS_SHELL";
70
+ })(CONFIG_KEY || (CONFIG_KEY = {}));
71
+
72
+ class ConfigurationService {
73
+ constructor(http, defaultConfig) {
74
+ this.http = http;
75
+ this.defaultConfig = defaultConfig;
76
+ this.config$ = new ConfigurationTopic();
77
+ }
78
+ ngOnDestroy() {
79
+ this.config$.destroy();
80
+ }
81
+ init() {
82
+ return new Promise((resolve, reject) => {
83
+ const skipRemoteConfigLoad = this.defaultConfig && this.defaultConfig['skipRemoteConfigLoad'];
84
+ let loadConfigPromise;
85
+ const inlinedConfig = window['APP_CONFIG'];
86
+ if (inlinedConfig) {
87
+ console.log(`ENV resolved from injected config`);
88
+ loadConfigPromise = Promise.resolve(inlinedConfig);
89
+ }
90
+ else {
91
+ if (skipRemoteConfigLoad) {
92
+ console.log('📢 TKA001: Remote config load is disabled. To enable it, remove the "skipRemoteConfigLoad" key in your environment.json');
93
+ loadConfigPromise = Promise.resolve(this.defaultConfig || {});
94
+ }
95
+ else {
96
+ loadConfigPromise = firstValueFrom(this.http.get((this.defaultConfig && this.defaultConfig['remoteConfigURL']) || 'assets/env.json'));
97
+ }
98
+ }
99
+ loadConfigPromise
100
+ .then(async (config) => {
101
+ if (config) {
102
+ await this.config$.publish({ ...this.defaultConfig, ...config }).then(() => {
103
+ resolve(true);
104
+ });
105
+ }
106
+ })
107
+ .catch((e) => {
108
+ console.log(`Failed to load env configuration`);
109
+ reject(e);
110
+ });
111
+ });
112
+ }
113
+ get isInitialized() {
114
+ return this.config$.isInitialized;
115
+ }
116
+ getProperty(key) {
117
+ if (!Object.values(CONFIG_KEY).includes(key)) {
118
+ console.error('Invalid config key ', key);
119
+ }
120
+ return this.config$.getValue()?.[key];
121
+ }
122
+ async setProperty(key, val) {
123
+ await this.config$.publish({ key, val });
124
+ }
125
+ getConfig() {
126
+ return this.config$.getValue();
127
+ }
128
+ }
129
+ ConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ConfigurationService, deps: [{ token: i1.HttpClient }, { token: APP_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
130
+ ConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ConfigurationService, providedIn: 'root' });
131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ConfigurationService, decorators: [{
132
+ type: Injectable,
133
+ args: [{ providedIn: 'root' }]
134
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
135
+ type: Optional
136
+ }, {
137
+ type: Inject,
138
+ args: [APP_CONFIG]
139
+ }] }]; } });
140
+
141
+ const API_PREFIX = 'portal-api';
142
+ const DEFAULT_LANG = 'en';
143
+
144
+ class UserService {
145
+ constructor() {
146
+ this.profile$ = new UserProfileTopic();
147
+ this.permissions$ = new BehaviorSubject([]);
148
+ this.lang$ = new BehaviorSubject(this.determineLanguage() ?? DEFAULT_LANG);
149
+ this.profile$
150
+ .pipe(map((profile) => profile.accountSettings?.localeAndTimeSettings?.locale ?? this.determineLanguage() ?? DEFAULT_LANG))
151
+ .subscribe(this.lang$);
152
+ this.profile$.pipe(map((profile) => this.extractPermissions(profile))).subscribe(this.permissions$);
153
+ }
154
+ ngOnDestroy() {
155
+ this.profile$.destroy();
156
+ }
157
+ hasPermission(permissionKey) {
158
+ const result = this.permissions$.getValue() ? this.permissions$.getValue()?.includes(permissionKey) : false;
159
+ if (!result) {
160
+ console.log(`👮‍♀️ No permission for: ${permissionKey}`);
161
+ }
162
+ return !!result;
163
+ }
164
+ determineLanguage() {
165
+ if (typeof window === 'undefined' || typeof window.navigator === 'undefined') {
166
+ return undefined;
167
+ }
168
+ let browserLang = window.navigator.languages ? window.navigator.languages[0] : null;
169
+ browserLang = browserLang || window.navigator.language;
170
+ if (typeof browserLang === 'undefined') {
171
+ return undefined;
172
+ }
173
+ if (browserLang.indexOf('-') !== -1) {
174
+ browserLang = browserLang.split('-')[0];
175
+ }
176
+ if (browserLang.indexOf('_') !== -1) {
177
+ browserLang = browserLang.split('_')[0];
178
+ }
179
+ return browserLang;
180
+ }
181
+ extractPermissions(userProfile) {
182
+ const permissions = [];
183
+ if (userProfile) {
184
+ if (userProfile.memberships) {
185
+ userProfile.memberships.forEach((m) => {
186
+ m.roleMemberships?.forEach((r) => {
187
+ r.permissions?.forEach((p) => {
188
+ if (p) {
189
+ if (p.key !== undefined) {
190
+ permissions.push(p.key);
191
+ }
192
+ }
193
+ });
194
+ });
195
+ });
196
+ }
197
+ }
198
+ return permissions;
199
+ }
200
+ }
201
+ UserService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
202
+ UserService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserService, providedIn: 'root' });
203
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserService, decorators: [{
204
+ type: Injectable,
205
+ args: [{ providedIn: 'root' }]
206
+ }], ctorParameters: function () { return []; } });
207
+
208
+ class PortalMessageService {
209
+ constructor(translateService) {
210
+ this.translateService = translateService;
211
+ this.message$ = new MessageTopic();
212
+ }
213
+ success(msg) {
214
+ this.addTranslated('success', msg);
215
+ }
216
+ info(msg) {
217
+ this.addTranslated('info', msg);
218
+ }
219
+ error(msg) {
220
+ this.addTranslated('error', msg);
221
+ }
222
+ warning(msg) {
223
+ this.addTranslated('warning', msg);
224
+ }
225
+ addTranslated(severity, msg) {
226
+ combineLatest([
227
+ msg.summaryKey ? this.translateService.get(msg.summaryKey || '', msg.summaryParameters) : of(undefined),
228
+ msg.detailKey ? this.translateService.get(msg.detailKey, msg.detailParameters) : of(undefined),
229
+ ]).subscribe(([summaryTranslation, detailTranslation]) => {
230
+ this.message$.publish({
231
+ ...msg,
232
+ severity: severity,
233
+ summary: summaryTranslation,
234
+ detail: detailTranslation,
235
+ });
236
+ });
237
+ }
238
+ }
239
+ PortalMessageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PortalMessageService, deps: [{ token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
240
+ PortalMessageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PortalMessageService, providedIn: 'any' });
241
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PortalMessageService, decorators: [{
242
+ type: Injectable,
243
+ args: [{ providedIn: 'any' }]
244
+ }], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; } });
245
+
246
+ const defaultThemeServerUrl = 'http://portal-theme-management:8080';
247
+ class ThemeService {
248
+ constructor(configService, http) {
249
+ this.configService = configService;
250
+ this.http = http;
251
+ this.baseUrlV1 = './portal-api';
252
+ this.currentTheme$ = new CurrentThemeTopic();
253
+ }
254
+ getThemeHref(themeId) {
255
+ const themeServerUrl = this.configService.getProperty(CONFIG_KEY.TKIT_PORTAL_THEME_SERVER_URL) || defaultThemeServerUrl;
256
+ return `${themeServerUrl}/themes/${themeId}/${themeId}.min.css`;
257
+ }
258
+ loadAndApplyTheme(themeName) {
259
+ return this.http.get(`${this.baseUrlV1}/internal/themes/${encodeURI(themeName)}`).pipe(mergeMap((theme) => {
260
+ return from(this.apply(theme)).pipe(map(() => theme));
261
+ }));
262
+ }
263
+ async apply(theme) {
264
+ console.log(`🎨 Applying theme: ${theme.name}`);
265
+ await this.currentTheme$.publish(theme);
266
+ if (theme.properties) {
267
+ Object.values(theme.properties).forEach((group) => {
268
+ for (const [key, value] of Object.entries(group)) {
269
+ document.documentElement.style.setProperty(`--${key}`, value);
270
+ }
271
+ });
272
+ }
273
+ }
274
+ ngOnDestroy() {
275
+ this.currentTheme$.destroy();
276
+ }
277
+ }
278
+ ThemeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ThemeService, deps: [{ token: ConfigurationService }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
279
+ ThemeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ThemeService, providedIn: 'root' });
280
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ThemeService, decorators: [{
281
+ type: Injectable,
282
+ args: [{ providedIn: 'root' }]
283
+ }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: i1.HttpClient }]; } });
284
+
285
+ // services
286
+
287
+ /**
288
+ * Generated bundle index. Do not edit.
289
+ */
290
+
291
+ export { APPLICATION_NAME, APP_CONFIG, AUTH_SERVICE, AppStateService, CONFIG_KEY, ConfigurationService, PortalMessageService, SANITY_CHECK, ThemeService, UserService };
292
+ //# sourceMappingURL=onecx-angular-integration-interface.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onecx-angular-integration-interface.mjs","sources":["../../../../libs/angular-integration-interface/src/lib/services/app-state.service.ts","../../../../libs/angular-integration-interface/src/lib/api/injection-tokens.ts","../../../../libs/angular-integration-interface/src/lib/model/config-key.model.ts","../../../../libs/angular-integration-interface/src/lib/services/configuration.service.ts","../../../../libs/angular-integration-interface/src/lib/api/constants.ts","../../../../libs/angular-integration-interface/src/lib/services/user.service.ts","../../../../libs/angular-integration-interface/src/lib/services/portal-message.service.ts","../../../../libs/angular-integration-interface/src/lib/services/theme.service.ts","../../../../libs/angular-integration-interface/src/index.ts","../../../../libs/angular-integration-interface/src/onecx-angular-integration-interface.ts"],"sourcesContent":["import { Injectable, OnDestroy } from '@angular/core'\nimport {\n GlobalErrorTopic,\n GlobalLoadingTopic,\n CurrentMfeTopic,\n CurrentPageTopic,\n CurrentPortalTopic,\n IsAuthenticatedTopic,\n} from '@onecx/integration-interface'\n\n@Injectable({ providedIn: 'root' })\nexport class AppStateService implements OnDestroy {\n globalError$ = new GlobalErrorTopic()\n globalLoading$ = new GlobalLoadingTopic()\n currentMfe$ = new CurrentMfeTopic()\n\n /**\n * This topic will only fire when pageInfo.path matches document.location.pathname,\n * if not it will fire undefined.\n */\n currentPage$ = new CurrentPageTopic()\n currentPortal$ = new CurrentPortalTopic()\n\n /**\n * This Topic is initialized as soon as the authentication is done\n */\n isAuthenticated$ = new IsAuthenticatedTopic()\n\n ngOnDestroy(): void {\n this.globalError$.destroy()\n this.globalLoading$.destroy()\n this.currentMfe$.destroy()\n this.currentPage$.destroy()\n this.currentPortal$.destroy()\n this.isAuthenticated$.destroy()\n }\n}\n","import { InjectionToken } from '@angular/core'\nimport { IAuthService } from './iauth.service'\n\nexport interface LibConfig {\n appId: string\n portalId: string\n /**\n * If true, the tkit-module will not try to load remote env values from server(GET /assets/env.json)\n */\n skipRemoteConfigLoad: boolean\n /**\n * URL from which the remote config will be loaded, default: '/assets/env.json'\n */\n remoteConfigURL: string\n}\nexport const APP_CONFIG = new InjectionToken<LibConfig>('APP_CONFIG')\n\nexport const AUTH_SERVICE = new InjectionToken<IAuthService>('AUTH_SERVICE')\n\nexport const SANITY_CHECK = new InjectionToken<string>('OCXSANITY_CHECK')\n\nexport const APPLICATION_NAME = new InjectionToken<string>('APPLICATION_NAME')\n","export enum CONFIG_KEY {\n TKIT_PORTAL_DEFAULT_THEME = 'TKIT_PORTAL_DEFAULT_THEME',\n TKIT_PORTAL_DISABLE_THEME_MANAGEMENT = 'TKIT_PORTAL_DISABLE_THEME_MANAGEMENT',\n TKIT_PORTAL_THEME_SERVER_URL = 'TKIT_PORTAL_THEME_SERVER_URL',\n TKIT_TOKEN_ROLE_CLAIM_NAME = 'TKIT_TOKEN_ROLE_CLAIM_NAME',\n TKIT_PORTAL_ID = 'TKIT_PORTAL_ID',\n TKIT_SUPPORTED_LANGUAGES = 'TKIT_SUPPORTED_LANGUAGES',\n TKIT_SEARCH_BASE_URL = 'TKIT_SEARCH_BASE_URL',\n APP_BASE_HREF = 'APP_BASE_HREF',\n KEYCLOAK_REALM = 'KEYCLOAK_REALM',\n KEYCLOAK_ENABLE_SILENT_SSO = 'KEYCLOAK_ENABLE_SILENT_SSO',\n KEYCLOAK_URL = 'KEYCLOAK_URL',\n KEYCLOAK_CLIENT_ID = 'KEYCLOAK_CLIENT_ID',\n ONECX_PORTAL_FAVORITES_DISABLED = 'ONECX_PORTAL_FAVORITES_DISABLED',\n ONECX_PORTAL_FEEDBACK_DISABLED = 'ONECX_PORTAL_FEEDBACK_DISABLED',\n ONECX_PORTAL_SEARCH_DISABLED = 'ONECX_PORTAL_SEARCH_DISABLED',\n ONECX_PORTAL_SUPPORT_TICKET_DISABLED = 'ONECX_PORTAL_SUPPORT_TICKET_DISABLED',\n ONECX_PORTAL_ANNOUNCEMENTS_DISABLED = 'ONECX_PORTAL_ANNOUNCEMENTS_DISABLED',\n ONECX_PORTAL_PASSWORD_CHANGE_DISABLED = 'ONECX_PORTAL_PASSWORD_CHANGE_DISABLED',\n ONECX_PORTAL_SETTINGS_DISABLED = 'ONECX_PORTAL_SETTINGS_DISABLED',\n ONECX_PORTAL_MY_ROLES_PERMISSIONS_DISABLED = 'ONECX_PORTAL_MY_ROLES_PERMISSIONS_DISABLED',\n ONECX_PORTAL_HELP_DISABLED = 'ONECX_PORTAL_HELP_DISABLED',\n APP_VERSION = 'APP_VERSION',\n IS_SHELL = 'IS_SHELL',\n}\n","import { HttpClient } from '@angular/common/http'\nimport { Inject, Injectable, OnDestroy, Optional } from '@angular/core'\nimport { firstValueFrom } from 'rxjs'\nimport { Config, ConfigurationTopic } from '@onecx/integration-interface'\nimport { APP_CONFIG } from '../api/injection-tokens'\nimport { CONFIG_KEY } from '../model/config-key.model'\n\n@Injectable({ providedIn: 'root' })\nexport class ConfigurationService implements OnDestroy {\n config$ = new ConfigurationTopic()\n\n constructor(\n private http: HttpClient,\n @Optional() @Inject(APP_CONFIG) private defaultConfig?: { [key: string]: string }\n ) {}\n\n ngOnDestroy(): void {\n this.config$.destroy()\n }\n\n public init(): Promise<boolean> {\n return new Promise((resolve, reject) => {\n const skipRemoteConfigLoad = this.defaultConfig && this.defaultConfig['skipRemoteConfigLoad']\n let loadConfigPromise: Promise<Config>\n\n const inlinedConfig = (window as typeof window & { APP_CONFIG: Config })['APP_CONFIG']\n if (inlinedConfig) {\n console.log(`ENV resolved from injected config`)\n loadConfigPromise = Promise.resolve(inlinedConfig)\n } else {\n if (skipRemoteConfigLoad) {\n console.log(\n '📢 TKA001: Remote config load is disabled. To enable it, remove the \"skipRemoteConfigLoad\" key in your environment.json'\n )\n loadConfigPromise = Promise.resolve(this.defaultConfig || {})\n } else {\n loadConfigPromise = firstValueFrom(\n this.http.get<Config>((this.defaultConfig && this.defaultConfig['remoteConfigURL']) || 'assets/env.json')\n )\n }\n }\n\n loadConfigPromise\n .then(async (config) => {\n if (config) {\n await this.config$.publish({ ...this.defaultConfig, ...config }).then(() => {\n resolve(true)\n })\n }\n })\n .catch((e) => {\n console.log(`Failed to load env configuration`)\n reject(e)\n })\n })\n }\n\n get isInitialized(): Promise<void> {\n return this.config$.isInitialized\n }\n\n public getProperty(key: CONFIG_KEY): string | undefined {\n if (!Object.values(CONFIG_KEY).includes(key)) {\n console.error('Invalid config key ', key)\n }\n return this.config$.getValue()?.[key]\n }\n\n public async setProperty(key: string, val: string) {\n await this.config$.publish({ key, val })\n }\n\n public getConfig(): Config | undefined {\n return this.config$.getValue()\n }\n}\n","export const API_PREFIX = 'portal-api'\n\nexport const DEFAULT_LANG = 'en'\n","import { Injectable, OnDestroy } from '@angular/core'\nimport { BehaviorSubject, map } from 'rxjs'\nimport { UserProfile, UserProfileTopic } from '@onecx/integration-interface'\nimport { DEFAULT_LANG } from '../api/constants'\n\n@Injectable({ providedIn: 'root' })\nexport class UserService implements OnDestroy {\n profile$ = new UserProfileTopic()\n permissions$ = new BehaviorSubject<string[]>([])\n lang$ = new BehaviorSubject(this.determineLanguage() ?? DEFAULT_LANG)\n\n constructor() {\n this.profile$\n .pipe(\n map(\n (profile) =>\n profile.accountSettings?.localeAndTimeSettings?.locale ?? this.determineLanguage() ?? DEFAULT_LANG\n )\n )\n .subscribe(this.lang$)\n\n this.profile$.pipe(map((profile) => this.extractPermissions(profile))).subscribe(this.permissions$)\n }\n\n ngOnDestroy(): void {\n this.profile$.destroy()\n }\n\n hasPermission(permissionKey: string): boolean {\n const result = this.permissions$.getValue() ? this.permissions$.getValue()?.includes(permissionKey) : false\n if (!result) {\n console.log(`👮‍♀️ No permission for: ${permissionKey}`)\n }\n return !!result\n }\n\n private determineLanguage(): string | undefined {\n if (typeof window === 'undefined' || typeof window.navigator === 'undefined') {\n return undefined\n }\n\n let browserLang: any = window.navigator.languages ? window.navigator.languages[0] : null\n browserLang = browserLang || window.navigator.language\n\n if (typeof browserLang === 'undefined') {\n return undefined\n }\n\n if (browserLang.indexOf('-') !== -1) {\n browserLang = browserLang.split('-')[0]\n }\n\n if (browserLang.indexOf('_') !== -1) {\n browserLang = browserLang.split('_')[0]\n }\n\n return browserLang\n }\n\n private extractPermissions(userProfile: UserProfile) {\n const permissions: string[] = []\n if (userProfile) {\n if (userProfile.memberships) {\n userProfile.memberships.forEach((m) => {\n m.roleMemberships?.forEach((r) => {\n r.permissions?.forEach((p) => {\n if (p) {\n if (p.key !== undefined) {\n permissions.push(p.key)\n }\n }\n })\n })\n })\n }\n }\n return permissions\n }\n}\n","import { Injectable } from '@angular/core'\nimport { TranslateService } from '@ngx-translate/core'\nimport { combineLatest, of } from 'rxjs'\nimport { MessageTopic } from '@onecx/integration-interface'\n\nexport type Message = {\n summaryKey?: string\n summaryParameters?: object\n detailKey?: string\n detailParameters?: object\n id?: any\n key?: string\n life?: number\n sticky?: boolean\n closable?: boolean\n data?: any\n icon?: string\n contentStyleClass?: string\n styleClass?: string\n}\n\n@Injectable({ providedIn: 'any' })\nexport class PortalMessageService {\n constructor(private translateService: TranslateService) {}\n\n message$ = new MessageTopic()\n\n success(msg: Message) {\n this.addTranslated('success', msg)\n }\n\n info(msg: Message) {\n this.addTranslated('info', msg)\n }\n\n error(msg: Message) {\n this.addTranslated('error', msg)\n }\n\n warning(msg: Message) {\n this.addTranslated('warning', msg)\n }\n\n private addTranslated(severity: string, msg: Message) {\n combineLatest([\n msg.summaryKey ? this.translateService.get(msg.summaryKey || '', msg.summaryParameters) : of(undefined),\n msg.detailKey ? this.translateService.get(msg.detailKey, msg.detailParameters) : of(undefined),\n ]).subscribe(([summaryTranslation, detailTranslation]: string[]) => {\n this.message$.publish({\n ...msg,\n severity: severity,\n summary: summaryTranslation,\n detail: detailTranslation,\n })\n })\n }\n}\n","import { HttpClient } from '@angular/common/http'\nimport { Injectable, OnDestroy } from '@angular/core'\nimport { from, map, mergeMap } from 'rxjs'\nimport { CurrentThemeTopic, Theme } from '@onecx/integration-interface'\nimport { ConfigurationService } from './configuration.service'\nimport { CONFIG_KEY } from '../model/config-key.model'\n\nconst defaultThemeServerUrl = 'http://portal-theme-management:8080'\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeService implements OnDestroy {\n baseUrlV1 = './portal-api'\n currentTheme$ = new CurrentThemeTopic()\n\n constructor(private configService: ConfigurationService, private http: HttpClient) {}\n\n getThemeHref(themeId: string): string {\n const themeServerUrl =\n this.configService.getProperty(CONFIG_KEY.TKIT_PORTAL_THEME_SERVER_URL) || defaultThemeServerUrl\n return `${themeServerUrl}/themes/${themeId}/${themeId}.min.css`\n }\n\n public loadAndApplyTheme(themeName: string) {\n return this.http.get<Theme>(`${this.baseUrlV1}/internal/themes/${encodeURI(themeName)}`).pipe(\n mergeMap((theme) => {\n return from(this.apply(theme)).pipe(map(() => theme))\n })\n )\n }\n\n public async apply(theme: Theme): Promise<void> {\n console.log(`🎨 Applying theme: ${theme.name}`)\n await this.currentTheme$.publish(theme)\n if (theme.properties) {\n Object.values(theme.properties).forEach((group) => {\n for (const [key, value] of Object.entries(group)) {\n document.documentElement.style.setProperty(`--${key}`, value)\n }\n })\n }\n }\n\n ngOnDestroy(): void {\n this.currentTheme$.destroy()\n }\n}\n","// services\nexport * from './lib/services/app-state.service'\nexport * from './lib/services/configuration.service'\nexport * from './lib/services/user.service'\nexport * from './lib/services/portal-message.service'\nexport * from './lib/services/theme.service'\n\n// models\nexport * from './lib/model/config-key.model'\n\n// core\nexport * from './lib/api/iauth.service'\nexport * from './lib/api/injection-tokens'\n\n// utils\n\nexport { MfeInfo, Theme } from '@onecx/integration-interface'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i1.ConfigurationService","i2"],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ export * from './lib/services/app-state.service';
2
+ export * from './lib/services/configuration.service';
3
+ export * from './lib/services/user.service';
4
+ export * from './lib/services/portal-message.service';
5
+ export * from './lib/services/theme.service';
6
+ export * from './lib/model/config-key.model';
7
+ export * from './lib/api/iauth.service';
8
+ export * from './lib/api/injection-tokens';
9
+ export { MfeInfo, Theme } from '@onecx/integration-interface';
@@ -0,0 +1,2 @@
1
+ export declare const API_PREFIX = "portal-api";
2
+ export declare const DEFAULT_LANG = "en";
@@ -0,0 +1,14 @@
1
+ export interface IAuthService {
2
+ logout(): void;
3
+ /**
4
+ * Unique name of this auth provider: e.g. mockAuthProvider, KeycloakProvider..
5
+ */
6
+ getAuthProviderName(): string;
7
+ /**
8
+ * Initialization method of the Auth service. Once resolved, all user data MUST be available.
9
+ */
10
+ init(): Promise<boolean>;
11
+ getIdToken(): string | null;
12
+ hasRole(_role: string): boolean;
13
+ getUserRoles(): string[];
14
+ }
@@ -0,0 +1,18 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { IAuthService } from './iauth.service';
3
+ export interface LibConfig {
4
+ appId: string;
5
+ portalId: string;
6
+ /**
7
+ * If true, the tkit-module will not try to load remote env values from server(GET /assets/env.json)
8
+ */
9
+ skipRemoteConfigLoad: boolean;
10
+ /**
11
+ * URL from which the remote config will be loaded, default: '/assets/env.json'
12
+ */
13
+ remoteConfigURL: string;
14
+ }
15
+ export declare const APP_CONFIG: InjectionToken<LibConfig>;
16
+ export declare const AUTH_SERVICE: InjectionToken<IAuthService>;
17
+ export declare const SANITY_CHECK: InjectionToken<string>;
18
+ export declare const APPLICATION_NAME: InjectionToken<string>;
@@ -0,0 +1,25 @@
1
+ export declare enum CONFIG_KEY {
2
+ TKIT_PORTAL_DEFAULT_THEME = "TKIT_PORTAL_DEFAULT_THEME",
3
+ TKIT_PORTAL_DISABLE_THEME_MANAGEMENT = "TKIT_PORTAL_DISABLE_THEME_MANAGEMENT",
4
+ TKIT_PORTAL_THEME_SERVER_URL = "TKIT_PORTAL_THEME_SERVER_URL",
5
+ TKIT_TOKEN_ROLE_CLAIM_NAME = "TKIT_TOKEN_ROLE_CLAIM_NAME",
6
+ TKIT_PORTAL_ID = "TKIT_PORTAL_ID",
7
+ TKIT_SUPPORTED_LANGUAGES = "TKIT_SUPPORTED_LANGUAGES",
8
+ TKIT_SEARCH_BASE_URL = "TKIT_SEARCH_BASE_URL",
9
+ APP_BASE_HREF = "APP_BASE_HREF",
10
+ KEYCLOAK_REALM = "KEYCLOAK_REALM",
11
+ KEYCLOAK_ENABLE_SILENT_SSO = "KEYCLOAK_ENABLE_SILENT_SSO",
12
+ KEYCLOAK_URL = "KEYCLOAK_URL",
13
+ KEYCLOAK_CLIENT_ID = "KEYCLOAK_CLIENT_ID",
14
+ ONECX_PORTAL_FAVORITES_DISABLED = "ONECX_PORTAL_FAVORITES_DISABLED",
15
+ ONECX_PORTAL_FEEDBACK_DISABLED = "ONECX_PORTAL_FEEDBACK_DISABLED",
16
+ ONECX_PORTAL_SEARCH_DISABLED = "ONECX_PORTAL_SEARCH_DISABLED",
17
+ ONECX_PORTAL_SUPPORT_TICKET_DISABLED = "ONECX_PORTAL_SUPPORT_TICKET_DISABLED",
18
+ ONECX_PORTAL_ANNOUNCEMENTS_DISABLED = "ONECX_PORTAL_ANNOUNCEMENTS_DISABLED",
19
+ ONECX_PORTAL_PASSWORD_CHANGE_DISABLED = "ONECX_PORTAL_PASSWORD_CHANGE_DISABLED",
20
+ ONECX_PORTAL_SETTINGS_DISABLED = "ONECX_PORTAL_SETTINGS_DISABLED",
21
+ ONECX_PORTAL_MY_ROLES_PERMISSIONS_DISABLED = "ONECX_PORTAL_MY_ROLES_PERMISSIONS_DISABLED",
22
+ ONECX_PORTAL_HELP_DISABLED = "ONECX_PORTAL_HELP_DISABLED",
23
+ APP_VERSION = "APP_VERSION",
24
+ IS_SHELL = "IS_SHELL"
25
+ }
@@ -0,0 +1,21 @@
1
+ import { OnDestroy } from '@angular/core';
2
+ import { GlobalErrorTopic, GlobalLoadingTopic, CurrentMfeTopic, CurrentPageTopic, CurrentPortalTopic, IsAuthenticatedTopic } from '@onecx/integration-interface';
3
+ import * as i0 from "@angular/core";
4
+ export declare class AppStateService implements OnDestroy {
5
+ globalError$: GlobalErrorTopic;
6
+ globalLoading$: GlobalLoadingTopic;
7
+ currentMfe$: CurrentMfeTopic;
8
+ /**
9
+ * This topic will only fire when pageInfo.path matches document.location.pathname,
10
+ * if not it will fire undefined.
11
+ */
12
+ currentPage$: CurrentPageTopic;
13
+ currentPortal$: CurrentPortalTopic;
14
+ /**
15
+ * This Topic is initialized as soon as the authentication is done
16
+ */
17
+ isAuthenticated$: IsAuthenticatedTopic;
18
+ ngOnDestroy(): void;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppStateService, never>;
20
+ static ɵprov: i0.ɵɵInjectableDeclaration<AppStateService>;
21
+ }
@@ -0,0 +1,21 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { OnDestroy } from '@angular/core';
3
+ import { Config, ConfigurationTopic } from '@onecx/integration-interface';
4
+ import { CONFIG_KEY } from '../model/config-key.model';
5
+ import * as i0 from "@angular/core";
6
+ export declare class ConfigurationService implements OnDestroy {
7
+ private http;
8
+ private defaultConfig?;
9
+ config$: ConfigurationTopic;
10
+ constructor(http: HttpClient, defaultConfig?: {
11
+ [key: string]: string;
12
+ } | undefined);
13
+ ngOnDestroy(): void;
14
+ init(): Promise<boolean>;
15
+ get isInitialized(): Promise<void>;
16
+ getProperty(key: CONFIG_KEY): string | undefined;
17
+ setProperty(key: string, val: string): Promise<void>;
18
+ getConfig(): Config | undefined;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<ConfigurationService, [null, { optional: true; }]>;
20
+ static ɵprov: i0.ɵɵInjectableDeclaration<ConfigurationService>;
21
+ }
@@ -0,0 +1,30 @@
1
+ import { TranslateService } from '@ngx-translate/core';
2
+ import { MessageTopic } from '@onecx/integration-interface';
3
+ import * as i0 from "@angular/core";
4
+ export type Message = {
5
+ summaryKey?: string;
6
+ summaryParameters?: object;
7
+ detailKey?: string;
8
+ detailParameters?: object;
9
+ id?: any;
10
+ key?: string;
11
+ life?: number;
12
+ sticky?: boolean;
13
+ closable?: boolean;
14
+ data?: any;
15
+ icon?: string;
16
+ contentStyleClass?: string;
17
+ styleClass?: string;
18
+ };
19
+ export declare class PortalMessageService {
20
+ private translateService;
21
+ constructor(translateService: TranslateService);
22
+ message$: MessageTopic;
23
+ success(msg: Message): void;
24
+ info(msg: Message): void;
25
+ error(msg: Message): void;
26
+ warning(msg: Message): void;
27
+ private addTranslated;
28
+ static ɵfac: i0.ɵɵFactoryDeclaration<PortalMessageService, never>;
29
+ static ɵprov: i0.ɵɵInjectableDeclaration<PortalMessageService>;
30
+ }
@@ -0,0 +1,18 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { OnDestroy } from '@angular/core';
3
+ import { CurrentThemeTopic, Theme } from '@onecx/integration-interface';
4
+ import { ConfigurationService } from './configuration.service';
5
+ import * as i0 from "@angular/core";
6
+ export declare class ThemeService implements OnDestroy {
7
+ private configService;
8
+ private http;
9
+ baseUrlV1: string;
10
+ currentTheme$: CurrentThemeTopic;
11
+ constructor(configService: ConfigurationService, http: HttpClient);
12
+ getThemeHref(themeId: string): string;
13
+ loadAndApplyTheme(themeName: string): import("rxjs").Observable<Theme>;
14
+ apply(theme: Theme): Promise<void>;
15
+ ngOnDestroy(): void;
16
+ static ɵfac: i0.ɵɵFactoryDeclaration<ThemeService, never>;
17
+ static ɵprov: i0.ɵɵInjectableDeclaration<ThemeService>;
18
+ }
@@ -0,0 +1,16 @@
1
+ import { OnDestroy } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import { UserProfileTopic } from '@onecx/integration-interface';
4
+ import * as i0 from "@angular/core";
5
+ export declare class UserService implements OnDestroy {
6
+ profile$: UserProfileTopic;
7
+ permissions$: BehaviorSubject<string[]>;
8
+ lang$: BehaviorSubject<string>;
9
+ constructor();
10
+ ngOnDestroy(): void;
11
+ hasPermission(permissionKey: string): boolean;
12
+ private determineLanguage;
13
+ private extractPermissions;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<UserService, never>;
15
+ static ɵprov: i0.ɵɵInjectableDeclaration<UserService>;
16
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onecx/angular-integration-interface",
3
- "version": "4.13.1",
3
+ "version": "4.13.2",
4
4
  "peerDependencies": {
5
5
  "@angular/core": "^15.2.7",
6
6
  "@onecx/integration-interface": "~4",