@odx/angular 5.0.0 → 5.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -1
- package/components/error-page/lib/error-page.config.d.ts +3 -3
- package/esm2022/components/error-page/lib/error-page.component.mjs +3 -3
- package/esm2022/components/error-page/lib/error-page.config.mjs +1 -1
- package/esm2022/localization/lib/localization.service.mjs +13 -3
- package/esm2022/localization/lib/models/language-loader-fn.mjs +1 -1
- package/fesm2022/odx-angular-components-error-page.mjs +2 -2
- package/fesm2022/odx-angular-components-error-page.mjs.map +1 -1
- package/fesm2022/odx-angular-localization.mjs +12 -2
- package/fesm2022/odx-angular-localization.mjs.map +1 -1
- package/localization/lib/localization.service.d.ts +3 -1
- package/localization/lib/models/language-loader-fn.d.ts +2 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
# @odx/angular
|
|
2
|
+
|
|
3
|
+
## 5.0.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 280c07a: Prevent language loader implementation from splitting the returned language string
|
|
8
|
+
- 92d7075: dynamic content for all error page text inputs
|
|
9
|
+
|
|
10
|
+
## 5.0.1
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- 305fc0e: fix changelog formatting
|
|
2
15
|
|
|
3
16
|
## 5.0.0
|
|
4
17
|
|
|
@@ -16,6 +29,8 @@
|
|
|
16
29
|
|
|
17
30
|
Add internal `Logger` class to improve debug output
|
|
18
31
|
|
|
32
|
+
## 4.1.0
|
|
33
|
+
|
|
19
34
|
### Minor Changes
|
|
20
35
|
|
|
21
36
|
- 909ed1a: new error page component
|
|
@@ -4,13 +4,13 @@ import { ConfigDependencies, ConfigProvider } from '@odx/angular/utils';
|
|
|
4
4
|
export interface ErrorPageConfig {
|
|
5
5
|
icon?: string;
|
|
6
6
|
iconSet?: string;
|
|
7
|
-
title:
|
|
7
|
+
title: DynamicContent;
|
|
8
8
|
description?: DynamicContent;
|
|
9
9
|
actions: {
|
|
10
|
-
label:
|
|
10
|
+
label: DynamicContent;
|
|
11
11
|
action: () => void;
|
|
12
12
|
}[];
|
|
13
|
-
errorMessage?:
|
|
13
|
+
errorMessage?: DynamicContent;
|
|
14
14
|
}
|
|
15
15
|
export declare const ErrorPageConfig: import("@angular/core").InjectionToken<Partial<ErrorPageConfig>>, ErrorPageDefaultConfig: ErrorPageConfig, injectErrorPageConfig: () => ErrorPageConfig, provideErrorPageConfig: <D extends ConfigDependencies<unknown> = ConfigDependencies<Partial<ErrorPageConfig>>>(config: ConfigProvider<Partial<ErrorPageConfig>, D>) => import("@angular/core").FactoryProvider | import("@angular/core").ValueProvider;
|
|
16
16
|
export declare function configureErrorPage<D extends ConfigDependencies>(config: ConfigProvider<Partial<ErrorPageConfig>, D>): EnvironmentProviders;
|
|
@@ -16,13 +16,13 @@ export let ErrorPageComponent = class ErrorPageComponent {
|
|
|
16
16
|
this.options = injectErrorPageConfig();
|
|
17
17
|
}
|
|
18
18
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ErrorPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
19
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ErrorPageComponent, isStandalone: true, selector: "odx-error-page", ngImport: i0, template: "<div class=\"odx-error-page__container\">\n <div class=\"odx-error-page__icon-container\">\n <odx-icon *ngIf=\"options.icon as icon; else logo\" size=\"xlarge\" [name]=\"icon\"></odx-icon>\n <ng-template #logo><odx-logo size=\"large\"></odx-logo></ng-template>\n </div>\n <div class=\"odx-error-page__title\"
|
|
19
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ErrorPageComponent, isStandalone: true, selector: "odx-error-page", ngImport: i0, template: "<div class=\"odx-error-page__container\">\n <div class=\"odx-error-page__icon-container\">\n <odx-icon *ngIf=\"options.icon as icon; else logo\" size=\"xlarge\" [name]=\"icon\"></odx-icon>\n <ng-template #logo><odx-logo size=\"large\"></odx-logo></ng-template>\n </div>\n <div class=\"odx-error-page__title\">\n <ng-template [odxDynamicView]=\"options.title\"></ng-template>\n </div>\n <div *ngIf=\"options.description as description\" class=\"odx-error-page__description\">\n <ng-template [odxDynamicView]=\"description\"></ng-template>\n </div>\n <div class=\"odx-error-page__actions\">\n <button *ngFor=\"let button of options.actions; let isFirst = first\" [variant]=\"isFirst ? 'primary' : 'secondary'\" odxButton (click)=\"button.action()\">\n <ng-template [odxDynamicView]=\"button.label\"></ng-template>\n </button>\n </div>\n</div>\n<div *ngIf=\"options.errorMessage as errorMessage\" class=\"odx-error-page__footer\">\n <ng-template [odxDynamicView]=\"errorMessage\"></ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: LogoDirective, selector: "odx-logo", inputs: ["size", "variant"] }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet"] }, { kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "directive", type: DynamicViewDirective, selector: "ng-template[odxDynamicView]", inputs: ["odxDynamicView", "odxDynamicViewInjector", "odxDynamicViewContext"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
20
20
|
};
|
|
21
21
|
ErrorPageComponent = __decorate([
|
|
22
22
|
CSSComponent('error-page')
|
|
23
23
|
], ErrorPageComponent);
|
|
24
24
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ErrorPageComponent, decorators: [{
|
|
25
25
|
type: Component,
|
|
26
|
-
args: [{ standalone: true, selector: 'odx-error-page', imports: [LogoDirective, IconComponent, CoreModule, ButtonComponent, DynamicViewDirective], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"odx-error-page__container\">\n <div class=\"odx-error-page__icon-container\">\n <odx-icon *ngIf=\"options.icon as icon; else logo\" size=\"xlarge\" [name]=\"icon\"></odx-icon>\n <ng-template #logo><odx-logo size=\"large\"></odx-logo></ng-template>\n </div>\n <div class=\"odx-error-page__title\"
|
|
26
|
+
args: [{ standalone: true, selector: 'odx-error-page', imports: [LogoDirective, IconComponent, CoreModule, ButtonComponent, DynamicViewDirective], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"odx-error-page__container\">\n <div class=\"odx-error-page__icon-container\">\n <odx-icon *ngIf=\"options.icon as icon; else logo\" size=\"xlarge\" [name]=\"icon\"></odx-icon>\n <ng-template #logo><odx-logo size=\"large\"></odx-logo></ng-template>\n </div>\n <div class=\"odx-error-page__title\">\n <ng-template [odxDynamicView]=\"options.title\"></ng-template>\n </div>\n <div *ngIf=\"options.description as description\" class=\"odx-error-page__description\">\n <ng-template [odxDynamicView]=\"description\"></ng-template>\n </div>\n <div class=\"odx-error-page__actions\">\n <button *ngFor=\"let button of options.actions; let isFirst = first\" [variant]=\"isFirst ? 'primary' : 'secondary'\" odxButton (click)=\"button.action()\">\n <ng-template [odxDynamicView]=\"button.label\"></ng-template>\n </button>\n </div>\n</div>\n<div *ngIf=\"options.errorMessage as errorMessage\" class=\"odx-error-page__footer\">\n <ng-template [odxDynamicView]=\"errorMessage\"></ng-template>\n</div>\n" }]
|
|
27
27
|
}] });
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItcGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9lcnJvci1wYWdlL3NyYy9saWIvZXJyb3ItcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9lcnJvci1wYWdlL3NyYy9saWIvZXJyb3ItcGFnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQVdyRCxXQUFNLGtCQUFrQixHQUF4QixNQUFNLGtCQUFrQjtJQUF4QjtRQUNXLFlBQU8sR0FBRyxhQUFhLEVBQUUsQ0FBQztRQUNuQyxZQUFPLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztLQUMxQzsrR0FIWSxrQkFBa0I7bUdBQWxCLGtCQUFrQiwwRUNuQi9CLDJnQ0FvQkEsNENETFksYUFBYSxrRkFBRSxhQUFhLG1HQUFFLFVBQVUsZ1FBQUUsZUFBZSx5R0FBRSxvQkFBb0I7O0FBSTlFLGtCQUFrQjtJQVQ5QixZQUFZLENBQUMsWUFBWSxDQUFDO0dBU2Qsa0JBQWtCLENBRzlCOzRGQUhZLGtCQUFrQjtrQkFSOUIsU0FBUztpQ0FDSSxJQUFJLFlBQ04sZ0JBQWdCLFdBRWpCLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixDQUFDLG1CQUN6RSx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvcmVNb2R1bGUgfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgRHluYW1pY1ZpZXdEaXJlY3RpdmUgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY2RrL2R5bmFtaWMtdmlldyc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2ljb24nO1xuaW1wb3J0IHsgTG9nb0RpcmVjdGl2ZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2xvZ28nO1xuaW1wb3J0IHsgQ1NTQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IGluamVjdEVsZW1lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgaW5qZWN0RXJyb3JQYWdlQ29uZmlnIH0gZnJvbSAnLi9lcnJvci1wYWdlLmNvbmZpZyc7XG5cbkBDU1NDb21wb25lbnQoJ2Vycm9yLXBhZ2UnKVxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnb2R4LWVycm9yLXBhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vZXJyb3ItcGFnZS5jb21wb25lbnQuaHRtbCcsXG4gIGltcG9ydHM6IFtMb2dvRGlyZWN0aXZlLCBJY29uQ29tcG9uZW50LCBDb3JlTW9kdWxlLCBCdXR0b25Db21wb25lbnQsIER5bmFtaWNWaWV3RGlyZWN0aXZlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEVycm9yUGFnZUNvbXBvbmVudCB7XG4gIHB1YmxpYyByZWFkb25seSBlbGVtZW50ID0gaW5qZWN0RWxlbWVudCgpO1xuICBwdWJsaWMgb3B0aW9ucyA9IGluamVjdEVycm9yUGFnZUNvbmZpZygpO1xufVxuIiwiPGRpdiBjbGFzcz1cIm9keC1lcnJvci1wYWdlX19jb250YWluZXJcIj5cbiAgPGRpdiBjbGFzcz1cIm9keC1lcnJvci1wYWdlX19pY29uLWNvbnRhaW5lclwiPlxuICAgIDxvZHgtaWNvbiAqbmdJZj1cIm9wdGlvbnMuaWNvbiBhcyBpY29uOyBlbHNlIGxvZ29cIiBzaXplPVwieGxhcmdlXCIgW25hbWVdPVwiaWNvblwiPjwvb2R4LWljb24+XG4gICAgPG5nLXRlbXBsYXRlICNsb2dvPjxvZHgtbG9nbyBzaXplPVwibGFyZ2VcIj48L29keC1sb2dvPjwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwib2R4LWVycm9yLXBhZ2VfX3RpdGxlXCI+XG4gICAgPG5nLXRlbXBsYXRlIFtvZHhEeW5hbWljVmlld109XCJvcHRpb25zLnRpdGxlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJvcHRpb25zLmRlc2NyaXB0aW9uIGFzIGRlc2NyaXB0aW9uXCIgY2xhc3M9XCJvZHgtZXJyb3ItcGFnZV9fZGVzY3JpcHRpb25cIj5cbiAgICA8bmctdGVtcGxhdGUgW29keER5bmFtaWNWaWV3XT1cImRlc2NyaXB0aW9uXCI+PC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJvZHgtZXJyb3ItcGFnZV9fYWN0aW9uc1wiPlxuICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBvcHRpb25zLmFjdGlvbnM7IGxldCBpc0ZpcnN0ID0gZmlyc3RcIiBbdmFyaWFudF09XCJpc0ZpcnN0ID8gJ3ByaW1hcnknIDogJ3NlY29uZGFyeSdcIiBvZHhCdXR0b24gKGNsaWNrKT1cImJ1dHRvbi5hY3Rpb24oKVwiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtvZHhEeW5hbWljVmlld109XCJidXR0b24ubGFiZWxcIj48L25nLXRlbXBsYXRlPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cIm9wdGlvbnMuZXJyb3JNZXNzYWdlIGFzIGVycm9yTWVzc2FnZVwiIGNsYXNzPVwib2R4LWVycm9yLXBhZ2VfX2Zvb3RlclwiPlxuICA8bmctdGVtcGxhdGUgW29keER5bmFtaWNWaWV3XT1cImVycm9yTWVzc2FnZVwiPjwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -7,4 +7,4 @@ export const { ErrorPageConfig, ErrorPageDefaultConfig, injectErrorPageConfig, p
|
|
|
7
7
|
export function configureErrorPage(config) {
|
|
8
8
|
return makeEnvironmentProviders([provideErrorPageConfig(config)]);
|
|
9
9
|
}
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItcGFnZS5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9lcnJvci1wYWdlL3NyYy9saWIvZXJyb3ItcGFnZS5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF3Qix3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBQXNDLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFlNUYsTUFBTSxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsc0JBQXNCLEVBQUUscUJBQXFCLEVBQUUsc0JBQXNCLEVBQUUsR0FBRyxrQkFBa0IsQ0FDMUgsV0FBVyxFQUNYLDRCQUE0QixFQUM1QjtJQUNFLEtBQUssRUFBRSxFQUFFO0lBQ1QsT0FBTyxFQUFFLEVBQUU7Q0FDTyxDQUNyQixDQUFDO0FBRUYsTUFBTSxVQUFVLGtCQUFrQixDQUErQixNQUFtRDtJQUNsSCxPQUFPLHdCQUF3QixDQUFDLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpcm9ubWVudFByb3ZpZGVycywgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEeW5hbWljQ29udGVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jZGsvZHluYW1pYy12aWV3JztcbmltcG9ydCB7IENvbmZpZ0RlcGVuZGVuY2llcywgQ29uZmlnUHJvdmlkZXIsIGNyZWF0ZUNvbmZpZ1Rva2VucyB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JQYWdlQ29uZmlnIHtcbiAgaWNvbj86IHN0cmluZztcbiAgaWNvblNldD86IHN0cmluZztcbiAgdGl0bGU6IER5bmFtaWNDb250ZW50O1xuICBkZXNjcmlwdGlvbj86IER5bmFtaWNDb250ZW50O1xuICBhY3Rpb25zOiB7XG4gICAgbGFiZWw6IER5bmFtaWNDb250ZW50O1xuICAgIGFjdGlvbjogKCkgPT4gdm9pZDtcbiAgfVtdO1xuXG4gIGVycm9yTWVzc2FnZT86IER5bmFtaWNDb250ZW50O1xufVxuXG5leHBvcnQgY29uc3QgeyBFcnJvclBhZ2VDb25maWcsIEVycm9yUGFnZURlZmF1bHRDb25maWcsIGluamVjdEVycm9yUGFnZUNvbmZpZywgcHJvdmlkZUVycm9yUGFnZUNvbmZpZyB9ID0gY3JlYXRlQ29uZmlnVG9rZW5zKFxuICAnRXJyb3JQYWdlJyxcbiAgJ0BvZHgvY29tcG9uZW50cy9lcnJvci1wYWdlJyxcbiAge1xuICAgIHRpdGxlOiAnJyxcbiAgICBhY3Rpb25zOiBbXSxcbiAgfSBhcyBFcnJvclBhZ2VDb25maWcsXG4pO1xuXG5leHBvcnQgZnVuY3Rpb24gY29uZmlndXJlRXJyb3JQYWdlPEQgZXh0ZW5kcyBDb25maWdEZXBlbmRlbmNpZXM+KGNvbmZpZzogQ29uZmlnUHJvdmlkZXI8UGFydGlhbDxFcnJvclBhZ2VDb25maWc+LCBEPik6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbcHJvdmlkZUVycm9yUGFnZUNvbmZpZyhjb25maWcpXSk7XG59XG4iXX0=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Injectable, Injector, inject, runInInjectionContext } from '@angular/core';
|
|
2
2
|
import { getLanguageCode } from '@odx/angular/utils';
|
|
3
|
-
import { BehaviorSubject, distinctUntilChanged, filter, firstValueFrom, from, shareReplay } from 'rxjs';
|
|
3
|
+
import { BehaviorSubject, distinctUntilChanged, filter, firstValueFrom, from, isObservable, of, shareReplay } from 'rxjs';
|
|
4
4
|
import { injectLocalizationConfig } from './localization.config';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export class LocalizationService {
|
|
@@ -30,11 +30,21 @@ export class LocalizationService {
|
|
|
30
30
|
}
|
|
31
31
|
async loadActiveLanguage() {
|
|
32
32
|
return runInInjectionContext(this.injector, async () => {
|
|
33
|
-
const activeLanguageLoader$ =
|
|
33
|
+
const activeLanguageLoader$ = this.createActiveLanguageLoader$();
|
|
34
34
|
const activeLanguage = await firstValueFrom(activeLanguageLoader$).catch(() => null);
|
|
35
35
|
this.setActiveLanguage(activeLanguage ?? this.defaultLanguage);
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
|
+
createActiveLanguageLoader$() {
|
|
39
|
+
const language = this.localizationConfig.activeLanguageLoader?.();
|
|
40
|
+
if (isObservable(language)) {
|
|
41
|
+
return language;
|
|
42
|
+
}
|
|
43
|
+
if (language instanceof Promise) {
|
|
44
|
+
return from(language);
|
|
45
|
+
}
|
|
46
|
+
return of(language);
|
|
47
|
+
}
|
|
38
48
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
39
49
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizationService, providedIn: 'root' }); }
|
|
40
50
|
}
|
|
@@ -42,4 +52,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
42
52
|
type: Injectable,
|
|
43
53
|
args: [{ providedIn: 'root' }]
|
|
44
54
|
}] });
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvbG9jYWxpemF0aW9uL3NyYy9saWIvbG9jYWxpemF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFjLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RJLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUdqRSxNQUFNLE9BQU8sbUJBQW1CO0lBRGhDO1FBRW1CLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsdUJBQWtCLEdBQUcsd0JBQXdCLEVBQUUsQ0FBQztRQUNoRCx5QkFBb0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMzRSxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBcUIsU0FBUyxDQUFDLENBQUM7UUFFdkUsb0JBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkgsdUJBQWtCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUMzRCxvQkFBZSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQXFDOUQ7SUFuQ1EsaUJBQWlCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDbEUsQ0FBQztJQUVNLGlCQUFpQixDQUFDLFFBQWdCO1FBQ3ZDLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMzQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JDLE9BQU87U0FDUjtRQUNELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN6QyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRU0sS0FBSyxDQUFDLGtCQUFrQjtRQUM3QixPQUFPLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDckQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztZQUNqRSxNQUFNLGNBQWMsR0FBRyxNQUFNLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyRixJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTywyQkFBMkI7UUFDakMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQztRQUNsRSxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMxQixPQUFPLFFBQVEsQ0FBQztTQUNqQjtRQUNELElBQUksUUFBUSxZQUFZLE9BQU8sRUFBRTtZQUMvQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN2QjtRQUNELE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7K0dBNUNVLG1CQUFtQjttSEFBbkIsbUJBQW1CLGNBRE4sTUFBTTs7NEZBQ25CLG1CQUFtQjtrQkFEL0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgaW5qZWN0LCBydW5JbkluamVjdGlvbkNvbnRleHQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldExhbmd1YWdlQ29kZSB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZpcnN0VmFsdWVGcm9tLCBmcm9tLCBpc09ic2VydmFibGUsIG9mLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaW5qZWN0TG9jYWxpemF0aW9uQ29uZmlnIH0gZnJvbSAnLi9sb2NhbGl6YXRpb24uY29uZmlnJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBMb2NhbGl6YXRpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxpemF0aW9uQ29uZmlnID0gaW5qZWN0TG9jYWxpemF0aW9uQ29uZmlnKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXZhaWxhYmxlTGFuZ3VhZ2VTZXQgPSBuZXcgU2V0KHRoaXMubG9jYWxpemF0aW9uQ29uZmlnLmF2YWlsYWJsZUxhbmd1YWdlcyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZlTGFuZ3VhZ2UkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHB1YmxpYyByZWFkb25seSBhY3RpdmVMYW5ndWFnZSQgPSB0aGlzLmFjdGl2ZUxhbmd1YWdlJCQucGlwZShmaWx0ZXIoQm9vbGVhbiksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUgfSkpO1xuICBwdWJsaWMgcmVhZG9ubHkgYXZhaWxhYmxlTGFuZ3VhZ2VzID0gQXJyYXkuZnJvbSh0aGlzLmF2YWlsYWJsZUxhbmd1YWdlU2V0KTtcbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRMYW5ndWFnZSA9IHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzWzBdO1xuXG4gIHB1YmxpYyBnZXRBY3RpdmVMYW5ndWFnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUxhbmd1YWdlJCQuZ2V0VmFsdWUoKSA/PyB0aGlzLmRlZmF1bHRMYW5ndWFnZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRBY3RpdmVMYW5ndWFnZShsYW5ndWFnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VTZXQuaGFzKGxhbmd1YWdlKSkge1xuICAgICAgdGhpcy5hY3RpdmVMYW5ndWFnZSQkLm5leHQobGFuZ3VhZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBsYW5ndWFnZUNvZGUgPSBnZXRMYW5ndWFnZUNvZGUobGFuZ3VhZ2UpO1xuICAgIGlmICh0aGlzLmF2YWlsYWJsZUxhbmd1YWdlU2V0LmhhcyhsYW5ndWFnZUNvZGUpKSB7XG4gICAgICB0aGlzLmFjdGl2ZUxhbmd1YWdlJCQubmV4dChsYW5ndWFnZUNvZGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZUxhbmd1YWdlJCQubmV4dCh0aGlzLmRlZmF1bHRMYW5ndWFnZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9hZEFjdGl2ZUxhbmd1YWdlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYWN0aXZlTGFuZ3VhZ2VMb2FkZXIkID0gdGhpcy5jcmVhdGVBY3RpdmVMYW5ndWFnZUxvYWRlciQoKTtcbiAgICAgIGNvbnN0IGFjdGl2ZUxhbmd1YWdlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oYWN0aXZlTGFuZ3VhZ2VMb2FkZXIkKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgIHRoaXMuc2V0QWN0aXZlTGFuZ3VhZ2UoYWN0aXZlTGFuZ3VhZ2UgPz8gdGhpcy5kZWZhdWx0TGFuZ3VhZ2UpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBY3RpdmVMYW5ndWFnZUxvYWRlciQoKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMubG9jYWxpemF0aW9uQ29uZmlnLmFjdGl2ZUxhbmd1YWdlTG9hZGVyPy4oKTtcbiAgICBpZiAoaXNPYnNlcnZhYmxlKGxhbmd1YWdlKSkge1xuICAgICAgcmV0dXJuIGxhbmd1YWdlO1xuICAgIH1cbiAgICBpZiAobGFuZ3VhZ2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICByZXR1cm4gZnJvbShsYW5ndWFnZSk7XG4gICAgfVxuICAgIHJldHVybiBvZihsYW5ndWFnZSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2UtbG9hZGVyLWZuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2xvY2FsaXphdGlvbi9zcmMvbGliL21vZGVscy9sYW5ndWFnZS1sb2FkZXItZm4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IHR5cGUgTGFuZ3VhZ2VMb2FkZXJGbiA9ICgpID0+IE9ic2VydmFibGU8c3RyaW5nIHwgdW5kZWZpbmVkPiB8IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB8IHN0cmluZyB8IHVuZGVmaW5lZDtcbiJdfQ==
|
|
@@ -24,14 +24,14 @@ let ErrorPageComponent = class ErrorPageComponent {
|
|
|
24
24
|
this.options = injectErrorPageConfig();
|
|
25
25
|
}
|
|
26
26
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ErrorPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ErrorPageComponent, isStandalone: true, selector: "odx-error-page", ngImport: i0, template: "<div class=\"odx-error-page__container\">\n <div class=\"odx-error-page__icon-container\">\n <odx-icon *ngIf=\"options.icon as icon; else logo\" size=\"xlarge\" [name]=\"icon\"></odx-icon>\n <ng-template #logo><odx-logo size=\"large\"></odx-logo></ng-template>\n </div>\n <div class=\"odx-error-page__title\"
|
|
27
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ErrorPageComponent, isStandalone: true, selector: "odx-error-page", ngImport: i0, template: "<div class=\"odx-error-page__container\">\n <div class=\"odx-error-page__icon-container\">\n <odx-icon *ngIf=\"options.icon as icon; else logo\" size=\"xlarge\" [name]=\"icon\"></odx-icon>\n <ng-template #logo><odx-logo size=\"large\"></odx-logo></ng-template>\n </div>\n <div class=\"odx-error-page__title\">\n <ng-template [odxDynamicView]=\"options.title\"></ng-template>\n </div>\n <div *ngIf=\"options.description as description\" class=\"odx-error-page__description\">\n <ng-template [odxDynamicView]=\"description\"></ng-template>\n </div>\n <div class=\"odx-error-page__actions\">\n <button *ngFor=\"let button of options.actions; let isFirst = first\" [variant]=\"isFirst ? 'primary' : 'secondary'\" odxButton (click)=\"button.action()\">\n <ng-template [odxDynamicView]=\"button.label\"></ng-template>\n </button>\n </div>\n</div>\n<div *ngIf=\"options.errorMessage as errorMessage\" class=\"odx-error-page__footer\">\n <ng-template [odxDynamicView]=\"errorMessage\"></ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: LogoDirective, selector: "odx-logo", inputs: ["size", "variant"] }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet"] }, { kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "directive", type: DynamicViewDirective, selector: "ng-template[odxDynamicView]", inputs: ["odxDynamicView", "odxDynamicViewInjector", "odxDynamicViewContext"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
28
28
|
};
|
|
29
29
|
ErrorPageComponent = __decorate([
|
|
30
30
|
CSSComponent('error-page')
|
|
31
31
|
], ErrorPageComponent);
|
|
32
32
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ErrorPageComponent, decorators: [{
|
|
33
33
|
type: Component,
|
|
34
|
-
args: [{ standalone: true, selector: 'odx-error-page', imports: [LogoDirective, IconComponent, CoreModule, ButtonComponent, DynamicViewDirective], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"odx-error-page__container\">\n <div class=\"odx-error-page__icon-container\">\n <odx-icon *ngIf=\"options.icon as icon; else logo\" size=\"xlarge\" [name]=\"icon\"></odx-icon>\n <ng-template #logo><odx-logo size=\"large\"></odx-logo></ng-template>\n </div>\n <div class=\"odx-error-page__title\"
|
|
34
|
+
args: [{ standalone: true, selector: 'odx-error-page', imports: [LogoDirective, IconComponent, CoreModule, ButtonComponent, DynamicViewDirective], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"odx-error-page__container\">\n <div class=\"odx-error-page__icon-container\">\n <odx-icon *ngIf=\"options.icon as icon; else logo\" size=\"xlarge\" [name]=\"icon\"></odx-icon>\n <ng-template #logo><odx-logo size=\"large\"></odx-logo></ng-template>\n </div>\n <div class=\"odx-error-page__title\">\n <ng-template [odxDynamicView]=\"options.title\"></ng-template>\n </div>\n <div *ngIf=\"options.description as description\" class=\"odx-error-page__description\">\n <ng-template [odxDynamicView]=\"description\"></ng-template>\n </div>\n <div class=\"odx-error-page__actions\">\n <button *ngFor=\"let button of options.actions; let isFirst = first\" [variant]=\"isFirst ? 'primary' : 'secondary'\" odxButton (click)=\"button.action()\">\n <ng-template [odxDynamicView]=\"button.label\"></ng-template>\n </button>\n </div>\n</div>\n<div *ngIf=\"options.errorMessage as errorMessage\" class=\"odx-error-page__footer\">\n <ng-template [odxDynamicView]=\"errorMessage\"></ng-template>\n</div>\n" }]
|
|
35
35
|
}] });
|
|
36
36
|
|
|
37
37
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-angular-components-error-page.mjs","sources":["../../../../libs/angular/components/error-page/src/lib/error-page.config.ts","../../../../libs/angular/components/error-page/src/lib/error-page.component.ts","../../../../libs/angular/components/error-page/src/lib/error-page.component.html","../../../../libs/angular/components/error-page/src/odx-angular-components-error-page.ts"],"sourcesContent":["import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { DynamicContent } from '@odx/angular/cdk/dynamic-view';\nimport { ConfigDependencies, ConfigProvider, createConfigTokens } from '@odx/angular/utils';\n\nexport interface ErrorPageConfig {\n icon?: string;\n iconSet?: string;\n title:
|
|
1
|
+
{"version":3,"file":"odx-angular-components-error-page.mjs","sources":["../../../../libs/angular/components/error-page/src/lib/error-page.config.ts","../../../../libs/angular/components/error-page/src/lib/error-page.component.ts","../../../../libs/angular/components/error-page/src/lib/error-page.component.html","../../../../libs/angular/components/error-page/src/odx-angular-components-error-page.ts"],"sourcesContent":["import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { DynamicContent } from '@odx/angular/cdk/dynamic-view';\nimport { ConfigDependencies, ConfigProvider, createConfigTokens } from '@odx/angular/utils';\n\nexport interface ErrorPageConfig {\n icon?: string;\n iconSet?: string;\n title: DynamicContent;\n description?: DynamicContent;\n actions: {\n label: DynamicContent;\n action: () => void;\n }[];\n\n errorMessage?: DynamicContent;\n}\n\nexport const { ErrorPageConfig, ErrorPageDefaultConfig, injectErrorPageConfig, provideErrorPageConfig } = createConfigTokens(\n 'ErrorPage',\n '@odx/components/error-page',\n {\n title: '',\n actions: [],\n } as ErrorPageConfig,\n);\n\nexport function configureErrorPage<D extends ConfigDependencies>(config: ConfigProvider<Partial<ErrorPageConfig>, D>): EnvironmentProviders {\n return makeEnvironmentProviders([provideErrorPageConfig(config)]);\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';\nimport { ButtonComponent } from '@odx/angular/components/button';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { LogoDirective } from '@odx/angular/components/logo';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\nimport { injectErrorPageConfig } from './error-page.config';\n\n@CSSComponent('error-page')\n@Component({\n standalone: true,\n selector: 'odx-error-page',\n templateUrl: './error-page.component.html',\n imports: [LogoDirective, IconComponent, CoreModule, ButtonComponent, DynamicViewDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class ErrorPageComponent {\n public readonly element = injectElement();\n public options = injectErrorPageConfig();\n}\n","<div class=\"odx-error-page__container\">\n <div class=\"odx-error-page__icon-container\">\n <odx-icon *ngIf=\"options.icon as icon; else logo\" size=\"xlarge\" [name]=\"icon\"></odx-icon>\n <ng-template #logo><odx-logo size=\"large\"></odx-logo></ng-template>\n </div>\n <div class=\"odx-error-page__title\">\n <ng-template [odxDynamicView]=\"options.title\"></ng-template>\n </div>\n <div *ngIf=\"options.description as description\" class=\"odx-error-page__description\">\n <ng-template [odxDynamicView]=\"description\"></ng-template>\n </div>\n <div class=\"odx-error-page__actions\">\n <button *ngFor=\"let button of options.actions; let isFirst = first\" [variant]=\"isFirst ? 'primary' : 'secondary'\" odxButton (click)=\"button.action()\">\n <ng-template [odxDynamicView]=\"button.label\"></ng-template>\n </button>\n </div>\n</div>\n<div *ngIf=\"options.errorMessage as errorMessage\" class=\"odx-error-page__footer\">\n <ng-template [odxDynamicView]=\"errorMessage\"></ng-template>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;AAiBa,MAAA,EAAE,eAAe,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,GAAG,kBAAkB,CAC1H,WAAW,EACX,4BAA4B,EAC5B;AACE,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,OAAO,EAAE,EAAE;AACO,CAAA,EACpB;AAEI,SAAU,kBAAkB,CAA+B,MAAmD,EAAA;IAClH,OAAO,wBAAwB,CAAC,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpE;;ACTa,IAAA,kBAAkB,GAAxB,MAAM,kBAAkB,CAAA;AAAxB,IAAA,WAAA,GAAA;QACW,IAAO,CAAA,OAAA,GAAG,aAAa,EAAE,CAAC;QACnC,IAAO,CAAA,OAAA,GAAG,qBAAqB,EAAE,CAAC;AAC1C,KAAA;+GAHY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnB/B,2gCAoBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDLY,aAAa,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,oBAAoB,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,wBAAA,EAAA,uBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;AAI9E,kBAAkB,GAAA,UAAA,CAAA;IAT9B,YAAY,CAAC,YAAY,CAAC;AASd,CAAA,EAAA,kBAAkB,CAG9B,CAAA;4FAHY,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAR9B,SAAS;iCACI,IAAI,EAAA,QAAA,EACN,gBAAgB,EAEjB,OAAA,EAAA,CAAC,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,oBAAoB,CAAC,EACzE,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,2gCAAA,EAAA,CAAA;;;AEjBvC;;AAEG;;;;"}
|
|
@@ -2,7 +2,7 @@ import { provideHttpClient, withInterceptors } from '@angular/common/http';
|
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
3
|
import { makeEnvironmentProviders, APP_INITIALIZER, inject, Injector, runInInjectionContext, Injectable } from '@angular/core';
|
|
4
4
|
import { createConfigTokens, getLanguageCode, matchUrl } from '@odx/angular/utils';
|
|
5
|
-
import { BehaviorSubject, filter, distinctUntilChanged, shareReplay, from,
|
|
5
|
+
import { BehaviorSubject, filter, distinctUntilChanged, shareReplay, firstValueFrom, isObservable, from, of, take, switchMap } from 'rxjs';
|
|
6
6
|
import { WindowRef } from '@odx/angular';
|
|
7
7
|
|
|
8
8
|
const DEFAULT_AVAILABLE_LANGUAGES = ['en', 'de', 'es', 'fr', 'ja'];
|
|
@@ -50,11 +50,21 @@ class LocalizationService {
|
|
|
50
50
|
}
|
|
51
51
|
async loadActiveLanguage() {
|
|
52
52
|
return runInInjectionContext(this.injector, async () => {
|
|
53
|
-
const activeLanguageLoader$ =
|
|
53
|
+
const activeLanguageLoader$ = this.createActiveLanguageLoader$();
|
|
54
54
|
const activeLanguage = await firstValueFrom(activeLanguageLoader$).catch(() => null);
|
|
55
55
|
this.setActiveLanguage(activeLanguage ?? this.defaultLanguage);
|
|
56
56
|
});
|
|
57
57
|
}
|
|
58
|
+
createActiveLanguageLoader$() {
|
|
59
|
+
const language = this.localizationConfig.activeLanguageLoader?.();
|
|
60
|
+
if (isObservable(language)) {
|
|
61
|
+
return language;
|
|
62
|
+
}
|
|
63
|
+
if (language instanceof Promise) {
|
|
64
|
+
return from(language);
|
|
65
|
+
}
|
|
66
|
+
return of(language);
|
|
67
|
+
}
|
|
58
68
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
59
69
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizationService, providedIn: 'root' }); }
|
|
60
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-angular-localization.mjs","sources":["../../../../libs/angular/localization/src/lib/localization.config.ts","../../../../libs/angular/localization/src/lib/localization.service.ts","../../../../libs/angular/localization/src/lib/models/localization-feature.ts","../../../../libs/angular/localization/src/lib/features/with-http-language-header.ts","../../../../libs/angular/localization/src/lib/features/with-http-language-query-param.ts","../../../../libs/angular/localization/src/lib/loaders/browser-language-loader.ts","../../../../libs/angular/localization/src/odx-angular-localization.ts"],"sourcesContent":["import { APP_INITIALIZER, EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { createConfigTokens } from '@odx/angular/utils';\nimport { LocalizationService } from './localization.service';\nimport { LanguageLoaderFn, LocalizationFeature } from './models';\n\nexport const DEFAULT_AVAILABLE_LANGUAGES = ['en', 'de', 'es', 'fr', 'ja'];\n\nexport interface LocalizationConfig {\n activeLanguageLoader?: LanguageLoaderFn;\n availableLanguages: string[];\n}\n\nexport const { LocalizationConfig, LocalizationDefaultConfig, injectLocalizationConfig, provideLocalizationConfig } = createConfigTokens(\n 'Localization',\n '@odx/angular/internal/translate',\n {\n availableLanguages: DEFAULT_AVAILABLE_LANGUAGES,\n availableLocales: DEFAULT_AVAILABLE_LANGUAGES,\n } as LocalizationConfig,\n);\n\nexport function provideLocalization(config: Partial<LocalizationConfig>, ...features: LocalizationFeature[]): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideLocalizationConfig(config),\n {\n provide: APP_INITIALIZER,\n useFactory: (localizationService: LocalizationService) => () => localizationService.loadActiveLanguage(),\n deps: [LocalizationService],\n multi: true,\n },\n features,\n ]);\n}\n","import { Injectable, Injector, inject, runInInjectionContext } from '@angular/core';\nimport { getLanguageCode } from '@odx/angular/utils';\nimport { BehaviorSubject, distinctUntilChanged, filter, firstValueFrom, from, shareReplay } from 'rxjs';\nimport { injectLocalizationConfig } from './localization.config';\n\n@Injectable({ providedIn: 'root' })\nexport class LocalizationService {\n private readonly injector = inject(Injector);\n private readonly localizationConfig = injectLocalizationConfig();\n private readonly availableLanguageSet = new Set(this.localizationConfig.availableLanguages);\n private readonly activeLanguage$$ = new BehaviorSubject<string | undefined>(undefined);\n\n public readonly activeLanguage$ = this.activeLanguage$$.pipe(filter(Boolean), distinctUntilChanged(), shareReplay({ refCount: true }));\n public readonly availableLanguages = Array.from(this.availableLanguageSet);\n public readonly defaultLanguage = this.availableLanguages[0];\n\n public getActiveLanguage(): string {\n return this.activeLanguage$$.getValue() ?? this.defaultLanguage;\n }\n\n public setActiveLanguage(language: string): void {\n if (this.availableLanguageSet.has(language)) {\n this.activeLanguage$$.next(language);\n return;\n }\n const languageCode = getLanguageCode(language);\n if (this.availableLanguageSet.has(languageCode)) {\n this.activeLanguage$$.next(languageCode);\n return;\n }\n this.activeLanguage$$.next(this.defaultLanguage);\n }\n\n public async loadActiveLanguage(): Promise<void> {\n return runInInjectionContext(this.injector, async () => {\n const activeLanguageLoader$ = from(this.localizationConfig.activeLanguageLoader?.() ?? []);\n const activeLanguage = await firstValueFrom(activeLanguageLoader$).catch(() => null);\n this.setActiveLanguage(activeLanguage ?? this.defaultLanguage);\n });\n }\n}\n","import { EnvironmentProviders, Provider } from '@angular/core';\n\nexport type LocalizationFeature = EnvironmentProviders & { ɵodxBrand: '@odx/angular/localization::LocalizationFeature' };\n\nexport function makeLocalizationFeature(provider: Provider[] | EnvironmentProviders): LocalizationFeature {\n return provider as never as LocalizationFeature;\n}\n","import { HttpInterceptorFn, provideHttpClient, withInterceptors } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { matchUrl } from '@odx/angular/utils';\nimport { switchMap, take } from 'rxjs';\nimport { LocalizationService } from '../localization.service';\nimport { LocalizationFeature, makeLocalizationFeature } from '../models';\n\nexport const HTTP_LANGUAGE_HEADER = 'Accept-Language';\n\nexport interface HttpLanguageHeaderInterceptorConfig {\n allowedUrls: Array<string | RegExp>;\n headerName?: string;\n}\n\nexport function httpLanguageHeaderInterceptor({ allowedUrls, headerName }: HttpLanguageHeaderInterceptorConfig): HttpInterceptorFn {\n return (req, next) => {\n const language$ = inject(LocalizationService).activeLanguage$.pipe(take(1));\n for (const allowedUrl of allowedUrls) {\n if (!matchUrl(req.url, allowedUrl)) continue;\n return language$.pipe(switchMap((language) => next(req.clone({ setHeaders: { [headerName ?? HTTP_LANGUAGE_HEADER]: language } }))));\n }\n return next(req);\n };\n}\n\nexport function withHttpLanguageHeader(config: HttpLanguageHeaderInterceptorConfig): LocalizationFeature {\n const providers = provideHttpClient(withInterceptors([httpLanguageHeaderInterceptor(config)]));\n\n return makeLocalizationFeature(providers);\n}\n","import { HttpInterceptorFn, provideHttpClient, withInterceptors } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { matchUrl } from '@odx/angular/utils';\nimport { switchMap, take } from 'rxjs';\nimport { LocalizationService } from '../localization.service';\nimport { LocalizationFeature, makeLocalizationFeature } from '../models';\n\nexport const HTTP_LANGUAGE_QUERY = 'language';\n\nexport interface HttpLanguageQueryParamInterceptorConfig {\n allowedUrls: Array<string | RegExp>;\n queryParamName?: string;\n}\n\nexport function withHttpLanguageQueryParamInterceptor({ allowedUrls, queryParamName }: HttpLanguageQueryParamInterceptorConfig): HttpInterceptorFn {\n return (req, next) => {\n const language$ = inject(LocalizationService).activeLanguage$.pipe(take(1));\n for (const allowedUrl of allowedUrls) {\n if (!matchUrl(req.url, allowedUrl)) continue;\n return language$.pipe(switchMap((language) => next(req.clone({ setParams: { [queryParamName ?? HTTP_LANGUAGE_QUERY]: language } }))));\n }\n return next(req);\n };\n}\n\nexport function withHttpLanguageQueryParam(config: HttpLanguageQueryParamInterceptorConfig): LocalizationFeature {\n const providers = provideHttpClient(withInterceptors([withHttpLanguageQueryParamInterceptor(config)]));\n\n return makeLocalizationFeature(providers);\n}\n","import { inject } from '@angular/core';\nimport { WindowRef } from '@odx/angular';\nimport { LanguageLoaderFn } from '../models';\n\nexport const browserLanguageLoader: LanguageLoaderFn = async () => {\n return inject(WindowRef).getLanguage();\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"odx-angular-localization.mjs","sources":["../../../../libs/angular/localization/src/lib/localization.config.ts","../../../../libs/angular/localization/src/lib/localization.service.ts","../../../../libs/angular/localization/src/lib/models/localization-feature.ts","../../../../libs/angular/localization/src/lib/features/with-http-language-header.ts","../../../../libs/angular/localization/src/lib/features/with-http-language-query-param.ts","../../../../libs/angular/localization/src/lib/loaders/browser-language-loader.ts","../../../../libs/angular/localization/src/odx-angular-localization.ts"],"sourcesContent":["import { APP_INITIALIZER, EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { createConfigTokens } from '@odx/angular/utils';\nimport { LocalizationService } from './localization.service';\nimport { LanguageLoaderFn, LocalizationFeature } from './models';\n\nexport const DEFAULT_AVAILABLE_LANGUAGES = ['en', 'de', 'es', 'fr', 'ja'];\n\nexport interface LocalizationConfig {\n activeLanguageLoader?: LanguageLoaderFn;\n availableLanguages: string[];\n}\n\nexport const { LocalizationConfig, LocalizationDefaultConfig, injectLocalizationConfig, provideLocalizationConfig } = createConfigTokens(\n 'Localization',\n '@odx/angular/internal/translate',\n {\n availableLanguages: DEFAULT_AVAILABLE_LANGUAGES,\n availableLocales: DEFAULT_AVAILABLE_LANGUAGES,\n } as LocalizationConfig,\n);\n\nexport function provideLocalization(config: Partial<LocalizationConfig>, ...features: LocalizationFeature[]): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideLocalizationConfig(config),\n {\n provide: APP_INITIALIZER,\n useFactory: (localizationService: LocalizationService) => () => localizationService.loadActiveLanguage(),\n deps: [LocalizationService],\n multi: true,\n },\n features,\n ]);\n}\n","import { Injectable, Injector, inject, runInInjectionContext } from '@angular/core';\nimport { getLanguageCode } from '@odx/angular/utils';\nimport { BehaviorSubject, Observable, distinctUntilChanged, filter, firstValueFrom, from, isObservable, of, shareReplay } from 'rxjs';\nimport { injectLocalizationConfig } from './localization.config';\n\n@Injectable({ providedIn: 'root' })\nexport class LocalizationService {\n private readonly injector = inject(Injector);\n private readonly localizationConfig = injectLocalizationConfig();\n private readonly availableLanguageSet = new Set(this.localizationConfig.availableLanguages);\n private readonly activeLanguage$$ = new BehaviorSubject<string | undefined>(undefined);\n\n public readonly activeLanguage$ = this.activeLanguage$$.pipe(filter(Boolean), distinctUntilChanged(), shareReplay({ refCount: true }));\n public readonly availableLanguages = Array.from(this.availableLanguageSet);\n public readonly defaultLanguage = this.availableLanguages[0];\n\n public getActiveLanguage(): string {\n return this.activeLanguage$$.getValue() ?? this.defaultLanguage;\n }\n\n public setActiveLanguage(language: string): void {\n if (this.availableLanguageSet.has(language)) {\n this.activeLanguage$$.next(language);\n return;\n }\n const languageCode = getLanguageCode(language);\n if (this.availableLanguageSet.has(languageCode)) {\n this.activeLanguage$$.next(languageCode);\n return;\n }\n this.activeLanguage$$.next(this.defaultLanguage);\n }\n\n public async loadActiveLanguage(): Promise<void> {\n return runInInjectionContext(this.injector, async () => {\n const activeLanguageLoader$ = this.createActiveLanguageLoader$();\n const activeLanguage = await firstValueFrom(activeLanguageLoader$).catch(() => null);\n this.setActiveLanguage(activeLanguage ?? this.defaultLanguage);\n });\n }\n\n private createActiveLanguageLoader$(): Observable<string | undefined> {\n const language = this.localizationConfig.activeLanguageLoader?.();\n if (isObservable(language)) {\n return language;\n }\n if (language instanceof Promise) {\n return from(language);\n }\n return of(language);\n }\n}\n","import { EnvironmentProviders, Provider } from '@angular/core';\n\nexport type LocalizationFeature = EnvironmentProviders & { ɵodxBrand: '@odx/angular/localization::LocalizationFeature' };\n\nexport function makeLocalizationFeature(provider: Provider[] | EnvironmentProviders): LocalizationFeature {\n return provider as never as LocalizationFeature;\n}\n","import { HttpInterceptorFn, provideHttpClient, withInterceptors } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { matchUrl } from '@odx/angular/utils';\nimport { switchMap, take } from 'rxjs';\nimport { LocalizationService } from '../localization.service';\nimport { LocalizationFeature, makeLocalizationFeature } from '../models';\n\nexport const HTTP_LANGUAGE_HEADER = 'Accept-Language';\n\nexport interface HttpLanguageHeaderInterceptorConfig {\n allowedUrls: Array<string | RegExp>;\n headerName?: string;\n}\n\nexport function httpLanguageHeaderInterceptor({ allowedUrls, headerName }: HttpLanguageHeaderInterceptorConfig): HttpInterceptorFn {\n return (req, next) => {\n const language$ = inject(LocalizationService).activeLanguage$.pipe(take(1));\n for (const allowedUrl of allowedUrls) {\n if (!matchUrl(req.url, allowedUrl)) continue;\n return language$.pipe(switchMap((language) => next(req.clone({ setHeaders: { [headerName ?? HTTP_LANGUAGE_HEADER]: language } }))));\n }\n return next(req);\n };\n}\n\nexport function withHttpLanguageHeader(config: HttpLanguageHeaderInterceptorConfig): LocalizationFeature {\n const providers = provideHttpClient(withInterceptors([httpLanguageHeaderInterceptor(config)]));\n\n return makeLocalizationFeature(providers);\n}\n","import { HttpInterceptorFn, provideHttpClient, withInterceptors } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { matchUrl } from '@odx/angular/utils';\nimport { switchMap, take } from 'rxjs';\nimport { LocalizationService } from '../localization.service';\nimport { LocalizationFeature, makeLocalizationFeature } from '../models';\n\nexport const HTTP_LANGUAGE_QUERY = 'language';\n\nexport interface HttpLanguageQueryParamInterceptorConfig {\n allowedUrls: Array<string | RegExp>;\n queryParamName?: string;\n}\n\nexport function withHttpLanguageQueryParamInterceptor({ allowedUrls, queryParamName }: HttpLanguageQueryParamInterceptorConfig): HttpInterceptorFn {\n return (req, next) => {\n const language$ = inject(LocalizationService).activeLanguage$.pipe(take(1));\n for (const allowedUrl of allowedUrls) {\n if (!matchUrl(req.url, allowedUrl)) continue;\n return language$.pipe(switchMap((language) => next(req.clone({ setParams: { [queryParamName ?? HTTP_LANGUAGE_QUERY]: language } }))));\n }\n return next(req);\n };\n}\n\nexport function withHttpLanguageQueryParam(config: HttpLanguageQueryParamInterceptorConfig): LocalizationFeature {\n const providers = provideHttpClient(withInterceptors([withHttpLanguageQueryParamInterceptor(config)]));\n\n return makeLocalizationFeature(providers);\n}\n","import { inject } from '@angular/core';\nimport { WindowRef } from '@odx/angular';\nimport { LanguageLoaderFn } from '../models';\n\nexport const browserLanguageLoader: LanguageLoaderFn = async () => {\n return inject(WindowRef).getLanguage();\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
1
2
|
import * as i0 from "@angular/core";
|
|
2
3
|
export declare class LocalizationService {
|
|
3
4
|
private readonly injector;
|
|
4
5
|
private readonly localizationConfig;
|
|
5
6
|
private readonly availableLanguageSet;
|
|
6
7
|
private readonly activeLanguage$$;
|
|
7
|
-
readonly activeLanguage$:
|
|
8
|
+
readonly activeLanguage$: Observable<string>;
|
|
8
9
|
readonly availableLanguages: string[];
|
|
9
10
|
readonly defaultLanguage: string;
|
|
10
11
|
getActiveLanguage(): string;
|
|
11
12
|
setActiveLanguage(language: string): void;
|
|
12
13
|
loadActiveLanguage(): Promise<void>;
|
|
14
|
+
private createActiveLanguageLoader$;
|
|
13
15
|
static ɵfac: i0.ɵɵFactoryDeclaration<LocalizationService, never>;
|
|
14
16
|
static ɵprov: i0.ɵɵInjectableDeclaration<LocalizationService>;
|
|
15
17
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export type LanguageLoaderFn = () =>
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
export type LanguageLoaderFn = () => Observable<string | undefined> | Promise<string | undefined> | string | undefined;
|