@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.
- package/esm2020/index.mjs +12 -0
- package/esm2020/lib/api/constants.mjs +3 -0
- package/esm2020/lib/api/iauth.service.mjs +2 -0
- package/esm2020/lib/api/injection-tokens.mjs +6 -0
- package/esm2020/lib/model/config-key.model.mjs +27 -0
- package/esm2020/lib/services/app-state.service.mjs +35 -0
- package/esm2020/lib/services/configuration.service.mjs +77 -0
- package/esm2020/lib/services/portal-message.service.mjs +44 -0
- package/esm2020/lib/services/theme.service.mjs +48 -0
- package/esm2020/lib/services/user.service.mjs +69 -0
- package/esm2020/onecx-angular-integration-interface.mjs +5 -0
- package/fesm2020/onecx-angular-integration-interface.mjs +292 -0
- package/fesm2020/onecx-angular-integration-interface.mjs.map +1 -0
- package/index.d.ts +9 -0
- package/lib/api/constants.d.ts +2 -0
- package/lib/api/iauth.service.d.ts +14 -0
- package/lib/api/injection-tokens.d.ts +18 -0
- package/lib/model/config-key.model.d.ts +25 -0
- package/lib/services/app-state.service.d.ts +21 -0
- package/lib/services/configuration.service.d.ts +21 -0
- package/lib/services/portal-message.service.d.ts +30 -0
- package/lib/services/theme.service.d.ts +18 -0
- package/lib/services/user.service.d.ts +16 -0
- package/package.json +1 -1
@@ -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,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
|
+
}
|